1、/*1 、用戶和管理員及航班信息請(qǐng)以英文字母或數(shù)字輸入 */*2、管理員賬戶為:boss,密碼為:123。保存在 txt 文件中,需 改*/*3 、部分文件讀寫為二進(jìn)制讀寫,所以打開文件時(shí)會(huì)看到亂碼 */#include#include #include #include #define N 1000void zhujiemian();/主界面函數(shù)void loginmanager();/管理員登錄void loginflightm();/管理員登錄機(jī)票系統(tǒng)void loginflightu();/用戶登錄機(jī)票系統(tǒng)void creatfile();/創(chuàng)建用戶信息模塊void input();
2、/輸入航班信息void print(); /輸出航班信息void save(); /保存航班信息void read(); /讀取航班信息void search(); /查找航班信息void loginuser();/用戶登錄void saveuser();/用戶信息保存模塊程序void paixu(); /對(duì)所有航班按航班號(hào)排序要修改請(qǐng)于程序中修void verify();/用戶及管理員登錄選擇void dingpiao(); /訂票信息struct users /r管理員/用戶信息結(jié)構(gòu)體,管理員可以修改航班信息char Name20; /管理員/用戶姓名char sexual10;/用戶性別
3、char ps8; /用戶密碼int age; /用戶年齡long Number; /用戶身份證號(hào)碼int power; /power為1是管理員登錄,為0是用戶登錄userN,up,mg;/up為鍵盤輸入用戶信息,userN為文件保存的用戶信息,mg為管理員結(jié)構(gòu)體int n;/所有用戶個(gè)數(shù),初始化為0 struct air /航班信息結(jié)構(gòu)體int num; /航班號(hào)char start20; /出發(fā)地char over20; /目的地char time10; /時(shí)間int count; /票數(shù)int prize; /票價(jià)sN,fnew;int i;int m=0; /所有航班個(gè)數(shù)case 1
4、:verify();/進(jìn)入機(jī)票系統(tǒng)#define %-d%12s%12s%10s%12d%10dn,si.num,si.start,si.over,si.time,si.count,si.prize /定義輸出格式void main()/主函數(shù)zhujiemian();void zhujiemian()/主界面函數(shù)int j;printf(#=#n);printf(#歡迎進(jìn)入機(jī)票管理系統(tǒng)#n);printf(# 1、登錄系統(tǒng)#n);printf(# 2、新用戶注冊(cè)#n);printf(# 0、退出#n);printf(#=#n);printf(請(qǐng)?jiān)?-2中選擇以回車鍵結(jié)束:nn); scanf
5、(%d,&j);switch(j)PRINTbreak;case 2:loginuser();/進(jìn)入用戶登錄界面case 2:creatfile();/進(jìn)入用戶注冊(cè)系統(tǒng)break;case 0:;break;void verify()/驗(yàn)證用戶及管理員信息模塊int j;system(cls);printf(#=#n);printf(#1、管理員登錄#n);printf(# 2、用戶登錄#n);printf(#0、返回主界面#n);printf(#=#n);scanf(%d,&j);switch(j)case 1:loginmanager();/進(jìn)入管理員登錄界面break;b
6、reak;printf(管理員賬戶為:boss密碼為:123n);case 0:system(cls);break;void loginmanager()FILE * fp=NULL;/定義文件指針char DataFile20=manager.txt;/存儲(chǔ)管理員信息的文件名int i=0,j=1;char relogin; /是否重新登錄int success=0; /登錄成功的標(biāo)志printf(n-管理員登錄-n);fp=fopen(DataFile,r);if(fp=NULL)/如果當(dāng)前文件不存在,初始化根用戶名為boss,密碼為123,權(quán) 限為管理員zhujiemian(); /進(jìn)入
7、主界面/*管理員登錄確定函數(shù)*/break;printf(管理員賬戶為:boss密碼為:123n);printf(首次使用該系統(tǒng)!n);fp=fopen(DataFile,a);/user0.Number=0;strcpy(user0.Name,boss);strcpy(user0.sexual,male);user0.age=22;user0.power=1;strcpy(user0.ps,123);fwrite(&user0,sizeof(user),1,fp);fclose(fp);elsefclose(fp);again:printf(請(qǐng)輸入管理員姓名:);scanf(%s,u
8、p.Name);/輸入用戶名up.Name19=0;printf(請(qǐng)輸入管理員密碼:);fflush(stdin);for(i=0;i7;i+)/輸入密碼,以*在屏幕顯示up.psi=getch();up.psi+1=0;/字符要以0結(jié)尾if(up.psi=b)以追加方式打開文件i-;up.psi=0;/清除前一個(gè)字符i-;/接收前一個(gè)字符printf(b );printf(b);continue;if(up.psi=r)up.psi=0;break;printf(*);fp=fopen(DataFile,rt);if(fp=NULL) /打開文件失敗時(shí)提示printf(n打開%s失敗!按任意
9、鍵結(jié)束程序n,DataFile); perror(Open file fail);getchar();return;if(fp=fopen(manager.txt,r)=NULL)/打開文件,并判斷是否出錯(cuò)printf(n出錯(cuò),請(qǐng)檢查文件是否存在,按任意鍵返回主菜單n);/打 印出錯(cuò)提示getchar();elsefread(&mg,sizeof(struct users),1,fp);/從文件中讀取信息fclose(fp);/關(guān)閉文件if(strcmp(mg.Name,up.Name)=0&strcmp(mg.ps,up.ps)=0)success=1;if(success=
10、1) /登錄成功printf(n登錄成功,按任意鍵進(jìn)入機(jī)票調(diào)整系統(tǒng)!n);getchar();loginflightm();else/未登錄成功fflush(stdin);/清除輸入緩沖區(qū)中的字符用戶名或密碼錯(cuò)誤!重新輸入請(qǐng)按y,退出請(qǐng)按n:n);relogin=getchar();if(relogin=y|relogin=Y)getchar();goto again;elseverify();exit(0);用戶登錄函數(shù)void loginuser()FILE *fp=NULL,*fp1;/定義文件指針char DataFile20=yonghu.txt;/printf(n存儲(chǔ)管理員信息的文
11、件名fflush(stdin);/清除輸入緩沖區(qū)中的字符char relogin;/是否重新登錄int i=0,j=0;fprintf(fp1,%d,0);/打開用戶文件失敗,則輸入用戶個(gè)數(shù)0到fp1printf(n-用戶登錄-n);fp=fopen(DataFile,r);/讀取文件中數(shù)據(jù)if(fp1=fopen(howmanyusers.txt,a)=NULL)/讀寫方式打開文件 文件不存在,則n=0/printf(創(chuàng)建文件失敗!nn);/打印出錯(cuò)提示n=0;/getchar();/continue;elsefp1=fopen(howmanyusers.txt,r);fscanf(fp1,
12、 %d,&n);/讀取fp1中的用戶個(gè)數(shù)fclose(fp1);if(fp=fopen(yonghu.txt,r)=NULL)/打開文件,并判斷是否出錯(cuò)fp1=fopen(howmanyusers.txt,w+);/以寫方式打開int success=0;/登錄成功的標(biāo)志,若fclose(fp1);prin tf(n目前沒有用戶信息,請(qǐng)按ENTER鍵返回主菜單先進(jìn)行注冊(cè)!n);getchar();getchar();system(cls);zhujiemian();for(i=0;in;i+)fread(&useri,sizeof(struct users),1,fp);/從文
13、件中讀取信息fclose(fp);/關(guān)閉文件/輸入數(shù)據(jù)與文件中用戶比對(duì)again:printf(請(qǐng)輸入用戶姓名:);scanf(%s,up.Name);/輸入用戶名up.Name19=0;printf(請(qǐng)輸入用戶密碼:);fflush(stdin);for(i=0;i7;i+)/輸入密碼,以*在屏幕顯示up.psi=getch();up.psi+1=0;/字符要以0結(jié)尾if(up.psi=b)i-;up.psi=0;/清除前一個(gè)字符i-;/接收前一個(gè)字符printf(b );printf(b);continue;if(up.psi=r)up.psi=0;break;printf(*);for(
14、i=0;in;i+) /對(duì)比用戶名和密碼,進(jìn)行登錄if(strcmp(useri.Name,up.Name)=0&strcmp(useri.ps,up.ps)=0)success=1;break;if(success=1) /登錄成功printf(n登錄成功,按任意鍵進(jìn)入機(jī)票調(diào)整系統(tǒng)!n);getchar();loginflightu();else /未登錄成功fflush(stdin);/清除輸入緩沖區(qū)中的字符printf(n用戶名或密碼錯(cuò)誤!重新輸入請(qǐng)按y,退出請(qǐng)按n:n); relogin=getchar();if(relogin=y|relogin=Y)getchar();go
15、to again;else verify();exit(0);void saveuser(struct users)/用戶信息保存模塊程序FILE *fp,*fp1;/定義文件指針if(fp=fopen(yonghu.txt,a)=NULL)/打開文件并判斷是否出錯(cuò)printf(創(chuàng)建文件失敗!nn);/打印出錯(cuò)提示getchar();return;if(fp1=fopen(howmanyusers.txt,w+)=NULL)/打開文件并判斷是否 出錯(cuò)printf(創(chuàng)建文件失敗!nn);/打印出錯(cuò)提示getchar();return;for(i=0;in;i+)if(fwrite(&us
16、eri,sizeof(struct users),1,fp)=0)/據(jù),并判斷是否出錯(cuò)向文件寫入數(shù)printf(向文件輸入數(shù)據(jù)失敗!nn);fprintf(fp1,%d,n);/輸入用戶個(gè)數(shù)到fp1fclose(fp);/fclose(fp1);/void creatfile()/關(guān)閉文件關(guān)閉文件增加用戶信息模塊FILE *fp=NULL,*p=NULL,*fp1;char DataFile20=yonghu.txt;/存儲(chǔ)用戶信息的文件名/int a100;int i=0,k=1,count=0;fp=fopen(DataFile,r);system(cls);/清屏if(fp=NULL)/
17、如果當(dāng)前文件不存在,提示打開文件失敗fp1=fopen(howmanyusers.txt,w+);/fprintf(fp1,%d,0);/打開用戶文件失敗,則輸入用戶個(gè)數(shù)0到fp1 fclose(fp1);printf(n不存在%s正在創(chuàng)建!n,DataFile);fp=fopen(DataFile,a);creatfile();if(fp1=fopen(howmanyusers.txt,a)=NULL)/讀寫方式打開文件,若文件不存在,則n=0n=0;elsefp1=fopen(howmanyusers.txt,r);fscanf(fp1, %d,&n);/讀取fp1中的用戶個(gè)數(shù)fc
18、lose(fp1);for(i=0;in;i+)fread(&useri,sizeof(struct users),1,fp);/以寫方式打開從文件中讀取信息i+;fclose(fp);/關(guān)閉文件/如果成功打開文件,則提示輸入用戶相關(guān)信息printf(請(qǐng)輸入用戶信息n); fflush(stdin);while(k)/printf(n輸入身份證號(hào)碼注意身份證號(hào)碼不能為0!n); printf(請(qǐng)輸入身份證號(hào)碼:);scanf(%ld,&up.Number);i=0;/再次初始化i為0/判斷身份證號(hào)是否存在while(in)if(useri.Number=up.Number)pr
19、intf(該身份證號(hào)碼已被使用過!n請(qǐng)重新輸入身份證號(hào):);scanf(%ld,&up.Number);i=0; /continue; else/經(jīng)循環(huán)對(duì)比后,i的值仍和n相等,將新注冊(cè)的信息加入數(shù)組末位useri.Number=up.Number;printf(姓名:);scanf(%s,&useri.Name);useri.Name19=0;printf(性別:);scanf(%s,&useri.sexual);printf(用戶密碼:);scanf(%s,&useri.ps);printf(年齡:);scanf(%d,&useri.age);n+;
20、/用戶數(shù)目增加printf(是否繼續(xù)注冊(cè)?是:選1,否:選0;);scanf(%d,&k);saveuser(user);/保存用戶信息fclose(fp);/在屏幕上顯示文件內(nèi)容system(cls);printf(數(shù)據(jù)已經(jīng)成功保存到$中n,DataFile);getchar();票 信 息-*nn *printf(按任意鍵返回主界面!n);getchar();system(cls);zhujiemian();/返回主界面void loginflightm()/管理員登錄機(jī)票系統(tǒng)int j;dosystem(cls);printf( -您好,歡迎進(jìn)入自動(dòng)化飛機(jī)訂票系統(tǒng)!n);prin
21、tf(n);printf( *1.輸 入 航 班 信 息 *nn *2.瀏*nn *3.找航班信*nn *4.對(duì)航班按航班票價(jià)排序-*nn5.訂-*nn*nn);printf(=n);printf(請(qǐng)?jiān)?-5中選擇以回車鍵結(jié)束:nn);scanf(%d,&j);switch(j)case 1:input();/調(diào)用輸入模塊break;case 2:system(cls);print();/調(diào)用打印模塊break;case 3:search();/調(diào)用查找模塊break;0.退 出- -*nn- -*- -*nncase 4:paixu();/調(diào)用排序模塊break;case 5:din
22、gpiao();/調(diào)用訂票模塊break;case 0:;break;while(j!=0); /判斷結(jié)束printf(按任意鍵返回主界面n);system(cls);zhujiemian();/登錄函數(shù)結(jié)束void loginflightu()/用戶登錄機(jī)票系統(tǒng)int j;dosystem(cls);n);printf(您好,歡迎進(jìn)入自動(dòng)化飛機(jī)訂票系統(tǒng)!*nn);printf(=n);printf(請(qǐng)?jiān)?-5中選擇以回車鍵結(jié)束:nn);scanf(%d,&j);switch(j)case 1:system(cls);printf(n);printf( *1.瀏覽*nn *2.找 航
23、班 信 息-*nn *3.對(duì)航班按航班票價(jià)排序-*nnII4.訂 票*nn *0.*nn*nnII*nnIIprint();/調(diào)用打印模塊break;case 2:search();/調(diào)用查找模塊break;case 3:paixu();/調(diào)用排序模塊break;case 4:dingpiao();/調(diào)用訂票模塊break;case 0:;break;while(j!=0); /判斷結(jié)束printf(按任意鍵返回主界面n);system(cls);zhujiemian();/登錄函數(shù)結(jié)束void input()/輸入航班信息模塊,管理員操作int i=0,k=1;read();printf(請(qǐng)
24、依次輸入航班信息 (航班號(hào),起始站,終點(diǎn)站,起飛時(shí)間,機(jī)票數(shù),票價(jià)):nn);/打印提示信息printf(-n);/fflush(stdin);while(k)printf(請(qǐng)輸入航班號(hào):n);scanf(%d,&fnew.num); /讀取航班號(hào)i=0;/再次初始化i為0/判斷航班是否已經(jīng)存在while(im)if(si.num=fnew.num)printf(該航班已經(jīng)存在!n請(qǐng)重新輸入:); scanf(%d,&fnew.num);i=0; /continue; elsei+;/經(jīng)循環(huán)對(duì)比后,i的值仍和n相等,將新注冊(cè)的信息加入數(shù)組末位si.num=fnew.num;pr
25、intf(請(qǐng)輸入起始站:n); scanf(%s,si.start);/讀取起始站printf(請(qǐng)輸入終點(diǎn)站:n);scanf(%s,si.over);/讀取終點(diǎn)站printf(請(qǐng)輸入時(shí)間:n);scanf(%s,si.time);/讀取時(shí)間printf(請(qǐng)輸入余票數(shù)(機(jī)票數(shù)為0結(jié)束輸入):n,m); scanf(%d,&si.count);/讀取機(jī)票數(shù)printf(請(qǐng)輸入機(jī)票票價(jià):n,m);scanf(%d,&si.prize);/讀取機(jī)票票價(jià)m+; /所有航班信息個(gè)數(shù)/ printf(第小個(gè)信息已經(jīng)輸完是否繼續(xù)?按1-9任意數(shù)字繼續(xù),按0結(jié)/scanf(%d,&y)
26、;printf(是否繼續(xù)添加航班?是:選1,否:選0;); scanf(%d,&k);if(k=0)束,m);save();/將結(jié)構(gòu)體信息存盤system(cls);print();/輸出輸入的航班信息break;void save()/航班信息保存模塊程序FILE *fp,*fp1;/定義文件指針if(fp=fopen(flight.txt,wb)=NULL)/打開文件并判斷是否出錯(cuò)printf(創(chuàng)建文件失敗!nn);/打印出錯(cuò)提示getchar();return;if(fp1=fopen(howmanyflights.txt,wb)=NULL)/打開文件并判斷是 否出錯(cuò)printf
27、(創(chuàng)建文件失敗!nn);/打印出錯(cuò)提示getchar();return;for(i=0;im;i+)if(fwrite(&si,sizeof(struct air),1,fp)=0)/向文件寫入數(shù)據(jù),并判斷是否出錯(cuò)printf(向文件輸入數(shù)據(jù)失敗!nn);fprintf(fp1,%d,m);fclose(fp);/關(guān)閉文件fclose(fp1);/關(guān)閉文件void read()/從文件讀取航班信息模塊FILE *fp,*fp1;/定義文件指針fp=fopen(flight.txt,r);/system(cls);/清屏if(fp=NULL)/如果當(dāng)前文件不存在,提示打開文件失敗fp1=
28、fopen(howmanyflights.txt,w+);/以寫方式打開fprintf(fp1,%d,0);/打開用戶文件失敗,則輸入用戶個(gè)數(shù)0到fp1 fclose(fp1);printf(n不存在flight.txt,正在創(chuàng)建!n); fp=fopen(flight.txt,a);printf(創(chuàng)建完成!n);system(cls);read();/perror(Open file fail);/getch();if(fp1=fopen(howmanyflights.txt,rb)=NULL)/讀寫方式打開文 件,若文件不存在,則m=0/printf(創(chuàng)建文件失敗!nn);/打印出錯(cuò)提示m
29、=0;elsefp1=fopen(howmanyflights.txt,r);fscanf(fp1, %d,&m);/讀取fp1中的用戶個(gè)數(shù)fclose(fp1);for(i=0;im;i+)fread(&si,sizeof(struct air),1,fp);/從文件中讀取信息fclose(fp);/關(guān)閉文件void print()/屏幕打印航班信息模塊read();/調(diào)用讀取文件函數(shù)if(m=0)printf(nn目前沒有航班信息!n);elseprintf(航班信息如下:n);printf(航班號(hào) 起始站終點(diǎn)站 時(shí)間票價(jià)n);for(i=0;im;i+)printf(PR
30、INT);/打印信息printf(n請(qǐng)按任意鍵回車鍵結(jié)束返回主菜單);getchar();getchar();void paixu()/對(duì)所有航班按航班價(jià)格排序余票數(shù)int j;struct paiint no;char name120;char name220;char time20;int count;int prize;p1;/臨時(shí)定義結(jié)構(gòu)體,作為排序時(shí)的第三變量read();/調(diào)用讀取信息函數(shù)for(j=0;j(m-1);j+)for(i=0;isi+1.prize) /按價(jià)格升序排列,p0為中間變 量p0.no=si.num;/替換航班號(hào)strcpy(1,si.start);/替換其始站strcpy(2,si.over);/替換終點(diǎn)站strcpy(p0.time,si.time);/替換時(shí)間p0
評(píng)論
0/150
提交評(píng)論