![]() |
#2
寒风中的细雨2012-10-06 16:48
|
这个是主程序。还有的东西已经确定没错。放在附件里了(其中两个main是示例程序哦)。谢谢各位大侠啦!!!
只有本站会员才能查看附件,请 登录

#include "assistance.h"
#include "sq_stack.h"
#include "link_queue.h"
main(void)
{
int n,plaque,tin,conl,i,j1=0,j2=0,nin=0,x;
int k,y,p,z,nbk=0;
int away_time[80],away_plaque[80]; //存放离开车辆的已停时间以及离开车辆的车牌。
char etat[80];
LinkQueue<int> TEM; //等候便道,以队列实现;且等候便道不需要记录时间。
cout<<"请输入停车场容量:n="; //设置停车场容量
cin>>n;
x=n;
cout<<endl;
//system("PAUSE");
SqStack<int> MAIN(n); // 从这里开始错误!!停车场记录车牌,以栈实现。
SqStack<int> TIME(n); //停车场纪录进入时间,以栈实现。
SqStack<int> QUIT(n); //存放暂时退出车辆车牌,以栈实现。
SqStack<int> QUIT_time(n); //存放暂时退出车辆的进入时间,以栈实现。
cout<<"您要对几辆车进行操作?"<<endl;
cin>>conl;
for (i=0;i<=conl;i++){
away_time[i]=0; //将两个数列初始化为0,作为后面的判断条件。
away_plaque[i]=0;
}
for (i=0;i<conl;i++){
cout<<"您所操作的第"<<(i+1)<<"辆汽车到达或离去?(A/D):"<<endl;
cin>>etat[i];
cout<<"请输入汽车牌照号码:"<<endl;
cin>>plaque;
if (etat[i]=='A'&&x==n){ //未溢出栈的情况。入停车场。
cout<<"请输入当前时间:"<<endl;
cin>>tin;
MAIN.Push(plaque);
TIME.Push(tin);
j1++; //j1记录进入停车场的车辆个数
if (MAIN.Length()==x) x++;
}
cout<<endl<<endl<<endl<<endl;
if (etat[i]=='A'&&x>n){ //栈已满。进入等候便道。
cout<<"您需要在等候便道等候。"<<endl;
TEM.EnQueue(plaque);
j2++; //(j2-1)记录进入等候便道车辆个数
}
if (etat[i]=='D'){ //车辆离去
nbk++; //nbk,退出停车场的车辆个数,即停车场空位个数 。用于计算在等候便道可以进入停车场的数量
for (k=1;;k++){ //k的值是暂时退出车辆的数量(包含出停车场那辆)
MAIN.Pop(y);
QUIT.Push(y); //for语句使车辆暂时退出。
if (y==plaque) break;
}
QUIT.Pop(y); //取出要离去车辆
away_plaque[i]=y; // 记录其车牌,便于后面打印。
for (p=1;p<=k;p++){ //for语句对进入停车场的时间做相同的操作。
TIME.Pop(z);
QUIT_time.Push(z);
}
QUIT_time.Pop(z);
//cout<<z;
away_time[i]=(tin-z); //记录离去车辆在停车场内停留时间
}
for (p=1;p<k;p++){ //将暂时出栈的元素重新放回去。QUIT和QUIT_time两个栈变空。
QUIT.Pop(y);
MAIN.Push(y);
QUIT_time.Pop(z);
TIME.Push(z);
}
}
//QUIT.Traverse(Write<int>);
//MAIN.Traverse(Write<int>);
// TEM.DelQueue(plaque);
j2--;
cout<<"请将待停车辆依次停靠在:"; //打印待停车辆的情况
cout<<endl<<endl;
for (i=1;i<=j1;i++){
cout<<" 停车场第"<<i<<"号车位"<<endl;
cout<<endl;
}
for (i=1;i<=j2;i++){
cout<<" 等候便道第"<<i<<"号车位"<<endl;
cout<<endl;
}
for (i=0;i<=conl;i++){ //打印离开车辆的情况
if (away_time[i]!=0&&away_plaque[i]!=0){
cout<<"车牌号为"<<away_plaque[i]<<"的汽车"<<"已停车"<<away_time[i]<<"分钟"<<endl;
if (away_time[i]<=15) cout<<"请付款"<<3<<"元";
else if (away_time[i]>15&&away_time[i]<=180) cout<<"请付款"<<6<<"元";
else if (away_time[i]>180&&away_time[i]<=300) cout<<"请付款"<<10<<"元";
else cout<<"请付款"<<20<<"元";
}
}
cout<<endl<<endl;
for (i=1;i<=nbk;i++){ //若停车场有空位了,让等候便道的车进入停车场并打印
TEM.GetHead(y);
MAIN.Push(y);
cout<<"请等候便道第"<<i<<"辆车("<<y<<")进入停车场"<<endl;
cout<<"请输入当前时间:"<<endl;
cin>>tin;
TIME.Push(tin);
}
system("PAUSE");
}
#include "sq_stack.h"
#include "link_queue.h"
main(void)
{
int n,plaque,tin,conl,i,j1=0,j2=0,nin=0,x;
int k,y,p,z,nbk=0;
int away_time[80],away_plaque[80]; //存放离开车辆的已停时间以及离开车辆的车牌。
char etat[80];
LinkQueue<int> TEM; //等候便道,以队列实现;且等候便道不需要记录时间。
cout<<"请输入停车场容量:n="; //设置停车场容量
cin>>n;
x=n;
cout<<endl;
//system("PAUSE");
SqStack<int> MAIN(n); // 从这里开始错误!!停车场记录车牌,以栈实现。
SqStack<int> TIME(n); //停车场纪录进入时间,以栈实现。
SqStack<int> QUIT(n); //存放暂时退出车辆车牌,以栈实现。
SqStack<int> QUIT_time(n); //存放暂时退出车辆的进入时间,以栈实现。
cout<<"您要对几辆车进行操作?"<<endl;
cin>>conl;
for (i=0;i<=conl;i++){
away_time[i]=0; //将两个数列初始化为0,作为后面的判断条件。
away_plaque[i]=0;
}
for (i=0;i<conl;i++){
cout<<"您所操作的第"<<(i+1)<<"辆汽车到达或离去?(A/D):"<<endl;
cin>>etat[i];
cout<<"请输入汽车牌照号码:"<<endl;
cin>>plaque;
if (etat[i]=='A'&&x==n){ //未溢出栈的情况。入停车场。
cout<<"请输入当前时间:"<<endl;
cin>>tin;
MAIN.Push(plaque);
TIME.Push(tin);
j1++; //j1记录进入停车场的车辆个数
if (MAIN.Length()==x) x++;
}
cout<<endl<<endl<<endl<<endl;
if (etat[i]=='A'&&x>n){ //栈已满。进入等候便道。
cout<<"您需要在等候便道等候。"<<endl;
TEM.EnQueue(plaque);
j2++; //(j2-1)记录进入等候便道车辆个数
}
if (etat[i]=='D'){ //车辆离去
nbk++; //nbk,退出停车场的车辆个数,即停车场空位个数 。用于计算在等候便道可以进入停车场的数量
for (k=1;;k++){ //k的值是暂时退出车辆的数量(包含出停车场那辆)
MAIN.Pop(y);
QUIT.Push(y); //for语句使车辆暂时退出。
if (y==plaque) break;
}
QUIT.Pop(y); //取出要离去车辆
away_plaque[i]=y; // 记录其车牌,便于后面打印。
for (p=1;p<=k;p++){ //for语句对进入停车场的时间做相同的操作。
TIME.Pop(z);
QUIT_time.Push(z);
}
QUIT_time.Pop(z);
//cout<<z;
away_time[i]=(tin-z); //记录离去车辆在停车场内停留时间
}
for (p=1;p<k;p++){ //将暂时出栈的元素重新放回去。QUIT和QUIT_time两个栈变空。
QUIT.Pop(y);
MAIN.Push(y);
QUIT_time.Pop(z);
TIME.Push(z);
}
}
//QUIT.Traverse(Write<int>);
//MAIN.Traverse(Write<int>);
// TEM.DelQueue(plaque);
j2--;
cout<<"请将待停车辆依次停靠在:"; //打印待停车辆的情况
cout<<endl<<endl;
for (i=1;i<=j1;i++){
cout<<" 停车场第"<<i<<"号车位"<<endl;
cout<<endl;
}
for (i=1;i<=j2;i++){
cout<<" 等候便道第"<<i<<"号车位"<<endl;
cout<<endl;
}
for (i=0;i<=conl;i++){ //打印离开车辆的情况
if (away_time[i]!=0&&away_plaque[i]!=0){
cout<<"车牌号为"<<away_plaque[i]<<"的汽车"<<"已停车"<<away_time[i]<<"分钟"<<endl;
if (away_time[i]<=15) cout<<"请付款"<<3<<"元";
else if (away_time[i]>15&&away_time[i]<=180) cout<<"请付款"<<6<<"元";
else if (away_time[i]>180&&away_time[i]<=300) cout<<"请付款"<<10<<"元";
else cout<<"请付款"<<20<<"元";
}
}
cout<<endl<<endl;
for (i=1;i<=nbk;i++){ //若停车场有空位了,让等候便道的车进入停车场并打印
TEM.GetHead(y);
MAIN.Push(y);
cout<<"请等候便道第"<<i<<"辆车("<<y<<")进入停车场"<<endl;
cout<<"请输入当前时间:"<<endl;
cin>>tin;
TIME.Push(tin);
}
system("PAUSE");
}