C++机房收费系统文档.docx
《C++机房收费系统文档.docx》由会员分享,可在线阅读,更多相关《C++机房收费系统文档.docx(14页珍藏版)》请在冰豆网上搜索。
C++机房收费系统文档
辽宁工程技术大学
《C语言课程设计》报告
题目:
专业年级:
学号:
姓名:
指导教师:
2015年7月
[问题定义]
选定的题目内容:
选题十二:
机房收费管理系统
(1)输入功能:
输入若干名学生的学号、班级、姓名、开始上机时间和结束上机时间。
(2)计算功能:
计算每个学生的上机费用(计算公式:
上机费用=(结束上机时间-开始上机时间)*收费标准,(以分钟为单位))
(3)修改功能:
修改学生上机的个人档案(如:
增添)
(4)查询功能:
按条件(班级、学号、姓名)查询学生上机信息,并能显示查询学生的相应全部档案。
实际完成的软件功能:
(1)输入功能:
输入若干名学生的学号、班级、姓名、开始上机时间和结束上机时间。
(2)计算功能:
计算每个学生的上机费用(计算公式:
上机费用=(结束上机时间-开始上机时间)*收费标准,(以分钟为单位))
(3)修改功能:
修改学生上机的个人档案(如:
增添)
(4)查询功能:
按条件(班级、学号、姓名)查询学生上机信息,并能显示查询学生的相应全部档案
(5)显示功能:
显示全部机器的使用信息
[开发工具]
[数据结构]
//
(1)输入功能:
输入若干名学生的学号、班级、姓名、开始上机时间和结束上机时间。
//
(2)计算功能:
计算每个学生的上机费用(计算公式:
上机费用=(结束上机时间-开始上机时间)*收费标准,(以分钟为单位))
//(3)修改功能:
修改学生上机的个人档案(如:
增添)
//(4)查询功能:
按条件(班级、学号、姓名)查询学生上机信息,并能显示查询学生的相应全部档案。
#include<>
#include<>
#include<>
#include<>
structtime------------------------------------/*时间*/
{inthour;
intminute;
intsecond;};
typedefstruct-----------------------------/*学生信息*/
{charnum[20];-------------------------------/*学号*/
charbanji;-------------------------------/*班级*/
intflag;--------------------/*用来标注学生是否上机*/
charname[20];-------------------------------/*姓名*/
structtimekaishi,jiesu;-------------/*上机起始时间*/
}Student;
Studentstu[50];--------------------------/*信息库*/
structcomputer---------------------------/*机器信息*/
{intf;------------------/*用来标注这台机器是否使用*/
Studentstut;-----------------/*使用这台机器的学生*/
}com[30];--------------------------/*30台机器*/
intk;
intmain_menu()-----------------------------/*主菜单*/
{charc;
do
{system("cls");-----------------------/*清屏*/
printf("\t╭━━━机房收费管理系统━━━╮\n");
printf("\t┃1.输入学生信息┃\n");
printf("\t┃2.上机时间┃\n");
printf("\t┃3.下机时间┃\n");
printf("\t┃4.查询上机时间及费用┃\n");
printf("\t┃5.电脑使用情况显示┃\n");
printf("\t┃0.退出系统┃\n");
printf("\t╰━━━━━━━━━━━━━━╯\n");
printf("\t请选择菜单序号(0-5):
");
c=getchar();
}while(c<'0'||c>'5');-----------/*判断输入是否合法*/
return(c-'0');}
intinput(Studentstu[],intn)---------/*输入学生信息*/
{inti=0;
charsign='0';
while(sign!
='n'&&sign!
='N')-----/*判断是否继续输入学生信息*/
{getchar();-----------------------/*吃掉回车*/
printf("\n\t\t学号:
");
gets(stu[n+i].num);
printf("\t\t班级:
");
scanf("%s",&stu[n+i].banji);
getchar();
printf("\t\t姓名:
");
gets(stu[n+i].name);
printf("\t\t继续输入?
是请按Y,否请按N:
");
scanf("%c",&sign);
stu[n+i].flag=0;---------------/*初始化为未上机*/
i++;
}
return(n+i);
}
voidshangji(Studentstu[],intn)-------------/*上机*/
{charnum_t[20],name_t[20];
inti,s;
do
{printf("\n\t\t使用姓名输入1\n\t\t使用学号输入2\n\t\t请输入序号:
");
scanf("%d",&s);
}while(s!
=1&&s!
=2);
getchar();
if(s==1)
{printf("\t\t请输入姓名:
");
gets(name_t);
for(i=0;iif(strcmp(stu[i].name,name_t)==0)
break;}
else
{printf("\t\t请输入学号:
");
gets(num_t);
for(i=0;i{if(strcmp(stu[i].num,num_t)==0)
break;}
}
if(i==n)
{printf("\t\t无该生记录!
请输入该生信息后再上机!
\n");
return;}
elseif(stu[i].flag==1)
{printf("\t\t该生正在上机!
\n");
return;}
else
{for(k=0;k<30;k++)
{if(com[k].f==0)
{com[k].f=1;----------/*该台机器标记为使用*/
printf("\t\t请输入上机时间(当前时间):
");
scanf("%d:
%d:
%d",&stu[i].kaishi.hour,&stu[i].kaishi.minute,&stu[i].kaishi.second);
stu[i].flag=1;---------/*该生标记为上机*/
com[k].stut=stu[i];---------/*记录使用这台机器的学生信息*/
break;
}
}
if(k==30)
printf("\t\t机器全部使用中,请稍后再上机!
\n");
}
}
voidcalculate(Studentstu)------/*上机时间及费用计算*/
{intt;
structtimetimet;
if(<)
{if(==0)
{-=1;
=59;
}
else
-=1;
=stu.jiesu.second+60-stu.kaishi.second;
}else
=;
if(<)
{-=1;
=stu.jiesu.minute+60-stu.kaishi.minute;
}
else
=;
=;
if(==0&&==0)
t=;
else
t=timet.hour+1;---------/*不满一小时按一小时算*/
printf("\t\t该生上机用时%d小时,费用为%d元\n",t,t);
}
voidxiaji(Studentstu[],intn)-------------/*下机*/
{charnum_t[20],name_t[20];
inti,s;
do
{printf("\n\t\t使用姓名输入1\n\t\t使用学号输入2\n\t\t请输入序号:
");
scanf("%d",&s);
}while(s!
=1&&s!
=2);
getchar();
if(s==1)
{printf("\t\t请输入姓名:
");
gets(name_t);
for(i=0;i{if(strcmp(stu[i].name,name_t)==0)
break;
}
}
else
{printf("\t\t请输入学号:
");
gets(num_t);
for(i=0;i{if(strcmp(stu[i].num,num_t)==0)
break;
}
}
if(i==n)
{printf("\t\t没有这个学生!
\n");
return;
}
elseif(stu[i].flag==0)
{printf("\t\t该生未上机或已下机!
\n");
return;
}
else
{printf("\t\t请输入下机时间(当前时间):
");
scanf("%d:
%d:
%d",&stu[i].jiesu.hour,&stu[i].jiesu.minute,&stu[i].jiesu.second);
calculate(stu[i]);--------/*计算并输出上机费用*/
stu[i].flag=0;-------------/*该生标记为未上机*/
for(k=0;k<3;k++)---------/*将刚下机同学使用的机器标记为未使用*/
{if(strcmp(com[k].stut.num,stu[i].num)==0)
{com[k].f=0;---------/*该机器标记为未使用*/
break;
}
}
}
}
voidchaxun(Studentstu[],intn)-------/*上机时间查询*/
{charnum_t[20],name_t[20];
inti,s;
do
{printf("\n\t\t使用姓名输入1\n\t\t使用学号输入2\n\t\t请输入序号:
");
scanf("%d",&s);
}while(s!
=1&&s!
=2);
getchar();
if(s==1)
{printf("\t\t请输入姓名:
");
gets(name_t);
for(i=0;i{if(strcmp(stu[i].name,name_t)==0)
break;}
}
else
{printf("\t\t请输入学号:
");
gets(num_t);
for(i=0;i{if(strcmp(stu[i].num,num_t)==0)
break;
}
}
if(i==n)
{printf("\t\t记录无此学生!
\n");
return;
}
elseif(stu[i].flag==1)
{printf("\t\t该生正在上机,上机起始时间为:
%d:
%d:
%d\n",stu[i].kaishi.hour,stu[i].kaishi.minute,stu[i].kaishi.second);
}else
printf("\t\t该生未上机或下机!
\n");
}
voidqingkuang()--------------/*全部机器使用情况显示*/
{printf("\t机器号是否使用使用者学号班级上机时间\n");
printf("\t----------------------------------------------------------------\n");
for(k=0;k<30;k++)
{if(com[k].f==0)
printf("\t%02d否--------:
--:
--\n",k+1);
else
printf("\t%02d是%-10s%-10s%2s%02d:
%02d:
%02d\n",k+1,com[k].stut.name,com[k].stut.num,com[k].stut.banji,com[k].stut.kaishi.hour,com[k].stut.kaishi.minute,com[k].stut.kaishi.second);
}
printf("\t");
system("pause");---------/*屏幕显示内容停留一段时间,直到继续操作为止*/
}
intmain()------------------------------/*主函数*/
{intn=0;
for(k=0;k<30;k++)------------/*全部机器标记为未使用*/
com[k].f=0;
for(;;)
{switch(main_menu())
{case1:
system("cls");
printf("********************输入学生信息***********************\n");
n=input(stu,n);
break;
case2:
system("cls");
printf("**********************学生上机*************************\n");
shangji(stu,n);
printf("\t\t");
system("pause");
break;
case3:
system("cls");
printf("**********************学生下机*************************\n");
xiaji(stu,n);
printf("\t\t");
system("pause");
break;
case4:
system("cls");
printf("*******************查询上机时间及费用*******************");
chaxun(stu,n);
printf("\t\t");
system("pause");
break;
case5:
system("cls");
printf("********************电脑使用情况显示********************\n");
qingkuang();
break;
case0:
system("cls");
printf("********************感谢使用机房收费管理系统,欢迎下次使用!
********************");
printf("\t\t");
system("pause");
exit(0);
}
}
return0;
}
[算法描述]
[程序调试情况]
1.在调试过程中发现自己犯了很多细节性的错误,比如标点符号的错误,然后一个一个发现,修正,过程很冗杂,都要怪自己在编写的时候不细心,挺后悔的,以后在做一件事的时候就要认真,以避免不必要的麻烦。
2.此外,若只是最后对学生的信息进行系统的上机时间和下机时间的输入就使得学生在使用计算机时无法查询自己上机的相关信息。
最后通过上机时学生信息的查找(增添)并输入该学生的上机时间(当前时间),下机时学生信息查找且输入下机时间(当前时间),使得学生能更好的查询自己使用计算机的情况。
3.考虑到现实因素,机房的计算机数目有限,不能不受限制的使用。
因此,我对该题目所做的要求进行了拓展,即显示所有计算机的使用情况,这样能更直观的了解当前机房所有计算机的使用情况。
[课程设计总结]
在做这次课程设计的过程中,我遇到了很多的困难;在发现解决这些问题的过程中,我收获了宝贵的经验:
1)在设计程序之前,要认真阅读题目及要求,对你所设计的题目和内容有一个系统的了解,知道所设计的题目和内容包含那些资源。
2)设计程序过程中,最重要的是要有一个清晰的思路和一个完整的软件流程图。
所以,先把设计原理与整体思路弄清楚,再把流程图画出来,按照流程图一步步的编程,这样做起来井井有条,事半功倍。
3)在设计程序时,不要浮躁,要有耐心,按照错误提示一步步修改,切记“反复修改,不断改进”是程序设计的必经之路;不要因为错误多就气馁,切记发现错误也是取得成绩的一种。
4)要养成注释程序的好习惯,一个程序的完美与否不仅仅是实现功能,而应该让人一看就能明白你的思路,这样也为资料的保存和交流提供了方便。
5)在设计程序过程中遇到问题是很正常的,但我们应该将每次遇到的问题记录下来,并分析清楚,避免在跌倒过的地方再次跌倒。
6)在设计过程中,若有些问题是自己尽力思考后仍不能解决的,要向老师或同学请教。
[参考文献或网站]
C程序设计(第四版)谭浩强著
C程序设计(第四版)学习辅导谭浩强著