学生考勤管理系统方案.docx

上传人:b****8 文档编号:9502271 上传时间:2023-05-19 格式:DOCX 页数:39 大小:140.18KB
下载 相关 举报
学生考勤管理系统方案.docx_第1页
第1页 / 共39页
学生考勤管理系统方案.docx_第2页
第2页 / 共39页
学生考勤管理系统方案.docx_第3页
第3页 / 共39页
学生考勤管理系统方案.docx_第4页
第4页 / 共39页
学生考勤管理系统方案.docx_第5页
第5页 / 共39页
学生考勤管理系统方案.docx_第6页
第6页 / 共39页
学生考勤管理系统方案.docx_第7页
第7页 / 共39页
学生考勤管理系统方案.docx_第8页
第8页 / 共39页
学生考勤管理系统方案.docx_第9页
第9页 / 共39页
学生考勤管理系统方案.docx_第10页
第10页 / 共39页
学生考勤管理系统方案.docx_第11页
第11页 / 共39页
学生考勤管理系统方案.docx_第12页
第12页 / 共39页
学生考勤管理系统方案.docx_第13页
第13页 / 共39页
学生考勤管理系统方案.docx_第14页
第14页 / 共39页
学生考勤管理系统方案.docx_第15页
第15页 / 共39页
学生考勤管理系统方案.docx_第16页
第16页 / 共39页
学生考勤管理系统方案.docx_第17页
第17页 / 共39页
学生考勤管理系统方案.docx_第18页
第18页 / 共39页
学生考勤管理系统方案.docx_第19页
第19页 / 共39页
学生考勤管理系统方案.docx_第20页
第20页 / 共39页
亲,该文档总共39页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

学生考勤管理系统方案.docx

《学生考勤管理系统方案.docx》由会员分享,可在线阅读,更多相关《学生考勤管理系统方案.docx(39页珍藏版)》请在冰点文库上搜索。

学生考勤管理系统方案.docx

学生考勤管理系统方案

课程设计报告

课程名称面向对象程序设计

课题名称学生考勤管理系统

专业计算机科学与技术

班级1181班

学号201113030128

姓名蔡彪

指导教师珍辉谭小兰

2012年12月15日

工程学院

课程设计任务书

 

课程名称面向对象程序设计

课题学生考勤管理系统

专业班级计算机1181班

学生蔡彪

学号201113030128

指导老师珍辉谭小兰

审批

 

任务书下达日期2012年12月15日

任务完成日期2013年01月05日

 

一、设计容与设计要求

1.课程设计目的:

面向对象程序设计课程设计是集中实践性环节之一,是学习完《面向对象程序设计》课程后进行的一次全面的综合练习。

要求学生达到熟练掌握C++语言的基本知识和技能;基本掌握面向对象程序设计的思想和方法;能够利用所学的基本知识和技能,解决简单的面向对象程序设计问题,从而提高动手编程解决实际问题的能力。

2.课题题目

学生考勤管理系统

3.设计要求:

(1)根据自己对应的课题完成以下主要工作:

①完成系统需求分析:

包括系统设计目的与意义;系统功能需求(系统流程图);输入输出的要求。

②完成系统总体设计:

包括系统功能分析;系统功能模块划分与设计(系统功能模块图)。

③完成系统详细设计:

包括数据库需求分析;数据库概念结构设计(E-R图);数据库逻辑结构设计;类层次图;界面设计与各功能模块实现。

④系统调试:

调试出现的主要问题,编译语法错误及修改,重点是运行逻辑问题修改和调整。

⑤使用说明书及编程体会:

说明如何使用你编写的程序,详细列出每一步的操作步骤。

⑥关键源程序(带注释)

(2)按规定格式完成课程设计报告,将其打印稿(A4纸)上交给老师存档。

(3)不得抄袭他人程序、课程设计报告,每个人应体现自己的个性设计。

二、进度安排

第17周星期二8:

00——12:

00

星期三8:

00——12:

00

星期四8:

00——12:

00

星期五8:

00——12:

00

星期六8:

00——12:

00

第18周星期五8:

00——12:

00

三、参考书籍

1.《C++程序设计课程设计》振安编著TP312C563

2.《C++Builder和Delphi课程设计与系统开发案例》伍俊良清华大学7-302-06072-X

3.VisualC++课程设计案例精编严华峰中国水利水电7-5084-2007-12004

4.VisualC++课程设计与系统开发案例伍俊良清华大学7-302-05968-32002

5.VisualC++语言课程设计:

案例精选与编程指导清华朱红东南大学7-81089-275-42003

6.VisualC++课程设计案例精编中国水利水电7-5084-1004-12002

7.数据结构课程设计案例精编:

用C/C++描述建学光元吴春芳清华大学7-302-14536-92007

(编程平台不限,vc++,c++Builder等等。

课题:

学生考勤管理系统

(一)、课程设计题目:

学生考勤管理系统

(二)、目的与要求:

1、目的:

(1)要求学生达到熟练掌握C++语言的基本知识和技能;

(2)基本掌握面向对象程序设计的基本思路和方法;

(3)能够利用所学的基本知识和技能,解决简单的面向对象程序设计问题。

2、基本要求:

(1)要求利用面向对象的方法以及C++的编程思想来完成系统的设计;

(2)要求在设计的过程中,建立清晰的类层次;

(3)在系统中至少要定义四个类,每个类中要有各自的属性和方法;

(4)在系统的设计中,至少要用到面向对象的一种机制。

3、创新要求:

在基本要求达到后,可进行创新设计,如根据查找结果进行修改的功能。

4、写出设计说明书

(三)、设计方法和基本原理:

1、问题描述(功能要求):

考勤信息记录了学生的缺课情况,它包括:

缺课日期、第几节课(连续多节课用begin-end的形式表示)、课程名称(课程名称中不会出现空格)、学生、缺课类型(迟到、早退、请假及旷课)。

试设计考勤管理系统,使之能提供以下功能:

1).录入学生的缺课记录:

从键盘输入数据(提示:

为避免重复从键盘输入数据,测试时可将数据存储在文件中,利用输入重定向功能读入),输入格式为:

缺课日期第几节课课程名称学生缺课类型

每行一条纪录。

例如:

2008-04-293-4C++程序设计实验三迟到

2008-04-283-4C++程序设计四旷课

2).修改某个学生的缺课记录:

可以对缺课纪录的任意部分进行修改,然后显示一下修改后的纪录。

3).查询某个学生的缺课情况:

查询结果按照日期升序排序,同一天按照所缺课程的时间升序排序。

4).统计某段时间(以天为单位),旷课学生及旷课节数,查询结果先按旷课节数降序排序,旷课节数相同的学生按升序排序;

5).统计某段时间,有学生旷课的课程及旷课人次,按旷课人次由多到少排序,旷课人次相同的课程按课程名称升序排序;

6).系统以菜单方式工作。

(所谓菜单指用户可以自由选择所要执行的功能)

2、问题的解决方案:

根据系统功能要求,可以将问题解决分为以下步骤:

(1)应用系统分析,建立该系统的功能模块框图以及界面的组织和设计;

(2)分析系统中的各个实体及它们之间的关系包括属性和行为;

(3)根据问题描述,设计系统的类层次;

(4)完成类层次中各个类的描述(包括属性和方法);

(5)完成类中各个成员函数的定义;

(6)完成系统的应用模块;

(7)功能调试;

(8)完成系统总结报告以及系统使用说明书

 

附录

 

1.系统需求分析

考勤信息记录了学生的缺课情况,它包括:

缺课日期、第几节课(连续用begin-end的形式表示)、课程名称(课程名称中不会出现空格)、学生、缺课类型(迟到、早退、请假及旷课)。

试设计考勤管理系统,使之能提供以下功能:

(1).录入学生的缺课记录:

从键盘输入数据(提示:

为避免重复从键盘输入数据,测试时可将数据存储在文件中,利用输入重定向功能读入),输入格式为:

缺课日期第几节课课程名称学生缺课类型

每行一条纪录。

例如:

2009-04-292-4中国近现代文学史云龙迟到

2009-04-282-4大学生社交礼仪马志鹏旷课

(2).修改某个学生的缺课记录:

可以对缺课纪录的任意部分进行修改,然后显示一下修改后的纪录。

(3).查询某个学生的缺课情况:

查询结果按照日期升序排序,同一天按照所缺课程的时间升序排序。

(4).统计某段时间(以天为单位),旷课学生及旷课节数,查询结果先按旷课节数降序排序,旷课节数相同的学生按升序排序;

(5).统计某段时间,有学生旷课的课程及旷课人次,按旷课人次由多到少排序,旷课人次相同的课程按课程名称升序排序;

(6).系统以菜单方式工作。

(所谓菜单指用户可以自由选择所要执行的功能。

学生可以通过以上功能录入信息、修改信息、查询信息、整理统计出所要了解的信息,除了要实现上述的基本功能之外,本系统还应该在细节上下工夫,使用户使用方便,在使用的过程中保持一个愉快的心情。

学生考勤管理系统有广大的用户群,这其中有老师、有教务处主任、有公司管理人员,也可以供给一般用户使用。

总之该系统可以满足用户需求,实现对其管理的人员的考勤工作。

 

2.总体设计

学生考勤管理系统包含五个大的功能,分别是:

录入学生缺课信息、修改学生缺课信息、查询某个学生的缺课情况、统计某段时间(以天为单位),旷课学生及旷课节数和统计某段时间,有学生旷课的课程及旷课人次。

学生的缺课信息主要包含缺课日期,第几节课、课程名称,学生,缺课类型。

在录入学生缺课信息时根据系统提示逐一输入。

每输入完一条信息,系统会提示是否继续输入,用户可以选择继续或返回主菜单。

在修改学生缺课信息时,用户首先输入要修改的学生,系统会检索如果系统中有该学生的相关信息则系统首先会提示用户修改该学生的那一部分信息,用户可自行选择。

如果系统中没有该学生的相关信息,则系统会给相关提示,用户可以选择继续输入要修改的学生或选择退出返回主菜单。

在查询学生缺课信息时,用户先输入要查询的学生,系统检索判断是否存在该学生的信息然后做出相应的提示。

总之,用户可以方便的在系统提示下进行使用。

学生考勤管理系统中功能模块图:

 

菜单

修改某学生的缺课信息

录入学生的缺课信息

查询某学生的缺课信息

统计某段时间内旷课学生姓名及旷课节数

统计某段时间内,有学生旷课的课程及旷课人次

录入缺课学生的姓名、缺课日期、缺课节次、缺课课程

修改某学生的缺课日期、缺课节次、缺课课程名称、缺课类型

查询某学生的缺课日期、缺课节次、缺课课程名称、缺课类型

按时间升序显示旷课学生姓名及旷课节数

按时间升序显示有学生旷课的课程及旷课人次

 

3.详细设计

(1)类的设计

此系统设计了两个类,一个是record类,一个是records类。

Record类完成对学生基本信息的声明与获取,包括学生、缺课日期、缺课课程名称、缺课课程类型、缺课节次。

Record类的设计

classrecord

{

public:

voidset(stringd,intcno,stringc,strings,inttype)

{

date.assign(d);//缺课日期

cname.assign(c);//缺课课程名称

sname.assign(s);//学生

this->cno=cno;//缺课节次

this->type=type;//缺课类型

}

voidset(recordre)

{

date.assign(re.date);//获取缺课日期

cname.assign(ame);//获取缺课课程名称

sname.assign(re.sname);//获取学生

this->cno=o;//获取缺课节次

this->type=re.type;//获取缺课类型

}

stringdate,cname,sname;//定义日期,课程名称,学生

intcno,type;//定义缺课节次,缺课类型

};

(2)学生考勤系统的显示模块

voidpri(records*r)//函数

{if(r->n==0)

{cout<<"记录为空!

"<

}

cout<<"\n序号\t缺课日期节次\t课程名称\t学生\t缺课"<

for(inti=0;in;i++)

{cout<r[i]);

}

}

(3)学生考勤系统的查询模块

voidpri(records*r)//函数

{

if(r->n==0)

{

cout<<"记录为空!

"<

return;

}

cout<<"\n序号\t缺课日期节次\t课程名称\t学生\t缺课类型"<

for(inti=0;in;i++)

{

cout<

prione(r->r[i]);

}

}

(4)学生考勤系统的修改模块

voidedt(records*r)//函数

{

if(r->n==0)

{

cout<<"记录为空!

"<

return;

}

cout<<"请输入要修改缺课记录的学生:

"<

stringt1,t3,t4;

chartmp[30];

intt2,t5,flag=0;

cin>>tmp;

t1.assign(tmp);

for(inti=0;in;i++)

if(r->r[i].sname==t1)

{

flag=7;

break;

}

if(!

flag)

{

cout<<"查无此学生!

"<

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.全部)"<

e0:

cin>>flag;

switch(flag)

{

case1:

gotoe1;

case2:

gotoe2;

case3:

gotoe3;

case4:

gotoe4;

case5:

gotoe5;

case6:

gotoe1;

default:

gotoe0;

}

e1:

cout<<"请输入缺课日期:

(例如100216)"<

cin>>t1;

if(flag!

=6)gotoe6;

e2:

cout<<"请输入缺第几节课:

"<

cin>>t2;

if(flag!

=6)gotoe6;

e3:

cout<<"请输入缺课名称:

"<

cin>>t3;

if(flag!

=6)gotoe6;

e4:

cout<<"请输入缺课学生:

"<

cin>>t4;

if(flag!

=6)gotoe6;

e5:

cout<<"请输入缺课类型:

(1.迟到2.早退3.请假4.旷课)"<

cin>>t5;

e6:

r->r[i].set(t1,t2,t3,t4,t5);

charyn;

cout<<"保存修改?

(y/n)"<

cin>>yn;

if(yn=='y')wt(r);

elsereturn;}

(5)学生考勤系统的删除模块

voiddel(records*r)//函数

{

if(r->n==0)

{

cout<<"记录为空!

"<

return;

}

cout<<"请输入要删除的记录的序号:

(输入-1删除全部)"<

intflag;

cin>>flag;

if(flag>r->n-1&&flag<-1)

{

cout<<"不存在所要删除的记录!

"<

return;

}

elseif(flag==-1)r->n=0;

else

{

for(inti=flag;in-1;i++)

r->r[i].set(r->r[i+1]);

r->n--;

}

charyn;

cout<<"保存修改?

(y/n)"<

cin>>yn;

if(yn=='y')wt(r);

elsereturn;

}

(6)学生考勤系统的录入模块

voidinput(records*r)//录入

{

stringt1,t3,t4;

intt2,t5,flag=0;

charyn;

cout<<"请输入学生缺课记录:

"<

m1:

cout<<"请输入缺课日期:

(例如100216)"<

cin>>t1;

if(!

(timechk(t1)))gotom1;

m2:

cout<<"请输入缺第几节课:

"<

cin>>t2;

if(t2<1||t2>10)

{

cout<<"节次录入有误!

请重新录入:

"<

gotom2;

}

cout<<"请输入缺课名称:

"<

cin>>t3;

cout<<"请输入缺课学生:

"<

cin>>t4;

m3:

cout<<"请输入缺课类型:

(1.迟到2.早退3.请假4.旷课)"<

cin>>t5;

if(t5<1||t5>4)

{

cout<<"类型输入有误!

请重新录入:

"<

gotom3;

}

for(inti=0;in;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)"<

n1:

cin>>yn;

if(yn=='y')break;

elseif(yn=='n')goton2;

elsegoton1;

}

r->r[r->n++].set(t1,t2,t3,t4,t5);

n2:

cout<<"是否继续输入?

(y/n)"<

n3:

cin>>yn;

if(yn=='y')gotom1;

elseif(yn=='n')

{

cout<<"保存修改?

(y/n)"<

cin>>yn;

if(yn=='y')wt(r);

elsereturn;

}

elsegoton3;}

(7)学生考勤系统的统计模块

voidsearch_s(records*r)//统计

{

if(r->n==0)

{

cout<<"记录为空!

"<

return;

}

records*r1=newrecords();

g1:

cout<<"请输入要检索的时间围:

(例如080610-080612)"<

stringtmp,ld,hd;

cin>>tmp;

ld.assign(tmp.substr(0,6));

hd.assign(tmp.substr(7,6));

if(!

timechk(ld)||!

timechk(hd))gotog1;

for(inti=0;in;i++)

if(r->r[i]pare(ld)>=0&&r->r[i]pare(hd)<=0&&r->r[i].type==4)

r1->r[r1->n++].set(r->r[i]);

cout<<"请选择统计方式:

(1.学生旷课情况降序显示2.课程旷课情况降序显示)"<

g2:

cin>>i;

switch(i)

{

case1:

cout<<"\n在"<

"<

r1->order_s();

break;

case2:

cout<<"\n在"<

"<

r1->order_c();

break;

default:

gotog2;

}

}

4.程序调试

(1)程序开始运行的界面

(2)程序显示功能的界面

(3)程序录入功能的界面

(4)程序查询功能的界面

(5)程序修改功能的界面

(6)程序删除功能的界面

 

5.结果分析

这次的课设,我写的程序也没有什么独到之处,我觉得唯一可以从我的程序可以看出的是数组用得比较多,反正是没啥特色,不仅如此,还写得功能不全,实在是惭愧。

现在在这里也只能说说它的不足之处了。

类层次不够清晰,纵观整个程序可以发现四个类之间的关系不甚恰当,我有这个感觉,但我不知如何改进。

函数参数设定不够完美,整个程序中对指针的运用比较少。

对于指针的巧妙运用把握得不够。

还有就是容易missing;或者是},这都是些应该改掉的毛病。

除此以外,我对于怎样用文件保存数据还没深入了解,但我将数据保存到文件后又因文件打不开而无法访问文件中的数据,对于动态链表,我不是很清晰,也就是说无法做到熟稔运用。

在调试过程中我发现在主函数中把字符数组名name赋值给字符指针p即p=name;然后用cout<

具体为什么我是解释不清了

在调用系统的显示功能时,如果在getname()函数前加一个*号输出的只是一个字符,不加反而能输出所有字符。

getname()函数的返回值为指针类型,但前面说过利用函数返回指针类型的值并不能输出字符数组中所有的字符,为什么这里又可以呢?

这是为什么?

我不知道这一知识,这也算我的程序的不足之处吧!

对于两个统计函数的功能不全,我感到无能为力,我为了这两函数苦思了两天,硬是没凑合来。

到后来,脑子里都乱了,运行时屏幕上尽是些乱七八糟的东西。

结果不是很好,但过程够了就行。

这也是自欺欺人的看法,让我再一次自责吧。

 

6.总结

这次的程序设计相对于上学期还是有了进步的。

学生考勤管理系统要求至少要有四个类,在起初,对于定义哪四个类我是不清楚的,通过仔细的研读问题描叙终于在脑海里确定了这四个类。

既然是学生考勤管理系统,那由学生缺课信息中的日期我想到了时间类,这是一个很简单的类。

从系统的几大功能我又想到了系统的基础就是缺课学生的缺课信息,于是我又想到了一个信息类,还有两个类是根据两个统计功能想到的,在现在看来似乎有些不妥。

通过这次的课程设计我明白了学习程序设计语言必须要勤做实验,通过实验总结经验。

平时遇到的一些小问题一定要重视,越是基础的知识越要理解透彻。

比如指针与数组方面的知识,一旦没有弄清楚,在设计程序时就会吃亏。

这次的课设中,我遇到了很多的问题,有的通过思考或查看书本解决了,有的还留在脑子里,只有通过孜孜不倦的求索我们才会有进步,不懂得思考就不能真正的掌握一门知识。

这次的实验给以了我警示,它让我明白我所掌握的知识还很欠缺,对于继承与派生这一章的知识,我以为自己勉强掌握了,这次实验后我发现我掌握得还不够。

基类的保护成员公有继承到派生类,类外是否可以通过对象来访问呢,原先我认为是可以的,经过这次程序设计,我知道我错了。

总之,我觉得做学问不应该马虎,对于所学一定要有深入的理解,这也是我这次课设得到的启示。

 

附录:

源程序

#include

#include

#include

usingnamespacestd;

//时间类

classtime

{public:

time(inty=0,intm=0,intd=0)

{year=y;month=m;day=d;}

~time(){}

protected:

intyear,month,day;

};

//信息类

classxinxi:

publictime

{public:

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 幼儿教育 > 育儿理论经验

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2