C語言實(shí)現(xiàn)飛機(jī)票務(wù)系統(tǒng)
飛機(jī)票務(wù)系統(tǒng)設(shè)計(jì)要求:有登錄系統(tǒng)界面、賬號(hào)、密碼;建立航班信息功能;查看從鄭州到某終點(diǎn)站飛機(jī)票信息功能;飛機(jī)票購(gòu)買功能;添加購(gòu)票人信息功能;顯示購(gòu)票人信息功能;退定飛機(jī)票功能;
程序中的音樂可以改為自己指定的,用時(shí)把我用的音樂那行代碼注釋掉即可。
代碼如下:
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<Windows.h>
#include<conio.h>//主要是一些用戶通過按鍵盤產(chǎn)生的對(duì)應(yīng)操作,比如getch()函數(shù)
#include<time.h> //時(shí)間庫
#include<mmsystem.h>//windows中與多媒體有關(guān)的大多數(shù)接口
#pragma comment(lib,"winmm.lib")//預(yù)處理,支持對(duì)windows 多媒體的編程.
//#include<graphics.h>//圖形庫
#define N 15 //航班最多15,N為全局變量
typedef struct traininfor
{
char qishi[30]; //起始站
char zhongdian[30]; //終點(diǎn)站
char trainnumber[10]; //航班號(hào)
float price; //飛機(jī)票單人價(jià)格
int piaonumber; //每次航班的生成票數(shù)
char time[30]; //飛機(jī)出發(fā)時(shí)間
}hang;
struct ticket
{
char buyer[20]; //購(gòu)票人姓名
char ID[20]; //購(gòu)票人身份證號(hào)
int buynumber; //購(gòu)買飛機(jī)票的張數(shù)
float money;//用戶購(gòu)買票總錢數(shù)
hang buy; //用戶買的飛機(jī)票信息
struct ticket *next;//指針節(jié)點(diǎn)
};
int d=0;//統(tǒng)計(jì)有多少次航班
struct ticket *yonghu;//用戶購(gòu)票信息頭結(jié)點(diǎn)
hang plane[N]; //航班信息結(jié)構(gòu)體數(shù)組
int menu();//打印主菜單函數(shù)
void DengLu();//登錄票務(wù)系統(tǒng)函數(shù)
void JianFile();//建立文件航班信息函數(shù)
void OpenFile();//讀取文件信息函數(shù)
void check(); //查看從鄭州到某終點(diǎn)站飛機(jī)票信息函數(shù)
void buy(); //飛機(jī)票購(gòu)買函數(shù)
void add();//添加購(gòu)票人信息
int TicketMenu();//用戶購(gòu)票菜單
void XianShi();//顯示購(gòu)票人信息
void tui(); //退定飛機(jī)票函數(shù)
void exit(); // 退出程序
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////
int main()
{
DengLu();// 登錄票務(wù)系統(tǒng)函數(shù)
JianFile();//建立文件航班信息
//OpenFile();//打開文件讀取航班信息
while(1)
{//每次操作完自動(dòng)返回主菜單作用
switch(menu())
{//menu()函數(shù)為輸入選項(xiàng)
case 1://選項(xiàng)為1時(shí)
OpenFile();//打開文件讀取航班信息
printf("已成功導(dǎo)入航班信息\n\n\n");
break;
case 2: //選項(xiàng)為2時(shí)
check();// 查看從鄭州到某終點(diǎn)站飛機(jī)票信息函數(shù)
break;
case 3://選項(xiàng)為3時(shí)
buy();//飛機(jī)票購(gòu)買函數(shù)
break;
case 4://選項(xiàng)為4時(shí)
tui();//退票函數(shù)
break;
case 5://選項(xiàng)為5時(shí)
system("cls");//清屏
printf("感謝您的使用,祝您的旅途愉快\n");
Sleep(5000);//延遲15秒
exit(1);//
break;
}
}
return 0;
}
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//登錄票務(wù)系統(tǒng)
void DengLu()
{
//getch()=從鍵盤輸入一個(gè)字符且不顯示 getche()=從鍵盤輸入一個(gè)字符并顯示
printf("歡迎來到票務(wù)系統(tǒng),請(qǐng)先注冊(cè)票務(wù)系統(tǒng)賬號(hào)(賬號(hào)為10位,密碼為6位):\n");
printf("溫馨提示:若登錄密碼輸入有誤超過三次,電腦會(huì)自動(dòng)關(guān)機(jī):\n\n");
char ch;//重鍵盤上輸入一個(gè)字符
char password[10];//passsword數(shù)組表示初始密碼
char input[10];//input數(shù)組表示待輸入的密碼
char Szhanghao[20];// zhanghao數(shù)組表示申請(qǐng)的賬號(hào)
char Dzhanghao[20];// zhanghao數(shù)組表示登錄的賬號(hào)
int i=0,j;//控制輸入次數(shù)
int number,find,count;
printf("申請(qǐng)賬號(hào):\n");
fflush(stdin);//清空輸入流
while(1)
{
ch=getche();//從鍵盤輸入一個(gè)字符,保存到ch變量
//加過濾,只要數(shù)字,其他的不做任何處理
if(ch>='0' && ch<='9') //if( (ch>='a' && ch<='z') || (ch>='A' && ch<='Z') )
{
printf("\a");//轉(zhuǎn)義字符\a=bell
Szhanghao[i++]=ch;//把申請(qǐng)的賬號(hào)儲(chǔ)存到數(shù)組中
if(10==i)//寫條件語句時(shí),把常量放前面
{
Szhanghao[i]='\0';
break;//賬號(hào)為十位時(shí)停止輸入
}
}
}
//1提示輸入密碼
printf("\n設(shè)置卡的密碼:\n");
//2輸入密碼
i=0;
while(1)
{
ch=getch();//從鍵盤輸入一個(gè)字符,保存到ch變量
//加過濾,只要數(shù)字,其他的不做任何處理
if(ch>='0' && ch<='9') //if( (ch>='a' && ch<='z') || (ch>='A' && ch<='Z') )
{
printf("*\a");//轉(zhuǎn)義字符\a=bell
password[i++]=ch;//把初始密碼儲(chǔ)存到數(shù)組中
if(6==i)//寫條件語句時(shí),把常量放前面
{
password[i]='\0';
break;//初始密碼為六位時(shí)停止輸入
}
}
}
Sleep(2000);
system("cls");
printf("溫馨提示:若登錄密碼輸入有誤超過三次,電腦會(huì)自動(dòng)關(guān)機(jī):\n\n");
printf("請(qǐng)登錄您的賬號(hào):\n");
while(1)
{
gets(Dzhanghao);
if(strcmp(Dzhanghao,Szhanghao)!=0)
printf("您輸入的賬號(hào)有誤,請(qǐng)重新輸入:\n");
else
break;
}
number=0;//輸入密碼的次數(shù)
count =3;//有3次機(jī)會(huì)
while(count--)
{//循環(huán)三次
find=0;j=0;//find初始化為0,表示輸入密碼正確
memset(input,0,sizeof(input));//初始化輸入密碼數(shù)組
printf("請(qǐng)輸入賬號(hào)密碼:\n");
for(i=0;i<6;i++)
{//輸入六位密碼
ch=getch();//從鍵盤輸入一個(gè)字符,保存到ch變量中
if(ch>='0' && ch<='9')
{//密碼為數(shù)字時(shí)加入數(shù)組
printf("*\a");
input[j++]=ch;
}
}
input[j]='\0';//數(shù)組以\0結(jié)束
for(i=0;i<=5;i++)
{//密碼是否輸入正確
if(input[i]!=password[i])
{//輸入密碼與初始密碼不匹配
find=1;
break;
}
}
if(find==0)
{//輸入密碼正確
printf("\n輸入正確,即將進(jìn)入票務(wù)系統(tǒng)主頁");
PlaySound("20100814_5c610cfa0dec6116aa701YT6vHJzW9Zw.wav", NULL, SND_FILENAME | SND_SYNC); //音樂播放
printf("\n");
//Sleep(3000);//延時(shí)3秒
system("cls");//清屏
break;
}
else
{//輸入密碼次數(shù)加一
number++;
printf("\n輸入密碼錯(cuò)誤,");
}
}
if(3==number)
{//當(dāng)輸入錯(cuò)誤次數(shù)到達(dá)3次時(shí)
printf("\n輸入三次密碼錯(cuò)誤,不能再輸入,電腦將在10秒后自動(dòng)關(guān)機(jī)\n");
system("shutdown -s -t 10");//電腦即將關(guān)機(jī)
}
return ;
}
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void JianFile()
{
FILE *fp;//定義文件指針
if((fp=fopen("txt.in","w"))==NULL)
{//創(chuàng)建文件失敗
printf("建立失敗!\n");
exit(0);
}
//向文件中輸入航班信息
fprintf(fp,"鄭州 南陽 T1230 110.50 200 2018年11月6日12點(diǎn)15分\n");
fprintf(fp,"鄭州 信陽 T1231 120.50 200 2018年11月6日13點(diǎn)15分\n");
fprintf(fp,"鄭州 商丘 T1232 100.00 200 2018年11月6日14點(diǎn)15分\n");
fprintf(fp,"鄭州 開封 T1234 115.50 200 2018年11月6日15點(diǎn)15分\n");
fprintf(fp,"鄭州 洛陽 T1235 95.00 200 2018年11月6日16點(diǎn)15分\n");
fprintf(fp,"鄭州 三門峽 T1236 97.30 200 2018年11月6日17點(diǎn)15分\n");
fprintf(fp,"鄭州 鶴壁 T1237 130.50 200 2018年11月6日18點(diǎn)15分\n");
fprintf(fp,"鄭州 周口 T1238 117.00 200 2018年11月6日19點(diǎn)15分\n");
fprintf(fp,"鄭州 駐馬店 T1239 135.00 200 2018年11月6日20點(diǎn)15分");
fclose(fp);
return ;
}
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//文件讀取航班信息
void OpenFile()
{
FILE *fp; //定義文件指針
d=0;//表示讀取到當(dāng)前文件位置
if((fp=fopen("txt.in","r"))==NULL)
{//打開文件
printf("文件打開失?。n");
return ;
}
while(!feof(fp))
{//讀取到文件為空
//printf("請(qǐng)?jiān)O(shè)定第%d個(gè)站的地點(diǎn)、車次、價(jià)格、還剩票數(shù)、到站時(shí)間、已被購(gòu)買票數(shù):\n",d);
fscanf(fp,"%s%s%s%f%d%s",plane[d].qishi,plane[d].zhongdian,plane[d].trainnumber,&plane[d].price,&plane[d].piaonumber,plane[d].time);
d++;
}
fclose(fp);//關(guān)閉文件
return ;
}
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////
int menu()
{
char s[10];//輸入字符串選項(xiàng)
int n;//整型選項(xiàng)
//菜單框架
printf("--------------------票務(wù)系統(tǒng)目錄--------------------\n\n");
printf("1, 導(dǎo)入航班信息\n");
printf("2, 查詢飛機(jī)票\n");
printf("3, 購(gòu)買飛機(jī)票\n");
printf("4, 退訂飛機(jī)票\n");
printf("5, 退出程序\n");
printf("注意:飛機(jī)從本站能到達(dá)的地方有南陽、信陽、商丘\n");
printf("開封、洛陽、三門峽、鶴壁、周口、駐馬店\n");
printf("如果您想了解更多信息請(qǐng)輸入選項(xiàng)序號(hào)\n \n");
printf("本程序制作者:2017級(jí)物聯(lián)網(wǎng)工程一班 胡斌\n");
printf("請(qǐng)輸入選項(xiàng):");
while(1)
{//死循環(huán)狀態(tài)
fflush(stdin);//清空輸入流
gets(s);//得到一串字符串
n=atoi(s);//字符串轉(zhuǎn)化為整數(shù)
if(n<1||n>5)//判斷輸入的選項(xiàng)是否正確
printf("輸入錯(cuò)誤,請(qǐng)重新輸入:\n");
else//符合條件,結(jié)束循環(huán)
break;
}
//返回選項(xiàng)值
return n;
}
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// 查看從鄭州到某終點(diǎn)站飛機(jī)票信息函數(shù)
void check()
{
int i,j;//循環(huán)變量
int find=1,flag=0,count=0;//標(biāo)志變量
char qi[30];//起始站
char mudi[30];//終點(diǎn)站
printf("請(qǐng)輸入起始地(提示:起始地為鄭州): \n");
scanf("%s",qi);//輸入起始地
printf("請(qǐng)輸入目的地: \n");
scanf("%s",mudi);//輸入目的地
while(1)
{//死循環(huán)狀態(tài)
if(0==strcmp(qi,"鄭州"))
{//起始地為鄭州時(shí)
flag=1;//標(biāo)志變量為1,表示起始地沒有出錯(cuò)
for(j=0;j<d;j++)
{//循環(huán)d次航班信息
if(0==strcmp(plane[j].zhongdian,mudi))
{//輸入的終點(diǎn)站與航班信息終點(diǎn)站一致
count=1;//標(biāo)志變量為1
printf("航班號(hào): ");//輸出航班號(hào)
printf("%s\n",plane[j].trainnumber);
printf("起始地: ") ;//輸出起始地
printf("%s\n",plane[j].qishi);
printf("目的地: ");//輸出目的地
printf("%s\n",plane[j].zhongdian);
printf("此次航班單人票價(jià): ");//輸出票價(jià)
printf("%.2f\n",plane[j].price);
printf("此次航班時(shí)間:");//輸出航班時(shí)間
printf("%s\n",plane[j].time);
printf("此次航班飛機(jī)票數(shù)量: ");//輸出票數(shù)
printf("%d\n\n\n\n",plane[j].piaonumber);
return ;
}
}
}
else
{
flag=1;//起始地輸入錯(cuò)誤
printf("輸入有誤,返回菜單!\n\n\n");
return ;
}
if(0==count&&flag==1)
{//起始地并且目的地輸入錯(cuò)誤
printf("sorry 您查詢的結(jié)果無信息!\n\n\n");
return ;
}
}
return ;
}
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//對(duì)購(gòu)物車進(jìn)行操作
void buy()
{
while(1)
{//成死循環(huán)狀態(tài)
switch(TicketMenu())
{//ShopCartMenu()為輸入選項(xiàng)
case 1://選項(xiàng)1 顯示用戶購(gòu)票列表信息
XianShi();
break;
case 2: //選項(xiàng)2 添加用戶購(gòu)票信息
add();
break;
case 3: //選項(xiàng)3 退出
printf("即將退出子程序\n");
Sleep(2000);//延時(shí)兩秒
return ;
}
}
return ;
}
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//打印購(gòu)物車菜單
int TicketMenu()
{
int n;//輸入選項(xiàng)
char s[5];//輸入字符串
//購(gòu)票子程序菜單框架
printf("\n\n請(qǐng)選擇操作:\n");
printf("--------------------------------------------\n");
printf("1. 顯示當(dāng)前購(gòu)票列表\n");
printf("2. 添加購(gòu)票人信息\n");
printf("3. 退出\n");
printf("--------------------------------------------\n");
printf("請(qǐng)選擇對(duì)應(yīng)數(shù)字1~3\n");
while(1)
{//成死循環(huán)狀態(tài)
fflush(stdin);//清空輸入流
gets(s);//輸入一串字符串
n=atoi(s);//字符串轉(zhuǎn)化為整數(shù)
if(n<1||n>3)//判斷輸入的選項(xiàng)是否正確
printf("輸入錯(cuò)誤,請(qǐng)重新輸入:\n");
else//輸入正確,結(jié)束循環(huán)
break;
}
return n;//返回輸入選項(xiàng)
}
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//顯示用戶購(gòu)票信息
void XianShi()
{
FILE *fp;//定義文件指針
struct ticket *p;//定義一個(gè)新節(jié)點(diǎn)
p=yonghu;//把整個(gè)購(gòu)票信息賦給p
if((fp=fopen("goupiao.txt","r"))==NULL)
{//判斷是否打開了文件
printf("打開文件失敗\n");
printf("暫時(shí)還沒有用戶購(gòu)票信息\n\n");
return ;
}
//printf("\n姓名 身份證 起始站 目的站 購(gòu)買票數(shù)\n");
while(p!=NULL)
{//輸出購(gòu)票人信息
//fscanf(fp,"%s%s%s%s%d",p->buyer,p->ID,p->buy.qishi,p->buy.zhongdian,&p->buynumber);
printf("姓名: ");
printf("%s\n",p->buyer);
printf("身份證號(hào): ");
printf("%s\n",p->ID);
printf("起始地: ") ;
printf("%s\n",p->buy.qishi);
printf("目的地: ");
printf("%s\n",p->buy.zhongdian);
printf("購(gòu)買票數(shù): ");
printf("%d\n",p->buynumber);
printf("此次航班總錢數(shù): ");
printf("%.2f\n",p->money);
printf("此次航班時(shí)間:");
printf("%s\n\n\n\n",p->buy.time);
//printf("姓名 身份證 起始地 目的地 購(gòu)買票數(shù) 票的價(jià)格 出發(fā)時(shí)間\n");
//printf("%-11s%-20s%-10s%-10s%-7d%-7.2f%-20s\n",p->buyer,p->ID,p->buy.qishi,p->buy.zhongdian,,p->buy.price,p->buy.time);//輸出購(gòu)票人信息
p=p->next;//指向下一個(gè)節(jié)點(diǎn)
}
fclose(fp);//關(guān)閉文件
return ;
}
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//添加用戶購(gòu)票信息
void add()
{
FILE *fp1,*fp;//定義兩個(gè)文件指針
struct ticket *p,*p1;//定義兩個(gè)節(jié)點(diǎn)
int i,j;//定義控制循環(huán)變量
int count,flag;//定義標(biāo)志變量
int buynumber1;//用戶購(gòu)買的票數(shù)
char choice1[10];//選擇變量
char choice2[10];//選擇變量
char mingzi[20];//用戶姓名
char shenfen[20];//用戶身份證號(hào)
char qi[30];//起始站
char mudi[30];//終點(diǎn)站
do{//開始進(jìn)入循環(huán)
printf("請(qǐng)輸入您的姓名:\n");
scanf("%s",mingzi);
printf("請(qǐng)輸入您的身份證號(hào):\n");
scanf("%s",shenfen);
printf("請(qǐng)輸入起始地(提示:起始地為鄭州): \n");
scanf("%s",qi);
printf("請(qǐng)輸入目的地: \n");
scanf("%s",mudi);
count=0;flag=0;//標(biāo)志變量初始化
while(1)
{//成死循環(huán)狀態(tài)
if(0==strcmp(qi,"鄭州"))
{//起始站為鄭州
flag=1;//標(biāo)志為1
for(j=0;j<d;j++)
{//循環(huán)d次航班信息
// printf("%s %s %.2f %d %s %d",pointtr->station[j],pointtr->trainnumber[j],pointtr->price[j],pointtr->piaonumber[j],pointtr->time[j],pointtr->buynumber[j]);
if(0==strcmp(plane[j].zhongdian,mudi))
{//目的地一致時(shí)
count=1;//標(biāo)志為1
//輸出航班信息
printf("航班號(hào): ");
printf("%s\n",plane[j].trainnumber);
printf("起始地: ") ;
printf("%s\n",plane[j].qishi);
printf("目的地: ");
printf("%s\n",plane[j].zhongdian);
printf("此次航班單人票價(jià): ");
printf("%.2f\n",plane[j].price);
printf("此次航班時(shí)間:");
printf("%s\n",plane[j].time);
printf("此次航班飛機(jī)票數(shù)量: ");
printf("%d\n",plane[j].piaonumber);
break;//結(jié)束循環(huán)
}
}
break ;//結(jié)束循環(huán)
}
else
{
flag=1;
printf("輸入有誤:\n\n\n");
fflush(stdin);//清空輸入流
break; //結(jié)束循環(huán)
}
if(0==count&&flag==0)
{//輸入條件不符合
printf("sorry 您查詢的結(jié)果無信息!\n\n\n");
return ;
}
}
if(1==count)
{//找到用戶所需航班信息
printf("您確定購(gòu)買此飛機(jī)票嗎?(1.是 2.否)\n");
scanf("%s",choice1);//輸入選項(xiàng)
if(0==strcmp(choice1,"1"))
{//選項(xiàng)為1時(shí)
printf("請(qǐng)輸入您要購(gòu)買的張數(shù):\n");
scanf("%d",&buynumber1);//輸入購(gòu)買票數(shù)
if(buynumber1<0)
{//不符合客觀情況
printf("輸入有誤,請(qǐng)重新輸入!\n\n\n");
break;
}
if(plane[j].piaonumber-buynumber1>=0)
{//輸入正確
plane[j].piaonumber=plane[j].piaonumber-buynumber1;//計(jì)算剩余飛機(jī)票
p=new ticket;//生成新節(jié)點(diǎn)
if(p==NULL)
{//分配內(nèi)存失敗
printf("內(nèi)存申請(qǐng)失??!\n\n\n");
exit(1);
}
p->buynumber=buynumber1;//用戶所購(gòu)票數(shù)
strcpy(p->buyer,mingzi);//用戶姓名
strcpy(p->ID,shenfen);//用戶身份證號(hào)
p->buy=plane[j];//航班信息
p->next=NULL;//指向下一個(gè)節(jié)點(diǎn)為空
p1=yonghu;//把用戶信息賦給p1
if(yonghu==NULL)//頭結(jié)點(diǎn)為空
yonghu=p;//把節(jié)點(diǎn)賦值給頭結(jié)點(diǎn)
else
{
while(p1->next!=NULL)
p1=p1->next;//把鏈表循環(huán)到尾部
p->next=p1->next;
p1->next=p;//把新節(jié)點(diǎn)p掛在鏈表尾部
}
}
else
{
printf("飛機(jī)票已售完或不足,不能購(gòu)買!\n\n\n");
break;
}
}
else if(0==strcmp(choice1,"2"))
{//輸入選項(xiàng)為2時(shí)
printf("放棄購(gòu)買, 返回!\n\n\n");
break;
}
else
{//輸入選項(xiàng)有誤
printf("輸入錯(cuò)誤,返回!\n\n\n");
break;
}
}
else//沒有找到用戶所需航班
printf("輸入有誤");
printf("是否繼續(xù)購(gòu)票?(1.是,2.否)\n");
fflush(stdin);//清空輸入流
scanf("%s",choice2);//輸入選項(xiàng)
}while(strcmp(choice2,"1")==0);//當(dāng)選項(xiàng)為1時(shí)
if((fp1=fopen("goupiao.txt","w"))==NULL)
{//判斷文件是否創(chuàng)建失敗
printf("創(chuàng)建文件失敗。\n");
return ;
}
p=yonghu;//把用戶信息賦給p
while(p!=NULL)
{//一直循環(huán)到鏈表為空
p->money=p->buy.price*p->buynumber;//計(jì)算票價(jià)總錢數(shù)
fprintf(fp1,"%s %s %s %s %d %.2f %s\n",p->buyer,p->ID,p->buy.qishi,p->buy.zhongdian,p->buynumber,p->money,p->buy.time);
p=p->next;//指向下一個(gè)節(jié)點(diǎn)
}
fclose(fp1);//關(guān)閉文件
return ;
}
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//退訂飛機(jī)票
void tui()
{
FILE *fp,*fp1;//定義兩個(gè)文件指針
char s[20];//身份證號(hào)
char s1[20];//目的地
char choice[10];//選擇項(xiàng)
int buynumber2;//退訂的票數(shù)
int i,j;//控制循環(huán)變量
int find=0;//標(biāo)志變量
struct ticket *p;//定義新節(jié)點(diǎn)
printf("您確定要退票嗎?1.是 2.否\n");
scanf("%s",choice);//輸入選項(xiàng)
if(0==strcmp(choice,"1"))
{//選項(xiàng)為1時(shí)
printf("請(qǐng)輸入身份證號(hào):\n");
scanf("%s",s);//輸入身份證號(hào)
printf("請(qǐng)輸入目的地:\n");
scanf("%s",s1);//輸入目的地
if((fp=fopen("goupiao.txt","r"))==NULL)
{//打開文件
printf("打開文件失敗\n");
return ;
}
p=yonghu;//把用戶信息賦給p
while(p!=NULL)
{//循環(huán)到鏈表為空時(shí)
//fscanf(fp,"%s%s%s%s%f%d%s",p->buyer,p->ID,p->buy.qishi,p->buy.zhongdian,p->buy.price,&p->buynumber,p->buy.time);
if(0==strcmp(s,p->ID)&&(0==strcmp(s1,p->buy.zhongdian)))
{//找到對(duì)應(yīng)的用戶
find=1;//標(biāo)志變量為1
printf("請(qǐng)輸入退票張數(shù):\n");
scanf("%d",&buynumber2);//輸入退訂票數(shù)
if(buynumber2<0)
{//不符合客觀情況
printf("輸入有誤, 返回菜單!\n");
return ;
}
if(p->buynumber>=buynumber2)
{//輸入票數(shù)符合條件
fclose(fp);//關(guān)閉yonghu文件
if((fp=fopen("goupiao.txt","w"))==NULL)
{//判斷文件是否創(chuàng)建失敗
printf("創(chuàng)建文件失敗\n");
return ;
}
if((fp1=fopen("txt.in","w"))==NULL)
{//判斷文件是否創(chuàng)建失敗
printf("創(chuàng)建文件失敗。\n");
return ;
}
printf("退票成功,返回菜單!\n\n\n");
for(i=0;i<d;i++)
{//循環(huán)d次航班信息
if(0==strcmp(plane[i].zhongdian,p->buy.zhongdian))
{//找到對(duì)應(yīng)終點(diǎn)站,計(jì)算剩余票數(shù)
plane[i].piaonumber+=buynumber2;
}
fprintf(fp1,"%s %s %s %f %d %s\n",plane[i].qishi,plane[i].zhongdian,plane[i].trainnumber,plane[i].price,plane[i].piaonumber,plane[i].time);
}
p->buynumber-=buynumber2;//用戶所購(gòu)票數(shù)
p->money=p->buynumber*p->buy.price;//購(gòu)票的總價(jià)錢
p=yonghu;//把用戶信息賦給p
while(p!=NULL)
{//循環(huán)鏈表為空時(shí)
fprintf(fp,"%s %s %s %s %.2f %d %s\n",p->buyer,p->ID,p->buy.qishi,p->buy.zhongdian,p->money,p->buynumber,p->buy.time);
p=p->next;//指向下一個(gè)節(jié)點(diǎn)
}
fclose(fp);//關(guān)閉文件
fclose(fp1);//關(guān)閉文件
return ;
}
else
{
printf("輸入錯(cuò)誤,返回菜單!\n\n\n");
return ;
}
}
p=p->next;//指向下一個(gè)節(jié)點(diǎn)
}
if(0==find)
{//輸入有誤
printf("查詢不到信息,返回菜單\n\n\n");
return ;
}
}
else if(0==strcmp(choice,"2"))
{//輸入選項(xiàng)為2時(shí)
printf("放棄退票,返回菜單!\n\n\n");
return ;
}
else
{//輸入有誤
printf("輸入錯(cuò)誤,返回菜單!\n\n\n");
return ;
}
return ;
}
更多學(xué)習(xí)資料請(qǐng)關(guān)注專題《管理系統(tǒng)開發(fā)》。
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持我們。
上一篇:C語言課程設(shè)計(jì)之抽獎(jiǎng)系統(tǒng)
欄 目:C語言
下一篇:C語言實(shí)現(xiàn)班檔案管理系統(tǒng)課程設(shè)計(jì)
本文標(biāo)題:C語言實(shí)現(xiàn)飛機(jī)票務(wù)系統(tǒng)
本文地址:http://www.jygsgssxh.com/a1/Cyuyan/23.html
您可能感興趣的文章
- 04-02c語言函數(shù)調(diào)用后清空內(nèi)存 c語言調(diào)用函數(shù)刪除字符
- 04-02c語言的正則匹配函數(shù) c語言正則表達(dá)式函數(shù)庫
- 04-02func函數(shù)+在C語言 func函數(shù)在c語言中
- 04-02c語言中對(duì)數(shù)函數(shù)的表達(dá)式 c語言中對(duì)數(shù)怎么表達(dá)
- 04-02c語言用函數(shù)寫分段 用c語言表示分段函數(shù)
- 04-02c語言編寫函數(shù)冒泡排序 c語言冒泡排序法函數(shù)
- 04-02c語言沒有round函數(shù) round c語言
- 04-02c語言分段函數(shù)怎么求 用c語言求分段函數(shù)
- 04-02C語言中怎么打出三角函數(shù) c語言中怎么打出三角函數(shù)的值
- 04-02c語言調(diào)用函數(shù)求fibo C語言調(diào)用函數(shù)求階乘


閱讀排行
- 1C語言 while語句的用法詳解
- 2java 實(shí)現(xiàn)簡(jiǎn)單圣誕樹的示例代碼(圣誕
- 3利用C語言實(shí)現(xiàn)“百馬百擔(dān)”問題方法
- 4C語言中計(jì)算正弦的相關(guān)函數(shù)總結(jié)
- 5c語言計(jì)算三角形面積代碼
- 6什么是 WSH(腳本宿主)的詳細(xì)解釋
- 7C++ 中隨機(jī)函數(shù)random函數(shù)的使用方法
- 8正則表達(dá)式匹配各種特殊字符
- 9C語言十進(jìn)制轉(zhuǎn)二進(jìn)制代碼實(shí)例
- 10C語言查找數(shù)組里數(shù)字重復(fù)次數(shù)的方法
本欄相關(guān)
- 04-02c語言函數(shù)調(diào)用后清空內(nèi)存 c語言調(diào)用
- 04-02func函數(shù)+在C語言 func函數(shù)在c語言中
- 04-02c語言的正則匹配函數(shù) c語言正則表達(dá)
- 04-02c語言用函數(shù)寫分段 用c語言表示分段
- 04-02c語言中對(duì)數(shù)函數(shù)的表達(dá)式 c語言中對(duì)
- 04-02c語言編寫函數(shù)冒泡排序 c語言冒泡排
- 04-02c語言沒有round函數(shù) round c語言
- 04-02c語言分段函數(shù)怎么求 用c語言求分段
- 04-02C語言中怎么打出三角函數(shù) c語言中怎
- 04-02c語言調(diào)用函數(shù)求fibo C語言調(diào)用函數(shù)求
隨機(jī)閱讀
- 01-10使用C語言求解撲克牌的順子及n個(gè)骰子
- 08-05dedecms(織夢(mèng))副欄目數(shù)量限制代碼修改
- 08-05DEDE織夢(mèng)data目錄下的sessions文件夾有什
- 01-10delphi制作wav文件的方法
- 01-10SublimeText編譯C開發(fā)環(huán)境設(shè)置
- 08-05織夢(mèng)dedecms什么時(shí)候用欄目交叉功能?
- 01-11Mac OSX 打開原生自帶讀寫NTFS功能(圖文
- 01-10C#中split用法實(shí)例總結(jié)
- 01-11ajax實(shí)現(xiàn)頁面的局部加載
- 04-02jquery與jsp,用jquery


