📄 轮渡管理.cpp
字号:
//进行轮渡管理的主程序文件“轮渡管理.cpp”
#include<iostream.h>
#include<stdlib.h>
#include<time.h>
#include"链接队列.cpp"
//输出每次轮渡所载汽车的编号
void Print(int a[],int n)
{
long t; t=time(0); //当前机器时间被保存到t中,单位为秒
cout<<endl;
cout<<"轮渡开始起航->"<<endl;
cout<<"本次过江时间:"<<ctime(&t)<<endl;
//ctime(&t)函数的值为当前日期和时间的字符串
cout<<"本次轮渡所载汽车:";
for(int i=0; i<n; i++)
cout<<a[i]<<' ';
cout<<endl;
}
//输出当前汽车排队等待情况
template<class ElemType>
void OutputQueue(QueueLK<ElemType>& q1, QueueLK<ElemType>& q2)
{
cout<<"客车排队的情况:";
sNode<ElemType>* p=q1.GetFront();
if(p==NULL) cout<<"暂时无客车等候。"<<endl;
while(p!=NULL){
cout<<p->data<<' ';
p=p->next;
}
cout<<endl;
cout<<"货车排队的情况:";
p=q2.GetFront();
if(p==NULL) cout<<"暂无货车等候。"<<endl;
while(p!=NULL){
cout<<p->data<<' ';
p=p->next;
}
cout<<endl;
}
void main()
{
//q1和q2队列用来分别存储待渡江的客车和货车
QueueLK<int>q1,q2;
//用flag保存用户选择,用mark登记轮渡到渡口
int flag, mark=0;
//用数组a记录轮渡上汽车号,用n记录汽车的个数
int a[10], n=0;
//用t1和t2登记时间
long t1, t2;
//程序处理过程
do {
//显示功能表并接受用户选择
L1:cout<<"功能表:"<<endl;
cout<<"1---车到渡口进行登记"<<endl;
cout<<"2---轮渡到渡口进行登记"<<endl;
cout<<"3---汽车上轮渡"<<endl;
cout<<"4---命令轮渡起航"<<endl;
cout<<"5---输出当前汽车排队情况"<<endl;
cout<<"6---结束程序运行"<<endl;
cout<<"请输你的选择(1-6):";
do {
cin>>flag;
if(flag<1 ||flag>6) cout<<"输入功能号错,重输:";
} while(flag<1 || flag>6);
int x,i;
//根据不同选择进行相应处理
switch(flag){
case 1:
cout<<"输入车辆号,小于100为客车,否则为货车,"<<endl;
cout<<"可以输入多辆车,用空格分开,直到输入-1为止。"<<endl;
while (1) {
cin>>x;
if(x==-1) break;
if(x<100) q1.EnQueue(x);
else q2.EnQueue(x);
}
break;
case 2:
if(mark==1){
cout<<"轮渡已在渡口等待,不要重复登记!"<<endl;
break;
}
mark=1;
n=0;
t1=time(0);
break;
case 3:
if(q1.EmptyQueue() && q2.EmptyQueue()){
cout<<"暂无汽车过江!"<<endl;
if(mark==1 && n!=0){
t2=time(0)-t1; //计算到目前为止轮渡等待时间的秒数
cout<<"轮渡未满,有车"<<n<<"辆,已等待"<<t2/60<<"分";
cout<<t2%60<<"秒,等候其它汽车上轮渡!"<<endl;
}
break;
}
if(mark!=1){
cout<<"轮渡未到,请汽车稍后上轮渡!"<<endl;
break;
}
do {
i=0;
//首先上四辆客车
while(!q1.EmptyQueue() && n<10 && i<4){
a[n++]=q1.OutQueue();
i++;
}
//满10辆则开船
if(n==10) {Print(a,n); mark=0; n=0; goto L1;}
//进4辆客车则接着进一辆货车,不满4辆则由货车补
if(i==4){
if(!q2.EmptyQueue()) a[n++]=q2.OutQueue();
}
else {
while(!q2.EmptyQueue() && n<10 && i<5) {
a[n++]=q2.OutQueue();
i++;
}
}
//满10辆则开船
if(n==10) {Print(a,n); mark=0; n=0; goto L1;}
} while(!q1.EmptyQueue() || !q2.EmptyQueue());
//只要客车或货车队列不全为空,则循环
t2=time(0)-t1; //登记轮渡已经等待时间的秒数
cout<<"轮渡上有车"<<n<<"辆,已等待"<<t2/60<<"分"<<t2%60;
cout<<"秒,等候其它汽车上轮渡!"<<endl;
break;
case 4:
if(n==0 || mark==0)
cout<<"轮渡上无车过江或根本无轮渡!不需要起航!"<<endl;
else {
Print(a,n); mark=0; n=0;
}
break;
case 5:
OutputQueue(q1,q2);
break;
case 6:
if(!q1.EmptyQueue() || !q2.EmptyQueue()) {
cout<<"还有汽车未渡江,暂时不能结束!"<<endl;
break;
}
if(n!=0) {
cout<<"轮渡上有车,不能结束,需命令开轮渡!"<<endl;
break;
}
cout<<"程序运行结束!"<<endl;
return;
}
}while(1);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -