1、滨江 学院课程设计报告 面向对象课程设计 题 目 C+课程设计 学生考勤管理系统 院 系 专 业 学生姓名 学 号 指导教师 二 0 年 月 日 面向对象课程设计指导书及评分标准 课程设计选 题( 1 学时) 由教师命题,学生自己选择课题,经教师调整审查后确定。 设计的课题以实用为主,反映新技术的发展情况,以获得更好的面向对象实践的训练。课题规模、大小适当,具有一定复杂度,通过激发学生参加开发实践的积极性与创造性,达到综合应用所学知识的目的。 学生可从下列题目中选择( 也可以自己选择其它题目 ): 1、人事管理系统 2、学生管理系统 3、学生成绩管理系统 4、图书借阅管理系统 5、超市收款管理
2、系统 6、铁路售票管理系统 7、长途汽车售票管理系统 8、大剧院售票管理系统 9、运动会成绩及名次管理系统 10、仓库管理系统(小超市) 12、航空售票管理系统 13、汽车销售管理系统 14、电脑彩票销售及摇奖模拟系统 15、网上订票系统 16 房屋租赁管理系统 17、酒店客房管理系统 18、工资管理系统 19、考勤管理系统 20、员工培训管理系统 考核方式:程序演示效果 +课程设计报告 评分标准:等级制(优秀、良好、中等、及格、不及格) 1、需求分析( 10 分) 对系统的功能及性能要求进行分析,写出需求规格说明书(可行性分析报告、系统的分层 DFD图、加工说明及数据词典)。(业务逻辑正确,
3、无原则性错误,结构图、流程图正确 ,数据字典完善。) 2、软件总体设计( 20 分) 确定系统总体设计方案,完成系统的模块结构图及模块的功能说明。(模块结构图正确,模块说明详细、完善、准确。) 3、软件详细设计( 20 分) 对模块内部过程及数据结构进行设计等编写出该项目的详细设计报告。(数据结构合适,能满足系统需求。) 4、编码( 35 分) 选择一种自己熟悉的面向对象程序设计语言,进行程序设计。 5、总结( 5 分) 本次课程设计的收获,经验,启示等。 6、排版( 10 分) 封面符合要求,内容排版规范,图、表规整,语言流畅,无错别字。 ( A4 纸 打 印 , 上 边 装 订 ) 课题
4、:C+课程设计 学生考勤管理系统 ( 一 )、 课程设计题目: C+课程设计 ( 二 ) 、目的与要求 : 1、目的: ( 1)要求学生达到熟练掌握 C+语言的基本知识和技能; ( 2)基本掌握面向对象程序设计的基本思路和方法; ( 3)能够利用所学的基本知识和技能,解决简单的面向对象程序设计问题。 2、基本要求: ( 1)要求利用面向对象的方法以及 C+的编程思想来完成系统的设计; ( 2)要求在设计的过程中,建立清晰的类层次; ( 3)在系统中 至少要定义四个类,每个类中要有各自的属性和方法; ( 4)在系统的设计中,至少要用到面向对象的一种机制。 3、创新要求: 在基本要求达到后,可进行
5、创新设计,如根据查找结果进行修改的功能。 4、写出设计说明书 ( 三 )、 设计方法和基本原理: 1、问题描述(功能要求): 考勤信息记录了学生的缺课情况,它包括:缺课日期、第几节课 (连续多节课用 begin-end 的形式表示 )、课程名称(课程名称中不会出现空格)、学生姓名、缺课类型(迟到、早退、请假及旷课)。试设计考勤管理系统,使之能提供以下功能: 1)录入学生的缺课记录:从键盘输入数据(提示:为避免重复从键盘输入数据,测试时可将数据存储在文件中,利用输入重定向功能读入),输入格式为: 缺课日期第几节课 课程名称学生姓名 缺课类型 每行一条纪录。 例如: 2008-04-29 3-4
6、C+程序设计实验 张三 迟到 2008-04-28 3-4 C+程序设计 李四 旷课 2)修改某个学生的缺课记录:可以对缺课纪录的任意部分进行修改,然后显示一下修改后的纪录。 3)查询某个学生的缺课情况:查询结果按照日期升序排序,同一天内按照所缺课程的时间升序排序 。 4)统计某段时间内(以天为单位),旷课学生姓名及旷课节数,查询结果先按旷课节数降序排序,旷课节数相同的学生按姓名升序排序; 5)统计某段时间内,有学生旷课的课程及旷课人次,按旷课人次由多到少排序,旷课人次相同的课程按课程名称升序排序; 6)系统以菜单方式工作。(所谓菜单指用户可以自由选择所要执行的功能) 2、问题的解决方案: 根
7、据系统功能要求,可以将问题解决分为以下步骤: ( 1)应用系统分析,建立该系统的功能模块框图以及界面的组织和设计; ( 2)分析系统中的各个实体及它们之间的关系包括属性 和行为; ( 3)根据问题描述,设计系统的类层次; ( 4)完成类层次中各个类的描述(包括属性和方法); ( 5)完成类中各个成员函数的定义; ( 6)完成系统的应用模块; ( 7)功能调试; ( 8)完成系统总结报告以及系统使用说明书 目 录 1. 系统需求分析 . 1 2. 总体设计 . 1 3. 详细设计 . 2 4. 系统调试 . 7 5. 结果分析 . 7 6. 总结 . 8 附录:源程序清单 滨江 学院课程设计报告
8、 1. 系统需求分析 考勤信息记录了学生的缺课情况,它包括:缺课日期、第几节课(连续用 begin-end 的形式表示 )、课程名称(课程名称中不会出现空格)、学生姓名、缺课类型(迟到、早退、请假及旷课)。试设计考勤管理系统,使之能提供以下功能: 1)录入学生的缺课记录:从键盘输入数据(提示 :为避免重复从键盘输入数据,测试时可将数据存储在文件中,利用输入重定向功能读入),输入格式为:缺课日期 第几节课 课程名称学生姓名 缺课类型 每行一条纪录。 例如: 2009-04-29 2-4 中国近现代文学史 李云龙 迟到 2009-04-28 2-4 大学生社交礼仪 马志鹏 旷课 2)修改某个学生的
9、缺课记录:可以对缺课纪录的任意部分进行修改,然后显示一下修改后的纪录。 3)查询某个学生的缺课情况:查询结果按照日期升序排序,同一天内按照所缺课程的时间升序排序。 4)统计某段时间内(以天为单位),旷 课学生姓名及旷课节数,查询结果先按旷课节数降序排序,旷课节数相同的学生按姓名升序排序; 5)统计某段时间内,有学生旷课的课程及旷课人次,按旷课人次由多到少排序,旷课人次相同的课程按课程名称升序排序; 6)系统以菜单方式工作。(所谓菜单指用户可以自由选择所要执行的功能。学生可以通过以上功能录入信息、修改信息、查询信息、整理统计出所要了解的信息,除了要实现上述的基本功能之外,本系统还应该在细节上下工
10、夫,使用户使用方便,在使用的过程中保持一个愉快的心情。学生考勤管理系统有广大的用户群,这其中有老师、有教务 处主任、有公司管理人员,也可以供给一般用户使用。总之该系统可以满足用户需求,实现对其管理的人员的考勤工作。 2. 总体设计 学生考勤管理系统包含五个大的功能,分别是:录入学生缺课信息、修改学生缺课信息、 查询某个学生的缺课情况、统计某段时间内(以天为单位),旷课学生姓名及旷课节数和统计某段时间内,有学生旷课的课程及旷课人次。学生的缺课信息主要包含缺课日期,第几节课、课程名称,学生姓名,缺课类型。 在录入学生缺课信息时根据系统提示逐一输入。每输入完一条信息,系统会提示是否继续输入,用户可以
11、选择继续或返回主菜单。 在修改学生缺课信息时,用户首先输入要修改的学生姓名,系统会检索如果系统中有该学生的相关信息则系统首先会提示用户修改该学生的那一部分信息,用户可自行选择。如果系统中没有该滨江 学院课程设计报告 学生的相关信息,则系统会给相关提示,用户可以选择继续输入要修改的学生姓名或选择退出返回主菜单。 在查询学生缺课信息时,用户先输入要查询的学生姓名,系统检索判断是否存在该 学生的信息然后做出相应的提示。总之,用户可以方便的在系统提示下进行使用。 学生考勤管理系统中功能模块图: 3. 详细设计 学生考勤 管理系统中四个类的类层次图为: 修改某学生的缺课信息 查询某学生的缺课信息 统计某
12、段时间内旷课学生姓名及旷课节数 统计某段时间内,有学生旷课的课程及旷课人次 录入学生的缺课信息 学生考勤管理系统 录入缺课学生的姓名、缺课日期、缺课节次、缺课课程名称、缺课类型 修改某学生的 缺课日期、缺课节次、缺课课程名称、缺课类型 查询某学生的 缺课日期、缺课节次、缺课课程名称、缺课类型 按时间升序显示旷课学生姓名及旷课节数 按时间升序显示有学生旷课的课程及旷课人次 Time 类 Xinxi 类 滨江 学院课程设计报告 图 2 学生考勤 管理系统中中四个类的类层次图 学生考勤 管理系统中各功能模块的实现: 图 3 学生考勤管理系统中菜单函数的功能图 1、 学生缺课信息录用功能模块 : 学
13、生 缺课 信 息录 用 功能 录入学生缺课节次 录入学生缺课日期 录入学生缺课课程名称 录入缺课学生姓名 录入学生缺课类型 qstu 类 qkechen 类 菜单 录 入 学生 的 缺课信息 查 询 某学 生 的缺 课 信息 修 改 某学 生 的缺 课 信息 统计某段时间内,有学生旷课的课程及旷课人次 统计某段时间内旷课学生姓名及旷课节数 滨江 学院课程设计报告 图 4 学生缺课信息录入的功能 2、 修改某学生缺课信息功能的模块图 图 5 学生考勤管理系统修改学生缺课信息功能图 3 查询某学生缺课信息功能图: 图 6 学生考勤管理系统查询学生缺课信息功能图 4、 统计某段时间内旷课学生姓名及旷
14、课节数功能模块: 图 7 统计某段时间内旷课学生姓名及旷课节数功能图 输入要查询的学生姓名 修改某学生的缺课课程 修改某学生的缺课类型 修改某学生的缺课日期 统计某段时间内 旷课学生姓名及旷课节数 显示某段时间内 旷课学生姓名及旷课节数 返回菜单 修 改 某学 生 缺课 信 息功能 修改某学生的 缺课节次 查 询 某学 生 缺课 信 息功能 统计某段时间内旷课学生姓名及旷课节数功能 显示要查询的学生缺课信息 继续查询或返回菜单 滨江 学院课程设计报告 5、 统计某段时间内,有学生旷课的课程及旷课人次功能模块 图 8 统计某段时间内,有学生旷课的课程及旷课人次功能图 统计某段时间内,有学生旷课的
15、课程及旷课人次功能 统计某段时间内,有学生旷课的课程及旷课人次 返回菜单 显示某段时间内,有学生旷课的课程及旷课人次 滨江 学院课程设计报告 图 9 学生考勤管理系统中四个类的 UML 图 Tine -year:int -month:int -day:int +time() +time() Xinxi -name20:char -kechen10:char -jieci3:char - queke10:char -tm3:char -tiaoshu:int=0 +xinxi() +xinxi() +setname(n:char*):void +settime(y:int, m:int,d:in
16、t):void +setqklx(qk: char*): void +setjieci(jc: char*):void +setkechen(kc: char*):void +getname():char* +getqklx():char* +getjieci():char* +getkechen():char* +gettime():int* qkechen -renci:int -kcshu:int=0 +qkechen() +qkechen() +getrc(st1:xinxi,n:int,j:int):int +qkn20:char qstu -jieshu:int -qst:int
17、+qstu() +qstu() +print(st1:xinxi 然后用 cout #include #include using namespace std; /时间类 class time public: time(int y=0,int m=0,int d=0) year=y;month=m;day=d; time() protected: 滨江 学院课程设计报告 int year,month,day; ; /信息类 class xinxi:public time public: xinxi() tiaoshu+; xinxi()tiaoshu-; void setname(char *
18、n)strcpy(name,n); void settime(int y,int m,int d)year=y;month=m;day=d; void setqklx(char *qk)strcpy(queke,qk); void setjieci(char *jc)strcpy(jieci,jc); void setkechen(char *kc)strcpy(kechen,kc); char *getname()char *n;n=name;return n; char *getqklx()char *qk=queke;return qk; char *getjieci()char *jc
19、;jc=jieci;return jc; char *getkechen()char *gk;gk=kechen;return gk; int *gettime(); private: char name20;/姓名 char jieci3,kechen10,queke10; int tm3; static int tiaoshu; ; int xinxi:tiaoshu=0; int *xinxi:gettime() int *t; t=tm; tm0=year; tm1=month; tm2=day; return t; /缺课课程类 class qkechen:public xinxi
20、public: qkechen()kcshu+; qkechen()kcshu-; int getrc(xinxi st1,int n,int j); char qkn20;/公有数据成员 滨江 学院课程设计报告 private: int renci; static int kcshu;/静态数据成员 ; int qkechen:kcshu=0; int qkechen:getrc(xinxi st1,int n,int j) renci=0; renci+; for(int i=0;ich; switch(ch) case 1: g=shuru(tl); break; case 2: xiu
21、gai(tl,g); break; case 3: chaxun(tl,qt); break; case 4: tongji1(tl,qt); break; case 5: tongji2(tl,qk); break; case 6: exit(0); return 0; /菜单函数 void caidan() system(“color A“); coutname; st1q.setname(name); coutkechen; 滨江 学院课程设计报告 st1q.setkechen(kechen); coutymd; st1q.settime(y,m,d); coutqueke; st1q.
22、setqklx(queke); coutjieci; st1q.setjieci(jieci); couta; while(a=y); return q+1; /修改函数 void xiugai(xinxi st1,int n) int k=1,j=0,a10; int flgh; int h; while(k=1) coutname; flgh=0; for(int i=0;ib; if(b=1) coutymd; st1i.settime(y,m,d); else if(b=2) coutjieci; st1i.setjieci(jieci); else if(b=3) coutkeche
23、n; st1i.setkechen(kechen); else if(b=4) coutqueke; st1i.setqklx(queke); flgh=1;j+; while(b4); if(flgh=0) coutk; else coutk; for(int i=0;iname; int i=0; for(;in; for(int a=0;an; /统计某段时间内旷课学生姓名及旷课节数 void tongji1(xinxi st1,qstu qt1) int d1=0,js=0; xinxi min; if(g=0) cout“没有你要统计的学生信息请返回菜单录入学生缺课信息 “endl;
24、 else if(g=1) cout“姓名 :“st10.getname()endl; if(*(st10.getjieci()+2)!=0) js=+2; else js+; cout“节数 :“jsendl; 滨江 学院课程设计报告 else /信息按时间排序 int i=0; for(;i(g-1);i+) if(*(st1i.gettime()+1)*(st1i+1.gettime()+1) min=st1i;st1i=st1i+1;st1i+1=st1i; else if(*(st1i.gettime()+1)=*(st1i+1.gettime()+1)st1i=st1i+1;st1
25、i+1=st1i; else if(*(st1i.gettime()+1)=*(st1i+1.gettime()+1) for(int j=0;j(g-d1);j+) cout*st1j.gettime()*(st1j.gettime()+1)*(st1j.gettime()+2)endl; for(i=0;ik;i+) setqstn(st1,qt1,g); cout“姓名 :“qt1i.qstnendl; cout“节数 :“qt1i.getjs(st1,g,i)endl; /统计某段时间内旷课的课程及旷课人次 void tongji2(xinxi st1,qkechen qk1) int
26、 d1=0,rc=0; xinxi min; if(g=0) cout“没有你要统计的学生信息请返回菜单录入学生缺课信息 “endl; else if(g=1) cout“课程名 :“st10.getkechen()endl; rc+; cout“人数 :“rcendl; else int i=0; for(;ig;i+) 滨江 学院课程设计报告 if(*(st1i.gettime()+1)*(st1i+1.gettime()+1) min=st1i;st1i=st1i+1;st1i+1=st1i; else if(*(st1i.gettime()+1)=*(st1i+1.gettime()+
27、1)st1i=st1i+1;st1i+1=st1i; else if(*(st1i.gettime()+1)=*(st1i+1.gettime()+1) for(int j=0;j(g-d1);j+) cout*st1j.gettime()*(st1j.gettime()+1)*(st1j.gettime()+2)endl; for(i=0;ib;i+) setqkn(st1,qk1,g); cout“课程名 :“qk1i.qknendl; cout“人数 :“qk1i.getrc(st1,g,i)endl; /显示函数 void xiansi(xinxi cout“|“*(st1.getti
28、me()“|“*(st1.gettime()+1)*(st1.gettime()+2) “|“st1.getjieci()“|“st1.getkechen()“|“st1.getname()“|“st1.getqklx()“|“endl; /设置缺课学生名 void setqstn(xinxi st1,qstu qt1,int n) int i=0; for(;in;i+) if(i=0) strcpy(qt10.qstn,st1i.getname(); else if(strcmp(st1i.getname(),st1i+1.getname()!=0) strcpy(qt1i.qstn,st1i.getname(); k+; 滨江 学院课程设计报告 /设置有缺课学生的课程名 void setqkn(xinxi st1,qkechen qk,int n) int i=0; for(;in;i+) if(i=0) strcpy(qk0.qkn,st1i.getkechen(); else if(strcmp(st1i.getkechen(),st1i+1.getkechen()!=0) strcpy(qki.qkn,st1i+1.getkechen(); b+;