附件6:
北京理工大学珠海学院
课程设计说明书
_2011—_2012学年第_ 1_学期
题目: 考勤统计程序
学 院: 计算机学院
专业班级: 10数字媒体技术3班 学 号:100204031007
学生姓名: 罗威豪
指导教师: 夏力前
成 绩:
时 间: 2011-12-21
20xx年12月21日
北京理工大学珠海学院计算机学院课程设计
考勤统计程序
摘 要
学生考勤管理程序是作为学校考勤的基本管理,是学校对学生考勤管理的基本依据。开发考勤管理系统,正是完善学校信息化管理的重要环节。人工考勤已经很难满足学校规范化管理的要求,面对庞大的信息量,该放手现在存在很多弊病。因此,简历现代化的只能考情管理系统势在必行。这样也大大减轻了考勤工作人员的工作量,提高了工作效率,使原本复杂和鼓噪无味的工作变得简单而轻松。
本文以“考勤信息管理系统”的设计与实现为例,阐述了考勤系统的设计开发的全过程。该系统侧重于学生信息管理和学生考勤信息的登记与查询。本系统使用的开发工具是vc++开发程序,通过已编制好的程序,完成对学生信息的输入、输出、插入、修改、删除操作,以及学生迟到、早退、旷课考勤信息的登记和查询,完善学校管理现代化,方便管理人员统计,考勤学生出勤情况,方便学生管理部门查询,考核学生的出勤率,准确地掌握学生出勤情况和相关资料,有效管理、掌握学生各项情况。
关键词:考勤管理 visualC++ 文件保存 查询 统计
I
北京理工大学珠海学院计算机学院课程设计
目 录
1需求分析 ....................................................................................................................... 1
1.1问题描述 ............................................................................................................ 1
1.1.1基本要求 ......................................................................................................... 1
2概要分析 ....................................................................................................................... 2
2.1数据需求 ............................................................................................................ 2
2.1.1程序模块及之间的调用关系 ............................................................................. 2
3 详细设计 .................................................................................................................... 3
3.1类的设计 ............................................................................................................ 3
3.2学生考勤系统的显示模块 .................................................................................... 3
3.3学生考勤系统的查询模块 .................................................................................... 4
3.4学生考勤系统的修改模块 .................................................................................... 4
3.5学生考勤系统的删除模块 .................................................................................... 6
3.6学生考勤系统的录入模块 .................................................................................... 6
3.7学生管理系统的统计模块 .................................................................................... 8
4程序测试 ..................................................................................................................... 10
5参考文献 ..................................................................................................................... 13
心得 体会 .................................................................................................................... 14
教师 评语 .................................................................................................................... 15
III
北京理工大学珠海学院计算机学院课程设计
1需求分析
1.1问题描述
考勤信息记录了学生的缺课情况,它包括:缺课日期、第几节课、课程名称(课程名称中不会出现空格)、学生姓名、缺课类型(迟到、早退、请假及 旷课)。试设计考勤管理系统,使之能提供以下功能:
1).录入学生的缺课记录:从键盘输入数据(提示:为避免重复从键盘输入数据,测试时 可将数据存储在文件中,利用输入重定向功能读入),输入格式为:
缺课日期第几节课 课程名称学生姓名 缺课类型
每行一条纪录。
例如:
080429 4 C++程序设计实验 张三 迟到
080428 4 C++程序设计 李四 旷课
2).修改某个学生的缺课记录。
3).查询某个学生的缺课情况。
4). 某段时间内旷课情况的统计。
1.1.1基本要求
统要实现的是学生考勤管理系统,在设计时应该使系统便于考勤管理员、学生操作,系统应有的基本功能如下:
(1)、学生考勤管理相关信息的管理功能;
(2)、统计功能;
(3)、查询功能;
(4)、文件保存功能;
1
北京理工大学珠海学院计算机学院课程设计
2概要分析
2.1数据需求
本系统主要涉及的数据有学生缺课信息类和有关信息排序类:学生缺课信息包括缺课时间、学生姓名、课程名称、第几节、学生缺课类型(迟到、早退、旷课、请假)。有关信息排序类包括对课程排序和对姓名排序。
2.1.1程序模块及之间的调用关系
图2.1 学生考勤管理系统中菜单函数的功能图
2
北京理工大学珠海学院计算机学院课程设计
3 详细设计
3.1类的设计
此系统设计了两个类,一个是record类,一个是records类。Record类完成对学生基本信息的声明与获取,包括学生姓名、缺课日期、缺课课程名称、缺课课程类型、缺课节次。
Record类的设计
class record
{
public:
void set(string d,int cno,string c,string s,int type)
{
date.assign(d);//缺课日期
cname.assign(c);//缺课课程名称
sname.assign(s);//学生姓名
this->cno=cno;//缺课节次
this->type=type;//缺课类型
}
void set(record re)
{
date.assign(re.date);//获取缺课日期
cname.assign(re.cname);//获取缺课课程名称
sname.assign(re.sname);//获取学生姓名
this->cno=re.cno;//获取缺课节次
this->type=re.type;//获取缺课类型
}
string date,cname,sname;//定义日期,课程名称,学生姓名
int cno,type;//定义缺课节次,缺课类型
};
3.2学生考勤系统的显示模块
void pri(records *r)//函数
{if(r->n==0)
{cout<<"记录为空!"<<endl;return;
}
3
北京理工大学珠海学院计算机学院课程设计
} cout<<"\n序号\t缺课日期 节次\t课程名称\t学生姓名\t缺课"<<endl; for(int i=0;i<r->n;i++) {cout<<i<<"\t"<<flush;prione(r->r[i]); }
3.3学生考勤系统的查询模块
void pri(records *r)//函数
{
if(r->n==0)
{
cout<<"记录为空!"<<endl;
return;
}
cout<<"\n序号\t缺课日期 节次\t课程名称\t学生姓名\t缺课类型"<<endl;
for(int i=0;i<r->n;i++)
{
cout<<i<<"\t"<<flush;
prione(r->r[i]);
}
}
3.4学生考勤系统的修改模块
void edt(records *r)//函数
{
if(r->n==0)
{
cout<<"记录为空!"<<endl;
return;
}
cout<<"请输入要修改缺课记录的学生姓名: "<<flush;
string t1,t3,t4;
char tmp[30];
int t2,t5,flag=0;
cin>>tmp;
t1.assign(tmp);
for(int i=0;i<r->n;i++)
if(r->r[i].sname==t1)
{
flag=7;
4
北京理工大学珠海学院计算机学院课程设计
break;
}
if(!flag)
{
cout<<"查无此学生!"<<endl;
return;
}
t1=r->r[i].date;
t2=r->r[i].cno;
t3=r->r[i].cname;
t4=r->r[i].sname;
t5=r->r[i].type;
cout<<"请输入要修改的项目:\n(1.缺课日期 2.缺课节次 3.缺课名称 4.学生姓名 5.缺课类型 6.全部) "<<flush;
e0:
cin>>flag;
switch(flag)
{
case 1:goto e1;
case 2:goto e2;
case 3:goto e3;
case 4:goto e4;
case 5:goto e5;
case 6:goto e1;
default:goto e0;
}
e1:
cout<<"请输入缺课日期: (例如100216) "<<flush;
cin>>t1;
if(flag!=6)goto e6;
e2:
cout<<"请输入缺第几节课: "<<flush;
cin>>t2;
if(flag!=6)goto e6;
e3:
cout<<"请输入缺课名称: "<<flush;
cin>>t3;
if(flag!=6)goto e6;
e4:
cout<<"请输入缺课学生姓名: "<<flush;
cin>>t4;
if(flag!=6)goto e6;
e5:
cout<<"请输入缺课类型: (1.迟到 2.早退 3.请假 4.旷课) "<<flush;
5
北京理工大学珠海学院计算机学院课程设计
cin>>t5;
e6:
r->r[i].set(t1,t2,t3,t4,t5);
char yn;
cout<<"保存修改? (y/n) "<<flush;
cin>>yn;
if(yn=='y')wt(r);
else return;}
3.5学生考勤系统的删除模块
void del(records *r)//函数
{
if(r->n==0)
{
cout<<"记录为空!"<<endl;
return;
}
cout<<"请输入要删除的记录的序号: (输入-1删除全部) "<<flush; int flag;
cin>>flag;
if(flag>r->n-1&&flag<-1)
{
cout<<"不存在所要删除的记录!"<<endl;
return;
}
else if(flag==-1)r->n=0;
else
{
for(int i=flag;i<r->n-1;i++)
r->r[i].set(r->r[i+1]);
r->n--;
}
char yn;
cout<<"保存修改? (y/n) "<<flush;
cin>>yn;
if(yn=='y')wt(r);
else return;
}
3.6学生考勤系统的录入模块
void input(records *r)//录入
6
北京理工大学珠海学院计算机学院课程设计
{
string t1,t3,t4;
int t2,t5,flag=0;
char yn;
cout<<"请输入学生缺课记录:"<<endl;
m1:
cout<<"请输入缺课日期: (例如100216) "<<flush;
cin>>t1;
if(!(timechk(t1)))goto m1;
m2:
cout<<"请输入缺第几节课: "<<flush;
cin>>t2;
if(t2<1||t2>10)
{
cout<<"节次录入有误! 请重新录入: "<<endl;
goto m2;
}
cout<<"请输入缺课名称: "<<flush;
cin>>t3;
cout<<"请输入缺课学生姓名: "<<flush;
cin>>t4;
m3:
cout<<"请输入缺课类型: (1.迟到 2.早退 3.请假 4.旷课) "<<flush; cin>>t5;
if(t5<1||t5>4)
{
cout<<"类型输入有误! 请重新录入: "<<endl;
goto m3;
}
for(int i=0;i<r->n;i++)
if(r->r[i].date==t1&&r->r[i].cno==t2&&r->r[i].cname==t3&&r->r[i].sname==t4&&r->r[i].type==t5)
{
cout<<"该条记录已存在,是否添加为新记录? (y/n) "<<flush; n1:
cin>>yn;
if(yn=='y')break;
else if(yn=='n')goto n2;
else goto n1;
}
r->r[r->n++].set(t1,t2,t3,t4,t5);
n2:
cout<<"是否继续输入? (y/n) "<<flush;
7
北京理工大学珠海学院计算机学院课程设计
n3:
cin>>yn;
if(yn=='y')goto m1;
else if(yn=='n')
{
cout<<"保存修改? (y/n) "<<flush;
cin>>yn;
if(yn=='y')wt(r);
else return;
}
else goto n3;}
3.7学生管理系统的统计模块
void search_s(records *r)//统计
{
if(r->n==0)
{
cout<<"记录为空!"<<endl;
return;
}
records *r1=new records();
g1:
cout<<"请输入要检索的时间范围: (例如080610-080612) "<<flush; string tmp,ld,hd;
cin>>tmp;
ld.assign(tmp.substr(0,6));
hd.assign(tmp.substr(7,6));
if(!timechk(ld)||!timechk(hd))goto g1;
for(int i=0;i<r->n;i++)
if(r->r[i].date.compare(ld)>=0&&r->r[i].date.compare(hd)<=0&&r->r
[i].type==4)
r1->r[r1->n++].set(r->r[i]);
cout<<"请选择统计方式: (1.学生旷课情况降序显示 2.课程旷课情况降序显示)"<<flush;
g2:
cin>>i;
switch(i)
{
case 1:
cout<<"\n在"<<ld<<"到"<<hd<<"期间学生旷课情况如下:"<<endl; r1->order_s();
break;
8
北京理工大学珠海学院计算机学院课程设计
} case 2: cout<<"\n在"<<ld<<"到"<<hd<<"期间课程旷课情况如下:"<<endl; r1->order_c(); break; default:goto g2; }
9
北京理工大学珠海学院计算机学院课程设计
4程序测试
1程序开始运行的界面
2程序显示功能的界面
3程序录入功能的界面
10
北京理工大学珠海学院计算机学院课程设计
4程序查询功能的界面
5程序修改功能的界面
11
北京理工大学珠海学院计算机学院课程设计
6程序删除功能的界面
12
北京理工大学珠海学院计算机学院课程设计
5参考文献
[1] 郑阿奇:《c++面向对象》[M],电子工业出版社20xx年版,第374页。
13
北京理工大学珠海学院计算机学院课程设计
心得 体会
经过本次课程设计,发现做软件真的需要做很多工作,不仅仅是敲代码。 首先,必须要有需求分析。就拿这次的题目来说,一个清晰的需求分析能让我省去很多工作,能让我把代码写的更清晰,让我的代码能有更好的重用性,以此简化程序。而这次的题目其实也算不上需求分析,只能算是功能分析吧。从界面到用户登陆判断,从增删改查基本功能到文件读写。如果能够把代码细化,把基本功能都封装成函数,这样应该会提高代码的重用性。
其次,有了清晰的需求分析,还要有注释。注释也很重要,特别是写过之后重用和测试代码时,都必须得看。否则就不得不将已写好的封装函数从头到尾再看一遍,再理解,这样很浪费时间。有了注释,就可以省去这些重新理解函数的时间,可以提高效率。
再次,写注释是为了使函数更简单的被理解。而写注释之前,必须要测试这段代码的可行性。必须要尽可能多的考虑会出现的情况,对不希望出现的情况予以相对的措施或者提示。这样在代码重用的时候也可以放心的重用,而不必因为代码写的不够完善而再来修改,这样也会浪费很多时间。
最后,程序的测试。一个完善的程序应该经得起测试。自己的程序写得好不好,最终得看测试。如果输入了非法的输入或者操作,程序是否能够正常运行?还是会像这次一输入错误就会死循环?这是程序的健壮性。做好以上几个方面,程序基本就做好了。但是任何一个程序都不可能没有BUG,金无足赤人无完人。如果要追求完美,就不得不锲而不舍,定期得到用户的反馈然后修复相关问题。就像微软一样,总是会在问题出现之后就发布漏洞补丁
14
北京理工大学珠海学院计算机学院课程设计
教师 评语
15
北京理工大学珠海学院计算机学院课程设计
16
北京理工大学珠海学院计算机学院课程设计
17