




已阅读5页,还剩21页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
设计任务:C语言课程设计任务书10题目:学生考勤系统设计功能:学生考勤系统应包含各班学生的全部信息。每个学生是一条记录,包括姓名、性别、学号、出勤情况等信息。本系统可以模拟考勤过程、记录考勤结果,并能在课程结束后按照设定的考勤评分标准自动给出每个学生的考勤分数。要求:1、用C语言实现程序设计;2、利用结构体进行相关信息处理;3、系统的各个功能模块要求用函数的形式实现;4、界面友好(良好的人机交互),程序加必要的注释。平时成绩:验收答辩成绩:设计报告成绩:总评成绩:指导教师:一、总体设计1程序的总体设计 确定界面,使用户可选择操作项目(录入,修改,查询,评分)。 录入功能:使用结构体,要求用户输入姓名、性别、学号、当前出勤情况等信息,并写入文件。 修改功能:使用户输入学号,姓名其中一项可以修改考勤其信息。对于修改功能的实现,是先将所有文件内容读入到内存中,然后修改考勤值,最后再重新覆盖写入文件。 查询模块:使用字符串比较函数,利用循环找到对应结构体数组元素,然后输出需要信息。对于查询功能的实现,同修改,是先将所有文件内容读入到内存中,然后查找到其中某项,最后输出到屏幕。 评分模块:系统根据总的应道考勤数按照百分制,求出每个学生的分数,并输出到屏幕。2. 数据结构学生信息用结构体记录,包括姓名(字符数组)、性别(字符型)、日期(年月日三个字符数组)、节次(整型)、出情况(整型)。3. 函数原型声明 void main() /*主函数*/void input(); /*录入数据函数*/void mend(); /*修改数据函数*/void find(); /*查询数据函数*/void score(); /*计算总评函数*/二、详细设计 1、void main()void main() /*主 函 数 */ void input(); /*录入数据函数*/ void mend(); /*修改数据函数*/ void find(); /*查询数据函数*/ void score(); /*计算总评函数*/ char choice; printf( n);printf( n);printf( 学 生 考 勤 管 理 系 统 n);printf( n);printf( 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); printf(n); printf(请选择您需要的操作(输入数字):n); scanf(%c,&choice); switch(choice) /*选择功能*/ case 1: input();break; case 2: mend();break; case 3: find();break; case 4: score();break; default: printf(Errorn); /*实现功能选择*/ /*主 函 数 结 束*/break结束流程图输出界面switch(time)input()1mend()234find()score()break结束开 始2、void input()void input() /*录入数据函数内容开始*/ int i,j=0,k=1; printf(学 生 基 本 信 息 录 入n); if(fp=fopen(data.txt,w)=NULL) printf(Errorn); exit(0); for(i=0;k=1;i+) /*输入信息循环*/ for(;j=0;) /*输入确认循环*/ getchar(); printf(请输入第%d个学生的姓名 ,i+1); gets(); printf(请输入第%d个学生的学号 ,i+1); gets(stui.number); printf(请输入第%d个学生的性别(男:m 女:f) ,i+1); stui.sex=getchar(); printf(请输入第%d个学生的当前考勤次数 ,i+1); scanf(%d,&stui.kaoqin); printf(您输入的信息为 姓名 %s 学号 %s 性别 %c n 0 重输 1 确认,,stui.number,stui.sex); scanf(%d,&j); /*输入确认*/ j=0; if(fwrite(&stui,sizeof(struct student),1,fp)!=1) printf(Errorn); /*写入文件*/ printf(是否继续输入下一个学生信息 0 终止 1 继续n); scanf(%d,&k); /*继续输入选择*/ fclose(fp); printf(0 返回主菜单n);getchar(); /*此语句用来接收在执行printf语句时最后输入的回车*/a=getchar(); /*接收输入的第一个字符*/getchar(); /*此语句用来接收在执行getchar输入最后的回车*/ if(a=0) main(); /*返回主菜单*/ /*录入数据函数内容结束*/打开文件0=j0=ik=1?1=k输入i+1个学生信息生信息输入k值选择是否继续j=0?输入j值选择是否确认NYi+1=i写入文件结束开始流程图3、void mend()void mend() /*修改数据函数内容开始*/ int i=0,j=0,way,t,x; char name10,number10; printf( 学 生 考 勤 修 改n); if(fp=fopen(data.txt,r)=NULL) /*将文件内容读入内存*/ printf(Errorn); exit(0); for(i=0;feof(fp)=0;i+) fread(&stui,sizeof(struct student),1,fp); fclose(fp); printf(选择查找方式 1 按照姓名查找 2 按照学号查找); scanf(%d,&way);/*按照姓名查找开始*/ if(way=1) printf(请输入需要修改学生的姓名 ); scanf(%s,name); for(j=0;t!=0;j+) t=strcmp(,name); if(j=i) t=0; printf(未找到您所查询的数据,请重新输入n); if(ji) printf(您查找的学生信息如下n 姓名 %s 学号 %s 性别 %c 当前考勤次数 %dn,,stuj-1.number,stuj-1.sex,stuj-1.kaoqin); printf(是否修改该生考勤信息 0 否 1 是); /*选择是否修改考勤*/ scanf(%d,&x); /*输入选择变量值*/ if(x=1) printf(请输入新的考勤值 ); scanf(%d,&stuj-1.kaoqin); /*输入新的考勤值*/ if(fp=fopen(data.txt,w)=NULL) /*以只写方式打开文件*/ printf(Errorn); exit(0); for(j=0;ji;j+) if(fwrite(&stuj,sizeof(struct student),1,fp)!=1) printf(Errorn); /*写入文件*/ fclose(fp); /*关闭文件*/ printf(是否继续修改其他学生考勤 0 否 1 是); scanf(%d,&x); if(x=1) mend(); /*按照姓名查找结束*/ /*按照学号查找开始*/ if(way=2) printf(请输入需要修改学生的学号 ); 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 当前考勤次数 %dn,,stuj-1.number,stuj-1.sex,stuj-1.kaoqin); printf(是否修改该生考勤信息 0 否 1 是); /*选择是否修改考勤*/ scanf(%d,&x); /*输入选择变量值*/ if(x=1) printf(请输入新的考勤值 ); scanf(%d,&stuj-1.kaoqin); /*输入新的考勤值*/ if(fp=fopen(data.txt,w)=NULL) /*以只写方式打开文件*/ printf(Errorn); exit(0); for(j=0;ji;j+)if(fwrite(&stuj,sizeof(structstudent),1,fp)!=1) printf(Errorn); /*写入文件*/ fclose(fp); /*关闭文件*/ printf(是否继续修改其他学生考勤 0 否 1 是); scanf(%d,&x); if(x=1) mend(); /*按照学号查找结束*/ printf(0 返回主菜单n);getchar(); /*此语句用来接收在执行printf语句时最后输入的回车*/a=getchar(); /*接收输入的第一个字符*/ getchar(); /*此语句用来接收在执行getchar输入最后的回车*/ if(a=0) main();/*修改数据函数内容结束*/*查询数据函数内容开始*/void find() int i=0,j=0,way,t,x; char name10,number10; printf(学 生 信 息 查 询n); if(fp=fopen(data.txt,r)=NULL) /*将文件内容读入内存*/ printf(Errorn); exit(0); for(i=0;feof(fp)=0;i+) fread(&stui,sizeof(struct student),1,fp); /*读取文件内容*/ fclose(fp); /*关闭文件*/ printf(选择查找方式 1 按照姓名查找 2 按照学号查找); scanf(%d,&way);/*按照姓名查找开始*/ if(way=1) printf(请输入需要修改学生的姓名 ); scanf(%s,name); for(j=0;t!=0;j+) t=strcmp(,name); if(j=i) t=0; printf(未找到您所查询的数据,请重新输入n); if(ji) /*查询成功*/ printf(您查找的学生信息如下n 姓名 %s 学号 %s 性别 %c 当前考勤次数 %dn,,stuj-1.number,stuj-1.sex,stuj-1.kaoqin); printf(是否继续查询其他学生信息 0 否 1 是); scanf(%d,&x); if(x=1) find(); /*按照姓名查找结束*/ /*按照学号查找开始*/ if(way=2) printf(请输入需要修改学生的学号 ); 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 当前考勤次数 %dn,,stuj-1.number,stuj-1.sex,stuj-1.kaoqin); printf(是否继续查询其他学生信息 0 否 1 是); scanf(%d,&x); if(x=1) find(); /*按照学号查找结束*/ printf(0 返回主菜单n);getchar(); /*此语句用来接收在执行printf语句时最后输入的回车*/a=getchar(); /*接收输入的第一个字符*/getchar(); /*此语句用来接收在执行getchar输入最后的回车*/ if(a=0) main();/*查询数据函数内容结束*/开始打开文件输入way值选择查找方式way=1?YNway=2?输入要查找的姓名将文件内容全部读入结构体数组输入要查找的学号查找姓名查找学号输入X值选择是否修改考勤X=1?Y输入新的考勤值写入文件结束N流程图4、void find()void find() int i=0,j=0,way,t,x; char name10,number10; printf(学 生 信 息 查 询n); if(fp=fopen(data.txt,r)=NULL) /*将文件内容读入内存*/ printf(Errorn); exit(0); for(i=0;feof(fp)=0;i+) fread(&stui,sizeof(struct student),1,fp); /*读取文件内容*/ fclose(fp); /*关闭文件*/ printf(选择查找方式 1 按照姓名查找 2 按照学号查找); scanf(%d,&way);/*按照姓名查找开始*/ if(way=1) printf(请输入需要修改学生的姓名 ); scanf(%s,name); for(j=0;t!=0;j+) t=strcmp(,name); if(j=i) t=0; printf(未找到您所查询的数据,请重新输入n); if(ji) /*查询成功*/ printf(您查找的学生信息如下n 姓名 %s 学号 %s 性别 %c 当前考勤次数 %dn,,stuj-1.number,stuj-1.sex,stuj-1.kaoqin); printf(是否继续查询其他学生信息 0 否 1 是); scanf(%d,&x); if(x=1) find(); /*按照姓名查找结束*/ /*按照学号查找开始*/ if(way=2) printf(请输入需要修改学生的学号 ); 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 当前考勤次数 %dn,,stuj-1.number,stuj-1.sex,stuj-1.kaoqin); printf(是否继续查询其他学生信息 0 否 1 是); scanf(%d,&x); if(x=1) find(); /*按照学号查找结束*/ printf(0 返回主菜单n);getchar(); /*此语句用来接收在执行printf语句时最后输入的回车*/a=getchar(); /*接收输入的第一个字符*/getchar(); /*此语句用来接收在执行getchar输入最后的回车*/ if(a=0) main();/*查询数据函数内容结束*/流程图打开文件输入way值选择查找方式way=1?YN输入要查找的姓名将文件内容全部读入结构体数组输入要查找的学号查找姓名查找学号输出该生信息开始结束4、void score()void score() int i=0,j=0,way,t,x; float result; char name10,number10; printf(学 生 考 勤 分 数 计 算n); if(time=0) printf(请输入应到考勤总数 ); /*请输入应到考勤总数*/ scanf(%f,&time); if(fp=fopen(data.txt,r)=NULL) /*将文件内容读入内存*/ printf(Errorn); exit(0); for(i=0;feof(fp)=0;i+) fread(&stui,sizeof(struct student),1,fp); /*读取文件内容*/ fclose(fp); /*关闭文件*/ printf(选择查找方式 1 按照姓名查找 2 按照学号查找); scanf(%d,&way);/*按照姓名查找开始*/ if(way=1) printf(请输入需要修改学生的姓名 ); scanf(%s,name); for(j=0;t!=0;j+) t=strcmp(,name); if(j=i) t=0; printf(未找到您所查询的数据,请重新输入n); if(ji) /*查询成功*/ printf(您查找的学生信息如下n 姓名 %s 学号 %s 性别 %c 当前考勤次数 %dn,,stuj-1.number,stuj-1.sex,stuj-1.kaoqin); result=(stuj-1.kaoqin)/time*100; printf(该生当前考勤分数为 %5.2f,result); printf(是否继续计算其他学生考勤分数 0 否 1 是); scanf(%d,&x); if(x=1) score(); /*按照姓名查找结束*/ /*按照学号查找开始*/ if(way=2) printf(请输入需要修改学生的学号 ); 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 当前考勤次数 %dn,,stuj-1.number,stuj-1.sex,stuj-1.kaoqin); result=(stuj-1.kaoqin)/time*100; printf(该生当前考勤分数为 %5.2f,result); printf(是否继续计算其他学生考勤分数 0 否 1 是); scanf(%d,&x); if(x=1) score(); /*按照学号查找结束*/ printf(0 返回主菜单n);getchar(); /*此语句用来接收在执行printf语句时最后输入的回车*/a=getchar(); /*接收输入的第一个字符*/getchar(); /*此语句用来接收在执行getchar输入最后的回车*/ if(a=0) main();/*计算考勤分数函数内容结束*/流程图打开文件输入way值选择查找方式way=1?YN输入要查找的姓名将文件内容全部读入结构体数组输入要查找的学号查找姓名查找学号输出该生信息开始输入应到考勤次数time值计算考勤分数输出考勤分数结束三、测试及调试(测试方案、存在的问题及解决方法)测试方案:按照每个函数功能进行测试,在做完每个函数对其进行测试,主函数测试,先将所有需要的功能模块函数设置为空,每个函数用一个printf语句来测试主函数。1:在查找数据时,需要先将所有数据读入一个结构体数组,在读取后未关闭文件,执行查找时查找不到相关信息。原因在再利用for循环读取全部文件内容后,文件指针将会移至文件末尾,这样再执行查找时就会从文件末尾开始,显然不符合要求,所以会出现错误。于是在读取完数据后先关闭文件,在查找时再次打开文件,这时文件指针就会指向文件开头。2:再多个使用getchar或者gets输入的时候,会出现直接跳过输入的情况。原因在使用getchar或者gets输入的时候,系统会将前一步用来确认执行的回车当成字符读入,导致跳过该步输入。于是再getchar或者gets前面加上getchar()语句,读掉回车,下面的getchar或者gets就可以正常输入。四、小结通过编写该程序,熟悉了C语言的基本语法,选择,循环等结构,深入练习了函数的调用方法,和文件的读写方法,熟悉了结构体的使用,更加深化了面向过程语言思想,和一些基本算法。通过对程序的后期调试,熟悉了C常见错误,锻炼了思维的严密性,和完备性。通过对程序的注释和画流程图,形成了一套自己编程的风格,和清晰地思路,使思维更加条理化,清晰化。附件:主要源程序代码(需打印)#include#include#include FILE *fp; /*定义文件*/char a; /*返回选择变量*/float time=0; /*应到考勤次数变量*/struct student /*学生基本信息*/ char name10; /*学生名字*/ char number11; /*学生学号*/ char sex; /*学生性别*/ int kaoqin; /*学生考勤*/ stu200; /*定义储存学生信息的结构体数组*/void main() /*主 函 数 */ void input(); /*录入数据函数*/ void mend(); /*修改数据函数*/ void find(); /*查询数据函数*/ void score(); /*计算总评函数*/ char choice; printf( n);printf( n);printf( 学 生 考 勤 管 理 系 统 n);printf( n);printf( 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); printf(n); printf(请选择您需要的操作(输入数字):n); scanf(%c,&choice); switch(choice) /*选择功能*/ case 1: input();break; case 2: mend();break; case 3: find();break; case 4: score();break; default: printf(Errorn); /*实现功能选择*/ /*主 函 数 结 束*/void input() /*录入数据函数内容开始*/ int i,j=0,k=1; printf(学 生 基 本 信 息 录 入n); if(fp=fopen(data.txt,w)=NULL) printf(Errorn); exit(0); for(i=0;k=1;i+) /*输入信息循环*/ for(;j=0;) /*输入确认循环*/ getchar(); printf(请输入第%d个学生的姓名 ,i+1); gets(); printf(请输入第%d个学生的学号 ,i+1); gets(stui.number); printf(请输入第%d个学生的性别(男:m 女:f) ,i+1); stui.sex=getchar(); printf(请输入第%d个学生的当前考勤次数 ,i+1); scanf(%d,&stui.kaoqin); printf(您输入的信息为 姓名 %s 学号 %s 性别 %c n 0 重输 1 确认,,stui.numb
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025届广东省佛山市超盈实验中学七下数学期末复习检测试题含解析
- 个人职业目标提高沟通技巧计划
- 法学概论各知识模块的复习重点试题及答案
- 强化应变能力的自我提升计划
- 快乐学习软件设计师考试的试题及答案
- 艺术展览安保工作的总结与反思计划
- 商业智能基本概念试题及答案
- 班级活动评估与效果反馈计划
- 主管年度创业精神任务计划
- 企业可持续发展与风险考量试题及答案
- 2025四川爱众集团第一批次招聘10人笔试参考题库附带答案详解
- 工业用地开发项目成本分析与资金筹措方案
- 2025年初中地理学业水平考试模拟试卷:地图与地球知识综合训练试题卷及答案
- (人教2024版)英语七年级下册Unit7.4 Section B 1a-2d课件(新教材)
- 2025闽教版英语三年级下册单词表
- 江苏省建筑与装饰工程计价定额(2014)电子表格版
- 配电变压器调档施工技术方案
- 预防性健康检管理制度管理办法
- 英汉语法对比研究
- CAAP2008X功能概述PPT课件
- 柴油发电机组检查验收表_word文档免费
评论
0/150
提交评论