学生考勤系统课程设计代码已验证Word下载.docx
《学生考勤系统课程设计代码已验证Word下载.docx》由会员分享,可在线阅读,更多相关《学生考勤系统课程设计代码已验证Word下载.docx(42页珍藏版)》请在冰豆网上搜索。
学生考勤系统的设计与实现
一、目的与要求:
1、目的:
(1)通过课程设计加深对数据结构课程基本内容的理解,掌握数据结构与算法的设计方法,学会数据的组织方法和现实世界问题在计算机内部的表示方法;
(2)初步掌握软件开发过程的问题分析、系统设计、程序编码等基本方法和技能,针对实际问题选择最佳的数据结构和算法;
(3)培养学生应用数据结构处理各种实际问题的能力,能够很好的组织数据,并有效的节省解决问题的存储空间;
(4)提高综合运用所学的理论知识和方法独立分析和解决问题的能力。
2、基本要求:
(1)要求利用C语言完成系统的设计;
(2)选择合适的数据结构,并定义数据结构的结构体,程序要加必要的注释;
(3)在系统设计中,要求运用数据结构的基本算法分模块实现系统功能;
(4)学生要发挥自主学习的能力,按照课程设计的任务要求,按时完成系统的程序代码设计及课程设计报告,上机时带上源程序、数据结构教材、C语言教材。
二、设计方法和基本原理:
1、功能要求:
考勤信息记录了学生的缺课情况,它包括:
缺课日期、第几节课、课程名称、学生姓名、缺课类型(迟到、早退、请假及旷课)。
试设计一考勤管理系统,使之能提供以下功能:
(1)录入学生的缺课记录;
(2)修改某个学生的缺课记录;
(3)查询某个学生的缺课情况;
(4)统计某段时间内,旷课学生姓名及旷课次数,按旷课次数由多到少排序;
(5)统计某段时间内,有学生旷课的课程及旷课人次,按旷课人次由多到少排序。
2、问题的解决方案:
根据系统功能要求,可以将问题解决分为以下步骤:
(1)分析系统需求,建立系统的功能模块设计;
(2)自顶向下分析系统中各功能模块的逻辑结构;
(3)根据模块顺序决定模块接口,即模块间的相互关系、模块之间的信息交换问题及界面的组织和设计;
(4)详细设计确定每个模块内部的具体算法,包括输入、处理和输出;
(5)完成系统各个函数的定义、函数调用及代码实现;
(6)功能调试;
三、程序设计和调试:
四、课程设计报告:
包括系统设计要求,设计思路,系统功能模块图,系统流程图,类的层次图(包括类成员列表),调试过程,关键程序代码,总结,参考文献。
1需求分析
1.1需求分析中国的学生数量庞大,学校众多,但配套的基础设施却并不完善,特别是数字化技术,计算机技术应用市场很大。
该系统能很好的帮助学校进行学生考勤管理,优化学校行政办公水平。
1.2功能需求描述
学生考勤系统应包含各班学生的全部信息。
每个学生是一条记录,包括姓名、性别、学号、日期、节次、出勤情况等信息。
本系统可以模拟考勤过程、记录考勤结果,并能在课程结束后按照设定的考勤评分标准自动给出每个学生的考勤分数。
2概要设计
◎确定界面,使用户可选择操作项目(录入,修改,查询,评分)。
◎录入功能:
使用结构体,要求用户输入姓名、性别、学号、日期、节次、当前出勤情况等信息,并写入文件。
◎修改功能:
使用户输入学号,姓名其中一项可以修改考勤其信息。
对于修改功能的实现,是先将所有文件内容读入到内存中,然后修改考勤值,最后再重新覆盖写入文件。
◎查询模块:
使用字符串比较函数,利用循环找到对应结构体数组元素,然后输出需要信息。
对于查询功能的实现,同修改,是先将所有文件内容读入到内存中,然后查找到其中某项,最后输出到屏幕。
◎评分模块:
系统根据总的应道考勤数按照百分制,求出每个学生的分数,并输出到屏幕。
2.1抽象数据类型定义
voidmain()//主函数
voidinput();
//录入数据函数
voidchange();
//修改数据函数
voidsearch();
//查询数据函数
voidevaluate();
//计算总评函数
2.2模块结构
结束
2.3函数的详细调用处理流程
3详细设计
1.main()函数
voidmain()
{
voidinput();
charitem;
system("
color34"
);
printf("
★◇★□★◇★□★◇★□★◇★□★◇★□★\n"
printf("
●●\n"
◇学生考勤管理系统◇\n"
◇◇\n"
◇1.学生信息及考勤情况录入◇\n"
◇2.学生信息及考勤情况修改◇\n"
◇3.学生信息及考勤情况查询◇\n"
◎◎\n"
●4.学生考勤总评分数查询●\n"
//用户界面
printf("
\n"
请选择您需要的操作\n"
scanf("
%c"
&
item);
switch(item)
{
case'
1'
:
input();
break;
2'
change();
3'
search();
4'
evaluate();
}//实现功能选择
}
流程图:
2.input()函数
voidinput()
inti,j=0,jx=1;
************************学生基本信息录入*****************************\n"
if((fp=fopen("
date.txt"
"
w"
))==NULL)
printf("
文件打开失败\n"
exit(0);
}
for(i=0;
jx==1;
i++)//输入信息循环
{for(;
j==0;
)//输入确认循环
getchar();
请输入第%d个学生的姓名"
i+1);
gets(stu[i].name);
请输入第%d个学生的学号"
gets(stu[i].number);
请输入第%d个学生的性别(男:
m女:
f)"
stu[i].sex=getchar();
请输入第%d个学生的生日(格式:
年月日)"
scanf("
%d%d%d"
stu[i].year,&
stu[i].month,&
stu[i].day);
请输入第%d个学生的当前考勤次数"
%d"
stu[i].kq);
您输入的信息为姓名%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);
j);
//输入确认
j=0;
if(fwrite(&
stu[i],sizeof(structstudent),1,fp)!
=1)printf("
文件写入错误\n"
//写入文件
是否继续输入下一个学生信息0终止1继续\n"
jx);
//继续输入选择
fclose(fp);
0返回主菜单\n"
getchar();
a=getchar();
if(a=='
0'
)main();
//返回主菜单
}
3.change()函数
voidchange()
{inti=0,j=0,sway,t,x;
charname[10],number[10];
**********************学生考勤修改**************************\n"
r"
))==NULL)//将文件内容读入内存
feof(fp)==0;
i++)fread(&
stu[i],sizeof(structstudent),1,fp);
//读取文件内容
//关闭文件
选择查找方式1按照姓名查找2按照学号查找"
sway);
/**********************按照姓名查找开始*************************///
if(sway==1)
请输入需要修改学生的姓名"
//printf("
i=%d"
i);
%s"
name);
for(j=0;
t!
=0;
j++)
{
t=strcmp(stu[j].name,name);
if(j==i)
{
t=0;
printf("
未找到您所查询的数据,请重新输入\n"
}
}
if(j<
i)//查询成功
您查找的学生信息如下\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);
是否修改该生考勤信息0否1是"
//选择是否修改考勤
x);
//输入选择变量值
if(x==1)
请输入新的考勤值"
scanf("
stu[j-1].kq);
//输入新的考勤值
if((fp=fopen("
))==NULL)//以只写方式打开文件
{
}
for(j=0;
j<
i;
j++)if(fwrite(&
stu[j],sizeof(structstudent),1,fp)!
是否继续修改其他学生考勤0否1是"
if(x==1)change();
/**********************按照姓名查找结束*************************///
/**********************按照学号查找开始*************************///
if(sway==2)
请输入需要修改学生的学号"
number);
t=strcmp(stu[j].number,number);
/**********************按照学号查找结束*************************///
4.search()函数
voidsearch()
***********************学生信息查询***************************\n"
是否继续查询其他学生信息0否1是"
if(x==1)search();
/**********************按照姓名查找结束*************************///
流程图:
5.evaluate()函数
voidevaluate()
floatscore;
***********************学生考勤分数计算**************************\n"
if(kqcs==0)
请输入应到考勤总数"
//请输入应到考勤总数
%f"
kqcs);
score=(stu[j-1].kq)/kqcs*100;
该生当前考勤分数为%5.2f"
score);
是否继续计算其他学生考勤分数0否1是"
if(x==1)evaluate();
stu[j-1].name,stu[