《2022年C语言课程设计学生考勤系统 .pdf》由会员分享,可在线阅读,更多相关《2022年C语言课程设计学生考勤系统 .pdf(31页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、C语言程序设计课程设计报告设计题目: 学生考勤系统设计专业 微电子科学与工程班级微电131 学生赵 杨 怡指导教师年学期名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 1 页,共 31 页 - - - - - - - - - 2 设计任务: C语言课程设计任务书10 题目:学生考勤系统设计功能:学生考勤系统应包含各班学生的全部信息。每个学生是一条记录, 包括姓名、性别、学号、日期、节次、出勤情况等信息。本系统可以模拟考勤过程、记录考勤结果, 并能在课程结束后按照设定的考勤评分标准自动
2、给出每个学生的考勤分数。要求:1、用 C语言实现程序设计;2、利用结构体进行相关信息处理;3、系统的各个功能模块要求用函数的形式实现;4、界面友好(良好的人机交互),程序加必要的注释。平时成绩:验收答辩成绩:设计报告成绩:名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 2 页,共 31 页 - - - - - - - - - 3 总评成绩:指导教师:一、总体设计1程序的总体设计确定界面,使用户可选择操作项目(录入,修改,查询,评分) 。录入功能:使用结构体,要求用户输入姓名、性别、学
3、号、日期、节次、当前出勤情况等信息,并写入文件。修改功能: 使用户输入学号, 姓名其中一项可以修改考勤其信息。对于修改功能的实现,是先将所有文件内容读入到内存中,然后修改考勤值,最后再重新覆盖写入文件。查询模块: 使用字符串比较函数, 利用循环找到对应结构体数组元素,然后输出需要信息。对于查询功能的实现,同修改,是先将所有文件内容读入到内存中,然后查找到其中某项,最后输出到屏幕。评分模块: 系统根据总的应道考勤数按照百分制,求出每个学名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 3
4、 页,共 31 页 - - - - - - - - - 4 生的分数,并输出到屏幕。2. 数据结构学生信息用结构体记录,包括姓名(字符数组)、性别(字符型) 、日期(年月日三个字符数组) 、节次(整型) 、出情况(整型) 。3. 函数原型声明 void main() /主函数void input(); /录入数据函数void change(); /修改数据函数void search(); /查询数据函数void evaluate(); /计算总评函数二、详细设计1.main( )函数void main() void input(); /录入数据函数void change(); /修改数据函数v
5、oid search(); /查询数据函数void evaluate(); /计算总评函数 char item; system(color 34); printf( n); printf( n); printf( 学生考勤管理系统n); printf( n); printf( BY 朱胜佳n); 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 4 页,共 31 页 - - - - - - - - - 5 printf( n); printf( n); printf( n); prin
6、tf( 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: input();break; case 2: change();break; case 3: search();break; case 4
7、: evaluate();break; /实现功能选择 流程图:名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 5 页,共 31 页 - - - - - - - - - 6 2.input () 函数void input() int i,j=0,jx=1; printf( *学 生 基 本 信 息 录 入*n); if(fp=fopen(date.txt,w)=NULL) printf(文件打开失败 n); exit(0); 开 始输出界面switch(item) record()
8、1 amend() 2 3 4 search() goal() break 结束名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 6 页,共 31 页 - - - - - - - - - 7 for(i=0;jx=1;i+) /输入信息循环 for(;j=0;) /输入确认循环 getchar(); printf(请输入第 %d个学生的姓名 ,i+1); gets(stui.name); printf(请输入第 %d个学生的学号 ,i+1); gets(stui.number); pr
9、intf(请输入第 %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.mon
10、th,stui.day); scanf(%d,&j); /输入确认 j=0; if(fwrite(&stui,sizeof(struct student),1,fp)!=1) printf(文件写入错误 n); /写入文件printf( 是否继续输入下一个学生信息 0 终止 1 继续n); scanf(%d,&jx); /继续输入选择 fclose(fp); printf(0 返回主菜单 n); getchar(); a=getchar(); getchar(); if(a=0) main(); /返回主菜单流程图:名师资料总结 - - -精品资料欢迎下载 - - - - - - - - -
11、- - - - - - - - - 名师精心整理 - - - - - - - 第 7 页,共 31 页 - - - - - - - - - 8 Y 打开文件0=j 0=i jx=1? 1=jx 输入 i+1 个学生信j=0? 输入 j 值选择是否确认N Y i+1=i 写入文件开始名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 8 页,共 31 页 - - - - - - - - - 9 3. change() 函数void change() int i=0,j=0,sway,t,x
12、; char 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(请输入需要修改学生的姓名
13、 ); / 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); 输入 jx 值选择是否继续结束名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 9 页,共 31 页 - - - - - - - - - 10 if(ji) /查询成功 printf(您查找的学生信息如下n 姓名 %s 学号 %s 性别%c
14、生日%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); /输入选择变量值if(x=1) printf(请输入新的考勤值 ); scanf(%d,&stuj-1.kq); /输入新的考勤值 if(fp=fopen(date.txt,w)=NULL) /以只写方式打开文件 printf(文件打开失败 n); exit(0); for(
15、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) change(); /*按照姓名查找结束*/ /*按照学号查找开始*/ if(sway=2) printf(请输入需要修改学生的学号 ); / printf(i=%d,i); scanf(%s,number); 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - -
16、 - - - - - - - - 名师精心整理 - - - - - - - 第 10 页,共 31 页 - - - - - - - - - 11 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,stuj-
17、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); /写入文件 fclo
18、se(fp); /关闭文件 printf(是否继续修改其他学生考勤 0 否 1 是); scanf(%d,&x); if(x=1) change(); /*按照学号查找结束名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 11 页,共 31 页 - - - - - - - - - 12 */ printf(0 返回主菜单 n); getchar(); a=getchar(); getchar(); if(a=0) main(); 开始打开文件输入 sway 值选择查找方式Sway=1?
19、 Y N Sway=2? 输入要查找的姓名将文件内容全部读入结构输入要查找的学号查找姓名查找学号输入 X 值选择是否修改考勤N 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 12 页,共 31 页 - - - - - - - - - 13 4. search()函数void search() int i=0,j=0,sway,t,x; char name10,number10; printf( *学生信息查询*n); if(fp=fopen(date.txt,r)=NULL) /将
20、文件内容读入内存 printf(文件打开失败 n); exit(0); for(i=0;feof(fp)=0;i+) fread(&stui,sizeof(struct student),1,fp); /读取文件内容fclose(fp); /关闭文件X=1? Y 输入新的考勤值写入文件结束名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 13 页,共 31 页 - - - - - - - - - 14 printf(选择查找方式 1 按照姓名查找 2 按照学号查找 ); scanf(%
21、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-1.sex,stuj-1.year,stuj
22、-1.month,stuj-1.day,stuj-1.kq); printf(是否继续查询其他学生信息 0 否 1 是); scanf(%d,&x); if(x=1) search(); /*按照姓名查找结束*/ /*按照学号查找开始*/ if(sway=2) printf(请输入需要修改学生的学号 ); / printf(i=%d,i); scanf(%s,number); for(j=0;t!=0;j+) 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 14 页,共 31 页 -
23、 - - - - - - - - 15 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,stuj-1.day,stuj-1.kq); printf(是否继续查询其他学生信息 0 否 1 是); scanf(%d,&x); if(x=1)
24、search(); /*按照学号查找结束*/ printf(0 返回主菜单 n); getchar(); a=getchar(); getchar(); if(a=0) main(); 流程图:打开文件将文件内容全部读入结构开始名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 15 页,共 31 页 - - - - - - - - - 16 5. evaluate()函数void evaluate() int i=0,j=0,sway,t,x; float score; char na
25、me10,number10; printf( *学 生 考 勤 分 数 计 算*n); if(kqcs=0) printf(请输入应到考勤总数 ); /请输入应到考勤总数scanf(%f,&kqcs); if(fp=fopen(date.txt,r)=NULL) /将文件内容读入内存 输入 sway 值选择查找方式Sway=1? Y N Sway=2? 输入要查找的姓名输入要查找的学号查找姓名查找学号输出该生信息名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 16 页,共 31 页
26、- - - - - - - - - 17 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,name); for(j=0;t!=0;j+) t=strcmp(stuj
27、.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); score=(stuj-1.kq)/kqcs*100; printf(该生当前考勤分数为 %5.2f,score); printf(是否继续计算其他学生考勤分数 0 否 1 是)
28、; scanf(%d,&x); if(x=1) evaluate(); /*按照姓名查找结束*/ 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 17 页,共 31 页 - - - - - - - - - 18 /*按照学号查找开始*/ 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)
29、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(%d,&x); if(x=
30、1) evaluate(); /*按照学号查找结束*/ printf(0 返回主菜单 n); getchar(); a=getchar(); getchar(); if(a=0) main(); 流程图:名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 18 页,共 31 页 - - - - - - - - - 19 打开文件输入 sway 值选择查找方式Sway=1? Y N Sway=2? 输入要查找的姓名将文件内容全部读入结构输入要查找的学号查找姓名查找学号输出该生信息开始输入应
31、到考勤次数 kqcs 值名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 19 页,共 31 页 - - - - - - - - - 20 三、测试及调试(测试方案、存在的问题及解决方法)测试方案:按照每个函数功能进行测试,在做完每个函数对其进行测试,主函数测试,先将所有需要的功能模块函数设置为空,每个函数用一个 printf语句来测试主函数。1.存在问题: 开始将生日定义为字符数组, 当用 scanf 来输入年月日时, 年月日之间用空格分隔,但在输出时发现年月日出现错误。分析原因:用
32、 scanf 输入年月日时, 系统会把用来分隔的空格当做字符读入。解决方法: 将年月日定义为整型,这样就可以用scanf 输入,用空格隔开。2.存在问题 2:在查找数据时,需要先将所有数据读入一个结构体数组,在读取后未关闭文件,执行查找时查找不到相关信息。分析原因:再利用 for 循环读取全部文件内容后, 文件指针将会移至文件末尾,这样再执行查找时就会从文件末尾开始,显然不符合要求, 所以会出现错误。解决方法: 在读取完数据后先关闭文件, 在查找时再次打开文件, 这时文件指针就会指向文件开头。3. 存在问题 3:再多个使用 getchar 或者 gets 输入的时候,会出现直接跳过输入的情况。
33、分析原因: 在使用 getchar 或者 gets 输入的时候,系统会将前一步用来确计算考勤分数输出考勤分数结束名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 20 页,共 31 页 - - - - - - - - - 21 认执行的回车当成字符读入,导致跳过该步输入。解决方法: 再 getchar 或者 gets 前面加上 getchar()语句,读掉回车,下面的 getchar 或者 gets 就可以正常输入。四、小结通过编写该程序,熟悉了C语言的基本语法,选择,循环等结构,深入
34、练习了函数的调用方法,和文件的读写方法,熟悉了结构体的使用,更加深化了面向过程语言思想,和一些基本算法。通过对程序的后期调试, 熟悉了 C常见错误, 锻炼了思维的严密性,和完备性。通过对程序的注释和画流程图,形成了一套自己编程的风格, 和清晰地思路,使思维更加条理化,清晰化。附件:主要源程序代码(需打印)#include #include #include FILE *fp; /定义文件char a; /返回选择变量float kqcs=0; /应到考勤次数变量struct student char name10; char number11; char sex; int year; int
35、month; int day; int kq; stu100; /定义储存学生信息的结构体数组/*主函数开始* void main() 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 21 页,共 31 页 - - - - - - - - - 22 void input (); /录入数据函数void change(); /修改数据函数void search(); /查询数据函数void evaluate (); /计算总评函数char item; system(color 34);
36、 printf( n); printf( n); printf( 学生考勤管理系统n); printf( n); printf( BY 朱胜 佳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); 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - -
37、- - - - - - - - 名师精心整理 - - - - - - - 第 22 页,共 31 页 - - - - - - - - - 23 printf( n); /用户界面printf(n); printf( 请选择您需要的操作 n); scanf(%c,&item); switch(item) case 1: input ();break; case 2: change();break; case 3: search();break; case 4: evaluate ();break; /实现功能选择 /*主函数 结 束* /*录入数据函数内容开始* void record() in
38、t 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.number); printf( 请输入第 %d 个学生的性别 (男:m 女:f) ,i+1); stui.sex=getchar(
39、); printf( 请输入第 %d 个学生的生日 (格式:年 月 日) ,i+1); scanf(%d%d%d,&stui.year,&stui.month,&stui.day); printf( 请输入第 %d 个学生的当前考勤次数,i+1); 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 23 页,共 31 页 - - - - - - - - - 24 scanf(%d,&stui.kq); printf( 您输入的信息为姓名%s 学号%s 性别%c 生日%d年%d月%d日n
40、 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 继续n); scanf(%d,&jx); /继续输入选择 fclose(fp); printf(0 返回主菜单 n); getchar(); a=getchar(); getchar(); if(a=0)
41、main(); /返回主菜单 /*录入数据函数内容结束* /*修改数据函数内容开始* void change() int i=0,j=0,sway,t,x; char 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
42、按照姓名查找2 按照学号查找 ); scanf(%d,&sway); 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 24 页,共 31 页 - - - - - - - - - 25 /*按照姓名查找开始*/ 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( 未找到您所查询
43、的数据 ,请重新输入 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); /输入选择变量值if(x=1) printf( 请输入新的考勤值); scanf(%d,&stuj-1.kq); /输入新的考勤值if(fp=fopen(dat
44、e.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 是); 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 25 页,共 31 页 - - - - - - - - - 26
45、 scanf(%d,&x); if(x=1) change(); /*按照姓名查找结束*/ /*按照学号查找开始*/ 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
46、,stuj-1.number,stuj-1.sex,stuj-1.year,stuj-1.month,stuj-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); 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - -
47、 - - - - - - - 名师精心整理 - - - - - - - 第 26 页,共 31 页 - - - - - - - - - 27 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) change(); /*按照学号查找结束*/ printf(0 返回主菜单 n); getchar(); a=getchar(); getchar
48、(); if(a=0) main(); /*修改数据函数内容结束* /*查询数据函数内容开始* void search() int i=0,j=0,sway,t,x; char 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
49、按照姓名查找2 按照学号查找 ); scanf(%d,&sway); /*按照姓名查找开始*/ 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 27 页,共 31 页 - - - - - - - - - 28 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( 未找到您所查询
50、的数据 ,请重新输入 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); if(x=1) search(); /*按照姓名查找结束*/ /*按照学号查找开始*/ if(sway=2) printf( 请输入需要修改学生的学号); / printf(