编号:06第1页/共25页河北工业大学计算机软件技术基础(VC)2012年课程设计报告学院-------班级---------姓名--------学号--------成绩____一、题目:设计一个机房收费管理系统二、设计思路1、总体设计1)分析程序的功能能录入学生的相关信息(姓名,班级,学号等);录入学生上机情况(上机起始时间);进行学生下机操作,录入学生下机时间,计算出学生所用时长以及所需费用;查询功能:查找特定的学生上机情况;显示机房机器使用情况。2)系统总体结构:系统功能总共六个步骤:模块函数名称显示主菜单及进行各功能操作main输入学生信息input输入学生上机信息online学生下机及时长费用信息显示offline查找学生信息search显示机房机器使用情况show定义结构体structtime,structstudent,structcomputer2.各模块功能,函数说明1)input模块该函数返回输入功能,所以返回值为整数类型。输入功能采用do…while语句,通过输入“y”“n”来判断是否继续输入学生信息。通过提示信息,分别输入学生信息。代码参见input函数。2)online模块该函数没有返回值。先定义一个上机学生,用do…while语句选择用姓名还是编号:06第2页/共25页学号上机,用for语句通过姓名或学号信息判断该生是否与所存信息是否相符,若相符跳出操作,如果电脑未存在全部占用状态则进行录入上机起始时间的操作并将学生信息赋给该电脑所使用者的信息,标记电脑使用状态1;若不符,则显示没有该学生;若学生标记为上机状态1,则显示该生正在上机。代码参见online函数。3)calculate模块该函数为无返回值的函数。先定义一个时间间隔变量timel,用if语句判断起止时间的关系计算出上机所用的时间和所用的费用。代码参见calculate函数。4)offline模块该函数是无返回值的函数。步骤及方法与online函数相似,所以在此不再介绍。在该函数的末尾输入学生下机时间,调用calculate函数,计算所用时间和所用费用,并输出。代码参见offline函数。5)search模块该函数通过do...while实现让学生使用姓名或学号查找信息。用strcmp语句判断所输信息是否与所存储的信息相符,若相符且该学生标记为上机则显示学生相关信息;否则显示没有要查找的学生或该学生未上机。代码参见search函数。6)show模块该函数没有返回值。通过if和for语句实现显示机器所使用情况。代码参见show函数。7)main主函数函数先通过do...while实现循环出现主菜单提示信息。再利用switch语句实现各功能,即分别调用各函数进行相关过程。3、设计中的主要困难及解决方案有时不能循环出现提示信息,录入信息时有时不对。仔细查找出现错误的语句,考虑各环节的限制条件,修改一下就成功了。4、你所设计的程序最终完成的功能,准备的测试数据及运行结果(1)主菜单显示编号:06第3页/共25页(2)输入3个同学信息(3)使用姓名或学号为这3个同学上机编号:06第4页/共25页(4)学生下机显示费用及时长(5)搜索zhangsan同学编号:06第5页/共25页(6)显示机器使用情况(7)退出系统编号:06第6页/共25页三、程序清单1)main函数//主函数inti;intinput(studentstu[],intn);voidonline(studentstu[],intn);voidoffline(studentstu[],intn);voidcalculate(studentstu[]);voidsearch(studentstu[],intn);voidshow();voidmain(){intn=30,x;for(intj=0;j30;j++)comp[j].f=0;do//主菜单循环出现编号:06第7页/共25页{cout******机房收费管理系统******\n;//主菜单显示内容cout请选择服务(0-5)\n;cout(1)输入学生信息\n;cout(2)学生上机\n;cout(3)学生下机\n;cout(4)查询学生上机情况\n;cout(5)显示机器使用情况\n;cout(0)退出系统\n;cinx;switch(x)//switch语句实现各功能的分别控制{case1:cout※※输入学生信息※※\n;input(stu,n);break;//调用input函数输入学生信息case2:cout※※学生上机※※\n;online(stu,n);break;//调用online函数输入学生上机信息case3:cout※※学生下机※※\n;offline(stu,n);break;//调用offline函数输入学生下机信息case4:cout※※查询学生上机情况※※\n;search(stu,n);break;//调用search函数查询学生信息case5:cout※※显示机器使用情况※※\n;show();break;//调用show函数显示机器使用情况case0:cout退出系统\n;cout※※感谢您的使用,欢迎下次再来!※※\n;break;default:cout请重试\n;}}while(x!=0);}2)input函数编号:06第8页/共25页intinput(studentstu[],intn)//输入学生信息函数{charm;i=0;do//循环输入学生相关信息{cout学号:;cinstu[i].num;cout班级:;cinstu[i].banji;cout姓名:;cinstu[i].name;cout★★★是否继续输入?是请按y,否请按n:★★★\n;cinm;stu[i].flag=0;//因为学生没有上机,标记学生为0i++;}while(m!='n');returni;}3)online函数voidonline(studentstu[],intn)//输入学生上机信息函数{charnums[10],names[20];//定义一个要上机的学生ints,j;do{cout★★★使用姓名登录请按1,使用学号登录请按2★★★\n;cins;编号:06第9页/共25页}while(s!=1&&s!=2);if(s==1){cout★★请输入姓名:;cinnames;for(i=0;in;i++)if(strcmp(stu[i].name,names)==0)//比较上机学生的信息与先前已存学生的信息是否相符break;}else{cout★★请输入学号:;cinnums;for(i=0;in;i++)if(strcmp(stu[i].num,nums)==0)//比较上机学生的信息与先前已存学生的信息是否相符break;}if(i==n)//当没有该学生信息时cout☆☆☆这里没有此生的相关信息,请核对后再输入!☆☆☆\n;elseif(stu[i].flag==1)//当学生已标记为上机状态时{cout☆☆☆该生正在上机!☆☆☆\n;}else{for(j=0;j30;j++)if(comp[j].f==0)//存在没有被使用的电脑时,录入学生信息编号:06第10页/共25页{comp[j].stus=stu[i];//将该学生的信息赋给电脑comp[j].f=1;cout★★请输入上机起始时间:;cinstu[i].start.hourstu[i].start.minutestu[i].start.second;stu[i].flag=1;//此时学生已上机,标记学生为1comp[j].stus=stu[i];break;}if(j==30)//当30台电脑都被使用时cout☆☆☆机器全部在使用中,请稍后!☆☆☆\n;}}4)calculate函数voidcalculate(studentstu[])//计算上机时间以及上机费用的函数{intt,b;//定义所用时间和所用费用structtimetimel;//定义一个时间间隔if(stu[i].finish.secondstu[i].start.second)//判断起止时间的关系{if(stu[i].finish.minute==0){stu[i].finish.hour-=1;//得出下机时间stu[i].finish.minute=59;}elsestu[i].finish.minute-=1;timel.second=stu[i].finish.second+60-stu[1].start.second;编号:06第11页/共25页}elsetimel.second=stu[i].finish.second-stu[i].start.second;if(stu[i].finish.minutestu[i].start.minute){stu[i].finish.hour-=1;//得出下机时间timel.minute=stu[i].finish.minute+60-stu[i].start.minute;}elsetimel.minute=stu[i].finish.minute-stu[i].start.minute;timel.hour=stu[i].finish.hour-stu[i].start.hour;//得出下机时间if(timel.second==0&&timel.minute==0)t=timel.hour;elset=timel.hour+1;b=1*t;cout■■■该生上机用时t小时,费用为b元。■■■\n;}5)offline函数voidoffline(studentstu[],intn)//定义学生下机函数{charnums[10],names[20];ints,j;do{cout★★★使用姓名下机请按1,使用学号下机请按2★★★\n;cins;}while(s!=1&&s!=2);if(s==1)编号:06第12页/共25页{cout★★请输入姓名:;cinnames;for(i=0;in;i++)//判断所输入的学生信息是否与储存的学生信息一致if(strcmp(stu[i].name,names)==0)break;}else{cout★★请输入学号:;cinnums;for(i=0;in;i++)if(strcmp(stu[i].num,nums)==0)//判断所输入的学生信息是否与储存的学生信息一致break;}if(i==n)//当没有该学生信息时{cout☆☆☆这里没有该学生的相关信息,请重试!☆☆☆\n;}elseif(stu[i].flag==0)//当学生已标记为下机状态时{cout☆☆☆该生未上机!☆☆☆\n;}else{cout★★请输入下机时间:;cinstu[i].finish.hourstu[i].finish.minutestu[i].finish.second;}编号:06第13页/共25页calculate(stu);//调用calculate函数计算所用时间和所用费用stu[i].flag=0;//标记学生为下机状态for(j=0;j30;j++)if(strcmp(comp[j].stus.name,stu[i].name)==0)//本机学生信息与下机学生信息一致时{comp[j].f=0;//标记电脑为未使用break;}}6)search函数voidsearch(studentstu[],intn)//定义查询函数{charnums[10],names[20];ints;do{cout★★★使用姓名查找请按1,使用学号查找请按2★★★\n;cins;}while(s!=1&&s!=2);i