设计任务:C语言课程设计任务书题目:学生考勤系统设计功能:学生考勤系统应包含各班学生的全部信息。每个学生是一条记录,包括姓名、性别、学号、出勤情况等。本系统可模拟考勤过程,记录考勤结果,并能够在课程结束后按照设定的考勤评分标准自动给出每个学生的考勤分数。分步实施:1、初步完成总体设计,搭好框架,确定人机对话界面,确定函数个数;2、建立一个文件,将每条记录信息写入文件中并能显示于屏幕上3、完成上述添加(出勤情况)、查找(学号,姓名,性别等)、修改等功能。4、进一步要求:自动给出每个学生的考勤分数要求:1、用C语言实现程序设计;2、利用结构体数组实现信息的数据结构设计;3、系统的各个功能模块要求用函数的形式实现;4、界面友好(良好的人机交互),程序加必要的注释。总评成绩:指导教师:附件:《学生考勤系统》主要源程序代码#includestdio.h#includestring.h/*头文件。*/intSIZE;/*宏定义。*/intCLASS;structstudent/*定义一个结构体数组,包含学生信息。*/{charname[9];charsex[4];intnumber;intcount;intscore;}stu[300];voidmain()/*主函数,选择界面。*/{voidstart();printf(\n);printf(\n);printf(\n);printf(\n);printf(######################################\n);printf(#学生考勤系统#\n);printf(#欢迎您#\n);printf(######################################\n);printf(\n);printf(\n);printf(\n);printf(\n);printf(######################################\n);printf(\t请输入班级人数:\n);printf(######################################\n);scanf(%d,&SIZE);printf(\n);printf(######################################\n);printf(\t请输入课程节数:\n);printf(######################################\n);scanf(%d,&CLASS);printf(\n);printf(\n);printf(\n);printf(\n);start();}voidstart()/*主函数的辅助函数——start函数。*/{charx;voidfound();voidsearch();voidadd();voidmark();printf(######################################\n);printf(#请选择所需功能,输入对应数字:#\n);printf(#1.建立学生列表#\n);printf(#2.查找学生信息#\n);printf(#3.模拟考勤过程#\n);printf(#4.计算考勤分数#\n);printf(#5.退出#\n);printf(##\n);printf(######################################\n);scanf(%S,&x);switch(x)/*利用switch函数实现子函数的选择功能。*/{case'1':found();break;case'2':search();break;case'3':add();break;case'4':mark();break;case'5':break;default:printf(****输入有误,请重输:\n);start();}}voidfound()/*第一个子函数——found函数,用于建立学生列表。*/{inta;printf(####################\n);printf(开始建表。\n);printf(####################\n);FILE*fp;for(a=0;aSIZE;a++)/*运用for循环,逐次输入学生信息。*/{printf(请输入第%d个学生的个人信息:\n,a+1);printf(姓名:);scanf(%s,stu[a].name);printf(性别:);scanf(%s,stu[a].sex);printf(学号:);scanf(%d,&stu[a].number);stu[a].count=0;stu[a].score=0;}fp=fopen(stud,w);/*新建一个文件,运用for函数将学生信息写入文件。*/for(a=0;aSIZE;a++){if(fwrite(&stu[a],sizeof(structstudent),1,fp)!=1)printf(文件输入错误。\n);}fclose(fp);printf(\n);printf(\n);printf(\n);printf(\n);printf(建表如下:\n);fp=fopen(stud,r);/*读取新建的文件,并输出。*/printf(姓名\t性别\t学号\t缺课数\t考勤分数\n);printf(----------------------------------------------\n);for(a=0;aSIZE;a++){fread(&stu[a],sizeof(structstudent),1,fp);printf(%s\t%s\t%d\t%d\t%d\n,stu[a].name,stu[a].sex,stu[a].number,stu[a].count,stu[a].score);}fclose(fp);printf(\n);printf(\n);printf(\n);printf(\n);printf(#######################################\n);printf(#记录完毕#\n);printf(#欢迎下次再来。#\n);printf(#######################################\n);start();/*返回主函数的辅助函数,即主菜单。*/}voidsearch()/*第二个子函数——search函数,用于查询学生信息。*/{charb;voidsearch1();voidsearch2();printf(****************************************\n);printf(请选择:\n);printf(1.按姓名查找。\n);printf(2.按学号查找。\n);printf(****************************************\n);scanf(%s,&b);switch(b)/*运用switch函数,构成选择结构,可供选择查询类型。*/{case'1':search1();break;/*进入第1种查询类型的函数。*/case'2':search2();break;/*进入第2种查询类型的函数。*/default:printf(****输入有误,请重输:);search();}printf(\n);printf(\n);printf(\n);printf(\n);printf(#######################################\n);printf(#查找完毕#\n);printf(#欢迎下次再来。#\n);printf(#######################################\n);start();/*返回主函数的辅助函数,即主菜单。*/}voidsearch1()/*第1种查询类型的函数。*/{intc;charstudent_name[9];FILE*fp;/*打开已建立的文件并将其输出到屏幕上。*/fp=fopen(stud,r);printf(姓名\t性别\t学号\t缺课数\t考勤分数\n);printf(----------------------------------------------\n);for(c=0;cSIZE;c++){fread(&stu[c],sizeof(structstudent),1,fp);printf(%s\t%s\t%d\t%d\t%d\n,stu[c].name,stu[c].sex,stu[c].number,stu[c].count,stu[c].score);}fclose(fp);printf(\n);printf(\n);printf(\n);printf(\n);printf(请输入要查询学生姓名:);scanf(%s,student_name);printf(\n);printf(\n);printf(\n);printf(\n);for(c=0;cSIZE;c++)/*运用for循环和strcmp函数逐个比较输入的姓名与列表中学生的姓名,找到相同的后输出该学生的信息。*/{if(strcmp(student_name,stu[c].name)==0){printf(已查到*******************************************\n);printf(姓名:%s性别:%s学号:%d缺课数:%d\n,stu[c].name,stu[c].sex,stu[c].number,stu[c].count);}}}voidsearch2()/*第2种查询类型的函数。*/{intc;intd;FILE*fp;fp=fopen(stud,r);printf(姓名\t性别\t学号\t缺课数\t考勤分数\n);printf(----------------------------------------------\n);for(c=0;cSIZE;c++){fread(&stu[c],sizeof(structstudent),1,fp);printf(%s\t%s\t%d\t%d\t%d\n,stu[c].name,stu[c].sex,stu[c].number,stu[c].count,stu[c].score);}fclose(fp);printf(\n);printf(\n);printf(\n);printf(\n);printf(请输入要查询学生学号:);scanf(%d,&d);printf(\n);printf(\n);printf(\n);printf(\n);for(c=0;cSIZE;c++)/*同第1种查询类型的函数,用for循环逐个比较输入的学号与列表中学生的学号,找到相同的后输出该学生的信息。*/{if(d==stu[c].number){printf(已查到*********************************************\n);printf(姓名:%s性别:%s学号:%d缺课数:%d\n,stu[c].name,stu[c].sex,stu[c].number,stu[c].count);}}}voidadd()/*第三个子函数——add函数,用于模拟考勤过程。*/{inte,f,y;structname/*再建立一个叫name的结构体数组。*/{charnam[9];}na[300];FILE*fp;fp=fopen(stud,r);/*打开已建立的文件并将其输出到屏幕上。*/for(e=0;eSIZE;e++){fread(&stu[e],sizeof(structstudent),1,fp);printf(%s\t%s\t%d\t%d\t%d\n,stu[e].name,stu[e].sex,stu[e].number,stu[e].count,