1、C语言课程设计汇报学生姓名:学 号:学 院:理学院班 级:题 目:学生考勤系统指导老师: 李鹏松 职称: 教 授 胡建平 副教授 朱振菊 试验师 07月13日目 录目录I一、选题背景11.1 课题背景.11.2 编写目标.1 1.3 本课题所需处理问题.21.4 技术要求2二、算法设计22.1 问题分析2 2.1.1 题目.3 2.1.2 功效要求.32.2 需求分析.3 2.2.1 功效需求.3 2.2.2 设计方案.4 2.2.3 步骤图.5三、程序设计及功效说明63.1 关键自定义函数分析.63.1.1 select函数.6 3.1.2 check函数.73.1.3 manage函数.8
2、3.1.4 modify函数.103.1.5 calculate函数.11四、结果分析.124.1 运行结果12五、总结及心得体会.14参考文件.15源程序.16一、 选题背景1.1课题背景程序实践是本科生关键教学步骤之一。经过程序实践,强化学生计算机应用技能,使学生验证、巩固和充实所学理论知识, 加深对相关内容了解,拓宽知识面,培养学生创新精神和实践能力 学生考勤管理程序是学校管理工作中一个比较关键任务,过多学生考勤管理程序工作给学校管理人员带来了很大麻烦。即使原始统计方法在一定程度上能够处理问题,可是现在计算机已经走到了我们生活,它不足之处就显而易见了。 学生考勤管理程序,是一个对于学生考
3、勤管理系统, 不仅大大降低了考勤管理人员大量工作,而且还方便了班级和学校对学生出课率查询,只要通计算机登入本系统就能立即修改、更正学生考勤信息,使信息真实、有效。这么节省了大量人力物力,节省了宝贵时间,大大提升了工作效率.用C语言进行了该系统编写。操作上努力争取实现人性化、合理化,满足学校、老师、非计算机管理人员使用和查看1.2编写目标作为用户和该系统软件开发维护人员共同遵守软件需求规范说明,本软件需求说明书关键目标是明确所要开发软件所应含有功效、性能,使系统分析人员和软件设计人员能清楚地了解用户需求,并在此基础上深入提出概要设计和完成后续设计和开发工作,为软件开发范围、业务处理规范提供依据,
4、也是应用软件进行协议最终验收依据。 系统对学校全体学生资料和考勤情况进行管理,经过每日打卡把出勤信息输入到学校考勤管理中心,保留学生每日出勤情况,方便于统计学生出勤情况。同时方便班长查阅,即节省了人力,又省去了中间很多轻易犯错步骤。让学校学生考勤管理更含有透明性,且方便管理。 另外系统还包含系统数据安全和用户管理问题、多种代码使用和维护问题、数据安全和数据维护问题、统计报表生成和输出等问题,所以还要求系统含有系统管理和事务处理功效。总而言之,要求经过系统开发,达成系统项目标总体目标是:在整个系统框架下,结合学生在学校实际出勤情况需要实现对数据更新、数据查询、数据统计、数据分析等功效进行有效管理
5、。并提供用户友好接口,满足学校管理需求软件,提升学校对学生管理效率,从而完善学校管理制度。 预期读者就是各类学校系统管理员或系统求购者,使用前仔细阅读此软件说明是很必需,方便愈加好使用、管理和维护此系统!1.3本课题所需处理问题现代大学课堂中考勤方法多为课堂上老师点名模式,这种方法是一个浪费教育资源表现。老师点名首先是为了留住学生,其次也是为学生负责,对那些出勤学生负责。不过点名是一件花费时间事情,老师在讲台上逐一地念名字,同学答到,最少耗时五分钟。然而,学生在讲台下,则需要十分认真地等念到自己名字,这严重浪费了课堂时间和课堂精力。假如学生用自主签到作为考勤基础方法,能够变被动为主动,这么不仅
6、仅节省了课堂时间,提升了课堂学习效率;还提升学生自主管理意识和能力。1.4技术要求 该系统是基于C语言这门基础计算机语言设计开发,该系统制作需要我们对于指针,结构体能够熟练地应用,从而实现对于文件修改、储存、读取等等。该系统工具采取Micrisift Visual C+6.0。首先设计一个老师用信息输入界面,利用所学c语言知识编写程序,有利用算法,用N-S步骤图表示算法,还有c语言多种数据类型运算符表示式等,其中有整形变量应用来输入输出成绩等,字符型变量等,还有利用c语言次序程序设计中多种函数表示等,而且利用了选择结构,循环结构利用,利用数组应用来表出数据,应用函数参数、函数值、函数调用、还有
7、函数嵌套调用递归调用来计算学生最终输出成绩等,应用了局部变量和全局变量。应用结构体变量、结构体数组等来做该系统。而且应用文件多种知识,比如文件读写、文件定位、犯错检测等工具。 二、算法设计 2.1 问题分析2.1.1题目 学生考勤系统2.1.2功效要求 学生考勤系统应包含各班学生全部信息,每个学生是一条统计,包含姓名,性别,学号,出勤情况等. 本系统可模拟考勤过程,统计考勤结果,并能够在课程结束后根据设定考勤评分标准自动给出每个学生考勤分数.2.2 需求分析2.2.1 功效需求为了处理人工操作在学生考勤中存在不足,从学校管理人员能够更轻易、更方便地使用计算机对学生进行管理,以实现无纸化操作方面
8、进行分析。学生考勤管理系统能够提供学生考勤情况统计,方便地对学生考勤进行评定。学生考勤管理系统应实现以下功效。 1.学生信息管理 添加学生基础信息,包含学生学号、姓名、性别、地址、所在班级等信息,修改学生基础信息,删除学生基础信息,查看学生基础信息。 2.学生考勤管理 包含出勤管理,请假管理。它们能够实现对学生日常关键考勤情况统计管理。老师能够把学生考勤情况输入到对应数据库,也可对其进行添加、修改、删除。 3.查看成绩 学生查看所学课程平时成绩统计管理。2.2.2 设计方案此程序是过程性语言设计。利用多个条件语句,主体采取是链表指针。系统设计采取了数组语句、选择语句和循环语句,在需要处理大量同
9、类数据时,这么就使程序书写愈加简练。程序使用了布尔函数。选择语句多采取if多分支选择结构和switch语句。首先计算switch表示式,然后在caes子句中寻求值相等常量表示式,并以此为入口符号,由此开始次序实施。循环语句采取了 for语句等、do-while语句,for语句用于已知循环次数循环结构,括号中三个量分别用来表示循环变量初值、循环终值和循环增量。do-while语句先循环后判定, Break语句在switch语句中,确保多分支情况正确实施,在循环语句中,强制终止本层循环。保留和读取函数是经典函数功效,一个程序是由若干个函数组成,保留和读取函数是和其它函数相互调用。该系统设计本着简明
10、扼要标准设计开发,有着人性化提醒界面和提醒语句,结构完整有致,简单明了。1. 设计考勤系统框架2. 将框架分为三部分分别由小组三人完成3. 设计考勤系统子系统:学生信息管理系统4. 设计目录5. 设计考勤算法6. 将框架组合完成课设2.2.3步骤图图21 系统步骤图三、程序及功效说明3.1关键自定义函数分析3.1.1select函数功效说明:实现对目录选择步骤图: void select() int m;scanf(%d,&m);/输入要选择数字switch(m)case 1: check();break;case 2: manage();break;case 3: calculate();b
11、reak;case 4: quit();break;default: printf(输入错误!请重新输入:n);/*条件选择*/3.1.2check函数功效实现:此函数关键是学生签到功效实现步骤图: void check()int i,n;char no30;system(cls);/窗口清屏printf(请输入学号:n);scanf(%s,no);/输入查找学号for(i=0;i2;i+)if(strcmp(no,stui.num)=0)/匹配学号stui.th+;/考勤加一printf(签到成功!n);printf(请输入考勤系统功效数字:n);n=5;/5赋给nif(n!=5)/当没有匹
12、配到学号时实施语句printf(查无此人n);save();/保留3.1.3manage函数功效实现:对学生信息进行管理,添加,修改,查询等步骤图: void manage()int a,i=1;system(cls);/清屏printf(n);printf(tt*n);printf(ttt 学生信息管理系统n);printf( 1.添加学生信息n);printf( 2.查询学生信息n);printf( 3.修改学生信息n);printf( 4.退出学生信息管理系统n);printf(tt*n);scanf(%d,&a);/输入数字while(i!=0)/实施循环if(a=0)/假如a在0-3
13、范围内switch(a)case 1: input(); break;case 2: search(); break;case 3: modify(); break;printf(请输入信息管理功效数字:);scanf(%d,&a);/输入数字elseif(a=4)/假如a=4退出系统system(cls);break;elseprintf(输入错误!请重新输入:n);scanf(%d,&a);/输入数字3.1.4modify函数功效实现:对已经写入学生信息进行修改。步骤图: void modify() int i,j,c; char k30; FILE *fp;/定义文件指针 if(fp=f
14、open(stu.txt,rb)=NULL)/假如文件打开失败 printf(cannot open filen); return ;/返回上级函数 printf(n请输入要修改学生学号:); scanf(%s,k);/输入学号for(i=0;i2;i+)fread(&stui,sizeof(struct student),1,fp);/文件读出for(j=0;j3;j+)/循环 if(strcmp(k,stui.num)=0)/学号匹配 c=i; /找到数据序号 fclose(fp);/文件关闭printf(请输入新修改内容:n); /下面输入该学生新信息 printf(请输入学生姓名:n)
15、;scanf(%s,stuc.name);printf(请输入学生学号:n); scanf(%d,stuc.num);printf(请输入学生性别(m:男生f:女生):n);scanf(%s,stuc.sex); save();/保留3.1.5calculate函数功效实现:经过对学生签到情况统计,计算出学生最终考勤成绩。步骤图: void calculate() int i;system(cls);/清屏printf(课程结束考勤评分以下n);for(i=0;i2;i+)/循环printf(学号:%s 姓名:%s 分数:%d,stui.num,stui.name,stui.th*25);/输
16、出成绩 考勤次数*25printf(n);printf(请输入考勤系统功效数字:nn);四、结果分析4.1运行结果 主目录 签到界面 学生信息管理目录界面 添加学生信息界面 查询学生信息界面 修改学生信息界面 考勤评定分数界面 退出考勤系统界面 五、总结及心得体会 此次c语言课程设计,在指导老师精心教导下,我学会了怎样用c语言编写一个简单应用程序。首先要对程序设计要求有一个比较明确认识,然后系统分析和系统设计,最终是代码设计和调试。程序实现上,设计了简单查询界面,将各个功效集中出来根据程序编写标准,便于查询。 经过十二个月对c语言程序学习,我们全部学到了不少东西,可能有部分人学不够理想,但不管
17、怎样,这些知识全部为我们下一步学习打下了坚实基础。做这么一个课程设计,首先是为了检验我们一学期学习结果,其次也是为了让我们深入掌握和利用它,同事也让我们认清自己不足之处和微弱步骤,加以填补加强。本程序在刚刚开始进行编写时,思绪是很清楚。但写完程序后,调试程序过程中发觉有很多错误,像在printf函数语句后面少加分号,if函数后面加上分号。或部分变量定义错误。这些问题全部是我平时学习马虎造成。这些问题经过我数次调试,已经成功处理。 我在编写此程序代码时,我学习到很多知识,这些知识有在书本上难以学到,像system(“cls”);清除屏幕函数。我在网络上查询资料和请教同学,把自己所学习到c语言知识
18、综合在一起来进行利用,写出了此程序代码。最终,我总结了写程序经验:一定要仔细。 参考文件1 谭浩强C语言程序设计教程北京:高等教育出版社,.2 曹哲主编C语言试验和课程设计指导北京:机械工业出版社,.源程序#include#include#include#include/*包含头文件*/*定义结构体*/struct student char name20;char num30;char sex2;int th;stu2;/*定义结构体数组*/*自定义函数申明*/void menu();void select();void check();void manage();void input();v
19、oid save();void search();void modify();void calculate();void quit();/*全局变量*/FILE *fp;/*主函数*/main() int i=1;stu0.th=0;/给th赋值stu1.th=0;/给th赋值menu();while(i!=0)select();if(i!=n) menu();/*主函数中一直实施循环*/*目录函数*/void menu() printf(tt*n);printf(ttt 欢迎使用学生考勤系统n);printf(ttt 本科课程累计四节n);printf( 1.学生每日签到n);printf(
20、 2.学生信息管理n);printf( 3.考勤评定分数n);printf( 4.退出考勤系统n);printf( 请选择对应数字n);printf(tt*n);/*选择函数*/void select() int m;scanf(%d,&m);/输入要选择数字switch(m)case 1: check();break;case 2: manage();break;case 3: calculate();break;case 4: quit();break;default: printf(输入错误!请重新输入:n);/*条件选择*/*签到函数*/void check()int i,n;char
21、 no30;system(cls);/窗口清屏printf(请输入学号:n);scanf(%s,no);/输入查找学号for(i=0;i2;i+)if(strcmp(no,stui.num)=0)/匹配学号stui.th+;/考勤加一printf(签到成功!n);printf(请输入考勤系统功效数字:n);n=5;/5赋给nif(n!=5)/当没有匹配到学号时实施语句printf(查无此人n);save();/保留/*信息管理函数*/void manage()int a,i=1;system(cls);/清屏printf(n);printf(tt*n);printf(ttt 学生信息管理系统n
22、);printf( 1.添加学生信息n);printf( 2.查询学生信息n);printf( 3.修改学生信息n);printf( 4.退出学生信息管理系统n);printf(tt*n);scanf(%d,&a);/输入数字while(i!=0)/实施循环if(a=0)/假如a在0-3范围内switch(a)case 1: input(); break;case 2: search(); break;case 3: modify(); break;printf(请输入信息管理功效数字:);scanf(%d,&a);/输入数字elseif(a=4)/假如a=4退出系统system(cls);b
23、reak;elseprintf(输入错误!请重新输入:n);scanf(%d,&a);/输入数字 /*输入函数*/void input() int i;for (i=0;i2;i+)/循环printf(请输入第%d学生姓名:n,i+1);scanf(%s,stui.name);printf(请输入学生学号:n); scanf(%s,stui.num);printf(请输入学生性别(m:男生f:女生):n);scanf(%s,stui.sex);/*输入信息*/save();/保留/*查询函数*/void search() int i,n; char no30;/定义数组printf(请输入您要
24、查找学生学号:n);scanf(%s,no);/输入学号for(i=0;i2;i+)if(strcmp(no,stui.num)=0)/匹配学号printf(n学生信息为:姓名 学号 性别n);printf(学生基础信息:%-5s,%-5s,%-3snn,stui.name,stui.num,stui.sex);/输出信息n=5;/5赋给nif(n!=5)/当学号匹配不到时实施printf(查无此人n);/*保留函数*/void save() int i;FILE *fp;/定义文件指针if(fp=fopen(stu.txt,wb)=NULL)/假如文件打开失败printf(cannot op
25、en filen);return;/返回上级函数for(i=0;i2;i+)/循环if(fwrite(&stui,sizeof(struct student),1,fp)!=1)/假如写入失败printf(file write errorn);fclose(fp);/文件关闭printf(已保留n);/*修改函数*/void modify() int i,j,c; char k30; FILE *fp;/定义文件指针 if(fp=fopen(stu.txt,rb)=NULL)/假如文件打开失败 printf(cannot open filen); return ;/返回上级函数 printf(
26、n请输入要修改学生学号:); scanf(%s,k);/输入学号for(i=0;i2;i+)fread(&stui,sizeof(struct student),1,fp);/文件读出for(j=0;j3;j+)/循环 if(strcmp(k,stui.num)=0)/学号匹配 c=i; /找到数据序号 fclose(fp);/文件关闭printf(请输入新修改内容:n); /下面输入该学生新信息 printf(请输入学生姓名:n);scanf(%s,stuc.name);printf(请输入学生学号:n); scanf(%d,stuc.num);printf(请输入学生性别(m:男生f:女生
27、):n);scanf(%s,stuc.sex); save();/保留/*考勤评定函数*/void calculate() int i;system(cls);/清屏printf(课程结束考勤评分以下n);for(i=0;i2;i+)/循环printf(学号:%s 姓名:%s 分数:%d,stui.num,stui.name,stui.th*25);/输出成绩 考勤次数*25printf(n);printf(请输入考勤系统功效数字:nn);/*退出函数*/void quit() printf(n);printf(n);printf(tttt谢谢使用本系统!n);printf(tttt*再见!*n);printf(tt 制作人:李鑫宇,谷维鑫,刘佳伟n);printf(n);exit(0);