C語言課程設計報告火車售票系統(tǒng)_第1頁
C語言課程設計報告火車售票系統(tǒng)_第2頁
C語言課程設計報告火車售票系統(tǒng)_第3頁
C語言課程設計報告火車售票系統(tǒng)_第4頁
C語言課程設計報告火車售票系統(tǒng)_第5頁
已閱讀5頁,還剩32頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

/一、課程設計的原始資料及依據在現(xiàn)代社會,火車以其安全,舒適以及其服務的周到使愈來愈多的人選擇了火車為長距離出行的交通工具,這就使火車公司以及車站的工作量愈來愈大,若仍然使用文件或者人工來管理公司、車站、火車、列班、路線、客戶以及售票的信息,那無疑在效率上會大打折扣。21世紀的今天,信息社會占著主流地位,計算機在各行各業(yè)中的運用已經得到普及,自動化、信息化的管理越來越廣泛應用于各個領域。利用計算機來儲存和管理公司、車站、火車、列班、車線、客戶以及售票的信息成為了首選,在這種情況下,火車訂票系統(tǒng)就顯得非常重要了。兩個客戶名單可分別由線性表和隊列實現(xiàn)。為查找方便,已訂票客戶的線性表應按客戶姓名有序,并且,為插入和刪除方便,應以鏈表作存儲結構。由于預約人數無法預計,隊列也應以鏈表作存儲結構。整個系統(tǒng)需匯總各條路線的情況登錄在一張線性表上,由于路線基本不變,可采用順序存儲結構,并按車次有序或按終點站名有序。每條路線是這張表上的一個記錄,包含上述8個域,其中乘員名單域為指向乘員名單鏈表的頭指針,等候替補的客戶名單域為分別指向隊頭和隊尾的指針。隊列〔Queue是只允許在一端進行插入,而在另一端進行刪除的運算受限的線性表。用隊列來進行客戶信息的存儲。編輯用戶使用菜單,內容包括:輸入列班信息,保存列班信息,讀取列班信息,查找列班信息,刪除列班信息,訂票信息,退票信息以及修改信息。二、課程設計主要內容及要求1.列車基本信息管理:輸入所有列班信息。每條路線所涉及的信息有:終點站名、車次號、車廂號、開車周日〔星期幾、乘員定額、余票量、已訂票的客戶名單〔包括姓名、訂票量、座位等級1,2或3以及等候替補的客戶名單〔包括姓名、所需的票量。2.列車基本信息查詢:按車次號查找,按抵達站查找,按路線查找三種查找方式進行查找。3.訂票管理:客戶對想要購買的票進行訂票。3.退票管理:將不想要的票進行退票。三、對課程設計說明書撰寫內容、格式、字數的要求1.課程設計說明書是體現(xiàn)和總結課程設計成果的載體,主要內容包括:設計題目、設計目的、設備器材、設計原理及內容、設計步驟、遇到的問題及解決方法、設計總結、設計小組評語、參考文獻等。一般不應少于3000字。2.在適當位置配合相應的實驗原理圖、數據通路圖、微程序流程圖、實驗接線圖、微指令代碼表等圖表進行說明。應做到文理通順,內容正確完整,書寫工整,裝訂整齊。3.設計總結部分主要寫本人完成工作簡介以及自己的設計體會,包括通過課程設計學到了什么,哪里遇到了困難,解決的辦法以及今后的目標。設計小組評語處注明設計組編號、設計組組長、設計組成員,并由設計組組長給出評語。4.課程設計說明書手寫或打印均可。手寫要用學校統(tǒng)一的課程設計用紙,用黑或藍黑墨水工整書寫;打印時采用A4紙,頁邊距均為20mm,正文采用宋體小四號字,行間距18磅。文中大標題采用黑體小三號字,一級節(jié)標題采用黑體四號字,二級節(jié)標題采用黑體小四號字,表題與圖題采用宋體五號字。5.課程設計說明書裝訂順序為:封面、任務書、成績評定表、目錄、正文、參考文獻。四、設計完成后應提交成果的種類、數量、質量等方面的要求1.完成"任務書"中指定的操作功能,運行穩(wěn)定。2.課程設計說明書。五、時間進度安排順序階段日期計劃完成內容備注1第1天〔12月27日閱讀資料2第2—3天〔12月28日—12月29日系統(tǒng)分析設計3第4—7天〔12月30日—01月04日程序編制、調試及運行4第8—9天〔01月05日—01月06日成績評定5第10天〔01月07日撰寫課程設計說明書六、主要參考資料〔文獻[1]嚴蔚敏吳偉民.數據結構〔C語言版.北京:清華大學出版社.2007[2]譚浩強.C程序設計.北京:清華大學出版社.1999.12[3]滕國文.數據結構課程設計.北京:清華大學出版社.2010.09[4]蘇仕華等編著.數據結構課程設計.北京:機械工業(yè)出版社.2005.05[5]李春葆.數據結構〔C語言版習題與解析.北京:清華大學出版社.2002..04摘要現(xiàn)代科學技術的飛速發(fā)展,改變了世界,也改變了人類的生活。作為新世紀的大學生,應當站在時代發(fā)展的前列,掌握現(xiàn)代科學技術知識,調整自己的知識結構和能力結構,以適應社會發(fā)展的要求。新世紀需要具有豐富的現(xiàn)代科學知識,能夠獨立解決面臨的任務,充滿活力,又有創(chuàng)新意識的新型人才。隨著各個領域的突飛猛進,計算機也有它卓越的進步。數據結構不僅為計算機專業(yè)工作者所使用,而且為廣大計算機應用人員所喜愛和使用。數據結構是國際上廣泛流行的計算機高級語言。它適合作為系統(tǒng)描述語言,既可以用來編寫系統(tǒng)軟件,也可以用來編寫應用軟件。許多高等學校,不僅在計算機專業(yè)開設數據結構課程,而且在非計算機專業(yè)也開設了數據結構課程。學習數據結構已經成為廣大計算機應用人員和廣大青年學生的迫切要求。本次數據結構課程設計的題目是火車售票系統(tǒng)。對于火車售票系統(tǒng),兩個客戶名單可分別由線性表和隊列實現(xiàn)。為查找方便,已訂票客戶的線性表應按客戶姓名有序,并且,為插入和刪除方便,應以鏈表作存儲結構。由于預約人數無法預計,隊列也應以鏈表作存儲結構。整個系統(tǒng)需匯總各條路線的情況登錄在一張線性表上,由于路線基本不變,可采用順序存儲結構,并按車次有序或按終點站名有序。每條路線是這張表上的一個記錄,包含上述8個域,其中乘員名單域為指向乘員名單鏈表的頭指針,等候替補的客戶名單域為分別指向隊頭和隊尾的指針。編輯用戶使用菜單,內容包括:輸入列班信息,保存列班信息,讀取列班信息,查找列班信息,刪除列班信息,訂票信息,退票信息以及修改信息。在為期兩周的數據結構課程設計學習中,先要學習數據結構課程的目的掌握數據結構存儲的方法,學習會用計算機語言編寫程序,以實現(xiàn)所需要處理的任務。要正確處理算法與語法的關系,算法結構存儲是程序的核心、是靈魂,語法是外殼、是工具。不應把學習重點放在語法規(guī)則上,語法是重要的,不掌握語法規(guī)則就無法編寫出正確的程序。一定要把重點放在解題的思路上和運用何種存儲的方法,通過思考和大量的閱讀,來構造一個完整的程序。數據結構存儲的設計直接關系到程序的好壞。最后,感謝老師在我們程序設計的過程中辛勤的指導和不倦的教誨。關鍵詞線性表,數組,隊列,設計目錄摘要I第一章問題分析11.1引言11.2背景11.3分析11.3.2火車售票系統(tǒng)2第二章原理與運行環(huán)境32.1數據結構理論32.1.2火車售票系統(tǒng)數據結構理論32.2運行環(huán)境44.2火車售票系統(tǒng)功能實現(xiàn)214.2.1定義主函數214.2.2列車基本信息管理234.2.3列車基本信息查詢254.2.4訂票管理274.2.5退票管理31結論35致謝36參考文獻37第一章問題分析1.1引言數據結構的教學要求是:學會分析研究計算機加工的數據結構的特征,以便為應用涉及的數據選擇適當的邏輯結構、存儲結構及其相應的算法,并初步掌握算法的時間分析和空間分析的技術。另一方面,本課程的學習過程也是復雜程序設計的訓練過程,要求學生編寫的程序結構清楚和正確易讀,符合軟件工程的規(guī)范。在學習中,先要學習程序設計課程的目的掌握設計程序的思路,學習會用計算機語言編寫程序,以實現(xiàn)所需要處理的任務。要正確處理算法與語法的關系,算法是程序的核心、是靈魂,語法是外殼、是工具。不應把學習重點放在語法規(guī)則上,語法是重要的,不掌握語法規(guī)則就無法編寫出正確的程序。一定要把重點放在解題的思路上,通過思考,和大量的閱讀,來構造一個完整的程序。請記?。褐匾氖菍W會編程,而不是背語法。程序設計是為了鍛煉我們的實際動手能力,在一定程度上,又增加了我們的各方面的知識,特別是一些聯(lián)系實際的課程設計,它的完成需要自己平時積累的大量知識、并且需要勤于思考的能力和無限的激情。本次課程設計主要是學習程序設計的方法,進行程序設計的基本訓練,大多數的學生應該把精力放在最基本,最常用的內容上,學好基本功。通過本次課程設計,相信我們一定能加強對數據結構這門課程的學習,尤其在動手實踐上會有很大的進步。1.2背景在人們日常的火車訂票和退票中,有大量的數據和信息需要存儲和處理,通常紙質的檔案不容易保存和使用,在查詢,訂票,退票上有很大的困難,浪費大量的時間和人力也不一定能夠取得很好的效果,為了方便人們訂票,開發(fā)一個火車售票系統(tǒng)迫在眉睫。1.3分析1.3.1火車售票系統(tǒng)兩個客戶名單可分別由線性表和隊列實現(xiàn)。為查找方便,已訂票客戶的線性表應按客戶姓名有序,并且,為插入和刪除方便,應以鏈表作存儲結構。由于預約人數無法預計,隊列也應以鏈表作存儲結構。整個系統(tǒng)需匯總各條路線的情況登錄在一張線性表上,由于路線基本不變,可采用順序存儲結構,并按車次有序或按終點站名有序。每條路線是這張表上的一個記錄,包含上述8個域,其中乘員名單域為指向乘員名單鏈表的頭指針,等候替補的客戶名單域為分別指向隊頭和隊尾的指針。隊列〔Queue是只允許在一端進行插入,而在另一端進行刪除的運算受限的線性表。用隊列來進行客戶信息的存儲。編輯用戶使用菜單,內容包括:列車基本信息管理,列車基本信息查詢,訂票管理,退票管理。火車售票系統(tǒng)分為四個大模塊,分別為列車基本信息管理,列車基本信息查詢,訂票管理,退票管理。⑴列車基本信息管理輸入火車的車次號。在循環(huán)中,如果火車的車次號不存在的話,創(chuàng)建新結點并依次輸入火車的信息,該車次號的信息輸入完畢,保存到文件中,結束輸入;如果火車的車次號存在的話,重新輸入,重復上述過程,單鏈表創(chuàng)建完畢。⑵列車基本信息查詢列車基本信息查詢是在已有的火車訂票系統(tǒng)中按地點、按車次、按車線查找到火車信息,并將其顯示在屏幕上。通過移動指針找到與輸入相同的地點、車次、車線,并將該地點、車次、車線所對應的火車的信息輸出。⑶訂票管理根據查詢功能查找出所要訂購的車票信息,輸入所要訂購的車票信息。先判斷鏈表是否為空,若為空,顯示"沒有任何記錄";若不為空,輸入車票的數量,看有沒有火車票,若沒有火車票,輸出沒有火車票,否則對該結點進行訂票操作。⑷退票管理根據查詢功能查找出所要退票的車票信息,先判斷鏈表是否為空,若為空,返回主菜單;若不為空,看是否過期,若過期,輸出退票失敗,否則對該結點進行退票操作。主函數是程序的入口,采用模塊化設計。通過一定的入口可以進行列車基本信息管理、列車基本信息查詢、訂票管理、退票管理。YYYYYYYY開始主菜單功能選擇1?2?3?錄入班次信息瀏覽班次信息查詢行車路線選擇查詢按班次查詢1?2?按終點查詢3?4?售票與退票管理系統(tǒng)選擇1?2?3?訂票系統(tǒng)退票系統(tǒng)5?退出結束YYYN第二章原理與運行環(huán)境2.1數據結構理論2.1.1火車售票系統(tǒng)數據結構理論鏈接方式存儲的線性表簡稱為鏈表。鏈表是一種動態(tài)存儲結構,所占用的存儲空間在程序的執(zhí)行過程中得到,當線性表需要增加一個結點時,要為該結點向系統(tǒng)申請一個存儲空間。當線性表刪除一個結點時,要將已刪除的結點的存儲空間釋放,歸還給系統(tǒng)。每個存儲結點不僅包含有所存儲元素本身的信息〔稱之為數據域,而且包含所有元素之間邏輯關系的信息,即前驅結點包含有后繼結點的地址信息〔這稱為指針域,這樣可以通過前驅結點的指針域方便地找到后繼結點的位置,提高數據查找速度。隊列是一種先進后出的線性表,它只允許在表的一端進行插入,而在另一端進行刪除元素。以隊列的鏈式表示和實現(xiàn)為例。一個鏈隊列需要兩個分別指向隊頭和隊尾的指針才能唯一確定。首先給鏈隊列添加一個頭結點,并且令頭指針指向頭結點。鏈隊列的操作即為單鏈表的插入和刪除的特殊情況,只是尚需修改尾指針或頭指針。一般情況下,刪除隊列頭元素時僅需修改頭結點中的指針,但當隊列中最后一個元素被刪除后,隊列尾指針也丟失了,因此,需要對隊尾指針重新賦值〔指向頭結點。

火車售票系統(tǒng)應用數據結構的知識有:鏈式線性表存儲結構和隊列。線性表的鏈式存儲結構的特點:是用一組任意的存儲單元存儲線性表的數據元素,結點的一個域表示元素本身,另一個是能指示其后繼的指針,用來表示線性表數據元素的邏輯關系。順序表的可隨機存取特點。我們將任務分成多個最簡化的模塊,增強了可讀性和簡單性,同時為日后的編寫,調試,維護提供了極大地方便。隊列的特點是:它只允許在表的一端進行插入,而在另一端進行刪除元素。在火車售票系統(tǒng)中,我們把列車和客戶分別作為一個結點,該結點類型為結構體型,結構體中的域表示列車和客戶的屬性。每個結點除了存放屬性外,還存放指向后繼結點的指針。列車基本信息管理:存儲是將一個車次信息作為一個結點以鏈式存儲在文件中。列車基本信息查詢:在已有的火車售票系統(tǒng)中按地點,按車次,按車線查找到列車信息,并將其顯示在屏幕上。訂票管理:在原有的火車售票系統(tǒng)中查找到要訂購的車次信息,并將該車次所在的結點輸出。退票管理:根據查詢功能查找出所要退票的車票信息,然后退票處理。2.2運行環(huán)境本程序的運行環(huán)境為MicrosoftVisualC++。開始→程序→MicrosoftVisualC++,創(chuàng)建工程名稱,如圖2-1所示。圖2.1創(chuàng)建工程名在工程中選定文件類型,選擇C++SourceFile,其界面如圖2.2。圖2.2文件類型新建完環(huán)境和文件類型之后,進入輸入代碼的界面,即工程環(huán)境,如下圖2.3。圖2.3工程環(huán)境第三章系統(tǒng)分析與設計及其實現(xiàn)3.2火車售票系統(tǒng)分析與設計3.2.1車票系統(tǒng)的功能本任務要求實現(xiàn)火車售票系統(tǒng),輸入火車基本信息以及客戶信息,并將其存入文件中。根據需要可以進行如下操作:列車基本信息管理、列車基本信息查詢、訂票管理、退票管理。其功能模塊圖,如圖3-5所示。圖3-5車票售票系統(tǒng)模塊圖流程圖如下。YYYYYYYY開始主菜單功能選擇1?2?3?錄入班次信息瀏覽班次信息查詢行車路線選擇查詢按班次查詢1?2?按終點查詢3?4?售票與退票管理系統(tǒng)選擇1?2?3?訂票系統(tǒng)退票系統(tǒng)5?退出結束YYYN3.2.2系統(tǒng)模塊分析及其流程圖與函數〔1主函數聲明/**********************************************/voidShowMessage<void>;/*載入原始數據*/voidmainmenu<void>;/*主菜單*/voidInputMessage<void>;/*錄入班次信息*/voidSearchMenu<void>;/*查詢路線子菜單*/voidSearchByNumber<void>;/*按班次號查詢*/voidSearchByAddress<void>;/*按終點站查詢*/voidTicketManagement<void>;/*車票售出與退回*/voidTicketOrder<void>;/*售票*/voidTicketDelete<void>;/*退票*/voidexit<void>;/*退出該系統(tǒng)*/voidSaveRecord<ticketx>;/*儲存信息到文件中*/voidRead<void>;/**********************************************/在此定義所有將用到的函數,方便以后對函數的調用。〔2主菜單/*******************************************主菜單********************************************/intmain<void>{do{mainmenu<>;}while<FLAG==FALSE>;return0;}voidmainmenu<void>{system<"modecon:cols=140lines=130">;/*對運行是的界面大小做出規(guī)定*/charfunctionNumber;printf<"車票管理系統(tǒng)\n\n">;printf<"制作:呂齊吳明洋伍雪強\n">;printf<"日期:2011/4/08\n\n">;time_trawtime;structtm*timeinfo;time<&rawtime>;timeinfo=localtime<&rawtime>;printf<"當前時間:%d:%d",timeinfo->tm_hour,timeinfo->tm_min>;printf<"\n">;printf<"┏━━━━━━━━━━━━━━━━━━┓\n">;printf<"┃1.錄入班次信息┃\t\n">;printf<"┃2.瀏覽班次信息┃\t\n">;printf<"┃3.查詢行車路線┃\t\n">;printf<"┃4.售票與退票系統(tǒng)┃\t\n">;printf<"┃5.退出該系統(tǒng)┃\t\n">;printf<"┗━━━━━━━━━━━━━━━━━━┛\n">;printf<"__@__@__@__@__~@\n">;printf<"_`\<,__`\<,__`\<,__`\<,__`\<,_\n">;printf<"<*>/<*><*>/<*><*>/<*><*>/<*><*>/<*>\n">;printf<"\n">;/***************************************功能導入****************************************/printf<"請選擇你所需要的功能:">;Read<>;scanf<"%c",&functionNumber>;switch<functionNumber>{case'1':{InputMessage<>;/*進入信息錄入*/printf<"\n按任意鍵回主菜單\n">;getchar<>;getchar<>;}break;case'2':{//RecordNumber=ShowMessage<>;/*進入瀏覽信息*/ ShowMessage<>;printf<"\n按任意鍵回主菜單\n">;getchar<>;getchar<>;}break;case'3':{SearchMenu<>;/*進入查詢子菜單*/printf<"\n按任意鍵回主菜單\n">;getchar<>;getchar<>;}break;case'4':{TicketManagement<>;/*進入票務管理*/getchar<>;getchar<>;}break;case'5':FLAG=TRUE;exit<>;break;default:{printf<"輸入錯誤,請確保你的輸入為1--5.\n">;/*輸入操作失誤,返回重新輸入*/printf<"按任意鍵回主菜單\n">;getchar<>;getchar<>;}}FLAG=FALSE;}<2>列車信息錄入列車信息錄入是通過dowhile循環(huán)將所存儲的列車基本信息存儲在文件中,其順序依次是車次、時間、始發(fā)站、終點站、行車時間、額定載額、已載人數。每次列車信息錄入之后,用while循環(huán)來判斷是否繼續(xù)錄入,其流程圖如圖3-6所示。/*******************************************錄入信息函數*******************************************/voidInputMessage<void>{charyn;FILE*fp;/*再此添加引用文件*/inti=RecordNumber;if<<fp=fopen<"add.txt","a">>==NULL>/*如果文件為空,則文件打不開*/{printf<"不能打開文件\n">;return;}do{/*信息錄入的"do-while"循環(huán)函數*/ printf<"車次:\n">; scanf<"%d",&train[i].SerialNumber>; printf<"發(fā)車時間:\n">; scanf<"%d:%d",&train[i].SetOut.hour,&train[i].SetOut.minutes>; if<train[i].SetOut.hour>23||train[i].SetOut.minutes>59>/*判斷當前輸入的列車時間是否有誤*/ { printf<"輸入時間有誤,請重新輸入\n">;/*輸入有誤則進行重新輸入*/ getchar<>; } printf<"始發(fā)站:\n">; scanf<"%s",&train[i].DeparturePoint>; printf<"終點站:\n">; scanf<"%s",&train[i].TerminalPoint>; printf<"行車時間:\n">; scanf<"%f",&train[i].LastTime>; printf<"額定載量:\n">; scanf<"%d",&train[i].Edingzailiang>; printf<"已定票人數:\n">; scanf<"%d",&train[i].Yidingpiaorenshu>; if<train[i].Yidingpiaorenshu>train[i].Edingzailiang>/*判斷此車票是否售完*/ { printf<"輸入數據有誤,請重新輸入\n">; printf<"已定票人數:\n">; scanf<"%d",&train[i].Yidingpiaorenshu>; } fprintf<fp,"\n%d\t%d\t%d\t\t",train[i].SerialNumber,train[i].SetOut.hour,train[i].SetOut.minutes>;fprintf<fp,"%s\t%s\t\t%.1f\t%d\t\t%d",train[i].DeparturePoint,train[i].TerminalPoint,train[i].LastTime,train[i].Edingzailiang,train[i].Yidingpiaorenshu>;i++; getchar<>;printf<"是否繼續(xù)?y/n\n">;yn=getchar<>;}while<yn=='Y'||yn=='y'>;/*對是否繼續(xù)進行循環(huán)進行判斷*/RecordNumber=i;fclose<fp>;/*運行完畢關閉文件*/return;}其功能實現(xiàn)圖如圖4-4所示。圖4.4錄入信息YYYYYYYY開始主菜單功能選擇1?2?3?錄入班次信息瀏覽班次信息查詢行車路線選擇查詢按班次查詢1?2?按終點查詢3?4?售票與退票管理系統(tǒng)選擇1?2?3?訂票系統(tǒng)退票系統(tǒng)5?退出結束YYYN圖3-6列車基本信息管理流程圖<2>列車信息瀏覽列車信息瀏覽是將已有的火車售票系統(tǒng)中的各次火車信息顯示在屏幕上。用戶可以直觀的看到所有的班次信息,方便用戶查找所需的車次及路線。如圖3-7所示。/***********************************************瀏覽信息函數***********************************************/voidShowMessage<void>{inti=0;FILE*fp;if<<fp=fopen<"add.txt","r">>==NULL>{printf<"讀取數據失敗,請檢查文件add.txt是否存在.\n">;exit<-1>;}printf<"班次\t發(fā)車時間\t起點\t終點\t行車時間<小時>\t額定載量\t已定票人數\n">;for<i=0;i<=RecordNumber;i++>{printf<"%d\t%d:%d\t\t",train[i].SerialNumber,train[i].SetOut.hour,train[i].SetOut.minutes>;printf<"%s\t%s\t\t%.1f\t%d\t\t%d\t",train[i].DeparturePoint,train[i].TerminalPoint,train[i].LastTime,train[i].Edingzailiang,train[i].Yidingpiaorenshu>;/*******調用系統(tǒng)時間實現(xiàn)的功能:如果車已發(fā)出,則打出提示"此車已發(fā)出"******/time_trawtime;/*在此處引用能夠調用系統(tǒng)時間的"time"結構體,調用系統(tǒng)時間*/structtm*timeinfo;time<&rawtime>;timeinfo=localtime<&rawtime>;if<<timeinfo->tm_hour==train[i].SetOut.hour&&timeinfo->tm_min>=train[i].SetOut.minutes>||<timeinfo->tm_hour>train[i].SetOut.hour>>/*將發(fā)車時間與此時系統(tǒng)時間作比較,判斷此車是否發(fā)出*/printf<"此車已發(fā)出">;printf<"\n">;}fclose<fp>;/*運行完畢關閉文件*/return;}其功能實現(xiàn)圖如圖4-5所示。圖4-5列車基本信息查詢<3>車票信息查詢在車票信息查詢這個系統(tǒng)中,用戶可以根據不同的需求來查找所需的班次信息,包括終點查詢和班次查詢,輸入所需的班次或者終點站就會顯示所有符合條件的車次信息了,用戶就可以清楚直觀的看到想要的車次了,其界面如圖2.4。/******************************************查詢子菜單*******************************************/voidSearchMenu<void>{system<"modecon:cols=140lines=130">;/*對運行是的界面大小做出規(guī)定*/charfunctionNumber;printf<"查詢子菜單\n">;printf<"┏━━━━━━━━━━━━━━━━━━┓\t\n">;printf<"┃1.按班次號查詢┃\t\n">;printf<"┃2.按終點站查詢┃\t\n">;printf<"┃3.返回主菜單┃\t\n">;printf<"┗━━━━━━━━━━━━━━━━━━┛\n">;printf<"請選擇你所需要的功能:">;scanf<"%*c%c",&functionNumber>;switch<functionNumber>{case'1':SearchByNumber<>;break;/*進入按班次查詢*/case'2':SearchByAddress<>;break;/*進入按終點查詢*/case'3':/*返回主菜單*/getchar<>;mainmenu<>;break;default:printf<"輸入錯誤,請確保你的輸入為1--3.\n">;/*輸入操作有誤提示*/printf<"按任意鍵回查詢子菜單\n">;/*返回并重新輸入*/getchar<>;SearchMenu<>;}}voidSearchByNumber<void>{intSearchNumber;printf<"請輸入要查詢的班次號:">;scanf<"%d",&SearchNumber>;printf<"班次\t發(fā)車時間\t起點\t終點\t行車時間<小時>\t額定載量\t已定票人數\n">;printf<"%d\t%d:%d\t\t",train[SearchNumber-1].SerialNumber,train[SearchNumber-1].SetOut.hour,train[SearchNumber-1].SetOut.minutes>;printf<"%s\t%s\t\t%.1f\t%d\t\t%d\n",train[SearchNumber-1].DeparturePoint,train[SearchNumber-1].TerminalPoint,train[SearchNumber-1].LastTime,train[SearchNumber-1].Edingzailiang,train[SearchNumber-1].Yidingpiaorenshu>;}voidSearchByAddress<void>{inti;charAddress[MAX];printf<"請輸入終點站的名稱:">;scanf<"%s",&Address>;printf<"班次\t發(fā)車時間\t起點\t終點\t行車時間<小時>\t額定載量\t已定票人數\n">;for<i=0;i<RecordNumber;i++>{//***************對比終點站記錄,找到并輸出**********if<<strcmp<Address,train[i].TerminalPoint>>==0>{printf<"%d\t%d:%d\t\t",train[i].SerialNumber,train[i].SetOut.hour,train[i].SetOut.minutes>;printf<"%s\t%s\t\t%.1f\t%d\t\t%d\n",train[i].DeparturePoint,train[i].TerminalPoint,train[i].LastTime,train[i].Edingzailiang,train[i].Yidingpiaorenshu>;}}}功能實現(xiàn)圖如圖4-6所示。圖4-4列車基本信息管理<4>訂票與退票管理訂票管理是在原有的火車售票系統(tǒng)中查找到要訂購的車票信息,如果有票,將該車票的發(fā)車時間與現(xiàn)在的時間做以比較,若車票的發(fā)車時間超過現(xiàn)在的時間,顯示已發(fā)車;若沒超過現(xiàn)在的時間,則可以實現(xiàn)訂票。退票管理是在原有的火車訂票系統(tǒng)中查找到要退票的車票信息,將該車票的發(fā)車時間與現(xiàn)在的時間做以比較,若車票的發(fā)車時間超過現(xiàn)在的時間,顯示已發(fā)車,不能完成退票;若沒超過現(xiàn)在的時間,則可以實現(xiàn)退票。其流程圖如下。圖2.2訂票管理流程圖圖3-11退票管理流程圖/*****************************************票務管理函數*****************************************/voidTicketManagement<void>{charfunctionNumber;system<"modecon:cols=140lines=130">;printf<"訂票與退票菜單\n">;printf<"┏━━━━━━━━━━━━━━━━━━┓\n">;printf<"┃1.訂票┃\t\n">;printf<"┃2.退票┃\t\n">;printf<"┃3.返回主菜單┃\t\n">;printf<"┗━━━━━━━━━━━━━━━━━━┛\n">;printf<"選擇你需要的功能:">;scanf<"%*c%c",&functionNumber>;switch<functionNumber>{case'1':TicketOrder<>;break;case'2':TicketDelete<>;break;case'3':{getchar<>;mainmenu<>;}break;default:{printf<"輸入錯誤,請確保你的輸入為1--3.\n">;printf<"按任意鍵返回\n">;getchar<>;TicketManagement<>;}}}voidTicketOrder<void>{inti;time_trawtime;structtm*timeinfo;printf<"請輸入要訂購的車票的班次:">;scanf<"%d",&i>;printf<"i=%d\n",i>;if<i<1||i>RecordNumber+1>{printf<"對不起,今天沒有這趟車,請明天再來,謝謝使用!\n">;printf<"按任意鍵回主菜單\n">;getchar<>;mainmenu<>;}time<&rawtime>;timeinfo=localtime<&rawtime>;printf<"ff=%d\n",timeinfo->tm_hour>;if<<timeinfo->tm_hour==train[i-1].SetOut.hour&&timeinfo->tm_min<train[i-1].SetOut.minutes>||<timeinfo->tm_hour<train[i-1].SetOut.hour>>{if<train[i-1].Yidingpiaorenshu<train[i-1].Edingzailiang>{<train[i-1].Yidingpiaorenshu>++;printf<"你的訂票成功,請按時上車,謝謝使用!\n">;}elseprintf<"對不起,今天的這趟車的票已賣完,請明天再來,謝謝合作!\n">;}elseprintf<"對不起,今天的這趟車已發(fā)出,請明天再來,謝謝合作!\n">;printf<"班次\t發(fā)車時間\t起點\t終點\t行車時間<小時>\t額定載量\t已定票人數\n">;printf<"%d\t%d:%d\t\t",train[i-1].SerialNumber,train[i-1].SetOut.hour,train[i-1].SetOut.minutes>;printf<"%s\t%s\t\t%.1f\t%d\t\t%d\n",train[i-1].DeparturePoint,train[i-1].TerminalPoint,train[i-1].LastTime,train[i-1].Edingzailiang,train[i-1].Yidingpiaorenshu>;printf<"按任意鍵回主菜單\n">;getchar<>;getchar<>;mainmenu<>;}voidTicketDelete<void>{inti;printf<"請輸入要退購的車票的班次:">;scanf<"%d",&i>;if<i<1||i>RecordNumber+1>{printf<"對不起,今天沒有這趟車,無法完成退票.謝謝使用!\n">;getchar<>;getchar<>;TicketManagement<>;}time_trawtime;structtm*timeinfo;time<&rawtime>;timeinfo=localtime<&rawtime>;if<<timeinfo->tm_hour==train[i-1].SetOut.hour&&timeinfo->tm_min<train[i-1].SetOut.minutes>||<timeinfo->tm_hour<train[i-1].SetOut.hour>>{if<train[i-1].Yidingpiaorenshu>=1>{train[i-1].Yidingpiaorenshu-=1;printf<"退訂車票成功,謝謝使用!\n">;}elseprintf<"對不起,今天的這趟車的票尚未賣出,無法完成退票!\n">;}elseprintf<"對不起,今天的這趟車已發(fā)出,無法完成退票!\n">;printf<"班次\t發(fā)車時間\t起點\t終點\t行車時間<小時>\t額定載量\t已定票人數\n">;printf<"%d\t%d:%d\t\t",train[i-1].SerialNumber,train[i-1].SetOut.hour,train[i-1].SetOut.minutes>;printf<"%s\t%s\t\t%.1f\t%d\t\t%d\n",train[i-1].DeparturePoint,train[i-1].TerminalPoint,train[i-1].LastTime,train[i-1].Edingzailiang,train[i-1].Yidingpiaorenshu>;printf<"按任意鍵回主菜單\n">;getchar<>;getchar<>;mainmenu<>;}voidexit<void>{printf<"\n\n*********************謝謝使用本系統(tǒng),歡迎下次繼續(xù)使用***********************\n">;exit<0>;}voidSaveRecord<ticketx>{FILE*fp;if<<fp=fopen<"add.txt","a">>==NULL>{printf<"打開文件%s失敗\n","add.txt">;exit<-1>;}fprintf<fp,"\n%d\t%d\t%d\t\t",x.SerialNumber,x.SetOut.hour,x.SetOut.minutes>;fprintf<fp,"%s\t%s\t\t%.1f\t%d\t\t%d",x.DeparturePoint,x.TerminalPoint,x.LastTime,x.Edingzailiang,x.Yidingpiaorenshu>;}voidRead<void>{inti;FILE*fp;if<<fp=fopen<"add.txt","r">>==NULL>{exit<-1>;}for<i=0;!feof<fp>;i++>{fscanf<fp,"%d%d%d",&train[i].SerialNumber,&train[i].SetOut.hour,&train[i].SetOut.minutes>;fscanf<fp,"%s%s%f%d%d",train[i].DeparturePoint,train[i].TerminalPoint,&train[i].LastTime,&train[i].Edingzailiang,&train[i].Yidingpiaorenshu>;}i--;RecordNumber=i;fclose<fp>;return;}其功能實現(xiàn)圖如圖4-7所示。圖4-6訂票管理圖4-7退票管理第四章系統(tǒng)功能實現(xiàn)4.1火車售票系統(tǒng)功能實現(xiàn)4.1.1定義主函數/**********************************************/voidShowMessage<void>;/*載入原始數據*/voidmainmenu<void>;/*主菜單*/voidInputMessage<void>;/*錄入班次信息*/voidSearchMenu<void>;/*查詢路線子菜單*/voidSearchByNumber<void>;/*按班次號查詢*/voidSearchByAddress<void>;/*按終點站查詢*/voidTicketManagement<void>;/*車票售出與退回*/voidTicketOrder<void>;/*售票*/voidTicketDelete<void>;/*退票*/voidexit<void>;/*退出該系統(tǒng)*/voidSaveRecord<ticketx>;/*儲存信息到文件中*/voidRead<void>;/**********************************************/在此定義所有將用到的函數,方便以后對函數的調用。4.1.2主菜單函數/*******************************************主菜單********************************************/intmain<void>{do{mainmenu<>;}while<FLAG==FALSE>;return0;}voidmainmenu<void>{system<"modecon:cols=140lines=130">;/*對運行是的界面大小做出規(guī)定*/charfunctionNumber;printf<"車票管理系統(tǒng)\n\n">;printf<"制作:呂齊吳明洋伍雪強\n">;printf<"日期:2011/4/08\n\n">;time_trawtime;structtm*timeinfo;time<&rawtime>;timeinfo=localtime<&rawtime>;printf<"當前時間:%d:%d",timeinfo->tm_hour,timeinfo->tm_min>;printf<"\n">;printf<"┏━━━━━━━━━━━━━━━━━━┓\n">;printf<"┃1.錄入班次信息┃\t\n">;printf<"┃2.瀏覽班次信息┃\t\n">;printf<"┃3.查詢行車路線┃\t\n">;printf<"┃4.售票與退票系統(tǒng)┃\t\n">;printf<"┃5.退出該系統(tǒng)┃\t\n">;printf<"┗━━━━━━━━━━━━━━━━━━┛\n">;printf<"__@__@__@__@__~@\n">;printf<"_`\<,__`\<,__`\<,__`\<,__`\<,_\n">;printf<"<*>/<*><*>/<*><*>/<*><*>/<*><*>/<*>\n">;printf<"\n">;其功能實現(xiàn)圖如圖4-3所示。圖4-3主菜單界面4.1.2列車信息錄入/*******************************************錄入信息函數*******************************************/voidInputMessage<void>{charyn;FILE*fp;/*再此添加引用文件*/inti=RecordNumber;if<<fp=fopen<"add.txt","a">>==NULL>/*如果文件為空,則文件打不開*/{printf<"不能打開文件\n">;return;}do{/*信息錄入的"do-while"循環(huán)函數*/ printf<"車次:\n">; scanf<"%d",&train[i].SerialNumber>; printf<"發(fā)車時間:\n">; scanf<"%d:%d",&train[i].SetOut.hour,&train[i].SetOut.minutes>; if<train[i].SetOut.hour>23||train[i].SetOut.minutes>59>/*判斷當前輸入的列車時間是否有誤*/ { printf<"輸入時間有誤,請重新輸入\n">;/*輸入有誤則進行重新輸入*/ getchar<>; } printf<"始發(fā)站:\n">; scanf<"%s",&train[i].DeparturePoint>; printf<"終點站:\n">; scanf<"%s",&train[i].TerminalPoint>; printf<"行車時間:\n">; scanf<"%f",&train[i].LastTime>; printf<"額定載量:\n">; scanf<"%d",&train[i].Edingzailiang>; printf<"已定票人數:\n">; scanf<"%d",&train[i].Yidingpiaorenshu>; if<train[i].Yidingpiaorenshu>train[i].Edingzailiang>/*判斷此車票是否售完*/ { printf<"輸入數據有誤,請重新輸入\n">; printf<"已定票人數:\n">; scanf<"%d",&train[i].Yidingpiaorenshu>; } fprintf<fp,"\n%d\t%d\t%d\t\t",train[i].SerialNumber,train[i].SetOut.hour,train[i].SetOut.minutes>;fprintf<fp,"%s\t%s\t\t%.1f\t%d\t\t%d",train[i].DeparturePoint,train[i].TerminalPoint,train[i].LastTime,train[i].Edingzailiang,train[i].Yidingpiaorenshu>;i++; getchar<>;printf<"是否繼續(xù)?y/n\n">;yn=getchar<>;}while<yn=='Y'||yn=='y'>;/*對是否繼續(xù)進行循環(huán)進行判斷*/RecordNumber=i;fclose<fp>;/*運行完畢關閉文件*/return;}其功能實現(xiàn)圖如圖4-4所示。圖4.4錄入信息列車信息瀏覽/***********************************************瀏覽信息函數***********************************************/voidShowMessage<void>{inti=0;FILE*fp;if<<fp=fopen<"add.txt","r">>==NULL>{printf<"讀取數據失敗,請檢查文件add.txt是否存在.\n">;exit<-1>;}printf<"班次\t發(fā)車時間\t起點\t終點\t行車時間<小時>\t額定載量\t已定票人數\n">;for<i=0;i<=RecordNumber;i++>{printf<"%d\t%d:%d\t\t",train[i].SerialNumber,train[i].SetOut.hour,train[i].SetOut.minutes>;printf<"%s\t%s\t\t%.1f\t%d\t\t%d\t",train[i].DeparturePoint,train[i].TerminalPoint,train[i].LastTime,train[i].Edingzailiang,train[i].Yidingpiaorenshu>;/*******調用系統(tǒng)時間實現(xiàn)的功能:如果車已發(fā)出,則打出提示"此車已發(fā)出"******/time_trawtime;/*在此處引用能夠調用系統(tǒng)時間的"time"結構體,調用系統(tǒng)時間*/structtm*timeinfo;time<&rawtime>;timeinfo=localtime<&rawtime>;if<<timeinfo->tm_hour==train[i].SetOut.hour&&timeinfo->tm_min>=train[i].SetOut.minutes>||<timeinfo->tm_hour>train[i].SetOut.hour>>/*將發(fā)車時間與此時系統(tǒng)時間作比較,判斷此車是否發(fā)出*/printf<"此車已發(fā)出">;printf<"\n">;}fclose<fp>;/*運行完畢關閉文件*/return;}其功能實現(xiàn)圖如圖4-5所示。圖4-5列車基本信息查詢車票信息查詢/******************************************查詢子菜單*******************************************/voidSearchMenu<void>{system<"modecon:cols=140lines=130">;/*對運行是的界面大小做出規(guī)定*/charfunctionNumber;printf<"查詢子菜單\n">;printf<"┏━━━━━━━━━━━━━━━━━━┓\t\n">;printf<"┃1.按班次號查詢┃\t\n">;printf<"┃2.按終點站查詢┃\t\n">;printf<"┃3.返回主菜單┃\t\n">;printf<"┗━━━━━━━━━━━━━━━━━━┛\n">;printf<"請選擇你所需要的功能:">;scanf<"%*c%c",&functionNumber>;switch<functionNumber>{case'1':SearchByNumber<>;break;/*進入按班次查詢*/case'2':SearchByAddress<>;break;/*進入按終點查詢*/case'3':/*返回主菜單*/getchar<>;mainmenu<>;break;default:printf<"輸入錯誤,請確保你的輸入為1--3.\n">;/*輸入操作有誤提示*/printf<"按任意鍵回查詢子菜單\n">;/*返回并重新輸入*/getchar<>;SearchMenu<>;}}voidSearchByNumber<void>{intSearchNumber;printf<"請輸入要查詢的班次號:">;scanf<"%d",&SearchNumber>;printf<"班次\t發(fā)車時間\t起點\t終點\t行車時間<小時>\t額定載量\t已定票人數\n">;printf<"%d\t%d:%d\t\t",train[SearchNumber-1].SerialNumber,train[SearchNumber-1].SetOut.hour,train[SearchNumber-1].SetOut.minutes>;printf<"%s\t%s\t\t%.1f\t%d\t\t%d\n",train[SearchNumber-1].DeparturePoint,train[SearchNumber-1].TerminalPoint,train[SearchNumber-1].LastTime,train[SearchNumber-1].Edingzailiang,train[SearchNumber-1].Yidingpiaorenshu>;}voidSearchByAddress<void>{inti;charAddress[MAX];printf<"請輸入終點站的名稱:">;scanf<"%s",&Address>;printf<"班次\t發(fā)車時間\t起點\t終點\t行車時間<小時>\t額定載量\t已定票人數\n">;for<i=0;i<RecordNumber;i++>{//***************對比終點站記錄,找到并輸出**********if<<strcmp<Address,train[i].TerminalPoint>>==0>{printf<"%d\t%d:%d\t\t",train[i].SerialNumber,train[i].SetOut.hour,train[i].SetOut.minutes>;printf<"%s\t%s\t\t%.1f\t%d\t\t%d\n",train[i].DeparturePoint,train[i].TerminalPoint,train[i].LastTime,train[i].Edingzailiang,train[i].Yidingpiaorenshu>;}}}功能實現(xiàn)圖如圖4-6所示。圖4-4列車基本信息管理訂票與退票管理退票管理是在原有的火車訂票系統(tǒng)中查找到要退票的車票信息,如果給火車票沒有過期,將該車票所在的結點進行退票處理。根據查詢功能查找出所要退票的車票信息,先判斷鏈表是否為空,若為空,返回主菜單;若不為空,看是否過期,若過期,輸出退票失敗,否則對該結點進行退票操作。源代碼如下:/*****************************************票務管理函數*****************************************/voidTicketManagement<void>{charfunctionNumber;system<"modecon:cols=140lines=130">;printf<"訂票與退票菜單\n">;printf<"┏━━━━━━━━━━━━━━━━━━┓\n">;printf<"┃1.訂票┃\t\n">;printf<"┃2.退票┃\t\n">;printf<"┃3.返回主菜單┃\t\n">;printf<"┗━━━━━━━━━━━━━━━━━━┛\n">;printf<"選擇你需要的功能:">;scanf<"%*c%c",&functionNumber>;switch<functionNumber>{case'1':TicketOrder<>;break;case'2':TicketDelete<>;break;case'3':{getchar<>;mainmenu<>;}break;default:{printf<"輸入錯誤,請確保你的輸入為1--3.\n">;printf<"按任意鍵返回\n">;getchar<>;TicketManagement<>;}}}voidTicketOrder<void>{inti;time_trawtime;structtm*timeinfo;printf<"請輸入要訂購的車票的班次:">;scanf<"%d",&i>;printf<"i=%d\n",i>;if<i<1||i>RecordNumber+1>{printf<"對不起,今天沒有這趟車,請明天再來,謝謝使用!\n">;printf<"按任意鍵回主菜單\n">;getchar<>;mainmenu<>;}time

溫馨提示

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

評論

0/150

提交評論