资源描述
C++程序设计
设计报告
题目:机房收费管理系统
一、实验题目
机房收费管理系统
二、实验环境
Visual C++ 6.0
三、设计思想
包括:函数分解过程、算法描述以及相应的数据流程图
一、 函数分解过程
1、输入功能
struct lbtime
{ int lbhour;
int lbminute;
int lbsecond;
};
typedef struct
{
char lbnum[20];
int lbbanji;
int lbflag;
char lbname[20];
struct lbtime lbstart,lbfinish; }
lbStudent;
lbStudent lbstu[50];
struct lbcomputer
{ int lbf;
lbStudent lbstut;
}lbcom[30];
int lbk;
int lbmain_menu()
{ char lbc;
do
{
system("cls");
cout<<"\t\t\t****机房收费管理系统****\n"<<"\t\t\t1.输入学生信息\n"<<"\t\t\t2.上机\n"<<"\t\t\t3.下机\n"<<"\t\t\t4.查询上机时间\n"<<"\t\t\t5.机器使用情况显示\n"<<"\t\t\t0.退出系统\n"<<"\t\t\t************************\n"<<"\t\t\t 请选择菜单(0-5):";
lbc=getchar(); }
while(lbc<'0'||lbc>'5');
return(lbc-'0');
}
int lbinput(lbStudent lbstu[],int lbn)
{
int lbi=0;
char lbsign='0';
while(lbsign!='lbn'&&lbsign!='lbN')
{
getchar();
cout<<"\t\t 学号:";
gets(lbstu[lbn+qhi].lbnum);
cout<<"\t\t 班级:";
cin>>lbstu[lbn+lbi].lbbanji;
getchar();
cout<<"\t\t 姓名:";
gets(lbstu[lbn+lbi].lbname);
cout<<"\t\t 继续输入?是请按Y,否请按N:";
cin>>lbsign;
lbstu[lbn+qhi].lbflag=0;
lbi++;
}
return(lbn+lbi);
}
void lbonline(lbStudent lbstu[],int lbn)
{
char lbnum_t[20],lbname_t[20];
int lbi,lbs;
do
{
cout<<"\t\t 使用姓名按1,使用学号按2:";
cin>>lbs; }
while(lbs!=1&&lbs!=2);
getchar();
if(lbs==1)
{
cout<<"\t\t 请输入姓名:";
gets(lbname_t);
for(lbi=0;lbi<lbn;lbi++)
if(strcmp(lbstu[lbi].lbname,lbname_t)==0)
break;
}
else
{
cout<<"\t\t 请输入学号:";
gets(lbnum_t);
for(lbi=0;lbi<lbn;lbi++)
{
if(strcmp(lbstu[lbi].lbnum,lbnum_t)==0)
break;
}
}
if(lbi==lbn)
{
cout<<"\t\t 信息库中暂无该生,请输入该生信息再上机!\n";
return; }
else if(lbstu[lbi].lbflag==1)
{
cout<<"\t\t 该生正在上机!\n";
return;
}
else
{
for(lbk=0;lbk<30;lbk++)
if(lbcom[lbk].lbf==0)
{
lbcom[lbk].lbf=1;
cout<<"\t\t 请输入上机时间(当前时间):";
cin>>lbstu[lbi].lbstart.lbhour>>lbstu[lbi].lbstart.lbminute>>lbstu[lbi].lbstart.lbsecond;
lbstu[lbi].lbflag=1;
lbcom[lbk].lbstut=lbstu[lbi]; break;
}
if(lbk==30)
cout<<"\t\t 机器全部使用中,请稍后再上机!\n";
}
}
2、计算功能
void lbcalculate(lbStudent lbstu) {
int lbt;
struct lbtime lbtimet;
if(lbstu.lbfinish.lbsecond<lbstu.lbstart.lbsecond)
{ if(lbstu.lbfinish.lbminute==0)
{ lbstu.lbfinish.lbhour-=1;
lbstu.lbfinish.lbminute=59;
}
else
lbstu.lbfinish.lbminute-=1;
lbtimet.lbsecond=lbstu.lbfinish.lbsecond+60-lbstu.lbstart.lbsecond;
}
else
lbtimet.lbsecond=lbstu.lbfinish.lbsecond-lbstu.lbstart.lbsecond;
if(lbstu.lbfinish.lbminute<lbstu.lbstart.lbminute)
{
lbstu.lbfinish.lbhour-=1; lbtimet.lbminute=lbstu.lbfinish.lbminute+60-lbstu.lbstart.lbminute;
}
else
lbtimet.lbminute=lbstu.lbfinish.lbminute-lbstu.lbstart.lbminute;
lbtimet.lbhour=lbstu.lbfinish.lbhour-lbstu.lbstart.lbhour;
if(lbtimet.lbsecond==0&&lbtimet.lbminute==0)
lbt=lbtimet.lbhour;
else
lbt=lbtimet.lbhour+1;
cout<<"\t\t 该生上机用时%d 小时,费用为%d 元\n",lbt,lbt;
}
3、查询功能
void lboffline(lbStudent lbstu[],int lbn)
{
char lbnum_t[20],lbname_t[20];
int lbi,lbs;
do
{
cout<<"\t\t 使用姓名按1,使用学号按2:";
cin>>lbs;
}while(lbs!=1&&lbs!=2);
getchar();
if(lbs==1)
{
cout<<"\t\t 请输入姓名:";
gets(lbname_t);
for(lbi=0;qhi<lbn;lbi++)
{
if(strcmp(lbstu[lbi].lbname,lbname_t)==0)
break;
}
}
else
{
cout<<"\t\t 请输入学号:";
gets(lbnum_t);
for(lbi=0;lbi<lbn;lbi++)
{
if(strcmp(lbstu[lbi].lbnum,lbnum_t)==0)
break;
}
}
if(lbi==lbn)
{
cout<<"\t\t 没有这个学生!\n";
return;
}
else if(lbstu[lbi].lbflag==0)
{
cout<<"\t\t 该生未上机或已下机!\n";
return;
}
else
{
cout<<"\t\t 请输入下机时间(当前时间):";
cin>>lbstu[lbi].lbfinish.lbhour>>lbstu[lbi].lbfinish.lbminute>>lbstu[lbi].lbfinish.lbsecond;
lbcalculate(lbstu[qhi]); lbstu[lbi].lbflag=0;
for(lbk=0;lbk<3;lbk++)
if(strcmp(lbcom[lbk].lbstut.lbnum,lbstu[lbi].bnum)==0)
{
lbcom[lbk].lbf=0; break;
}
}
}
void lbsearch(lbStudent lbstu[],int lbn) {
char lbnum_t[20],lbname_t[20];
int lbi,lbs;
do
{
cout<<"\t\t 使用姓名按1,使用学号按2:";
cin>>lbs;
}while(lbs!=1&&qhs!=2);
getchar();
if(lbs==1)
{
cout<<"\t\t 请输入姓名:";
gets(lbname_t);
for(lbi=0;qhi<lbn;lbi++)
{
if(strcmp(lbstu[lbi].lbname,lbname_t)==0)
break;
}
}
else
{
cout<<"\t\t 请输入学号:";
gets(lbnum_t);
for(lbi=0;qhi<lbn;bi++)
{
if(strcmp(lbstu[lbi].lbnum,lbnum_t)==0)
break;
}
}
if(lbi==lbn)
{
cout<<"\t\t 查无此生!\n";
return;
}
else if(lbstu[lbi].lbflag==1)
cout<<"\t\t 该生正在上机,上机起始时间为%d:%d:%d\n",lbstu[lbi].lbstart.lbhour,lbstu[lbi].lbstart.lbminute, lbstu[lbi].lbstart.lbsecond;
else
cout<<"\t\t 该生未上机或已下机!\n";
}
4、机器使用情况的显示
void display()
{
cout<<"\t 机器号 是否使用 使用者 学号 班级 上机时间\n";
cout<<"\t----------------------------------------------------------\n";
for(lbk=0;lbk<30;lbk++)
{
if(lbcom[lbk].lbf==0)
cout<<"\t%02d 否-----:--:--\n",qhk+1;
else
cout<<"yes"<<endl;
lbcom[lbk].lbstut.lbname,lbcom[lbk].lbstut.lbnum,lbcom[lbk].lbstut.lbbanji,lbcom[lbk].lbstut.lbstart.lbhour,
lbcom[lbk].lbstut.lbstart.lbminute,lbcom[lbk].lbstut.lbstart.lbsecond;
}
cout<<"\t";
system("pause");
}
1总体结构图
2主函数程序流程图
3子函数程序流程图
1输入学生信息
2学生上机
3学生下机
4上机时间查询
5机器使用情况
四、源程序清单
包括调试过程(碰到的错误、如何错误排除)
#include "stdafx.h"
#include<iostream>
#include<stdio.h>
#include<stdlib.h>
#include<ctype.h>
#include<string.h>
using namespace std;
struct qhtime
{ int qhhour;
int lbminute;
int lbsecond;
};
typedef struct
{
char lbnum[20];
int lbbanji;
int lbflag;
char lbname[20];
struct lbtime lbstart,lbfinish; }
lbStudent;
lbStudent lbstu[50];
struct lbcomputer
{ int lbf;
lbStudent lbstut;
}lbcom[30];
int lbk;
int lbmain_menu()
{ char qhc;
do
{
system("cls");
cout<<"\t\t\t****机房收费管理系统****\n"<<"\t\t\t1.输入学生信息\n"<<"\t\t\t2.上机\n"<<"\t\t\t3.下机\n"<<"\t\t\t4.查询上机时间\n"<<"\t\t\t5.机器使用情况显示\n"<<"\t\t\t0.退出系统\n"<<"\t\t\t************************\n"<<"\t\t\t 请选择菜单(0-5):";
lbc=getchar(); }
while(lbc<'0'||qhc>'5');
return(lbc-'0');
}
int lbinput(lbStudent lbstu[],int lbn)
{
int lbi=0;
char lbsign='0';
while(lbsign!='lbn'&&lbsign!='lbN')
{
getchar();
cout<<"\t\t 学号:";
gets(lbstu[lbn+lbi].lbnum);
cout<<"\t\t 班级:";
cin>>lbstu[lbn+lbi].lbbanji;
getchar();
cout<<"\t\t 姓名:";
gets(lbstu[lbn+lbi].lbname);
cout<<"\t\t 继续输入?是请按Y,否请按N:";
cin>>lbsign;
lbstu[lbn+lbi].lbflag=0;
lbi++;
}
return(lbn+lbi);
}
void lbonline(lbStudent lbstu[],int lbn)
{
char lbnum_t[20],lbname_t[20];
int lbi,lbs;
do
{
cout<<"\t\t 使用姓名按1,使用学号按2:";
cin>>lbs; }
while(lbs!=1&&lbs!=2);
getchar();
if(lbs==1)
{
cout<<"\t\t 请输入姓名:";
gets(lbname_t);
for(lbi=0;lbi<lbn;lbi++)
if(strcmp(lbstu[lbi].lbname,lbname_t)==0)
break;
}
else
{
cout<<"\t\t 请输入学号:";
gets(lbnum_t);
for(lbi=0;lbi<lbn;lbi++)
{
if(strcmp(lbstu[lbi].lbnum,lbnum_t)==0)
break;
}
}
if(lbi==lbn)
{
cout<<"\t\t 信息库中暂无该生,请输入该生信息再上机!\n";
return; }
else if(lbstu[lbi].lbflag==1)
{
cout<<"\t\t 该生正在上机!\n";
return;
}
else
{
for(lbk=0;lbk<30;lbk++)
if(lbcom[lbk].lbf==0)
{
lbcom[lbk].lbf=1;
cout<<"\t\t 请输入上机时间(当前时间):";
cin>>lbstu[lbi].lbstart.lbhour>>lbstu[lbi].lbstart.lbminute>>lbstu[lbi].lbstart.lbsecond;
lbstu[lbi].lbflag=1;
lbcom[lbk].lbstut=lbstu[lbi]; break;
}
if(lbk==30)
cout<<"\t\t 机器全部使用中,请稍后再上机!\n";
}
}
void lbcalculate(lbStudent lbstu) {
int lbt;
struct lbtime lbtimet;
if(lbstu.lbfinish.lbsecond<lbstu.lbstart.lbsecond)
{ if(lbstu.lbfinish.lbminute==0)
{ lbstu.lbfinish.lbhour-=1;
lbstu.lbfinish.lbminute=59;
}
else
lbstu.lbfinish.lbminute-=1;
lbtimet.lbsecond=lbstu.lbfinish.lbsecond+60-lbstu.lbstart.lbsecond;
}
else
lbtimet.lbsecond=lbstu.lbfinish.lbsecond-lbstu.lbstart.lbsecond;
if(lbstu.lbfinish.lbminute<lbstu.lbstart.lbminute)
{
lbstu.lbfinish.lbhour-=1;
lbtimet.lbminute=lbstu.lbfinish.lbminute+60-lbstu.lbstart.lbminute;
}
else
lbtimet.lbminute=lbstu.lbfinish.lbminute-lbstu.lbstart.lbminute;
lbtimet.lbhour=lbstu.lbfinish.lbhour-lbstu.lbstart.lbhour;
if(lbtimet.lbsecond==0&&lbtimet.lbminute==0)
lbt=lbtimet.lbhour;
else
lbt=lbtimet.lbhour+1;
cout<<"\t\t 该生上机用时%d 小时,费用为%d 元\n",lbt,lbt;
}
void lboffline(lbStudent lbstu[],int qhn)
{
char lbnum_t[20],lbname_t[20];
int lbi,lbs;
do
{
cout<<"\t\t 使用姓名按1,使用学号按2:";
cin>>lbs;
}while(lbs!=1&&lbs!=2);
getchar();
if(lbs==1)
{
cout<<"\t\t 请输入姓名:";
gets(lbname_t);
for(lbi=0;lbi<lbn;lbi++)
{
if(strcmp(lbstu[lbi].lbname,lbname_t)==0)
break;
}
}
else
{
cout<<"\t\t 请输入学号:";
gets(lbnum_t);
for(lbi=0;lbi<lbn;lbi++)
{
if(strcmp(lbstu[lbi].lbnum,lbnum_t)==0)
break;
}
}
if(lbi==lbn)
{
cout<<"\t\t 没有这个学生!\n";
return;
}
else if(lbstu[lbi].lbflag==0)
{
cout<<"\t\t 该生未上机或已下机!\n";
return;
}
else
{
cout<<"\t\t 请输入下机时间(当前时间):";
cin>>lbstu[lbi].lbfinish.lbhour>>lbstu[lbi].lbfinish.lbminute>>lbstu[lbi].lbfinish.lbsecond;
lbcalculate(lbstu[lbi]); lbstu[lbi].lbflag=0;
for(lbk=0;lbk<3;lbk++)
if(strcmp(lbcom[lbk].lbstut.lbnum,lbstu[lbi].lbnum)==0)
{
lbcom[lbk].lbf=0; break;
}
}
}
void lbsearch(lbStudent lbstu[],int lbn) {
char lbnum_t[20],lbname_t[20];
int lbi,lbs;
do
{
cout<<"\t\t 使用姓名按1,使用学号按2:";
cin>>lbs;
}while(lbs!=1&&lbs!=2);
getchar();
if(lbs==1)
{
cout<<"\t\t 请输入姓名:";
gets(lbname_t);
for(lbi=0;lbi<lbn;lbi++)
{
if(strcmp(lbstu[lbi].lbname,lbname_t)==0)
break;
}
}
else
{
cout<<"\t\t 请输入学号:";
gets(lbnum_t);
for(lbi=0;lbi<lbn;lbi++)
{
if(strcmp(lbstu[lbi].lbnum,lbnum_t)==0)
break;
}
}
if(lbi==lbn)
{
cout<<"\t\t 查无此生!\n";
return;
}
else if(lbstu[lbi].lbflag==1)
cout<<"\t\t 该生正在上机,上机起始时间为%d:%d:%d\n",lbstu[lbi].lbstart.lbhour,lbstu[lbi].lbstart.lbminute, lbstu[lbi].lbstart.lbsecond;
else
cout<<"\t\t 该生未上机或已下机!\n";
}
void display()
{
cout<<"\t 机器号 是否使用 使用者 学号 班级 上机时间\n";
cout<<"\t----------------------------------------------------------\n";
for(lbk=0;lbk<30;lbk++)
{
if(lbcom[lbk].lbf==0)
cout<<"\t%02d 否-----:--:--\n",lbk+1;
else
cout<<"yes"<<endl;
lbcom[lbk].lbstut.lbname,lbcom[lbk].lbstut.lbnum,lbcom[lbk].lbstut.lbbanji,lbcom[qhk].lbstut.lbstart.lbhour,
lbcom[lbk].lbstut.lbstart.lbminute,lbcom[lbk].lbstut.lbstart.lbsecond;
}
cout<<"\t";
system("pause");
}
int main() {
int lbn=0;
for(lbk=0;lbk<30;lbk++)
lbcom[lbk].lbf=0;
for(;;)
{
switch(lbmain_menu())
{
case 1:
system("cls");
cout<<"\t\t\t 输入学生信息:\n";
lbn=lbinput(lbstu,lbn); break;
case 2:
system("cls");
cout<<"\t\t\t 学生上机\n";
lbonline(lbstu,lbn);
cout<<"\t\t";
system("pause");
break;
case 3:
system("cls");
cout<<"\t\t\t 学生下机\n";
lboffline(lbstu,lbn);
cout<<"\t\t";
system("pause");
break;
case 4:
system("cls");
cout<<"\t\t\t 上机时间查询\n";
lbsearch(lbstu,lbn);
cout<<"\t\t";
system("pause");
break;
case 5:
system("cls");
cout<<"\t\t\t 机器使用情况显示\n\n";
display();
break;
case 0:
system("cls");
cout<<"\n\n\t\t 感谢使用机房收费管理系统,欢迎下次使用,再见!\n\n";
cout<<"\t\t";
system("pause");
exit(0);
}
}
return 0;
分析:多将中文输入法中的符号与英文中的混用,造成程序运行不畅。
未添加using namespace std头文件
将pintf改为cout,将scanf改为cin
五、测试的数据以及程序运行的结果
1登陆界面
2输入学生信息
3学生上机
4学生下机
5上机时间查询
6机器使用时间
7退出界面
展开阅读全文