T1123-7班-16刘宇京的课程设计报告.doc_第1页
T1123-7班-16刘宇京的课程设计报告.doc_第2页
T1123-7班-16刘宇京的课程设计报告.doc_第3页
T1123-7班-16刘宇京的课程设计报告.doc_第4页
T1123-7班-16刘宇京的课程设计报告.doc_第5页
已阅读5页,还剩38页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

职工信息管理系统HUBEI UNIVERSITY OF AUTOMOTIVE TECHNOLOGYC语言程序设计课程设计报告课设题目: 职工信息管理系统 专 业: 自动化(电动车辆工程) 班 级: T1123-7班 姓 名: 刘宇京 成 绩: 完成日期: 2012年6月18日2012年6月22日 指导教师: 胡宁亚 目 录1.课程设计目的22.需求分析22.1要求22.2任务描述22.3运行环境32.4开发工具33.总体设计33.1系统流设计33.2系统模块设计44.详细设计54.1数据结构设计54.2模块接口设计64.3 以下是几个主要模块的流程图:75.运行结果105.1主菜单界面:105.2信息录入界面:105.3信息浏览界面:115.4 信息查询界面:115.5信息修改界面:126.程序调试与测试126.1程序调试126.2程序测试127.问题与不足128.建议129.编程体会1210.程序源代码:1211.参考文献1312.用户使用手册131.课程设计目的1) 通过课程设计,加深对结构化程序设计思想的理解,能对系统功能进行分析,并设计合理的模块化结构。2) 通过课程设计,进一步掌握C语言中重要的数据结构。掌握并熟练运用指针、链表、结构体、文件等数据结构。3) 通过课程设计,提高程序开发能力,能运用合理的控制流编写清晰高效的程序。4) 通过课程设计,培养C语言知识运用和自学能力,真正的把课堂上获得的知识运用起来,培养自己对程序编写的兴趣,并能独立设计和实现一个小型系统。5) 通过课程设计,加强了自己的程序分析能力。2.需求分析2.1要求1) 遵循软件开发过程的基本规范;能灵活应用,初步具备运用C程序解决实际问题的能力。2) 运用结构化程序设计方法,按照课程设计题目要求,完成包括需求分析、数据结构设计、概要设计、详细设计、编写代码、调试和测试C程序等过程。3) 学会利用数组、结构体、链表进行相关信息表示。4) 功能模块划分清晰,系统结构图符合功能操作要求,且有详尽的功能描述5) 各主要功能模块有详尽的流程图及描述,用函数的形式实现,且调用入口、功能、出口等关系正确。6) 所设计的C程序较好的可读性和可靠性;程序书写风格规范,注释清晰。7) 界面友好(良好的人机互交),凡需要输入信息时,都有较详尽的提示信息,并对输入信息有较完善的值域分析。8) 程序经上机调试通过,不应出现语法型、功能型错误,并获得满意的结果。9) 学会通过各功能性测试用例测试程序的能力,尽可能避免原则性错误的出现。10) 掌握编写、调试和测试C语言程序的基本技巧,充分理解结构化程序设计的基本方法。11) C语言课程设计报告的内容反应实际设计过程,且符合格式要求,无抄袭现象。2.2任务描述此系统以普通公司职工为背景,提供对职工信息的了新建、查询、统计等各项功能。具体功能实现如下:1) 能从键盘输入职工的信息,并能在输入时检查输入日期是否合法及职工号是否已经存在。2) 能从指定的文件中读入职工的信息。3) 能按职工号查询职工的信息。4) 能按学历统计职工数。5) 能查询到指定年份需要退休的职工的信息(男:60岁,女55岁)。6) 能删除指定职工号的职工信息。7) 能将职工信息保存在指定的文件中。8) 能显示所有职工信息。9) 能显示题目信息。10) 系统以菜单方式工作,界面清晰,易于操作。2.3运行环境1) WindowsXP/7系统2) VC+6.0编译环境2.4开发工具C语言3.总体设计3.1系统流设计 本系统的功能模块如图1所示,主要有以下模块:主菜单界面职工信息新建 职工信息显示职工信息导入职工信息保存 职工人数统计退出系统按职工号查询按指定年份查询该退休的职工信息显示所有职工信息显示题目信息 职工信息查询删除职工信息图1系统功能模块图 3.2系统模块设计1) 主菜单界面:构造函数int menu_select(),实现系统主菜单的显示。2) 职工信息的新建:构造函数void createRec(),实现职工信息的录入。其中构造了一个用于判断输入日期是否合法的函数judgedate(char date)。3) 职工信息的保存:构造函数void writeInfo(),实现将输入的职工信息保存到指定的文件中。4) 职工信息的读入:构造函数loadRec(),实现将保存到文件中的信息读出来。5) 职工信息的查询:分别构造函数void searchRec()及void findRec()实现按职工号查询并显示职工信息和按指定年份查询需要退休的职工信息并显示。6) 职工人数的统计:构造函数void countRec(),实现根据职工学历统计职工人数。7) 职工信息的删除:构造函数void deleteRec(),实现根据指定的职工号删除 相应的职工记录。4.详细设计4.1数据结构设计根据系统要求,系统中需要保存的数据信息,其结构如下:数据项名称数据项系统表示数据类型数据长度备注职工号num字符数组20=6姓名name字符数组20date,4),可是实现不了,胡老师交我用printf(“atoi(fun)”); printf(“atoi(year)”);year为我定义的从键盘接受的字符数组用atoi(year)与atoi(fun)比较,那样一下就知道错在哪了。10.程序源代码:/*所使用的有头文件*/#include#include#include#include#include#define LEN sizeof(struct worker)/*结构体定义*/struct workerchar num20;char name20;char sex5;char date20; char edu20;double wage;char add20;char tel12;struct worker *next;/*函数声明*/int judgedate(char date); /*判断日期是否合理*/void createRec(); /*新建职工信息*/void loadRec(); /*从指定文件中读入职工信息*/void listRec(); /*显示所有职工信息*/void exam(); /*显示题目*/void searchRec(); /*按职工号查询职工信息*/void countRec(); /*按学历统计职工人数*/void findRec(); /*查询到指定年份需要退休的职工信息*/void deleteRec(); /*删除指定职工号的职工信息*/void writeInfo(); /*将职工信息保存在指定的文件中*/void exit0(); /*退出*/int menu_select();/*主菜单*/*链表操作所用结构体指针*/struct worker *head=NULL,*p1,*p2,*p3;/*定义结构体指针head 为头指针p1 为输入数据缓存空间指针p2 为尾指针*/*职工记录保存标志全局变量*/intwriteinfo_flag=0;/*主函数*/int main() loadRec();for(;)switch(menu_select() case 1: system(cls); createRec();break;case 2: system(cls); searchRec();break;case 3: system(cls); countRec(); break; case 4: system(cls); findRec(); break;case 5: system(cls); deleteRec();break;case 6: system(cls); writeInfo();break;case 7: system(cls); listRec(); break;case 8: system(cls); exam(); break;case 0: system(cls); exit0(); return 0;default : getchar();printf(n 选择错误请正确输入你的选择(0-8);printf(n 按回车键返回.n);getch();system(cls); /*清屏*/ return 0;/*主菜单*/int menu_select()int c;printf(tt=菜单=n);printf(ttt1.新建职工信息n);printf(ttt2.按职工号查询职工信息n);printf(ttt3.按学历统计职工人数n);printf(ttt4.查询到指定年份需要退休的职工信息n);printf(ttt5.删除指定职工号的职工信息n);printf(ttt6.将职工信息保存在指定的文件中n);printf(ttt7.显示所有职工信息n);printf(ttt8.显示题目信息n);printf(ttt0.退出(任何情况下按Ctrl+C 退出程序)n);printf(tt=n);printf(nnntt 输入你的选择(0-8):);scanf(%d,&c);return c;/*从磁盘文件导入职工信息到内存*/void loadRec()FILE *fp;int n=0;if(fp=fopen(d:file.txt,r)=NULL) /*打开文件*/printf(文件不存在或无法打开!n);return;head=p1=(struct worker *)malloc(LEN);/*开辟一个新单元*/p1-next =NULL;while(!feof(fp)n+;fscanf(fp,%s%s%s%s%s%lf%s%s, p1-num,p1-name,p1-sex,p1-date,p1-edu,&p1-wage,p1-add,p1-tel);if(p1-num0num09) n-;break; p2=(struct worker *)malloc(LEN); /*开辟一个新单元*/p1-next =p2;p3=p1;p1=p2;p1-next =NULL;free(p2);p3-next=NULL;printf(n %d项信息输入完毕,按回车键返回.n,n);getchar();system(cls); /*清屏*/writeinfo_flag=0; /*设置保存记录标志*/if( fclose(fp) ) /* 关闭文件 */ printf( Can not close the file!n ); exit(0); /*判断日期输入是否正确*/int judgedate(char date) int year,month,day,i,isrunnian; for(i=0,year=0;i4;i+) year=year*10+(datei-0); /*把表示年份的字符串转换成整形*/ for(i=5,month=0;i7;i+) month=month*10+(datei-0); /*把表示月份字符串转换成整形*/ for(i=8,day=0;i10;i+) day=day*10+(datei-0); /*把表示日字符串转换成整形*/ if(date4!=-|date7!=-) return 0; else if(month12) return 0; else isrunnian=(year%4=0&year%100!=0|year%400=0); /*判断闰年*/ if(month=1|month=3|month=5|month=7|month=8|month=10|month=12) if(day31) return 0; else return 1; else if(month=4|month=6|month=9|month=11) if(day30) return 0; else return 1; else if(isrunnian=1&month=2) if(day29) return 0; else return 1; else if(day28) return 0; else return 1; /*新建职工记录*/void createRec()int n,i;if(head!=0) p3=head;while( p3-next!=NULL)p3=p3-next;getchar();printf(n 职工信息数据库已存在,新建职工信息将接续在信息库的后面,按回车键继续.:n); getchar();system(cls); /*清屏*/p3-next=p1=(struct worker *)malloc(LEN);/*开辟一个新单元*/ else head=p1=(struct worker *)malloc(LEN); /*开辟一个新单元*/ p1-next =NULL; printf(nn 请输入希望建立的职工基本信息条数n(n1&n10):n); doscanf(%d,&n); if(n10) printf(nn输入范围有误,请重新输入希望建立的职工基本信息条数n(n1&n10):n);while(n10); /*开始建立n条职工基本信息记录*/ printf(nn 请每行按职工号 职工姓名 性别 出生日期 学历 工资 住址 电话的形式输入%d条职工记录:n,n); printf(备注:n); printf(1 (num=6位) n); printf(2 (name=10汉字) n); printf(3 性别用nan和nv分别代表男性和女性 n); printf(4 出生日期长度为10位,形如:年-月-日(YYYY-YY-YY) n); printf(5 学历:zhongzhuan,dazhuan,benke,shuoshi,boshi n); printf(6 工资用数字 n); printf(7 住址输入到地区即可 n); printf(8 电话为手机号码十一位 n); printf(系统功能尚待完善,请用户严格按照备注说明输入信息以防造成系统不能运行。谢谢合作!n); printf(请记住你创建的职工号以便以后查询!n);for(i=0;inum);scanf(%s, p1-name);scanf(%s, p1-sex);scanf(%s, p1-date);scanf(%s, p1-edu);scanf(%lf,&p1-wage);scanf(%s, p1-add);scanf(%s, p1-tel);if(atoi(p1-num)=999999)doprintf(nn职工号输入有误,超出范围);printf(nn职工号最大六位,请重新输入:);scanf(%s,p1-num);while(atoi(p1-num)=999999); if(judgedate(p1-date)=0)do printf(nn职工出身日期输入有误!); printf(nn请重新输入职工出生日期:); scanf(%s,p1-date);while(judgedate(p1-date)=0); if(strlen(p1-tel)!=11)do printf(nn手机号输入位数有误!n); printf(请重新输入手机号(tel=11位):); scanf(%s,p1-tel);while(strlen(p1-tel)11); p2=(struct worker *)malloc(LEN); /*开辟一个新单元*/p1-next =p2;p3=p1;p1=p2;p1-next =NULL;free(p2);p3-next=NULL;printf(n %d项信息输入完毕,按回车键返回.n,n);getch();system(cls); /*清屏*/writeinfo_flag=1; /*清除保存记录标志*/*显示所有职工信息*/void listRec()if(head=NULL)printf(n文件中没有职工信息,按回车键返回.n);getch();system(cls);return ;printf(n所有职工信息显示如下:n);printf(n职工号t职工姓名t性别t出生日期t学历t工资tt住址tt电话 n); p1=head;while(p1!=NULL)printf(%st%stt%st%st%st%lft%st%sn, p1-num,p1-name,p1-sex,p1-date,p1-edu,p1-wage,p1-add,p1-tel); p1=p1-next; system(pause);getchar();system(cls); /*清屏*/return ;/*查询职工信息*/ void searchRec()char num20;p1=head;if(p1=NULL) printf(nn职工信息数据库为空! n);printf(n 按回车键返回主菜单建立职工信息.n);getch();system(cls); /*清屏*/return ;printf(nn 请输入职工号以便查证:n);scanf(%s,num);while(p1!=NULL)if(strcmp(p1-num,num )=0) printf(t该职工信息如下:nt 职工号:);printf(%sn,p1-num );printf(t 职工姓名:);printf(%sn,p1-name );printf(t 职工性别:);printf(%sn,p1-sex ); printf(t 职工出生日期:);printf(%sn,p1-date ); printf(t 职工学历:);printf(%sn,p1-edu); printf(t 职工工资:);printf(%lfn,p1-wage); printf(t 职工住址:);printf(%sn,p1-add ); printf(t 职工电话:);printf(%sn,p1-tel ); break;else p1=p1-next ;if(p1=NULL) printf(nn找不到该职工信息!n); printf(n 按回车键返回.n); getch(); system(cls); /*清屏*/*按学历统计职工人数*/void countRec() char edu20;int n=0;p1=head;if(head=NULL)getchar();printf(n 职工信息数据库为空! n);printf(n按回车键返回.n);getch();system(cls);/*清屏*/return ;printf(nn请输入你要统计的学历名称以便查询:n);printf(nn备注:学历包含zhongzhuan,dazhuan,benke,shuoshi,boshin);scanf(%s,edu);while(p1!=NULL)if(strcmp(p1-edu,edu)=0)n+;p1=p1-next;if(n=0) printf(nn没有该学历的职工!n); printf(nn按回车键返回.n); getch(); system(cls); /*清屏*/ return; elseprintf(人数为%d,n);printf(n 按回车键返回.);getch();system(cls); /*清屏*/*查询到指定年份需要退休的职工信息*/void findRec() int n=0;char year10,fun10 ; char sex10;p1=head;if(p1=NULL) printf(nn职工信息数据库为空! n); printf(nn按回车键返回.);getch();system(cls); /*清屏*/return ;printf(nn请输入指定的年份及性别以便查询:n);printf(nn说明:年份为四位,例如1991;性别分别用nan和nv代表男女。n); printf(nn请严格按照说明输入,否则实现不了查询任务。 );scanf(%s%s,year,sex);while(p1!=NULL) strncpy(fun,p1-date,4);fun4=0;if(strcmp(p1-sex,sex)=0) if(atoi(year)-atoi(fun)=59) printf(年龄为%dn,(atoi(year)-atoi(fun)+1); printf(t该职工信息如下:nt 职工号:); printf(%sn,p1-num ); printf(t 职工姓名:); printf(%sn,p1-name ); printf(t 职工性别:); printf(%sn,p1-sex ); printf(t 职工出生日期:); printf(%sn,p1-date ); printf(t 职工学历:); printf(%sn,p1-edu); printf(t 职工工资:); printf(%lfn,p1-wage); printf(t 职工住址:); printf(%sn,p1-add ); printf(t 职工电话:); printf(%sn,p1-tel ); n+; p1=p1-next;if(n=0) printf(nn没有要退休的职工!n); printf(n 按回车键返回.n); getch(); system(cls); /*清屏*/*删除指定职工号的职工信息*/void deleteRec()char num20;if(head=NULL) getchar();printf(n 职工信息数据库为空,不能删除,按回车键将返回:n);getchar();system(cls);/*清屏*/return;p1=head;printf(nn请输入要删除的职工号:n);scanf(%s,num);while(strcmp(num,p1-num )!=0&p1-next!=NULL)p2=p1;p1=p1-next ;if(strcmp(num,p1-num )=0)if(head-next=NULL)free(head);head=NULL;else if(head=p1) head=p1-next;free(p1);else p2-next=p1-next;free(p1);printf(n已经删除完毕;);else printf(nn找不到该职工号信息!); getchar(); printf(按回车键返回:n); getchar(); syste

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论