请高手帮忙如何修改订票系统
程序代码:#include <conio.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
/*定义存储火车信息的结构体*/
struct train
{ char num[10]; /*列车号*/
char city[10]; /*目的城市*/
char takeoffTime[10]; /*发车时间*/
char receiveTime[10]; /*到达时间*/
int checi; /*车次*/
int price; /*票价*/
int bookNum ; /*票数*/
};
/*订票人的信息*/
struct man
{ char trainnum[10]; /*列车号*/
char num[10]; /*ID*/
char name[10]; /*姓名*/
int bookNum ; /*需求的票数*/
};
typedef struct node /*定义火车信息链表的结点结构*/
{
struct train data ;
struct node * next ;
}Node,*Link ;
/*定义订票人链表的结点结构*/
typedef struct people
{
struct man data ;
struct people*next ;
}bookMan,*bookManLink ;
void InsertTraininfo(Link linkhead) /*添加列车数据*/
{
struct node *r,*s,*p;
char num[10];
r = linkhead ;
s = linkhead->next ;
while(r->next!=NULL)
r=r->next ;
while(1)
{
printf("请输入列车号(按0返回)");
scanf("%s",num);
if(strcmp(num,"0")==0)
break ;
while(s) /*判断该列列车信息是否已经存在*/
{
if(strcmp(s->data.num,num)==0)
{
printf(" 第'%s'列列车信息已存在!\n",num);
return ;
}
s = s->next ;
}
p = (struct node*)malloc(sizeof(struct node));
strcpy(p->data.num,num); /*输入列车信息*/
printf("请输入该列车终点站:");
scanf("%s",p->data.city);
printf("请输入该列车出发时间:");
scanf("%s",p->data.takeoffTime);
printf("请输入该列车到达时间:");
scanf("%s",&p->data.receiveTime);
printf("请输入车票价格:");
scanf("%d",&p->data.price);
printf("请输入该列车总票数:");
scanf("%d",&p->data.bookNum);
printf("请输入该列车车次:");
scanf("%d",&p->data.checi);
r->next=p ;
r=p ;
}
p->next=NULL ;
}
void logo() /*主界面函数*/
{ system("cls");
puts("\t\t********************************************************");
puts("\t\t* 欢迎使用列车订票系统 *");
puts("\t\t********************************************************");
puts("\t\t* 选项: *");
puts("\t\t* 1:添加列车数据 *");
puts("\t\t* 2:查询剩余票数 *");
puts("\t\t* 3:定票 *");
puts("\t\t* 4:退票 *");
puts("\t\t* 0:退出 *");
puts("\t\t********************************************************");
}
void Refund(Link l,bookManLink k) /*退票子函数*/
{ Node*r ;
bookMan*v,*h ;
char str[10],str1[10],str2[10];
int mar=0,mar1=0,n;
r=l->next;
h=k->next;
printf("请输入您的姓名:");
scanf("%s",str1);
printf("请输入您的ID:");
scanf("%s",str2);
while(h) /*用户登录*/
{
if(strcmp(h->data.name,str1)==0&&strcmp(h->data.num,str2)==0)
{mar1=1;break;}
h=h->next;
}
if(mar1==1)
{
printf("请输入您要退定哪列列车的票: ");
scanf("%s",str);
printf("请输入您要退的票数: ");
scanf("%d",&n);
while(h)
{
if(strcmp(h->data.trainnum,str)==0&&n==h->data.bookNum)
{mar1=2;break;}
h=h->next;
}
}
while(r&&mar1==2)
{
if(strcmp(r->data.num,str)==0)
{
mar=1 ;
printf("\n恭喜!退订成功!\n\n");
r->data.bookNum=r->data.bookNum+n;
printTrainInfo1(r);break;
}
r=r->next ;
}
if(mar1==0)printf("对不起登录出错!");
if(mar==0&&mar1==1)printf("对不起!您没有定制前往该城市的票!或者您提交票数出错");
}
void BookTicket(Link l,bookManLink k) /*订票子函数*/
{
Node*r[10],*p,*q;
int ch;
bookMan*v,*h ;
int i=0,t=0,dem;
char str[10],str1[10],str2[10],str3[10];
v=k ;
while(v->next!=NULL)
v=v->next ;
printf("请输入您要定制哪个城市的票: ");
scanf("%s",&str);
p=l->next ;
while(p!=NULL)
{
if(strcmp(p->data.city,str)==0)
{
r[i]=p ;
i++;
}
p=p->next ;
}
printf("\n\n相关符合信息:%d\n",i);
for(t=0;t<i;t++)
printTrainInfo(r[t]);
if(i==0)
printf("\n\t\t\t对不起!没有找到!\n");
else
{
printf("\n您确定要定制吗?<1/0>\n");
scanf("%d",&ch);
if(ch == 1)
{
h=(bookMan*)malloc(sizeof(bookMan));
printf("请输入你要定的列车号: ");
scanf("%s",str3);
strcpy(h->data.trainnum,str3);
printf("请输入您的名字: "); /*存储用户信息*/
scanf("%s",&str1);
strcpy(h->data.name,str1);
printf("请输入您的ID: ");
scanf("%s",&str2);
strcpy(h->data.num,str2);
printf("请输入您要定的票数: ");
scanf("%d",&dem);
p=l->next ;
while(p!=NULL) /*列车总票数计算*/
{
if(strcmp(p->data.num,str3)==0)
{p->data.bookNum=p->data.bookNum-dem;
break;
}
p=p->next ;
}
h->data.bookNum=dem ;
h->next=NULL ;
v->next=h ;
v=h ;
printf("\n恭喜!您已经定了 %d 张前往%s的票!",dem,p->data.city);
getch();
}
}
}
printTrainInfo(struct node*p) /*打印火车票信息*/
{
puts("\n信息如下:");
printf(">>列车号: %s\n",p->data.num);
printf(">>终点站: %s\n",p->data.city);
printf(">>出发时间: %s\n",p->data.takeoffTime);
printf(">>到达时间: %s\n",p->data.receiveTime);
printf(">>票价: %d\n",p->data.price);
printf(">>该列车总票数: %d\n",p->data.bookNum);
printf(">>该列车车次: %d\n",p->data.checi);
}
printTrainInfo1(struct node*p) /*打印某列列车总票数*/
{printf(">>目前前往该城市第%s列列车总票数: %d\n",p->data.num,p->data.bookNum);}
void check(Link l) /*查看前往某城市列车总票数*/
{
Node*r ;
char str[10];
int mar=0 ;
r=l->next ;
printf("请输入您要查看前往哪个城市列车的总票数: ");
scanf("%s",str);
while(r)
{
if(strcmp(r->data.city,str)==0&&r->data.bookNum<200)
{
mar=1 ;
printTrainInfo1(r);
}
r=r->next ;
}
if(mar==0)
printf("\n\t\t\t对不起!没有该信息!\n");
}
int main() /*主函数*/
{
int sel;
Link l ;
bookManLink k ;
l=(Node*)malloc(sizeof(Node));
l->next=NULL ;
k=(bookMan*)malloc(sizeof(bookMan));
k->next=NULL ;
while(1)
{
logo();
printf("\t\t请选择: ");
scanf("%d",&sel);
system("cls");
switch(sel)
{
case 1 :
InsertTraininfo(l);break ;
case 2 :
check(l);break ;
case 3 :
BookTicket(l,k);break ;
case 4 :
Refund(l,k);break ;
case 0 :
return 0;
}
printf("\n按任意键继续.......");
getch();
}
return 0;
}
代码没有问题了,现在我想增加一个功能:在订票的时候增加一个座位信息;例如我定3张某航班的票分别打印出每张票的座位号。我想了好久没有头绪,来请教高手,先谢谢了






