首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

之前发过一次,现在就只剩上这一个有关问题了

2013-01-12 
之前发过一次,现在就只剩下这一个问题了以下是代码, 你们运行一下,拜托了!!#include stdio.h#include s

之前发过一次,现在就只剩下这一个问题了


以下是代码, 你们运行一下,拜托了!!
#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;
}





                     请按系统指定操作执行,谢谢合作!

*********************    1:订票(Booking Tickets)        ******************
请选择: 1
                         ************************
                           欢迎来到航班订票系统
                         ************************
请输入姓名及身份证号码 (按Enter键结束输入)
dai 234
请输入起点站和终点站 (首字母大写! 例如:Hefei Shanghai) (按Enter键结束输入)
Hefei Shanghai
航班 Hefei 至 Shanghai 信息如下:
        航 班  日  期    起 始 站  终 点 站  时 间  座位量    票  价
        K683   03/13     Hefei     Shanghai  09:30  100       578.00
        K683   03/13     Hefei     Shanghai  11:30  100       578.00


选择您想定的票的时间: (按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);//查看所订票信息*/
            }

引用
这结果 三个座位号相同啊 是userinfostorage()里面的问题吗?


不是,你只是將相同的信息重復打印,看上面紅色的部分。


應該是
Status searching(int *i,int num,int *index, char start[], char to[],char clock[], char name[], char IDcardnum[])//查找航班 返回index的值
這個函數用錯了。

這個函數應該要返回所有找到的航班。

index要為數組,


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;
int x=0;
    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;
                    index[x++]=j;
                    ++k;
                    *i=k;
                    userinfostorage(k,j,name,IDcardnum);//存储用户信息    
                }
            }
        }        
    }
    printf("成功订购了 %d 张机票!\n", num);
    return 0;    
}

热点排行