C++课程设计学生考勤管理系统_第1页
C++课程设计学生考勤管理系统_第2页
C++课程设计学生考勤管理系统_第3页
C++课程设计学生考勤管理系统_第4页
C++课程设计学生考勤管理系统_第5页
已阅读5页,还剩21页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

内蒙古科技大学课程设计论文PAGEPAGE26《C++程序设计》课程设计说明书题目:C++语言课程设计——学生考勤管理系统学生姓名:学号:专业:班级:指导教师:日期:

内蒙古科技大学课程设计任务书课程名称面向对象程序设计A课程设计设计题目学生考勤管理系统指导教师时间一、教学要求1.巩固和加深学生对C++语言课程的基本知识的理解和掌握

2.掌握C++语言编程和程序调试的基本技能

3.利用C++语言进行基本的软件设计

4.掌握书写程序设计说明文档的能力

5.提高运用C++语言解决实际问题的能力二、设计资料及参数用C++设计一个系统,能提供下列服务:录入学生的缺课记录,格式为:日期课程时间(第几节课)学号姓名缺课类型2021-11-2c++程序设计1,2201705062231李四请假其中缺课类型包括迟到,请假和旷课。查询功能。可以根据学生的学号或姓名查询某个学生的缺课情况;可以查询某个课程的课情况;可以查询某一天的缺课情况;修改功能。根据查询方式找到某一条缺课记录,进行修改,并显示修改后的记录。统计功能。可以统计某一门课程所有学生的缺课记录,按照日期顺序进行显示;可以统计某个学生所有的缺课记录,按照日期顺序进行显示;三、设计要求及成果根据系统功能要求,可以将问题解决分为以下步骤:(1)分析系统中的各个实体之间的关系及其属性和行为;(2)根据问题描述,设计系统的类层次;(3)完成类层次中各个类的描述(包括属性和力一法);(4)完成类中各个成员函数的定义;(5)完成系统的应用模块;(6)功能调试;(7)提交课程设计报告:完成系统总结报告以及系统使用说明书目录内蒙古科技大学课程设计任务书 2第1章需求分析 4第2章总体设计 5第3章类的设计 63.1时间类的设计(第一个类) 63.2信息类的设计(第二个类) 63.3缺课课程类的设计(第三个类) 73.4缺课学生类的设计(第四个类) 7第4章详细设计 84.1工程视图 84.2类图视图 84.3主程序流程图 94.4主要算法的流程图 11第5章测试 125.1程序的运行结果截图。 12第6章总结 15附录:程序代码 16参考文献 25致谢 26需求分析用C++设计一个系统,能提供下列服务:考勤信息记录了学生的缺课情况,它包括:缺课日期、第几节课(连续用begin-end的形式表示)、课程名称(课程名称中不会出现空格)、学生姓名、缺课类型(迟到、早退、请假及旷课)。试设计考勤管理系统,使之能提供以下功能:1).录入学生的缺课记录:从键盘输入数据(提示:为避免重复从键盘输入数据,测试时可将数据存储在文件中,利用输入重定向功能读入),输入格式为:缺课日期第几节课课程名称学生姓名缺课类型每行一条纪录。录入学生的缺课记录,格式为:日期课程时间(第几节课)学号姓名缺课类型2011-11-2c++程序设计1,2200705062231李四请假其中缺课类型包括迟到,请假和旷课。查询功能。可以根据学生的学号或姓名查询某个学生的缺课情况;可以查询某个课程的课情况;可以查询某一天的缺课情况;修改功能。根据查询方式找到某一条缺课记录,进行修改,并显示修改后的记录。统计功能。可以统计某一门课程所有学生的缺课记录,按照日期顺序进行显示;可以统计某个学生所有的缺课记录,按照日期顺序进行显示;(4)统计某段时间内,有学生旷课的课程及旷课人次,按旷课人次由多到少排序,旷课人次相同的课程按课程名称升序排序;(5)系统以菜单方式工作。(所谓菜单指用户可以自由选择所要执行的功能。学生可以通过以上功能录入信息、修改信息、查询信息、整理统计出所要了解的信息,除了要实现上述的基本功能之外,本系统还应该在细节上下工夫,使用户使用方便,在使用的过程中保持一个愉快的心情。学生考勤管理系统有广大的用户群,这其中有老师、有教务处主任、有公司管理人员,也可以供给一般用户使用。总之该系统可以满足用户需求,实现对其管理的人员的考勤工作。总体设计1.用结构框图表示各个功能之间的关系。图2.1系统功能关系2.将框图中系统的各个功能用文字详细的描述。学生考勤管理系统包含四个大的功能,分别是:录入学生缺课信息、修改学生缺课信息、查询某个学生的缺课情况、统计某段时间内,有学生旷课的课程及旷课人次。学生的缺课信息主要包含缺课日期,第几节课、课程名称,学生姓名,缺课类型。输入:录入学生的缺课记录:从键盘输入数据,输入格式为:缺课日期第几节课课程名称学生姓名缺课类型修改:修改某个学生的缺课记录:可以对缺课纪录的任意部分进行修改,然后显示一下修改后的纪录。查询:查询某个学生的缺课情况:查询结果按照日期升序排序,同一天内按照所缺课程的时间升序排序。统计:统计某段时间内,有学生旷课的课程及旷课人次,按旷课人次由多到少排序,旷课人次相同的课程按课程名称升序排序。类的设计时间类的设计(第一个类)1.画出类图classtimeyear,month,dayPublic,protected图3.1时间类说明2.对类的函数成员的说明图3.1此类定义了缺课学生的具体时间,返回主菜单。 信息类的设计(第二个类)画出类图classxinxiName,time,qklx,jieci,kechenPublic,private图3.2信息类说明对类的函数成员的说明完成对学生基本信息的声明与获取,包括学生姓名、缺课日期、缺课课程名称、缺课课程类型、缺课节次,说明:输入学生姓名,课程名称,缺课日期,缺课类型,缺课节次;录入学生信息;缺课课程类的设计(第三个类)画出类图classqkechenKcshu,renciPublic,private图3.3缺课课程类说明对类的函数成员的说明完成对学生的缺课几次,和人次的统计。返回主菜单。缺课学生类的设计(第四个类)画出类图classqstujieshuPublic,private图3.4缺课学生类说明对类的函数成员的说明完成对学生的缺课节数的统计。返回主菜单。详细设计工程视图说明有几个源代码文件,可以截取工程文件视图表示:图4.1工程视图类图视图每个文件包含哪些类和函数,可以截图说明图4.2.1类的视图图4.2.2类的视图主程序流程图图4.3.1学生考勤管理系统中菜单函数的功能图图4.3.2学生缺课信息录入的功能图4.3.3学生缺课信息修改的功能主要算法的流程图图4.4主要算法流程图测试程序的运行结果截图。图5.1程序运行界面图5.2程序录入功能界面图5.3程序修改功能界面图5.4程序查询功能界面图5.5程序统计功能界面总结这次的程序设计相对于上学期还是有了进步的。学生考勤管理系统要求至少要有四个类,在起初,对于定义哪四个类我是不清楚的,通过仔细的研读问题描叙终于在脑海里确定了这四个类。既然是学生考勤管理系统,那由学生缺课信息中的日期我想到了时间类,这是一个很简单的类。从系统的几大功能我又想到了系统的基础就是缺课学生的缺课信息,于是我又想到了一个信息类,还有两个类是根据两个统计功能想到的,在现在看来似乎有些不妥。通过这次的课程设计我明白了学习程序设计语言必须要勤做实验,通过实验总结经验。平时遇到的一些小问题一定要重视,越是基础的知识越要理解透彻。比如指针与数组方面的知识,一旦没有弄清楚,在设计程序时就会吃亏。经过本次课程设计,发现做软件真的需要做很多工作,不仅仅是敲代码。首先,必须要有需求分析。就拿这次的题目来说,一个清晰的需求分析能让我省去很多工作,能让我把代码写的更清晰,让我的代码能有更好的重用性,以此简化程序。而这次的题目其实也算不上需求分析,只能算是功能分析吧。从界面到用户登陆判断,从增删改查基本功能到文件读写。如果能够把代码细化,把基本功能都封装成函数,这样应该会提高代码的重用性。其次,有了清晰的需求分析,还要有注释。注释也很重要,特别是写过之后重用和测试代码时,都必须得看。否则就不得不将已写好的封装函数从头到尾再看一遍,再理解,这样很浪费时间。有了注释,就可以省去这些重新理解函数的时间,可以提高效率。再次,写注释是为了使函数更简单的被理解。而写注释之前,必须要测试这段代码的可行性。必须要尽可能多的考虑会出现的情况,对不希望出现的情况予以相对的措施或者提示。这样在代码重用的时候也可以放心的重用,而不必因为代码写的不够完善而再来修改,这样也会浪费很多时间。这次的课设中,我遇到了很多的问题,有的通过思考或查看书本解决了,有的还留在脑子里,只有通过孜孜不倦的求索我们才会有进步,不懂得思考就不能真正的掌握一门知识。这次的实验给以了我警示,它让我明白我所掌握的知识还很欠缺,对于继承与派生这一章的知识,我以为自己勉强掌握了,这次实验后我发现我掌握得还不够。基类的保护成员公有继承到派生类,类外是否可以通过对象来访问呢,原先我认为是可以的,经过这次程序设计,我知道我错了。总之,我觉得做学问不应该马虎,对于所学一定要有深入的理解,这也是我这次课设得到的启示。附录:程序代码#include<iostream>#include<cstring>#include<windows.h>usingnamespacestd;//时间类classtime{public:time(inty=0,intm=0,intd=0){year=y;month=m;day=d;}~time(){}protected:intyear,month,day;};//信息类classxinxi:publictime{public:xinxi(){tiaoshu++;}~xinxi(){tiaoshu--;}voidsetname(char*n){strcpy(name,n);}voidsettime(inty,intm,intd){year=y;month=m;day=d;}voidsetqklx(char*qk){strcpy(queke,qk);}voidsetjieci(char*jc){strcpy(jieci,jc);}voidsetkechen(char*kc){strcpy(kechen,kc);}char*getname(){char*n;n=name;returnn;}char*getqklx(){char*qk=queke;returnqk;}char*getjieci(){char*jc;jc=jieci;returnjc;}char*getkechen(){char*gk;gk=kechen;returngk;}int*gettime();private:charname[20];//姓名charjieci[3],kechen[10],queke[10];inttm[3];staticinttiaoshu;};intxinxi::tiaoshu=0;int*xinxi::gettime(){int*t;t=tm;tm[0]=year;tm[1]=month;tm[2]=day;returnt;}//缺课课程类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;//类的实现voidqstu::print(xinxi&st1){cout<<"|缺课日期|"<<"第几节课|"<<"课程名称|"<<"缺课类型|"<<endl;cout<<"|"<<*st1.gettime()<<"|"<<*(st1.gettime()+1)<<*(st1.gettime()+2)<<"|"<<st1.getjieci()<<"|"<<st1.getkechen()<<"|"<<st1.getqklx()<<"|"<<endl;}intqstu::getjs(xinxist1[],intn,intj){inti=0,js=0;xinximin;if(*(st1[j].getjieci()+2)!='\0')js=+2;elsejs++;for(i=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(st1[i+1].getname(),qstn)==0){if(*(st1[i].getjieci()+2)!='\0')js=+2;elsejs++;}jieshu=js;returnjieshu;}//函数声明intshuru(xinxist1[]);voidchaxun(xinxist1[],qstuqt[]);voidxiugai(xinxist1[],intn);voidtongji2(xinxist1[],qkechenqk1[]);voidcaidan();voidxiansi(xinxi&st1);voidsetqstn(xinxist1[],qstuqt1[],intn);voidsetqkn(xinxist1[],qkechenqk[],intn);//全局变量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:tongji2(tl,qk);break;case5:exit(0);}}return0;}//菜单函数voidcaidan(){system("colorA");cout<<"*************************************************************"<<endl;cout<<"*\t\t学生考勤管理系统\t\t\t*"<<endl;cout<<"*************************************************************"<<endl;cout<<"1.录入学生的缺课记录*"<<endl;cout<<"2.修改学生的缺课记录*"<<endl;cout<<"3.查询学生的缺课情况*"<<endl;cout<<"4.统计某段时间内旷课的课程及旷课人次*"<<endl;cout<<"5.退出系统*"<<endl;}//输入函数intshuru(xinxist1[]){chara;cout<<"输入开始!"<<endl;do{q++;cout<<"请输入学生姓名"<<endl;cin>>name;st1[q].setname(name);cout<<"请输入课程名称"<<endl;cin>>kechen;st1[q].setkechen(kechen);cout<<"请输入缺课日期"<<endl;cin>>y>>m>>d;st1[q].settime(y,m,d);cout<<"请输入缺课类型"<<endl;cin>>queke;st1[q].setqklx(queke);cout<<"请输入缺课节次"<<endl;cin>>jieci;st1[q].setjieci(jieci);cout<<"是否还要继续输入:(y/n)"<<endl;cin>>a;}while(a=='y');returnq+1;}//修改函数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;}}}//统计某段时间内旷课的课程及旷课人次voidtongji2(xinxist1[],qkechenqk1[]){intd1=0,rc=0;xinximin;if(g==0)cout<<"没有你要统计的学生信息请返回菜单录入学生缺课信息"<<endl;elseif(g==1){cout<<"课程名:"<<st1[0].getkechen()<<endl;rc++;cout<<"人数:"<<rc<<endl;}else{inti=0;for(;i<g;i++){if(*(st1[i].gettime()+1)<*(st1[i+1].gettime()+1)){min=st1[i];st1[i]=st1[i+1];st1[i+1]=st1[i];}elseif(*(st1[i].gettime()+1)==*(st1[i+1].gettime()+1)&&*(st1[i].gettime()+2)<*(st1[i+1].gettime()+2)){min=st1[i];st1[i]=st1[i+1];st1[i+1]=st1[i];}elseif(*(st1[i].gettime()+1)==*(st1[i+1].gettime()+1)&&*(st1[i].gettime()+2)==*(

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论