• 268.00 KB
  • 2022-05-17 13:40:01 发布

学生考勤管理系统课程设计报告.doc

  • 33页
  • 当前文档由用户上传发布,收益归属用户
  1. 1、本文档共5页,可阅读全部内容。
  2. 2、本文档内容版权归属内容提供方,所产生的收益全部归内容提供方所有。如果您对本文有版权争议,可选择认领,认领后既往收益都归您。
  3. 3、本文档由用户上传,本站不保证质量和数量令人满意,可能有诸多瑕疵,付费之前,请仔细先通过免费阅读内容等途径辨别内容交易风险。如存在严重挂羊头卖狗肉之情形,可联系本站下载客服投诉处理。
  4. 文档侵权举报电话:19940600175。
南昌航空大学面向对象程序课程设计(c++)题目:班级考勤管理系统院系:软件学院班级:668学号:668姓名:帅哥 一.需求分析功能需求:1.录入班级信息;2.显示班级信息;3.录入学生的信息和缺勤记录;4.修改某个学生的信息和缺勤记录;5.查询某个学生的信息和缺勤情况;6.以文件的形式读写;7.系统以菜单方式工作;数据需求本系统主要涉及的数据有班级信息和学生信息及缺课信息类。班级信息包括班级的学号,班级的人数,学生缺课信息包括学生姓名,学号,专业,课程名称,缺课节次,学生缺课类型(迟到,早退,请假,旷课)。二、系统的主要功能(1).录用班级信息记录,在classclas中成员函数voidset(){}实现,按照用户提示进行操作写入类中,显示在voiddisplay(){}中。(2).录入学生的信息和缺课记录,在classstudent中成员函数代码voidinput(){}实现中。首先提示用户按照正确的格式进行学生缺课记录的录入,这个步骤比较简单,只需要不断地将记录的每个数据项存入结构体对应的成员中。(3)、修改某个学生的缺课记录,在classstudent中成员函数voidedt(){}实现。首先必须查找到你所需要修改的哪位的学生全部缺课记录。可以设置下面这五个菜单供用户选择:1、学生学号2、学生姓名3、学生班级4、缺课课程5、缺课类型6、退出修改程序并返回系统主菜单。修改很简单,仅需要对该学生的某个部分进行替换即可。最后实现对所选记录的修改,完成后更新原有的学生记录。(4)、查询某个学生的缺课情况,在classstudent中成员函数voidsearch(){}实现。可以对学生的学号进行查询,并输出学生信息和考勤的信息。(5)、学生信息的保存运用文件来保存,在classstudent中成员函数voidwt(int&i){}和voidrd(){}中实现。三、类的设计本系统设计了三个大类,一个是班级信息类(classclas),实现班级信息的录用,显示。另一个学生基本信息设置类(classstudent),实现学生信息课程的录用。最后一个学生考勤操作类(classrecords)实现考勤信息查询,显示,修改,保存等。在主函数中实现桌面菜单操作。四、流程图 学生考勤系统结构图:基类的数据成员和成员描述Classclas班级信息基类intcnum,pnum;班级数据成员voidsetc();录用班级信息voiddisplay();显示班级信息Classstudent学生信息课程类intsnum,cnum,type;charcname[5],sname[5],lname[5]学生课程数据成员voidset();传递学生信息继承Classrecords实现学生信息和考勤情况操作的类clas*p;student*r;基类对象的指针staticintn=0;voidInput()录用学生课程考勤信息voidwt/rd/wdt()信息以文件的形式保存voidpri()显示学生课程考勤信息voidedt()修改学生考勤信息voiddel()删除学生考勤信息voidsearch()查询学生考勤信息最后为main(){} 五、类具体设计实现及主函数实现此程序运用多种条件语句,主体采用的是动态对象数组、指针。系统的设计采用了数组语句、选择语句和循环语句,在需要处理大量同类数据时,这样就使程序书写更加简洁。程序。选择语句多采用if多分支选择结构与switch语句。首先计算switch表达式,然后在caes子句中寻找值相等的常量表达式,并以此为入口符号,由此开始顺序执行。switch语句中,保证多分支情况的正确执行,在循环语句中,强制终止本层循环。保存和读取函数是典型的函数功能,一个程序是由若干个函数组成的,保存和读取函数是和其他函数互相调用的。1. 编写头文件(类的声明写一个文件“ClaStu.h”)//*************************//头文件ClaStu.h//*************************#include#include#include#include#includeconstintmax=15;classclas//班级信息基类{public:voidsetc();//录用班级信息voiddisplay();//显示班级信息intcnum;//班级编号intpnum;//班级人数};classstudent//学生信息课程类{public:voidset(intb,char*s,char*l,char*c,intcno,inttype);//传递学生信息charcname[5],sname[5],lname[5];//定义缺课课程名称,学生称名,学生类别名称intsnum,cno,type;//定义学生学号,缺课节次,缺课类型};classrecords:publicstudent,clas//实现学生信息和考勤情况操作的类{ public:records()//构造函数{r=newstudent[max];//动态建立两个基类对象数组,返回两个对象指针p=newclas[max];}voidinput();//录用学生课程考勤信息voidwt(int&i);//信息以文件的形式保存voidrd();//信息以文件的形式读出voidpri();//显示学生课程考勤信息voidsearch();//查询学生考勤信息voiddel();//删除学生考勤信息voidedt();//修改学生考勤信息voidwdt(int&n);//修改信息以文件的形式保存student*r;//声明两个对象指针clas*p;staticintn;//n为静态变量记录创建对象的个数,};intrecords::n=0;2. 编写cpp文件(类的实现)自定义的包含文件一般都放在自己指定的目录中,所以在引用他们时,采用双引号以通知c编译器在用户指定的目录下和当前目录下寻找包含文件。#include”ClasStu.h”voidclas::setc()//录用班级信息{cout<<"输入班级学号:"<>cnum;cout<<"输入班级人数:"<>pnum;}voidclas::display()//显示班级信息{cout<<"班级学号:"<snum=b;//学生学号this->cno=cno;//缺课节次this->type=type;//缺课类型}voidrecords::wt(int&i)//信息以文件的形式保存{ofstreamoutf;//声明一个流对象if(i>0)//判断是否是第一个数据,如果不是以追加文件尾的方式存储outf.open("data.txt",ios::app);elseoutf.open("data.txt",ios::out);//创建一个文件并以文件的方式存储outf<>n;inf>>r[i].snum>>r[i].cno>>r[i].type>>r[i].sname>>r[i].lname>>r[i].cname;i++;}}voidrecords::wdt(int&i)//修改信息以文件的形式保存{ofstreamoutf("data.txt");//同上面原理相同不在介绍outf<>t4>>t1>>t2>>t3>>t5>>t6;records::n++;cout<>y;if(y=="y")wt(i);cout<<"是否继续输入?(y/n)"<>yn;if(yn=="y")continue;elsebreak;}}voidrecords::pri()//学生考勤系统显示模块{if(n==0){cout<<"------文件记录为空----"<>tnum;for(i=0;i>km;switch(km)//控制修改的选项{case1:cout<<"请输入修改的学生学号:"<>t1;break;case2:cout<<"请输入修改的学生姓名:"<>t2;break;case3:cout<<"请输入修改的缺课课程:"<>t3;break;case4:cout<<"请输入修改的学生专业:"<>t4;break;case5:cout<<"输入修改的缺课课程次数:"<>t5;break;case6:cout<<"请输入缺课类型:(1.迟到2.早退3.请假4.旷课)"<>t6;break;}r[i].set(t1,t2,t3,t4,t5,t6);//输入学生信息到对象中去charyn;cout<<"保存修改?(y/n)"<>yn;if(yn=="n")wt(i);elsereturn;}voidrecords::del()//学生系统删除模块{inti; cout<<"请输入要删除的记录的学号序号:(输入-1删除全部)"<>flag;for(i=0;i>yn;if(yn=="n")wdt(n);break;}}if(!k){cout<<"查无您要删除的学生!"<>tnum;for(inti=0;ird();c2:cout<<"tt学生班级考勤管理系统V1.0.0"<>w;if(w==1)//显示班级记录{t->p->setc();cout<<"显示班级信息:"<p->display();cout<<"是否返回(1为是)"<>q;if(q==1)gotoc2;}Else//录入学生的缺课记录{c1:cout<<"tt学生考勤管理系统V1.0.0"<>cho;if(cho==7)exit(0);switch(cho)//控制学生考勤操作{case1:t->pri();break;case2:t->input();cout<n;break;case3:t->search();break;case4:t->edt();break;case5:t->del();break;case7:exit(0);}cout<<"返回功能列表?(y/n)"<>yn;if(yn=="y")gotoc1;elseif(yn=="n")exit(0);}}六、系统运行结果样例当用户执行程序时首先会出现如下界面也是主菜单界面: 输入1时进入班级界面,并进行班级信息输入及显示:按1返回上一级菜单,按2进入学生考勤系统如图:按1显示记录并返回在按2录用学生信息如图: 录用后显示:文件内的数据: 其他功能都一样不一一列举调试七、结束语本次课程设计主要使用到了C++中的一些比较基本的算法,总体上感觉比之前做过的实验综合性比较强。在这里我主要总结一下我设计这个学生考勤管理系统的心得和在编译程序的过程中遇到的问题以及解决的办法。为了使得程序的编写更加有条理,阅读更加明了,在写每个模块的时候都将自己的思路写在每个函数的第一行,告诉自己(读者)我这个函数将要做的是什么事情。这是一个很好的编程规范,值得继续发扬。对于这次的程序的编写,花了不少时间,原因很可能是自己对C++的总体认知还不够,还有在上学期一个月对C++的学习知识量很有限,在编写调试的这个过程中很多新的语法知识都是在网上搜索的。我学习编程一直有自己的一点想法:用任务来牵引,在实践中学习。也就是说,我没有按照某种固定的顺序去学习编程,而是经常有一些小的程序想法或是想编一个满足特定功能的程序。这样刚开始几乎每次都是在对所编程序一无所知的基础上进行,由简单到复杂,一个问题一个问题地去解决。当然,很多时候我失败了,但在这过程中,我学到了很多。问题一个个地解决,知识一点点地积累,经验一点点地丰富,想法一点点地成熟,成功概率也一点点地提高最后,通过完成编程,我达到了:1、加深对本课程理论知识的理解,提高实际应用能力;2、树立自身对理论联系实际的工作作风、严肃认真的科学态度;3、进一步训练和提高自身的分析设计能力、理论计算能力、实验研究能力、外文阅读、查阅文献资料和文字表达等基本技能;4、培养自身独立分析、解决实际问题的能力,培养自身的创新意识和创新能力。以上是用工程多文件编写的,不用工程多文件的如下,其实是一个意思但我怕有的同学不懂多文件,说调试错误,以下源代码只需复制粘贴编译运行就可。#include#include#include#include#includeconstintmax=15; classclas{public:voidsetc(){cout<<"输入班级学号:"<>cnum;cout<<"输入班级人数:"<>pnum;}voiddisplay(){cout<<"班级学号:"<snum=b;this->cno=cno;//this->type=type;}charcname[5],sname[5],lname[5];intsnum,cno,type;//};classrecords:publicstudent,clas{public:records(){r=newstudent[max]; p=newclas[max];}voidinput();voidwt(int&i);voidrd();voidpri();voidsearch();voiddel();voidedt();voidwdt(int&n);student*r;clas*p;staticintn;};intrecords::n=0;voidrecords::wt(int&i){ ofstreamoutf;if(i>0)outf.open("data.txt",ios::app);elseoutf.open("data.txt",ios::out);cout<>n;inf>>r[i].snum>>r[i].cno>>r[i].type>>r[i].sname>>r[i].lname>>r[i].cname;i++;}}voidrecords::input()//学生考勤系统的录用模块{ for(inti=0;i<100;i++){chart1[5],t2[5],t3[5];intt4,t5,t6;charyn;cout<<"录入一条学生详细考勤记录:"<>t4>>t1>>t2>>t3>>t5>>t6;records::n++;cout<>y;if(y=="y")wt(i);cout<<"是否继续输入?(y/n)"<>yn;if(yn=="y")continue;elsebreak;} }voidrecords::pri()//学生考勤系统显示模块{if(n==0){cout<<"------文件记录为空----"<>tnum;for(i=0;i>km;switch(km){case1:cout<<"请输入修改的学生学号:"<>t1;break;case2:cout<<"请输入修改的学生姓名:"<>t2;break;case3:cout<<"请输入修改的缺课课程:"<>t3;break;case4:cout<<"请输入修改的学生专业:"<>t4; break;case5:cout<<"输入修改的缺课课程次数:"<>t5;break;case6:cout<<"请输入缺课类型:(1.迟到2.早退3.请假4.旷课)"<>t6;break;}r[i].set(t1,t2,t3,t4,t5,t6);charyn;cout<<"保存修改?(y/n)"<>yn;if(yn=="n")wt(i);elsereturn;} voidrecords::del()//学生系统删除模块{inti;cout<<"请输入要删除的记录的学号序号:(输入-1删除全部)"<>flag;for(i=0;i>yn;if(yn=="n")wdt(n);break;}}if(!k) {cout<<"查无您要删除的学生!"<>tnum;for(inti=0;ird();c2:cout<<"tt学生考勤管理系统V1.0.0"<>w;if(w==1){t->p->setc();cout<<"显示班级信息:"<p->display();cout<<"是否返回(1为是)"<>q;if(q==1)gotoc2;}else {c1:cout<<"tt学生考勤管理系统V1.0.0"<>cho;if(cho==7)exit(0);switch(cho){case1:t->pri();break;case2:t->input();cout<n;break;case3:t->search();break;case4:t->edt();break; case5:t->del();break;case7:exit(0);}cout<<"返回功能列表?(y/n)"<>yn;if(yn=="y")gotoc1;elseif(yn=="n")exit(0);}