學生黨期末作業今天下午差不多就要交了,現在的問題就是訂票只出現一個錄入的資料,已輸入乘坐航班編號就不動,退票也不會搞
#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 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;
int n;
struct kehu *next;
}KH;
HB *p_hb;
KH *p_kh;
int n=0;
int m=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();
}
}
}
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; KH *p0;
int i,x;
char city[20],num[20];
p=p_hb;
p0=p_kh;
K:
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);
if(x<1||x>3)
{
printf("編號錯誤,請重新輸入!!!");
getch();
system("cls");
goto K;
}
switch(x)
{
case 1:printf("請輸入您的客戶ID:");
scanf("%s",&num);
printf("您輸入客戶ID已訂票的航班如下:\n");
printf("客戶ID\t客戶姓名\t訂單航班編號\t飛機起飛時間\t訂票座位數\n");
while(p0!=NULL);
{
if(strcmp(p0->kh_id,num)==0)
{
printf("%s\t%s\t%s\t%s\t%d\n",p0->kh_id,p0->kh_name,p0->kh_plane_num,p0->kh_plane_time,p0->kh_seat_num);
}
else
p0=p0->next;
}
printf("訂單資訊列印完畢!按任意鍵繼續下一步操作...");
getch();
system("cls");
case 2:printf("請輸入您的目的地:");
scanf("%s",&city);
printf("您輸入的目的地現有航班如下:\n");
printf("航班編號\t起降時間\t目的地城市\t機票價格\t機票折扣\t航班座位\n");
while(p!=NULL)
{
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;
}
else
p=p->next;
}
printf("航班資訊列印完畢!按任意鍵繼續下一步操作...");
getch();
system("cls");
case 3: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));
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(;;)
{
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);
}
else
{
p0=p0->next;
}
}
printf("請輸入您要乘坐的航班編號:");
scanf("%s",p2->kh_plane_num);
while(p0!=NULL)
{
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++;
p0->hb_seat--;
}
else
{
printf("航班編號不存在,請重新輸入!!!:");
}
}
printf("訂票成功!!!");
p2->n++;
}
}
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=(KH *)malloc(sizeof(KH));
fread(p1,sizeo
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/248670.html
標籤:C語言
上一篇:c++指標
