1目录一、需求分析..........................................2二、概要设计...........................................2三、详细设计...........................................4四、调试分析..........................................17五、用户手册..........................................17六、测试数据..........................................18七、附录.............................................202一、需求分析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();显示232.学生库类定义: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();获取标记44.电脑库类的定义: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()//下机{5//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()//获取班级{6returncla;}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;}7voidStudent::disp()//显示{cout姓名:name班级:cla学号:stunum上机号comnumendl;cout开始上机时间:asctime(localtime(&stime))上机总时间:countht()/3600.00小时上机费用:countm()元endl;}voidStudent::disp2()//显示{coutendlendl-----上机成功-----endl;cout姓名:nameendl班级:claendl学号:stunumendl开始上机时间:asctime(localtime(&stime))上机号:comnumendl;//cout开始上机时间:stime上机总时间:countht()上机费用:countm()endl;}2.学生库类成员函数定义:StuData::StuData()//构造函数,将student.txt中的内容读到student[]中{Students;top=-1;ifstreamfin(student.txt);while(1){fin.read((char*)&s,sizeof(s));8if(!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++)9if(student[j].getcla()==Cla&&student[j].gettag()==1){student[j].disp();coutendl;}}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();coutendl;}}voidStuData::upcom(charName[20],intCla,intStunum,intComnum)//上机10{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'){coutendlendl--------机房学生查询--------endlendl;cout------1按姓名查询------endl;cout------2按学号查询------endl;cout------3按班级查询------endl;cout------4全部学生信息------endl;11cout------0返回主菜单------endl;cinchoice;switch(choice){case'1':system(cls);cout请输入学生姓名:endl;cinname;s=searchname(name);if(s==NULL){cout机房没有此人endl;break;}s-disp();break;case'2':system(cls);cout请输入学生学号:endl;cinstunum;s=searchnum(stunum);if(s==NULL){cout机房没有此人endl;12break;}s-disp();break;case'3':system(cls);cout请输入班级号:endl;cincla;s=searchcla(cla);if(s==NULL){cout机房没有该班级的人!endl;break;}dispbycla(cla);break;case'4':system(cls);coutendlendl------机房所有上机学生信息如下------endlendl;dispall();break;case'0':return0;13default:cout输入有误,请重新输入:endl;}cout按任意键返回endl;getch();system(cls);}}StuData::~