C++课程设计报告.docx
- 文档编号:24330811
- 上传时间:2023-05-26
- 格式:DOCX
- 页数:24
- 大小:108.28KB
C++课程设计报告.docx
《C++课程设计报告.docx》由会员分享,可在线阅读,更多相关《C++课程设计报告.docx(24页珍藏版)》请在冰豆网上搜索。
C++课程设计报告
面向对象程序设计(C++)课程设计任务书
学院
计算机与信息工程学院
专业
通信工程
课程名称
面向对象程序设计(C++
题目
学生考勤管理系统的设
计与实现
完成期限
自2017年6月12日至2017年6月17日共6天
内
容
及
任
务
一、项目目的
1•巩固和加深学生对程序设计课程基本知识的理解,综合该课程中所学的理论知识,独立或联合完成一个应用课题的设计;
2•根据选题需要,通过查阅手册和文献资料,培养分析和解决实际问题的能力;
3•进一步提高使用C++进行软件开发的能力。
二、项目任务的主要内容和要求
设计一个学生考勤管理系统。
可以实现对学生信息的添加功能、查询功能、显示功能、编辑功能、删除功能、统计功能、保存功能、读取功能、排序功能。
实现:
学生信息的录入:
修改:
删除和查询,按姓名或学号查询。
应用系统分析,建立该系统的功能模块框图以及界面的组织和设计,分析系统中的各个实体及它们之间的关系,根据问题描述,设计系统的类层次;完成系统的应用模块。
三、项目设计(研究)思路
考勤管理系统要实现对学生考勤的信息录入,根据给定信息对学生考勤结果进行分类统计,以及结果查询。
四、具体成果形式和要求
成果形式:
程序和报告。
具体要求:
建立一个学生考勤信息数据库,文件名为“学生考勤管理系统.txt”并从该文件写入数据。
学生考勤管理系统要实现对学生考勤的信息录入,根据给疋信息对学生考勤进行分类。
进
度安排
起止日期
工作内容
2017年6月12日
需求分析,按照课题要求,搜集查询相关参考资料。
2017年6月13日
至2017年6月14日
概要设计和详细设计阶段,根据前期的需求分析结果,定义系统实现所需要的自定义函数数据类型及个功能函数。
2017年6月15日
至2017年6月17日
程序的进一步完善,调试与测试撰写课程设计报告。
主要参资料考
[1].谭浩强.C程序设计(第三版)[M].北京:
清华大学出版社,2014
[2].梁旭.C语言课程设计(第三版)[M].北京:
电子工业出版社,2013
[3].刁成嘉.面向对象程序设计[M].北京:
机械工业出版
社,2004
[4].张鸿.C++语言程序设计[M].北京:
中国电力出版社,2014
指导教师
意见
(签字):
年月曰
系(教研室)
主任意见
(签字):
年月曰
面向对象程序设计(C++)课程设计说明书
学院名称:
计算机与信息工程学院
班级名称:
通信162
学生姓名:
沈杰
学号:
2016211881
题目:
学生考勤管理系统的设计与实现
指导教师
姓名:
王南洋
起止日期:
2017年6月12日至2017年6月17日
1系统需求分析5.
1.1录入学生的缺课记录5.
1.2修改学生的缺课记录5.
1.3查询学生的缺课情况5.
1.4统计5.
1.4.1统计姓名及节数5.
1.4.2统计课程及人次5.
1.5小结5..
2总体设计6..
3详细设计7..
3.1学生缺课信息录用功能模块8
3.2修改某学生缺课信息功能的模块图8
3.3查询某学生缺课信息功能图9
3.4统计某段时间内旷课学生姓名及旷课节数功能模块9
3.5统计某段时间内有学生旷课的课程及旷课人次功能模块9
4系统调试10
4.1系统实现10
4.2类的设计10
5结果分析18
5.1综合测试原始界面19
5.1.1录入学生缺课记录19
5.1.2修改学生缺课记录19
5.1.3查询学生缺课情况20
5.1.4统计某段时间旷课学生姓名及旷课节数20
6总结20
1系统需求分析
考勤信息记录了学生的缺课情况,它包括:
缺课日期、第几节课(连续用begin-end的形式表示)、课程名称(课程名称中不会出现空格)、学生姓名、缺课类型(迟到、早退、请假及旷课)。
试设计考勤管理系统,使之能提供以下功能:
1.1录入学生的缺课记录
从键盘输入数据提示,为避免重复从键盘输入数据测试时可将数据存储在
文件中,禾U用输入重定向功能读入。
输入格式为:
缺课日期、第几节课、课程名称、学生姓名、缺课类型,每行一条纪录。
例如:
2016-04-292-4中国近代史李某迟到
2017-04-282-4大学生心理素质马某旷课
1.2修改学生的缺课记录
可以对缺课纪录的任意部分进行修改,然后显示一下修改后的纪录。
1.3查询学生的缺课情况
查询结果按照日期升序排序,同一天内按照所缺课程的时间升序排序。
1.4统计
1.4.1统计姓名及节数
统计某段时间内(以天为单位)旷课学生姓名及旷课节数,查询结果先按旷课节数降序排序,旷课节数相同的学生按姓名升序排序。
1.4.2统计课程及人次
统计某段时间内,有学生旷课的课程及旷课人次,按旷课人次由多到少排序旷课人次相同的课程按课程名称升序排序。
1.5小结
系统以菜单方式工作。
所谓菜单指用户可以自由选择所要执行的功能。
学生
可以通过以上功能录入信息、修改信息、查询信息、整理统计出所要了解的信息除了要实现上述的基本功能之外,本系统还应该在细节上下工夫,使用户使用方便,在使用的过程中保持一个愉快的心情。
学生考勤管理系统有广大的用户群这其中有老师、有教务处主任、有公司管理人员,也可以供给一般用户使用。
总之,该系统可以满足用户需求,实现对其管理的人员的考勤工作。
2总体设计
学生考勤管理系统包含五个大的功能。
分别是:
录入学生缺课信息、修改学生缺课信息、查询某个学生的缺课情况、统计某段时间内(以天为单位)旷课学生姓名及旷课节数和统计某段时间内,有学生旷课的课程及旷课人次。
学生的缺课信息主要包含缺课日期、第几节课、课程名称、学生姓名、缺课类型。
在录入学生缺课信息时根据系统提示逐一输入。
每输入完一条信息,系统会提示是否继续输入、用户可以选择继续或返回主菜单。
在修改学生缺课信息时,用户首先输入要修改的学生姓名,系统会检索如果系统中有该学生的相关信息则系统首先会提示用户修改该学生的那一部分信息,用户可自行选择。
如果系统中没有该学生的相关信息,则系统会给相关提示,用户可以选择继续输入要修改的学生姓名或选择退出返回主菜单。
在查询学生缺课信息时,用户先输入要查询的学生姓名。
系统检索判断是否存在该学生的信息然后做出相应的提示。
总之,用户可以
方便的在系统提示下进行使用。
学生书勒管理系统
录入缺佻字牛的姓容、缺课日期、缺课节次、缺课课程名称、缺陳类塑
的敬评日辄缺课节次*缺课课提名称"缺
1R却
査询某学牛的缺課曰期“缺课节次、缺课嗦程乂称、缺
间升示IV、牛婷im果
按时间升序显小仃学生『课的课稈境旷课人次
图1学生考勤管理系统中功能模块图
3详细设计
学生考勤管理系统中四个类的类层次图为
Time类
Xinxi类
qstu类qkechen类
图2学生考勤管理系统中中四个类的类层次图
学生考勤管理系统中各功能模块的实现
图3学生考勤管理系统中菜单函数的功能图
3.1学生缺课信息录用功能模块
图4学生缺课信息录入的功能
3.2修改某学生缺课信息功能的模块图
统汁集冃吋间内旷课学生姓名及旷集节数
统计某段时间内.有学生旷課的课出及旷睞人次
耶息
学生的缺味右a
图5学生考勤管理系统修改学生缺课信息功能图
3.3查询某学生缺课信息功能图
“输入異査询的学生姓名
査询某学主缺课偵息功能
显加娶杏询的学生缺课侍息
图6学生考勤管理系统查询学生缺课信息功能图
3.4统计某段时间内旷课学生姓名及旷课节数功能模块
图7统计某段时间内旷课学生姓名及旷课节数功能图
3.5统计某段时间内有学生旷课的课程及旷课人次功能模块
图8统计某段时间内有学生旷课的课程及旷课人次功能图
4系统调试
4.1系统实现
程序编写完成后,我进行了程序调试。
调试过程中,出现了以下问题:
当录入学生缺课信息时,出现了无法退出录入函数的情况,主要原因是输入函数中while循环语句没有设置跳出循环的条件。
除此之外,修改某学生缺课信息时,如果没有该学生的缺课信息,系统没有提示要用户没有该学生信息,也没有建议
用户重新输入要修改的学生姓名。
由此我发现了该系统修改学生缺课信息的不足。
在该函数中,也可查询要修改的学生缺课信息。
如果没有,则提示用户没有该学生的缺课信息,用户可以选择继续输入要修改的学生姓名或者退出修改环节,可以在循环语句中改变循环进行的条件从而终止循环。
系统实现了提示用户的功能,如果系统中没有你要查询的学生缺课信息,系统将会提示用户,用户可
以继续输入要查询的学生姓名也可以通过按系统设置的退出键选择退出查询环节。
通过认真调试,我发现我有了收获。
4.2类的设计
附录:
源程序代码(部分主要程序)
//缺课课程类
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;//静态数据成员 }; intqstu: : qst=O; //全局变量 intg,k=1,b=1; intq=-1; charname[20],kechen[10],queke[10],jieci[3]; inty,m,d; //主函数 intmain() {xinxitl[15];〃定义15条信息类对象 qstuqt[10]; qkechenqk[6]; intch; while (1) {coutvv"********欢迎进入学生考勤管理系统*********"< caidan(); coutvv"请选择菜单项: "< cin>>ch; switch(ch) {case1: g=shuru(tl);break; case2: xiugai(tl,g);break; case3: chaxun(tl,qt);break; case4: tongji1(tl,qt);break; case5: tongji2(tl,qk);break; case6: exit(0); } } return0; //修改函数 voidxiugai(xinxist1[],intn) { intk=1,j=O,a[1O]; intflgh; inth; while(k==1) {coutvv"请输入你要修改缺课记录的学生姓名"< cin>>name; flgh=0; for(inti=0;i if(strcmp(name,st1[i].getname())==0) do{a[j]=i; cout<<"1.修改日期2.修改节次3.修改课程名称4.修改缺课类型"< coutvv"请输入要选择的数值(1,2,3,4)"vvendl; intb; cin>>b; if(b==1) {coutvv"请输入新日期"< cin>>y>>m>>d; st1[i].settime(y,m,d); } elseif(b==2) {coutvv"请输入新节次"< cin>>jieci; st1[i].setjieci(jieci); } elseif(b==3) {coutvv"请输入新课程名称"vvendl; 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) {coutvv"没有你要找的学生姓名请重试要退出请按0"< cin>>k; } else {coutvv"还要继续吗(1\0)退出请按0"< cin>>k; } } for(inti=0;i {h=a[i]; xiansi(st1[h]); } } //查询函数 voidchaxun(xinxist1[],qstuqt[]) { charn='y'; intu[10]; while(n=二'y') {intj=0; coutvv"输入你要查询的学生姓名: "< cin>>name; inti=0; for(;i if(strcmp(name,st1[i].getname())==O) {u[j]=i; j++; } if(j==O) 没有你所要的学生名字! ";〃没有找到 {cout«" coutvv"是否退出退出请按n\n"; cin>>n; } for(inta=0;a {//只有一条信息 if(j<2) 第几节课|"<<"课程名称|"<<"缺 "<<*st1[i].gettime()<<"| "<<*(st1[i].gettime()+2)<<"| < {i=u[a]; cout<<"|缺课日期|"<<" 课类型|"< cout<<"| "<<*(st1[i].gettime()+1)<<"| "< "< } //两条信息以上排序 else { i=u[a]; if(*(st1[i].gettime()+1)<*(st1[i+1].gettime()+1))qt[i].print(st1[i]); else if(*(st1[i].gettime()+1)==*(st1[i+1].gettime()+1)&&*(st1[i].gettime() +2)v*(st1[i+1].gettime()+2)) qt[i].print(st1[i]); else if(*(st1[i].gettime()+1)==*(st1[i+1].gettime()+1)&&*(st1[i].gettime()+2)==*(st1[i+1].gettime()+2)) if(strcmp(st1[i].getjieci(),st1[i+1].getjieci())==-1) qt[i].print(st1[i]); } coutvv"是否继续查询(y/n)继续请按y退出按n"< cin>>n; } } } //统计某段时间内旷课学生姓名及旷课节数 voidtongji1(xinxist1[],qstuqt1[]) {intd1=0,js=0; xinximin; if(g==0) coutvv"没有你要统计的学生信息请返回菜单录入学生缺课信息 elseif(g==1) {coutvv"姓名: "< if(*(st1[0].getjieci()+2)! ='\0') js=+2; else js++; coutvv"节数: "vvjsvvendl; } //显示函数 voidxiansi(xinxi&st1) vvendl; 学生姓 {coutvv"|缺课日期|"vv"第几节课|"vv"课程名称|"vv"名|"<<"缺课类型|"< coutv +2) <<"|"< } //删除信息 主要代码如下 voiddel(records*r)//删除学生信息 { if(r->n==O) { cout«"记录为空! "< return; } coutvv"请输入要删除的记录的序号: (输入-1删除全部)"vvflush; intflag; cin>>flag; if(flag>r->n-1&&flagv-1) { coutvv"不存在所要删除的记录! "< return; } elseif(flag==-1)r->n=0; else { for(inti=flag;i r->r[i].set(r->r[i+1]); r->n--; } charyn; cout«"保存修改? (y/n)"vvflush; cin»yn; if(yn二二'y')wt(r); elsereturn; } 5结果分析 这次的课设,我写的程序也没有什么独到之处,我觉得唯一可以从我的程序可以看出的是数组用得比较多,反正是没啥特色。 不仅如此,还写得功能不全,实在是惭愧。 现在在这里也只能说说它的不足之处了。 类层次不够清晰,纵观整 个程序可以发现四个类之间的关系不甚恰当,我有这个感觉。 但我不知如何改进。 函数参数设定不够完美,整个程序中对指针的运用比较少。 对于指针的巧妙运用把握得不够。 还有就是容易missing或者是}这都是些应该改掉的毛病。 除此以外,我对于怎样用文件保存数据还没深入了解。 但我将数据保存到文件后又因文件打不开而无法访问文件中的数据,对于动态链表,我不是很清晰,也就是说 无法做到熟稔运用。 在调试过程中我发现在主函数中把字符数组名name赋值给 字符指针p即p=name然后用cout< 在我思考一番后终于明白了,这与内存中的地址值有关。 具体为什么我是解释不清了,调用系统的显示,如果在getname()函数前加一个*号输出的只是一个字符,不加反而能输出所功能时有字符。 getname()函数的返回值为指针类型。 但前面说过利用函数返回指针类型的值并不能输出字符数组中所有的字符,为什么这里又可以呢? 我不知道这一知识,这也算我的程序的不足之处吧! 对于两个统计函数的功能不全,我感到无能 为力,我为了这两函数苦思了两天硬是没凑合来。 到后来脑子里都乱了,运行时 屏幕上尽是些乱七八糟的东西。 结果不是很好,但过程够了就行。 5.1综合测试原始界面 林******欢迫讲入孝十考勒答理系统******来半常 学生考動管理系统 ***********举学*举*: **: ***: *#*: **: *辛*: ***: 辛**牟*: *耳半*****: *耳半******耳# S- 录入学主的缺课记录一修改学主的缺课记录査询学生的缺课情况——统计棊段时间内旷课学牛舛名尺旷课节数——统计某段时间内旷谍的课程及旷课人次一退岀系统请选择菜单项: **京家*対*黑芈*雷**溺*******鸯笨*芈當**起比紀*倉**幺*之宣*倉*岀比唏朮常曲*址**«*L 2、 图9综合测试原始界面 5.1.1录入学生缺课记录 相和^扫啣欢迎进入学生考勤管理系统林******* B: r「: rit: .r~Bs'^x町片冃r**"*: ■尸: 、常・";a"G片冃*": *盘"勺叮11': *u1〉": e叮11•: 、・』: **・「: 冃#: %「: "』: "「亠・』: ""A*": 冃』”、n: Fr~sb_i>r",br"nj"xis: 'rr-a *学生考勤管理系统* 1■二=-二■! -丄=d丄1■=;! »■丄•=8■丄3―丄』1•二―"丄"d丄1「匸』”丄―-丄a■-'J-^―-*j"丄--**UaJJ■■- ■孑! "¥*;■・;F■|,右"■r■"h「;r・;_・;'r■|r■|'■;r■『"";r*|■吩r■i"1""'"|^"|^"7""l''I™SR"lT"T"囂r";_1j™-"|hrj"rr■*■;■»■"1sJr■■■r,"""ip"r""h土rl*■・: r』q 1.录入学生的缺误记录* 2.修改学生的缺课记录* 3.査询学生的缺误情况* 4-统计某段时间内旷课学生姓名及旷误节数域 5.统计某段时间内旷课的课程及旷课人次* 6迫出索统* 请选抒菜单项: 1 入开始 请输入学生姓名 图10录入学生缺课记录 5.1.2修改学生缺课记录 吉帰帰睿申*%、: 迎进入学生考勒音理系窃衬水芋水*榊K b'j工』t'jI.'ai.\r\"jt'jj.: 』•.'Jrij"j.'ji'j*i°j.'ai'j.: 』i'j・: 』i.'iii.'^l"ji.'jl'ji
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- C+ 课程设计 报告
![提示](https://static.bdocx.com/images/bang_tan.gif)