职工门禁系统设计(共32页).doc

上传人:飞****2 文档编号:17342448 上传时间:2022-05-23 格式:DOC 页数:32 大小:109.50KB
返回 下载 相关 举报
职工门禁系统设计(共32页).doc_第1页
第1页 / 共32页
职工门禁系统设计(共32页).doc_第2页
第2页 / 共32页
点击查看更多>>
资源描述

《职工门禁系统设计(共32页).doc》由会员分享,可在线阅读,更多相关《职工门禁系统设计(共32页).doc(32页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、精选优质文档-倾情为你奉上C语言工厂门禁系统设计一、总体设计1程序的总体设计 确定界面,使用户可选择操作项目(录入,修改,查询,评分)。 录入功能:使用结构体,要求用户输入姓名、性别、工号、日期、出入时间、当前出勤情况等信息,并写入文件。 修改功能:输入工号,姓名其中一项可以修改考勤其信息。对于修改功能的实现,是先将所有文件内容读入到内存中,然后修改考勤值,最后再重新覆盖写入文件。 查询模块:使用字符串比较函数,利用循环找到对应结构体数组元素,然后输出需要信息。对于查询功能的实现,同修改,是先将所有文件内容读入到内存中,然后查找到其中某项,最后输出到屏幕。 显示模块:系统显示职工总的应到考勤数

2、,实到考勤数,具体出勤日期,并输出到屏幕。2. 数据结构职工信息用结构体记录,包括姓名(字符数组)、性别(字符型)、日期(年月日三个字符数组)、班次(整型)、出情况(整型)。3. 函数原型声明 void main() /主函数void record(); /录入数据函数void amend(); /修改数据函数void search(); /查询数据函数void goal(); /计算总评函数二、详细设计1.main( )函数void main()void record(); /录入数据函数void amend(); /修改数据函数void search(); /查询数据函数void goal

3、(); /计算总评函数 char item; printf( n);printf( n);printf( 职 工 考 勤 管 理 系 统 n);printf( n);printf( XXX公司 n);printf( n); printf( n);printf( n); printf( 1.职工信息及考勤情况录入 n); printf( n);printf( 2.职工信息及考勤情况修改 n); printf( n);printf( 3.职工信息及考勤情况查询 n); printf( n);printf( 4.职工考勤总评分数查询 n);printf( n); printf( n); /用户界面p

4、rintf(n);printf( 请选择您需要的操作n);scanf(%c,&item); switch(item) case 1: record();break; case 2: amend();break; case 3: search();break; case 4: goal();break; /实现功能选择 流程图: 开 始1breakgoal()search()amend()record()432switch(item) switch(item)switch(item)输出界面 结束2. record() 函数void record()int i,j=0,jx=1;printf(

5、*职 工 基 本 信 息 录 入*n);if(fp=fopen(date.txt,w)=NULL)printf(文件打开失败n); exit(0);for(i=0;jx=1;i+) /输入信息循环 for(;j=0;) /输入确认循环getchar();printf(请输入第%d个职工的姓名 ,i+1);gets(stui.name);printf(请输入第%d个职工的学号 ,i+1);gets(stui.number);printf(请输入第%d个职工的性别(男:m 女:f) ,i+1);stui.sex=getchar();printf(请输入第%d个职工的生日(格式:年 月 日) ,i+

6、1);scanf(%d%d%d,&stui.year,&stui.month,&stui.day); printf(请输入第%d个职工的当前考勤次数 ,i+1);scanf(%d,&stui.kq);printf(您输入的信息为 姓名 %s 工号 %s 性别 %c 生日 %d年%d月%d日n 0 重输 1 确认,stui.name,stui.number,stui.sex,stui.year,stui.month,stui.day);scanf(%d,&j); /输入确认 j=0; if(fwrite(&stui,sizeof(struct student),1,fp)!=1) printf(

7、文件写入错误n); /写入文件printf( 是否继续输入下一个学生信息 0 终止 1 继续n);scanf(%d,&jx); /继续输入选择fclose(fp); printf(0 返回主菜单n);getchar();a=getchar();getchar();if(a=0) main(); /返回主菜单流程图:开始0=j打开文件1=jx0=ijx=1?Yj=0?Y输入i+1个学生信息生信息N输入j值选择是否确认写入文件i+1=i输入jx值选择是否继续结束3. amend()函数void amend() int i=0,j=0,sway,t,x; char name10,number10;p

8、rintf( *职 工 考 勤 修 改*n); if(fp=fopen(date.txt,r)=NULL) /将文件内容读入内存printf(文件打开失败n); exit(0);for(i=0;feof(fp)=0;i+) fread(&stui,sizeof(struct student),1,fp); /读取文件内容fclose(fp); /关闭文件printf(选择查找方式 1 按照姓名查找 2 按照工号查找);scanf(%d,&sway); /*按照姓名查找开始*/if(sway=1)printf(请输入需要修改职工的姓名 );/printf(i=%d,i);scanf(%s,nam

9、e);for(j=0;t!=0;j+) t=strcmp(stuj.name,name);if(j=i) t=0;printf(未找到您所查询的数据,请重新输入n); if(ji) /查询成功printf(您查找的职工信息如下n 姓名 %s 工号 %s 性别 %c 生日 %d年%d月%d日 当前考勤次数 %dn,stuj-1.name,stuj-1.number,stuj-1.sex,stuj-1.year,stuj-1.month,stuj-1.day,stuj-1.kq); printf(是否修改该职工考勤信息 0 否 1 是); /选择是否修改考勤 scanf(%d,&x); /输入选择

10、变量值if(x=1)printf(请输入新的考勤值 );scanf(%d,&stuj-1.kq); /输入新的考勤值 if(fp=fopen(date.txt,w)=NULL) /以只写方式打开文件 printf(文件打开失败n); exit(0); for(j=0;ji;j+) if(fwrite(&stuj,sizeof(struct student),1,fp)!=1) printf(文件写入错误n); /写入文件 fclose(fp); /关闭文件printf(是否继续修改其他职工考勤 0 否 1 是);scanf(%d,&x);if(x=1) amend();/*按照姓名查找结束*/

11、 /*按照工号查找开始*/if(sway=2)printf(请输入需要修改职工的工号 );/printf(i=%d,i);scanf(%s,number);for(j=0;t!=0;j+) t=strcmp(stuj.number,number);if(j=i) t=0;printf(未找到您所查询的数据,请重新输入n); if(ji) /查询成功printf(您查找的职工信息如下n 姓名 %s 工号 %s 性别 %c 生日 %d年%d月%d日 当前考勤次数 %dn,stuj-1.name,stuj-1.number,stuj-1.sex,stuj-1.year,stuj-1.month,st

12、uj-1.day,stuj-1.kq); printf(是否修改该职工考勤信息 0 否 1 是); /选择是否修改考勤 scanf(%d,&x); /输入选择变量值if(x=1)printf(请输入新的考勤值 );scanf(%d,&stuj-1.kq); /输入新的考勤值 if(fp=fopen(date.txt,w)=NULL) /以只写方式打开文件 printf(文件打开失败n); exit(0); for(j=0;ji;j+) if(fwrite(&stuj,sizeof(struct student),1,fp)!=1) printf(文件写入错误n); /写入文件 fclose(f

13、p); /关闭文件printf(是否继续修改其他职工考勤 0 否 1 是);scanf(%d,&x);if(x=1) amend();/*按照工号查找结束*/printf(0 返回主菜单n);getchar();a=getchar();getchar();if(a=0) main();开始 打开文件将文件内容全部读入结构体数组输入sway值选择查找方式Sway=1?NSway=2?Y输入要查找的工号输入要查找的姓名N查找工号查找姓名输入X值选择是否修改考勤X=1?Y输入新的考勤值写入文件结束4. search()函数void search() int i=0,j=0,sway,t,x; cha

14、r name10,number10;printf( *职 工 信 息 查 询*n); if(fp=fopen(date.txt,r)=NULL) /将文件内容读入内存printf(文件打开失败n); exit(0);for(i=0;feof(fp)=0;i+) fread(&stui,sizeof(struct student),1,fp); /读取文件内容fclose(fp); /关闭文件printf(选择查找方式 1 按照姓名查找 2 按照工号查找);scanf(%d,&sway); /*按照姓名查找开始*/if(sway=1)printf(请输入需要修改职工的姓名 );/printf(i

15、=%d,i);scanf(%s,name);for(j=0;t!=0;j+) t=strcmp(stuj.name,name);if(j=i) t=0;printf(未找到您所查询的数据,请重新输入n); if(ji) /查询成功printf(您查找的职工信息如下n 姓名 %s 工号 %s 性别 %c 生日 %d年%d月%d日 当前考勤次数 %dn,stuj-1.name,stuj-1.number,stuj-1.sex,stuj-1.year,stuj-1.month,stuj-1.day,stuj-1.kq); printf(是否继续查询其他职工信息 0 否 1 是);scanf(%d,&

16、x);if(x=1) search();/*按照姓名查找结束*/ /*按照工号查找开始*/if(sway=2)printf(请输入需要修改职工的学号 );/printf(i=%d,i);scanf(%s,number);for(j=0;t!=0;j+) t=strcmp(stuj.number,number);if(j=i) t=0;printf(未找到您所查询的数据,请重新输入n); if(ji) /查询成功printf(您查找的职工信息如下n 姓名 %s 工号 %s 性别 %c 生日 %d年%d月%d日 当前考勤次数 %dn,stuj-1.name,stuj-1.number,stuj-1

17、.sex,stuj-1.year,stuj-1.month,stuj-1.day,stuj-1.kq);printf(是否继续查询其他职工信息 0 否 1 是);scanf(%d,&x);if(x=1) search();/*按照工号查找结束*/printf(0 返回主菜单n);getchar();a=getchar();getchar();if(a=0) main(); 流程图:开始 打开文件将文件内容全部读入结构体数组输入sway值选择查找方式Sway=1?NSway=2?Y输入要查找的工号输入要查找的姓名查找工号查找姓名输出该职工信息5. goal()函数 void goal() int

18、 i=0,j=0,sway,t,x; float score; char name10,number10;printf( *职 工 考 勤 数 计 算*n);if(kqcs=0)printf(请输入应到考勤总数 ); /请输入应到考勤总数scanf(%f,&kqcs); if(fp=fopen(date.txt,r)=NULL) /将文件内容读入内存printf(文件打开失败n); exit(0);for(i=0;feof(fp)=0;i+) fread(&stui,sizeof(struct student),1,fp); /读取文件内容fclose(fp); /关闭文件printf(选择查

19、找方式 1 按照姓名查找 2 按照工号查找);scanf(%d,&sway); /*按照姓名查找开始*/if(sway=1)printf(请输入需要修改职工的姓名 );/printf(i=%d,i);scanf(%s,name);for(j=0;t!=0;j+) t=strcmp(stuj.name,name);if(j=i) t=0;printf(未找到您所查询的数据,请重新输入n); if(ji) /查询成功printf(您查找的职工信息如下n 姓名 %s 工号 %s 性别 %c 生日 %d年%d月%d日 当前考勤次数 %dn,stuj-1.name,stuj-1.number,stuj-

20、1.sex,stuj-1.year,stuj-1.month,stuj-1.day,stuj-1.kq); score=(stuj-1.kq)/kqcs*100; printf(该职工当前考勤分数为 %5.2f,score);printf(是否继续计算其他职工考勤分数 0 否 1 是);scanf(%d,&x);if(x=1) goal();/*按照姓名查找结束*/ /*按照学号查找开始*/if(sway=2)printf(请输入需要修改职工的工号 );/printf(i=%d,i);scanf(%s,number);for(j=0;t!=0;j+) t=strcmp(stuj.number,

21、number);if(j=i) t=0;printf(未找到您所查询的数据,请重新输入n); if(ji) /查询成功printf(您查找的职工信息如下n 姓名 %s 工号 %s 性别 %c 生日 %d年%d月%d日 当前考勤次数 %dn,stuj-1.name,stuj-1.number,stuj-1.sex,stuj-1.year,stuj-1.month,stuj-1.day,stuj-1.kq);score=(stuj-1.kq)/kqcs*100; printf(该生当前考勤分数为 %5.2f,score);printf(是否继续计算其他职工考勤分数 0 否 1 是);scanf(%

22、d,&x);if(x=1) goal();/*按照工号查找结束*/printf(0 返回主菜单n);getchar();a=getchar();getchar();if(a=0) main();流程图:开始输入应到考勤次数kqcs值打开文件将文件内容全部读入结构体数组输入sway值选择查找方式Sway=1?YNSway=2?输入要查找的工号输入要查找的姓名查找工号查找姓名输出该生信息计算考勤分数输出考勤分数结束三、测试及调试(测试方案、存在的问题及解决方法)测试方案:按照每个函数功能进行测试,在做完每个函数对其进行测试,主函数测试,先将所有需要的功能模块函数设置为空,每个函数用一个printf

23、语句来测试主函数。1. 存在问题:开始将生日定义为字符数组,当用scanf来输入年月日时,年月日之间用空格分隔,但在输出时发现年月日出现错误。分析原因:用scanf输入年月日时,系统会把用来分隔的空格当做字符读入。解决方法:将年月日定义为整型,这样就可以用scanf输入,用空格隔开。2. 存在问题2:在查找数据时,需要先将所有数据读入一个结构体数组,在读取后未关闭文件,执行查找时查找不到相关信息。分析原因:再利用for循环读取全部文件内容后,文件指针将会移至文件末尾,这样再执行查找时就会从文件末尾开始,显然不符合要求,所以会出现错误。解决方法:在读取完数据后先关闭文件,在查找时再次打开文件,这

24、时文件指针就会指向文件开头。3. 存在问题3:再多个使用getchar或者gets输入的时候,会出现直接跳过输入的情况。分析原因:在使用getchar或者gets输入的时候,系统会将前一步用来确认执行的回车当成字符读入,导致跳过该步输入。解决方法:再getchar或者gets前面加上getchar()语句,读掉回车,下面的getchar或者gets就可以正常输入。附件:主要源程序代码(需打印)#include#include#includeFILE *fp; /定义文件char a; /返回选择变量float kqcs=0; /应到考勤次数变量struct student char name1

25、0;char number11;char sex;int year;int month;int day;int kq;stu100; /定义储存职工生信息的结构体数组/*主 函 数 开 始*void main()void record(); /录入数据函数void amend(); /修改数据函数void search(); /查询数据函数void goal(); /计算总评函数char item;printf( n);printf( n);printf( 学 生 考 勤 管 理 系 统 n);printf( n);printf( XXX公司 n);printf( n);printf( n);

26、printf( n);printf( 1. 职工信息及考勤情况录入 n);printf( n);printf( 2. 职工信息及考勤情况修改 n);printf( n);printf( 3. 职工信息及考勤情况查询 n);printf( n);printf( 4. 职工考勤总评分数查询 n);printf( n);printf( n); /用户界面printf(n);printf( 请选择您需要的操作n);scanf(%c,&item);switch(item)case 1: record();break;case 2: amend();break;case 3: search();break

27、;case 4: goal();break; /实现功能选择/*主 函 数 结 束*/*录入数据函数内容开始*void record()int i,j=0,jx=1;printf( *职 工 基 本 信 息 录 入*n);if(fp=fopen(date.txt,w)=NULL)printf(文件打开失败n);exit(0);for(i=0;jx=1;i+) /输入信息循环 for(;j=0;) /输入确认循环getchar();printf(请输入第%d个职工的姓名 ,i+1);gets(stui.name);printf(请输入第%d个职工的学号 ,i+1);gets(stui.numbe

28、r);printf(请输入第%d个职工的性别(男:m 女:f) ,i+1);stui.sex=getchar();printf(请输入第%d个职工的生日(格式:年 月 日) ,i+1);scanf(%d%d%d,&stui.year,&stui.month,&stui.day);printf(请输入第%d个职工的当前考勤次数 ,i+1);scanf(%d,&stui.kq);printf(您输入的信息为 姓名 %s 学号 %s 性别 %c 生日 %d年%d月%d日n 0 重输 1 确认,stui.name,stui.number,stui.sex,stui.year,stui.month,stui.day);scanf(%d,&j); /输入确认j=0;if(fwrite(&stui,sizeof(struct student),1,fp)!=1) printf(文件写入错误n); /写入文件printf( 是否继续输入下一个职工信息 0 终止 1

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 教案示例

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁