學生黨做期末作業,現在遇到在訂票那里已輸入客戶ID就卡住了,一直不知道怎么回事,求大佬解答!明天就要交作業了,救救孩子吧
#include<stdio.h>
#include <string.h>
#include <stdlib.h>
#include<conio.h>
#define Max 100
typedef struct hangban
{
char hb_num[20];
char hb_time[20];
char hb_city[20];
int hb_price;
int hb_discount;
int hb_seat;
struct hb *next;
int n;
}HB;
typedef struct kehu
{
char kh_name[20];
char kh_id[20];
char kh_plane_num[20];
char kh_plane_time[20];
int kh_seat_num;
struct kh *next;
}KH;
HB *p_hb;
KH *p_kh;
int n=0;
void Wecome();
void Admin();
void Login();
int Menu();
void Menu_select();
void Init();
void New_flight();
void query();
void booking();
void refund_ticket();
void Save();
void Save_hb();
void Save_kh();
void Load();
void Load_hb();
void Load_kh();
void Wecome() //登錄界面
{
system("cls");
printf("\n\n\n\t\t================================================\n");
printf("\t\t== ==\n");
printf("\t\t== ==\n");
printf("\t\t== 歡迎使用飛機訂票系統: ==\n");
printf("\t\t== Welcome to the air booking system ==\n");
printf("\t\t== ==\n");
printf("\t\t== ==\n");
printf("\t\t================================================\n");
printf("\t\t按任意鍵進入系統..........\n");
getch();
system("cls");
}
void Admin() //管理員系統
{
char yn[2];
printf("是否進入管理員系統?(Y/N):\n");
printf("Do you want to enter the administrator system?(Y/N):");
scanf("%s",yn);
if((strcmp(yn,"Y")==0)||(strcmp(yn,"y")==0))
{
system("cls");
Login();
}else
{
system("cls");
Menu();
}
}
void Login() //管理員登陸
{
char admin[12],mima[12];
char yn[2];
printf("管理員登錄模塊...\n");
printf("Administrator login module...\n");
printf("請輸入管理員用戶名:\n");
printf("Please enter the administrator user name:");
scanf("%s",admin);
printf("請輸入管理員密碼:\n");
printf("Please enter the administrator password:");
scanf("%s",mima);
if((strcmp(admin,"123"))==0&&(strcmp(mima,"123"))==0)
{
printf("用戶名密碼正確!!!請按任意鍵繼續...\n");
printf("User name and password are correct! Please press any key to continue\n");
getch();
system("cls");
New_flight();
}
else
{
printf("用戶名密碼錯誤!!!是否繼續輸入用戶名密碼(Y/N):\n");
printf("User name and password error! Do you want to continue to enter user name and password (Y / N):");
scanf("%s",yn);
if((strcmp(yn,"Y")==0)||(strcmp(yn,"y")==0))
{
system("cls");
Login();
}
else
{
printf("請按任意鍵回傳界面!!!");
printf("Please press any key to return to the interface!!!");
getch();
system("cls");
Wecome();
Menu();
}
}
}
void Init() //初始化
{
HB *p;
p=(HB *)malloc(sizeof(HB));
p_hb=p;
printf("航班資訊初始化開始\n");
printf("航班編號:\n");
scanf("%s",p->hb_num);
printf("航班起降時間:\n");
scanf("%s",p->hb_time);
printf("航班目的地城市:\n");
scanf("%s",p->hb_city);
printf("機票價格:\n");
scanf("%d",&p->hb_price);
printf("機票享受折扣:\n");
scanf("%d",&p->hb_discount);
printf("航班座位數:\n");
scanf("%d",&p->hb_seat);
p->next=NULL;
p->n=++n;
printf("\n航班資訊初始化完成!!!請按任意鍵繼續...");
getch();
system("cls");
}
int Menu() //選單
{
int dm;
printf("\n\n\n\t\t================================================\n");
printf("\t\t== ==\n");
printf("\t\t== 1------錄入 ==\n");
printf("\t\t== 2------查詢 ==\n");
printf("\t\t== 3------訂票 ==\n");
printf("\t\t== 4------退票 ==\n");
printf("\t\t== 5------退出 ==\n");
printf("\t\t== ==\n");
printf("\t\t================================================\n");
printf("請輸入相應編號:");
for(;;)
{
scanf("%d",&dm);
if(dm<1||dm>5)
{
printf("\t\t編號錯誤!!!請重新輸入:!!!");
}
else
break;
}
return dm;
}
void Menu_select() //選單選擇
{
for(;;)
{
switch(Menu())
{
case 5:
system("cls");
Save();
printf("\n\n\n\t\t================================================\n");
printf("\t\t== ==\n");
printf("\t\t== 檔案保存成功!!! ==\n");
printf("\t\t== 歡迎下次使用本系統!!! ==\n");
printf("\t\t== ==\n");
printf("\t\t================================================\n");
getch();
exit(0);
case 1:Admin();break;
case 2:query();break;
case 3:booking();break;
//case 4:refund_ticket();break;
default:printf("\n錯誤!!!");
exit(0);
}
}
}
void New_flight() //錄入新航班
{
HB *p,*p0,*p1;
p=p1=p_hb;
printf("新航班錄入模塊...\n");
printf("請輸入您要錄入的新航班資訊\n");
p0=(HB *)malloc(sizeof(HB));
S:
printf("航班編號:\n");
scanf("%s",p0->hb_num);
while(strcmp(p0->hb_num,p1->hb_num)!=0&&p1->next!=NULL)
p1=p1->next;
if(strcmp(p0->hb_num,p1->hb_num)==0)
{
printf("該航班編號已存在!!!請重新輸入:");
goto S;
system("cls");
}
else
{
printf("航班起降時間:\n");
scanf("%s",p0->hb_time);
printf("航班目的地城市:\n");
scanf("%s",p0->hb_city);
printf("機票價格:\n");
scanf("%d",&p0->hb_price);
printf("機票享受折扣:\n");
scanf("%d",&p0->hb_discount);
printf("航班座位數:\n");
scanf("%d",&p0->hb_seat);
while(p->next)
p=p->next;
if(p_hb==NULL)
p_hb=p0; /*此處分兩種情況,鏈表中沒有資料,head直接指向p0處*/
else
p->next=p0;
p0->next=NULL;
p0->n=++n;
}
printf("\n新航班已錄入完畢!!!請按任意鍵繼續...");
getch();
system("cls");
Wecome();
}
void query() //查詢
{
HB *p;
int i,x;
char city[20],num[20];
p=p_hb;
printf("\n\n\n\t\t======================================================\n");
printf("\t\t== 查詢系統: ==\n");
printf("\t\t== 1------客戶ID查詢 ==\n");
printf("\t\t== 2------目的地查詢 ==\n");
printf("\t\t== 3------退出系統 ==\n");
printf("\t\t== ==\n");
printf("\t\t== ==\n");
printf("\t\t== ==\n");
printf("\t\t======================================================\n");
printf("請輸入編號(1-3):");
scanf("%d",&x);
switch(x)
{
case 1:printf("請輸入您的客戶ID:");
scanf("%s",&num);
printf("您輸入客戶ID已訂票的航班如下:\n");
case 2:printf("請輸入您的目的地:");
scanf("%s",&city);
printf("您輸入的目的地現有航班如下:\n");
printf("航班編號\t起降時間\t目的地城市\t機票價格\t機票折扣\t航班座位\n");
for(i=0;i<p->n;i++)
{
if(strcmp(p->hb_city,city)==0)
{
printf("%s\t%s\t%s\t%d\t%d\t%d\n",p->hb_num,p->hb_time,p->hb_city,p->hb_price,p->hb_discount,p->hb_seat);
p=p->next;
}
}
printf("航班資訊列印完畢!按任意鍵繼續下一步操作...");
getch();
system("cls");
}
}
void booking() //訂票
{
HB *p0; KH *p1,*p2,*p3;
int i;
char hb_city[20],hb_time[20];
p1=p3=p_kh;
p2=(KH *)malloc(sizeof(KH));
I:
printf("訂票系統...\n");
printf("請輸入您的客戶ID:\n");
scanf("%s",p2->kh_id);
while(strcmp(p2->kh_id,p3->kh_id)!=0&&p3->next!=NULL)
p3=p3->next;
if(strcmp(p2->kh_id,p3->kh_id)==0)
{
printf("該客戶ID已存在!!!請勿進行多次訂票");
goto I;
system("cls");
}
else
{
printf("請輸入您的名字:\n");
scanf("%s",p1->kh_name);
}
printf("請輸入您要前往的目的地:\n");
scanf("%s",&hb_city);
while(p0->next!=NULL&&strcmp(hb_city,p0->hb_city)!=0)
p0=p0->next;
if(p0->next!=NULL&&(strcmp(hb_city,p0->hb_city)!=0))
{
printf("沒有前往該目的地的航班!!!");
printf("請按任意鍵回傳\n");
}else
{
printf("您輸入的目的地現有航班如下:\n");
printf("航班編號\t起降時間\t目的地城市\t機票價格\t機票折扣\t航班座位\n");
for(i=0;i<p0->n;i++)
{
if(strcmp(p0->hb_city,hb_city)==0)
{
printf("%s\t%s\t%s\t%d\t%d\t%d\n",p0->hb_num,p0->hb_time,p0->hb_city,p0->hb_price,p0->hb_discount,p0->hb_seat);
p0=p0->next;
}
}
}
}
void Save()
{
Save_hb();
Save_kh();
}
void Save_hb()
{
FILE *fh_hb;
HB *t,*t0;
t=p_hb;
if((fh_hb=fopen("hangban.txt","wb"))==NULL)
{
printf("\n檔案保存失敗!\n請重啟本系統...");
exit(0);
}
while(t!=NULL)
{
if(fwrite(t,sizeof(HB),1,fh_hb)!=1) //寫入檔案
{
printf("\n寫入檔案失敗!\n請重啟本系統...\n");
t0=t;
t=t->next;
free(t0); //釋放所有結點
}
}
}
void Save_kh()
{
FILE *fh_kh;
KH *t,*t0;
t=p_kh;
if((fh_kh=fopen("kehu.txt","wb"))==NULL)
{
printf("\n檔案保存失敗!\n請重啟本系統...");
exit(0);
}
while(t!=NULL)
{
if(fwrite(t,sizeof(KH),1,fh_kh)!=1) //寫入檔案
{
printf("\n寫入檔案失敗!\n請重啟本系統...\n");
t0=t;
t=t->next;
free(t0);
}
}
}
void Load()
{
Load_hb();
Load_kh();
}
void Load_hb()
{
HB *p1,*p2,*p3;
FILE *fh;
fh=fopen("hangban.txt","rb");
p1=(HB *)malloc(sizeof(HB));
fread(p1,sizeof(HB),1,fh);
p_hb=p3=p2=p1;
while(! feof(fh))
{
p1=(HB *)malloc(sizeof(HB));
fread(p1,sizeof(HB),1,fh);
p2->next=p1;
p3=p2;
p2=p1;
}
p3->next=NULL;
free(p1);
fclose(fh); //關閉檔案
}
void Load_kh()
{
KH *p1,*p2,*p3;
FILE *fh;
fh=fopen("kehu.txt","rb");
p1=(HB *)malloc(sizeof(HB));
fread(p1,sizeof(HB),1,fh);
p_kh=p3=p2=p1;
while(! feof(fh))
{
p1=(KH *)malloc(sizeof(KH));
fread(p1,sizeof(KH),1,fh);
p2->next=p1;
p3=p2;
p2=p1;
}
p3->next=NULL;
free(p1);
fclose(fh);
}
int main()
{
FILE *fh_hb,*fh_kh;
Wecome();
if((fh_hb=fopen("hangban.txt","rb"))==NULL||(fh_kh=fopen("kehu.txt","rb"))==NULL)
{
Init();
}else
Load();
Menu_select();
}
uj5u.com熱心網友回復:
typedef struct hangban
{
char hb_num[20];
char hb_time[20];
char hb_city[20];
int hb_price;
int hb_discount;
int hb_seat;
//struct hb *next;
struct hangban *next;
int n;
}HB;
typedef struct kehu
{
char kh_name[20];
char kh_id[20];
char kh_plane_num[20];
char kh_plane_time[20];
int kh_seat_num;
//struct kh *next;
struct kehu *next;
}KH;
修改結構體定義
void booking() //訂票
{
HB *p0; KH *p1,*p2,*p3;
int i;
char hb_city[20],hb_time[20];
p1=p3=p_kh;
p2=(KH *)malloc(sizeof(KH));
I:
printf("訂票系統...\n");
printf("請輸入您的客戶ID:\n");
scanf("%s",p2->kh_id);
//while(strcmp(p2->kh_id,p3->kh_id)!=0&&p3->next!=NULL) //如果p3本身就是NULL怎么辦?
while(p3 && strcmp(p2->kh_id,p3->kh_id)!=0&&p3->next!=NULL) //如果p3本身就是NULL怎么辦?
p3=p3->next;
if(p3 && strcmp(p2->kh_id,p3->kh_id)==0)
{
printf("該客戶ID已存在!!!請勿進行多次訂票");
goto I;
system("cls");
}
else
{
printf("請輸入您的名字:\n");
scanf("%s",p1->kh_name);
}
printf("請輸入您要前往的目的地:\n");
//scanf("%s",&hb_city);
scanf("%s", hb_city);
p0 = p_hb; //需要初始化p0
//while(p0->next!=NULL&&strcmp(hb_city,p0->hb_city)!=0) //p0沒有初始化,是一個野指標
while(p0 && p0->next!=NULL&&strcmp(hb_city,p0->hb_city)!=0) //p0沒有初始化,是一個野指標
p0=p0->next;
if(p0 && p0->next!=NULL&&(strcmp(hb_city,p0->hb_city)!=0))
{
printf("沒有前往該目的地的航班!!!");
printf("請按任意鍵回傳\n");
}else
{
printf("您輸入的目的地現有航班如下:\n");
printf("航班編號\t起降時間\t目的地城市\t機票價格\t機票折扣\t航班座位\n");
for(i=0;i<p0->n;i++)
{
if(strcmp(p0->hb_city,hb_city)==0)
{
printf("%s\t%s\t%s\t%d\t%d\t%d\n",p0->hb_num,p0->hb_time,p0->hb_city,p0->hb_price,p0->hb_discount,p0->hb_seat);
p0=p0->next;
}
}
}
}
函式的修改
供參考~
uj5u.com熱心網友回復:
那請問p0怎么初始化,我這些很多都是從老師給的那個例案抽出來了,然后這里又沒學好然后大佬能解釋一下這段while(p0 && p0->next!=NULL&&strcmp(hb_city,p0->hb_city)!=0)是什么意思嗎邏輯不是很懂為什么你要加p0&&
uj5u.com熱心網友回復:
現在在查詢和訂票系統那里卡住了無法進行下一步#include<stdio.h>
#include <string.h>
#include <stdlib.h>
#include<conio.h>
#define Max 100
typedef struct hangban
{
char hb_num[20];
char hb_time[20];
char hb_city[20];
int hb_price;
int hb_discount;
int hb_seat;
struct hangnban *next;
int n;
}HB;
typedef struct kehu
{
char kh_name[20];
char kh_id[20];
char kh_plane_num[20];
char kh_plane_time[20];
int kh_seat_num;
struct kehu *next;
}KH;
HB *p_hb;
KH *p_kh;
int n=0;
void Wecome();
void Admin();
void Login();
int Menu();
void Menu_select();
void Init();
void New_flight();
void query();
void booking();
void refund_ticket();
void Save();
void Save_hb();
void Save_kh();
void Load();
void Load_hb();
void Load_kh();
void Wecome() //μ???????
{
system("cls");
printf("\n\n\n\t\t================================================\n");
printf("\t\t== ==\n");
printf("\t\t== ==\n");
printf("\t\t== ??ó-ê1ó?·é?ú???±?μí3: ==\n");
printf("\t\t== Welcome to the air booking system ==\n");
printf("\t\t== ==\n");
printf("\t\t== ==\n");
printf("\t\t================================================\n");
printf("\t\t°′è?òa?ü??è??μí3..........\n");
getch();
system("cls");
}
void Admin() //1üàí?±?μí3
{
char yn[2];
printf("ê?·???è?1üàí?±?μí3?(Y/N):\n");
printf("Do you want to enter the administrator system?(Y/N):");
scanf("%s",yn);
if((strcmp(yn,"Y")==0)||(strcmp(yn,"y")==0))
{
system("cls");
Login();
}else
{
system("cls");
Menu();
}
}
void Login() //1üàí?±μ???
{
char admin[12],mima[12];
char yn[2];
printf("1üàí?±μ????£?é...\n");
printf("Administrator login module...\n");
printf("??ê?è?1üàí?±ó??§??:\n");
printf("Please enter the administrator user name:");
scanf("%s",admin);
printf("??ê?è?1üàí?±?ü??:\n");
printf("Please enter the administrator password:");
scanf("%s",mima);
if((strcmp(admin,"123"))==0&&(strcmp(mima,"123"))==0)
{
printf("ó??§???ü???yè·!!!??°′è?òa?ü?ìD?...\n");
printf("User name and password are correct! Please press any key to continue\n");
getch();
system("cls");
New_flight();
}
else
{
printf("ó??§???ü??′í?ó!!!ê?·??ìD?ê?è?ó??§???ü??(Y/N):\n");
printf("User name and password error! Do you want to continue to enter user name and password (Y / N):");
scanf("%s",yn);
if((strcmp(yn,"Y")==0)||(strcmp(yn,"y")==0))
{
system("cls");
Login();
}
else
{
printf("??°′è?òa?ü·μ??????!!!");
printf("Please press any key to return to the interface!!!");
getch();
system("cls");
Wecome();
Menu();
}
}
}
void Init() //3?ê??ˉ
{
HB *p;
p=(HB *)malloc(sizeof(HB));
p_hb=p;
printf("o?°àD??¢3?ê??ˉ?aê?\n");
printf("o?°à±ào?:\n");
scanf("%s",p->hb_num);
printf("o?°à?e?μê±??:\n");
scanf("%s",p->hb_time);
printf("o?°à??μ?μ?3?êD:\n");
scanf("%s",p->hb_city);
printf("?ú?±????:\n");
scanf("%d",&p->hb_price);
printf("?ú?±?íêü????:\n");
scanf("%d",&p->hb_discount);
printf("o?°à×ù??êy:\n");
scanf("%d",&p->hb_seat);
p->next=NULL;
p->n=++n;
printf("\no?°àD??¢3?ê??ˉíê3é!!!??°′è?òa?ü?ìD?...");
getch();
system("cls");
}
int Menu() //2?μ¥
{
int dm;
printf("\n\n\n\t\t================================================\n");
printf("\t\t== ==\n");
printf("\t\t== 1------??è? ==\n");
printf("\t\t== 2------2é?ˉ ==\n");
printf("\t\t== 3------???± ==\n");
printf("\t\t== 4------í??± ==\n");
printf("\t\t== 5------í?3? ==\n");
printf("\t\t== ==\n");
printf("\t\t================================================\n");
printf("??ê?è??àó|±ào?:");
for(;;)
{
scanf("%d",&dm);
if(dm<1||dm>5)
{
printf("\t\t±ào?′í?ó!!!????D?ê?è?:!!!");
}
else
break;
}
return dm;
}
void Menu_select() //2?μ¥????
{
for(;;)
{
switch(Menu())
{
case 5:
system("cls");
Save();
printf("\n\n\n\t\t================================================\n");
printf("\t\t== ==\n");
printf("\t\t== ???t±£′?3é1|!!! ==\n");
printf("\t\t== ??ó-??′?ê1ó?±??μí3!!! ==\n");
printf("\t\t== ==\n");
printf("\t\t================================================\n");
getch();
exit(0);
case 1:Admin();break;
case 2:query();break;
case 3:booking();break;
//case 4:refund_ticket();break;
default:printf("\n′í?ó!!!");
exit(0);
}
}
}
void New_flight() //??è?D?o?°à
{
HB *p,*p0,*p1;
p=p1=p_hb;
printf("D?o?°à??è??£?é...\n");
printf("??ê?è??úòa??è?μ?D?o?°àD??¢\n");
p0=(HB *)malloc(sizeof(HB));
S:
printf("o?°à±ào?:\n");
scanf("%s",p0->hb_num);
while(strcmp(p0->hb_num,p1->hb_num)!=0&&p1->next!=NULL)
p1=p1->next;
if(strcmp(p0->hb_num,p1->hb_num)==0)
{
printf("??o?°à±ào?ò?′??ú!!!????D?ê?è?:");
goto S;
system("cls");
}
else
{
printf("o?°à?e?μê±??:\n");
scanf("%s",p0->hb_time);
printf("o?°à??μ?μ?3?êD:\n");
scanf("%s",p0->hb_city);
printf("?ú?±????:\n");
scanf("%d",&p0->hb_price);
printf("?ú?±?íêü????:\n");
scanf("%d",&p0->hb_discount);
printf("o?°à×ù??êy:\n");
scanf("%d",&p0->hb_seat);
while(p->next)
p=p->next;
if(p_hb==NULL)
p_hb=p0; /*′?′|·?á????é??,á′±í?D??óDêy?Y,head?±?ó???òp0′|*/
else
p->next=p0;
p0->next=NULL;
p0->n=++n;
}
printf("\nD?o?°àò???è?íê±?!!!??°′è?òa?ü?ìD?...");
getch();
system("cls");
Wecome();
}
void query() //2é?ˉ
{
HB *p;
int i,x;
char city[20],num[20];
p=p_hb;
printf("\n\n\n\t\t======================================================\n");
printf("\t\t== 2é?ˉ?μí3: ==\n");
printf("\t\t== 1------?í?§ID2é?ˉ ==\n");
printf("\t\t== 2------??μ?μ?2é?ˉ ==\n");
printf("\t\t== 3------·μ?????? ==\n");
printf("\t\t== ==\n");
printf("\t\t== ==\n");
printf("\t\t== ==\n");
printf("\t\t======================================================\n");
printf("??ê?è?±ào?(1-3):");
scanf("%d",&x);
switch(x)
{
case 1:printf("??ê?è??úμ??í?§ID:");
scanf("%s",&num);
printf("?úê?è??í?§IDò????±μ?o?°àè???:\n");
case 2:printf("??ê?è??úμ???μ?μ?:");
scanf("%s",&city);
printf("?úê?è?μ???μ?μ???óDo?°àè???:\n");
printf("o?°à±ào?\t?e?μê±??\t??μ?μ?3?êD\t?ú?±????\t?ú?±????\to?°à×ù??\n");
for(i=0;i<p->n;i++)
{
if(strcmp(city,p->hb_city)==0)
{
printf("%s\t%s\t%s\t%d\t%d\t%d\n",p->hb_num,p->hb_time,p->hb_city,p->hb_price,p->hb_discount,p->hb_seat);
p=p->next;
}
}
printf("o?°àD??¢′òó?íê±?!°′è?òa?ü?ìD???ò?2?2ù×÷...");
getch();
system("cls");
Menu();
case 3:getch();
system("cls");
Menu();
}
}
void booking() //???±
{
HB *p0; KH *p1,*p2,*p3;
int i;
char hb_city[20],hb_time[20];
p1=p3=p_kh;
p2=(KH *)malloc(sizeof(KH));
p0=p_hb;
I:
printf("???±?μí3...\n");
printf("??ê?è??úμ??í?§ID:\n");
scanf("%s",p2->kh_id);
//while(strcmp(p2->kh_id,p3->kh_id)!=0&&p3->next!=NULL) //è?1?p3±?éí?íê?NULL???′°ì£?
while(p3 && strcmp(p2->kh_id,p3->kh_id)!=0&&p3->next!=NULL) //è?1?p3±?éí?íê?NULL???′°ì£?
p3=p3->next;
if(p3 && strcmp(p2->kh_id,p3->kh_id)==0)
{
printf("???í?§IDò?′??ú!!!???e??DD?à′????±");
goto I;
system("cls");
}
printf("??ê?è??úμ???×?:\n");
scanf("%s",p2->kh_name);
printf("??ê?è??úòa?°íùμ???μ?μ?:\n");
scanf("%s", hb_city);
while(p0 && p0->next!=NULL&&strcmp(hb_city,p0->hb_city)!=0)
p0=p0->next;
if(p0 && p0->next!=NULL&&(strcmp(hb_city,p0->hb_city)!=0))
{
printf("??óD?°íù????μ?μ?μ?o?°à!!!");
printf("??°′è?òa?ü·μ??\n");
}else
{
printf("?úê?è?μ???μ?μ???óDo?°àè???:\n");
printf("o?°à±ào?\t?e?μê±??\t??μ?μ?3?êD\t?ú?±????\t?ú?±????\to?°à×ù??\n");
for(i=0;i<p0->n;i++)
{
if(strcmp(p0->hb_city,hb_city)==0)
{
printf("%s\t%s\t%s\t%d\t%d\t%d\n",p0->hb_num,p0->hb_time,p0->hb_city,p0->hb_price,p0->hb_discount,p0->hb_seat);
p0=p0->next;
}
}
printf("??ê?è??úòa3?×?μ?o?°à±ào?:");
scanf("%s",p2->kh_plane_num);
while(p0 && p0->next!=NULL&&strcmp(p2->kh_plane_num,p0->hb_num)!=0)
p0=p0->next;
for(i=0;i<p0->n;i++)
{
if(strcmp(p2->kh_plane_num,p0->hb_num)==0)
{
strcpy(p2->kh_plane_num,p0->hb_num);
strcpy(p2->kh_plane_time,p0->hb_time);
p2->kh_seat_num++;
}
}
}
}
void Save()
{
Save_hb();
Save_kh();
}
void Save_hb()
{
FILE *fh_hb;
HB *t,*t0;
t=p_hb;
if((fh_hb=fopen("hangban.txt","wb"))==NULL)
{
printf("\n???t±£′?ê§°ü!\n??????±??μí3...");
exit(0);
}
while(t!=NULL)
{
if(fwrite(t,sizeof(HB),1,fh_hb)!=1) //D′è????t
{
printf("\nD′è????tê§°ü!\n??????±??μí3...\n");
t0=t;
t=t->next;
free(t0); //êí·??ùóD?áμ?
}
}
}
void Save_kh()
{
FILE *fh_kh;
KH *t,*t0;
t=p_kh;
if((fh_kh=fopen("kehu.txt","wb"))==NULL)
{
printf("\n???t±£′?ê§°ü!\n??????±??μí3...");
exit(0);
}
while(t!=NULL)
{
if(fwrite(t,sizeof(KH),1,fh_kh)!=1) //D′è????t
{
printf("\nD′è????tê§°ü!\n??????±??μí3...\n");
t0=t;
t=t->next;
free(t0);
}
}
}
void Load()
{
Load_hb();
Load_kh();
}
void Load_hb()
{
HB *p1,*p2,*p3;
FILE *fh;
fh=fopen("hangban.txt","rb");
p1=(HB *)malloc(sizeof(HB));
fread(p1,sizeof(HB),1,fh);
p_hb=p3=p2=p1;
while(! feof(fh))
{
p1=(HB *)malloc(sizeof(HB));
fread(p1,sizeof(HB),1,fh);
p2->next=p1;
p3=p2;
p2=p1;
}
p3->next=NULL;
free(p1);
fclose(
uj5u.com熱心網友回復:
#include<stdio.h>
#include <string.h>
#include <stdlib.h>
#include<conio.h>
#define Max 100
typedef struct hangban
{
char hb_num[20];
char hb_time[20];
char hb_city[20];
int hb_price;
int hb_discount;
int hb_seat;
struct hangnban *next;
int n;
}HB;
typedef struct kehu
{
char kh_name[20];
char kh_id[20];
char kh_plane_num[20];
char kh_plane_time[20];
int kh_seat_num;
struct kehu *next;
}KH;
HB *p_hb;
KH *p_kh;
int n=0;
void Wecome();
void Admin();
void Login();
int Menu();
void Menu_select();
void Init();
void New_flight();
void query();
void booking();
void refund_ticket();
void Save();
void Save_hb();
void Save_kh();
void Load();
void Load_hb();
void Load_kh();
void Wecome() //登錄界面
{
system("cls");
printf("\n\n\n\t\t================================================\n");
printf("\t\t== ==\n");
printf("\t\t== ==\n");
printf("\t\t== 歡迎使用飛機訂票系統: ==\n");
printf("\t\t== Welcome to the air booking system ==\n");
printf("\t\t== ==\n");
printf("\t\t== ==\n");
printf("\t\t================================================\n");
printf("\t\t按任意鍵進入系統..........\n");
getch();
system("cls");
}
void Admin() //管理員系統
{
char yn[2];
printf("是否進入管理員系統?(Y/N):\n");
printf("Do you want to enter the administrator system?(Y/N):");
scanf("%s",yn);
if((strcmp(yn,"Y")==0)||(strcmp(yn,"y")==0))
{
system("cls");
Login();
}else
{
system("cls");
Menu();
}
}
void Login() //管理員登陸
{
char admin[12],mima[12];
char yn[2];
printf("管理員登錄模塊...\n");
printf("Administrator login module...\n");
printf("請輸入管理員用戶名:\n");
printf("Please enter the administrator user name:");
scanf("%s",admin);
printf("請輸入管理員密碼:\n");
printf("Please enter the administrator password:");
scanf("%s",mima);
if((strcmp(admin,"123"))==0&&(strcmp(mima,"123"))==0)
{
printf("用戶名密碼正確!!!請按任意鍵繼續...\n");
printf("User name and password are correct! Please press any key to continue\n");
getch();
system("cls");
New_flight();
}
else
{
printf("用戶名密碼錯誤!!!是否繼續輸入用戶名密碼(Y/N):\n");
printf("User name and password error! Do you want to continue to enter user name and password (Y / N):");
scanf("%s",yn);
if((strcmp(yn,"Y")==0)||(strcmp(yn,"y")==0))
{
system("cls");
Login();
}
else
{
printf("請按任意鍵回傳界面!!!");
printf("Please press any key to return to the interface!!!");
getch();
system("cls");
Wecome();
Menu();
}
}
}
void Init() //初始化
{
HB *p;
p=(HB *)malloc(sizeof(HB));
p_hb=p;
printf("航班資訊初始化開始\n");
printf("航班編號:\n");
scanf("%s",p->hb_num);
printf("航班起降時間:\n");
scanf("%s",p->hb_time);
printf("航班目的地城市:\n");
scanf("%s",p->hb_city);
printf("機票價格:\n");
scanf("%d",&p->hb_price);
printf("機票享受折扣:\n");
scanf("%d",&p->hb_discount);
printf("航班座位數:\n");
scanf("%d",&p->hb_seat);
p->next=NULL;
p->n=++n;
printf("\n航班資訊初始化完成!!!請按任意鍵繼續...");
getch();
system("cls");
}
int Menu() //選單
{
int dm;
printf("\n\n\n\t\t================================================\n");
printf("\t\t== ==\n");
printf("\t\t== 1------錄入 ==\n");
printf("\t\t== 2------查詢 ==\n");
printf("\t\t== 3------訂票 ==\n");
printf("\t\t== 4------退票 ==\n");
printf("\t\t== 5------退出 ==\n");
printf("\t\t== ==\n");
printf("\t\t================================================\n");
printf("請輸入相應編號:");
for(;;)
{
scanf("%d",&dm);
if(dm<1||dm>5)
{
printf("\t\t編號錯誤!!!請重新輸入:!!!");
}
else
break;
}
return dm;
}
void Menu_select() //選單選擇
{
for(;;)
{
switch(Menu())
{
case 5:
system("cls");
Save();
printf("\n\n\n\t\t================================================\n");
printf("\t\t== ==\n");
printf("\t\t== 檔案保存成功!!! ==\n");
printf("\t\t== 歡迎下次使用本系統!!! ==\n");
printf("\t\t== ==\n");
printf("\t\t================================================\n");
getch();
exit(0);
case 1:Admin();break;
case 2:query();break;
case 3:booking();break;
//case 4:refund_ticket();break;
default:printf("\n錯誤!!!");
exit(0);
}
}
}
void New_flight() //錄入新航班
{
HB *p,*p0,*p1;
p=p1=p_hb;
printf("新航班錄入模塊...\n");
printf("請輸入您要錄入的新航班資訊\n");
p0=(HB *)malloc(sizeof(HB));
S:
printf("航班編號:\n");
scanf("%s",p0->hb_num);
while(strcmp(p0->hb_num,p1->hb_num)!=0&&p1->next!=NULL)
p1=p1->next;
if(strcmp(p0->hb_num,p1->hb_num)==0)
{
printf("該航班編號已存在!!!請重新輸入:");
goto S;
system("cls");
}
else
{
printf("航班起降時間:\n");
scanf("%s",p0->hb_time);
printf("航班目的地城市:\n");
scanf("%s",p0->hb_city);
printf("機票價格:\n");
scanf("%d",&p0->hb_price);
printf("機票享受折扣:\n");
scanf("%d",&p0->hb_discount);
printf("航班座位數:\n");
scanf("%d",&p0->hb_seat);
while(p->next)
p=p->next;
if(p_hb==NULL)
p_hb=p0; /*此處分兩種情況,鏈表中沒有資料,head直接指向p0處*/
else
p->next=p0;
p0->next=NULL;
p0->n=++n;
}
printf("\n新航班已錄入完畢!!!請按任意鍵繼續...");
getch();
system("cls");
Wecome();
}
void query() //查詢
{
HB *p;
int i,x;
char city[20],num[20];
p=p_hb;
printf("\n\n\n\t\t======================================================\n");
printf("\t\t== 查詢系統: ==\n");
printf("\t\t== 1------客戶ID查詢 ==\n");
printf("\t\t== 2------目的地查詢 ==\n");
printf("\t\t== 3------回傳界面 ==\n");
printf("\t\t== ==\n");
printf("\t\t== ==\n");
printf("\t\t== ==\n");
printf("\t\t======================================================\n");
printf("請輸入編號(1-3):");
scanf("%d",&x);
switch(x)
{
case 1:printf("請輸入您的客戶ID:");
scanf("%s",&num);
printf("您輸入客戶ID已訂票的航班如下:\n");
case 2:printf("請輸入您的目的地:");
scanf("%s",&city);
printf("您輸入的目的地現有航班如下:\n");
printf("航班編號\t起降時間\t目的地城市\t機票價格\t機票折扣\t航班座位\n");
for(i=0;i<p->n;i++)
{
if(strcmp(city,p->hb_city)==0)
{
printf("%s\t%s\t%s\t%d\t%d\t%d\n",p->hb_num,p->hb_time,p->hb_city,p->hb_price,p->hb_discount,p->hb_seat);
p=p->next;
}
}
printf("航班資訊列印完畢!按任意鍵繼續下一步操作...");
getch();
system("cls");
Menu();
case 3:getch();
system("cls");
Menu();
}
}
void booking() //訂票
{
HB *p0; KH *p1,*p2,*p3;
int i;
char hb_city[20],hb_time[20];
p1=p3=p_kh;
p2=(KH *)malloc(sizeof(KH));
p0=p_hb;
I:
printf("訂票系統...\n");
printf("請輸入您的客戶ID:\n");
scanf("%s",p2->kh_id);
//while(strcmp(p2->kh_id,p3->kh_id)!=0&&p3->next!=NULL) //如果p3本身就是NULL怎么辦?
while(p3 && strcmp(p2->kh_id,p3->kh_id)!=0&&p3->next!=NULL) //如果p3本身就是NULL怎么辦?
p3=p3->next;
if(p3 && strcmp(p2->kh_id,p3->kh_id)==0)
{
printf("該客戶ID已存在!!!請勿進行多次訂票");
goto I;
system("cls");
}
printf("請輸入您的名字:\n");
scanf("%s",p2->kh_name);
printf("請輸入您要前往的目的地:\n");
scanf("%s", hb_city);
while(p0 && p0->next!=NULL&&strcmp(hb_city,p0->hb_city)!=0)
p0=p0->next;
if(p0 && p0->next!=NULL&&(strcmp(hb_city,p0->hb_city)!=0))
{
printf("沒有前往該目的地的航班!!!");
printf("請按任意鍵回傳\n");
}else
{
printf("您輸入的目的地現有航班如下:\n");
printf("航班編號\t起降時間\t目的地城市\t機票價格\t機票折扣\t航班座位\n");
for(i=0;i<p0->n;i++)
{
if(strcmp(p0->hb_city,hb_city)==0)
{
printf("%s\t%s\t%s\t%d\t%d\t%d\n",p0->hb_num,p0->hb_time,p0->hb_city,p0->hb_price,p0->hb_discount,p0->hb_seat);
p0=p0->next;
}
}
printf("請輸入您要乘坐的航班編號:");
scanf("%s",p2->kh_plane_num);
while(p0 && p0->next!=NULL&&strcmp(p2->kh_plane_num,p0->hb_num)!=0)
p0=p0->next;
for(i=0;i<p0->n;i++)
{
if(strcmp(p2->kh_plane_num,p0->hb_num)==0)
{
strcpy(p2->kh_plane_num,p0->hb_num);
strcpy(p2->kh_plane_time,p0->hb_time);
p2->kh_seat_num++;
}
}
}
}
void Save()
{
Save_hb();
Save_kh();
}
void Save_hb()
{
FILE *fh_hb;
HB *t,*t0;
t=p_hb;
if((fh_hb=fopen("hangban.txt","wb"))==NULL)
{
printf("\n檔案保存失敗!\n請重啟本系統...");
exit(0);
}
while(t!=NULL)
{
if(fwrite(t,sizeof(HB),1,fh_hb)!=1) //寫入檔案
{
printf("\n寫入檔案失敗!\n請重啟本系統...\n");
t0=t;
t=t->next;
free(t0); //釋放所有結點
}
}
}
void Save_kh()
{
FILE *fh_kh;
KH *t,*t0;
t=p_kh;
if((fh_kh=fopen("kehu.txt","wb"))==NULL)
{
printf("\n檔案保存失敗!\n請重啟本系統...");
exit(0);
}
while(t!=NULL)
{
if(fwrite(t,sizeof(KH),1,fh_kh)!=1) //寫入檔案
{
printf("\n寫入檔案失敗!\n請重啟本系統...\n");
t0=t;
t=t->next;
free(t0);
}
}
}
void Load()
{
Load_hb();
Load_kh();
}
void Load_hb()
{
HB *p1,*p2,*p3;
FILE *fh;
fh=fopen("hangban.txt","rb");
p1=(HB *)malloc(sizeof(HB));
fread(p1,sizeof(HB),1,fh);
p_hb=p3=p2=p1;
while(! feof(fh))
{
p1=(HB *)malloc(sizeof(HB));
fread(p1,sizeof(HB),1,fh);
p2->next=p1;
p3=p2;
p2=p1;
}
p3->next=NULL;
free(p1);
fclose(fh); //關閉檔案
}
void Load_kh()
{
KH *p1,*p2,*p3;
FILE *fh;
fh=fopen("kehu.txt","rb");
p1=(HB *)malloc(sizeof(HB));
fread(p1,sizeof(HB),1,fh);
p_kh=p3=p2=p1;
while(! feof(fh))
{
p1=(KH *)malloc(sizeof(KH));
fread(p1,sizeof(KH),1,fh);
p2->next=p1;
p3=p2;
p2=p1;
}
p3->next=NULL;
free(p1);
fclose(fh);
}
int main()
{
FILE *fh_hb,*fh_kh;
Wecome();
if((fh_hb=fopen("hangban.txt","rb"))==NULL||(fh_kh=fopen("kehu.txt","rb"))==NULL)
{
Init();
}else
Load();
Menu_select();
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/248230.html
標籤:C語言
上一篇:請問run code(ctrl+alt+n)、f5、ctrl+f5有什么區別呢
下一篇:水仙花數
