

下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、C 语言程序设计课程设计报告设计题目: 学生考勤系统设计专业微电子科学与工程班级微电 131131学生赵杨怡指导教师年学期设计任务:C C 语言课程设计任务书 1010题目:学生考勤系统设计功能:学生考勤系统应包含各班学生的全部信息。 每个学生是一条记录,包 括姓名、性别、学号、日期、节次、出勤情况等信息。本系统可以模拟考勤 过程、记录考勤结果,并能在课程结束后按照设定的考勤评分标准自动给出 每个学生的考勤分数。要求:1、用 C 语言实现程序设计;2、利用结构体进行相关信息处理;3、系统的各个功能模块要求用函数的形式实现;4、界面友好(良好的人机交互),程序加必要的注释。平时成绩:验收答辩成绩
2、:设计报告成绩:总评成绩:指导教师:、总体设计1 程序的总体设计确定界面,使用户可选择操作项目(录入,修改,查询,评分)。录入功能:使用结构体,要求用户输入姓名、性别、学号、日期、 节次、当前出勤情况等信息,并写入文件。修改功能: 使用户输入学号, 姓名其中一项可以修改考勤其信息。 对于修改功能的实现,是先将所有文件内容读入到内存中,然后修 改考勤值,最后再重新覆盖写入文件。查询模块:使用字符串比较函数,利用循环找到对应结构体数组元素,然后输出需要信息。对于查询功能的实现,同修改,是先将所有文件内容读入到内存中,然后查找到其中某项,最后输出到屏 幕。评分模块:系统根据总的应道考勤数按照百分制,
3、求出每个学生 的分数,并输出到屏幕。2. 数据结构学生信息用结构体记录,包括姓名(字符数组)、性别(字 符型) 、日期(年月日三个字符数组)、节次(整型)、出情况(整 型)。3. 函数原型声明 voidmain()/ 主函数voidi nput();录入数据函数voidcha nge(); 修改数据函数voidsearch();查询数据函数voidevaluate();计算总评函数、详细设计1.1.main()函数voidmai n()voidi nput();录入数据函数voidcha nge(); 修改数据函数voidsearch();查询数据函数voidevaluate();计算总评函数
4、charitem;system(color34);printf( n);prin tf( n);printf(学生考勤管理系统n);prin tf( n); printf(BY 朱胜佳n);prin tf( n);prin tf( n);prin tf( n);printf(1.学生信息及考勤情况录入n);prin tf( n);printf(2.学生信息及考勤情况修改n);prin tf( n);printf(3.学生信息及考勤情况查询n);prin tf( n);printf( 4.学生考勤总评分数查询n);prin tf(n);prin tf( n); 用户界面prin tf(n);pr
5、intf( 请选择您需要的操作n);scan f(%c,&item);switch(item)case1:i nput();break; case2:cha nge();break; case3:search();break;case4:evaluate();break;/实现功能选择流程图:2.2.input ()函数voidi nput()in ti,j=O,jx=1;printf( *n);if(fp=fope n(date.txt,w)=NULL) printf(文件打开失败n);exit(0);for(i=0;jx=1;i+)输入信息循环for(;j=0;)输入确认循环get
6、char();学生基本信息录入printf(请输入第4 个学生的姓名,i+1);gets(stui. name);printf(请输入第d 个学生的学号,i+1);gets(stui. nu mber);printf(请输入第d 个学生的性别(男:m 女:f),i+1);stui.sex=getchar();printf(请输入第d 个学生的生日(格式:年月日),i+1);scan f(%d%d%d,&stui.year,&stui.mo nth,&stui.day); printf( 请输入第个学生的当前考勤次数,i+1);sca nf(%d, &stui.k
7、q);printf(您输入的信息为姓名s 学号s 性别c 生日(年%d月%d0n0 重输 1 确认,stui. name,stui. nu mber,stui.sex,stui.year,stui.m on th,stui.day);sca nf(%d,&j);输入确认j=0;if(fwrite(&stui,sizeof(structstude nt),1,fp)!=1)pri ntf(文件写入错误n);写入文件prin tf(是否继续输入下一个学生信息 0 终止 1 继续n);sca nf(%d,&jx); 继续输入选择fclose(fp);printf(0 返回主菜
8、单n);getchar();a=getchar();getchar();if(a=0)mai n();返回主菜单流程图:voidcha nge()in ti=0,j=0,sway,t,x;charname10, nu mber10;if(fp=fope n(date.txt,T)=NULL)printf( 文件打开失败n); exit(0);for(i=0;feof(fp)=0;i+)fread(&stui,sizeof(structstude nt),1,fp);读取文件内容fclose(fp);/ 关闭文件printf( 选择查找方式 1 按照姓名查找 2 按照学号查找);scan
9、 f(%d,&sway);printf( *学生考勤修改*n);将文件内容读入内存*按照姓名查找开始*/if(sway=1)printf(请输入需要修改学生的姓名);/prin tf(i=%d,i);sca nf(%s, name); for(j=0;t!=0;j+) t=strcmp(stuj. name, name);if(j=i)t=0;printf(未找到您所查询的数据,请重新输入n);if(jvi)/ 查询成功printf(您查找的学生信息如下n 姓名s 学号s 性别%c生日%d 年%d 月 %d 日当前考勤次数 %dn,stuj-1. name,stuj-1. number
10、,stuj-1.sex,stuj-1.year,stuj-1.mo nth,stuj-1.day,stuj-1.kq);prin tf( 是否修改该生考勤信息 0 否 1 是);/选择是否修改考勤sca nf(%d, &x); 输入选择变量值if(x=1)printf(请输入新的考勤值);sca nf(%d,&stuj-1.kq);/输入新的考勤值if(fp=fope n( date.txt,w)=NULL)以只写方式打开文件printf(文件打开失败n);exit(0);for(j=0;ji;j+)if(fwrite(&stuj,sizeof(structstude
11、nt),1,fp)!=1)printf(文件写入错误n);/写入文件fclose(fp);/关闭文件prin tf(是否继续修改其他学生考勤 0 否 1 是);sca nf(%d, &x);if(x=1)cha nge();*按照学号查找开始*if(sway=2)printf(请输入需要修改学生的学号);II prin tf(i=%d,i);sca nf(%s ,nu mber);for(j=0;t!=0;j+)t=strcmp(stuj. nu mber, nu mber);if(j=i)t=0;printf(未找到您所查询的数据,请重新输入n);if(ji)II 查询成功print
12、f(您查找的学生信息如下n 姓名s 学号s 性别%c生日%d 年%d 月 %d 日当前考勤次数 %dn,stuj-1. name,stuj-1. number,stuj-1.sex,stuj-1.year,stuj-1.mo nth,stuj-1.day,stuj-1.kq);prin tf(是否修改该生考勤信息 0 否 1 是);II 选择是否修改考勤sca nf(%d, &x); 输入选择变量值if(x=1)printf(请输入新的考勤值);sca nf(%d,&stuj-1.kq);/输入新的考勤值if(fp=fope n( date.txt,w)=NULL)以只写方式打
13、开文件printf( 文件打开失败n);exit(0);for(j=0;ji;j+)if(fwrite(&stuj,sizeof(structstude nt),1,fp)!=1)printf(文件写入错误n);II写入文件fclose(fp);II 关闭文件*按照姓名查找结束IIIIIIprintf( 是否继续修改其他学生考勤 0 否 1 是); sea nf(%d, &x);if(x=1)cha nge();/*/printf(0返回主菜单n);getchar();a=getchar();getchar();if(a=0)mai n();开始按照学号查找结束打开文件将文件内
14、容全部读输入sway 值选择查结束4.4.search。函数voidsearch()in ti=O,j=O,sway,t,x; charname10, nu mber10;*n);if(fp=fope n(date.txtTr)=NULL)将文件内容读入内存printf(文件打开失败n);exit(0);for(i=0;feof(fp)=0;i+)fread(&stui,sizeof(structstude nt),1,fp);读取文件内容fclose(fp);/关闭文件printf( 选择查找方式 1 按照姓名查找 2 按照学号查找);scan f(%d,&sway);按照姓
15、名查找开始*if(sway=1)printf(请输入需要修改学生的姓名);/ prin tf(i=%d,i);sca nf(%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 日当前考勤次数 %dn,stuj-1. name,stuj-1. number,stuj-1.sex,stuj-1.year,stuj-1.mo nth,stuj-1.day,stuj-1
16、.kq);printf(是否继续查询其他学生信息 0 否 1 是);sca nf(%d, &x);printf( *学生信息查询/if(x=1)search();/*/*/if(sway=2)printf(请输入需要修改学生的学号);/ prin tf(i=%d,i);sca nf(%s ,nu mber);for(j=0;t!=0;j+)t=strcmp(stuj. nu mber, nu mber);if(j=i)按照姓名查找结束按照学号查找开始t=0;printf( 未找到您所查询的数据,请重新输入n);if(jvi)查询成功printf(您查找的学生信息如下n 姓名s 学号s
17、性别%c生日旳4 月d 日当前考勤次数 %dn,stuj-1. name,stuj-1. number,stuj-1.sex,stuj-1.year,stuj-1.mo nth,stuj-1.day,stuj-1.kq);printf( 是否继续查询其他学生信息 0 否 1 是);sca nf(%d, &x);if(x=1)search();/*/printf(0返回主菜单n);getchar();a=getchar();getchar();if(a=0)mai n();按照学号查找结束流程图:5.5.evaluate。函数voidevaluate()in ti=O,j=O,sway,
18、t,x; floatscore;charname10, nu mber10;*n);学生考勤分数计算请输入应到考勤总数将文件内容读入内存exit(0);for(i=0;feof(fp)=0;i+)fread(&stui,sizeof(structstude nt),1,fp);读取文件内容fclose(fp);/ 关闭文件printf( 选择查找方式 1 按照姓名查找 2 按照学号查找);printf(I*if(kqcs=0)printf( 请输入应到考勤总数);/ scanf(%f,&kqcs);if(fp=fope n(date.txt,广)=NULL)scan f(%d,
19、&sway);/*/if(sway=1)printf(请输入需要修改学生的姓名);/prin tf(i=%d,i);sca nf(%s, name); for(j=0;t!=0;j+) t=strcmp(stuj. name, name); if(j=i)t=0;printf( 未找到您所查询的数据,请重新输入n);if(jvi)printf(您查找的学生信息如下n 姓名s 学号s 性别%c生日旳4 月d 日当前考勤次数 %dn,stuj-1. name,stuj-1. number,stuj-1.sex,stuj-1.y ear,stuj-1.month,stuj-1.day,stu
20、j-1.kq);score=(stuj-1.kq)/kqcs*100;printf( 该生当前考勤分数为5.2f,score);prin tf( 是否继续计算其他学生考勤分数0 否 1 是);sca nf(%d, &x);if(x=1)evaluate();/*/*/if(sway=2)printf(请输入需要修改学生的学号);/prin tf(i=%d,i);sca nf(%s ,nu mber);for(j=0;t!=0;j+)按照姓名查找开始查询成功按照姓名查找结束按照学号查找开始if(j=i)t=0;printf( 未找到您所查询的数据,请重新输入n); if(jvi)prin
21、tf(您查找的学生信息如下n 姓名s 学号s 性别%c生日旳4 月d 日当前考勤次数 %dn,stuj-1. name,stuj-1. number,stuj-1.sex,stuj-1.y ear,stuj-1.month,stuj-1.day,stuj-1.kq);score=(stuj-1.kq)/kqcs*100;printf(该生当前考勤分数为%5.2f,score);prin tf(是否继续计算其他学生考勤分数0 否 1 是);sca nf(%d, &x);if(x=1)evaluate();/*/printf(0返回主菜单n);getchar();a=getchar();g
22、etchar();if(a=0)mai n();流程图:查询成功按照学号查找结束测试方案:按照每个函数功能进行测试,在做完每个函数对其进行测试,主函数测试,先将所有需要的功能模块函数设置为空,每个 函数用一个 printfprintf 语句来测试主函数。1. 存在问题:开始将生日定义为字符数组,当用 scanf 来输入年月日时,年月 日之间用空格分隔,但在输出时发现年月日出现错误。分析原因:用 scanf 输入年月日时,系统会把用来分隔的空格当做字符读入。解决方法:将年月日定义为整型,这样就可以用 scanf 输入,用空格隔开。2. 存在问题 2:在查找数据时,需要先将所有数据读入一个结构体数
23、组,在读取后未关闭文件,执行查找时查找不到相关信息。分析原因:再利用 for 循环读取全部文件内容后,文件指针将会移至文件末 尾,这样再执行查找时就会从文件末尾开始, 显然不符合要求,所以会出现 错误。解决方法:在读取完数据后先关闭文件,在查找时再次打开文件,这时文件 指针就会指向文件开头。3. 存在问题 3:再多个使用 getchar 或者 gets 输入的时候,会出现直接跳过 输入的情况。分析原因:在使用 getchar 或者 gets 输入的时候,系统会将前一步用来确 认执行的回车当成字符读入,导致跳过该步输入。解决方法:再 getchar 或者 gets 前面加上 getchar()语
24、句,读掉回车,下面的 getchar 或者 gets 就可以正常输入。四、小结通过编写该程序,熟悉了 C 语言的基本语法,选择,循环等结构,深入练 习了函数的调用方法,和文件的读写方法,熟悉了结构体的使用,更加深化了 面向过程语言思想,和一些基本算法。通过对程序的后期调试,熟悉了 C 常见错误,锻炼了思维的严密性,和完 备性。通过对程序的注释和画流程图,形成了一套自己编程的风格,和清晰地思 路,使思维更加条理化,清晰化。附件:主要源程序代码(需打印)#i nclude#i ncludevstri ng.h#i ncludeFILE*fp; 定义文件chara;/返回选择变量 floatkqcs
25、=0; 应到考勤次数变量structstude ntchar name10;char nu mber11;charsex;in tyear;in tmo nth;in tday;in tkq;stu100;/定义储存学生信息的结构体数组/*主函数丿开*voidmai n()voidi nput();录入数据函数voidcha nge(); 修改数据函数voidsearch();/查询数据函数voidevaluate();计算总评函数charitem;system(color34);printf( n);prin tf( n);n); 用户界面prin tf(n);printf(”请选择您需要的
26、操作n);scan f(%c,&item);switch(item)case1:i nput();break; case2:cha nge();break; case3:search();break;case4:evaluate();break;/实现功能选择/*结士束*/*容开女台 *voidrecord()in ti,j=O,jx=1;printf( I*n);if(fp=fope n( date.txt,w)=NULL)printf( 文件打开失败n); exit(0);n);printf(printf(printf(printf(printf(学生考勤管理系统n); n);BY
27、 朱胜佳n); n);printf( n);printf(1.学生信息及考勤情况录入n);printf( n);printf(2.学生信息及考勤情况修改n);printf( n);printf(3.学生信息及考勤情况查询n);printf( n);printf( 4.学生考勤总评分数查询n);printf(n);printf(主函数录入数据函数内学生基本信息录入for(i=0;jx=1;i+)输入信息循环for(;j=0;)输入确认循环getchar();printf(请输入第c 个学生的姓名,i+1);gets(stui. name);printf(请输入第c 个学生的学号,i+1);get
28、s(stui. nu mber);printf(请输入第c 个学生的性别(男:m 女:f),i+1);stui.sex=getchar();printf(请输入第c 个学生的生日(格式:年月日),i+1);scan f(%d%d%d,&stui.year,&stui.mo nth,&stui.day);printf(请输入第个学生的当前考勤次数,i+1);scan f(%d,&stui.kq);printf(您输入的信息为姓名s 学号s 性别%c 生日 %d 年%4 月%d日n0 重输 1 确认,stui. name,stui. nu mber,stui.sex
29、,stui.year,stui.m on th,stui.day);scan f(%d,&j);输入确认j=0;if(fwrite(&stui,sizeof(structstude nt),1,fp)!=1)pri ntf(文件写入错误n); 写入文件prin tf(是否继续输入下一个学生信息0 终止 1 继续n);scan f(%d,&jx);继续输入选择fclose(fp);printf(0 返回主菜单n);getchar();a=getchar();getchar();if(a=0)mai n(); 返回主菜单/*容结士束*/*voidcha nge()in ti
30、=0,j=0,sway,t,x;录入数据函数内修改数据函数内容开始charname10, nu mber10;printf( I*学生考勤修改if(fp=fope n( date.txt,广)=NULL)将文件内容读入内存printf( 文件打开失败n);exit(0);for(i=0;feof(fp)=0;i+)fread(&stui,sizeof(structstude nt),1,fp);读取文件内容fclose(fp);/ 关闭文件printf( 选择查找方式 1 按照姓名查找 2 按照学号查找);scan f(%d,&sway);/*按照姓名查找开女厶*if(sway
31、=1)printf(请输入需要修改学生的姓名);/prin tf(i=%d,i);scan f(%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年4 月4 日当前考勤次数 %dn,stuj-1. name,stuj-1. nu mber,stuj-1.sex,stuj-1.year,stuj-1.m on th,stuj-1.day,stuj-1.kq);prin tf(
32、 是否修改该生考勤信息 0 否 1 是);/选择是否修改考勤scan f(%d, &x); 输入选择变量值if(x=1)printf(请输入新的考勤值);scan f(%d,&stuj-1.kq);/输入新的考勤值if(fp=fope n(date.txt,w)=NULL)以只写方式打开文件/printf( 文件打开失败n);for(j=0;jvi;j+)if(fwrite(&stuj,sizeof(structstude nt),1,fp)!=1)printf(文件写入错误n);写入文件fclose(fp);/ 关闭文件prin tf(是否继续修改其他学生考勤 0 否
33、 1 是);scan f(%d, &x); if(x=1)cha nge();/*/*/if(sway=2)printf(请输入需要修改学生的学号);/prin tf(i=%d,i);sca nf(%s ,nu mber);for(j=0;t!=0;j+)t=strcmp(stuj. nu mber, nu mber);if(j=i)t=0;printf(未找到您所查询的数据,请重新输入n);if(jvi)/查询成功printf(您查找的学生信息如下n 姓名s 学号%s 性别c 生日%d年4 月4 日当前考勤次数 %dn,stuj-1. name,stuj-1. nu mber,stu
34、j-1.sex,stuj-1.year,stuj-1.m on th,stuj-1.day,stuj-1.kq);prin tf(是否修改该生考勤信息 0 否 1 是);/选择是否修改考勤scan f(%d, &x); 输入选择变量值if(x=1)printf(请输入新的考勤值);scan f(%d,&stuj-1.kq);输入新的考勤值if(fp=fope n(date.txt,w)=NULL)以只写方式打开文件按照姓名查找结束按照学号查找开始printf( 文件打开失败n);exit(O);for(j=0;jvi;j+)if(fwrite(&stuj,sizeof(
35、structstudent),1,fp)!=1)printf(文件写入错误n);写入文件fclose(fp);/ 关闭文件prin tf( 是否继续修改其他学生考勤 0 否 1 是);scan f(%d, &x); if(x=1)cha nge();/*/printf(0 返回主菜单n); getchar(); a=getchar(); getchar(); if(a=0)main();/*容结束 */*容开女台 *voidsearch()in ti=0,j=0,sway,t,x; charname10, number10;printf( I*n);if(fp=fope n(date.
36、txt,广)=NULL)printf( 文件打开失败n);exit(0); for(i=0;feof(fp)=0;i+)fread(& stui,sizeof(structstude nt),1,fp);读取文件内容fclose(fp);/ 关闭文件printf( 选择查找方式 1 按照姓名查找 2 按照学号查找); scan f(%d,&sway);/*/按照学号查找结束修改数据函数内查询数据函数内学生信息查询将文件内容读入内存按照姓名查找开始printf(请输入需要修改学生的姓名);/prin tf(i=%d,i);scan f(%s, name);for(j=0;t!=0
37、;j+)t=strcmp(stuj. name, name);if(j=i)t=0;printf(未找到您所查询的数据,请重新输入n);if(jvi)/ 查询成功printf(您查找的学生信息如下n 姓名s 学号%s 性别c 生日%d年4 月4 日当前考勤次数 %dn,stuj-1. name,stuj-1. nu mber,stuj-1.sex,stu|j-1.year,stuj-1.m on th,stuj-1.day,stuj-1.kq);printf(是否继续查询其他学生信息 0 否 1 是);scan f(%d, &x);if(x=1)search();/*/*/if(swa
38、y=2)printf(请输入需要修改学生的学号);/prin tf(i=%d,i);sca nf(%s ,nu mber);for(j=0;t!=0;j+)t=strcmp(stuj. nu mber, nu mber);if(j=i)t=0;printf(未找到您所查询的数据,请重新输入n);按照姓名查找结束按照学号查找开始if(jvi)/查询成功printf(您查找的学生信息如下n 姓名s 学号%s 性别c 生日%d年4 月4 日当前考勤次数 %dn,stuj-1. name,stuj-1. nu mber,stuj-1.sex,stu|j-1.year,stuj-1.m on th,stuj-1.day,stu|j-1.kq);printf(是否继续查询其他学生信息 0 否 1 是);scan f(%d, &x);/printf(0 返回主菜单n);getchar();a=getchar();getchar();if(a=0)mai n();/*容结束 */*数内容开始*voidevaluate()in ti=0,j=0,sway,t,x; floatscore;charname10,
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 投诉举报处理管理办法
- 安全课程《狗狗来了》课件
- 建筑工程测绘保密协议与国家法律法规遵守细则
- 油气负载石墨烯润滑轴承三相热流耦合模型
- 养老课件名字大全
- 2025年安徽省江南十校高三3月联考历史试题及答案
- 养老诈骗课件名称大全集
- 具有小修和负修复的多状态可修系统可靠性分析
- 多场耦合作用下离心式压缩机叶片裂纹影响规律研究
- 2025届云南省绿春县一中高一物理第二学期期末联考试题含解析
- 中国磁力发电机行业市场全景评估及投资前景展望报告
- 奶茶公司供应链管理制度
- 加气站风控分级管理制度
- 物业消防培训教学课件
- 2025年航空安全管理专业考试试卷及答案
- 2025至2030中国姜黄种植行业项目调研及市场前景预测评估报告
- 诈骗谅解书和退赔协议书
- 打胎后赔偿协议书
- 养生店合作合同协议书
- 2025年中级会计实务考试提升实务能力试题及答案
- 2025年福建省闽投深海养殖装备租赁有限责任公司招聘笔试参考题库含答案解析
评论
0/150
提交评论