第一篇:課程設(shè)計火車票售票系統(tǒng)的需求分析
二.需求分析
經(jīng)過對程序設(shè)計題目的分析可知,整個程序的設(shè)計實現(xiàn)大致分為八個模塊,每一個模塊對應(yīng)一個函數(shù)。在這些函數(shù)當(dāng)中,添加車次數(shù)據(jù)函數(shù)、售票函數(shù)、查詢總額函數(shù)的實現(xiàn)嚴(yán)格按照題目的要求,而顯示時間函數(shù)和顯示車次函數(shù)屬于附加功能。讀取文件函數(shù)和保存信息函數(shù)對其它函數(shù)的實現(xiàn)起輔助作用,主函數(shù)及菜單函數(shù)控制程序的整體運行。
1.添加車次函數(shù)
主要實現(xiàn)程序最初運行時車次的錄入 2.旅客買票函數(shù)
實現(xiàn)的功能是按照旅客所需車次幾所購買車票的數(shù)目 3.查詢車票總額
按照題目的具體要求實現(xiàn)的是總額的查詢 4.顯示函數(shù)
實現(xiàn)的是顯示目前所有的有效車次信息
除上面介紹的功能之外,程序還具有顯示當(dāng)?shù)貢r間,以及退出功能,可以在程序的一次運行當(dāng)中循環(huán)執(zhí)行所有的功能,并根據(jù)需要終止程序的執(zhí)行。
每一個車次都包含車次、日期,始發(fā)、終點以及所受票數(shù)和所需費用,在程序當(dāng)中,將車次類型定義為結(jié)構(gòu)體類型,添加的車次信息直接寫入E盤的train.txt文件中,其它函數(shù)每次對車次記錄的訪問,其數(shù)據(jù)來源都是train.txt文件,這樣做不但可以保證學(xué)生數(shù)據(jù)的一致性,而且可以對車次數(shù)據(jù)進(jìn)行永保存,保證每次運行程序都可以采用原來的數(shù)據(jù)
近年來,中國乃至世界的人口急劇增加,人口流動量也隨之增加,火車作為一種便捷且相對 比較便宜的交通工具也受到廣大出行者的青睞,為了減輕鐵道部售票的壓力,特此編寫此程序,便于乘客在網(wǎng)上購票。
3.1.2 軟件項目概述
本系統(tǒng)擁有四大功能,分別是查詢、訂票、改簽和退票。在使用不能系統(tǒng)之前,用戶必須注 冊用戶名,用戶名必須包括乘客的身份證號,這樣可以實行實名制購票,防止在購票高峰,非法 分子以高價倒賣火車票,以此來保證乘客的利益。用戶在利用用戶名登陸本系統(tǒng)以后,方可經(jīng)行 查詢、訂票、改簽和退票的相關(guān)操作。其中,查詢允許乘客對自己所需乘坐的列車經(jīng)行查詢,來 判斷是否有票,如果有票,乘客則可以選擇訂票,訂票以后,用戶的信息將被修改,用戶信息將 會添加剛才購買的火車票的列車車次以及起始地和目的地。如果乘客已經(jīng)購票,需要換票,則必 須先查詢是否有需要換的票,如果有票,則可以經(jīng)行換票操作,同樣,用戶信息將也會被修改。
當(dāng)乘客已經(jīng)訂票,需要退票,點擊退票,則可以退票,但同時會彈出
需要用戶支付手續(xù)費的窗
口,用戶支付完手續(xù)費后,退票成功,用戶信息將被修改,推掉的車票對應(yīng)的列車號以及相關(guān)信 息將從用戶信息中刪除。
3.2 訂票流程設(shè)計
3.2.1 訂票流程描述
乘客在使用系統(tǒng)之前,首先注冊新用戶,需要輸入自己相關(guān)個人信息,包括自己的身份證號 碼,名稱,登陸密碼等。當(dāng)已經(jīng)注冊好用戶以后,用戶可以利用自己的證件號碼和登陸密碼登陸 火車票訂票系統(tǒng),乘客需先查詢自己所需要乘坐的列車,看是否有票,如果有票則可以選擇訂票,進(jìn)行訂票;如果用戶已經(jīng)購票,需要換票,則需要查詢目標(biāo)票看其是否有剩余,如果有剩余,則 可以進(jìn)行換票,當(dāng)用戶輸入已擁有的火車票的列車號點擊退票,則可以經(jīng)行退票。當(dāng)然,以上操 作都必須建立在用戶已登錄的基礎(chǔ)上
階段通過對系統(tǒng)目標(biāo)的初步調(diào)研和分析,提出可行性方案并進(jìn)行論證。我們在這 里主要從技術(shù)可行性、經(jīng)濟可行性和操作可行性三方面進(jìn)行分析。2.1.1 經(jīng)濟可行性
本系統(tǒng)其他應(yīng)用軟件、硬件系統(tǒng)也易于獲得.因此 , 開發(fā)成本較低。而引進(jìn)使用本系
統(tǒng)后,與傳統(tǒng)方式相比,具有高效率、低成本、高質(zhì)量的特點,可以節(jié)省不少人力、物 力及財力。所以,從經(jīng)濟的角度來看,該系統(tǒng)可行。2.1.2 技術(shù)可行性
開發(fā)工具: VS2005
數(shù)據(jù)庫環(huán)境: SQL Server 2005 系統(tǒng)環(huán)境:
Microsoft Windows 2000 或以上版本。
系統(tǒng)實現(xiàn)依靠相對熟悉的 c 語言和 SQL Server2008 數(shù)據(jù)庫系統(tǒng),其基本操作實質(zhì)還
是對數(shù)據(jù)庫進(jìn)行添加、刪除、查找等操作。2.1.3 操作可行性
系統(tǒng)采用菜單式,實現(xiàn)用戶與數(shù)據(jù)庫的交互,界面簡潔友好,操作方便。2.2 需求分析
需求分析是軟件設(shè)計的一個重要的環(huán)節(jié)。本階段對訂票系統(tǒng)的應(yīng)用情況作全面調(diào)
查,以確定系統(tǒng)目標(biāo),并對系統(tǒng)所需要的基礎(chǔ)數(shù)據(jù)以及數(shù)據(jù)處理要求進(jìn)行分析,從而確 定用戶的需求。用戶對系統(tǒng)的需求我們從以下幾方面進(jìn)行分析。2.2.1 功能需求
本網(wǎng)上售票系統(tǒng)應(yīng)該具備如下功能: 1.查詢
分為對車次信息的查詢和客戶對已訂車票信息的查詢。要求: 1)對車次的查詢,可以按照發(fā)車車次進(jìn)行查詢; 2)車次信息包括:車號、出發(fā) 地、目的地、發(fā)車日期、開出時刻、票價。3)座位類型設(shè)定。4)車次信息只允許用戶查詢,不能修改。2.添加車票
通過查詢系統(tǒng),客戶根據(jù)自己的需求找到滿意的車次,再輸入個人信息后直接通過 網(wǎng)上售票確定已預(yù)訂選中的車票。要求 :
售票記錄應(yīng)包括:會員名、車號、發(fā)車日期、訂購票數(shù)、總價。3.退票
可退票,通過查詢系統(tǒng),客戶可以根據(jù)自己的名字找到自己的訂票信息,通過退票 模塊退去已購車票。2.2.2 數(shù)據(jù)需求 信息需求,即在系統(tǒng)中需要處理哪些數(shù)據(jù)。根據(jù)對火車站網(wǎng)上訂票系統(tǒng)的分析,本 系統(tǒng)的信息需求如表 2-1 所示。表 2-1 信息輸入輸出 信息輸 入 信息 處理 信息 輸出 用戶輸 入所需車次 檢索 系統(tǒng)數(shù)據(jù)庫 符合 用戶需求的車次及相關(guān) 信息 用戶輸
入個人信息及所需 購的車 票信息 更新
系統(tǒng)中的訂票信息,將新
信息存入系統(tǒng)數(shù)據(jù)庫 操作
反饋(如找零)2.2.3 性能需求
為了保證系統(tǒng)能夠長期、安全、穩(wěn)定、可靠、高效的運行,本系統(tǒng)應(yīng)該滿足以下的 性能需求。1.準(zhǔn)確性和及時性
系統(tǒng)處理的準(zhǔn)確性和及時性是系統(tǒng)的必要性能。系統(tǒng)應(yīng)能及時而且準(zhǔn)確的根據(jù)用戶 權(quán)限及所輸入的信息做出響應(yīng)。
由于本系統(tǒng)的查詢功能對于整個系統(tǒng)的功能和性能完成
舉足輕重。作為系統(tǒng)的很多數(shù)據(jù)來源,而車票的數(shù)量和時間又影響用戶的決策活動,其 準(zhǔn)確性和及時性很大程度上決定了系統(tǒng)的成敗。在系統(tǒng)開發(fā)過程中,必須采用一定的方 法保證系統(tǒng)的準(zhǔn)確性和及時性。2.易用性
本系統(tǒng)是直接面對用戶的,而用戶往往對計算機并不是非常熟悉。這就要求系統(tǒng)能 夠提供良好的用戶接口,易用的人機交互界面。要實現(xiàn)這一點,就要求系統(tǒng)應(yīng)該盡量使 用用戶熟悉的術(shù)語和中文信息的界面,從而保證系統(tǒng)的易用性。
第二篇:火車票售票系統(tǒng) 需求分析報告
三、需求規(guī)格說明書
三、需求規(guī)格說明書
1.引言...........................................................................................................................1 1.1編寫目的.............................................................................................................1 1.2項目背景.............................................................................................................2 1.3定義....................................................................................................................2 1.4參考資料.............................................................................................................2 2.任務(wù)概述....................................................................................................................2 2.1目標(biāo)....................................................................................................................2 2.2運行環(huán)境.............................................................................................................3 2.3條件與限制..........................................................................................................3 3.?dāng)?shù)據(jù)描述....................................................................................................................3 3.1靜態(tài)數(shù)據(jù).............................................................................................................3 3.2動態(tài)數(shù)據(jù).............................................................................................................3 3.3數(shù)據(jù)庫介紹..........................................................................................................4 3.4數(shù)據(jù)詞典.............................................................................................................4 3.5數(shù)據(jù)采集.............................................................................................................8 4.功能需求....................................................................................................................8 4.1功能劃分.............................................................................................................8 4.2功能描述.............................................................................................................9 5.性能需求....................................................................................................................9 5.1數(shù)據(jù)精確度..........................................................................................................9 5.2時間特性.............................................................................................................9 5.3適應(yīng)性.................................................................................................................9 6.運行需求....................................................................................................................9 6.1用戶界面.............................................................................................................9 6.2硬件接口...........................................................................................................10 6.3軟件接口...........................................................................................................10 6.4故障處理...........................................................................................................10 7.其它需求..................................................................................................................10
1.引言
1.1編寫目的
本需求分析報告的目的是規(guī)范化本軟件的編寫,旨在于提高軟件開發(fā)過程中的能見度,便于對軟件開發(fā)過程中的控制與管理,同時提出了本火車售票系統(tǒng)的軟件開發(fā)過程,便于程
三、需求規(guī)格說明書
序員與客戶之間的交流、協(xié)作,并作為工作成果的原始依據(jù),同時也表明了本軟件的共性,以期能夠獲得更大范圍的應(yīng)用。本文檔供項目經(jīng)理、設(shè)計人員、開發(fā)人員參考。
1.2項目背景
a.項目的委托單位:中國鐵路局 b.開發(fā)單位:xx大學(xué) c.主管部門:計算機學(xué)院 d.軟件名稱:火車售票系統(tǒng) e.軟件開發(fā)者:
1.3定義
a.鐵路售票應(yīng)用系統(tǒng)軟件:基本元素為構(gòu)成鐵路售票及相關(guān)行為所必須的各種部分。
b.需求:用戶解決問題或達(dá)到目標(biāo)所需的條件或功能;系統(tǒng)或系統(tǒng)部件要滿足合同、標(biāo)準(zhǔn),規(guī)范或其它正式規(guī)定文檔所需具有的條件或權(quán)能。
c.需求分析:包括提煉,分析和仔細(xì)審查已收集到的需求,以確保所有的風(fēng)險承擔(dān)者都明其含義并找出其中的錯誤,遺憾或其它不足的地方。
d.模塊的獨立性:是指軟件系統(tǒng)中每個模塊只涉及軟件要求的具體的子功能,而和軟件系統(tǒng)中其他的模塊的接口是簡單的。
1.4參考資料
a.《實用軟件工程》(第二版)鄭人杰,殷人昆,陶永雷。清華大學(xué)出版社,1997。b.《JAVA網(wǎng)絡(luò)高級編程》金勇華,曲俊生。人民郵電出版社,2001。
c.《JBUILDER培訓(xùn)教程》Borland software corporation。機械工業(yè)出版社,2002。
2.任務(wù)概述
2.1目標(biāo)
(1)完善目前火車售票系統(tǒng),使之能跟上時代的發(fā)展。同時通過實踐來提高自己的動手能
三、需求規(guī)格說明書
(2)應(yīng)用范圍:理論上能夠?qū)崿F(xiàn)于鐵路部門的售票系統(tǒng),其目的在于在原有的系統(tǒng)基礎(chǔ)使得火車售票便捷化,以期實現(xiàn)完善日常生活中火車售票的各種缺陷。
(3)可實現(xiàn)旅客對于火車票的查詢與購買功能,售票員則可實現(xiàn)查詢、添加和刪除等功能;對于所查詢的車次結(jié)果提供列表顯示輸出;有一定的安全機制,普通旅客不能對車次信息隨意刪改,只有授權(quán)的售票員可通過密碼識別進(jìn)行維護(hù)。
2.2運行環(huán)境
操作系統(tǒng):Microsoft Windows 2000 Advanced Server 支持環(huán)境:IIS 5.0 數(shù) 據(jù) 庫:Microsoft SQL Server 2000 2.3條件與限制
一個更完善的火車票售票系統(tǒng),應(yīng)提供更為便捷與強大的查詢購買功能,如相應(yīng)的網(wǎng)絡(luò)操作及服務(wù),由于開發(fā)時間和計算機數(shù)量有限,該系統(tǒng)并未提供這一功能,對于信息的保護(hù)手段僅限制于設(shè)置用戶級別,以記名提供數(shù)據(jù)文件的備份,比較簡單,不能防止惡意的破壞,安全性能有待進(jìn)一步完善。
3.?dāng)?shù)據(jù)描述
3.1靜態(tài)數(shù)據(jù)
火車票:列車車號
(int SerialNumber)
列車始發(fā)時間(struct time SetOut)
列車始發(fā)站(char DeparturePoint)
列車終點站(char TerminalPoint)
票務(wù):列車車號
(int SerialNumber)
已售出車票票數(shù)(int FixedNumber)
額定載量(int FixNumber)
售票員:用戶名(char name)
密碼(char password)3.2動態(tài)數(shù)據(jù)
輸入數(shù)據(jù):根據(jù)界面提示,鍵盤輸入操作;
查詢方式:查詢車次、查詢始發(fā)站;
三、需求規(guī)格說明書
旅客購買時的票務(wù)信息,售票員添加、購票、退票時的票務(wù)信息;
售票員備份數(shù)據(jù)恢復(fù)所需的數(shù)據(jù)備份文件;
售票員操作需密碼,旅客操作受限; 輸出信息:查詢車次確定的數(shù)據(jù)庫記錄的子集;
統(tǒng)計結(jié)果;
車次信息錄入、刪除(成功或失敗);
車次信息查詢、購買的操作結(jié)果;
數(shù)據(jù)備份輸出的數(shù)據(jù)備份文件; 內(nèi)部數(shù)據(jù):查詢操作建立的索引;
3.3數(shù)據(jù)庫介紹
數(shù)據(jù)庫采用Microsoft Access數(shù)據(jù)庫
3.4數(shù)據(jù)詞典
《火車售票系統(tǒng)》的總體功能如下: 車票的售出; 車票的退還; 車票信息的查詢;
車票的增刪改;
售票員查詢統(tǒng)計車票信息; 售票系統(tǒng)數(shù)據(jù)備份; 售票管理者口令修改; 1.售票員登陸系統(tǒng):(1)數(shù)據(jù)流圖
售票退票選擇檢驗錯誤售票員選擇用戶名密碼身份驗證售票員信息密碼正確登陸系統(tǒng)選擇選擇選擇授權(quán)信息表查詢錄入新的班次信息
(2)數(shù)據(jù)詞典
? 數(shù)據(jù)源點及匯點描述: ① 名稱:售票員
簡要描述:管理售票員信息
有關(guān)數(shù)據(jù)流:用戶名、密碼、系統(tǒng)選擇:售票系統(tǒng)、退票系統(tǒng)、查詢系統(tǒng)、錄入信息系統(tǒng) 數(shù)目:1
三、需求規(guī)格說明書
? 加工邏輯詞條描述: ① 加工名:身份檢驗
加工編號:1
簡要描述:檢驗用戶身份 輸入數(shù)據(jù)流:用戶名、密碼
輸出數(shù)據(jù)流:密碼正確、身份驗證錯誤 加工邏輯: IF 用戶名為空 THEN
發(fā)出“用戶名為空錯誤”
ELSE IF 密碼為空 THEN
發(fā)出“密碼為空錯誤”
ELSE IF 用戶名和密碼不符 THEN
發(fā)出“用戶名和密碼不匹配錯誤”
ENDIF
ENDIF
ENDIF
ENDIF ? 數(shù)據(jù)流名詞條描述: ① 數(shù)據(jù)流名:用戶名
說明:售票員姓名
數(shù)據(jù)流來源:售票員 數(shù)據(jù)流去向:身份檢驗
數(shù)據(jù)流組成:用戶名=字符型字符串 ② 數(shù)據(jù)流名:密碼
說明:與用戶名相匹配的密碼 數(shù)據(jù)流來源:售票員
數(shù)據(jù)流去向:身份檢驗
數(shù)據(jù)流組成:密碼=短整型字符串 每個數(shù)據(jù)量流通量: ③ 數(shù)據(jù)流名:出錯信息
說明:用于指示身份驗證錯誤的信息
數(shù)據(jù)流來源:身份檢驗 數(shù)據(jù)流去向:售票員
數(shù)據(jù)流組成:出錯信息=任意字符串 ④ 數(shù)據(jù)流名:系統(tǒng)名稱
說明:系統(tǒng)的名稱 數(shù)據(jù)流來源: 數(shù)據(jù)流去向:選擇 數(shù)據(jù)流組成: ? 數(shù)據(jù)文件詞條描述: ① 數(shù)據(jù)文件名:授權(quán)信息表
簡述:存放售票員信息
輸入數(shù)據(jù):
輸出數(shù)據(jù):售票員信息
數(shù)據(jù)文件組成:授權(quán)信息表由“售票員信息”組成
三、需求規(guī)格說明書
2.售票員相關(guān)操作(售票、退票、查詢、錄入)
票務(wù)信息表車票信息車票信息售票退票選擇檢驗錯誤售票員選擇用戶名密碼身份驗證售票員信息密碼正確登陸系統(tǒng)選擇選擇選擇授權(quán)信息表查詢車票信息錄入新的班次信息車票信息列車信息表
(2):數(shù)據(jù)詞典:
? 數(shù)據(jù)源點及匯點描述: 1 名稱:售票員 ○簡要描述:管理售票員信息 有關(guān)數(shù)據(jù)流:用戶名、密碼
數(shù)目:1 ? 加工邏輯詞條描述: 1加工名:身份檢驗 ○加工編號:1
簡要描述:檢驗用戶身份
輸入數(shù)據(jù)流:用戶名、密碼
輸出數(shù)據(jù)流:密碼正確、身份驗證錯誤 2加工名:售票 ○加工編號:2 簡要描述:根據(jù)所讀入的操作信息,售出火車票
輸入數(shù)據(jù)流:操作信息,火車票信息
輸出數(shù)據(jù)流:火車票信息
加工邏輯:根據(jù)所讀入的操作信息,售出火車票
? 數(shù)據(jù)流名詞條描述: 數(shù)據(jù)流名:用戶名 ○
三、需求規(guī)格說明書
說明:售票員的姓名
數(shù)據(jù)流來源:售票員 數(shù)據(jù)流去向:身份檢驗
數(shù)據(jù)流組成:用戶名=字符型字符串 2數(shù)據(jù)流名:密碼 ○說明:與職工名稱相匹配的密碼 數(shù)據(jù)流來源:售票員 數(shù)據(jù)流去向:身份檢驗
數(shù)據(jù)流組成:密碼=短整型字符串 每個數(shù)據(jù)量流通量: 3數(shù)據(jù)流名:車票信息 ○說明:車票信息
數(shù)據(jù)流來源:售票員
數(shù)據(jù)流去向:列車信息表
? 數(shù)據(jù)文件詞條描述:
① 數(shù)據(jù)文件名:列車信息表
簡述:車票信息
輸入數(shù)據(jù):車票信息
輸出數(shù)據(jù):
數(shù)據(jù)文件組成:列車信息表由“車票信息”組成 存儲方式:關(guān)鍵碼 存取頻率:頻繁 2數(shù)據(jù)文件名:票務(wù)信息表 ○簡述:票務(wù)信息
輸入數(shù)據(jù):票務(wù)信息 輸出數(shù)據(jù):
數(shù)據(jù)文件組成:票務(wù)信息表由“列車號、已售票、剩余票”組成 存儲方式:關(guān)鍵碼 存取頻率:頻繁
3.旅客查詢購票過程:(1)數(shù)據(jù)流圖
三、需求規(guī)格說明書
旅客 登錄系統(tǒng)選擇選擇選擇選擇訂票退票查詢
(2)數(shù)據(jù)詞典:
● 數(shù)據(jù)源點及匯點描述: 名稱:旅客
簡要描述:訂票,退票,查詢
有關(guān)數(shù)據(jù)流:系統(tǒng)選擇:訂票系統(tǒng)、退票系統(tǒng)、查詢系統(tǒng) ●數(shù)據(jù)流名詞條描述:
⑤ 數(shù)據(jù)流名:系統(tǒng)名稱
說明:系統(tǒng)的名稱 數(shù)據(jù)流來源:
數(shù)據(jù)流去向:選擇
數(shù)據(jù)流組成:
3.5數(shù)據(jù)采集
數(shù)據(jù)采集采用鍵盤輸入
4.功能需求
4.1功能劃分
該軟件具有如下主要功能: 1.瀏覽功能 2.查詢功能 3.添加功能 4.修改功能 5.刪除功能
三、需求規(guī)格說明書
6.授權(quán)功能
4.2功能描述
1.瀏覽功能
列出當(dāng)前數(shù)據(jù)庫文件中車票的所有記錄 可選定一項紀(jì)錄,顯示說有域 2.查詢功能
車次信息匹配查詢 始發(fā)站信息匹配查詢 3.添加功能
增加一條車票的信息 4.修改功能
修改某一已存在的記錄內(nèi)容,提供確認(rèn)機制 5.刪除功能
刪除一條記錄,提供確認(rèn)機制 6.授權(quán)功能
授權(quán)票務(wù)管理人員修改數(shù)據(jù)的權(quán)限
5.性能需求
5.1數(shù)據(jù)精確度
查詢時應(yīng)保證查全率,所有在相應(yīng)域中包含查詢車次的記錄都應(yīng)能查到,同時保證查準(zhǔn)率。
5.2時間特性
一般操作的相應(yīng)時間應(yīng)在1~2秒內(nèi)
5.3適應(yīng)性
滿足運行環(huán)境在允許操作系統(tǒng)之間的安全轉(zhuǎn)換和雨其它又能夠用軟件的獨立運行要求。
6.運行需求
6.1用戶界面
采取對話框方式,多功能窗口運行
三、需求規(guī)格說明書
6.2硬件接口
(1)硬件接口:支持x86系列PC機
(2)網(wǎng)絡(luò)硬件接口要求:現(xiàn)實中要求具有高速以太網(wǎng)組網(wǎng)一實現(xiàn)聯(lián)網(wǎng)銷售,但是在理論實驗驗證軟件本身的目的來看,無需網(wǎng)絡(luò)通訊接口。
6.3軟件接口
運行于Windows2000及更高版本并裝有JAVA虛擬機的操作系統(tǒng)之上。
6.4故障處理
正常使用時不用出錯,對于用戶的輸入錯誤應(yīng)及時給出適當(dāng)?shù)母恼畔⑻崾荆暨\行遇到不可恢復(fù)的系統(tǒng)錯誤,也必須保證數(shù)據(jù)庫完好無損。
7.其它需求
(1)可用性:該軟件也可以通過單步跟蹤的操作進(jìn)行檢查處理。
(2)安全性:由于軟件運行數(shù)據(jù)放在數(shù)據(jù)庫中,所以參數(shù)不容易被錯改、破壞,萬一參數(shù)受到破壞也不會影響源程序。
(3)可維護(hù)性:該軟件利用數(shù)據(jù)庫進(jìn)行編程,系統(tǒng)結(jié)構(gòu)由程序基本確定,大量的參數(shù)及文本內(nèi)容全部放于數(shù)據(jù)庫中。修改、更新數(shù)據(jù)只要在數(shù)據(jù)庫進(jìn)行修改添加,而不需要對系統(tǒng)結(jié)構(gòu)進(jìn)行修改,這樣系統(tǒng)維護(hù)性、升級都十分方便。
(4)兼容性:由于尚未測試,故無法對兼容性進(jìn)行評析。
第三篇:火車站售票系統(tǒng)需求分析
火車票銷售系統(tǒng)需求分析
一、引言
隨著科學(xué)技術(shù)的發(fā)展,計算機領(lǐng)域不斷取得日新月異的研究成果。計算機在代替和延伸腦力勞動方面發(fā)揮越來越重要的作用,在日常生活中隨處都離不開計算機。尤其是在交通發(fā)達(dá)的今天,新時代的人們越來越依賴于方便、快捷的網(wǎng)絡(luò)購票,計算機優(yōu)勢更加體現(xiàn)出來。在數(shù)字化的今天,為了使旅客更方便地購票、使火車售票系統(tǒng)更加利于管理,開發(fā)火車票銷售系統(tǒng)更加顯得重要,我們結(jié)合本次課程設(shè)計開發(fā)以下的火車票銷售系統(tǒng)方案。
二、編寫目的
本系統(tǒng)主要為了更好地實現(xiàn)火車票的自動化銷售,給旅客提供一個方便快捷的購票平臺。同時也為系統(tǒng)管理員提供一個井然有序的管理平臺, 防止手工管理混亂,避免一些人為的錯誤。
三、功能需求
通過對火車票銷售系統(tǒng)所需要實現(xiàn)的功能的分析:一個火車站售票系統(tǒng)主要由管理員管理系統(tǒng)和用戶系統(tǒng)兩部分組成。劃分如下圖:
四. 數(shù)據(jù)流圖 頂
層
:
0層:
1層:
五. E-R圖
六、數(shù)據(jù)字典
1.用戶信息數(shù)據(jù)流,包括用戶信息表,屬性(ER圖小框框里的)主要操作:用戶注冊后將用戶信息添加進(jìn)去,用戶申請修改信息,管理員審核后修改數(shù)據(jù)表等。
2.火車票信息數(shù)據(jù)流,包括火車票數(shù)據(jù)表、售票數(shù)據(jù)表,屬性的基本操作:用戶購買、預(yù)定、退票等操作,管理員對火車票信息的修改、更新等操作,站點與火車票是一對多關(guān)系。
3.站點信息數(shù)據(jù)流,包括站點數(shù)據(jù)表,主要操作:管理員根據(jù)路況情況(維修、建造等)及時更新站點信息等操作,與火車票是一對多關(guān)系。
七、接口要求
?
硬件接口:無特別要求;
?
網(wǎng)絡(luò)硬件接口要求:現(xiàn)實中要求具有高速以太網(wǎng)組網(wǎng)一實現(xiàn)聯(lián)網(wǎng)銷售,但是在理論實驗驗證軟件本身的目的來看,無需網(wǎng)絡(luò)通訊接口。?
軟件接口要求:無
八、軟件屬性
?
可用性:本軟件也可以通過單步跟蹤的操作進(jìn)行檢查處理。?
安全性:由于軟件運行數(shù)據(jù)放在數(shù)據(jù)庫中,所以參數(shù)不容易被錯改、破壞,萬一參數(shù)受到破壞也不會影響源程序。?
可維護(hù)性:本軟件利用數(shù)據(jù)庫進(jìn)行編程,系統(tǒng)結(jié)構(gòu)由程序基本確定,大量的參數(shù)及文本內(nèi)容全部放于數(shù)據(jù)庫中。修改、更新數(shù)據(jù)只要在數(shù)據(jù)庫進(jìn)行修改添加,而不需要對系統(tǒng)結(jié)構(gòu)進(jìn)行修改,這樣系統(tǒng)維護(hù)性、升級都十分方便。?
兼容性:由于尚未測試,故無法對兼容性進(jìn)行評析。
九、支持信息及運行環(huán)境
?
軟件支持:本系統(tǒng)網(wǎng)頁端采用Myeclipes軟件編寫,手機端采用android stdio軟件編寫
? 設(shè)備支持:推薦配置:Windows8及以上版本、android4.0及以上版本; ?
數(shù) 據(jù) 庫:Mysql。
十、參考資料
《數(shù)據(jù)庫設(shè)計》Stephens著 機械工業(yè)出版社 《數(shù)據(jù)庫系統(tǒng)概論》(第三版)薩師煊、王珊著 高教出版社
《數(shù)據(jù)庫原理、編程與性能》作者:(美)Patrick O'Neil Elizabeth O'Neil 譯者: 周傲英 俞榮華 季文赟 錢衛(wèi)寧 等
《數(shù)據(jù)庫系統(tǒng)基礎(chǔ)教程》清華大學(xué)出版社等
第四篇:課程設(shè)計一:火車售票系統(tǒng)
數(shù)據(jù)結(jié)構(gòu)與算法課程實驗報告
班級:學(xué)號:
課程設(shè)計一:火車售票系統(tǒng)設(shè)計及實現(xiàn)姓名:
cll
一、實驗內(nèi)容:
火車售票系統(tǒng)在現(xiàn)實中的應(yīng)用已經(jīng)非常普遍,目前通常使用可視化的方法實現(xiàn),例如采用C/S模式下的程序設(shè)計或者采用B/S模式下的程序設(shè)計,通常都具有較為友好的界面和較為完善的功能。火車售票系統(tǒng)的實現(xiàn)過程中,主要涉及到數(shù)據(jù)格式的設(shè)計,也就是數(shù)據(jù)結(jié)構(gòu)的設(shè)計。通常在采用數(shù)據(jù)庫的情況下,可以運用數(shù)據(jù)庫的設(shè)計來實現(xiàn)。在沒有采用數(shù)據(jù)庫情況下需要,單獨設(shè)計相應(yīng)數(shù)據(jù)結(jié)構(gòu)和算法。
二、實驗?zāi)康模?/p>
按給定需求,通過查找相關(guān)資料,完成火車售票系統(tǒng)設(shè)計及實現(xiàn),在設(shè)計過程中充分運用數(shù)據(jù)結(jié)構(gòu)與算法課程中所學(xué)知識,從而熟練地掌握和應(yīng)用線性表、單鏈表等重要數(shù)據(jù)結(jié)構(gòu)和常用算法。提前熟悉軟件需求分析,軟件測試等環(huán)節(jié),運用相應(yīng)程序設(shè)計語言實現(xiàn)該系統(tǒng),從而進(jìn)一步提高程序設(shè)計能力。
三、問題描述
(1)此系統(tǒng)可以實現(xiàn)售票、退票、車票剩余情況查詢等功能。
(2)每張車票包含車次、座位信息。在售票、退票、查詢剩余票等環(huán)節(jié)中,都必須顯示出車票的信息,即車次、座位情況。
(3)退票時,必須是車站售出的車票才能退,否則視為無效票,不能退票。(4)演示程序以用戶和計算機的對話方式進(jìn)行,即在計算機終端上顯示“提示信息”之后,由用戶在鍵盤上輸入程序中規(guī)定的運算命令;相應(yīng)的輸入數(shù)據(jù)(濾去輸入中的非法字符)和運算結(jié)果顯示在后。
(5)由訂票系統(tǒng)的主要功能使程序的命令包括: 1)查詢;2)訂票;3)退票 4)退出訂票系統(tǒng)
四、問題的實現(xiàn)
4.1所用的數(shù)據(jù)結(jié)構(gòu)(包括所用數(shù)據(jù)結(jié)構(gòu)的抽象數(shù)據(jù)類型定義和說明)typedefstructLNode{ //數(shù)據(jù)域
char name[10];//訂票姓名
intdnum;//訂票數(shù)量
char dj[50];//證件編號
intzhekou;//1代表折扣對象
float pay;//付費
structLNode *next;//指針域
intzuohao[200];}LNode,*LinkList;//構(gòu)造單鏈表(已訂票)
typedefstructTickets{ char *endname;//終點站名
char *hnum;//車次名
intfnum;//票價
float discut;//折扣
int day;//日期
intwholenum;//總票額 intlastnum;//余票量
inttuipiao[100];//退票處理,記錄退票的座位號 inttpcs;//記錄目前退票次數(shù)
intmcps;//記錄賣出去的票數(shù)(包括退票)LinkList la;//已訂票鏈表
}Tickets;//構(gòu)造結(jié)構(gòu)類型(火車票)
typedefstruct{ struct Tickets *elem;//存儲空間的基址
int length;intlistsize;//當(dāng)前分配的存儲容量(以sizeof(Tickets)為單位)}SqList;//構(gòu)造順序表
4.2主要實現(xiàn)思路
1、火車站的火車票采用順序表表示。每趟火車出售的票用鏈表表示。
2、查詢:輸入終點站信息,輸出該趟火車的票價,日期,余票數(shù)等信息; 訂票:輸入終點站信息,確認(rèn)有該趟車之后,輸入該趟車的基本信息,之后輸入購票數(shù),系統(tǒng)查詢是否有余票,確認(rèn)之后,輸入個人基本信息;系統(tǒng)查詢是否有退票,若有退票則,先售出退票。插入新的結(jié)點。
退票:輸入終點站的信息,輸入個人信息,1、若退出所有票,則刪除該結(jié)點,若,只退部分票,則更改該結(jié)點的購票信息。
退出:退出系統(tǒng);
【程序演示】
輸入2 訂票,購買到溫州的火車票十張,姓名:a;證件號:a;
退票:輸入3退票,輸入終點站溫州,姓名:a;證件號:a;
退票之后,繼續(xù)訂票3張
【實現(xiàn)代碼】
intInitList_L(LinkList *h){//初始化帶頭結(jié)點的單鏈表
*h =(LinkList)malloc(sizeof(LNode));//生成頭結(jié)點
if(!h){ printf(“初始化鏈表錯誤!n”);
return 0;}
(*h)-> next = NULL;return 1;}
intCreate_Sq(SqList *L){//初始化并創(chuàng)建順序表
L->elem=(Tickets *)malloc(ListInitSize*sizeof(Tickets));if(!L->elem){ printf(“存儲分配失敗!”);// 存儲分配失敗
return 0;} L->length=5;//賦值
L->listsize=ListInitSize;int j;for(j = 0;j < L->length;j++){
L->elem[j].mcps=0;//初始化,記錄買出去的票 L->elem[j].tpcs=0;//記錄退票數(shù)
} inti;for(i = 0;i < L->length;i++){
InitList_L(&L->elem[i].la);}
L->elem[0].endname=“北京”;//終點站名
L->elem[0].hnum=“G2378”;//車次名
L->elem[0].day=1;//日期
L->elem[0].fnum=346;//票價
L->elem[0].discut=0.5;L->elem[0].wholenum=L->elem[0].lastnum=10;
L->elem[1].endname=“溫州”;L->elem[1].hnum=“K351”;L->elem[1].day=2;L->elem[1].fnum=254;L->elem[1].discut=0.5;L->elem[1].wholenum=L->elem[1].lastnum=10;
L->elem[2].endname=“合肥”;L->elem[2].hnum=“G782B”;L->elem[2].day=3;L->elem[2].fnum=224;
L->elem[2].discut=0.5;L->elem[2].wholenum=L->elem[2].lastnum=10;L->elem[3].endname=“武漢”;L->elem[3].hnum=“D2903”;L->elem[3].day=4;L->elem[3].fnum=200;L->elem[3].discut=0.5;L->elem[3].wholenum=L->elem[3].lastnum=10;L->elem[4].endname=“廈門”;L->elem[4].hnum=“T112”;L->elem[4].day=5;L->elem[4].fnum=450;L->elem[4].discut=0.5;L->elem[4].wholenum=L->elem[4].lastnum=10;return 1;}//創(chuàng)建順序表
void Demand(SqList L){ int n1;do{
char endstop[100];
printf(“*******查票窗口********n”);
printf(“請輸入終點站名:n”);
do{ gets(endstop);} while(!endstop[0]);inti;for(i=0;i printf(“tt杭州-->%sn”,endstop);printf(“tt車次:%sn”,L.elem[i].hnum);printf(“tt日期:%d日n”,L.elem[i].day);printf(“tt票價:%dn”,L.elem[i].fnum);printf(“tt折扣價(學(xué)生/軍人等5折):%fn”,L.elem[i].fnum*L.elem[i].discut);printf(“tt總票量:%dn”,L.elem[i].wholenum);printf(“tt余票量:%dn”,L.elem[i].lastnum);} } break;if(i==L.length-1){ printf(“沒有找到%s的車票!n”,endstop);} printf(“1.返回主菜單;2.繼續(xù)n”); scanf(“%d”,&n1);}while(n1==2);} void GetTicket(SqList *L){//訂票 int n2=2,zhekou;//n2=1,繼續(xù)訂票;n2=2,返回主菜單;n2=0,確定,即訂票成功 intnum;//訂票數(shù) float money;//存儲應(yīng)付的總票額 char endstop[100];//記錄終點站名 char name[100];char ID[100];//記錄證件號 do{ printf(“*******訂票窗口********n”);printf(“終點站名:”); do{ gets(endstop);} while(!endstop[0]);inti = 0;for(i=0;i printf(“tt杭州-->%sn”,endstop);printf(“tt車次:%sn”,L->elem[i].hnum);printf(“tt日期:%d日n”,L->elem[i].day);printf(“tt票價:%dn”,L->elem[i].fnum);printf(“tt折扣價(學(xué)生/軍人等5折):%fn”,L->elem[i].fnum*L->elem[i].discut);printf(“tt總票量:%dn”,L->elem[i].wholenum);printf(“tt余票量:%dn”,L->elem[i].lastnum);printf(“請輸入訂票數(shù):”); scanf(“%d”,&num); if(L->elem[i].lastnum == 0){ printf(“對不起,到%s的車票已賣完!n”,endstop);printf(“nt1.繼續(xù)訂票;2.返回主菜單;n”); scanf(“%d”,&n2);}else if(num> L->elem[i].lastnum){ printf(“對不起,到%s的車票只剩%d張。n”,endstop);printf(“n1.繼續(xù)訂票;2.返回主菜單;n”);scanf(“%d”,&n2);}else{ printf(“購票請輸入個人信息:n”); printf(“姓名:”); do{ gets(name);}while(!name[0]); printf(“是折扣對象嗎?若是,請輸入相關(guān)證件號,不是請輸入身份證號(1.是;0.不是)n”); scanf(“%d”,&zhekou);while(zhekou!= 1 &&zhekou!= 0){ printf(“不合法輸入,請重輸!n”); scanf(“%d”,&zhekou);} printf(“證件號碼:”);//fflush(stdin);do{ gets(ID);}while(!ID[0]);//輸出訂票信息,待客戶確認(rèn) printf(“t請核對您的訂票信息:n”);printf(“t姓名:%sn”,name);printf(“t證件號碼:%sn”,ID);printf(“t杭州--%s:n”,endstop);printf(“t車次:%sn”,L->elem[i].hnum);printf(“t日期:12月%d日”,L->elem[i].day);//輸出票價(兩種情況) if(zhekou==1){ printf(“折扣價(學(xué)生/軍人等5折):%fn”,L->elem[i].fnum*L->elem[i].discut); money=L->elem[i].fnum*L->elem[i].discut*num;//money用于暫時存儲應(yīng)付的總票額 }else{ printf(“票價:%dn”,L->elem[i].fnum); money = L->elem[i].fnum*num; } printf(“訂票數(shù):%dn”,num); printf(“座位號: ”); //如果有退票,優(yōu)先賣退票 int k=0; //k用于記錄買到的票是退票的數(shù)目 int data[100];//臨時記錄座位號,用于后面的保存 int j;//只用于for循環(huán)的參數(shù),不保存數(shù)據(jù); for(j=L->elem[i].tpcs-1;j>=0;j--){//只需要num張就夠了,L.elem[i].jishu1為退票總數(shù) printf(“%dt”,L->elem[i].tuipiao[j]);//退票的座位號tuipioa[j] k++;//買到退票數(shù)目+1 if(k>=num)break;//說明買的全部都是退票 } //退票數(shù)目不夠<買票數(shù)目 if(k 此時賣出的票數(shù)即為座位號 L->elem[i].mcps += 1;//賣出去票的數(shù)目+1(包括退票) data[j]=L->elem[i].mcps; printf(“%dt”,L->elem[i].mcps); } } printf(“n總票額:%fn”,money); printf(“n 0.確認(rèn);1.取消;2.返回主菜單n”); scanf(“%d”,&n2);if(n2==0){ printf(“訂票成功!n”); L->elem[i].lastnum-=num;//更新余票的數(shù)目 //在鏈表中插入新結(jié)點 LinkListp,s;//已訂票鏈表的指針類型 p = L->elem[i].la;//第i趟車的已訂票列表(頭結(jié)點) s =(LinkList)malloc(sizeof(LNode));//新的結(jié)點 if(!s){ printf(“內(nèi)存分配失?。 ?; }else{ s->next=p->next;//在頭部插入 p->next=s; s->dnum=num;//訂票數(shù)量 s->pay=money;//票價 s->zhekou=zhekou;//折扣信息 strcpy(s->name,name);//姓名 strcpy(s->dj,ID);//證件號 //將座位號記入客戶信息 int flag=0; for(j=L->elem[i].tpcs-1;j>=0;j--){//只需要num張就夠了,L.elem[i].jishu1為可買退票的張數(shù) } } s->zuohao[flag]=L->elem[i].tuipiao[j];flag++; k++;//買到退票數(shù)目+1 if(k>=num)break;//說明買的全部都是退票 } //退票數(shù)目不夠<買票數(shù)目 if(k s->zuohao[flag]=data[j]; flag++;} } } } break; if(i==L->length-1){ printf(“沒有到%s的車票!n”,endstop); n2=2; } } }while(n2==1);} void ReturnTicket(SqList *L){ int n3=2,k; //n3=1,繼續(xù)退票;n3=2,返回主菜單;n3=0,確定,即退票成功,k記錄要退的票的數(shù)目 LinkList p;char name[100];char ID[100]; char endstop[100];do{ printf(“*******退票窗口********n”); printf(“終點站:”); do{ gets(endstop);} while(!endstop[0]);inti; for(i=0;i printf(“姓名:”); do{ gets(name);}while(!name[0]);printf(“證件號:”);do{ gets(ID);}while(!ID[0]); p = L->elem[i].la;if(!p->next){ printf(“沒有客戶!”); p->next){ }else{ p = p->next;while(!(strcmp(p->name,name)==0 p=p->next;} &&strcmp(p->dj,ID)==0)&& if(strcmp(p->name,name)==0 &&strcmp(p->dj,ID)==0){ printf(“您的車票信息如下:n”); printf(“t姓名:%sn”,p->name); printf(“t證件號碼:%sn”,p->dj); printf(“t杭州-->%sn”,L->elem[i].endname); printf(“t車次:%sn”,L->elem[i].hnum); printf(“t日期:12月%d日n”,L->elem[i].day); if(p->zhekou==0){//非折扣對象 printf(“t票價:%dn”,L->elem[i].fnum); }else{//折扣對象 printf(“t 折價:%fn”,L->elem[i].fnum*L->elem[i].discut); } printf(“t訂票數(shù):%dn”,p->dnum); printf(“t座位號為:”); int flag; for(flag = 0;flag dnum;flag++){ printf(“%dt”,p->zuohao[flag]); } printf(“總票額:%fn”,p->pay); printf(“退幾張?n”); scanf(“%d”,&k);//k用來記錄退票的張數(shù) if(k > p->dnum){ printf(“您只有%d票,請重新確認(rèn)!n”,p->dnum); printf(“1.重新確定;2.返回主菜單n”); scanf(“%d”,n3); }else{ printf(“0.確認(rèn);1.取消;2.返回主菜單n”); scanf(“%d”,&n3); if(n3==0){ printf(“退票成功!n”); int i1 = L->elem[i].tpcs; L->elem[i].tpcs+=k;//更新退票數(shù) for(flag=p->dnum;flag>p->dnum-k;flag--,i1++){ L->elem[i].tuipiao[i1] = p->zuohao[flag-1]; } L->elem[i].lastnum+=k;//更新余票 if(k==p->dnum){ //票全部退完的情況,刪除鏈表中的結(jié)點 LinkList q = L->elem[i].la; while(q->next!=p){ 扣 q = q->next; } q->next = p->next;free(p);//釋放資源 n3=2;//返回主菜單 折扣票 }else{ if(p->pay == p->dnum*L->elem[i].fnum){ //判斷是否是 } p->pay-=L->elem[i].fnum*k;}else{ p->pay-=L->elem[i].fnum*k*L->elem[i].discut; p->dnum-=k; printf(“你還有%d張票”,p->dnum); n3=2; } }//if(n3==0) }// else }else{// if(strcmp(p->name,name)==0&&strcmp(p->zhengjian,zhengjian)==0) printf(“沒有該客戶買票的信息!請重新確認(rèn)!”);//最后一個結(jié)點也不是要找的結(jié)點的情況 n3=2; } } break; }//if(strcmp(L.elem[i].endstop,endstop)==0)if(i==L->length-1){ //查找到了最后一個 printf(“不是本站售出的票,請重新確認(rèn)!n”); n3=2; } } }while(n3==1);} void Quit(){ printf(“成功退出系統(tǒng)!感謝您的支持!n”);} void main(){ LinkList L0;InitList_L(&L0);SqList L; //順序表,用于存放車票信息 Create_Sq(&L); //初始化并創(chuàng)建順序表 int n;do{ printf(“n **************杭州火車站訂票系統(tǒng)***************n”); printf(“n ******************本站車票信息******************n”); printf(“ * 車次目的地日期票價 *nn”); inti;for(i=0;i * %s %s 12月%d日 %d * n”,L.elem[i].hnum,L.elem[i].endname,L.elem[i].day,L.elem[i].fnum); } printf(“n * 1.查詢 3.退票 *n”);printf(“n * 2.訂票 4.退出 *n”); printf(“ ***************************************************n”); printf(“n請按菜單提示輸入:n”); } scanf(“%d”,&n); switch(n){ case 1 : Demand(L); break; case 2 :GetTicket(&L); break; case 3 :ReturnTicket(&L); break; case 4 : Quit(); break;} }while(n!=4); 一個簡單的火車票售票管理系統(tǒng)(原創(chuàng))#include typedef struct time //時間類型 { int x,y,z; //分別對應(yīng)年,月,日 }TIME; typedef struct cnode //票信息類型 { int no; //票號 int id; //購票人證件號 TIME date; //購票日期 struct cnode *next;}CNODE; typedef struct tnode //車次信息類型 { char data; //車次編號 struct tnode *lchild,*rchild; CNODE *head;}TNODE; void create(); //按車次建立二叉排序樹 void insert(int); //增加新的車次(二叉排序樹的插入)void del(); //取消車次(二叉排序樹節(jié)點刪除) void inorder(TNODE *); //中序遍歷車次二叉排序樹(僅顯示車次信息)void inorder_all(TNODE *); //中序遍歷車次二叉排序樹(顯示車次及售票信息)void preorder(TNODE *); //先序遍歷車次二叉排序樹(僅顯示車次信息)TNODE *search(); //按車次編號搜索 CNODE *insert_c(CNODE *); //插入新的售票信息(單張)CNODE *insert_c_more(CNODE *); //插入新的售票信息(批量)CNODE *del_c(CNODE *,CNODE *); //退票處理(刪除售票信息)CNODE *search_c(CNODE *,int); //按票號查詢 void search_c_id(CNODE *,int); //按購票人證件號搜索(限定某車次)void search_c_id_all(TNODE *,int); //按購票人證件號搜索(所有車次)void search_date(CNODE *,TIME); //按購票日期搜索(限定某車次)void search_date_all(TNODE *,TIME); //按購票日期搜索(所有車次)void print_c(CNODE *); //輸出售票紀(jì)錄(單張)void print_c_all(CNODE *); //輸出售票紀(jì)錄(批量) TNODE *root=NULL; void main(){ int i,func,no,ok; TNODE *t; CNODE *c; TIME d; printf(“nnn”); for(i=0;i<15;i++)printf(“=”); printf(“列車售票信息管理系統(tǒng)”); for(i=0;i<15;i++)printf(“=”); printf(“n”); printf(“t1.車次信息管理n”); printf(“t2.售票記錄管理n”); printf(“t3.售票記錄查詢n”); printf(“t4.售票記錄一覽n”); printf(“t5.退出系統(tǒng)n”); for(i=0;i printf(“n請選擇您所需要的功能:”); fflush(stdin); scanf(“%d”,&func); switch(func){ case 1: printf(“nn車次信息管理>>>>n”); for(i=0;i printf(“nt1.增加新的車次”); printf(“nt2.取消車次”); printf(“nt3.返回上級菜單n”); for(i=0;i printf(“n請選擇您所需要的功能:”); fflush(stdin); scanf(“%d”,&func); switch(func){ case 1: create(); printf(“n售票信息更新成功!nn”); break; case 2:del();break; case 3:main();break; default:printf(“n[錯誤]功能號輸入有誤!請重新輸入!”); } break; case 2: printf(“nn售票記錄管理>>>>n”); for(i=0;i printf(“nt1.增加新的售票記錄”); printf(“nt2.退票”); printf(“nt3.返回上級菜單n”); for(i=0;i printf(“n請選擇您所需要的功能:”); fflush(stdin); scanf(“%d”,&func); switch(func){ case 1: t=search(); if(t!=NULL)t->head=insert_c_more(t->head); break; case 2: t=search(); printf(“需要退票的票號:”); scanf(“%d”,&no); t->head=del_c(t->head,search_c(t->head,no)); break; case 3:main();break; default:printf(“n[錯誤]功能號輸入有誤!請重新輸入!”); } break; case 3: printf(“nn售票記錄查詢>>>>n”); for(i=0;i printf(“nt1.按票號搜索”); printf(“nt2.按購票者證件號搜索”); printf(“nt3.按購票日期搜索”); printf(“nt4.返回上級菜單n”); for(i=0;i printf(“n請選擇您所需要的功能:”); fflush(stdin); scanf(“%d”,&func); switch(func){ case 1: t=search(); if(t!=NULL){ printf(“n請輸入您所要查詢的票號:”); scanf(“%d”,&no); c=search_c(t->head,no); if(c==NULL)printf(“[錯誤]沒有該票號的紀(jì)錄!該票還未售出或為廢票!自動返回上級菜單n...”);} break; case 2: printf(“n請輸入您所要查詢的購票者證件號:”); scanf(“%d”,&no); search_c_id_all(root,no); printf(“搜索完畢!自動返回上級菜單n...”); break; case 3: do{ printf(“n請輸入您所要查詢的日期(格式: yy-mm-dd):”); scanf(“%d-%d-%d”,&d.x,&d.y,&d.z); if(d.y<13&&d.y>0){ if(d.y==1||d.y==3||d.y==5||d.y==7||d.y==8||d.y==10||d.y==12) if(d.z<32&&d.z>0)ok=1; else if(d.z==2) if(d.z<30&&d.z>0)ok=1; else if(d.z<31&&d.z>0)ok=1; } else ok=0; if(!ok)printf(“n[錯誤]日期輸入有誤!請重新輸入!”); }while(!ok); printf(“n指定車次嗎?(1->是,0->否):”); scanf(“%d”,&ok); if(ok)search_date(search()->head,d); else search_date_all(root,d); break; case 4:main();break; default:printf(“n[錯誤]功能號輸入有誤!自動返回上級菜單n...”); } break; case 4: printf(“nn售票記錄一覽>>>>n”); for(i=0;i printf(“nt1.僅瀏覽車次”); printf(“nt2.指定車次已售票記錄”); printf(“nt3.所有車次已售票記錄”); printf(“nt4.測試:先序遍歷車次”); printf(“nt5.返回上級菜單n”); for(i=0;i printf(“n請選擇您所需要的功能:”); fflush(stdin); scanf(“%d”,&func); switch(func){ case 1: printf(“n+++僅瀏覽車次n”); if(root==NULL)printf(“[錯誤]無車次紀(jì)錄!”); else{inorder(root);printf(“n”);} break; case 2: printf(“n+++指定車次已售票記錄n”); t=search(); if(t!=NULL){ print_c_all(t->head); printf(“n”); } break; case 3: printf(“n+++所有車次已售票記錄n”); if(root==NULL)printf(“[錯誤]無車次紀(jì)錄!”); else{inorder_all(root);printf(“n”);} break; case 4: printf(“n+++測試:先序遍歷車次n”); if(root==NULL)printf(“[錯誤]無車次紀(jì)錄!”); else{preorder(root);printf(“n”);} break; case 5:main();break; default:printf(“n[錯誤]功能號輸入有誤!自動返回上級菜單n...”); } break; case 5:exit(0); default:printf(“n[錯誤]功能號輸入有誤!請重新輸入!”); } main();} void inorder_all(TNODE *ptr){ if(ptr!=NULL) { inorder_all(ptr->lchild); printf(“%d:n”,ptr->data); print_c_all(ptr->head); printf(“n”); inorder_all(ptr->rchild); } } void inorder(TNODE *ptr){ if(ptr!=NULL) { inorder(ptr->lchild); printf(“%dt”,ptr->data); inorder(ptr->rchild); } } void preorder(TNODE *ptr){ if(ptr!=NULL) { printf(“%dt ”,ptr->data); preorder(ptr->lchild); preorder(ptr->rchild); } } void print_c(CNODE *tkt){ if(tkt!=NULL)printf(“t%dt%dt%d-%d-%dn”,tkt->no,tkt->id,tkt->date.x,tkt->date.y,tkt->date.z);} void print_c_all(CNODE *head){ int i=0,j=0; if(head==NULL){printf(“n記錄為空!n”);return;} for(i=0;i printf(“nNOt票號t購票者證件號t購票日期(年-月-日)n”); for(i=0;i for(j=0;head!=NULL;j++){ printf(“n%d”,j); print_c(head); head=head->next; } printf(“n”); for(i=0;i printf(“n總計 %d 條記錄n”,j); for(i=0;i printf(“n”);} void create(){ int n,i;int k[MAX];printf(“n您所希望增加車次的數(shù)量:”);scanf(“%d”,&n);for(i=0;i printf(“新增第%d列車次:”,i+1); scanf(“%d”,&k[i]);} for(i=0;i insert(k[i]);} void insert(int m){ TNODE *p1,*p2;if(root==NULL) { root=(TNODE *)malloc(sizeof(TNODE)); root->data=m; root->lchild=root->rchild=NULL; root->head=NULL; } else { p1=root; while(m!=p1->data) { if((m data)&&(p1->lchild!=NULL))p1=p1->lchild; else if((m>p1->data)&&(p1->rchild!=NULL))p1=p1->rchild; else if((m data)&&(p1->lchild==NULL)) { p2=(TNODE *)malloc(sizeof(TNODE)); p2->data=m; p2->lchild=p2->rchild=NULL; p2->head=NULL; p1->lchild=p2; return; } else if((m>p1->data)&&(p1->rchild==NULL)) { p2=(TNODE *)malloc(sizeof(TNODE)); p2->data=m; p2->lchild=p2->rchild=NULL; p2->head=NULL; p1->rchild=p2; return; } } printf(“n[錯誤]未能成功增加車次%d,車次號 %d 已存在!”,m,m); } } TNODE *search(){ int key; TNODE *p; p=root; printf(“n輸入您所要查找的車次編號:”); scanf(“%d”,&key); while(p!=NULL&&p->data!=key){ if(key data){p=p->lchild;} else if(key>p->data){p=p->rchild;} } if(p==NULL)printf(“n該車次不存在!”); return(p);} void del(){ int key; TNODE *p1,*p2,*p3,*temp; p1=p2=root; p3=temp=NULL; printf(“n請輸入您想要取消的車次編號:”); scanf(“%d”,&key); while(p2!=NULL&&p2->data!=key){ if(key data){p1=p2;p2=p2->lchild;} else if(key>p2->data){p1=p2;p2=p1->rchild;} } if(p2==NULL){printf(“n[錯誤]該車次不存在!返回上級菜單n...”);return;} else if(p2->lchild==NULL&&p2->rchild==NULL) { if(p1->lchild==p2)p1->lchild=NULL; if(p1->rchild==p2)p1->rchild=NULL; temp=p2; if(root==p2){temp=root;root=NULL;} } else{ if(p2->rchild==NULL){ temp=p2->lchild; p2->data=temp->data; p2->lchild=temp->lchild; p2->rchild=temp->rchild; } else if(p2->lchild==NULL){ temp=p2->rchild; p2->data=temp->data; p2->lchild=temp->lchild; p2->rchild=temp->rchild; } else{ p3=p2; temp=p2->lchild; while(temp->rchild!=NULL){p3=temp;temp=temp->rchild;} p2->data=temp->data; if(p3==p2)p3->lchild=temp->lchild; else p3->rchild=temp->lchild; } } free(temp); printf(“車次 %d 已取消!nn”,key);} CNODE *insert_c(CNODE *head){ CNODE *k,*p; k=(CNODE *)malloc(sizeof(CNODE)); do{ printf(“n車票編號:”); scanf(“%d”,&k->no); p=search_c(head,k->no); if(p!=NULL)printf(“n[錯誤]該票已被購買!請重新選擇!n”); }while(p!=NULL); printf(“購票者證件號:”); scanf(“%d”,&k->id); printf(“購票日期(格式:yy-mm-dd):”); scanf(“%d-%d-%d”,&k->date.x,&k->date.y,&k->date.z); k->next=head; head=k; return(head);} CNODE *insert_c_more(CNODE *head){ int n,i; printf(“n請輸入批量新增售票記錄數(shù):”); fflush(stdin); scanf(“%d”,&n); for(i=0;i printf(“n售票記錄更新成功!n”); return(head);} CNODE *search_c(CNODE *head,int id){ CNODE *temp,*s; s=temp=head; while(temp!=NULL&&temp->id!=id){s=temp;temp=temp->next;} print_c(temp); if(temp!=NULL)return(s); else return NULL;} void search_c_id(CNODE *head,int id){ CNODE *s,*head_s; s=head_s=NULL; if(head==NULL)printf(“無該證件號紀(jì)錄!n”); while(head!=NULL){ if(head->id==id){ s=(CNODE *)malloc(sizeof(CNODE)); s->no=head->no;s->id=head->id;s->date=head->date; s->next=head_s;head_s=s; } head=head->next; } print_c_all(head_s); printf(“n”);} void search_c_id_all(TNODE *ptr,int id){ if(ptr!=NULL){ search_c_id_all(ptr->lchild,id); printf(“n車次:%dn”,ptr->data); search_c_id(ptr->head,id); search_c_id_all(ptr->rchild,id); } } void search_date(CNODE *head,TIME t){ CNODE *s,*head_s; s=head_s=NULL; while(head!=NULL){ if(t.x==head->date.x) if(t.y==head->date.y) if(t.z==head->date.z) { s=(CNODE *)malloc(sizeof(CNODE)); s->no=head->no;s->id=head->id;s->date=head->date; s->next=head_s;head_s=s; } head=head->next; } print_c_all(head_s); printf(“n”);} void search_date_all(TNODE *ptr,TIME t){ if(ptr!=NULL){ search_date_all(ptr->lchild,t); printf(“n車次:%dn”,ptr->data); search_date(ptr->head,t); search_date_all(ptr->rchild,t); } } CNODE *del_c(CNODE *head,CNODE *p){ CNODE *temp; if(p==NULL)printf(“[錯誤]該票未售出或為廢票!返回上級菜單n...”); else if(p==head){head=NULL;free(p);} else{ temp=p->next; p->next=temp->next; free(temp); } return(head);}第五篇:一個簡單的火車票售票管理系統(tǒng)