C++机房计费管理系统.docx
《C++机房计费管理系统.docx》由会员分享,可在线阅读,更多相关《C++机房计费管理系统.docx(41页珍藏版)》请在冰豆网上搜索。
C++机房计费管理系统
一、需求分析
1.输入功能:
输入30名学生的学号、班级、姓名、上机起始时间。
2.计算功能:
计算每个下机学生的上机费用,每小时1元。
(上机费用=上机时间*1.0/h,不足一小时按一小时计算)
3.查询功能:
按条件(班级、学号、姓名)显示学生的上机时间。
4.机器使用情况的显示(显示方式不限但要一目了然)
5.要求:
1)源文件采用多文件的工程结构;
2)数据存储采用文件形式;
3)采用面向对象方法设计;
4)功能完善,适当的注释;
5)关于文件的内容需要自学;
二、概要设计
1.学生类的定义:
Student(学生类)
inttag;//删除标记
charname[20];学生姓名
intcla;班级
intstunum;学号
intcomnum;上机号
time_tstime;开始上机时间
time_totime;下机时间
doublehtime;上机总时间
intmoney;上机费用
Student();构造函数
Voidupcom(charName[20],intCla,intStunum,intComnum);上机操作
intdowncom();下机操作
voiddelstu();删除操作
voidsetotime();设置下机时间
time_tgettime();获取当前时间
char*getname();获取姓名
intgetcla();获取班级号
intgettag();获取标记
intgetstunum();获取学号
intgetcomnum();获取上机号
doublecountht();计算上机时间
intcountm();计算上机费用
voiddisp();显示
voiddisp2();显示2
2.学生库类定义:
StuData(学生库类)
inttop;学生记录指针
Studentstudent[MAXS];学生记录
StuData();构造函数
Student*searchnum(intStunum);按学号搜索学生
Student*searchcla(intCla);按班级搜索学生
voiddispbycla(intCla);按班级显示学生
Student*searchname(char*Name);按姓名显示学生
voiddispall();显示所有学生信息
voidupcom(charName[20],intCla,intStunum,intComnum);上机操作
voiddowncom(intStunum);下机操作
intsearch();搜索操作
~StuData();析构函数
3.电脑类的定义:
Computer(电脑类)
inttag;删除标记
intcomnum;电脑号
Computer();构造函数
voidsetcomnum(intComnum);设置电脑号
intgetcomnum();获取电脑号
voidupcom();上机操作
voiddowncom();下机操作
intgettag();获取标记
4.电脑库类的定义:
ComData(电脑库类)
Computercomputer[30];记录电脑
ComData();构造函数
Computer*searchcom();搜索空闲电脑
Computer*searchnum(intComnum);按电脑号搜索
intupcom();上机操作
voiddisp();显示
~ComData();析构函数
三、详细设计
1.学生类成员函数的定义:
Student:
:
Student()//构造函数
{}
voidStudent:
:
upcom(charName[20],intCla,intStunum,intComnum)//上机
{
strcpy(name,Name);
tag=1;
cla=Cla;
stunum=Stunum;
comnum=Comnum;
stime=gettime();
}
intStudent:
:
downcom()//下机
{
//otime=gettime();
setotime();
delstu();
disp();
returncomnum;
}
voidStudent:
:
delstu()//更改上机标记
{
tag=0;
}
voidStudent:
:
setotime()//获取下机时间
{
otime=gettime();
}
time_tStudent:
:
gettime()//获取当前时间
{
returntime(NULL);
}
char*Student:
:
getname()//获取姓名
{
returnname;
}
intStudent:
:
getcla()//获取班级
{
returncla;
}
intStudent:
:
gettag()//获取上机标记
{
returntag;
}
intStudent:
:
getstunum()//获取学号
{
returnstunum;
}
intStudent:
:
getcomnum()//获取上机号
{
returncomnum;
}
doubleStudent:
:
countht()//计算总上机时间
{
returndifftime(otime,stime);
}
intStudent:
:
countm()//计算上机费用
{
if(((int)countht())%3600==0)
return((int)countht())/3600;
return((int)countht()/3600)+1;
}
voidStudent:
:
disp()//显示
{
cout<<"姓名:
"<"<"<cout<<"开始上机时间:
"<"<"<}
voidStudent:
:
disp2()//显示
{
cout<cout<<"姓名:
"<"<"<"<"<//cout<<"开始上机时间:
"<"<"<}
2.学生库类成员函数定义:
StuData:
:
StuData()//构造函数,将student.txt中的内容读到student[]中
{
Students;
top=-1;
ifstreamfin("student.txt");
while
(1)
{
fin.read((char*)&s,sizeof(s));
if(!
fin)
break;
top++;
student[top]=s;
}
fin.close();
}
Student*StuData:
:
searchnum(intStunum)//按学号搜索
{
for(inti=0;i<=top;i++)
if(student[i].getstunum()==Stunum&&student[i].gettag()==1)
{return&student[i];}
returnNULL;
}
Student*StuData:
:
searchcla(intCla)//按班级搜索
{
for(inti=0;i<=top;i++)
if(student[i].getcla()==Cla&&student[i].gettag()==1)
{return&student[i];}
returnNULL;
}
voidStuData:
:
dispbycla(intCla)//按班级显示
{
for(intj=0;j<=top;j++)
if(student[j].getcla()==Cla&&student[j].gettag()==1)
{
student[j].disp();
cout<}
}
Student*StuData:
:
searchname(char*Name)//按姓名搜索
{
for(inti=0;i<=top;i++)
if(!
strcmp(student[i].getname(),Name)&&student[i].gettag()==1)
{return&student[i];}
returnNULL;
}
voidStuData:
:
dispall()//显示所有学生
{
for(inti=0;i<=top;i++)
if(student[i].gettag()==1)
{
student[i].setotime();
student[i].disp();
cout<}
}
voidStuData:
:
upcom(charName[20],intCla,intStunum,intComnum)//上机
{
top++;
student[top].upcom(Name,Cla,Stunum,Comnum);
}
voidStuData:
:
downcom(intStunum)//下机
{
Student*p;
p=searchnum(Stunum);
p->downcom();
}
intStuData:
:
search()//机房学生查询
{
charchoice;
charname[20];
intstunum;
intcla;
Student*s;
while(choice!
='0')
{
cout<cout<<"------1按姓名查询------"<cout<<"------2按学号查询------"<cout<<"------3按班级查询------"<cout<<"------4全部学生信息------"<cout<<"------0返回主菜单------"<cin>>choice;
switch(choice)
{
case'1':
system("cls");
cout<<"请输入学生姓名:
"<cin>>name;
s=searchname(name);
if(s==NULL)
{
cout<<"机房没有此人"<break;
}
s->disp();
break;
case'2':
system("cls");
cout<<"请输入学生学号:
"<cin>>stunum;
s=searchnum(stunum);
if(s==NULL)
{
cout<<"机房没有此人"<break;
}
s->disp();
break;
case'3':
system("cls");
cout<<"请输入班级号:
"<cin>>cla;
s=searchcla(cla);
if(s==NULL)
{
cout<<"机房没有该班级的人!
"<break;
}
dispbycla(cla);
break;
case'4':
system("cls");
cout<dispall();
break;
case'0':
return0;
default:
cout<<"输入有误,请重新输入:
"<}
cout<<"按任意键返回"<getch();
system("cls");
}
}
StuData:
:
~StuData()//析构函数,将student[]中数据写到srudent.txt中
{
ofstreamfout("student.txt");
for(inti=0;i<=top;i++)
if(student[i].gettag()==1)
fout.write((char*)&student[i],sizeof(student[i]));
fout.close();
}
3.电脑类成员函数定义:
Computer:
:
Computer()//构造函数
{
tag=0;
}
voidComputer:
:
setcomnum(intComnum)//设置电脑号
{
comnum=Comnum;
}
intComputer:
:
getcomnum()//获取电脑号
{
returncomnum;
}
voidComputer:
:
upcom()//上机
{
tag=1;
}
voidComputer:
:
downcom()//下机
{
tag=0;
}
intComputer:
:
gettag()//获取上机标记
{
returntag;
}
4.电脑库类成员函数定义:
ComData:
:
ComData()//构造函数
{
Computerc;
ifstreamfin("computer.txt");
for(intj=0;j{
fin.read((char*)&c,sizeof(c));
computer[j]=c;
}
fin.close();
for(inti=0;i{computer[i].setcomnum(i+1);}
}
Computer*ComData:
:
searchcom()//搜索空闲电脑
{
for(inti=0;iif(computer[i].gettag()==0)
return&computer[i];
returnNULL;
}
Computer*ComData:
:
searchnum(intComnum)//按电脑号搜索电脑
{
for(inti=0;iif(computer[i].getcomnum()==Comnum)
return&computer[i];
returnNULL;
}
intComData:
:
upcom()//上机
{
Computer*p=searchcom();
if(p==NULL)
{
cout<<"机房已满,不能上机"<return0;
}
p->upcom();
returnp->getcomnum();
}
voidComData:
:
disp()//显示
{
cout<"<for(inti=0;i{
//cout<printf("%4d",computer[i].gettag());
if((i+1)%6==0)
cout<}
}
ComData:
:
~ComData()//析构函数
{
ofstreamfout("computer.txt");
for(inti=0;i//if(computer[i].gettag()==1)
fout.write((char*)&computer[i],sizeof(computer[i]));
fout.close();
}
四、调试分析
1.调试前,界面有些凌乱,选择某项功能后,之前的菜单仍然在界面上;调试时,适当加入了清屏函数,使界面更加简洁清晰。
2.调试前,当输入的内容不合法时没有任何提示,导致某些功能出现故障;调试时对输入内容的合法性做出的判断,并给出了相映的提示信息。
3.体会:
C++语言课程设计和现代计算机技术的实际应用相结合,是我们在本阶段学完理论课程之后对自己该方面的能力的一次很好的检验。
从开始的算法思路到运行调试后的美观的图形界面以及另人兴奋的可用程序,都是一个很好的学习和锻炼的过程。
使我们巩固了原有的理论知识,培养了我们灵活运用和组合集成所学过知识及技能来分析、解决实际问题的能力。
使我们体会到自身知识和能力能在实际中的应用和发挥。
这不但激发了我的创新意识,还开发了我的创造能力、培养了我的沟通能力。
老师对我们进行了细心、耐心的指导,鼓励我们对程序进行合理改进,培养了我们的创新意识和创新能力。
原来是我认为可怕的课程设计,就在种种辅助条件下完成了,心里有说不出的高兴。
这是一个发现问题和解决问题的过程,从困惑到明朗,从苦恼道兴奋。
我一步步地走过来,发现编程真是一个奇妙刺激的旅程。
特别是当我把一个自己认为毫无可能的事情完成自后,那种感觉简直不能用言语来表达。
感谢这次课程设计给我带来的全新体验和丰富经验。
我会把它换成我以后奋斗的源泉。
五、用户手册
⒈本程序的运行环境为DOS操作系统,执行文件为:
机房管理系统.exe;
⒉进入演示程序后,即显示对话形式的提示操作过程,
⒊选择上机项后,输入上机学生的基本信息;
⒋选择下级项后,输入要下机学生的学号即可,系统自动给出上机总时间和费用;
⒌选择学生信息查询项后,可按各种信息搜索,选择相应选项即可;
⒍选择电脑使用情况项后,系统便会显示所有电脑的被使用情况。
六、测试数据
主界面:
上机操作:
下机操作:
查询界面:
按姓名查询:
按学号查询:
按班级查询:
电脑呗使用情况:
七、附录
//-----------------------------------------------“Student.h”--------------------------------------------
#ifndefStudent_H_H
#defineStudent_H_H
typedeflongtime_t;
classStudent{
public:
Student();//构造函数
voidupcom(charName[20],intCla,intStunum,intComnum);//上机
intdowncom();//下机
voiddelstu();//更改上机标记
voidsetotime();//获取下机时间
time_tgettime();//获取当前时间
char*getname();//获取姓名
intgetcla();//获取班级
intgettag();//获取上机标记
intgetstunum();//获取学号
intgetcomnum();//获取上机号
doublecountht();//计算总上机时间
intcountm();//计算上机费用
voiddisp();//显示
voiddisp2();//显示
private:
inttag;
charname[20];
intcla;
intstunum;
intcomnum;
time_tstime;
time_totime;
doublehtime;
intinthtime;
intmoney;
};
#endif
//--------------------------------------------“StuData.h”----------------------------------------------------
#ifndefStuData_H_H
#defineStuData_H_H
#include"Student.h"
constintMAXS=30;
classStuData{
public:
StuData();//构造函数
Student*searchnum(intStunum);//按学号搜索
Student*searchcla(intCla);//按班级搜索
voiddispbycla(intCla);//按班级显示
Student*searchname(char*Name);//按姓名搜索
voiddispall();//显示所有学生
voidupcom(charName[20],intCla,intStunum,intComnum);//上机
voiddowncom(intStunum);//下机
intsearch();//机