火車訂票系統(tǒng)c語言_第1頁
火車訂票系統(tǒng)c語言_第2頁
火車訂票系統(tǒng)c語言_第3頁
火車訂票系統(tǒng)c語言_第4頁
火車訂票系統(tǒng)c語言_第5頁
已閱讀5頁,還剩34頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

PAGE2-課程設(shè)計(論文)任務(wù)書學(xué)院專業(yè)班一、課程設(shè)計(論文)題目二、課程設(shè)計(論文)工作自2011年12月27日至2011年12月31日。三、課程設(shè)計(論文)地點:創(chuàng)新大樓實訓(xùn)中心3樓四、課程設(shè)計(論文)內(nèi)容要求:1.本課程設(shè)計的目的1)使學(xué)生增進(jìn)對數(shù)據(jù)結(jié)構(gòu)各理論知識的熟練程度,2)加強(qiáng)算法設(shè)計的能力,為以后的數(shù)據(jù)庫原理等課程的學(xué)習(xí)打下良好基礎(chǔ)。,2.課程設(shè)計的任務(wù)及要求題目一:運動會分?jǐn)?shù)統(tǒng)計要求:(要求參考《數(shù)據(jù)結(jié)構(gòu)題集》P79)□題目二:停車場管理要求:(要求參考《數(shù)據(jù)結(jié)構(gòu)題集》P96)□題目三:車廂調(diào)度要求: (要求參考《數(shù)據(jù)結(jié)構(gòu)題集》P98)□題目四:算術(shù)表達(dá)式求值演示要求: (要求參考《數(shù)據(jù)結(jié)構(gòu)題集》P99)?!躅}目五:銀行業(yè)務(wù)模擬要求: (要求參考《數(shù)據(jù)結(jié)構(gòu)題集》P100)。題目六:航空客運訂票系統(tǒng)要求:(要求參考《數(shù)據(jù)結(jié)構(gòu)題集》P101)題目七:電梯模擬要求:(要求參考《數(shù)據(jù)結(jié)構(gòu)題集》P102)題目八:迷宮問題要求:(要求參考《數(shù)據(jù)結(jié)構(gòu)題集》P105)題目九:火車訂票系統(tǒng)要求:功能實現(xiàn)訂票子系統(tǒng)、售票子系統(tǒng)、退票子系統(tǒng)、統(tǒng)計子系統(tǒng)、查詢子系統(tǒng)、生成數(shù)據(jù)子系統(tǒng)題目十:教學(xué)計劃編制問題要求:(要求參考《數(shù)據(jù)結(jié)構(gòu)題集》P150)題目十一:校園導(dǎo)游咨詢要求:(要求參考《數(shù)據(jù)結(jié)構(gòu)題集》P151)題目十二:表達(dá)式類型的實現(xiàn)要求:(要求參考《數(shù)據(jù)結(jié)構(gòu)題集》P152)題目十三:全國交通咨詢模擬要求:(要求參考《數(shù)據(jù)結(jié)構(gòu)題集》P153)題目十四:超市管理系統(tǒng)要求:實現(xiàn)對超市的各業(yè)務(wù)的管理(例如:貨物的管理、價目的管理等)□題目十五:職工工資管理系統(tǒng)要求:實現(xiàn)對職工工資的管理編輯。3)課程設(shè)計論文編寫要求1)詳細(xì)清晰地描述個人的課程設(shè)計工作;2)要按照本模板的規(guī)格打印謄寫課程報告;3)課設(shè)報告包括目錄、內(nèi)容提要、正文、課程設(shè)計體會、參考文獻(xiàn)、附錄等;4)課程報告裝訂按學(xué)校的統(tǒng)一要求完成4)評分標(biāo)準(zhǔn):1)完成原理分析:20分;2)完成設(shè)計過程:40分;3)完成代碼分析:20分。 4)個人創(chuàng)新工作:20分。學(xué)生簽名:2011年12月27日1-課程設(shè)計(論文)評審意見(1)原理分析(20分):優(yōu)()、良()、中()、一般()、差();(2)設(shè)計分析(20分):優(yōu)()、良()、中()、一般()、差();(3)程序流程(20分):優(yōu)()、良()、中()、一般()、差();(4)代碼分析(20分):優(yōu)()、良()、中()、一般()、差();(5)個人創(chuàng)新(20分):優(yōu)()、良()、中()、一般()、差();(6)格式規(guī)范性及考勤是否降等級:是()、否()評閱人:職稱:講師2011年12月31日目錄目錄 -1-正文 -1-一、需求分析(小三,黑體) -1-二、個人工作 -3-三、概要設(shè)計 -4-四、源程序 -5-五、程序結(jié)果 -28-課程設(shè)計體會 -34-正文一、需求分析(小三,黑體)1.用戶需求1-1問題描述 主要實現(xiàn)功能: 1)列車管理 2)乘客信息管理 3)票數(shù)管理及顯示 4)候補(bǔ)乘客名單 5)訂票乘客名單 6)退票管理菜單 7)列車查詢1-2目的及系統(tǒng)要求1)目的: 數(shù)據(jù)結(jié)構(gòu)課設(shè)就是要使學(xué)生學(xué)會靈活應(yīng)用所學(xué)數(shù)據(jù)結(jié)構(gòu)知識,運用其基本思路及主要圖標(biāo)工具完成一個自己所了解的業(yè)務(wù)。用自己熟悉的數(shù)據(jù)庫管理系統(tǒng)與程序語言及其相關(guān)開發(fā)工具實現(xiàn)該系統(tǒng)。在此基礎(chǔ)上,嚴(yán)格按照本大綱所附報告提綱撰寫課設(shè)報告,通過本設(shè)計進(jìn)一步弄懂?dāng)?shù)據(jù)結(jié)構(gòu)及相關(guān)的基本概念。2)系統(tǒng)要求 該系統(tǒng)能夠進(jìn)行列車管理,增加列車號、乘車區(qū)間,修改列車運行時間;訂票功能,客戶通過輸入自己的姓名、身份證來訂票;退票功能,輸入姓名來查找是否買票,然后退票;記錄及顯示乘客信息;查詢某列車是否還有票。 列車信息:車次、乘車區(qū)間、發(fā)車時間、最大載客量。 乘客信息:姓名、所訂車車次、訂票數(shù)、座位等級、乘車區(qū)間、身份證號碼。2.業(yè)務(wù)流程分析 該系統(tǒng)首先要建立列車信息,由管理員建立列車信息,然后乘客可以進(jìn)行訂票!乘客可通過查詢列車信息決定是否要定該列車的票,如果要就進(jìn)行訂票,如果沒有票了,可以選擇是否成為候補(bǔ)乘客,一旦有一定票乘客退票,就可成為訂票乘客。已訂票乘客可以通過乘客信息來查詢自己是否訂票成功,候補(bǔ)乘客也可以查詢自己是否成為候補(bǔ)乘客;如果已訂票乘客不想要票,就可以退票。二、個人工作 在這次課設(shè)中,我學(xué)會了靈活運用指針,用鏈表這樣的線性結(jié)構(gòu)來存數(shù)據(jù)。增強(qiáng)了用數(shù)據(jù)結(jié)構(gòu)知識來解決一些生活中的問題的能力,在寫這個系統(tǒng)的過程中,也遇到了許多問題,但在不斷的學(xué)習(xí)與詢問中都一一解決。三、概要設(shè)計各種票價剩余票數(shù)總票發(fā)車時間乘車區(qū)間車次列車信息各種票價剩余票數(shù)總票發(fā)車時間乘車區(qū)間車次列車信息1.列車信息圖表身份證乘車區(qū)間票類訂票數(shù)車次姓名乘客信息身份證乘車區(qū)間票類訂票數(shù)車次姓名乘客信息2.乘客信息圖表主菜主菜單列車管理菜單訂票菜單退票菜單單乘客信息管理添加新列車查看列車查看乘車區(qū)間返回主菜單進(jìn)入訂票程序進(jìn)入退票程序乘客信息候補(bǔ)乘客信息返回主菜單退出該系統(tǒng)退出該系統(tǒng)四、源程序1.各部分函數(shù)及功能:(1)頭文件:#include<stdio.h>#include<string.h>#include<iostream.h>#include<process.h>#include<conio.h>#include<iomanip.h>#definemax60#defineNULL0(2)用數(shù)據(jù)結(jié)構(gòu)定義乘客信息和列車信息兩個類:typedefstructcustomer{//乘客信息 charname[10];//姓名 int amount;//訂票數(shù) charrank;//火車票種類:硬座、軟座、硬臥、軟臥 intidcard;//身份證號碼 structcustomer*next;//指向下一乘客結(jié)點}customer;typedefstructrailway{//列車信息 chardes_name[10];//乘車區(qū)間 charrailway_no[6];//列車次 chartime[10];//時間 intcustomer_a;//乘員定額 intfree_a;//剩余票數(shù) intprice[4];//各種車票的價格 customer*custname;//以訂票乘客名單 customer*replname;//候補(bǔ)乘客名單 structrailway*next;//指向下列車結(jié)點}railway,*prailway;(3)全局變量定義:intcustomer_c=0;//所有列車的訂票乘客總數(shù)railway*head;//列車頭結(jié)點railway*p2;//列車結(jié)點指針customer*custp1[max];//各列車乘客結(jié)點指針customer*replp1[max];//各列車候補(bǔ)結(jié)點指針intIsempty=1;//是否有訂票乘客intIsreplace=1;//是否有候補(bǔ)乘客customer*prior;//滿足要求的訂票乘客的前節(jié)點,以作刪除操作intshouldsave=0;(4)詢問是否繼續(xù)函數(shù),用于各個菜單之間,當(dāng)一項操作完之后進(jìn)行詢問:charContinue()//詢問是否繼續(xù)函數(shù){charanswer; while(1) {printf("\n\t您是否想繼續(xù)(Y/N)?");scanf("%s",&answer); system("cls"); if(answer=='y'||answer=='Y')return'y'; elseif(answer=='n'||answer=='N')return'n'; elseprintf("\n\t輸入有誤,請重新輸入!");}}(5)操作出錯函數(shù),當(dāng)某一操作出錯時顯示“對不起,您的操作有誤!”:voiderrormess()//操作出錯函數(shù){printf("\n\t對不起,您的操作有誤!");getch();}(6)核對列車號是否為一,用于管理員管理時,檢查列車是否唯一,增加新列車時可以避免使用同一車次:intfind_railway(prailwayl,char*key)//核對列車號是否唯一{intflag=0;railway*p1;p1=l; if(p1==p2)returnflag; while(p1!=p2&&p1!=NULL) {if(strcmp(p1->railway_no,key)==0) {flag=1;break;} p1=p1->next;} returnflag;}(7)列車查找函數(shù),客戶可以通過此函數(shù)查看所有列車的信息,方便乘客訂票:intfind_railway(prailwayl,char*key,prailway&p2,int&railway_no)//列車號查找函數(shù){intflag=0;railway*p1;p1=l; while(p1!=NULL) {if(strcmp(p1->railway_no,key)==0) {flag=1;p2=p1;break;} p1=p1->next; if(p1!=NULL)railway_no++;} returnflag;}(8)乘車區(qū)間查找函數(shù),乘客可以通過此函數(shù)查找列車,查看是否還有票:voiddes_name_search()//乘車區(qū)間查找{railway*p1=head;chardesname[50]; if(head==NULL) {printf("\n\t沒有您要查找的乘車區(qū)間!");getch(); return;} printf("\n\t請輸入乘車區(qū)間:");scanf("%s",&desname); printf("\n\t您所查詢的乘車區(qū)間信息:"); printf("\n__________________________________________________________________________________\n"); while(p1!=NULL) {if(strcmp(p1->des_name,desname)==0) {printf("車次乘車區(qū)間時間總票額剩余票數(shù)硬座票價軟座票價硬臥票價軟臥票價\n");printf("\n%-9s%-9s%-9s%-9d%-9d%-9d%-9d%-9d%-9d",p1->railway_no,p1->des_name,p1->time,p1->customer_a,p1->free_a,p1->price[0],p1->price[1],p1->price[2],p1->price[3]);} p1=p1->next; }printf("\n__________________________________________________________________________________\n"); Continue();}(9)列車增加函數(shù),用于管理員管理列車增加列車:voidrailway_add()//列車增加函數(shù){railway*p1; while(1) {if(head==NULL) {p1=p2=newrailway;head=p2; } else {p1=newrailway;p2->next=p1;p2=p1; } printf("\n\t添加新的列車號!\n"); printf("\n\t請輸入乘車區(qū)間:"); scanf("%s",&p2->des_name); while(1) {printf("\n\t請輸入--列車號:");scanf("%s",&p2->railway_no); if(find_railway(head,p2->railway_no))printf("\n\t列車號已存在!\n"); elsebreak; } printf("\n\t請輸入時間:");scanf("%s",&p2->time); printf("\n\t請輸入座位數(shù)量:");scanf("%d",&p2->customer_a); printf("\n\t請輸入硬座價格:");scanf("%d",&p2->price[0]); printf("\n\t請輸入軟座價格:");scanf("%d",&p2->price[1]); printf("\n\t請輸入硬臥價格:");scanf("%d",&p2->price[2]); printf("\n\t請輸入軟臥價格:");scanf("%d",&p2->price[3]); p2->free_a=p2->customer_a;p2->custname=NULL; p2->replname=NULL;shouldsave=1; if(Continue()=='n') {p2->next=NULL;return;} }}(10)判斷列車是否存在函數(shù),乘客訂票時可以通過此函數(shù)查看是否有此列車:intempty_railway()//判斷列車是否存在{if(head==NULL) {system("cls"); printf("\n\t對不起,此列車不存在,按任意鍵返回!");getch(); return1; } elsereturn0;}(11)列車管理菜單,管理列車信息可以增加列車,查看列車信息,用乘車區(qū)間查看等:voidrailwaymanage()//列車管理{charc;system("cls"); while(1) {printf("\n\t\t\t\t列車管理菜單"); printf("\n__________________________________________________________________________________\n\n"); printf("\t\t\t\t1.添加新的列車號\n"); printf("\t\t\t\t2.查看列車號\n"); printf("\t\t\t\t3.查看乘車區(qū)間\n"); printf("\t\t\t\t4.返回主菜單\n"); printf("\n__________________________________________________________________________________\n"); printf("\t請選擇您要的服務(wù):");scanf("%s",&c); switch(c) {case'1':railway_add();break; case'2':railway_see();break; case'3':des_name_search();break; case'4':return;} }}(12)訂票及訂票乘客信息,乘客訂票,輸入信息:voidbooking()//訂票乘客信息{intticket_c,idcard,i,flag=0;intrailway_no=0;railway*p1;customer*p2; customer*p3;charanswer[7];chartemp,c;inttag=0;intIsrepl=0; if(empty_railway())return; while(1) {printf("\n\t現(xiàn)在您可以訂票了!"); flag=0;railway_no=0;tag=0; printf("\n\t請輸入列車號:");scanf("%s",&answer); if(find_railway(head,answer,p1,railway_no)) {while(1) {printf("\n\t請輸入您想要訂購的票的數(shù)量:"); scanf("%d",&ticket_c); if(ticket_c==0) {printf("\n\t請在此輸入列車號:");getch();} elsebreak; }if(p1->free_a>=ticket_c) {customer_c++;flag=1;Isrepl=1; if(p1->custname==NULL) {custp1[railway_no]=p2=newcustomer; p1->custname=custp1[railway_no];} else {p2=newcustomer;custp1[railway_no]->next=p2; custp1[railway_no]=p2;} Isempty=0;custp1[railway_no]->amount=ticket_c; idcard=p1->customer_a-p1->free_a+1; custp1[railway_no]->idcard=idcard; p1->free_a-=ticket_c;printf("\n\t請輸入您的姓名:"); scanf("%s",&custp1[railway_no]->name); while(1) {printf("\n\t請輸入票種:");scanf("%s",&custp1[railway_no]->rank); if(!(custp1[railway_no]->rank>='1'&&custp1[railway_no]->rank<='3')) {printf("\n\t輸入有誤,請重新輸入");getch();} elsebreak; } printf("\n\t輸入您的id信息:");scanf("%d",&custp1[railway_no]->idcard); if(ticket_c<10)printf("\n\t");elseprintf("\n\t"); printf("\n\t恭喜您訂票成功!\n"); for(i=0;i<ticket_c;i++) {printf("\n\t您所預(yù)定的座位號是%d",idcard++); if(i%10==0)printf("\n\t");} printf("\n"); } elseif(p1->free_a==0) {printf("\n\t對不起,票已售完!\n");Isrepl=0;} else {printf("\n\t對不起,當(dāng)前沒有多余的票!\n");Isrepl=0;} if(!Isrepl) { printf("\n\t您是否想成為后部乘客(Y/N)?");scanf("%s",&temp); if(temp=='y'||temp=='Y') {if(p1->replname==NULL) {replp1[railway_no]=p3=newcustomer; p1->replname=replp1[railway_no];} else {p3=newcustomer;replp1[railway_no]->next=p3; replp1[railway_no]=p3;} Isreplace=0;tag=1; replp1[railway_no]->amount=ticket_c; printf("\n\t請輸入您的姓名:");scanf("%s",&replp1[railway_no]->name); replp1[railway_no]->idcard=idcard; replp1[railway_no]->amount=ticket_c; while(1) { printf("\n\t請輸入車票種類:");scanf("%s",&replp1[railway_no]->rank);printf("\n\t請輸入您的ID信息:");scanf("%d",&replp1[railway_no]->idcard); if(!(replp1[railway_no]->rank>='1'&&replp1[railway_no]->rank<='3')) {printf("\n\t輸入有誤,請重新輸入:");getch();} elsebreak; } printf("\n\t沒有剩余座位!\n");shouldsave=1; } } }elseprintf("\n\t對不起,沒有此列車!\n"); if(flag) custp1[railway_no]->next=NULL; if(tag) {replp1[railway_no]->next=NULL; printf("\n\t您已經(jīng)成功排入后部訂票隊列中!\n");} printf("\n\t是否退出菜單?:(Y/N)");scanf("%s",&c); if(c=='y')return; }}(13)顯示訂票乘客信息:voiddisplay_reserve()//顯示訂票乘客信息{system("cls");railway*p1;customer*p2;p1=head; if(empty_railway())return; printf("\n\t\t\t訂票信息"); if(Isempty) {printf("\n\t對不起,沒有訂票乘客信息!\n");getch(); return;} printf("\n__________________________________________________________________________________\n"); printf("姓名車次訂票數(shù)乘車區(qū)間票類身份證號碼\n"); while(p1!=NULL) {if(p1->custname!=NULL) {p2=p1->custname; while(p2!=NULL) {printf("\n%-8s%-10s%-9d%-9s%-6c%-9d",p2->name,p1->railway_no,p2->amount,p1->des_name,p2->rank,p2->idcard);if(p1->free_a>=1)printf("\n\n\t還有多余的票!\n");elseprintf("\n\n\t票已售完!\n");p2=p2->next; } } p1=p1->next; printf("\n\n__________________________________________________________________________________\n");} printf("\n\t按任意鍵返回!");getch();return;}(14)候補(bǔ)乘客信息函數(shù):voiddisplay_replace()//候補(bǔ)乘客信息{system("cls");railway*p1;customer*p2;p1=head; if(empty_railway())return;printf("\n\t候補(bǔ)乘客信息!"); if(Isreplace) {printf("\n\t對不起,沒有候補(bǔ)乘客信息!\n");getch(); return;} printf("\n__________________________________________________________________________________\n"); printf("姓名車次訂票數(shù)乘車區(qū)間票類身份證號碼\n"); while(p1!=NULL) {if(p1->replname!=NULL) {p2=p1->replname; while(p2!=NULL) {printf("\n%-8s%-10s%-9d%-9s%-6c%-9d",p2->name,p1->railway_no,p2->amount,p1->des_name,p2->rank,p2->idcard);if(p1->free_a>=1)printf("\n\t還有多余的票!\n");elseprintf("\n\t票已售完!\n");p2=p2->next;} } p1=p1->next;} printf("\n\n__________________________________________________________________________________\n"); printf("\n\t按任意鍵返回!");getch();return;}(15)乘客管理菜單,乘客可以通過此函數(shù)查看自己是否訂票成功,或者是否成為候補(bǔ)乘客:voidcustomermagmenu()//乘客管理菜單{charc;system("cls"); while(1) {printf("\n\t\t乘客管理菜單\n");printf("\n________________________________________________________\n"); printf("\t\t1.乘客信息\n"); printf("\t\t2.候補(bǔ)乘客信息\n"); printf("\t\t3.返回主菜單\n");printf("\n________________________________________________________\n"); printf("\t請選擇您要的服務(wù):");scanf("%s",&c); switch(c) {case'1':display_reserve();break; case'2':display_replace();break; case'3':return; default:errormess();} }}(16)退票函數(shù),乘客通過輸入自己的姓名來進(jìn)行退票手續(xù):voidrefundticketmenu()//退票函數(shù){intrailway_no=0,flag=0;railway*p1;customer*p2,*p4;customer*p3,*p5; charanswer[7],name[7];inttag=0;intidcard; if(empty_railway())return; printf("\n\t現(xiàn)在開始退票手續(xù)"); if(Isempty) {printf("\n\t對不起,乘客不存在!");getch();return;} while(1) {flag=0;tag=0;railway_no=0; printf("\n\t請輸入車次:");scanf("%s",&answer); if(find_railway(head,answer,p1,railway_no)) {p2=p1->custname; printf("\n\t請輸入您的姓名:");scanf("%s",&name); if(p2==NULL) {printf("\n\t對不起,乘客不存在!");if(Continue()=='n')return; } else while(p2!=NULL) {if(strcmp(p2->name,name)==0) {if(p2==p1->custname) {prior=p1->custname;idcard=p2->idcard; flag=1;break;} } elseif(p2->next!=NULL) {if(strcmp(p2->next->name,name)==0) {tag=1;prior=p2; idcard=p2->next->idcard;flag=1;break; } } p2=p2->next;shouldsave=1; } if(!flag)printf("\n\t對不起,乘客不存在!\n"); } elseprintf("\n\t對不起,該車次列車不存在!\n"); if(flag) {if(prior==p1->custname&&!tag) {if(prior->next==NULL) {p1->free_a+=prior->amount;p1->custname=NULL;} else {p1->free_a+=prior->next->amount;p1->custname=prior->next; } } else{ p1->free_a+=prior->next->amount;prior->next=prior->next->next; } customer_c--;if(customer_c==0)Isempty=1;shouldsave=1;} if(flag) {p3=p1->replname; while(p3!=NULL) {if(p3->amount<=p1->free_a) {printf("\n\t后部乘客已經(jīng)存在!\n"); p4=custp1[railway_no]->next=newcustomer; p4->next=NULL;Isempty=0; if(p1->custname==NULL)p1->custname=p4; strcpy(p4->name,p3->name);p4->rank=p3->rank; p4->amount=p3->amount;p4->idcard=idcard; p1->free_a=p3->amount;customer_c++; if(p3->next==NULL)Isreplace=1; if(p1->replname==p3) {if(p1->replname->next==NULL)p1->replname=NULL; elsep1->replname=p3->next;} elsep5->next=p3->next->next;break; } if(p3->next!=NULL) if(p3->next->amount<=p1->free_a) p5=p3;p3=p3->next;shouldsave=1;} printf("\n\t退票成功!\n");getch();return; } shouldsave=1;if(Continue()=='n')return; }}(17)主函數(shù):voidmain()//主函數(shù){system("cls");system("modecon:cols=90lines=35");//窗口設(shè)計 railway*p1;p1=head;charc; do{system("cls"); printf("\n\t\t\t\t火車票訂票系統(tǒng)\n"); printf("\n****************************************************************\n"); printf("\t\t\t(1)列車管理\n"); printf("\t\t\t(2)訂票菜單\n"); printf("\t\t\t(3)退票辦理菜單\n"); printf("\t\t\t(4)乘客管理菜單\n"); printf("\t\t\t(5)退出系統(tǒng)\n"); printf("\n****************************************************************\n"); printf("請選擇您要的服務(wù):"); scanf("%s",&c); switch(c) {case'1':railwaymanage();break; case'2':booking();break; case'3':refundticketmenu();break; case'4':customermagmenu();break; case'5':exit(0); default:break;} }while(c!=5);}2.源代碼:#include<stdio.h>#include<string.h>#include<iostream.h>#include<process.h>#include<conio.h>#include<iomanip.h>#definemax60#defineNULL0typedefstructcustomer{//乘客信息 charname[10];//姓名 int amount;//訂票數(shù) charrank;//火車票種類:硬座、軟座、硬臥、軟臥 intidcard;//身份證號碼 structcustomer*next;//指向下一乘客結(jié)點}customer;typedefstructrailway{//列車信息 chardes_name[10];//乘車區(qū)間 charrailway_no[6];//列車次 chartime[10];//時間 intcustomer_a;//乘員定額 intfree_a;//剩余票數(shù) intprice[4];//各種車票的價格 customer*custname;//以訂票乘客名單 customer*replname;//候補(bǔ)乘客名單 structrailway*next;//指向下列車結(jié)點}railway,*prailway;intcustomer_c=0;//所有列車的訂票乘客總數(shù)railway*head;//列車頭結(jié)點railway*p2;//列車結(jié)點指針customer*custp1[max];//各列車乘客結(jié)點指針customer*replp1[max];//各列車候補(bǔ)結(jié)點指針intIsempty=1;//是否有訂票乘客intIsreplace=1;//是否有候補(bǔ)乘客customer*prior;//滿足要求的訂票乘客的前節(jié)點,以作刪除操作intshouldsave=0;charContinue()//詢問是否繼續(xù)函數(shù){charanswer; while(1) {printf("\n\t您是否想繼續(xù)(Y/N)?");scanf("%s",&answer); system("cls"); if(answer=='y'||answer=='Y')return'y'; elseif(answer=='n'||answer=='N')return'n'; elseprintf("\n\t輸入有誤,請重新輸入!");}}voiderrormess()//操作出錯函數(shù){printf("\n\t對不起,您的操作有誤!");getch();}intfind_railway(prailwayl,char*key)//核對列車號是否唯一{intflag=0;railway*p1;p1=l; if(p1==p2)returnflag; while(p1!=p2&&p1!=NULL) {if(strcmp(p1->railway_no,key)==0) {flag=1;break;} p1=p1->next;} returnflag;}intfind_railway(prailwayl,char*key,prailway&p2,int&railway_no)//列車號查找函數(shù){intflag=0;railway*p1;p1=l; while(p1!=NULL) {if(strcmp(p1->railway_no,key)==0) {flag=1;p2=p1;break;} p1=p1->next; if(p1!=NULL)railway_no++;} returnflag;}voiddes_name_search()//乘車區(qū)間查找{railway*p1=head;chardesname[50]; if(head==NULL) {printf("\n\t沒有您要查找的乘車區(qū)間!");getch(); return;} printf("\n\t請輸入乘車區(qū)間:");scanf("%s",&desname); printf("\n\t您所查詢的乘車區(qū)間信息:"); printf("\n__________________________________________________________________________________\n"); while(p1!=NULL) {if(strcmp(p1->des_name,desname)==0) {printf("車次乘車區(qū)間時間總票額剩余票數(shù)硬座票價軟座票價硬臥票價軟臥票價\n");printf("\n%-9s%-9s%-9s%-9d%-9d%-9d%-9d%-9d%-9d",p1->railway_no,p1->des_name,p1->time,p1->customer_a,p1->free_a,p1->price[0],p1->price[1],p1->price[2],p1->price[3]);} p1=p1->next; }printf("\n__________________________________________________________________________________\n"); Continue();}voidrailway_add()//列車增加函數(shù){railway*p1; while(1) {if(head==NULL) {p1=p2=newrailway;head=p2; } else {p1=newrailway;p2->next=p1;p2=p1; } printf("\n\t添加新的列車號!\n"); printf("\n\t請輸入乘車區(qū)間:"); scanf("%s",&p2->des_name); while(1) {printf("\n\t請輸入--列車號:");scanf("%s",&p2->railway_no); if(find_railway(head,p2->railway_no))printf("\n\t列車號已存在!\n"); elsebreak; } printf("\n\t請輸入時間:");scanf("%s",&p2->time); printf("\n\t請輸入座位數(shù)量:");scanf("%d",&p2->customer_a); printf("\n\t請輸入硬座價格:");scanf("%d",&p2->price[0]); printf("\n\t請輸入軟座價格:");scanf("%d",&p2->price[1]); printf("\n\t請輸入硬臥價格:");scanf("%d",&p2->price[2]); printf("\n\t請輸入軟臥價格:");scanf("%d",&p2->price[3]); p2->free_a=p2->customer_a;p2->custname=NULL; p2->replname=NULL;shouldsave=1; if(Continue()=='n') {p2->next=NULL;return;} }}intempty_railway()//判斷列車是否存在{if(head==NULL) {system("cls"); printf("\n\t對不起,此列車不存在,按任意鍵返回!");getch(); return1; } elsereturn0;}voidrailway_see()//查看列車信息函數(shù){ system("cls"); railway*p1; p1=head; if(empty_railway())return; printf("\n\n\t\t\t\t列車信息:\n"); printf("\n__________________________________________________________________________________\n"); printf("車次乘車區(qū)間時間總票額剩余票數(shù)硬座票價軟座票價硬臥票價軟臥票價\n"); while(p1!=NULL) { printf("\n%-9s%-9s%-9s%-9d%-9d%-9d%-9d%-9d%-9d",p1->railway_no,p1->des_name,p1->time,p1->customer_a,p1->free_a,p1->price[0],p1->price[1], p1->price[2],p1->price[3]); p1=p1->next; } printf("\n__________________________________________________________________________________\n"); printf("\n\t按任意鍵返回!\n");getch();}voidrailwaymanage()//列車管理{charc;system("cls"); while(1) {printf("\n\t\t\t\t列車管理菜單"); printf("\n__________________________________________________________________________________\n\n"); printf("\t\t\t\t1.添加新的列車號\n"); printf("\t\t\t\t2.查看列車號\n"); printf("\t\t\t\t3.查看乘車區(qū)間\n"); printf("\t\t\t\t4.返回主菜單\n"); printf("\n__________________________________________________________________________________\n"); printf("\t請選擇您要的服務(wù):");scanf("%s",&c); switch(c) {case'1':railway_add();break; case'2':railway_see();break; case'3':des_name_search();break; case'4':return;} }}voidbooking()//訂票乘客信息{intticket_c,idcard,i,flag=0;intrailway_no=0;railway*p1;customer*p2; customer*p3;charanswer[7];chartemp,c;inttag=0;intIsrepl=0; if(empty_railway())return; while(1) {printf("\n\t現(xiàn)在您可以訂票了!"); flag=0;railway_no=0;tag=0; printf("\n\t請輸入列車號:");scanf("%s",&answer); if(find_railway(head,answer,p1,railway_no)) {while(1) {printf("\n\t請輸入您想要訂購的票的數(shù)量:"); scanf("%d",&ticket_c); if(ticket_c==0) {printf("\n\t請在此輸入列車號:");getch();} elsebreak; }if(p1->free_a>=ticket_c) {customer_c++;flag=1;Isrepl=1; if(p1->custname==NULL) {custp1[railway_no]=p2=newcustomer; p1->custname=custp1[railway_no];} else {p2=newcustomer;custp1[railway_no]->next=p2; custp1[railway_no]=p2;} Isempty=0;custp1[railway_no]->amount=ticket_c; idcard=p1->customer_a-p1->free_a+1; custp1[railway_no]->idcard=idcard; p1->free_a-=ticket_c;printf("\n\t請輸入您的姓名:"); scanf("%s",&custp1[railway_no]->name); while(1) {printf("\n\t請輸入票種:");scanf("%s",&custp1[railway_no]->rank); if(!(custp1[railway_no]->rank>='1'&&custp1[railway_no]->rank<='3')) {printf("\n\t輸入有誤,請重新輸入");getch();} elsebreak; } printf("\n\t輸入您的id信息:");scanf("%d",&custp1[railway_no]->idcard); if(ticket_c<10)printf("\n\t");elseprintf("\n\t"); printf("\n\t恭喜您訂票成功!\n"); for(i=0;i<ticket_c;i++) {printf("\n\t您所預(yù)定的座位號是%d",idcard++); if(i%10==0)printf("\n\t");} printf("\n"); } elseif(p1->free_a==0) {printf("\n\t對不起,票已售完!\n");Isrepl=0;} else {printf("\n\t對不起,當(dāng)前沒有多余的票!\n");Isrepl=0;} if(!Isrepl) { printf("\n\t您是否想成為后部乘客(Y/N)?");scanf("%s",&temp); if(temp=='y'||temp=='Y') {if(p1->replname==NULL) {replp1[railway_no]=p3=newcustomer; p1->replname=replp1[railway_no];} else {p3=newcustomer;replp1[railway_no]->next=p3; replp1[railway_no]=p3;} Isreplace=0;tag=1; replp1[railway_no]->amount=ticket_c; printf("\n\t請輸入您的姓名:");scanf("%s",&replp1[railway_no]->name); replp1[railway_no]->idcard=idcard; replp1[railway_no]->amount=ticket_c; while(1) { printf("\n\t請輸入車票種類:");scanf("%s",&replp1[railway_no]->rank);printf("\n\t請輸入您的ID信息:");scanf("%d",&replp1[railway_no]->idcard); if(!(replp1[railway_no]->rank>='1'&&replp1[railway_no]->rank<='3')) {printf("\n\t輸入有誤,請重新輸入:");getch();} elsebreak; } printf("\n\t沒有剩余座位!\n");shouldsave=1; } } }elseprintf("\n\t對不起,沒有此列車!\n"); if(flag) custp1[railway_no]->next=NULL; if(tag) {replp1[railway_no]->next=NULL; printf("\n\t您已經(jīng)成功排入后部訂票隊列中!\n");} printf("\n\t是否退出菜單?:(Y/N)");scanf("%s",&c); if(c=='y')return; }}voiddisplay_reserve()//顯示訂票乘客信息{system("cls");railway*p1;customer*p2;p1=head; if(empty_railway())return; printf("\n\t\t\t訂票信息"); if(Isempty) {printf("\n\t對不起,沒有訂票乘客信息!\n");getch(); return;} printf("\n__________________________________________________________________________________\n"); printf("姓名車次訂票數(shù)乘車區(qū)間票類身份證號碼\n"); while(p1!=NULL) {if(p1->custname!=NULL) {p2=p1->custname; while(p2!=NULL) {printf("\n%-8s%-10s%-9d%-9s%-6c%-9d",p2->name,p1->railway_no,p2->amount,p1->des_name,p2->rank,p2->idcard);if(p1->free_a>=1)printf("\n\n\t還有多余的票!\n");elseprintf("\n\n\t票已售完!\n");p2=p2->next; } } p1=p1->next; printf("\n\n__________________________________________________________________________________\n");} printf("\n\t按任意鍵返回!");getch();return;}voiddisplay_replace()//候補(bǔ)乘客信息{system("cls");railway*p1;customer*p2;p1=head; if(empty_railway())return;printf("\n\t候補(bǔ)乘客信息!"); if(Isreplace) {printf("\n\t對不起,沒有候補(bǔ)乘客信息!\n");getch(); return;} printf("\n__________________________________________________________________________________\n"); printf("姓名車次訂票數(shù)乘車區(qū)間票類身份證號碼\n"); while(p1!=NULL) {if(p1->replname!=NULL) {p2=p1->replname; while(p2!=NULL) {printf("\n%-8s%-10s%-9d%-9s%-6c%-9d",p2->name,p1->railway_no,p2->amount,p1->des_name,p2->rank,p2->idcard);if(p1->free_a>=1)printf("\n\t還有多余的票!\n");elseprintf("\n\t票已售完!\n");p2=p2->next;} } p1=p1->next;} printf("\n\n__________________________________________________________________________________\n"); printf("\n\t按任意鍵返回!");getch();return;}voidcustomermagmenu()//乘客管理菜單{charc;system("cls"); while(1) {printf("\n\t\t乘客管理菜單\n");printf("\n________________________________________________________\n"); printf("\t\t1.乘客信息\n"); printf("\t\t2.候補(bǔ)乘客信息\n"); printf("\t\t3.返回主菜單\n");printf("\n________________________________________________________\n"); printf("\t請選擇您要的服務(wù):");scanf("%s",&c); switch(c) {case'1':display_reserve();break; case'2':display_replace();break; case'3':return; default:errormess();} }}voidrefundticketmenu()//退票函數(shù){intrailway_no=0,flag=0;railway*p1;customer*p2,*p4;customer*p3,*p5; charanswer[7],name[7];inttag=0;intidcard; if(empty_railway())return; printf("\n\t現(xiàn)在開始退票手續(xù)"); if(Isempty) {printf("\n\t對不起,乘客不存在!");getch();return;} while(1) {flag=0;tag=0;railway_no=0; printf("\n\t請輸入車次:");scanf("%s",&answer); if(find_railway(head,answer,p1,railway_no)) {p2=p1->custname; printf("\n\t請輸入您的姓名:");scanf("%s",&name); if(p2==NULL) {printf("\n\t對不起,乘客不存在!");if(Continue()=='n')return; } else while(p2!=NULL) {if(strcmp(p2->name,name)==0) {if(p2==p1->custname) {

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論