![C語(yǔ)言課程設(shè)計(jì)報(bào)告火車售票系統(tǒng)_第1頁(yè)](http://file4.renrendoc.com/view/78cd02465cb945072571750fac0bf7e1/78cd02465cb945072571750fac0bf7e11.gif)
![C語(yǔ)言課程設(shè)計(jì)報(bào)告火車售票系統(tǒng)_第2頁(yè)](http://file4.renrendoc.com/view/78cd02465cb945072571750fac0bf7e1/78cd02465cb945072571750fac0bf7e12.gif)
![C語(yǔ)言課程設(shè)計(jì)報(bào)告火車售票系統(tǒng)_第3頁(yè)](http://file4.renrendoc.com/view/78cd02465cb945072571750fac0bf7e1/78cd02465cb945072571750fac0bf7e13.gif)
![C語(yǔ)言課程設(shè)計(jì)報(bào)告火車售票系統(tǒng)_第4頁(yè)](http://file4.renrendoc.com/view/78cd02465cb945072571750fac0bf7e1/78cd02465cb945072571750fac0bf7e14.gif)
![C語(yǔ)言課程設(shè)計(jì)報(bào)告火車售票系統(tǒng)_第5頁(yè)](http://file4.renrendoc.com/view/78cd02465cb945072571750fac0bf7e1/78cd02465cb945072571750fac0bf7e15.gif)
版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
/一、課程設(shè)計(jì)的原始資料及依據(jù)在現(xiàn)代社會(huì),火車以其安全,舒適以及其服務(wù)的周到使愈來(lái)愈多的人選擇了火車為長(zhǎng)距離出行的交通工具,這就使火車公司以及車站的工作量愈來(lái)愈大,若仍然使用文件或者人工來(lái)管理公司、車站、火車、列班、路線、客戶以及售票的信息,那無(wú)疑在效率上會(huì)大打折扣。21世紀(jì)的今天,信息社會(huì)占著主流地位,計(jì)算機(jī)在各行各業(yè)中的運(yùn)用已經(jīng)得到普及,自動(dòng)化、信息化的管理越來(lái)越廣泛應(yīng)用于各個(gè)領(lǐng)域。利用計(jì)算機(jī)來(lái)儲(chǔ)存和管理公司、車站、火車、列班、車線、客戶以及售票的信息成為了首選,在這種情況下,火車訂票系統(tǒng)就顯得非常重要了。兩個(gè)客戶名單可分別由線性表和隊(duì)列實(shí)現(xiàn)。為查找方便,已訂票客戶的線性表應(yīng)按客戶姓名有序,并且,為插入和刪除方便,應(yīng)以鏈表作存儲(chǔ)結(jié)構(gòu)。由于預(yù)約人數(shù)無(wú)法預(yù)計(jì),隊(duì)列也應(yīng)以鏈表作存儲(chǔ)結(jié)構(gòu)。整個(gè)系統(tǒng)需匯總各條路線的情況登錄在一張線性表上,由于路線基本不變,可采用順序存儲(chǔ)結(jié)構(gòu),并按車次有序或按終點(diǎn)站名有序。每條路線是這張表上的一個(gè)記錄,包含上述8個(gè)域,其中乘員名單域?yàn)橹赶虺藛T名單鏈表的頭指針,等候替補(bǔ)的客戶名單域?yàn)榉謩e指向隊(duì)頭和隊(duì)尾的指針。隊(duì)列〔Queue是只允許在一端進(jìn)行插入,而在另一端進(jìn)行刪除的運(yùn)算受限的線性表。用隊(duì)列來(lái)進(jìn)行客戶信息的存儲(chǔ)。編輯用戶使用菜單,內(nèi)容包括:輸入列班信息,保存列班信息,讀取列班信息,查找列班信息,刪除列班信息,訂票信息,退票信息以及修改信息。二、課程設(shè)計(jì)主要內(nèi)容及要求1.列車基本信息管理:輸入所有列班信息。每條路線所涉及的信息有:終點(diǎn)站名、車次號(hào)、車廂號(hào)、開(kāi)車周日〔星期幾、乘員定額、余票量、已訂票的客戶名單〔包括姓名、訂票量、座位等級(jí)1,2或3以及等候替補(bǔ)的客戶名單〔包括姓名、所需的票量。2.列車基本信息查詢:按車次號(hào)查找,按抵達(dá)站查找,按路線查找三種查找方式進(jìn)行查找。3.訂票管理:客戶對(duì)想要購(gòu)買的票進(jìn)行訂票。3.退票管理:將不想要的票進(jìn)行退票。三、對(duì)課程設(shè)計(jì)說(shuō)明書撰寫內(nèi)容、格式、字?jǐn)?shù)的要求1.課程設(shè)計(jì)說(shuō)明書是體現(xiàn)和總結(jié)課程設(shè)計(jì)成果的載體,主要內(nèi)容包括:設(shè)計(jì)題目、設(shè)計(jì)目的、設(shè)備器材、設(shè)計(jì)原理及內(nèi)容、設(shè)計(jì)步驟、遇到的問(wèn)題及解決方法、設(shè)計(jì)總結(jié)、設(shè)計(jì)小組評(píng)語(yǔ)、參考文獻(xiàn)等。一般不應(yīng)少于3000字。2.在適當(dāng)位置配合相應(yīng)的實(shí)驗(yàn)原理圖、數(shù)據(jù)通路圖、微程序流程圖、實(shí)驗(yàn)接線圖、微指令代碼表等圖表進(jìn)行說(shuō)明。應(yīng)做到文理通順,內(nèi)容正確完整,書寫工整,裝訂整齊。3.設(shè)計(jì)總結(jié)部分主要寫本人完成工作簡(jiǎn)介以及自己的設(shè)計(jì)體會(huì),包括通過(guò)課程設(shè)計(jì)學(xué)到了什么,哪里遇到了困難,解決的辦法以及今后的目標(biāo)。設(shè)計(jì)小組評(píng)語(yǔ)處注明設(shè)計(jì)組編號(hào)、設(shè)計(jì)組組長(zhǎng)、設(shè)計(jì)組成員,并由設(shè)計(jì)組組長(zhǎng)給出評(píng)語(yǔ)。4.課程設(shè)計(jì)說(shuō)明書手寫或打印均可。手寫要用學(xué)校統(tǒng)一的課程設(shè)計(jì)用紙,用黑或藍(lán)黑墨水工整書寫;打印時(shí)采用A4紙,頁(yè)邊距均為20mm,正文采用宋體小四號(hào)字,行間距18磅。文中大標(biāo)題采用黑體小三號(hào)字,一級(jí)節(jié)標(biāo)題采用黑體四號(hào)字,二級(jí)節(jié)標(biāo)題采用黑體小四號(hào)字,表題與圖題采用宋體五號(hào)字。5.課程設(shè)計(jì)說(shuō)明書裝訂順序?yàn)椋悍饷?、任?wù)書、成績(jī)?cè)u(píng)定表、目錄、正文、參考文獻(xiàn)。四、設(shè)計(jì)完成后應(yīng)提交成果的種類、數(shù)量、質(zhì)量等方面的要求1.完成"任務(wù)書"中指定的操作功能,運(yùn)行穩(wěn)定。2.課程設(shè)計(jì)說(shuō)明書。五、時(shí)間進(jìn)度安排順序階段日期計(jì)劃完成內(nèi)容備注1第1天〔12月27日閱讀資料2第2—3天〔12月28日—12月29日系統(tǒng)分析設(shè)計(jì)3第4—7天〔12月30日—01月04日程序編制、調(diào)試及運(yùn)行4第8—9天〔01月05日—01月06日成績(jī)?cè)u(píng)定5第10天〔01月07日撰寫課程設(shè)計(jì)說(shuō)明書六、主要參考資料〔文獻(xiàn)[1]嚴(yán)蔚敏吳偉民.數(shù)據(jù)結(jié)構(gòu)〔C語(yǔ)言版.北京:清華大學(xué)出版社.2007[2]譚浩強(qiáng).C程序設(shè)計(jì).北京:清華大學(xué)出版社.1999.12[3]滕國(guó)文.數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì).北京:清華大學(xué)出版社.2010.09[4]蘇仕華等編著.數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì).北京:機(jī)械工業(yè)出版社.2005.05[5]李春葆.數(shù)據(jù)結(jié)構(gòu)〔C語(yǔ)言版習(xí)題與解析.北京:清華大學(xué)出版社.2002..04摘要現(xiàn)代科學(xué)技術(shù)的飛速發(fā)展,改變了世界,也改變了人類的生活。作為新世紀(jì)的大學(xué)生,應(yīng)當(dāng)站在時(shí)代發(fā)展的前列,掌握現(xiàn)代科學(xué)技術(shù)知識(shí),調(diào)整自己的知識(shí)結(jié)構(gòu)和能力結(jié)構(gòu),以適應(yīng)社會(huì)發(fā)展的要求。新世紀(jì)需要具有豐富的現(xiàn)代科學(xué)知識(shí),能夠獨(dú)立解決面臨的任務(wù),充滿活力,又有創(chuàng)新意識(shí)的新型人才。隨著各個(gè)領(lǐng)域的突飛猛進(jìn),計(jì)算機(jī)也有它卓越的進(jìn)步。數(shù)據(jù)結(jié)構(gòu)不僅為計(jì)算機(jī)專業(yè)工作者所使用,而且為廣大計(jì)算機(jī)應(yīng)用人員所喜愛(ài)和使用。數(shù)據(jù)結(jié)構(gòu)是國(guó)際上廣泛流行的計(jì)算機(jī)高級(jí)語(yǔ)言。它適合作為系統(tǒng)描述語(yǔ)言,既可以用來(lái)編寫系統(tǒng)軟件,也可以用來(lái)編寫應(yīng)用軟件。許多高等學(xué)校,不僅在計(jì)算機(jī)專業(yè)開(kāi)設(shè)數(shù)據(jù)結(jié)構(gòu)課程,而且在非計(jì)算機(jī)專業(yè)也開(kāi)設(shè)了數(shù)據(jù)結(jié)構(gòu)課程。學(xué)習(xí)數(shù)據(jù)結(jié)構(gòu)已經(jīng)成為廣大計(jì)算機(jī)應(yīng)用人員和廣大青年學(xué)生的迫切要求。本次數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)的題目是火車售票系統(tǒng)。對(duì)于火車售票系統(tǒng),兩個(gè)客戶名單可分別由線性表和隊(duì)列實(shí)現(xiàn)。為查找方便,已訂票客戶的線性表應(yīng)按客戶姓名有序,并且,為插入和刪除方便,應(yīng)以鏈表作存儲(chǔ)結(jié)構(gòu)。由于預(yù)約人數(shù)無(wú)法預(yù)計(jì),隊(duì)列也應(yīng)以鏈表作存儲(chǔ)結(jié)構(gòu)。整個(gè)系統(tǒng)需匯總各條路線的情況登錄在一張線性表上,由于路線基本不變,可采用順序存儲(chǔ)結(jié)構(gòu),并按車次有序或按終點(diǎn)站名有序。每條路線是這張表上的一個(gè)記錄,包含上述8個(gè)域,其中乘員名單域?yàn)橹赶虺藛T名單鏈表的頭指針,等候替補(bǔ)的客戶名單域?yàn)榉謩e指向隊(duì)頭和隊(duì)尾的指針。編輯用戶使用菜單,內(nèi)容包括:輸入列班信息,保存列班信息,讀取列班信息,查找列班信息,刪除列班信息,訂票信息,退票信息以及修改信息。在為期兩周的數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)學(xué)習(xí)中,先要學(xué)習(xí)數(shù)據(jù)結(jié)構(gòu)課程的目的掌握數(shù)據(jù)結(jié)構(gòu)存儲(chǔ)的方法,學(xué)習(xí)會(huì)用計(jì)算機(jī)語(yǔ)言編寫程序,以實(shí)現(xiàn)所需要處理的任務(wù)。要正確處理算法與語(yǔ)法的關(guān)系,算法結(jié)構(gòu)存儲(chǔ)是程序的核心、是靈魂,語(yǔ)法是外殼、是工具。不應(yīng)把學(xué)習(xí)重點(diǎn)放在語(yǔ)法規(guī)則上,語(yǔ)法是重要的,不掌握語(yǔ)法規(guī)則就無(wú)法編寫出正確的程序。一定要把重點(diǎn)放在解題的思路上和運(yùn)用何種存儲(chǔ)的方法,通過(guò)思考和大量的閱讀,來(lái)構(gòu)造一個(gè)完整的程序。數(shù)據(jù)結(jié)構(gòu)存儲(chǔ)的設(shè)計(jì)直接關(guān)系到程序的好壞。最后,感謝老師在我們程序設(shè)計(jì)的過(guò)程中辛勤的指導(dǎo)和不倦的教誨。關(guān)鍵詞線性表,數(shù)組,隊(duì)列,設(shè)計(jì)目錄摘要I第一章問(wèn)題分析11.1引言11.2背景11.3分析11.3.2火車售票系統(tǒng)2第二章原理與運(yùn)行環(huán)境32.1數(shù)據(jù)結(jié)構(gòu)理論32.1.2火車售票系統(tǒng)數(shù)據(jù)結(jié)構(gòu)理論32.2運(yùn)行環(huán)境44.2火車售票系統(tǒng)功能實(shí)現(xiàn)214.2.1定義主函數(shù)214.2.2列車基本信息管理234.2.3列車基本信息查詢254.2.4訂票管理274.2.5退票管理31結(jié)論35致謝36參考文獻(xiàn)37第一章問(wèn)題分析1.1引言數(shù)據(jù)結(jié)構(gòu)的教學(xué)要求是:學(xué)會(huì)分析研究計(jì)算機(jī)加工的數(shù)據(jù)結(jié)構(gòu)的特征,以便為應(yīng)用涉及的數(shù)據(jù)選擇適當(dāng)?shù)倪壿嫿Y(jié)構(gòu)、存儲(chǔ)結(jié)構(gòu)及其相應(yīng)的算法,并初步掌握算法的時(shí)間分析和空間分析的技術(shù)。另一方面,本課程的學(xué)習(xí)過(guò)程也是復(fù)雜程序設(shè)計(jì)的訓(xùn)練過(guò)程,要求學(xué)生編寫的程序結(jié)構(gòu)清楚和正確易讀,符合軟件工程的規(guī)范。在學(xué)習(xí)中,先要學(xué)習(xí)程序設(shè)計(jì)課程的目的掌握設(shè)計(jì)程序的思路,學(xué)習(xí)會(huì)用計(jì)算機(jī)語(yǔ)言編寫程序,以實(shí)現(xiàn)所需要處理的任務(wù)。要正確處理算法與語(yǔ)法的關(guān)系,算法是程序的核心、是靈魂,語(yǔ)法是外殼、是工具。不應(yīng)把學(xué)習(xí)重點(diǎn)放在語(yǔ)法規(guī)則上,語(yǔ)法是重要的,不掌握語(yǔ)法規(guī)則就無(wú)法編寫出正確的程序。一定要把重點(diǎn)放在解題的思路上,通過(guò)思考,和大量的閱讀,來(lái)構(gòu)造一個(gè)完整的程序。請(qǐng)記?。褐匾氖菍W(xué)會(huì)編程,而不是背語(yǔ)法。程序設(shè)計(jì)是為了鍛煉我們的實(shí)際動(dòng)手能力,在一定程度上,又增加了我們的各方面的知識(shí),特別是一些聯(lián)系實(shí)際的課程設(shè)計(jì),它的完成需要自己平時(shí)積累的大量知識(shí)、并且需要勤于思考的能力和無(wú)限的激情。本次課程設(shè)計(jì)主要是學(xué)習(xí)程序設(shè)計(jì)的方法,進(jìn)行程序設(shè)計(jì)的基本訓(xùn)練,大多數(shù)的學(xué)生應(yīng)該把精力放在最基本,最常用的內(nèi)容上,學(xué)好基本功。通過(guò)本次課程設(shè)計(jì),相信我們一定能加強(qiáng)對(duì)數(shù)據(jù)結(jié)構(gòu)這門課程的學(xué)習(xí),尤其在動(dòng)手實(shí)踐上會(huì)有很大的進(jìn)步。1.2背景在人們?nèi)粘5幕疖囉喥焙屯似敝?有大量的數(shù)據(jù)和信息需要存儲(chǔ)和處理,通常紙質(zhì)的檔案不容易保存和使用,在查詢,訂票,退票上有很大的困難,浪費(fèi)大量的時(shí)間和人力也不一定能夠取得很好的效果,為了方便人們訂票,開(kāi)發(fā)一個(gè)火車售票系統(tǒng)迫在眉睫。1.3分析1.3.1火車售票系統(tǒng)兩個(gè)客戶名單可分別由線性表和隊(duì)列實(shí)現(xiàn)。為查找方便,已訂票客戶的線性表應(yīng)按客戶姓名有序,并且,為插入和刪除方便,應(yīng)以鏈表作存儲(chǔ)結(jié)構(gòu)。由于預(yù)約人數(shù)無(wú)法預(yù)計(jì),隊(duì)列也應(yīng)以鏈表作存儲(chǔ)結(jié)構(gòu)。整個(gè)系統(tǒng)需匯總各條路線的情況登錄在一張線性表上,由于路線基本不變,可采用順序存儲(chǔ)結(jié)構(gòu),并按車次有序或按終點(diǎn)站名有序。每條路線是這張表上的一個(gè)記錄,包含上述8個(gè)域,其中乘員名單域?yàn)橹赶虺藛T名單鏈表的頭指針,等候替補(bǔ)的客戶名單域?yàn)榉謩e指向隊(duì)頭和隊(duì)尾的指針。隊(duì)列〔Queue是只允許在一端進(jìn)行插入,而在另一端進(jìn)行刪除的運(yùn)算受限的線性表。用隊(duì)列來(lái)進(jìn)行客戶信息的存儲(chǔ)。編輯用戶使用菜單,內(nèi)容包括:列車基本信息管理,列車基本信息查詢,訂票管理,退票管理。火車售票系統(tǒng)分為四個(gè)大模塊,分別為列車基本信息管理,列車基本信息查詢,訂票管理,退票管理。⑴列車基本信息管理輸入火車的車次號(hào)。在循環(huán)中,如果火車的車次號(hào)不存在的話,創(chuàng)建新結(jié)點(diǎn)并依次輸入火車的信息,該車次號(hào)的信息輸入完畢,保存到文件中,結(jié)束輸入;如果火車的車次號(hào)存在的話,重新輸入,重復(fù)上述過(guò)程,單鏈表創(chuàng)建完畢。⑵列車基本信息查詢列車基本信息查詢是在已有的火車訂票系統(tǒng)中按地點(diǎn)、按車次、按車線查找到火車信息,并將其顯示在屏幕上。通過(guò)移動(dòng)指針找到與輸入相同的地點(diǎn)、車次、車線,并將該地點(diǎn)、車次、車線所對(duì)應(yīng)的火車的信息輸出。⑶訂票管理根據(jù)查詢功能查找出所要訂購(gòu)的車票信息,輸入所要訂購(gòu)的車票信息。先判斷鏈表是否為空,若為空,顯示"沒(méi)有任何記錄";若不為空,輸入車票的數(shù)量,看有沒(méi)有火車票,若沒(méi)有火車票,輸出沒(méi)有火車票,否則對(duì)該結(jié)點(diǎn)進(jìn)行訂票操作。⑷退票管理根據(jù)查詢功能查找出所要退票的車票信息,先判斷鏈表是否為空,若為空,返回主菜單;若不為空,看是否過(guò)期,若過(guò)期,輸出退票失敗,否則對(duì)該結(jié)點(diǎn)進(jìn)行退票操作。主函數(shù)是程序的入口,采用模塊化設(shè)計(jì)。通過(guò)一定的入口可以進(jìn)行列車基本信息管理、列車基本信息查詢、訂票管理、退票管理。YYYYYYYY開(kāi)始主菜單功能選擇1?2?3?錄入班次信息瀏覽班次信息查詢行車路線選擇查詢按班次查詢1?2?按終點(diǎn)查詢3?4?售票與退票管理系統(tǒng)選擇1?2?3?訂票系統(tǒng)退票系統(tǒng)5?退出結(jié)束YYYN第二章原理與運(yùn)行環(huán)境2.1數(shù)據(jù)結(jié)構(gòu)理論2.1.1火車售票系統(tǒng)數(shù)據(jù)結(jié)構(gòu)理論鏈接方式存儲(chǔ)的線性表簡(jiǎn)稱為鏈表。鏈表是一種動(dòng)態(tài)存儲(chǔ)結(jié)構(gòu),所占用的存儲(chǔ)空間在程序的執(zhí)行過(guò)程中得到,當(dāng)線性表需要增加一個(gè)結(jié)點(diǎn)時(shí),要為該結(jié)點(diǎn)向系統(tǒng)申請(qǐng)一個(gè)存儲(chǔ)空間。當(dāng)線性表刪除一個(gè)結(jié)點(diǎn)時(shí),要將已刪除的結(jié)點(diǎn)的存儲(chǔ)空間釋放,歸還給系統(tǒng)。每個(gè)存儲(chǔ)結(jié)點(diǎn)不僅包含有所存儲(chǔ)元素本身的信息〔稱之為數(shù)據(jù)域,而且包含所有元素之間邏輯關(guān)系的信息,即前驅(qū)結(jié)點(diǎn)包含有后繼結(jié)點(diǎn)的地址信息〔這稱為指針域,這樣可以通過(guò)前驅(qū)結(jié)點(diǎn)的指針域方便地找到后繼結(jié)點(diǎn)的位置,提高數(shù)據(jù)查找速度。隊(duì)列是一種先進(jìn)后出的線性表,它只允許在表的一端進(jìn)行插入,而在另一端進(jìn)行刪除元素。以隊(duì)列的鏈?zhǔn)奖硎竞蛯?shí)現(xiàn)為例。一個(gè)鏈隊(duì)列需要兩個(gè)分別指向隊(duì)頭和隊(duì)尾的指針才能唯一確定。首先給鏈隊(duì)列添加一個(gè)頭結(jié)點(diǎn),并且令頭指針指向頭結(jié)點(diǎn)。鏈隊(duì)列的操作即為單鏈表的插入和刪除的特殊情況,只是尚需修改尾指針或頭指針。一般情況下,刪除隊(duì)列頭元素時(shí)僅需修改頭結(jié)點(diǎn)中的指針,但當(dāng)隊(duì)列中最后一個(gè)元素被刪除后,隊(duì)列尾指針也丟失了,因此,需要對(duì)隊(duì)尾指針重新賦值〔指向頭結(jié)點(diǎn)。
火車售票系統(tǒng)應(yīng)用數(shù)據(jù)結(jié)構(gòu)的知識(shí)有:鏈?zhǔn)骄€性表存儲(chǔ)結(jié)構(gòu)和隊(duì)列。線性表的鏈?zhǔn)酱鎯?chǔ)結(jié)構(gòu)的特點(diǎn):是用一組任意的存儲(chǔ)單元存儲(chǔ)線性表的數(shù)據(jù)元素,結(jié)點(diǎn)的一個(gè)域表示元素本身,另一個(gè)是能指示其后繼的指針,用來(lái)表示線性表數(shù)據(jù)元素的邏輯關(guān)系。順序表的可隨機(jī)存取特點(diǎn)。我們將任務(wù)分成多個(gè)最簡(jiǎn)化的模塊,增強(qiáng)了可讀性和簡(jiǎn)單性,同時(shí)為日后的編寫,調(diào)試,維護(hù)提供了極大地方便。隊(duì)列的特點(diǎn)是:它只允許在表的一端進(jìn)行插入,而在另一端進(jìn)行刪除元素。在火車售票系統(tǒng)中,我們把列車和客戶分別作為一個(gè)結(jié)點(diǎn),該結(jié)點(diǎn)類型為結(jié)構(gòu)體型,結(jié)構(gòu)體中的域表示列車和客戶的屬性。每個(gè)結(jié)點(diǎn)除了存放屬性外,還存放指向后繼結(jié)點(diǎn)的指針。列車基本信息管理:存儲(chǔ)是將一個(gè)車次信息作為一個(gè)結(jié)點(diǎn)以鏈?zhǔn)酱鎯?chǔ)在文件中。列車基本信息查詢:在已有的火車售票系統(tǒng)中按地點(diǎn),按車次,按車線查找到列車信息,并將其顯示在屏幕上。訂票管理:在原有的火車售票系統(tǒng)中查找到要訂購(gòu)的車次信息,并將該車次所在的結(jié)點(diǎn)輸出。退票管理:根據(jù)查詢功能查找出所要退票的車票信息,然后退票處理。2.2運(yùn)行環(huán)境本程序的運(yùn)行環(huán)境為MicrosoftVisualC++。開(kāi)始→程序→MicrosoftVisualC++,創(chuàng)建工程名稱,如圖2-1所示。圖2.1創(chuàng)建工程名在工程中選定文件類型,選擇C++SourceFile,其界面如圖2.2。圖2.2文件類型新建完環(huán)境和文件類型之后,進(jìn)入輸入代碼的界面,即工程環(huán)境,如下圖2.3。圖2.3工程環(huán)境第三章系統(tǒng)分析與設(shè)計(jì)及其實(shí)現(xiàn)3.2火車售票系統(tǒng)分析與設(shè)計(jì)3.2.1車票系統(tǒng)的功能本任務(wù)要求實(shí)現(xiàn)火車售票系統(tǒng),輸入火車基本信息以及客戶信息,并將其存入文件中。根據(jù)需要可以進(jìn)行如下操作:列車基本信息管理、列車基本信息查詢、訂票管理、退票管理。其功能模塊圖,如圖3-5所示。圖3-5車票售票系統(tǒng)模塊圖流程圖如下。YYYYYYYY開(kāi)始主菜單功能選擇1?2?3?錄入班次信息瀏覽班次信息查詢行車路線選擇查詢按班次查詢1?2?按終點(diǎn)查詢3?4?售票與退票管理系統(tǒng)選擇1?2?3?訂票系統(tǒng)退票系統(tǒng)5?退出結(jié)束YYYN3.2.2系統(tǒng)模塊分析及其流程圖與函數(shù)〔1主函數(shù)聲明/**********************************************/voidShowMessage<void>;/*載入原始數(shù)據(jù)*/voidmainmenu<void>;/*主菜單*/voidInputMessage<void>;/*錄入班次信息*/voidSearchMenu<void>;/*查詢路線子菜單*/voidSearchByNumber<void>;/*按班次號(hào)查詢*/voidSearchByAddress<void>;/*按終點(diǎn)站查詢*/voidTicketManagement<void>;/*車票售出與退回*/voidTicketOrder<void>;/*售票*/voidTicketDelete<void>;/*退票*/voidexit<void>;/*退出該系統(tǒng)*/voidSaveRecord<ticketx>;/*儲(chǔ)存信息到文件中*/voidRead<void>;/**********************************************/在此定義所有將用到的函數(shù),方便以后對(duì)函數(shù)的調(diào)用?!?主菜單/*******************************************主菜單********************************************/intmain<void>{do{mainmenu<>;}while<FLAG==FALSE>;return0;}voidmainmenu<void>{system<"modecon:cols=140lines=130">;/*對(duì)運(yùn)行是的界面大小做出規(guī)定*/charfunctionNumber;printf<"車票管理系統(tǒng)\n\n">;printf<"制作:呂齊吳明洋伍雪強(qiáng)\n">;printf<"日期:2011/4/08\n\n">;time_trawtime;structtm*timeinfo;time<&rawtime>;timeinfo=localtime<&rawtime>;printf<"當(dāng)前時(shí)間:%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">;/***************************************功能導(dǎo)入****************************************/printf<"請(qǐng)選擇你所需要的功能:">;Read<>;scanf<"%c",&functionNumber>;switch<functionNumber>{case'1':{InputMessage<>;/*進(jìn)入信息錄入*/printf<"\n按任意鍵回主菜單\n">;getchar<>;getchar<>;}break;case'2':{//RecordNumber=ShowMessage<>;/*進(jìn)入瀏覽信息*/ ShowMessage<>;printf<"\n按任意鍵回主菜單\n">;getchar<>;getchar<>;}break;case'3':{SearchMenu<>;/*進(jìn)入查詢子菜單*/printf<"\n按任意鍵回主菜單\n">;getchar<>;getchar<>;}break;case'4':{TicketManagement<>;/*進(jìn)入票務(wù)管理*/getchar<>;getchar<>;}break;case'5':FLAG=TRUE;exit<>;break;default:{printf<"輸入錯(cuò)誤,請(qǐng)確保你的輸入為1--5.\n">;/*輸入操作失誤,返回重新輸入*/printf<"按任意鍵回主菜單\n">;getchar<>;getchar<>;}}FLAG=FALSE;}<2>列車信息錄入列車信息錄入是通過(guò)dowhile循環(huán)將所存儲(chǔ)的列車基本信息存儲(chǔ)在文件中,其順序依次是車次、時(shí)間、始發(fā)站、終點(diǎn)站、行車時(shí)間、額定載額、已載人數(shù)。每次列車信息錄入之后,用while循環(huán)來(lái)判斷是否繼續(xù)錄入,其流程圖如圖3-6所示。/*******************************************錄入信息函數(shù)*******************************************/voidInputMessage<void>{charyn;FILE*fp;/*再此添加引用文件*/inti=RecordNumber;if<<fp=fopen<"add.txt","a">>==NULL>/*如果文件為空,則文件打不開(kāi)*/{printf<"不能打開(kāi)文件\n">;return;}do{/*信息錄入的"do-while"循環(huán)函數(shù)*/ printf<"車次:\n">; scanf<"%d",&train[i].SerialNumber>; printf<"發(fā)車時(shí)間:\n">; scanf<"%d:%d",&train[i].SetOut.hour,&train[i].SetOut.minutes>; if<train[i].SetOut.hour>23||train[i].SetOut.minutes>59>/*判斷當(dāng)前輸入的列車時(shí)間是否有誤*/ { printf<"輸入時(shí)間有誤,請(qǐng)重新輸入\n">;/*輸入有誤則進(jìn)行重新輸入*/ getchar<>; } printf<"始發(fā)站:\n">; scanf<"%s",&train[i].DeparturePoint>; printf<"終點(diǎn)站:\n">; scanf<"%s",&train[i].TerminalPoint>; printf<"行車時(shí)間:\n">; scanf<"%f",&train[i].LastTime>; printf<"額定載量:\n">; scanf<"%d",&train[i].Edingzailiang>; printf<"已定票人數(shù):\n">; scanf<"%d",&train[i].Yidingpiaorenshu>; if<train[i].Yidingpiaorenshu>train[i].Edingzailiang>/*判斷此車票是否售完*/ { printf<"輸入數(shù)據(jù)有誤,請(qǐng)重新輸入\n">; printf<"已定票人數(shù):\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'>;/*對(duì)是否繼續(xù)進(jìn)行循環(huán)進(jìn)行判斷*/RecordNumber=i;fclose<fp>;/*運(yùn)行完畢關(guān)閉文件*/return;}其功能實(shí)現(xiàn)圖如圖4-4所示。圖4.4錄入信息YYYYYYYY開(kāi)始主菜單功能選擇1?2?3?錄入班次信息瀏覽班次信息查詢行車路線選擇查詢按班次查詢1?2?按終點(diǎn)查詢3?4?售票與退票管理系統(tǒng)選擇1?2?3?訂票系統(tǒng)退票系統(tǒng)5?退出結(jié)束YYYN圖3-6列車基本信息管理流程圖<2>列車信息瀏覽列車信息瀏覽是將已有的火車售票系統(tǒng)中的各次火車信息顯示在屏幕上。用戶可以直觀的看到所有的班次信息,方便用戶查找所需的車次及路線。如圖3-7所示。/***********************************************瀏覽信息函數(shù)***********************************************/voidShowMessage<void>{inti=0;FILE*fp;if<<fp=fopen<"add.txt","r">>==NULL>{printf<"讀取數(shù)據(jù)失敗,請(qǐng)檢查文件add.txt是否存在.\n">;exit<-1>;}printf<"班次\t發(fā)車時(shí)間\t起點(diǎn)\t終點(diǎn)\t行車時(shí)間<小時(shí)>\t額定載量\t已定票人數(shù)\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>;/*******調(diào)用系統(tǒng)時(shí)間實(shí)現(xiàn)的功能:如果車已發(fā)出,則打出提示"此車已發(fā)出"******/time_trawtime;/*在此處引用能夠調(diào)用系統(tǒng)時(shí)間的"time"結(jié)構(gòu)體,調(diào)用系統(tǒng)時(shí)間*/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ā)車時(shí)間與此時(shí)系統(tǒng)時(shí)間作比較,判斷此車是否發(fā)出*/printf<"此車已發(fā)出">;printf<"\n">;}fclose<fp>;/*運(yùn)行完畢關(guān)閉文件*/return;}其功能實(shí)現(xiàn)圖如圖4-5所示。圖4-5列車基本信息查詢<3>車票信息查詢?cè)谲嚻毙畔⒉樵冞@個(gè)系統(tǒng)中,用戶可以根據(jù)不同的需求來(lái)查找所需的班次信息,包括終點(diǎn)查詢和班次查詢,輸入所需的班次或者終點(diǎn)站就會(huì)顯示所有符合條件的車次信息了,用戶就可以清楚直觀的看到想要的車次了,其界面如圖2.4。/******************************************查詢子菜單*******************************************/voidSearchMenu<void>{system<"modecon:cols=140lines=130">;/*對(duì)運(yùn)行是的界面大小做出規(guī)定*/charfunctionNumber;printf<"查詢子菜單\n">;printf<"┏━━━━━━━━━━━━━━━━━━┓\t\n">;printf<"┃1.按班次號(hào)查詢┃\t\n">;printf<"┃2.按終點(diǎn)站查詢┃\t\n">;printf<"┃3.返回主菜單┃\t\n">;printf<"┗━━━━━━━━━━━━━━━━━━┛\n">;printf<"請(qǐng)選擇你所需要的功能:">;scanf<"%*c%c",&functionNumber>;switch<functionNumber>{case'1':SearchByNumber<>;break;/*進(jìn)入按班次查詢*/case'2':SearchByAddress<>;break;/*進(jìn)入按終點(diǎn)查詢*/case'3':/*返回主菜單*/getchar<>;mainmenu<>;break;default:printf<"輸入錯(cuò)誤,請(qǐng)確保你的輸入為1--3.\n">;/*輸入操作有誤提示*/printf<"按任意鍵回查詢子菜單\n">;/*返回并重新輸入*/getchar<>;SearchMenu<>;}}voidSearchByNumber<void>{intSearchNumber;printf<"請(qǐng)輸入要查詢的班次號(hào):">;scanf<"%d",&SearchNumber>;printf<"班次\t發(fā)車時(shí)間\t起點(diǎn)\t終點(diǎn)\t行車時(shí)間<小時(shí)>\t額定載量\t已定票人數(shù)\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<"請(qǐng)輸入終點(diǎn)站的名稱:">;scanf<"%s",&Address>;printf<"班次\t發(fā)車時(shí)間\t起點(diǎn)\t終點(diǎn)\t行車時(shí)間<小時(shí)>\t額定載量\t已定票人數(shù)\n">;for<i=0;i<RecordNumber;i++>{//***************對(duì)比終點(diǎn)站記錄,找到并輸出**********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>;}}}功能實(shí)現(xiàn)圖如圖4-6所示。圖4-4列車基本信息管理<4>訂票與退票管理訂票管理是在原有的火車售票系統(tǒng)中查找到要訂購(gòu)的車票信息,如果有票,將該車票的發(fā)車時(shí)間與現(xiàn)在的時(shí)間做以比較,若車票的發(fā)車時(shí)間超過(guò)現(xiàn)在的時(shí)間,顯示已發(fā)車;若沒(méi)超過(guò)現(xiàn)在的時(shí)間,則可以實(shí)現(xiàn)訂票。退票管理是在原有的火車訂票系統(tǒng)中查找到要退票的車票信息,將該車票的發(fā)車時(shí)間與現(xiàn)在的時(shí)間做以比較,若車票的發(fā)車時(shí)間超過(guò)現(xiàn)在的時(shí)間,顯示已發(fā)車,不能完成退票;若沒(méi)超過(guò)現(xiàn)在的時(shí)間,則可以實(shí)現(xiàn)退票。其流程圖如下。圖2.2訂票管理流程圖圖3-11退票管理流程圖/*****************************************票務(wù)管理函數(shù)*****************************************/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<"輸入錯(cuò)誤,請(qǐng)確保你的輸入為1--3.\n">;printf<"按任意鍵返回\n">;getchar<>;TicketManagement<>;}}}voidTicketOrder<void>{inti;time_trawtime;structtm*timeinfo;printf<"請(qǐng)輸入要訂購(gòu)的車票的班次:">;scanf<"%d",&i>;printf<"i=%d\n",i>;if<i<1||i>RecordNumber+1>{printf<"對(duì)不起,今天沒(méi)有這趟車,請(qǐng)明天再來(lái),謝謝使用!\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<"你的訂票成功,請(qǐng)按時(shí)上車,謝謝使用!\n">;}elseprintf<"對(duì)不起,今天的這趟車的票已賣完,請(qǐng)明天再來(lái),謝謝合作!\n">;}elseprintf<"對(duì)不起,今天的這趟車已發(fā)出,請(qǐng)明天再來(lái),謝謝合作!\n">;printf<"班次\t發(fā)車時(shí)間\t起點(diǎn)\t終點(diǎn)\t行車時(shí)間<小時(shí)>\t額定載量\t已定票人數(shù)\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<"請(qǐng)輸入要退購(gòu)的車票的班次:">;scanf<"%d",&i>;if<i<1||i>RecordNumber+1>{printf<"對(duì)不起,今天沒(méi)有這趟車,無(wú)法完成退票.謝謝使用!\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<"對(duì)不起,今天的這趟車的票尚未賣出,無(wú)法完成退票!\n">;}elseprintf<"對(duì)不起,今天的這趟車已發(fā)出,無(wú)法完成退票!\n">;printf<"班次\t發(fā)車時(shí)間\t起點(diǎn)\t終點(diǎn)\t行車時(shí)間<小時(shí)>\t額定載量\t已定票人數(shù)\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<"打開(kāi)文件%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;}其功能實(shí)現(xiàn)圖如圖4-7所示。圖4-6訂票管理圖4-7退票管理第四章系統(tǒng)功能實(shí)現(xiàn)4.1火車售票系統(tǒng)功能實(shí)現(xiàn)4.1.1定義主函數(shù)/**********************************************/voidShowMessage<void>;/*載入原始數(shù)據(jù)*/voidmainmenu<void>;/*主菜單*/voidInputMessage<void>;/*錄入班次信息*/voidSearchMenu<void>;/*查詢路線子菜單*/voidSearchByNumber<void>;/*按班次號(hào)查詢*/voidSearchByAddress<void>;/*按終點(diǎn)站查詢*/voidTicketManagement<void>;/*車票售出與退回*/voidTicketOrder<void>;/*售票*/voidTicketDelete<void>;/*退票*/voidexit<void>;/*退出該系統(tǒng)*/voidSaveRecord<ticketx>;/*儲(chǔ)存信息到文件中*/voidRead<void>;/**********************************************/在此定義所有將用到的函數(shù),方便以后對(duì)函數(shù)的調(diào)用。4.1.2主菜單函數(shù)/*******************************************主菜單********************************************/intmain<void>{do{mainmenu<>;}while<FLAG==FALSE>;return0;}voidmainmenu<void>{system<"modecon:cols=140lines=130">;/*對(duì)運(yùn)行是的界面大小做出規(guī)定*/charfunctionNumber;printf<"車票管理系統(tǒng)\n\n">;printf<"制作:呂齊吳明洋伍雪強(qiáng)\n">;printf<"日期:2011/4/08\n\n">;time_trawtime;structtm*timeinfo;time<&rawtime>;timeinfo=localtime<&rawtime>;printf<"當(dāng)前時(shí)間:%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">;其功能實(shí)現(xiàn)圖如圖4-3所示。圖4-3主菜單界面4.1.2列車信息錄入/*******************************************錄入信息函數(shù)*******************************************/voidInputMessage<void>{charyn;FILE*fp;/*再此添加引用文件*/inti=RecordNumber;if<<fp=fopen<"add.txt","a">>==NULL>/*如果文件為空,則文件打不開(kāi)*/{printf<"不能打開(kāi)文件\n">;return;}do{/*信息錄入的"do-while"循環(huán)函數(shù)*/ printf<"車次:\n">; scanf<"%d",&train[i].SerialNumber>; printf<"發(fā)車時(shí)間:\n">; scanf<"%d:%d",&train[i].SetOut.hour,&train[i].SetOut.minutes>; if<train[i].SetOut.hour>23||train[i].SetOut.minutes>59>/*判斷當(dāng)前輸入的列車時(shí)間是否有誤*/ { printf<"輸入時(shí)間有誤,請(qǐng)重新輸入\n">;/*輸入有誤則進(jìn)行重新輸入*/ getchar<>; } printf<"始發(fā)站:\n">; scanf<"%s",&train[i].DeparturePoint>; printf<"終點(diǎn)站:\n">; scanf<"%s",&train[i].TerminalPoint>; printf<"行車時(shí)間:\n">; scanf<"%f",&train[i].LastTime>; printf<"額定載量:\n">; scanf<"%d",&train[i].Edingzailiang>; printf<"已定票人數(shù):\n">; scanf<"%d",&train[i].Yidingpiaorenshu>; if<train[i].Yidingpiaorenshu>train[i].Edingzailiang>/*判斷此車票是否售完*/ { printf<"輸入數(shù)據(jù)有誤,請(qǐng)重新輸入\n">; printf<"已定票人數(shù):\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'>;/*對(duì)是否繼續(xù)進(jìn)行循環(huán)進(jìn)行判斷*/RecordNumber=i;fclose<fp>;/*運(yùn)行完畢關(guān)閉文件*/return;}其功能實(shí)現(xiàn)圖如圖4-4所示。圖4.4錄入信息列車信息瀏覽/***********************************************瀏覽信息函數(shù)***********************************************/voidShowMessage<void>{inti=0;FILE*fp;if<<fp=fopen<"add.txt","r">>==NULL>{printf<"讀取數(shù)據(jù)失敗,請(qǐng)檢查文件add.txt是否存在.\n">;exit<-1>;}printf<"班次\t發(fā)車時(shí)間\t起點(diǎn)\t終點(diǎn)\t行車時(shí)間<小時(shí)>\t額定載量\t已定票人數(shù)\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>;/*******調(diào)用系統(tǒng)時(shí)間實(shí)現(xiàn)的功能:如果車已發(fā)出,則打出提示"此車已發(fā)出"******/time_trawtime;/*在此處引用能夠調(diào)用系統(tǒng)時(shí)間的"time"結(jié)構(gòu)體,調(diào)用系統(tǒng)時(shí)間*/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ā)車時(shí)間與此時(shí)系統(tǒng)時(shí)間作比較,判斷此車是否發(fā)出*/printf<"此車已發(fā)出">;printf<"\n">;}fclose<fp>;/*運(yùn)行完畢關(guān)閉文件*/return;}其功能實(shí)現(xiàn)圖如圖4-5所示。圖4-5列車基本信息查詢車票信息查詢/******************************************查詢子菜單*******************************************/voidSearchMenu<void>{system<"modecon:cols=140lines=130">;/*對(duì)運(yùn)行是的界面大小做出規(guī)定*/charfunctionNumber;printf<"查詢子菜單\n">;printf<"┏━━━━━━━━━━━━━━━━━━┓\t\n">;printf<"┃1.按班次號(hào)查詢┃\t\n">;printf<"┃2.按終點(diǎn)站查詢┃\t\n">;printf<"┃3.返回主菜單┃\t\n">;printf<"┗━━━━━━━━━━━━━━━━━━┛\n">;printf<"請(qǐng)選擇你所需要的功能:">;scanf<"%*c%c",&functionNumber>;switch<functionNumber>{case'1':SearchByNumber<>;break;/*進(jìn)入按班次查詢*/case'2':SearchByAddress<>;break;/*進(jìn)入按終點(diǎn)查詢*/case'3':/*返回主菜單*/getchar<>;mainmenu<>;break;default:printf<"輸入錯(cuò)誤,請(qǐng)確保你的輸入為1--3.\n">;/*輸入操作有誤提示*/printf<"按任意鍵回查詢子菜單\n">;/*返回并重新輸入*/getchar<>;SearchMenu<>;}}voidSearchByNumber<void>{intSearchNumber;printf<"請(qǐng)輸入要查詢的班次號(hào):">;scanf<"%d",&SearchNumber>;printf<"班次\t發(fā)車時(shí)間\t起點(diǎn)\t終點(diǎn)\t行車時(shí)間<小時(shí)>\t額定載量\t已定票人數(shù)\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<"請(qǐng)輸入終點(diǎn)站的名稱:">;scanf<"%s",&Address>;printf<"班次\t發(fā)車時(shí)間\t起點(diǎn)\t終點(diǎn)\t行車時(shí)間<小時(shí)>\t額定載量\t已定票人數(shù)\n">;for<i=0;i<RecordNumber;i++>{//***************對(duì)比終點(diǎn)站記錄,找到并輸出**********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>;}}}功能實(shí)現(xiàn)圖如圖4-6所示。圖4-4列車基本信息管理訂票與退票管理退票管理是在原有的火車訂票系統(tǒng)中查找到要退票的車票信息,如果給火車票沒(méi)有過(guò)期,將該車票所在的結(jié)點(diǎn)進(jìn)行退票處理。根據(jù)查詢功能查找出所要退票的車票信息,先判斷鏈表是否為空,若為空,返回主菜單;若不為空,看是否過(guò)期,若過(guò)期,輸出退票失敗,否則對(duì)該結(jié)點(diǎn)進(jìn)行退票操作。源代碼如下:/*****************************************票務(wù)管理函數(shù)*****************************************/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<"輸入錯(cuò)誤,請(qǐng)確保你的輸入為1--3.\n">;printf<"按任意鍵返回\n">;getchar<>;TicketManagement<>;}}}voidTicketOrder<void>{inti;time_trawtime;structtm*timeinfo;printf<"請(qǐng)輸入要訂購(gòu)的車票的班次:">;scanf<"%d",&i>;printf<"i=%d\n",i>;if<i<1||i>RecordNumber+1>{printf<"對(duì)不起,今天沒(méi)有這趟車,請(qǐng)明天再來(lái),謝謝使用!\n">;printf<"按任意鍵回主菜單\n">;getchar<>;mainmenu<>;}time
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度教育培訓(xùn)行業(yè)數(shù)字化轉(zhuǎn)型咨詢與服務(wù)合同協(xié)議
- 2025年度智能機(jī)器人制造合作合同范本
- 2025年度人工智能教育與人才培養(yǎng)股權(quán)分配合同范本
- 2025年度職業(yè)培訓(xùn)基地共建與運(yùn)營(yíng)管理合同書
- 2025年度腳手架工程安全監(jiān)督及驗(yàn)收合同
- 2025年度國(guó)際技術(shù)合同合同簽訂與審查
- 2025年度智能投顧個(gè)性化金融投資咨詢服務(wù)合同
- 2025年度廣告經(jīng)營(yíng)資質(zhì)借用管理合同
- 2025年度擔(dān)保合同履行監(jiān)督與報(bào)告服務(wù)合同
- 2025年度護(hù)坡工程勞務(wù)合同風(fēng)險(xiǎn)防范范本
- 體質(zhì)健康概論
- 檔案管理流程優(yōu)化與效率提升
- 顱腦損傷的生物標(biāo)志物
- 2023高考語(yǔ)文實(shí)用類文本閱讀-新聞、通訊、訪談(含答案)
- 人工智能在商場(chǎng)應(yīng)用
- (完整word版)大格子作文紙模板(帶字?jǐn)?shù)統(tǒng)計(jì))
- 高考語(yǔ)文復(fù)習(xí):小說(shuō)閱讀主觀題題型探究-解讀《理水》
- 物流營(yíng)銷(第四版) 課件 第一章 物流營(yíng)銷概述
- 藍(lán)印花布鑒賞課件
- 血液灌流流程及注意事項(xiàng)詳細(xì)圖解
- 5A+Chapter+2+Turning+over+a+new+leaf 英語(yǔ)精講課件
評(píng)論
0/150
提交評(píng)論