#include<stdio.h>
#include<string.h>
#define NUM 100
struct trainstation{
char stat[10];
char time1[20];
char time2[20];
};
typedef struct traininfor{
struct trainstation station[10];
char tnumber[20];
float price;
int lnumber;
int noseat;
}pemp;
struct ticket{
char trnumber[20];
char source[10];
char dest[10];
float prices;
char times[20];
int bnumber;
char seat[20];
};
int havetick[100];
pemp traininformation[NUM];
int flag=0;
void menu(pemp *pointtr,struct ticket *pointtk);
void buy(pemp *pointtr,struct ticket *pointtk);
void returnt(pemp *pointtr, struct ticket *pointtk);
void check(pemp *pointtr,struct ticket *pointtk);
void show(struct ticket *pointtk, pemp *pointtr);
void initticket(struct ticket *pointtk);
void exit();
main()
{
struct ticket cheque[NUM];
pemp *pointtr;
struct ticket *pointtk;
pointtr=traininformation;
pointtk=cheque;
strcpy(traininformation[0].station[0].stat,"沈阳");
strcpy(traininformation[0].station[1].stat,"辽阳");
strcpy(traininformation[0].station[2].stat,"鞍山");
strcpy(traininformation[0].station[3].stat,"海城");
strcpy(traininformation[0].station[4].stat,"瓦房店");
strcpy(traininformation[0].station[5].stat,"金州");
strcpy(traininformation[0].station[6].stat,"大连");
strcpy(traininformation[0].tnumber,"T11");
traininformation[0].price=20.00;
traininformation[0].lnumber=200;
traininformation[0].noseat=50;
strcpy(traininformation[1].station[0].stat,"长沙");
strcpy(traininformation[1].station[1].stat,"株洲");
strcpy(traininformation[1].station[2].stat,"湘潭");
strcpy(traininformation[1].station[3].stat,"湘乡");
strcpy(traininformation[1].station[4].stat,"娄底");
strcpy(traininformation[1].station[5].stat,"邵东");
strcpy(traininformation[1].station[6].stat,"邵阳");
strcpy(traininformation[1].tnumber,"k201");
traininformation[1].price=10.00;
traininformation[1].lnumber=100;
traininformation[1].noseat=30;
pointtr=traininformation;
initticket(pointtk);
pointtr=traininformation;
menu(pointtr,pointtk);
}
void initticket(struct ticket *pointtk)
{
pointtk->bnumber=0;
pointtk->prices=0;
strcpy(pointtk->seat,"0");
strcpy(pointtk->times,"0");
strcpy(pointtk->trnumber,"0");
}
void menu(pemp *pointtr,struct ticket *pointtk)
{
int a;
printf("\n\n\n\n ------------目录------------\n");
printf(" 1、查询车票\n");
printf(" 2、购买车票\n");
printf(" 3、退订车票\n");
printf(" 4、退出程序\n");
printf(" 请输入选项序号:\n");
scanf("%d",&a);
if(a==1){
check(pointtr,pointtk);
menu(pointtr,pointtk);
}
else if(a==2) buy(pointtr,pointtk);
else if(a==3) returnt(pointtr,pointtk);
else if(a==4){
printf("谢谢使用");
exit();
}
}
void show(struct ticket *pointtk,pemp *pointtr)
{
printf("这是第%d个符合你要求的列车\n",flag);
printf("车次: ");
printf("%s",pointtk->trnumber);
printf("起始地-------->目的地: ");
printf("%s---------->",pointtk->source);
printf("%s\n",pointtk->dest);
printf("到站时间: ");
printf("%s\n",pointtk->times);
printf("票价: ");
printf("%10.2f\n",pointtk->prices);
printf("有座车票数量: ");
printf("%d\n",pointtr->lnumber);
printf("无座车票数量: ");
printf("%d\n",pointtr->noseat);
}
void check(pemp *pointtr,struct ticket *pointtk)
{
int i,j,k,count=0;
char sour[10];
char destt[10];
flag=0;
pointtr=traininformation;
initticket(pointtk);
printf("请输入起始地:\n");
scanf("%s",sour);
printf("请输入目的地:\n");
scanf("%s",destt);
for(k=0;k<NUM;k++){
for(i=0;i<10;i++){
if(strcmp(traininformation[k].station[i].stat,sour)==0){
for(j=0;j<10;j++){
if(strcmp(traininformation[k].station[j].stat,destt)==0){
strcpy(pointtk->source,traininformation[k].station[i].stat);
strcpy(pointtk->dest,traininformation[k].station[j].stat);
if(i>j){
strcpy(pointtk->times,traininformation[k].station[i].time1);
pointtk->prices=(traininformation[k].price)*(i-j);
}
else{
strcpy(pointtk->times,traininformation[k].station[i].time2);
pointtk->prices=(traininformation[k].price)*(j-i);
}
i=10;
pointtr=&traininformation[k];
show(pointtk,pointtr);
havetick[flag]=k;
flag++;
pointtr++;
count++;
break;
}
}
}
}
}
pointtr=traininformation;
if(count==0){
printf("无信息:\n");
strcpy(pointtk->source,"0");
strcpy(pointtk->dest,"0");
return;
}
}
void buy(pemp *pointtr,struct ticket *pointtk)
{
int choice1,choice2;
int buynumber,num1;
initticket(pointtk);
check(pointtr,pointtk);
if((strcmp(pointtk->dest,"0"))==0){
printf("无此站!返回菜单!\n");
menu(pointtr,pointtk);
}
else{
printf("您确定购买此车票吗?1.是 2.否\n");
scanf("%d",&choice1);
if(choice1==1){
printf("请输入你想购买的列车的序号: \n");
scanf("%d",&num1);
if(num1<flag){
pointtr=&traininformation[havetick[num1]];
printf("请输入您要购买的张数:\n");
scanf("%d",&buynumber);
if(buynumber<0)return;
if(((pointtr->lnumber)-buynumber)>=0){
printf("购买成功!返回菜单!\n");
pointtk->bnumber=buynumber;
pointtr->lnumber-=buynumber;
strcpy(pointtk->seat,"全有座");
menu(pointtr,pointtk);
}
else if(((pointtr->lnumber+pointtr->noseat)-buynumber)>=0){
printf("有座位车票不足是否选择无座位的车票? 1.是 2.否\n");
scanf("%d",&choice2);
if(choice2==1){
printf("购买成功!返回菜单!\n");
pointtk->bnumber=buynumber;
if((pointtr->lnumber)==0){
strcpy(pointtk->seat,"全无座");
(pointtr->noseat)-=buynumber;
}
else{
strcpy(pointtk->seat,"有座和无座都有");
pointtr->noseat=pointtr->noseat-buynumber+pointtr->lnumber;
pointtr->lnumber=0;
}
menu(pointtr,pointtk);
}
else{
printf("放弃购买,返回菜单\n");
menu(pointtr,pointtk);
}
}
else{
printf("车票已售完或不足,不能购买!返回菜单!\n");
menu(pointtr,pointtk);
}
pointtr=traininformation;
}
else return;
}
else if(choice1==2){
printf("放弃购买,返回菜单\n");
menu(pointtr,pointtk);
}
else{
menu(pointtr,pointtk);
printf("错误,返回菜单\n");
menu(pointtr,pointtk);
}
}
}
void returnt(pemp *pointtr,struct ticket *pointtk)
{
int choice=0,i,backnumber1=0,backnumber2=0;
char backnumber[20];
printf("您确定要退票吗?1.是 2.否\n");
scanf("%d",&choice);
if(choice==1){
printf("请输入你要退车票的车次号\n");
scanf("%s",backnumber);
printf("请输入你要退票的有座位的张数\n");
scanf("%d",&backnumber1);
printf("请输入你要退票的无座位的张数\n");
scanf("%d",&backnumber2);
for(i=0;i<NUM;i++){
if(strcmp(pointtr->tnumber,backnumber)==0){
pointtr->lnumber+=backnumber1;
pointtr->noseat+=backnumber2;
break;
}
}
printf("退票成功!返回菜单\n");
menu(pointtr,pointtk);
}
else if(choice==2){
printf("放弃退票,返回菜单\n");
menu(pointtr,pointtk);
}
else{
menu(pointtr,pointtk);
printf("错误,返回菜单");
menu(pointtr,pointtk);
}
}