




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
/面向对象程序设计〔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系统需求分析51.1录入学生的缺课记录51.2修改学生的缺课记录51.3查询学生的缺课情况51.4统计51.4.1统计姓名及节数51.4.2统计课程及人次51.5小结52总体设计63详细设计73.1学生缺课信息录用功能模块73.2修改某学生缺课信息功能的模块图83.3查询某学生缺课信息功能图83.4统计某段时间内旷课学生姓名及旷课节数功能模块83.5统计某段时间内有学生旷课的课程及旷课人次功能模块94系统调试94.1系统实现94.2类的设计105结果分析175.1综合测试原始界面185.1.1录入学生缺课记录185.1.2修改学生缺课记录185.1.3查询学生缺课情况195.1.4统计某段时间旷课学生姓名及旷课节数196总结201系统需求分析考勤信息记录了学生的缺课情况,它包括:缺课日期、第几节课〔连续用begin-end的形式表示>、课程名称〔课程名称中不会出现空格、学生姓名、缺课类型〔迟到、早退、请假及旷课。试设计考勤管理系统,使之能提供以下功能:1.1录入学生的缺课记录从键盘输入数据提示,为避免重复从键盘输入数据测试时可将数据存储在文件中,利用输入重定向功能读入。输入格式为:缺课日期、第几节课、课程名称、学生姓名、缺课类型,每行一条纪录。例如:2016-04-292-4中国近代史李某迟到2017-04-282-4大学生心理素质马某旷课1.2修改学生的缺课记录可以对缺课纪录的任意部分进行修改,然后显示一下修改后的纪录。1.3查询学生的缺课情况查询结果按照日期升序排序,同一天内按照所缺课程的时间升序排序。1.4统计1.4.1统计姓名及节数统计某段时间内〔以天为单位旷课学生姓名及旷课节数,查询结果先按旷课节数降序排序,旷课节数相同的学生按姓名升序排序。1.4.2统计课程及人次统计某段时间内,有学生旷课的课程及旷课人次,按旷课人次由多到少排序旷课人次相同的课程按课程名称升序排序。1.5小结系统以菜单方式工作。所谓菜单指用户可以自由选择所要执行的功能。学生可以通过以上功能录入信息、修改信息、查询信息、整理统计出所要了解的信息除了要实现上述的基本功能之外,本系统还应该在细节上下工夫,使用户使用方便,在使用的过程中保持一个愉快的心情。学生考勤管理系统有广大的用户群这其中有老师、有教务处主任、有公司管理人员,也可以供给一般用户使用。总之,该系统可以满足用户需求,实现对其管理的人员的考勤工作。2总体设计学生考勤管理系统包含五个大的功能。分别是:录入学生缺课信息、修改学生缺课信息、查询某个学生的缺课情况、统计某段时间内〔以天为单位旷课学生姓名及旷课节数和统计某段时间内,有学生旷课的课程及旷课人次。学生的缺课信息主要包含缺课日期、第几节课、课程名称、学生姓名、缺课类型。在录入学生缺课信息时根据系统提示逐一输入。每输入完一条信息,系统会提示是否继续输入、用户可以选择继续或返回主菜单。在修改学生缺课信息时,用户首先输入要修改的学生姓名,系统会检索如果系统中有该学生的相关信息则系统首先会提示用户修改该学生的那一部分信息,用户可自行选择。如果系统中没有该学生的相关信息,则系统会给相关提示,用户可以选择继续输入要修改的学生姓名或选择退出返回主菜单。在查询学生缺课信息时,用户先输入要查询的学生姓名。系统检索判断是否存在该学生的信息然后做出相应的提示。总之,用户可以方便的在系统提示下进行使用。图1学生考勤管理系统中功能模块图3详细设计学生考勤管理系统中四个类的类层次图为图2学生考勤管理系统中中四个类的类层次图学生考勤管理系统中各功能模块的实现图3学生考勤管理系统中菜单函数的功能图3.1学生缺课信息录用功能模块图4学生缺课信息录入的功能3.2修改某学生缺课信息功能的模块图图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<n;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=0;//全局变量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>{cout<<"********欢迎进入学生考勤管理系统*********"<<endl;caidan<>;cout<<"请选择菜单项:"<<endl;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=0,a[10];intflgh;inth;while<k==1>{cout<<"请输入你要修改缺课记录的学生姓名"<<endl;cin>>name;flgh=0;for<inti=0;i<n;i++>if<strcmp<name,st1[i].getname<>>==0>do{a[j]=i;cout<<"1.修改日期2.修改节次3.修改课程名称4.修改缺课类型"<<endl;cout<<"请输入要选择的数值<1,2,3,4>"<<endl;intb;cin>>b;if<b==1>{cout<<"请输入新日期"<<endl;cin>>y>>m>>d;st1[i].settime<y,m,d>; }elseif<b==2>{cout<<"请输入新节次"<<endl;cin>>jieci;st1[i].setjieci<jieci>;}elseif<b==3>{cout<<"请输入新课程名称"<<endl;cin>>kechen;st1[i].setkechen<kechen>;}elseif<b==4>{cout<<"请输入新缺课类型"<<endl;cin>>queke;st1[i].setqklx<queke>;}flgh=1;j++;}while<b<1||b>4>;if<flgh==0>{cout<<"没有你要找的学生姓名请重试要退出请按0"<<endl;cin>>k;}else{cout<<"还要继续吗<1\0>退出请按0"<<endl;cin>>k;}}for<inti=0;i<j;i++>{h=a[i];xiansi<st1[h]>;}}//查询函数voidchaxun<xinxist1[],qstuqt[]>{charn='y';intu[10];while<n=='y'>{intj=0;cout<<"输入你要查询的学生姓名:"<<endl;cin>>name;inti=0;for<;i<g;i++>if<strcmp<name,st1[i].getname<>>==0>{u[j]=i;j++;}if<j==0>{cout<<"没有你所要的学生名字!";//没有找到cout<<"是否退出退出请按n\n";cin>>n;}for<inta=0;a<j;a++>{//只有一条信息if<j<2>{i=u[a];cout<<"|缺课日期|"<<"第几节课|"<<"课程名称|"<<"缺课类型|"<<endl;cout<<"|"<<*st1[i].gettime<><<"|"<<*<st1[i].gettime<>+1><<"|"<<*<st1[i].gettime<>+2><<"|"<<st1[i].getjieci<><<"|"<<st1[i].getkechen<><<"|"<<st1[i].getqklx<><<"|"<<endl;}//两条信息以上排序else{i=u[a];if<*<st1[i].gettime<>+1><*<st1[i+1].gettime<>+1>>qt[i].print<st1[i]>;elseif<*<st1[i].gettime<>+1>==*<st1[i+1].gettime<>+1>&&*<st1[i].gettime<>+2><*<st1[i+1].gettime<>+2>>qt[i].print<st1[i]>;elseif<*<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]>;}cout<<"是否继续查询<y/n>继续请按y退出按n"<<endl;cin>>n;}}}//统计某段时间内旷课学生姓名及旷课节数voidtongji1<xinxist1[],qstuqt1[]>{intd1=0,js=0;xinximin;if<g==0> cout<<"没有你要统计的学生信息请返回菜单录入学生缺课信息"<<endl;elseif<g==1>{cout<<"姓名:"<<st1[0].getname<><<endl;if<*<st1[0].getjieci<>+2>!='\0'>js=+2;elsejs++;cout<<"节数:"<<js<<endl;}//显示函数voidxiansi<xinxi&st1>{cout<<"|缺课日期|"<<"第几节课|"<<"课程名称|"<<"学生姓名|"<<"缺课类型|"<<endl;cout<<"|"<<*<st1.gettime<>><<"|"<<*<st1.gettime<>+1><<*<st1.gettime<>+2><<"|"<<st1.getjieci<><<"|"<<st1.getkechen<><<"|"<<st1.getname<><<"|"<<st1.getqklx<><<"|"<<endl;}//删除信息主要代码如下voiddel<records*r>//删除学生信息{ if<r->n==0> { cout<<"记录为空!"<<endl; return; } cout<<"请输入要删除的记录的序号:<输入-1删除全部>"<<flush; intflag; cin>>flag; if<flag>r->n-1&&flag<-1> { cout<<"不存在所要删除的记录!"<<endl; return; } elseif<flag==-1>r->n=0; else { for<inti=flag;i<r->n-1;i++> r->r[i].set<r->r[i+1]>; r->n--; } charyn; cout<<"保存修改?<y/n>"<<flush; cin>>yn; if<yn=='y'>wt<r>; elsereturn;}5结果分析这次的课设,我写的程序也没有什么独到之处,我觉得唯一可以从我的程序可以看出的是数组用得比较多,反正是没啥特色。不仅如此,还写得功能不全,实在是惭愧。现在在这里也只能说说它的不足之处了。类层次不够清晰,纵观整个程序可以发现四个类之间的关系不甚恰当,我有这个感觉。但我不知如何改进。函数参数设定不够完美,整个程序中对指针的运用比较少。对于指针的巧妙运用把握得不够。还有就是容易missing或者是}这都是些应该改掉的毛病。除此以外,我对于怎样用文件保存数据还没深入了解。但我将数据保存到文件后又因文件打不开而无法访问文件中的数据,对于动态链表,我不是很清晰,也就是说无法做到熟稔运用。在调试过程中我发现在主函数中把字符数组名name赋值给字符指针p即p=name;然后用cout<<p;语句可以输出字符数组里全部的内容,但利用函数返回指针值却不能做到这一点。在我思考一番后终于明白了,这与内存中的地址值有关。具体为什么我是解释不清了,调用系统的显示,如果在getname<>函数前加一个*号输出的只是一个字符,不加反而能输出所功
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 逐题解析2025年计算机二级ACCESS考试试题及答案
- 软件项目测试计划试题及答案
- 2025年JAVA考试备考时的心理调适试题及答案
- 计算机一级Photoshop考试能力提升试题及答案
- 家具维修培训合同协议书
- 2025年C语言考试重点知识点总结试题及答案
- 2025版高考地理一轮复习课后限时集训30资源开发与区域可持续发展-以德国鲁尔区为例含解析鲁教版
- 钢厂承包生产合同协议书
- 2025年C语言考试应试训练试题及答案
- JAVA异步编程模型试题及答案
- 钻井及井下作业井喷事故典型案例
- 小红书食用农产品承诺书示例
- CQI-23模塑系统评估审核表-中英文
- 中考英语1600核心词汇
- 空调维保服务投标方案 (技术方案)
- CSTM-铝灰用于替代铝土矿石技术规范编制说明
- 询价函模板范文
- 2023年江苏省南京市中考物理试题(解析版)
- 2023-2024学年科学四年级下册人教鄂教版2.8《蚕的一生》教学设计
- 防汛应急预案演练说辞
- 教育系统后备干部面试题目
评论
0/150
提交评论