学生考勤管理系统课程设计
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
2012-2013学年第二学期
《高级语言程序设计》
课程设计报告
题目:学生考勤管理系统
专业:计算机科学与技术
班级:12(2)班
姓名:李天栋
指导教师:孙淮宁
成绩:
计算机与信息工程系
2013年6月30日
目录
1设计内容及要求 (3)
1.1设计内容 (3)
1.2设计任务及具体要求 (3)
2概要设计 (4)
2.1该系统的功能简介 (4)
2.2 总体程序框图 (4)
2.3各个模块之间的主要关系 (5)
3设计过程或程序代码 (5)
3.1各个模块的程序流程图及运行界面 (5)
3.2对关键代码加以分析说明 (10)
4程序调试分析 (14)
5小结 (17)
致谢 (17)
参考文献 (17)
附:源程序 (18)
1 设计内容及要求
1.1设计内容
学生考勤信息记录了学生的缺课情况,它包括:缺课日期、第几节课(连续用begin-end 的形式表示)、课程名称(课程名称中不会出现空格)、学生姓名、缺课类型(迟到、早退、请假及旷课)。
1.2设计任务及具体要求
任务:(1)给出软件结构,说明各模块的功能。
(2)设计相关的类,并说明该类的作用。特别要用图形说明类之间的继承关系。
(3)编写代码
具体要求:(1)定义相关的数据,比如:
学生学号
学生姓名
课程名称
上课时间
到课时间
出勤状态 [旷课/病假/事假/迟到/早退]
(2)能够进行以下操作:
A.能够对数据进行增、删、改、查操作。
B.能够按学号顺序列出某一课程的出勤状况
2 概要设计
2.1系统的功能简介
考勤管理系统,有以下功能:
(1).录入学生的缺课记录:从键盘输入数据(提示:为避免重复从键盘输入数据,测试时可将数据存储在文件中,利用输入重定向功能读入),输入格式为:缺课日期第几节课课程名称学生姓名缺课类型每行一条纪录。例如:
2013-04-29 2-4 中国近现代文学史李云龙迟到2013-04-28 2-4 大学生社交礼仪马志鹏旷课
(2).修改某个学生的缺课记录:可以对缺课纪录的任意部分进行修改,然后显示一下修改后的纪录。
(3).查询某个学生的缺课情况:查询结果按照日期升序排序,同一天内按照所缺课程的时间升序排序。
(4).统计某段时间内(以天为单位),旷课学生姓名及旷课节数,查询结果先按旷课节数降序排序,旷课节数相同的学生按姓名升序排序;
(5).统计某段时间内,有学生旷课的课程及旷课人次,按旷课人次由多到少排序,旷课人次相同的课程按课程名称升序排序。
2.2 总体程序框图
2.3各个模块之间的主要关系
本程序用结构体新定义一种数据类型,系统包含一个主函数和6个子函数(insert(),check(),rivise(),Delete(),output(),deleteallchain()),6个子函数分别用来插入、查询、修改、删除、输出、收回动态分配的空间,在主函数中通过调用子函数来实现所需功能。
3 设计过程或程序代码
3.1各个模块的程序流程图及运行界面
学生考勤管理系统中四个类的类层次图为:
图2 学生考勤管理系统中中四个类的类层次图学生考勤管理系统中各功能模块的实现:
图3 学生考勤管理系统中菜单函数的功能图1、学生缺课信息录用功能模块:
图4 学生缺课信息录入的功能
2、修改某学生缺课信息功能的模块图
图5 学生考勤管理系统修改学生缺课信息功能图
3 查询某学生缺课信息功能图:
图6 学生考勤管理系统查询学生缺课信息功能图
4、统计某段时间内旷课学生姓名及旷课节数功能模块:
图7统计某段时间内旷课学生姓名及旷课节数功能图
5、统计某段时间内,有学生旷课的课程及旷课人次功能模块
图8统计某段时间内,有学生旷课的课程及旷课人次功能图
图9 学生考勤管理系统中四个类的UML图
3.2对关键代码加以分析说明
#include
#include
#include
struct chuqin{ //用结构体定义一个新的数据类型出勤chuqin
char name[10],number[20],subject[15],time1[15],time2[15],zhuangtai[10];
chuqin *next;
};
//------------------------------------------------------------------------------------ void insert(chuqin* &head1)//创建单向链表并插入数据
{
chuqin *n;//定义一个chuqin类型指针n
while(1)//一个死循环
{
n=new chuqin;//用new运算符动态分配一个chuqin空间给指针n
cout<<"请依次输入姓名、学号、课程、上课时间、到课时间、出勤状态(第一个字母输入N表示结束插入):\n";//输出提示信息
cin>>n->name;//输入姓名
if(n->name[0]=='N') //判断刚才输入的第一个字母是否为N
{
delete n;//若输入的第一个字母为N,则用delete运算符收回刚才动态分配的空间
break;//跳出死循环,结束插入
}
cin>>n->number>>n->subject>>n->time1>>n->time2>>n->zhuangtai;//若条件不满足,则继续输入学号、课程、上课时间到课时间等
if(!head1) head1=n,n->next=NULL;/*假如head指针为空,则直接让head指针指向n指向的存储空间(head=n),将n->next赋值为空,即不指向任何存储空间*/
else n->next=head1,head1=n;//若head指针非空,则将n指向的存储空间插在最前面
}
}
//------------------------------------------------------------------------------------ void check(chuqin *head)//子函数实现查询功能
{
char number1[10];//定义一个字符串数组name1临时存放要查询的姓名
int flag=1;
cout<<"请输入要查询的学号:";//输出提示信息
cin>>number1;//输入要查询的学号
while(head)//用while循环检索查询是否有匹配的姓名
{
if(strcmp(number1,head->number)==0) //用函数strcmp()判断是否有匹配姓名