1、C+机房计费管理系统一、需求分析1.输入功能:输入30名学生的学号、班级、姓名、上机起始时间。2.计算功能:计算每个下机学生的上机费用,每小时1元。(上机费用=上机时间* 1.0/h ,不足一小时按一小时计算)3.查询功能:按条件(班级、学号、姓名)显示学生的上机时间。4.机器使用情况的显示(显示方式不限但要一目了然)5.要求:1)源文件采用多文件的工程结构;2)数据存储采用文件形式;3)采用面向对象方法设计;4)功能完善,适当的注释;5)关于文件的内容需要自学;二、概要设计1.学生类的定义: Student(学生类)int tag; /删除标记char name20; 学生姓名int cla
2、; 班级int stunum; 学号int comnum; 上机号time_t stime; 开始上机时间time_t otime; 下机时间double htime; 上机总时间int money; 上机费用Student(); 构造函数Void upcom(char Name20,int Cla,int Stunum,int Comnum); 上机操作int downcom(); 下机操作void delstu(); 删除操作void setotime(); 设置下机时间time_t gettime(); 获取当前时间char* getname(); 获取姓名int getcla(); 获
3、取班级号int gettag(); 获取标记int getstunum(); 获取学号int getcomnum(); 获取上机号double countht(); 计算上机时间int countm(); 计算上机费用void disp(); 显示void disp2(); 显示22.学生库类定义: StuData(学生库类)int top;学生记录指针Student studentMAXS; 学生记录StuData(); 构造函数Student* searchnum(int Stunum);按学号搜索学生Student* searchcla(int Cla);按班级搜索学生void disp
4、bycla(int Cla);按班级显示学生Student*searchname(char *Name);按姓名显示学生void dispall();显示所有学生信息void upcom(char Name20,int Cla,int Stunum,int Comnum);上机操作void downcom(int Stunum);下机操作int search(); 搜索操作StuData(); 析构函数3.电脑类的定义: Computer(电脑类)int tag;删除标记int comnum; 电脑号Computer();构造函数void setcomnum(int Comnum);设置电脑号
5、int getcomnum();获取电脑号void upcom();上机操作void downcom();下机操作int gettag();获取标记4.电脑库类的定义: ComData(电脑库类)Computer computer30;记录电脑ComData();构造函数Computer* searchcom();搜索空闲电脑Computer* searchnum(int Comnum);按电脑号搜索int upcom();上机操作void disp();显示ComData();析构函数三、详细设计1.学生类成员函数的定义:Student:Student() /构造函数 void Studen
6、t:upcom(char Name20,int Cla,int Stunum,int Comnum) /上机 strcpy(name,Name); tag=1; cla=Cla; stunum=Stunum; comnum=Comnum; stime=gettime(); int Student:downcom() /下机 /otime=gettime(); setotime(); delstu(); disp(); return comnum; void Student:delstu() /更改上机标记 tag=0; void Student:setotime() /获取下机时间 otime
7、=gettime(); time_t Student:gettime() /获取当前时间 return time(NULL); char* Student:getname() /获取姓名 return name; int Student:getcla() /获取班级 return cla; int Student:gettag() /获取上机标记 return tag; int Student:getstunum() /获取学号 return stunum; int Student:getcomnum() /获取上机号 return comnum; double Student:countht
8、() /计算总上机时间 return difftime(otime,stime); int Student:countm() /计算上机费用 if(int)countht()%3600=0) return (int)countht()/3600; return (int)countht()/3600)+1; void Student:disp() /显示 cout姓名:name 班级:cla 学号:stunum 上机号comnumendl; cout开始上机时间:asctime(localtime(&stime) 上机总时间:countht()/3600.00小时 上机费用:countm()元
9、endl; void Student:disp2() /显示 coutendlendl -上机成功-endl; cout姓名:nameendl班级:claendl学号:stunumendl开始上机时间:asctime(localtime(&stime)上机号:comnumendl; /cout开始上机时间:stime 上机总时间:countht() 上机费用:countm()endl; 2.学生库类成员函数定义:StuData:StuData() /构造函数,将student.txt中的内容读到student中 Student s; top=-1; ifstream fin(student.t
10、xt); while(1) fin.read(char *)&s,sizeof(s); if(!fin) break; top+; studenttop=s; fin.close(); Student* StuData:searchnum(int Stunum) /按学号搜索 for(int i=0;i=top;i+) if(studenti.getstunum()=Stunum&studenti.gettag()=1) return &studenti; return NULL; Student* StuData:searchcla(int Cla) /按班级搜索 for(int i=0;i
11、=top;i+) if(studenti.getcla()=Cla&studenti.gettag()=1) return &studenti; return NULL; void StuData:dispbycla(int Cla) /按班级显示 for(int j=0;j=top;j+) if(studentj.getcla()=Cla&studentj.gettag()=1) studentj.disp(); coutendl; Student* StuData:searchname(char *Name) /按姓名搜索 for(int i=0;i=top;i+) if(!strcmp(
12、studenti.getname(),Name)&studenti.gettag()=1) return &studenti; return NULL; void StuData:dispall() /显示所有学生 for(int i=0;i=top;i+) if(studenti.gettag()=1) studenti.setotime(); studenti.disp(); coutdowncom(); int StuData:search() /机房学生查询 char choice; char name20; int stunum; int cla; Student *s; while
13、(choice!=0) coutendlendl-机房学生查询-endlendl; cout-1 按姓名查询 -endl; cout-2 按学号查询 -endl; cout-3 按班级查询 -endl; cout-4 全部学生信息 -endl; cout-0 返回主菜单 -choice; switch(choice) case 1: system(cls); cout请输入学生姓名:name; s=searchname(name); if(s=NULL) cout机房没有此人disp(); break; case 2: system(cls); cout请输入学生学号:stunum; s=se
14、archnum(stunum); if(s=NULL) cout机房没有此人disp(); break; case 3: system(cls); cout请输入班级号:cla; s=searchcla(cla); if(s=NULL) cout机房没有该班级的人!endl; break; dispbycla(cla); break; case 4: system(cls); coutendlendl -机房所有上机学生信息如下-endlendl; dispall(); break; case 0: return 0; default: cout输入有误,请重新输入:endl; cout按任意
15、键返回endl; getch(); system(cls); StuData:StuData() /析构函数,将student中数据写到srudent.txt中 ofstream fout(student.txt); for(int i=0;i=top;i+) if(studenti.gettag()=1) fout.write(char*)&studenti,sizeof(studenti); fout.close(); 3.电脑类成员函数定义:Computer:Computer() /构造函数 tag=0; void Computer:setcomnum(int Comnum) /设置电脑
16、号 comnum=Comnum; int Computer:getcomnum() /获取电脑号 return comnum; void Computer:upcom() /上机 tag=1; void Computer:downcom() /下机 tag=0; int Computer:gettag() /获取上机标记 return tag; 4.电脑库类成员函数定义:ComData:ComData() /构造函数 Computer c; ifstream fin(computer.txt); for(int j=0;jMAXC;j+) fin.read(char*)&c,sizeof(c)
17、; computerj=c; fin.close(); for(int i=0;iMAXC;i+) computeri.setcomnum(i+1); Computer* ComData:searchcom() /搜索空闲电脑 for(int i=0;iMAXC;i+) if(computeri.gettag()=0) return &computeri; return NULL; Computer* ComData:searchnum(int Comnum) /按电脑号搜索电脑 for(int i=0;iMAXC;i+) if(computeri.getcomnum()=Comnum) re
18、turn &computeri; return NULL; int ComData:upcom() /上机 Computer *p=searchcom(); if(p=NULL) cout机房已满,不能上机upcom(); return p-getcomnum(); void ComData:disp() /显示 coutendlendl电脑使用情况如下,1为被使用中,0为空闲中!endlendl; for(int i=0;iMAXC;i+) /coutcomputeri.getcomnum(); printf(%4d,computeri.gettag(); if(i+1)%6=0) cout
19、endl; ComData:ComData() /析构函数 ofstream fout(computer.txt); for(int i=0;iMAXC;i+) /if(computeri.gettag()=1) fout.write(char*)&computeri,sizeof(computeri); fout.close(); 四、调试分析1.调试前,界面有些凌乱,选择某项功能后,之前的菜单仍然在界面上;调试时,适当加入了清屏函数,使界面更加简洁清晰。2.调试前,当输入的内容不合法时没有任何提示,导致某些功能出现故障;调试时对输入内容的合法性做出的判断,并给出了相映的提示信息。3.体会:
20、C+语言课程设计和现代计算机技术的实际应用相结合,是我们在本阶段学完理论课程之后对自己该方面的能力的一次很好的检验。从开始的算法思路到运行调试后的美观的图形界面以及另人兴奋的可用程序,都是一个很好的学习和锻炼的过程。使我们巩固了原有的理论知识,培养了我们灵活运用和组合集成所学过知识及技能来分析、解决实际问题的能力。使我们体会到自身知识和能力能在实际中的应用和发挥。这不但激发了我的创新意识,还开发了我的创造能力、培养了我的沟通能力。老师对我们进行了细心、耐心的指导,鼓励我们对程序进行合理改进,培养了我们的创新意识和创新能力。原来是我认为可怕的课程设计,就在种种辅助条件下完成了,心里有说不出的高兴
21、。这是一个发现问题和解决问题的过程,从困惑到明朗,从苦恼道兴奋。我一步步地走过来,发现编程真是一个奇妙刺激的旅程。特别是当我把一个自己认为毫无可能的事情完成自后,那种感觉简直不能用言语来表达。感谢这次课程设计给我带来的全新体验和丰富经验。我会把它换成我以后奋斗的源泉。五、用户手册 本程序的运行环境为DOS操作系统,执行文件为:机房管理系统.exe; 进入演示程序后,即显示对话形式的提示操作过程,选择上机项后,输入上机学生的基本信息;选择下级项后,输入要下机学生的学号即可,系统自动给出上机总时间和费用;选择学生信息查询项后,可按各种信息搜索,选择相应选项即可; 选择电脑使用情况项后,系统便会显示
22、所有电脑的被使用情况。六、测试数据主界面: 上机操作: 下机操作:查询界面: 按姓名查询:按学号查询:按班级查询:电脑呗使用情况:七、附录/ - “Student.h”-#ifndef Student_H_H#define Student_H_Htypedef long time_t;class Studentpublic: Student(); /构造函数 void upcom(char Name20,int Cla,int Stunum,int Comnum); /上机 int downcom(); /下机 void delstu(); /更改上机标记 void setotime(); /
23、获取下机时间 time_t gettime(); /获取当前时间 char* getname(); /获取姓名 int getcla(); /获取班级 int gettag(); /获取上机标记 int getstunum(); /获取学号 int getcomnum(); /获取上机号 double countht(); /计算总上机时间 int countm(); /计算上机费用 void disp(); /显示 void disp2(); /显示private: int tag; char name20; int cla; int stunum; int comnum; time_t s
24、time; time_t otime; double htime; int inthtime; int money;#endif/ -“StuData.h”-#ifndef StuData_H_H#define StuData_H_H#includeStudent.hconst int MAXS=30;class StuDatapublic: StuData(); /构造函数 Student* searchnum(int Stunum); /按学号搜索 Student* searchcla(int Cla); /按班级搜索 void dispbycla(int Cla); /按班级显示 Student* searchname(char *Name); /按姓名搜索 void dispall(); /显示所有学生 void upcom(char Name20,int Cla,int Stunum,int Comnum); /上机 void downcom(int Stunum); /下机 int search(); /机房学生查询 StuData(); /析
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1