《C++机房计费管理系统.pdf》由会员分享,可在线阅读,更多相关《C++机房计费管理系统.pdf(33页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、 1 目录 一、需求分析2 二、概要设计2 三、详细设计4 四、调试分析17 五、用户手册17 六、测试数据18 七、附录20 一、需求分析 1.输入功能:输入 30 名学生的学号、班级、姓名、上机起始时间。2.计算功能:计算每个下机学生的上机费用,每小时 1 元。(上机费用=上机时间*1.0/h,不足一小时按一小时计算)3.查询功能:按条件(班级、学号、姓名)显示学生的上机时间.4.机器使用情况的显示(显示方式不限但要一目了然)5.要求:1)源文件采用多文件的工程结构;2)数据存储采用文件形式;3)采用面向对象方法设计;4)功能完善,适当的注释;5)关于文件的内容需要自学;二、概要设计 2
2、1.学生类的定义:Student(学生类)int tag;/删除标记 char name20;学生姓名 int cla;班级 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();设置下机时间 t
3、ime_t gettime();获取当前时间 char getname();获取姓名 int getcla();获取班级号 int gettag();获取标记 int getstunum();获取学号 int getcomnum();获取上机号 double countht();计算上机时间 int countm();计算上机费用 void disp();显示 void disp2();显示 2 2.学生库类定义:StuData(学生库类)int top;学生记录指针 Student studentMAXS;学生记录 StuData();构造函数 Student*searchnum(int S
4、tunum);按学号搜索学生 Student searchcla(int Cla);按班级搜索学生 void dispbycla(int Cla);按班级显示学生 Student searchname(char Name);按姓名显示学生 void dispall();显示所有学生信息 void upcom(char Name20,int 3 Cla,int Stunum,int Comnum);上机操作 void downcom(int Stunum);下机操作 int search();搜索操作 StuData();析构函数 3.电脑类的定义:Computer(电脑类)int tag;删除
5、标记 int comnum;电脑号 Computer();构造函数 void setcomnum(int Comnum);设置电脑号 int getcomnum();获取电脑号 void upcom();上机操作 void downcom();下机操作 int gettag();获取标记 4.电脑库类的定义:ComData(电脑库类)Computer computer30;记录电脑 ComData();构造函数 Computer*searchcom();搜索空闲电脑 Computer searchnum(int Comnum);按电脑号搜索 int upcom();上机操作 void disp
6、();显示 ComData();析构函数 三、详细设计 4 1.学生类成员函数的定义:Student::Student()/构造函数 void Student::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 Stu
7、dent:delstu()/更改上机标记 5 tag=0;void Student:setotime()/获取下机时间 otime=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()/获取学号 6 return stunum;int Studen
8、t:getcomnum()/获取上机号 return comnum;double Student:countht()/计算总上机时间 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(loca
9、ltime(stime)上机总时间:”countht()/3600.00”小时”上机费用:countm()元”endl;void Student:disp2()/显示 7 coutendlendl -上机成功-”endl;cout”姓名:nameendl”班级:cla endl”学号:”stunumendl”开始上机时间:asctime(localtime(stime))”上机号:comnumendl;/cout”开始上机时间:stime ”上机总时间:countht()”上机费用:countm()endl;2.学生库类成员函数定义:StuData::StuData()/构造函数,将 stud
10、ent.txt 中的内容读到 student中 Student s;top=1;ifstream fin(”student。txt”);while(1)fin.read((char*)&s,sizeof(s));if(!fin)break;top+;studenttop=s;fin。close();8 Student StuData:searchnum(int Stunum)/按学号搜索 for(int i=0;i=top;i+)if(studenti。getstunum()=Stunumstudenti。gettag()=1)return studenti;return NULL;Stude
11、nt StuData:searchcla(int Cla)/按班级搜索 for(int i=0;i=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)/按姓名
12、搜索 9 for(int i=0;i=top;i+)if(!strcmp(studenti。getname(),Name)&studenti。gettag()=1)return student i;return NULL;void StuData::dispall()/显示所有学生 for(int i=0;i=top;i+)if(student i.gettag()=1)studenti.setotime();studenti。disp();coutendl;void StuData:upcom(char Name20,int Cla,int Stunum,int Comnum)/上机 top
13、+;student top。upcom(Name,Cla,Stunum,Comnum);void StuData:downcom(int Stunum)/下机 10 Student p;p=searchnum(Stunum);pdowncom();int StuData:search()/机房学生查询 char choice;char name20;int stunum;int cla;Student s;while(choice!=0)coutendlendl-机房学生查询-endlendl;cout”-1 按姓名查询 -”endl;cout-2 按学号查询 -endl;cout-3 按班级
14、查询 -endl;cout”-4 全部学生信息-”endl;cout-0 返回主菜单 -”endl;cinchoice;switch(choice)11 case 1:system(”cls);cout请输入学生姓名:”endl;cinname;s=searchname(name);if(s=NULL)cout机房没有此人”disp();break;case 2:system(”cls);cout”请输入学生学号:endl;cinstunum;s=searchnum(stunum);if(s=NULL)cout机房没有此人disp();break;12 case 3:system(cls);c
15、out”请输入班级号:”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按任意键返回”endl;13 getch();system(cls);StuData:StuData()/析构函数,将 student中数据写到 srudent.txt 中 of
16、stream 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)/设置电脑号 comnum=Comnum;int Computer::getcomnum()/获取电脑号 14 return comnum;void Computer:upcom()/上
17、机 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);computerj=c;15 fin。close();for(int i=0;iMAXC;i+)computeri.setcomnum(i+1);Computer*ComData:sea
18、rchcom()/搜索空闲电脑 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)return computeri;return NULL;int ComData::upcom()/上机 Computer p=searchcom();if(p=NULL)16 cout”机房已满,不能上机getco
19、mnum();void ComData::disp()/显示 coutendlendl电脑使用情况如下,1为被使用中,0为空闲中!”endlendl;for(int i=0;iMAXC;i+)/coutcomputeri.getcomnum();printf(”%4d,computeri.gettag();if(i+1)%6=0)coutendl;ComData:ComData()/析构函数 ofstream fout(computer。txt);for(int i=0;iMAXC;i+)/if(computeri。gettag()=1)fout.write((char*)&computeri
20、,sizeof(computeri));17 fout。close();四、调试分析 1.调试前,界面有些凌乱,选择某项功能后,之前的菜单仍然在界面上;调试时,适当加入了清屏函数,使界面更加简洁清晰。2.调试前,当输入的内容不合法时没有任何提示,导致某些功能出现故障;调试时对输入内容的合法性做出的判断,并给出了相映的提示信息.3.体会:C+语言课程设计和现代计算机技术的实际应用相结合,是我们在本阶段学完理论课程之后对自己该方面的能力的一次很好的检验。从开始的算法思路到运行调试后的美观的图形界面以及另人兴奋的可用程序,都是一个很好的学习和锻炼的过程.使我们巩固了原有的理论知识,培养了我们灵活运用
21、和组合集成所学过知识及技能来分析、解决实际问题的能力。使我们体会到自身知识和能力能在实际中的应用和发挥。这不但激发了我的创新意识,还开发了我的创造能力、培养了我的沟通能力。老师对我们进行了细心、耐心的指导,鼓励我们对程序进行合理改进,培养了我们的创新意识和创新能力。原来是我认为可怕的课程设计,就在种种辅助条件下完成了,心里有说不出的高兴。这是一个发现问题和解决问题的过程,从困惑到明朗,从苦恼道兴奋.我一步步地走过来,发现编程真是一个奇妙刺激的旅程。特别是当我把一个自己认为毫无可能的事情完成自后,那种感觉简直不能用言语来表达。感谢这次课程设计给我带来的全新体验和丰富经验。我会把它换成我以后奋斗的
22、源泉.五、用户手册 本程序的运行环境为 DOS 操作系统,执行文件为:机房管理系统。exe;进入演示程序后,即显示对话形式的提示操作过程,选择上机项后,输入上机学生的基本信息;选择下级项后,输入要下机学生的学号即可,系统自动给出上机总时间和费用;选择学生信息查询项后,可按各种信息搜索,选择相应选项即可;选择电脑使用情况项后,系统便会显示所有电脑的被使用情况。18 六、测试数据 主界面:上机操作:下机操作:查询界面:按姓名查询:19 按学号查询:按班级查询:电脑呗使用情况:20 七、附录/-“Student。h”-#ifndef Student_H_H define Student_H_H ty
23、pedef long time_t;class Student public:Student();/构造函数 void upcom(char Name20,int Cla,int Stunum,int Comnum);/上机 int downcom();/下机 void delstu();/更改上机标记 void setotime();/获取下机时间 time_t gettime();/获取当前时间 char*getname();/获取姓名 int getcla();/获取班级 int gettag();/获取上机标记 int getstunum();/获取学号 int getcomnum()
24、;/获取上机号 double countht();/计算总上机时间 int countm();/计算上机费用 void disp();/显示 void disp2();/显示 private:int tag;char name20;int cla;int stunum;int comnum;time_t stime;time_t otime;21 double htime;int inthtime;int money;;#endif /-“StuData。h”-ifndef StuData_H_H#define StuData_H_H#include”Student。h const int M
25、AXS=30;class StuData public: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 sea
26、rch();/机房学生查询 StuData();/析构函数 private:int top;Student studentMAXS;endif /-“Computer.h”-#ifndef Computer_H_H define Computer_H_H class Computer public:Computer();/构造函数 void setcomnum(int Comnum);/设置电脑号 int getcomnum();/获取电脑号 22 void upcom();/上机 void downcom();/下机 int gettag();/获取上机标记 private:int tag;
27、int comnum;;endif /-“ComData。h”-ifndef ComData_H_H#define ComData_H_H#include”Computer.h const int MAXC=30;class ComData public:ComData();/构造函数 Computer*searchcom();/搜索空闲电脑 Computer*searchnum(int Comnum);/按电脑号搜索电脑 int upcom();/上机 void disp();/显示 ComData();/析构函数 private:Computer computer30;#endif/-“S
28、tudent。cpp”-include”Student。h”#include iostream。h#include#include Student::Student()/构造函数 void Student::upcom(char Name20,int Cla,int Stunum,int Comnum)/上机 strcpy(name,Name);23 tag=1;cla=Cla;stunum=Stunum;comnum=Comnum;stime=gettime();int Student:downcom()/下机 /otime=gettime();setotime();delstu();dis
29、p();return comnum;void Student::delstu()/更改上机标记 tag=0;void Student:setotime()/获取下机时间 otime=gettime();time_t Student::gettime()/获取当前时间 return time(NULL);char Student:getname()/获取姓名 return name;int Student::getcla()/获取班级 return cla;int Student:gettag()/获取上机标记 return tag;24 int Student:getstunum()/获取学号
30、 return stunum;int Student::getcomnum()/获取上机号 return comnum;double Student::countht()/计算总上机时间 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 ”上机号comnume
31、ndl;cout ”开始上机时间:”asctime(localtime(stime))”上机总时间:”countht()/3600.00”小时 ”上机费用:”countm()元”endl;void Student:disp2()/显示 coutendlendl”-上机成功-”endl;cout姓名:”nameendl班级:claendl学号:stunumendl开始上机时间:”asctime(localtime(&stime)”上机号:”comnumendl;/cout 开始上机时间:”stime”上机总时间:”countht()”上机费用:countm()endl;/-“StuData。cp
32、p”-include includeStuData。h 25#includeStudent。h”#includestring。h includefstream.h#includewindows。h includeconio.h StuData:StuData()/构造函数 Student s;top=1;ifstream fin(student。txt);while(1)fin。read(char*)s,sizeof(s));if(!fin)break;top+;studenttop=s;fin。close();Student StuData::searchnum(int Stunum)/按学
33、号搜索 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=top;i+)if(studenti.getcla()=Cla&studenti。gettag()=1)return&studenti;return NULL;void StuData::dispbycla(int Cla)/按班级显示 26 for(int j=0;j=top;j
34、+)if(studentj.getcla()=Cla&studentj。gettag()=1)studentj.disp();coutendl;Student*StuData:searchname(char Name)/按姓名搜索 for(int i=0;i=top;i+)if(!strcmp(studenti。getname(),Name)&studenti.gettag()=1)return studenti;return NULL;void StuData::dispall()/显示所有学生 for(int i=0;idowncom();int StuData::search()/机房学
35、生查询 27 char choice;char name20;int stunum;int cla;Student*s;while(choice!=0)cout endlendl-机房学生查询-endlendl;cout-1 按姓名查询 -”endl;cout”-2 按学号查询 -endl;cout”-3 按班级查询 -”endl;cout-4 全部学生信息-”endl;cout”-0 返回主菜单 -endl;cin choice;switch(choice)case 1:system(”cls”);cout”请输入学生姓名:”name;s=searchname(name);if(s=NULL
36、)cout”机房没有此人endl;break;s-disp();break;case 2:system(”cls);cout请输入学生学号:”stunum;s=searchnum(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”);cout endl endl ”-机房所有上机学生信息如下-”end
37、lendl;dispall();break;case 0:return 0;default:cout”输入有误,请重新输入:endl;cout”按任意键返回endl;getch();system(cls);StuData::StuData()/析构函数 ofstream fout(student。txt);for(int i=0;i=top;i+)if(studenti。gettag()=1)fout。write((char*)studenti,sizeof(studenti));fout.close();/-“Computer。cpp”-include”Computer。h Computer
38、:Computer()/构造函数 tag=0;29 void Computer::setcomnum(int Comnum)/设置电脑号 comnum=Comnum;int Computer:getcomnum()/获取电脑号 return comnum;void Computer::upcom()/上机 tag=1;void Computer:downcom()/下机 tag=0;int Computer::gettag()/获取上机标记 return tag;/-“ComData.cpp”-includeComData.h#includeComputer。h#includefstream。
39、h includeiostream.h include ComData::ComData()/构造函数 Computer c;/*for(int i=0;iMAXC;i+)computeri.setcomnum(i+1);*/ifstream fin(”computer.txt);for(int j=0;jMAXC;j+)fin.read((char)c,sizeof(c));computerj=c;30 fin。close();for(int i=0;iMAXC;i+)computeri。setcomnum(i+1);Computer ComData:searchcom()/搜索空闲电脑 f
40、or(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)return&computeri;return NULL;int ComData::upcom()/上机 Computer p=searchcom();if(p=NULL)cout机房已满,不能上机”endl;return 0;pupcom();re
41、turn p-getcomnum();void ComData:disp()/显示 coutendlendl 电脑使用情况如下,1为被使用中,0为空闲中!endl include conio.h includestring.h#include”Student.h#include”StuData.h”includeComputer。h”#include”ComData。h”int main()char choice;char name20;int stunum;int cla;StuData StudentD;Student s;ComData ComputerD;Computer*c;whil
42、e(choice!=0)coutendlendl-机房计费管理系统-”endl endl;cout”-1 上机 -endl;cout”-2 下机 -”endl;cout”-3 机房学生查询-endl;cout-4 电脑使用情况-”endl;cout”-0 退出 -choice;switch(choice)32 case 1:system(cls);cout”请输入上机人基本信息”endl;cout姓名:name;cout班级:cla;cout 学号:endl;cin stunum;if(strlen(name)=20cla0&cladisp2();else if(s=NULL)cout”由于机
43、房已满,上机不成功!”endl;else cout该学号已被使用中,你确认后重新上机!”endl;else coutendl -上机失败-”endl;cout您输入的个人信息格式有误,请确认后重新上机!”endl;break;case 2:system(cls);cout”请输入需要结账下机的人的学号:stunum;s=StudentD.searchnum(stunum);if(s!=NULL)c=ComputerD.searchnum(s-getcomnum());sdowncom();cdowncom();33 else cout 机房没有此人,请确认后输入正确后再下机!”endl;break;case 3:system(cls”);StudentD.search();break;case 4:system(”cls);/清屏函数 ComputerD.disp();break;case 0:return 1;default:cout 输入有误,请重新输入:”endl;coutendl按任意键返回主菜单 endl;getch();system(cls”);return 0;