C语言程序设计课程设计报告设计题目:学生考勤管理系统设计院系:生命科技学院班级:农学122姓名:刘玉柱学号:20120114203河南科技学院2013年冬季学期设计任务:C语言课程设计任务书10题目:学生考勤系统设计功能:学生考勤系统应包含各班学生的全部信息。每个学生是一条记录,包括姓名、性别、学号、日期、节次、出勤情况等信息。本系统可以模拟考勤过程、记录考勤结果,并能在课程结束后按照设定的考勤评分标准自动给出每个学生的考勤分数。要求:1、用C语言实现程序设计;2、利用结构体进行相关信息处理;3、系统的各个功能模块要求用函数的形式实现;4、界面友好(良好的人机交互),程序加必要的注释。平时成绩:验收答辩成绩:设计报告成绩:总评成绩:指导教师:一、总体设计1.程序的总体设计◎确定界面,使用户可选择操作项目(录入,修改,查询,评分,界面美化)。◎录入功能:使用结构体,要求用户输入姓名、性别、学号、日期、节次、当前出勤情况等信息,并写入文件。◎修改功能:使用户输入学号,姓名其中一项可以修改考勤其信息。对于修改功能的实现,是先将所有文件内容读入到内存中,然后修改考勤值,最后再重新覆盖写入文件。◎查询模块:使用字符串比较函数,利用循环找到对应结构体数组元素,然后输出需要信息。对于查询功能的实现,同修改,是先将所有文件内容读入到内存中,然后查找到其中某项,最后输出到屏幕。◎评分模块:系统根据总的应道考勤数按照百分制,求出每个学生的分数,并输出到屏幕。◎界面设置模块:系统提供背景及前景颜色选项,用户通过选择可以自由调节界面颜色。2.数据结构学生信息用结构体记录,包括姓名(字符数组)、性别(字符型)、日期(年月日三个字符数组)、节次(整型)、出情况(整型)。3.函数原型声明voidmain()//主函数voidrecord();//录入数据函数voidamend();//修改数据函数voidsearch();//查询数据函数voidgoal();//计算总评函数voidlook();//界面设置函数二、详细设计1.main()函数voidmain(){voidrecord();//录入数据函数voidamend();//修改数据函数voidsearch();//查询数据函数voidgoal();//计算总评函数viodkook();//界面设置函数charitem;printf(※※※※※※※※※※※※※※※※※※※※※\n);printf(※※\n);printf(※学生考勤管理系统※\n);printf(※※\n);printf(※刘玉柱河南科技学院农学122※\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,&item);switch(item){case'1':record();break;case'2':amend();break;case'3':search();break;case'4':goal();break;case‘5’;look();break;}//实现功能选择}流程图:2.record()函数voidrecord(){inti,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(stu[i].name);printf(请输入第%d个学生的学号,i+1);gets(stu[i].number);printf(请输入第%d个学生的性别(男:m女:f),i+1);开始45Look()输出界面switch(item)switch(item)switch(item)record()1amend()23search()goal()break结束stu[i].sex=getchar();printf(请输入第%d个学生的生日(格式:年月日),i+1);scanf(%d%d%d,&stu[i].year,&stu[i].month,&stu[i].day);printf(请输入第%d个学生的当前考勤次数,i+1);scanf(%d,&stu[i].kq);printf(您输入的信息为姓名%s学号%s性别%c生日%d年%d月%d日\n0重输1确认,stu[i].name,stu[i].number,stu[i].sex,stu[i].year,stu[i].month,stu[i].day);scanf(%d,&j);//输入确认}j=0;if(fwrite(&stu[i],sizeof(structstudent),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();//返回主菜单}流程图:打开文件0=j开始Y3.amend()函数voidamend(){inti=0,j=0,sway,t,x;charname[10],number[10];printf(**********************学生考勤修改**************************\n);if((fp=fopen(date.txt,r))==NULL)//将文件内容读入内存{printf(文件打开失败\n);exit(0);0=ijx=1?1=jx输入i+1个学生信息生信息输入jx值选择是否继续j=0?输入j值选择是否确认NYi+1=i写入文件结束}for(i=0;feof(fp)==0;i++)fread(&stu[i],sizeof(structstudent),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(stu[j].name,name);if(j==i){t=0;printf(未找到您所查询的数据,请重新输入\n);}}if(ji)//查询成功{printf(您查找的学生信息如下\n姓名%s学号%s性别%c生日%d年%d月%d日当前考勤次数%d\n,stu[j-1].name,stu[j-1].number,stu[j-1].sex,stu[j-1].year,stu[j-1].month,stu[j-1].day,stu[j-1].kq);printf(是否修改该生考勤信息0否1是);//选择是否修改考勤scanf(%d,&x);//输入选择变量值if(x==1){printf(请输入新的考勤值);scanf(%d,&stu[j-1].kq);//输入新的考勤值if((fp=fopen(date.txt,w))==NULL)//以只写方式打开文件{printf(文件打开失败\n);exit(0);}for(j=0;ji;j++)if(fwrite(&stu[j],sizeof(structstudent),1,fp)!=1)printf(文件写入错误\n);//写入文件fclose(fp);//关闭文件}}printf(是否继续修改其他学生考勤0否1是);scanf(%d,&x);if(x==1)amend();}/**********************按照姓名查找结束*************************////**********************按照学号查找开始*************************///if(sway==2){printf(请输入需要修改学生的学号);//printf(i=%d,i);scanf(%s,number);for(j=0;t!=0;j++){t=strcmp(stu[j].number,number);if(j==i){t=0;printf(未找到您所查询的数据,请重新输入\n);}}if(ji)//查询成功{printf(您查找的学生信息如下\n姓名%s学号%s性别%c生日%d年%d月%d日当前考勤次数%d\n,stu[j-1].name,stu[j-1].number,stu[j-1].sex,stu[j-1].year,stu[j-1].month,stu[j-1].day,stu[j-1].kq);printf(是否修改该生考勤信息0否1是);//选择是否修改考勤scanf(%d,&x);//输入选择变量值if(x==1){printf(请输入新的考勤值);scanf(%d,&stu[j-1].kq);//输入新的考勤值if((fp=fopen(date.txt,w))==NULL)//以只写方式打开文件{printf(文件打开失败\n);exit(0);}for(j=0;ji;j++)if(fwrite(&stu[j],sizeof(structstudent),1,fp)!=1)printf(文件写入错误\n);//写入文件fclose(fp);//关闭文件}}printf(是否继续修改其他学生考勤0否1是);scanf(%d,&x);if(x==1)amend();}/**********************按照学号查找结束*************************///printf(0返回主菜单\n);getchar();a=getchar();getchar();if(a=='0')main();}开始打开文件输入sway值选择查找方式Sway=1?YNSway=2?输入要查找的姓名将文件内容全部读入结构体数组输入要查找的学号4.search()函数voidsearch(){inti=0,j=0,sway,t,x;charname[10],number[10];printf(***********************学生信息查询***************************\n);if((fp=fopen(date.txt,r))==NULL)//将文件内容读入内存{查找姓名查找学号输入X值选择是否修改考勤X=1?NY输入新的考勤值写入文件结束printf(文件打开失败\n);exit(0);}for(i=0;feof(fp)==0;i++)fread(&stu[i],sizeof(structstudent),1,fp);//读取文件内容fclose(fp);//关闭文件printf(选择查找方式1按照姓名查找2按照学号查找);scanf(%d,&sway);/*******************