考勤系统设计.docx
- 文档编号:6875664
- 上传时间:2023-01-12
- 格式:DOCX
- 页数:15
- 大小:108.02KB
考勤系统设计.docx
《考勤系统设计.docx》由会员分享,可在线阅读,更多相关《考勤系统设计.docx(15页珍藏版)》请在冰豆网上搜索。
考勤系统设计
学号:
201340420224
编号:
B04731017
实训报告
教学院
计算机
课程名称
大型软件项目实训
专业
网络工程
班级
二班
姓名
何娟
2016
年
9
月
20
日
一.实训内容
1.实训目的与要求
1.1、目的:
(1)要求学生达到熟练掌握C++语言的基本知识和技能;
(2)基本掌握面向对象程序设计的基本思路和方法;
(3)能够利用所学的基本知识和技能,解决简单的面向对象程序设计问题。
1.2、基本要求:
(1)要求利用面向对象的方法以及C++的编程思想来完成系统的设计;
(2)要求在设计的过程中,建立清晰的类层次;
(3)在系统中至少要定义四个类,每个类中要有各自的属性和方法;
(4)在系统的设计中,至少要用到面向对象的一种机制。
1.3、创新要求:
在基本要求达到后,可进行创新设计,如根据查找结果进行修改的功能。
2项目背景
2.1对现有系统的分析
目前高校学生上课考勤管理都是以任课老师上课点名,记录学生上课情况。
对于请假需要通过向辅导员递交请假条并获得同意方能生效。
这种模式在目前高校管理中暴露了不可避免的弊端:
a)学生对自己整个学期的上课出勤情况没有整体的统计信息
b)班主任及辅导员对本班学生整个学期的上课出勤情况不易查看;
c)学生请假不方便,如:
学生生病或有其他急事需请假,必须找辅导员批假条,而辅导员事情比较多不可能经常坐在办公室里等着;
d)在这种方式下,由于学生考勤信息需要多次登记、反复输入,因而出错率较高,效率也低下。
e)各学院与学生考勤管理中心各自记录所有学生的考勤情况,对于各考勤表,考勤管理员要反复的执行登记、核对、统计,稍不注意就出错,对于错误的改正,更是麻烦。
浪费人力并且效率低。
f)数据不能共享,无法互相利用,互相参照,导致大量数据冗余。
g)难避免考勤中的弄虚作假现象。
在这种情况下,学生考勤管理中心只能一次又一次地扩大员工队伍,期望借此提高效率。
但是事实上,工作效率不但没有改善,工资支出却年年增高,增加了学校的经济支出。
在此情况下,开发一个新的、高效的、更加灵活方便、能实时记录学生考勤信息的学生考勤管理系统迫在眉睫。
2.2处理流程和数据流程
人工的考勤系统主要包括请假系统,考勤系统,管理中心,主要供学生,辅导员,任课老师,班主任所使用。
如下为系统流程图:
在请假系统中,学生想要请假需要向辅导员老师写请假条并说明原因,获得辅导员的同意才能请假成功,否则失败。
而学生的请假情况记录在请假条的存根上,在向任课老师请假时也需自己或请同学向老师出示请假条并说明原因,由任课老师在学生名单上记录为“请假”。
辅导员、任课老师、学生只有通过查询请假条的存根或考勤表才可知道请假情况。
2.3局限性
该系统会浪费很多的时间而且会很麻烦,当学生需要请假时必须找到辅导员写请假条才行,另外课堂上由于是由任课老师通过点名的方式考勤所以会造成混乱不清更问题。
因此,开发一个新的高校学生考勤管理系统迫在眉睫,同时,我们的系统也应运而生。
3.功能需求
这是一个记录学生上课情况的一个考勤系统,方便记录、查询、统计学生考勤信息。
学生考勤管理系统用于记录学生的缺课情况,它包括:
缺课日期、第几节课、课程名称、学生姓名、学号、缺课类型(迟到、早退、请假及旷课)。
优化界面使学生使用更加便捷,在保证信息共享的同时又注重了信息的安全性而不被篡改。
该系统除了用于学生课堂的考勤,还可用于学生出早操情况的考核,开会出勤情况的考核等。
而且可以进一步开发,与教务处学生成绩数据库相连接,将考勤结果作为平时成绩或期末成绩及评优的参考。
另外该系统还可作为请假系统代替传统写请假条请假的问题。
在安全方面,登陆系统时,需验证身份和密码,只有通过验证的身份才能进入系统进行相关的操作。
系统间信息的传递也需要进行安全设置,以防止学生的考勤信息被恶意篡改。
主要分为6大模块,分为录入学生的缺课记录、修改某个学生的缺课记录、查询某个学生的缺课情况、统计旷课学生姓名及旷课节数、统计旷课课程及旷课人次和系统以菜单方式工作。
具体需求如下:
考勤信息记录了学生的缺课情况,它包括:
缺课日期、第几节课(连续用begin-end的形式表示)、课程名称(课程名称中不会出现空格)、学生姓名、缺课类型(迟到、早退、请假及旷课)。
试设计考勤管理系统,使之能提供以下功能:
1).录入学生的缺课记录:
从键盘输入数据(提示:
为避免重复从键盘输入数据,测试时可将数据存储在文件中,利用输入重定向功能读入),输入格式为:
缺课日期第几节课课程名称学生姓名缺课类型
每行一条纪录。
例如:
2016-04-292-4C++面向对象程序设计李强迟到
2009-04-282-4高数马志旷课
2).修改某个学生的缺课记录:
可以对缺课纪录的任意部分进行修改,然后显示一下修改后的纪录。
3).查询某个学生的缺课情况:
查询结果按照日期升序排序,同一天内按照所缺课程的时间升序排序。
4).统计某段时间内(以天为单位),旷课学生姓名及旷课节数,查询结果先按旷课节数降序排序,旷课节数相同的学生按姓名升序排序;
5).统计某段时间内,有学生旷课的课程及旷课人次,按旷课人次由多到少排序,旷课人次相同的课程按课程名称升序排序;
6).系统以菜单方式工作。
(所谓菜单指用户可以自由选择所要执行的功能)
学生可以通过以上功能录入信息、修改信息、查询信息、整理统计出所要了解的信息,除了要实现上述的基本功能之外,本系统还应该在细节上下工夫,使用户使用方便,在使用的过程中保持一个愉快的心情。
学生考勤管理系统有广大的用户群,这其中有老师、有教务处主任、有公司管理人员,也可以供给一般用户使用。
总之该系统可以满足用户需求,实现对其管理的人员的考勤工作。
4、总体设计
学生考勤管理系统包含五个大的功能,分别是:
录入学生缺课信息、修改学生缺课信息、查询某个学生的缺课情况、统计某段时间内(以天为单位),旷课学生姓名及旷课节数和统计某段时间内,有学生旷课的课程及旷课人次。
学生的缺课信息主要包含缺课日期,第几节课、课程名称,学生姓名,缺课类型。
在录入学生缺课信息时根据系统提示逐一输入。
每输入完一条信息,系统会提示是否继续输入,用户可以选择继续或返回主菜单。
在修改学生缺课信息时,用户首先输入要修改的学生姓名,系统会检索如果系统中有该学生的相关信息则系统首先会提示用户修改该学生的那一部分信息,用户可自行选择。
如果系统中没有该学生的相关信息,则系统会给相关提示,用户可以选择继续输入要修改的学生姓名或选择退出返回主菜单。
在查询学生缺课信息时,用户先输入要查询的学生姓名,系统检索判断是否存在该
学生的信息然后做出相应的提示。
总之,用户可以方便的在系统提示下进行使用。
学生考勤管理系统中功能模块图:
5、详细设计
我在我们小组中负责的是修改某学生缺课信息功能和统计学生旷课的课程及旷课人次等这两大功能模块。
1、修改某学生缺课信息功能的模块图
图1学生考勤管理系统修改学生缺课信息功能图
2、统计某段时间内,有学生旷课的课程及旷课人次功能模块
图2统计学生旷课的课程及旷课人次功能图
此系统不仅可以直接统计某段时间内的旷课课程及旷课人次,除此之外,还可以查看学生的旷课课程及旷课人次。
下面是部分代码分析
//时间类
classtime
{
public:
time(inty=0,intm=0,intd=0)
{
year=y;month=m;day=d;
}
~time(){}
protected:
intyear,month,day;
};
这是一个基类,用来记录时间信息,记录年份,月份以及时刻点,以供其它类来进行派生。
//信息类
classxinxi:
publictime
{
public:
xinxi(){tiaoshu++;}
~xinxi(){tiaoshu--;}
voidsetname(char*n){strcpy_s(name,n);}
voidsettime(inty,intm,intd){year=y;month=m;day=d;}
voidsetqklx(char*qk){strcpy_s(queke,qk);}
voidsetjieci(char*jc){strcpy_s(jieci,jc);}
voidsetkechen(char*kc){strcpy_s(kechen,kc);}
char*getname(){char*n;n=name;returnn;}
char*getqklx(){char*qk=queke;returnqk;}
char*getjieci(){char*jc;jc=jieci;returnjc;}
char*getkechen(){char*gk;gk=kechen;returngk;}
int*gettime();
private:
charname[20];//姓名
charjieci[3],kechen[10],queke[10];
inttm[3];
staticinttiaoshu;
};
这是一个信息类,用来记录学生的姓名,以及上课课程名,还有缺课课程名和节次,以供后期查询。
//缺课课程类
classqkechen:
publicxinxi
{
public:
qkechen(){kcshu++;}
~qkechen(){kcshu--;}
intgetrc(xinxist1[],intn,intj);
charqkn[20];//公有数据成员
private:
intrenci;
staticintkcshu;//静态数据成员
};
intqkechen:
:
kcshu=0;
intqkechen:
:
getrc(xinxist1[],intn,intj)
{
renci=0;
renci++;
for(inti=0;i if(*(st1[i+1].gettime()+1)==*(st1[j].gettime()+1)&&*(st1[i+1].gettime()+2)== *(st1[j].gettime()+2)) if(strcmp(qkn,st1[i].getkechen())==0) renci++; returnrenci; } //缺课学生类 classqstu: publicxinxi { public: qstu(){qst++;} ~qstu(){qst--;} voidprint(xinxi&st1); intgetjs(xinxist1[],intn,intj); intsetjs(intjs=0) { jieshu=js; } charqstn[20]; private: intjieshu; staticintqst;//静态数据成员 }; /菜单函数 voidcaidan() { system("colorA"); cout<<"*************************************************************"< cout<<"*学生考勤管理系统*"< cout<<"*************************************************************"< cout<<"3.-------------查询学生的缺课情况---------------------------*"< cout<<"4.--------统计某段时间内旷课学生姓名及旷课节数--------------*"< cout<<"5.--------统计某段时间内旷课的课程及旷课人次----------------*"< cout<<"6.----------------退出系统----------------------------------*"< } //输入函数 intshuru(xinxist1[]) { chara; cout<<"------输入开始! ----"< do{ q++; cout<<"请输入学生姓名"< cin>>name; st1[q].setname(name); cout<<"请输入课程名称"< cin>>kechen; st1[q].setkechen(kechen); cout<<"请输入缺课日期"< cin>>y>>m>>d; st1[q].settime(y,m,d); cout<<"请输入缺课类型"< cin>>queke; st1[q].setqklx(queke); cout<<"请输入缺课节次"< cin>>jieci; st1[q].setjieci(jieci); cout<<"是否还要继续输入: (y/n)"< cin>>a; }while(a=='y'); returnq+1; } //修改函数 voidxiugai(xinxist1[],intn) { intk=1,j=0,a[10]; intflgh; inth; while(k==1) { cout<<"请输入你要修改缺课记录的学生姓名"< cin>>name; flgh=0; for(inti=0;i if(strcmp(name,st1[i].getname())==0) do{ a[j]=i; cout<<"1.修改日期2.修改节次3.修改课程名称4.修改缺课类型"< cout<<"请输入要选择的数值(1,2,3,4)"< intb; cin>>b; if(b==1) { cout<<"请输入新日期"< cin>>y>>m>>d; st1[i].settime(y,m,d); } elseif(b==2) { cout<<"请输入新节次"< cin>>jieci; st1[i].setjieci(jieci); } elseif(b==3) { cout<<"请输入新课程名称"< cin>>kechen; st1[i].setkechen(kechen); } elseif(b==4) { cout<<"请输入新缺课类型"< cin>>queke; st1[i].setqklx(queke); } flgh=1;j++; }while(b<1||b>4); if(flgh==0) { cout<<"没有你要找的学生姓名,请重试要退出请按0"< cin>>k; } else { cout<<"还要继续吗(1\0)退出请按0"< cin>>k; } } for(inti=0;i { h=a[i]; xiansi(st1[h]); } } 二.项目调试与测试: 1.系统调试 程序编写完成后,我进行了程序调试。 调试过程中,出现了以下问题: 当录入学生缺课信息时,出现了无法退出录入函数的情况,主要原因是输入函数中while循环语句没有设置跳出循环的条件。 除此之外,修改某学生缺课信息时,如果没有该学生的缺课信息,系统没有提示要用户没有该学生信息,也没有建议用户重新输入要修改的学生姓名。 由此我发现了该系统修改学生缺课信息的不足。 于是,我对修改函数进行了修改与完善。 在该函数中,我设置了if语句用来判断系统中是否存有用户要修改的学生缺课信息。 如果没有,则提示用户没有该学生的缺课信息,用户可以选择继续输入要修改的学生姓名或者退出修改环节,可以在 循环语句中改变循环进行的条件从而终止循环。 至于在修改后显示该学生的缺课信息,运行时发现系统并没有做到这一点,对源代码检查之后发现是修改函数中显示函数的调用出了点问题,显示函数的实参有误,应该把要修改缺课信息的学生所在的信息类对象作为实参,然后用显示函数的形参引用实参对象,通过对象调用信息类的成员函数,从而实现显示功能。 至于该系统的查询功能的实现,在调试时发现还有欠缺,当随便输入一个学生姓名时,系统没有显示该学生的缺课信息,也没有提示系统没有找到该学生的有关信息,经过在查询函数while循环中加入一个if 条件语句后,系统实现了提示用户的功能,如果系统中没有你要查询的学生缺课信息,系统将会提示用户,用户可以继续输入要查询的学生姓名也可以通过按系统设置的退出键选择退出查询环节。 至于两个统计功能至今没有完善,主要是特定时间学生缺课次数和课程的缺课人次的统计问题尚待解决,现如今只完成了一两条学生缺课信息的统计。 主要问题是特定时间这个前提条件对我造成了一定的障碍。 对系统中存储的信息进行查找和统计运用对象指针比较方便,但我没有使用,也算有点遗憾。 在调试过程中我出现的最严重的问题是函数形参引用对象数组,结果系统提示将近几十个错误,在我把函数形参改为对象数组后,错误一下减少了很多。 还有比较突出的问题是整个程序不知哪掉了个}号系统会提示有错,但就不懂那专业术语啥意思。 还有就是我以为派生类公有继承的基类的保护成员在派生类内为公有成员,可编译时才发现是不对的。 通过认真调试,我发现我有了收获。 2.运行结果分析 1.刚进入系统时界面 这是开启系统时的进入界面,用户可以根据要求选择不同的菜单项,输入对应的数字即可,然后再根据提示进行信息录入。 2.这是录入学生的缺课记录界面 这个是用来录入学生的缺课记录,用来实现录入缺课信息功能,输入学生的姓名、缺课课程名、缺课日期、缺课类型以及缺课节次等信息用来录入。 3.这是录入学生的缺课记录界面 这是修改缺课记录功能,要修改对应的记录,就输入相应的名字,以供根据姓名用来查找对应的缺课记录信息,找到对应的记录之后,就可以修改缺课记录了。 4.统计旷课学生姓名及旷课节数界面 这是用来显示所有缺课记录的功能,它是针对性的显示,只显示所有缺课记录的学生姓名及旷课节数。 5.统计旷课课程及旷课人次界面 这是用来显示所有缺课记录的功能,它是针对性的显示,只显示所有旷课记录的旷课课程及旷课人次。 三.实训总结 在这次程序设计过程中,我们进行了为期四周的学习与实践,在第一天上这门程设计是在星期六,我们怀着对着这门课的未知与憧憬以及也有点小小的不情愿来上这门课程设计,毕竟是在周末的日子里还得来上这门课,难免心里有点抱怨。 刚开始上课,老师给我们讲解了一些上这门课的基本知识,印象最深刻的就是怎样封装C++类,封装好一个类后就可以调其中的封装函数,极大地减少了我们的工作量,提高了我们的工作效率,觉得这个知识点还是很有用的。 在写好了.c源文件后,编译的时候,老是报错,不过幸好网络是个强大的后盾,在经过XX之后,解决了所发生的错误问题,结果如愿以偿的在屏幕上打印出了我们所涉及的图片,真是功夫不负有心人啊。 在这次课程设计中,我们学习了很多以前不知道的知识,感觉这次的课程设计比较难,不过也只是编写,封装、调用一些函数,也不是太难,通过这次课程设计,我觉得受益匪浅,既是对以前知识的一个回顾与加强,同时也学习到很多新的知识,取得了很大的进步。 成绩评定表 教师评语 考勤成绩: 占总成绩比例10% 平时成绩: ,占总成绩比例20% 实训报告成绩: ,占总成绩比例70% 实训总成绩: 指导教师签字: 年月日
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 考勤 系统 设计