C机房计费管理系统_第1页
C机房计费管理系统_第2页
C机房计费管理系统_第3页
已阅读5页,还剩28页未读 继续免费阅读

下载本文档

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

文档简介

1、目录一、需求分析 2二、概要设计 2三、详细设计 4四、调试分析 17五、用户手册 17六、测试数据 18七、附录 20一、需求分析1. 输入功能:输入 30 名学生的学号、班级、姓名、上机起始时间。2. 计算功能:计算每个下机学生的上机费用,每小时1 元。(上机费用 =上机时间1.0/h ,不足一小时按一小时计算)3. 查询功能:按条件(班级、学号、姓名)显示学生的上机时间。4. 机器使用情况的显示(显示方式不限但要一目了然)5. 要求:1)源文件采用多文件的工程结构;2)数据存储采用文件形式;3)采用面向对象方法设计;4)功能完善,适当的注释;5)关于文件的内容需要自学;、概要设计1. 学

2、生类的定义:Stude nt学生类) int tag; 删除标记 char n ame20;学生姓名 in t cla;班级 int stunum;学号 int comnum;上机号 time_t stime;开始上机时间 time_t otime;下机时间 double htime;上机总时间 int mon ey; 上机费用 Stude nt();构造函数 Void upcom(char Name20,int Cla,int Stunum,int Comnum);上 机操作 int downcom();下机操作 void delstu();删除操作 void setotime();设置下机

3、时间 time_t gettime();获取当前时间 char* get name();获取姓名 in t getcla();获取班级号 int gettag(); 获取标记int getst unum();获取学号 int getco mnum();获取上机号 double cou ntht();计算上机时间 int cou ntm();计算上机费用 void disp();显示void disp2();显示 22. 学生库类定义:StuData学生库类) int top;学生记录指针Student studentMAXS;学生记录StuData();构造函数Stude nt* search

4、 nu m(i nt Stunum) 按学号搜索学生Student* searchcla(int Cla);按班 级搜索学生void dispbycla(int Cla);按班级显 示学生Stude nt*search name(char *Name);按姓名显示学生void dispall();显示所有学生信息 void upcom(char Name20,i ntCla,i nt Stunu m,i nt Comnu m);上机 操作void downcom(int Stunum);下机 操作int search();搜索操作StuData();析构函数3. 电脑类的定义:Computed

5、 电脑类)int tag;删除标记int comnum;电脑号 Computer。;构造函数 void setco mnu m(i nt Comnu m); 设置电脑号int getco mnum(); 获取电脑号 void upcom(); 上机操作 void downcom();下机操作 int gettag(); 获取标记4. 电脑库类的定义:int upcom(); 上机操作 void disp(); 显示 ComData();析构函数ComData( 电脑库类)Computer computer30;记录电 脑ComData();构造函数Computer* searchcom();搜

6、索空 闲电脑Computer* search nu m(i ntComnum)按电脑号搜索三、详细设计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();

7、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;int Student:getstunum() / 获取

8、学号 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

9、<<" "<<" 班级: "<<cla<<" "<<" 学号: "<<stunum<<" "<<" 上机号 "<<comnum<<endl;cout<<" 开始上机时间: "<<asctime(localtime(&stime)<<" "<<" 上机总时

10、间:"vvcountht()/3600.00vv" 小时"<<""<<" 上机费用:"<<countm()<<"元"<<endl;void Student:disp2() / 显示cout<<endl<<endl<<" 上机成功 "<<endl;cout«"姓名:"<<name«endl<<"班级:&quo

11、t;<<cla<<endl<<"学号: "<<stunum<<endl<<" 开始上机时间: "<<asctime(localtime(&stime)<<" 上机号: "<<comnum<<endl;/cout<<" 开始上机时间: "<<stime<<" "<<" 上机总时间: "<<co

12、untht()<<" "<<" 上机费用: "<<countm()<<endl;2. 学生库类成员函数定义:StuData:StuData() /构造函数,将 student.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();Student*

13、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<=top;i+)if(studenti.getcla()=Cla&&studenti.gettag()=1) return &studenti;

14、return NULL;void StuData:dispbycla(int Cla) / 按班级显示for(int j=0;j<=top;j+) if(studentj.getcla()=Cla&&studentj.gettag()=1) studentj.disp(); cout<<endl;Student* StuData:searchname(char *Name) /按姓名搜索for(int i=0;i<=top;i+) if(!strcmp(studenti.getname(),Name)&&studenti.gettag()

15、=1) return &studenti;return NULL;void StuData:dispall() / 显示所有学生for(int i=0;i<=top;i+) if(studenti.gettag()=1) studenti.setotime(); studenti.disp();cout<<endl;上机void StuData:upcom(char Name20,int Cla,int Stunum,int Comnum) / top+; studenttop.upcom(Name,Cla,Stunum,Comnum);void StuData:do

16、wncom(int Stunum) / 下机Student *p;p=searchnum(Stunum);p->downcom();int StuData:search() / 机房学生查询 char choice;char name20;int stunum;int cla;Student *s;while(choice!='0')cout<<endl<<endl<<"机房学生查询cout<<"-1按姓名查询"<<endl;cout<<"-2按学号查询&quo

17、t;<<endl;cout<<"-3按班级查询"<<endl;cout<<"-4全部学生信息 "<<endl;cout<<"-0返回主菜单"<<endl;cin>>choice;switch(choice)"<<endl<<endl;case '1':system("cls");cout<<" 请输入学生姓名: "<<endl;

18、cin>>name;s=searchname(name);if(s=NULL)cout<<" 机房没有此人 "<<endl;break;s->disp();break;case '2':system("cls");cout<<" 请输入学生学号: "<<endl;cin>>stunum;s=searchnum(stunum);if(s=NULL)cout<<" 机房没有此人 "<<endl;brea

19、k;s->disp();break;case '3':system("cls");cout<<" 请输入班级号: "<<endl; cin>>cla;s=searchcla(cla);if(s=NULL)cout<<" 机房没有该班级的人! "<<endl;break;dispbycla(cla);break;case '4':system("cls");cout<<endl<<endl<

20、<" 机房所有上机学生信息如下"<<endl<<endl;dispall();break;case '0':return 0;default:cout<<" 输入有误,请重新输入: "<<endl;cout<<" 按任意键返回 "<<endl;getch();system("cls");StuData:StuData() / 析构函数,将 student 中数据写到 srudent.txt 中 ofstream fout(

21、"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() / 获取电脑号return comnum;void Computer:

22、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;j<MAXC;j+)fin.read(char*)&c,sizeof(c);computerj=c;fin.close();for(int i=0;i<MAXC;i+) computeri.se

23、tcomnum(i+1);Computer* ComData:searchcom() / 搜索空闲电脑 for(int i=0;i<MAXC;i+)if(computeri.gettag()=0)return &computeri;return NULL;Computer* ComData:searchnum(int Comnum) / 按电脑号搜索电脑 for(int i=0;i<MAXC;i+) if(computeri.getcomnum()=Comnum)return &computeri;return NULL;int ComData:upcom() /

24、上机Computer *p=searchcom();if(p=NULL)cout<<" 机房已满,不能上机 "<<endl;return 0;p->upcom();return p->getcomnum();void ComData:disp() / 显示cout<<endl<<endl<<" 电脑使用情况如下, '1' 为被使用中, '0' 为空闲中! "<<endl<<endl;for(int i=0;i<MAXC;i

25、+)/cout<<computeri.getcomnum();printf("%4d",computeri.gettag();if(i+1)%6=0)cout<<endl;ComData:ComData() / 析构函数ofstream fout("computer.txt");for(int i=0;i<MAXC;i+)/if(computeri.gettag()=1)fout.write(char*)&computeri,sizeof(computeri);fout.close();四、调试分析1. 调试前,界面

26、有些凌乱,选择某项功能后,之前的菜单仍然在界面上;调试时, 适当加入了清屏函数,使界面更加简洁清晰。2. 调试前,当输入的内容不合法时没有任何提示,导致某些功能出现故障;调试 时对输入内容的合法性做出的判断,并给出了相映的提示信息。3. 体会:C+语言课程设计和现代计算机技术的实际应用相结合,是我们在本阶段学完理论课程之后对自己该方面的能力的一次很好的检验。从开始的算法思路 到运行调试后的美观的图形界面以及另人兴奋的可用程序,都是一个很好的学 习和锻炼的过程。使我们巩固了原有的理论知识,培养了我们灵活运用和组合 集成所学过知识及技能来分析、解决实际问题的能力。使我们体会到自身知识 和能力能在实

27、际中的应用和发挥。这不但激发了我的创新意识,还开发了我的 创造能力、培养了我的沟通能力。老师对我们进行了细心、耐心的指导,鼓励 我们对程序进行合理改进,培养了我们的创新意识和创新能力。原来是我认为 可怕的课程设计,就在种种辅助条件下完成了,心里有说不出的高兴。这是一 个发现问题和解决问题的过程,从困惑到明朗,从苦恼道兴奋。我一步步地走 过来,发现编程真是一个奇妙刺激的旅程。特别是当我把一个自己认为毫无可 能的事情完成自后,那种感觉简直不能用言语来表达。感谢这次课程设计给我 带来的全新体验和丰富经验。我会把它换成我以后奋斗的源泉。五、用户手册1. 本程序的运行环境为DOS操作系统,执行文件为:机

28、房管理系统.exe;2. 进入演示程序后,即显示对话形式的提示操作过程,3. 选择上机项后,输入上机学生的基本信息;4选择下级项后,输入要下机学生的学号即可,系统自动给出上机总时间和费用;5. 选择学生信息查询项后,可按各种信息搜索,选择相应选项即可;6. 选择电脑使用情况项后,系统便会显示所有电脑的被使用情况。六、测试数据主界面:上机操作:1一机房计费管理系统上机成功婚务h«hll班级:102023学号,10202350阡妬上机时间:Sat Feb 25 ti?:S7:45 2012 上机号:1按任意键逆回主菜单下机操作:请输入需要结账下机的人的学号:10202313姓芳;胃涛班级

29、I 102023学号匸10202313上机号G开始上机时间;Hon Feb 20 08 = 08=19 2012£机怎卅间;m 眈小时 上机费用:1眈元按任意键返回主菜单查询界面:卜 机房学生杳询 ;1建甦名篁谊 2 -?癒風- j0返回王菜軍 按姓名查询:Fri Feb 1? 26;24;21 2012按学号查询:卜青输入学生学号;biiIZ 小 U J Ljf雷| 一£机Mail5:他-盼小时 上机费用:丄霊元键诡回按班级查询:班级:1R2023 学号:19202313 上机号8 Mun Feb 20 Se:6S:l? 2012朗刖八班级号;02023班级:102023

30、 学号:11 上机号?二始上机时间;Pi Feb 1? 17:05=41 2012上机总叶可;3亦小时 上机费用* "元ii务 ; CdLoxi_a_o llan9班级;102023学号;22上机号4 -始上机时间;Fri Feb 17 20 = 24 = 21 2012上机总疔亦&0-2&1?小时上机费用,617L艇眸班赛192923許10上机中£毓吕时可:Fri Feb 17 21=21=58 2612时 上机费用:607LE«- huhiLan班级! 102023学号暑5上机号£F始上机时间! FpI Feh 17 Z1;Z4;40

31、 2012 上机总时町5?.Z56?小时上机费用,607tpe电旧 LO-1、-1. Ki机思 上机 翕上 LLrr班级 102023学号3上机号7Fri Feb 17 Z1:Z8:08 20125?A7»?小时 上机费用,昭元上机 翕上-日、级:102023 学号:10202313;lion Feb 20 08 = 08=19 2B12 8-5291&7小时上机费用I 1元电脑呗使用情况:电脑使用情况如下为被使用中,为空闲中!01111111s0000aa0000000000a000S按任意键返回王菜单七、附录/Student.h"#ifndef Stude nt

32、_H_H #defi ne Stude nt_H_H typedef long time_t;class Stude ntpublic:Stude nt();构造函数void upcom(char Name20,i nt Cla,i nt Stunu m,i nt Comnu m);/ 上机int dow ncom();下机void delstu();/更改上机标记void setotime();/获取下机时间time_t gettime();/获取当前时间char* get name();/ 获取姓名in t getcla();/ 获取班级in t gettag();/获取上机标记in t

33、getstu nu m();获取学号in t getcom num();获取上机号double cou ntht();/计算总上机时间int coun tm();/计算上机费用void disp();/ 显示void disp2();显示private:int tag;char n ame20;int cla;int stunum;int comnum; time_t stime; time_t otime; double htime;int inthtime;int money;#endif/ “StuData.h”#ifndef StuData_H_H#define StuData_H_H

34、#include"Student.h"const 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 Co

35、mnum);void downcom(int Stunum); / 下机int search(); /机房学生查询StuData(); / 析构函数private:int top;Student studentMAXS;#endif/ “Computer.h”#ifndef Computer_H_H#define Computer_H_Hclass Computerpublic:Computer(); / 构造函数void setcomnum(int Comnum); /设置电脑号int getcomnum();/获取电脑号void upcom();/ 上机void downcom(); /下

36、机int gettag(); / 获取上机标记private:int tag;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(); / 显

37、示ComData(); / 析构函数private:Computer computer30;#endif/ “Student.cpp”#include "Student.h"#include <iostream.h>#include <string.h>#include <time.h>#include <windows.h>Student:Student() /构造函数/上机void Student:upcom(char Name20,int Cla,int Stunum,int Comnum) strcpy(name,Na

38、me);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=gettime();time_t Student:gettime() / 获取当前时间return time(NULL);char* Student:getn

39、ame() / 获取姓名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() / 计算总上机时间return difftime(otime,stime);int Student:countm()/ 计算上机费用if(int)countht()%3600

40、=0)return (int)countht()/3600;return (int)countht()/3600)+1;void Student:disp() /显示cout<<"姓名:"<<name<<""<<"班级:"<<cla<<""<<"学号:"<<stunum<<""<<"上机号"<<comnum<<en

41、dl;cout<<" 开 始 上 机 时 间 : "<<asctime(localtime(&stime)<<" "<<" 上 机 总 时 间 : "<<countht()/3600.00<<"小时"<<""<<"上机费用:"<<countm()<<"元"<<endl;void Student:disp2() /显示c

42、out<<endl<<endl<<" 上机成功 "<<endl;cout<<" 姓名: "<<name<<endl<<" 班级: "<<cla<<endl<<" 学号: "<<stunum<<endl<<" 开始上 机时间: "<<asctime(localtime(&stime)<<"

43、上机号: "<<comnum<<endl;/cout<<" 开始上机时间: "<<stime<<""<<" 上机总时间: "<<countht()<<""<<" 上机费用:"<<countm()<<endl;/ “StuData.cpp”#include<iostream.h>#include"StuData.h"#incl

44、ude"Student.h"#include<string.h>#include<fstream.h>#include<windows.h>#include<conio.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* StuDa

45、ta: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<=top;i+) if(studenti.getcla()=Cla&&studenti.gettag()=1) return &studenti;retu

46、rn NULL;void StuData:dispbycla(int Cla) /按班级显示for(int j=0;j<=top;j+) if(studentj.getcla()=Cla&&studentj.gettag()=1) studentj.disp();cout<<endl;Student* StuData:searchname(char *Name) / 按姓名搜索for(int i=0;i<=top;i+) if(!strcmp(studenti.getname(),Name)&&studenti.gettag()=1) r

47、eturn &studenti;return NULL;void StuData:dispall()/显示所有学生for(int i=0;i<=top;i+)if(studenti.gettag()=1) studenti.setotime(); studenti.disp(); cout<<endl;/上机void StuData:upcom(char Name20,int Cla,int Stunum,int Comnum)top+; studenttop.upcom(Name,Cla,Stunum,Comnum);void StuData:downcom(int

48、 Stunum) / 下机Student *p; p=searchnum(Stunum); p->downcom();int StuData:search()/ 机房学生查询char choice;char name20;int stunum;int cla;Student *s;while(choice!='0')cout<<endl<<endl<<" 机房学生查询 "<<endl<<endl;cout<<"1按姓名查询 "<<endl;cout&

49、lt;<"2按学号查询 "<<endl;cout<<"3按班级查询 "<<endl;cout<<"4全部学生信息 "<<endl;cout<<"0返回主菜单 "<<endl;cin>>choice;switch(choice)case '1':system("cls");cout<<" 请输入学生姓名: "<<endl; cin>

50、>name;s=searchname(name);if(s=NULL)cout<<" 机房没有此人 "<<endl; break;s->disp();break;case '2':system("cls");cout<<" 请输入学生学号: "<<endl;cin>>stunum;s=searchnum(stunum);if(s=NULL)cout<<" 机房没有此人 "<<endl;break; s-&

51、gt;disp(); break;case '3':system("cls");cout<<" 请输入班级号: "<<endl;cin>>cla;s=searchcla(cla);if(s=NULL)"<<endl;cout<<" 机房没有该班级的人!break; dispbycla(cla); break;case '4':system("cls");"<<endl<<endl;cout&

52、lt;<endl<<endl<<" 机房所有上机学生信息如下dispall();break;case '0':return 0;default: cout<<" 输入有误,请重新输入: "<<endl;cout<<" 按任意键返回 "<<endl;getch(); system("cls");StuData:StuData() / 析构函数ofstream fout("student.txt");for(int

53、i=0;i<=top;i+)if(studenti.gettag()=1) fout.write(char*)&studenti,sizeof(studenti); fout.close();/ “Computer.cpp”#include"Computer.h"Computer:Computer()/构造函数tag=0;void Computer:setcomnum(int Comnum)/ 设置电脑号 comnum=Comnum;int Computer:getcomnum()/获取电脑号return comnum;void Computer:upcom(

54、) /上机tag=1;void Computer:downcom() / 下机tag=0;int Computer:gettag() / 获取上机标记return tag;/ “ComData.cpp ”#include"ComData.h"#include"Computer.h"#include<fstream.h>#include<iostream.h>#include<stdio.h>ComData:ComData() / 构造函数Computer c;/*for(int i=0;i<MAXC;i+)com

55、puteri.setcomnum(i+1);*/ifstream fin("computer.txt");for(int j=0;j<MAXC;j+)fin.read(char*)&c,sizeof(c);computerj=c;fin.close();for(int i=0;i<MAXC;i+)computeri.setcomnum(i+1);Computer* ComData:searchcom()/ 搜索空闲电脑for(int i=0;i<MAXC;i+) if(computeri.gettag()=0) return &comput

56、eri;return NULL;Computer* ComData:searchnum(int Comnum) / 按电脑号搜索电脑for(int i=0;i<MAXC;i+) if(computeri.getcomnum()=Comnum) return &computeri;return NULL;int ComData:upcom()/上机Computer *p=searchcom();if(p=NULL)cout<<" 机房已满,不能上机 "<<endl; return 0; p->upcom(); return p-&g

57、t;getcomnum();void ComData:disp() /显示"<<endl<<endl;cout<<endl<<endl<<" 电脑使用情况如下, '1'为被使用中, '0'为空闲中! for(int i=0;i<MAXC;i+) /cout<<computeri.getcomnum(); printf("%4d",computeri.gettag(); if(i+1)%6=0) cout<<endl;ComData:C

58、omData()/析构函数ofstream fout("computer.txt");for(int i=0;i<MAXC;i+)/if(computeri.gettag()=1)fout.write(char*)&computeri,sizeof(computeri); fout.close();/ “main.cpp ”#include<iostream.h>#include <stdlib.h>#include <conio.h>#include<string.h>#include"Student.h"#include"StuData.h"#include"Computer.h"#inclu

温馨提示

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

评论

0/150

提交评论