1、一、 课程设计目标经过本课程设计,强化上机动手能力,使学生在理论和实践基础上深入巩固C语言程序设计课程学习内容,掌握工程软件设计基础方法。学会将知识应用于实际方法,提升分析和处理问题能力,增加综合能力。为后续各门计算机课程学习打下坚实基础。为毕业设计和以后工作打下必需基础。二、课程设计内容针对某企业职员,对其信息进行系统管理。三、需求分析对所开发系统功效、性能描述,想要实现目标。此系统可对该厂职员进行信息录入,修改,删除,添加,查询,排序,统计,打印等功效。用户可经过提醒选择进入某一功效界面,然后进行对职员信息管理。每一功效模块全部充足为用户考虑,编排具体。使用户能够方便快捷了解职员信息,立即
2、有效对职员进行信息管理。四、概要设计1系统结构图(功效模块图)对系统进行分析,给出系统结构图;分析:此系统,为方便用户输入,和使程序清楚化,所以本人采取模块法,将每一功效模块化,使程序中各函数间调用愈加明了。以下为系统模块图。2功效模块说明对各个模块进行功效描述。录入模块:输入该厂现有职员信息并保留和文件中,方便以后进行排序,更新,统计,打印等操作。输出模块:将全部职员信息,或所需职员信息输出于屏幕上,用于打印或查询职员信息。更新模块:此模块又分为删除,添加,修改三个模块。 删除模块:对已退休或离开该厂职员进行删除操作。 添加模块:添加新入厂职员信息并保留起来。 修改模块:找到该职员并,选择所
3、要修改选项。排序模块:本程序只对职员年纪进行从小到大排序。查询模块:此模块分为按姓名,年纪,工作查询。姓名查询模块:输入要查找姓名,找到就输出其信息。找不到则输出无此人。 年纪查询模块:输入要查找年纪,找到就输出其信息。找不到则输出无此人。工作查询模块:输入要查找工作,找到就输出其信息。找不到则输出无此人。统计模块:此模块分为,统计年纪,性别和工作。统计年纪:输入要统计年纪,查找并输出,若无此年纪则输出暂无此年纪职员。统计性别:输入要统计性别,查找并输出,若无此性别则输出暂无此性别职员。统计工作:输入要统计工作,查找并输出,若无此工作则输出暂无此工作职员。保留模块:将现有信息保留于文件中,以防
4、丢失。系统模块图王氏企业职员信息管理系统 输入i值,进入对应模块保留模块退出系统统计模块排序模块查询模块更新模块输出模块录入模块按年纪统计修改职员 信息添加职员信息按工作统计按性别统计按年纪排序按工作查询按年纪 查寻按姓名查询删除职员信息按任意键返回主界面五、具体设计及运行结果步骤图, 函数之间相互调用图示 ,程序设计及编码, 运行结果。结束保留模块输入i开始统计模块排序模块查询模块更新模块输出模块录入模块判定i值主函数: i=1 i=6 i=2 i=3 i=4 i=5 i=0退出系统结束打开文件关闭文件i+输出职员信息ini=0 输出模块:开始i=0 否开始 录入模块: 是 结束打开文件关闭
5、文件i+输入职员信息in-1jni=i+1j=j+1交换i和j信息i年纪大于j年纪j=i+1i=0开始 否 i=3 i=1 i=2 i=0 是 否 否 是 是 否 是输出信息结束输入i开始结束返回主界面i=0退出系统统计性别统计年纪统计工作判定i值输入i开始结束返回主界面i=0退出系统工作查询姓名查询年纪查询判定i值查询模块: 统计模块: i=1 i=3 i=2 i=0 i=1 i=2 i=3 i=0 否 否 是 是 六、调试情况,设计技巧及体会1、对自己设计进行评价,指出合理和不足之处,提出改善方案。自我评价:本人自我认为此系统还不错,程序简练明了,功效齐全,而且充足从用户角度进行编排,易于
6、实施。经本人数次调试最终出现0个错误和警告,而且从未有过死循环,用户一旦输错,立即会有提醒,此程序相当健壮。因本人定义了全局变量,使操作愈加简单易行,使用了结构体数组,避开链表那样复杂操作。但不足之处便是没有链表那样节省内存。如有机会下次可能会用链表。2、在设计过程中感受。在把字符一个个敲上屏幕时,坐在那一动不动相当枯燥,一想到过会儿就能看到自己亲自编程序,就只能忍吧 。当看到模块一个个运行后和预料中完全一样时,郁闷心情立马被一个成就感替换。就想赶快编完看看自己杰作。然而也会碰到自己处理不了问题,就只能去求老师了。这次最大感受就是当你竭尽全力干一件事时,就没有能挡住你困难。七、参考文件C语言书
7、本。八、附录:源代码 #include #include #define MAX 100 char filename20; /*文件名*/ FILE *fp; int n; /*目前该厂人数*/ struct date /*时间结构体*/ int year; int mouth; int day; ; struct person /*职员信息结构体*/ char name10; /*姓名*/ int age; /*年纪*/ char job10; /*工作*/ char sex10; /*性别*/ char address20; /*地址*/ char phone10; /*电话*/ stru
8、ct date in_time; /*入厂时间*/ t,workerMAX;/*录入模块*/ void input() int i; clrscr(); printf(nn请输入文件名n); scanf(%s,filename); printf(开始输入职员信息n); printf(n请输入现有职员人数n); scanf(%d,&n); if(fp=fopen(filename,w)=NULL) printf(不能建立!n); exit(); for(i=0;in;i+) printf(第%d个人信息:n,i+1); printf(姓名n); scanf(%s,workeri.name); p
9、rintf(年纪n); scanf(%d,&workeri.age); printf(工作n); scanf(%s,workeri.job); printf(性别n); scanf(%s,workeri.sex); printf(地址n); scanf(%s,workeri.address); printf(电话n); scanf(%s,workeri.phone); printf(入厂年n); scanf(%d,&workeri.in_time.year); printf(入厂月n); scanf(%d,&workeri.in_time.mouth); printf(入厂日n); scanf
10、(%d,&workeri.in_time.day); printf(录入完成,按任意键返回主菜单n); getch(); for(i=0;in;i+) fprintf(fp,%s %d %s %s %s %s %d-%d-%dn,workeri.name,workeri.age,workeri.job,workeri.sex,workeri.address,workeri.phone,workeri.in_time.year,workeri.in_time.mouth,workeri.in_time.day); fclose(fp);/*输出模块*/ void output() int i;
11、if(fp=fopen(filename,r)=NULL) printf( 临时未有任何信息,请按任意键返回主菜单进行信息录入n); getch(); exit(); clrscr(); printf( 该厂职员信息:n); printf(姓名t年纪t工作t性别t地址t电话t入厂时间 n); for(i=0;in;i+) fscanf(fp,%s %d %s %s %s %s %d-%d-%d,workeri.name,&workeri.age,workeri.job,workeri.sex,workeri.address,workeri.phone,&workeri.in_time.year
12、,&workeri.in_time.mouth,&workeri.in_time.day); printf(%st%dt%st%st%st%st%d-%d-%d n,workeri.name,workeri.age,workeri.job,workeri.sex,workeri.address,workeri.phone,workeri.in_time.year,workeri.in_time.mouth,workeri.in_time.day); fclose(fp); printf( 输出完成,按任意键返回主菜单n); getch(); /*保留模块*/ void save() int i
13、; if(fp=fopen(filename,w)=NULL) /*打开文件*/ printf(n 不能打开该文件!); exit(); for(i=0;in;i+) fprintf(fp,%s %d %s %s %s %s %d-%d-%dn,workeri.name,workeri.age,workeri.job,workeri.sex,workeri.address,workeri.phone,workeri.in_time.year,workeri.in_time.mouth,workeri.in_time.day); fclose(fp); /*读取信息*/void read_mes
14、sage() int i; printf(输入文件名n); scanf(%s,filename); printf(n请输入现有职员人数n); scanf(%d,&n); if(fp=fopen(filename,r)=NULL) printf( 临时未有任何信息,请按任意键返回主菜单进行信息录入n); getch(); for(i=0;in;i+) fscanf(fp,%s %d %s %s %s %s %d-%d-%d,workeri.name,&workeri.age,workeri.job,workeri.sex,workeri.address,workeri.phone,&worker
15、i.in_time.year,&workeri.in_time.mouth,&workeri.in_time.day); fclose(fp);/*修改模块*/void modify() int i,flag,choice; char ch,namekey10; flag=0; clrscr(); printf( 开始修改n); do printf(请输入要修改职员姓名n); scanf(%s,namekey); for(i=0;in;i+) if(strcmp(workeri.name,namekey)=0) printf(是否修改此人(y/n)n); printf(姓名t年纪t工作t性别t
16、地址t电话t入厂时间 n); printf(%st%dt%st%st%st%st%d-%d-%d n,workeri.name,workeri.age,workeri.job,workeri.sex,workeri.address,workeri.phone,workeri.in_time.year,workeri.in_time.mouth,workeri.in_time.day); getchar(); /*接收回车*/ ch=getchar(); if(ch=y) printf( *您要修改那一项?*nn); printf( *1,姓名*nn); printf( *2,年纪*nn); p
17、rintf( *3,工作*nn); printf( *4,性别*nn); printf( *5,地址*nn); printf( *6,电话*nn); printf( *7,入厂年*nn); printf( *8,入厂月*nn); printf( *9,入厂日*nn); printf( 请选择(1-9)n); scanf(%d,&choice); switch(choice) case 1: printf(输入修改后姓名n); scanf(%s,workeri.name); break; case 2: printf(输入修改后年纪n); scanf(%d,&workeri.age); brea
18、k; case 3: printf(输入修改后工作n); scanf(%s,workeri.job); break; case 4: printf(输入修改后性别n); scanf(%s,workeri.sex); break; case 5: printf(输入修改后地址n); scanf(%s,workeri.address); break; case 6: printf(输入修改后电话n); scanf(%s,workeri.phone); break; case 7: printf(输入修改后入厂年n); scanf(%d,&workeri.in_time.year); break;
19、case 8: printf(输入修改后入厂月n); scanf(%d,&workeri.in_time.mouth); break; case 9: printf(输入修改后入厂日n); scanf(%d,&workeri.in_time.day); break; printf(修改后信息n); printf(姓名t年纪t工作t性别t地址t电话t入厂时间 n); printf(%st%dt%st%st%st%st%d-%d-%d n,workeri.name,workeri.age,workeri.job,workeri.sex,workeri.address,workeri.phone,w
20、orkeri.in_time.year,workeri.in_time.mouth,workeri.in_time.day); else break; else if(i=n) printf(此人不存在n); printf(n是否继续输入(y/n)n); getchar(); /*接收回车*/ ch=getchar(); if(ch=y) printf(继续n); flag=1; else flag=0; while(flag=1); printf(修改完成,按任意键返回主菜单n) ;getch(); /*添加模块*/void add() int i,flag=0; char ch; clrs
21、cr(); printf(n 开始添加新职员n); printf( *-*nn);do i=n; printf(n 请输入添加职员信息(姓名,年纪,工作,性别,地址,电话,入厂时间)n); printf(姓名n); scanf(%s,workeri.name); printf(年纪n); scanf(%d, &workeri.age); printf(工作n); scanf(%s,workeri.job); printf( 性别n); scanf(%s,workeri.sex); printf(地址n); scanf(%s,workeri.address); printf(电话n); scan
22、f( %s,workeri.phone); printf(入厂年n); scanf(%d,&workeri.in_time.year); printf(入厂月n); scanf(%d,&workeri.in_time.mouth); printf(入厂日n); scanf(%d,&workeri.in_time.day); n+; printf(n添加成功!是否继续输入(y/n)n); getchar(); /*接收回车*/ ch=getchar(); if(ch=y) printf(继续n); flag=1; else flag=0; while(flag=1); printf(添加完成,按
23、任意键返回主菜单n) ; getch(); /*删除模块*/void del() int i,flag; char ch,namekey10; flag=0; clrscr(); printf(开始删除n); do printf(请输入要删除职员名字n); scanf(%s,namekey); for(i=0;in;i+) if(strcmp(workeri.name,namekey)=0) /*查找此人*/ printf(是否删除此人(y/n)n); printf(姓名t年纪t工作t性别t地址t电话t入厂时间 n); printf(%st%dt%st%st%st%st%d-%d-%d n,w
24、orkeri.name,workeri.age,workeri.job,workeri.sex,workeri.address,workeri.phone,workeri.in_time.year,workeri.in_time.mouth,workeri.in_time.day); getchar(); /*接收回车*/ ch=getchar(); if(ch=y) for(;in;i+) workeri=workeri+1; n-; else break; else if(i=n) printf(此人不存在n); printf(n是否继续输入(y/n)n); getchar(); /*接收
25、回车*/ ch=getchar(); if(ch=y) printf(继续n); flag=1; else flag=0; while(flag=1); printf(操作完成,按任意键返回主菜单n) ; getch(); /*更新模块*/ void renew() int i; do clrscr(); printf(nnn *更新职员信息*nn); printf( 按1,添加职员信息nn); printf( 按2,删除职员信息nn); printf( 按3,修改职员信息nn); printf( 按0,返回主菜单n); printf( 请选择(0-3)n); scanf(%d,&i); sw
26、itch(i) case 1: add(); break; case 2: del(); break; case 3: modify(); break; case 0: break; while(i!=0); save(); /*按姓名查找*/void name_cha() int i,j; char namekey10; j=0; clrscr(); printf( 输入要查询职员姓名n); scanf(%s,namekey); for(i=0;in;i+) if(strcmp(workeri.name,namekey)=0) /*查找此人*/ printf(-职员信息-n); printf
27、(姓名t年纪t工作t性别t地址t电话t入厂时间 n); printf(%st%dt%st%st%st%st%d-%d-%d n,workeri.name,workeri.age,workeri.job,workeri.sex,workeri.address,workeri.phone,workeri.in_time.year,workeri.in_time.mouth,workeri.in_time.day); else j+; if(j=n) printf(此人不存在n); printf(按任意键返回主菜单n); getch(); /*按年纪查找*/void age_cha() int i,
28、j; int agekey; j=0; clrscr(); printf( 输入要查询职员年纪n); scanf(%d,&agekey); for(i=0;in;i+) if(workeri.age=agekey) printf(-职员信息-n); printf(姓名t年纪t工作t性别t地址t电话t入厂时间 n); printf(%st%dt%st%st%st%st%d-%d-%d n,workeri.name,workeri.age,workeri.job,workeri.sex,workeri.address,workeri.phone,workeri.in_time.year,worke
29、ri.in_time.mouth,workeri.in_time.day); else j+; if(j=n) printf(此人不存在n); printf(按任意键返回主菜单n); getch(); /*按工作查找*/void job_cha() int i,j; char jobkey10; j=0; clrscr(); printf(输入要查询职员职务n); scanf(%s,jobkey); for(i=0;in;i+) if(strcmp(workeri.job,jobkey)=0) printf(-职员信息-n); printf(姓名t年纪t工作t性别t地址t电话t入厂时间 n);
30、 printf(%st%dt%st%st%st%st%d-%d-%d n,workeri.name,workeri.age,workeri.job,workeri.sex,workeri.address,workeri.phone,workeri.in_time.year,workeri.in_time.mouth,workeri.in_time.day); else j+; if(j=n) printf(此人不存在n); printf(按任意键返回主菜单n); getch(); /*查询模块*/ void inquire() int i; do clrscr(); printf(nnn *查
31、询职员信息*nn); printf( *1,按姓名查询*nn); printf( *2,按年纪查询*nn); printf( *3,按工作查询*nn); printf( *0,返回主菜单n); printf( 请选择(0-3)n); scanf(%d,&i); switch(i) case 1: name_cha();break; case 2: age_cha(); break; case 3: job_cha();break; case 0: break; while(i!=0); /*排列模块*/ void line() int i,j; clrscr(); printf(-按年纪排序-
32、nn); for(i=0;in-1;i+) for(j=i+1;jworkerj.age) t=workeri; workeri=workerj; workerj=t; printf(姓名t年纪t工作t性别t地址t电话t入厂时间 n); for(i=0;in;i+) printf(%st%dt%st%st%st%st%d-%d-%d n,workeri.name,workeri.age,workeri.job,workeri.sex,workeri.address,workeri.phone,workeri.in_time.year,workeri.in_time.mouth,workeri.in_time.day); printf(按任意键返回主菜单n); getch(); /*按年纪统计*/ void count_age() int i,j; int agekey; j=0; clrscr(); printf( 输入要统计职员年纪n); scanf(%d,&agekey); for(i=0;in;i+) if(workeri.age=agekey) printf(-职员信息-n); printf(姓名t年纪t