之前发过一次,现在就只剩下这一个问题了
以下是代码, 你们运行一下,拜托了!!
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
#define MAX 20
#define N 100
#define Print() printf("\t%-7s%-10s%-10s%-10s%-7s%-10s%-10s\n","航 班","日 期","起 始 站","终 点 站","时 间","座位量","票 价");
#define pprint() printf("\t%-7s%-10s%-10s%-10s%-7s%-10s%-10s\n","航 班","日 期","起 始 站","终 点 站","时 间","座位号","票 价");
typedef int Status;
typedef struct flightnumber{
char flight[MAX];
char date[MAX];
char start[MAX];
char to[MAX];
char clock[MAX];
int seat;
float charge;
} flightnum;
flightnum flight[N]=
{
"","","","","",0,0.0,
"K683","03/13","Hefei","Shanghai","09:30",100,578.0,
"K683","03/13","Hefei","Shanghai","11:30",100,578.0,
"K567","06/17","Shanghai","Hefei","09:30",100,578.0,
"K567","06/17","Shanghai","Hefei","11:30",100,578.0
};
int w=5;
typedef struct userinfo{
char name[MAX];
char IDcardnum[MAX];
int ticket;
char flight[MAX];
char date[MAX];
char start[MAX];
char to[MAX];
char clock[MAX];
int seat;
float charge;
}userinfo; //用户结构体
userinfo user[N]; //userinfo user[N]
Status Homepage();//主要函数
Status Booking();
Status searching( int *i,int num, int *index, char start[], char to[],char clock[], char name[], char IDcardnum[]);
void userinfostorage(int k,int j,char name[],char IDcardnum[]);//对用户而言
void main()
{
Homepage();
}
Status Homepage()
{
int choice;
while(1)
{
printf(" 请按系统指定操作执行,谢谢合作!\n\n");
printf("********************* 1:订票(Booking Tickets)*******************");
printf("请选择: ");
scanf("%d",&choice);
switch(choice)
{
case 1:
Booking();
break;
default:
printf("谢谢光临!\n");
break;
}
}
return 0;
}
Status Booking()//订票
{
static i=0;
int q,n[N];
char a;
char b,c;
int j;
int index;
int num;
char name[MAX];
char IDcardnum[MAX];
char start[MAX];
char clock[MAX];
char to[MAX];
do{
printf("%49s\n%47s\n%49s\n","************************","欢迎来到航班订票系统","************************");
printf("请输入姓名及身份证号码 (按Enter键结束输入)\n");
scanf("%s%s",name,IDcardnum);
printf("请输入起点站和终点站 (首字母大写! 例如:Hefei Shanghai) (按Enter键结束输入)\n");
scanf("%s%s",start,to);
for(j=1,q=1;j<=w;j++){ //查找符合用户输入信息的航班,并确定数量
b=strcmp(flight[j].start,start);
c=strcmp(flight[j].to,to);
if(b==0&&c==0){
n[q]=j;
q++;
}
}
if((q-1)==0){
printf("没有该航班!\n");
Booking();
}
else{
printf("航班 %s 至 %s 信息如下:\n",flight[n[1]].start,flight[n[1]].to);
Print();
for(j=1;j<=q-1;j++){
printf("\t%-7s%-10s%-10s%-10s%-7s%-10d%-5.2f\n",flight[n[j]].flight,flight[n[j]].date,
flight[n[j]].start,flight[n[j]].to,flight[n[j]].clock,flight[n[j]].seat,flight[n[j]].charge);
}
printf("选择您想定的票的时间: (按Enter键结束输入)\n");
scanf("%s",clock);
printf("你想订购几张:");
scanf("%d",&num);
searching(&i,num,&index,start,to,clock,name,IDcardnum);// 显示所订票的信息return i,index
printf("用户 %s 您好,所购机票信息如下: \n\n", name);// user[i].name
pprint();
for(j=1;j<=num;j++){
printf(" %d",j);
printf("\t%-7s%-10s%-10s%-10s%-7s%-10d%-5.2f\n",flight[index].flight,flight[index].date,
flight[index].start,flight[index].to,flight[index].clock,user[i].seat,flight[index].charge);//查看所订票信息*/
}
printf("是否继续订票? (Y/N) (按Enter键结束输入)\n");
scanf(" %c", &a);
getchar();
}
}while(a == 'Y' || a == 'y');
return 0;
}
Status searching(int *i,int num,int *index, char start[], char to[],char clock[], char name[], char IDcardnum[])//查找航班 返回index的值
{
static k=0;
int j,l;
int a,b,c;
for(l=1;l<=num;l++){
for (j=1;j<=w;j++){
a = strcmp(flight[j].start, start);//存在这样的航班
b = strcmp(flight[j].to, to);
c = strcmp(flight[j].clock,clock);
if(a==0 && b==0 && c==0){
if(flight[j].seat>0){
flight[j].seat--;
*index=j;
++k;
*i=k;
userinfostorage(k,j,name,IDcardnum);//存储用户信息
}
}
}
}
printf("成功订购了 %d 张机票!\n", num);
return 0;
}
void userinfostorage(int k, int j,char name[],char IDcardnum[])//用户信息存储
{
int i;
int seat;
srand( time( NULL) );
seat = 1 + rand() % 100;
strcpy(user[k].name,name);
strcpy(user[k].IDcardnum,IDcardnum);
user[k].ticket++;
strcpy(user[k].flight,flight[j].flight);
strcpy(user[k].date,flight[j].date);
strcpy(user[k].start,flight[j].start);
strcpy(user[k].to,flight[j].to);
strcpy(user[k].clock,flight[j].clock);
user[k].seat=seat;
user[k].charge=flight[j].charge;
}
选择您想定的票的时间: (按Enter键结束输入)
09:30
你想订购几张:3
成功订购了 3 张机票!
用户 dai 您好,所购机票信息如下:
航 班 日 期 起 始 站 终 点 站 时 间 座位号 票 价
1 K683 03/13 Hefei Shanghai 09:30 60 578.00
2 K683 03/13 Hefei Shanghai 09:30 60 578.00
3 K683 03/13 Hefei Shanghai 09:30 60 578.00
是否继续订票? (Y/N) (按Enter键结束输入)
这结果 三个座位号相同啊 是userinfostorage()里面的问题吗?
[解决办法]
printf("你想订购几张:");
scanf("%d",&num);
searching(&i,num,&index,start,to,clock,name,IDcardnum);// 显示所订票的信息 return i,index
printf("用户 %s 您好,所购机票信息如下: \n\n", name);// user[i].name
pprint();
for(j=1;j<=num;j++){ //這裡num是票的订购张數,
printf(" %d",j);
printf("\t%-7s%-10s%-10s%-10s%-7s%-10d%-5.2f\n",flight[index].flight,flight[index].date,
flight[index].start,flight[index].to,flight[index].clock,user[i].seat,flight[index].charge);//查看所订票信息*/
}
c = strcmp(flight[j].clock,clock);
if(a==0 && b==0 && c==0){
if(flight[j].seat>0){
flight[j].seat--;
//*index=j;
index[x++]=j;
++k;
*i=k;
userinfostorage(k,j,name,IDcardnum);//存储用户信息
}
}
}
}
printf("成功订购了 %d 张机票!\n", num);
return 0;
}