📄 train.cpp
字号:
#include<iostream.h>
#include"SqList.h"//引用外部头文件,等效为在本程序中的定义
#include<string.h>
static int n2,n3,n4,n5,temp;//定义全局变量
float ch7;
void menu(SqList h);//函数声明语句
void check(SqList h);
void checkin(SqList h);
void help();
void goback(SqList h)
{
char ch;
SqList L;//定义一对象
InitList_Sq(L);//初始链表
L=h;//表头
cout<<"q返回主菜单,r返回查询菜单,s重新定票"<<endl;
cin>>ch;
switch(ch)
{
case 'q': menu(L);break;//返回主菜单
case 'r': check(L);break;//返回上一级菜单
case 's': checkin(L);break;//重新输入
}
}//实现界面返回,以便继续操作
void display()
{
cout<<"********************************************************************************"<<endl;
}//为方便起见,定义此函数供调用,不用反复使用cout,而且修改方便
void als(char A,SqList h)
{
SqList L;
InitList_Sq(L);
L=h;
char ch=A;
if(ch!='a'&&ch!='b'&&ch!='c'&&ch!='d')//选择终点站不存在时
{
cout<<"此站不存在"<<endl;
goback(L);
}
else{
display();
cout<<"终点站"<<" "<<"车次"<<" "<<"日期"<<" "<<"票定额"<<" "<<"余票量"<<" "<<"票 价"<<" "<<"起始座位号"<<endl;
for(int i=0;i<L.len;i++)
{
int k=i+7;
n5=n4=n3=n2=L.elem[i].discut;//定义n2为定票变化后的值,防止票售出后,座位号没变化
if(ch=='a'&&L.elem[i].endname=="北京"){cout<<L.elem[i].endname<<" "<<L.elem[i].hnum<<" "<<L.elem[i].day<<" "<<L.elem[i].wholenum<<" "<<L.elem[i].lastnum<<" "<<L.elem[i].fnum<<" "<<n2<<endl;}
if(ch=='b'&&L.elem[i].endname=="徐州"){cout<<L.elem[i].endname<<" "<<L.elem[i].hnum<<" "<<L.elem[i].day<<" "<<L.elem[i].wholenum<<" "<<L.elem[i].lastnum<<" "<<L.elem[i].fnum<<" "<<n3<<endl;}
if(ch=='c'&&L.elem[i].endname=="南京"){cout<<L.elem[i].endname<<" "<<L.elem[i].hnum<<" "<<L.elem[i].day<<" "<<L.elem[i].wholenum<<" "<<L.elem[i].lastnum<<" "<<L.elem[i].fnum<<" "<<n4<<endl;}
if(ch=='d'&&L.elem[i].endname=="上海"){cout<<L.elem[i].endname<<" "<<L.elem[i].hnum<<" "<<L.elem[i].day<<" "<<L.elem[i].wholenum<<" "<<L.elem[i].lastnum<<" "<<L.elem[i].fnum<<" "<<n5<<endl;}
}
display();
}
goback(L);
}//查询终点站信息函数
void check(SqList h)
{
SqList L;
InitList_Sq(L);L=h;
char ch3;
display();
cout<<" a. 北 京 \t\t c. 南 京"<<endl;
cout<<" b. 徐 州 \t\t d. 上 海"<<endl;
display();
cout<<"请选择终点站 ";
cin>>ch3;
als(ch3,L);//调用als以便查询车次信息
}//查询界面
void checkin(SqList h)
{
int f;
SqList L;
InitList_Sq(L);
L=h;
char *ch1,s[20];
int ch2,ch3,ch6;
display();
cout<<"请输入车次:"<<endl;
cin>>s; ch1=s;//输入车次
cout<<"日期:"<<endl;
cin>>ch2;//输入日期
cout<<"订票数额:"<<endl;
cin>>ch3;//输入订票量
display();
char s1[20];
for(int i=0;i<L.len;i++)
if(!strcmp(L.elem[i].hnum,ch1)&&L.elem[i].day==ch2)//如果车次日期不正确,则退出
{
f=1;
cout<<"军人、学生打6折,会员打5折"<<endl;
display();
cout<<"输入乘客姓名"<<endl;
cin>>s1;//输入姓名
cout<<"证件编码:"<<endl;
cin>>ch6;//输入证件编码
cout<<"折扣:"<<endl;
cin>>ch7;//输入折扣
display();
if(L.elem[i].lastnum>=ch3)//余票量足够
{
LNode *p;
p=new LNode;
p->data.name=s1;
p->data.dnum=ch3;
p->data.dj=ch6;
p->data.pay=ch7*ch3*L.elem[i].fnum/10;
LNode *h;
h=L.elem[i].la;//已订票链表 供查询使用
for(h=L.elem[i].la;h->next!=NULL;h=h->next)
if(h->next!=NULL)
{
if(h->next->data.dj==ch6)
{
h->next->data.dnum+=ch3;
goto next;
}
}
if(h->next==NULL)
{
p->next=h->next;
h->next=p;
}
next:L.elem[i].lastnum=L.elem[i].lastnum-ch3;
cout<<"订票成功!"<<endl;
cout<<"您订的票 "<<"车次 "<<L.elem[i].hnum<<"日期 "<<L.elem[i].day;
cout<<" 座位号";
if(ch3==1)
cout<<L.elem[i].discut;
else
{
temp=L.elem[i].discut;//防止修改座位号的值
for(int j=0;j<ch3;j++)
{
cout<<" "<<temp;
temp++;
}
cout<<endl;
}
cout<<endl<<"需付款"<<p->data.pay<<"元"<<endl;
goback(L);
break;
}
else{ //余票量不足
LNode *q;
q=new LNode;
q->data.name=s1;
q->data.dnum=ch3;
q->data.dj=ch6;
LinkList h;
for(h=L.elem[i].lb;h->next!=NULL;h=h->next);
q->next=h->next;
h->next=q;
cout<<"票额不足,剩余"<<L.elem[i].lastnum<<"张!please wait....";
/*cout<<"是否定无座车票?是按y,返回主菜单q"<<endl;
cin>>z;
if(z=='y'){}else{}
*/
}
break;
}else f=0;
if(f==0)
{
cout<<"没有此车次";
}
goback(L);
}//订票系统函数
void checkout(SqList h)
{
SqList L;
InitList_Sq(L);
L=h;
char *ch1,*ch2,s1[20],s2[20];
int ch3,f=0,ch4,ch6;
display();
cout<<"请输入车次:"<<endl;
cin>>s1;//输入车次
cout<<"日 期:"<<endl;
cin>>ch3;//输入日期
cout<<"客户姓名:"<<endl;
cin>>s2;//输入姓名
cout<<"证件编码 :"<<endl;
cin>>ch6;//输入证件编码
cout<<"退票数:"<<endl;
cin>>ch4;//输入退票量
display();
ch1=s1;
ch2=s2;
for(int i=0;i<L.len;i++)
if(!strcmp(L.elem[i].hnum,ch1)&&L.elem[i].day==ch3)//输入与顺序表中车次日期比较
{
LNode *h;
for(h=L.elem[i].la;h->next!=NULL;h=h->next)
if(!strcmp(h->next->data.name,ch2)&&h->next->data.dj==ch6)//输入与链表中姓名比较
{
if(h->next->data.dnum<ch4)
{
f=4;
break;
}//退票额多于订票额退出
f=1;
L.elem[i].lastnum+=ch4; //更新信息,退票可再次出售,余票量
if(h->next->data.dnum>ch4)//退票额少于订票额
h->next->data.dnum-=ch4;//定票量等于退票后的总数
else
{ LNode *p;
p=new LNode;
p=h->next;
h->next=p->next;
free(p);
}//退票额等于订票额删除本结点
/*if(L.elem[i].lb->next!=NULL)//若有人排队输出
{
cout<<"替 补 人 员"<<endl;
display();
cout<<"姓名 订票数 等级"<<endl;
LNode *h1;
int k=1;
for(h1=L.elem[i].lb;h1->next!=NULL;h1=h1->next)//输出排队人名单
{
cout<<h1->next->data.name<<" "<<h1->next->data.dnum<<" "<<h1->next->data.dj<<endl;
k++;
}
display();
}break;*/
}else f=2;
if(f==1||f==2||f==4)
break;
}else f=3;
switch(f)
{
case 1: LNode *p;
p=new LNode;
p->data.name=s1;
p->data.dnum=ch3;
p->data.dj=ch6;
p->data.pay=ch7*ch4*L.elem[i].fnum/10;
cout<<"退票成功!";
cout<<"您的退票 "<<" 车次"<<L.elem[i].hnum<<" 日期"<<L.elem[i].day;
cout<<" 座位号";
if(ch3==1)
cout<<L.elem[i].discut;
else
{
temp=L.elem[i].discut;//防止修改座位号的值
for(int j=0;j<ch4;j++)
{
cout<<" "<<temp-ch4;
temp++;
}
cout<<endl;
}
cout<<"应找钱"<<p->data.pay<<endl<<endl;break;
case 2:cout<<"您没有订过此票?";break;
case 3:cout<<"没有此车次";break;
case 4:cout<<"输入票额多于所订票额,请重新输入";break;
}
goback(L);
}//退票系统函数
void menu4(SqList h)
{
int f=0;
int k=1;
SqList L;
InitList_Sq(L);
L=h;
cout<<"订票名单"<<endl;
display();
cout<<"终点站 车次 姓名 订票数 证件编码 座位号"<<endl;
for(int i=0;i<L.len;i++)
if(L.elem[i].la->next!=NULL)
{
f=1;
LNode *h1;
for(h1=L.elem[i].la;h1->next!=NULL;h1=h1->next)//输出订票人名单时间复杂度O(L.len*L.elem[i].la.len)
{
if(h1->next->data.dnum==1)//为了更新查询时的座位号,需做出判断
{
cout<<L.elem[i].endname<<" "<<L.elem[i].hnum<<" "<<h1->next->data.name<<" "<<h1->next->data.dnum<<" "<<h1->next->data.dj<<" "<<L.elem[i].discut<<endl;
}
else
{
if(h1->next->data.dnum)
cout<<L.elem[i].endname<<" "<<L.elem[i].hnum<<" "<<h1->next->data.name<<" "<<h1->next->data.dnum<<" "<<h1->next->data.dj<<" ";
for(int j=0;j<h1->next->data.dnum;j++)
{
int d1;
d1=L.elem[i].discut;
cout<<" "<<d1;
L.elem[i].discut++;
}
cout<<endl;
n3=n4=n5=n2=L.elem[i].discut;
}
k++;
}
}
if(f==0)
{
cout<<endl<<"无人订票......."<<endl;
}
display();
goback(L);
}//查询订票名单函数
void menu(SqList h)
{
int ch;
SqList L;
InitList_Sq(L);
L=h;
display();
cout<<" 火 车 售 票 系 统"<<endl<<endl;
cout<<" 系统说明:"<<endl<<endl;
cout<<" 1.功能:可进行车票查询、订购、退票等操作,简单快捷"<<endl;
cout<<" 2.各环节都可以显示出车票的信息(车次、座位等)"<<endl;
cout<<" 3.退票时,需是本站售出的车票才可以退掉"<<endl;
cout<<" 4.任何界面下都可按'q'键或其它键返回主菜单或相关菜单"<<endl;
cout<<" 5.本系统满足<不同车次>的相同操作"<<endl;
cout<<" 6.运行环境:本系统用vc++6.0设计完成,请在Windows环境"<<endl;
cout<<" 下运行,Windows2000、WindowsXP"<<endl<<endl;
cout<<" 北京"<<endl;
cout<<" ↑"<<endl;
cout<<" 南京←南昌→徐州"<<endl<<endl;
cout<<" 1. 查 询"<<" 2. 订 票"<<" 3. 退 票"<<" 4. 订票名单"<<" 5.系统帮助(暂时屏蔽)"<<endl;
display();
cout<<"请选择服务,其它键退出"<<endl;
cin>>ch;
switch(ch)
{
case 1: check(L);break;//进查询界面
case 2: checkin(L);break;//进订票界面
case 3: checkout(L);break;//进退票界面
case 4: menu4(L);break;//进已订票名单界面
//case 5: help();break;//显示系统帮助信息
}
}//主菜单
void help()//帮助函数体
{
SqList L;
InitList_Sq(L);
cout<<" 欢迎你使用本系统"<<endl;
cout<<"1.选择菜单1,乘客可先查询车票信息,然后根据自己的实际需要选菜单2,进行预定"<<endl;
cout<<"2.如果乘客有意外情况,可以进入退票菜单3,按照系统提示,输入相关参数,即可完成"<<endl;
cout<<"3.选择菜单4,乘客也可以随时对售出车票进行查询,以便更好的掌握即时信息"<<endl<<endl;
goback(L);
}
void main()
{
SqList L;
InitList_Sq(L);
Create_Sq(L);//创建顺序表
menu(L);//进入主菜单
}//主函数
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -