?? train.cpp
字號(hào):
#include<iostream.h>
#include"SqList.h"//引用外部頭文件,等效為在本程序中的定義
#include<string.h>
static int n2,n3,n4,n5,temp;//定義全局變量
float ch7;
void menu(SqList h);//函數(shù)聲明語句
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;//返回上一級(jí)菜單
case 's': checkin(L);break;//重新輸入
}
}//實(shí)現(xiàn)界面返回,以便繼續(xù)操作
void display()
{
cout<<"********************************************************************************"<<endl;
}//為方便起見,定義此函數(shù)供調(diào)用,不用反復(fù)使用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')//選擇終點(diǎn)站不存在時(shí)
{
cout<<"此站不存在"<<endl;
goback(L);
}
else{
display();
cout<<"終點(diǎn)站"<<" "<<"車次"<<" "<<"日期"<<" "<<"票定額"<<" "<<"余票量"<<" "<<"票 價(jià)"<<" "<<"起始座位號(hào)"<<endl;
for(int i=0;i<L.len;i++)
{
int k=i+7;
n5=n4=n3=n2=L.elem[i].discut;//定義n2為定票變化后的值,防止票售出后,座位號(hào)沒變化
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);
}//查詢終點(diǎn)站信息函數(shù)
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<<"請選擇終點(diǎn)站 ";
cin>>ch3;
als(ch3,L);//調(diào)用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<<"訂票數(shù)額:"<<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<<"軍人、學(xué)生打6折,會(huì)員打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<<" 座位號(hào)";
if(ch3==1)
cout<<L.elem[i].discut;
else
{
temp=L.elem[i].discut;//防止修改座位號(hào)的值
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);
}//訂票系統(tǒng)函數(shù)
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<<"退票數(shù):"<<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;//定票量等于退票后的總數(shù)
else
{ LNode *p;
p=new LNode;
p=h->next;
h->next=p->next;
free(p);
}//退票額等于訂票額刪除本結(jié)點(diǎn)
/*if(L.elem[i].lb->next!=NULL)//若有人排隊(duì)輸出
{
cout<<"替 補(bǔ) 人 員"<<endl;
display();
cout<<"姓名 訂票數(shù) 等級(jí)"<<endl;
LNode *h1;
int k=1;
for(h1=L.elem[i].lb;h1->next!=NULL;h1=h1->next)//輸出排隊(duì)人名單
{
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<<" 座位號(hào)";
if(ch3==1)
cout<<L.elem[i].discut;
else
{
temp=L.elem[i].discut;//防止修改座位號(hào)的值
for(int j=0;j<ch4;j++)
{
cout<<" "<<temp-ch4;
temp++;
}
cout<<endl;
}
cout<<"應(yīng)找錢"<<p->data.pay<<endl<<endl;break;
case 2:cout<<"您沒有訂過此票?";break;
case 3:cout<<"沒有此車次";break;
case 4:cout<<"輸入票額多于所訂票額,請重新輸入";break;
}
goback(L);
}//退票系統(tǒng)函數(shù)
void menu4(SqList h)
{
int f=0;
int k=1;
SqList L;
InitList_Sq(L);
L=h;
cout<<"訂票名單"<<endl;
display();
cout<<"終點(diǎn)站 車次 姓名 訂票數(shù) 證件編碼 座位號(hào)"<<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)//輸出訂票人名單時(shí)間復(fù)雜度O(L.len*L.elem[i].la.len)
{
if(h1->next->data.dnum==1)//為了更新查詢時(shí)的座位號(hào),需做出判斷
{
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);
}//查詢訂票名單函數(shù)
void menu(SqList h)
{
int ch;
SqList L;
InitList_Sq(L);
L=h;
display();
cout<<" 火 車 售 票 系 統(tǒng)"<<endl<<endl;
cout<<" 系統(tǒng)說明:"<<endl<<endl;
cout<<" 1.功能:可進(jìn)行車票查詢、訂購、退票等操作,簡單快捷"<<endl;
cout<<" 2.各環(huán)節(jié)都可以顯示出車票的信息(車次、座位等)"<<endl;
cout<<" 3.退票時(shí),需是本站售出的車票才可以退掉"<<endl;
cout<<" 4.任何界面下都可按'q'鍵或其它鍵返回主菜單或相關(guān)菜單"<<endl;
cout<<" 5.本系統(tǒng)滿足<不同車次>的相同操作"<<endl;
cout<<" 6.運(yùn)行環(huán)境:本系統(tǒng)用vc++6.0設(shè)計(jì)完成,請?jiān)赪indows環(huán)境"<<endl;
cout<<" 下運(yùn)行,Windows2000、WindowsXP"<<endl<<endl;
cout<<" 北京"<<endl;
cout<<" ↑"<<endl;
cout<<" 南京←南昌→徐州"<<endl<<endl;
cout<<" 1. 查 詢"<<" 2. 訂 票"<<" 3. 退 票"<<" 4. 訂票名單"<<" 5.系統(tǒng)幫助(暫時(shí)屏蔽)"<<endl;
display();
cout<<"請選擇服務(wù),其它鍵退出"<<endl;
cin>>ch;
switch(ch)
{
case 1: check(L);break;//進(jìn)查詢界面
case 2: checkin(L);break;//進(jìn)訂票界面
case 3: checkout(L);break;//進(jìn)退票界面
case 4: menu4(L);break;//進(jìn)已訂票名單界面
//case 5: help();break;//顯示系統(tǒng)幫助信息
}
}//主菜單
void help()//幫助函數(shù)體
{
SqList L;
InitList_Sq(L);
cout<<" 歡迎你使用本系統(tǒng)"<<endl;
cout<<"1.選擇菜單1,乘客可先查詢車票信息,然后根據(jù)自己的實(shí)際需要選菜單2,進(jìn)行預(yù)定"<<endl;
cout<<"2.如果乘客有意外情況,可以進(jìn)入退票菜單3,按照系統(tǒng)提示,輸入相關(guān)參數(shù),即可完成"<<endl;
cout<<"3.選擇菜單4,乘客也可以隨時(shí)對售出車票進(jìn)行查詢,以便更好的掌握即時(shí)信息"<<endl<<endl;
goback(L);
}
void main()
{
SqList L;
InitList_Sq(L);
Create_Sq(L);//創(chuàng)建順序表
menu(L);//進(jìn)入主菜單
}//主函數(shù)
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -