車票管理系統(tǒng)課程設(shè)計(jì)報(bào)告_第1頁
已閱讀1頁,還剩10頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、<p><b>  車票管理系統(tǒng)</b></p><p><b>  一 目的</b></p><p>  通過課程設(shè)計(jì),加深對(duì)《C語言程序設(shè)計(jì)》和《數(shù)據(jù)結(jié)構(gòu)》課程所學(xué)知識(shí)的理解,熟練掌握和鞏固C語言的基本知識(shí)和語法規(guī)范,包括:數(shù)據(jù)類型(整形、實(shí)型、字符型、指針、數(shù)組、結(jié)構(gòu)等);運(yùn)算類型(算術(shù)運(yùn)算、邏輯運(yùn)算、自增自減運(yùn)算、賦值運(yùn)算等)

2、;程序結(jié)構(gòu)(順序結(jié)構(gòu)、判斷選擇結(jié)構(gòu)、循環(huán)結(jié)構(gòu));庫函數(shù)應(yīng)用等;復(fù)雜任務(wù)功能分解方法(自頂向下逐步求精、模塊化設(shè)計(jì)、信息隱藏等),熟練掌握和鞏固三種基本的數(shù)據(jù)結(jié)構(gòu)(線性結(jié)構(gòu)、樹形結(jié)構(gòu)、圖形結(jié)構(gòu))的邏輯結(jié)構(gòu)、存儲(chǔ)結(jié)構(gòu)以及相關(guān)運(yùn)算和應(yīng)用。</p><p>  學(xué)會(huì)編制結(jié)構(gòu)清晰、風(fēng)格良好、數(shù)據(jù)結(jié)構(gòu)適當(dāng)?shù)腃語言程序,從而具備利用計(jì)算機(jī)編程分析解決綜合性實(shí)際問題的初步能力</p><p><b&

3、gt;  二 需求分析</b></p><p>  1、首先本演示程序要實(shí)現(xiàn)錄入班次信息的功能,并且要用文件來保存這些信息,還可以不定時(shí)的增加班次數(shù)據(jù)。</p><p>  2、需要瀏覽班次信息是可以一次性輸出當(dāng)前的班次狀況,并且要從實(shí)際考慮,若當(dāng)前系統(tǒng)時(shí)間已經(jīng)超過了某班次的發(fā)車時(shí)間,則要顯示“此班已發(fā)出”的提示信息。</p><p>  3、此程序既

4、為車票管理系統(tǒng),就要實(shí)現(xiàn)查詢路線、售票、退票等功能。當(dāng)使用查詢路線功能時(shí),要分兩種情況:按班次號(hào)查詢和按終點(diǎn)站查詢。若使用售票功能,則只有在查詢出已定票人數(shù)小于額定載量且當(dāng)前系統(tǒng)時(shí)間小于發(fā)車時(shí)間時(shí)才能售票,并且要自動(dòng)跟新已售票人數(shù)。退票要輸入退票的班次,當(dāng)本班車尚未出發(fā)時(shí)才能退票,也要自動(dòng)更新已售票人次。</p><p>  4、演示程序以用戶和計(jì)算機(jī)的對(duì)話方式執(zhí)行,即在計(jì)算機(jī)的屏幕上顯示“提示信息”下,用戶根據(jù)

5、自己的意愿自行操作,每次測(cè)試完畢,新增加的班次信息要保存在data.txt文件中。</p><p><b>  三 概要設(shè)計(jì)</b></p><p>  1、本程序各個(gè)模塊的功能及調(diào)用關(guān)系:</p><p>  (1)主程序模塊main()函數(shù):</p><p>  此主程序的主要目的是用來調(diào)用讀取文件函數(shù)、功能菜單函

6、數(shù)以及保存文件信息函數(shù)。</p><p>  (2)文件讀入與保存函數(shù)read()、save()以及功能菜單MainMenu()函數(shù):</p><p>  這三個(gè)函數(shù)的主要目的是為了讀取文件,保存文件和為用戶創(chuàng)造一個(gè)功能菜單以便于用戶的操作。</p><p>  (3)在MainMenu()函數(shù)中調(diào)用的各級(jí)功能函數(shù):</p><p>  這個(gè)

7、模塊中有六個(gè)函數(shù),MainMenu()函數(shù)調(diào)用這六個(gè)函數(shù)來分別實(shí)現(xiàn)增加班次、瀏覽班次信息、查找班次、售票、退票、退出的功能。 </p><p>  2、程序中出現(xiàn)的數(shù)據(jù)類型定義及含義:</p><p>  本程序采用鏈表存儲(chǔ)相關(guān)信息,定義如下</p><p>  typedef struct Node</p><p>  { int nu

8、m; //班次號(hào)</p><p>  int sTimeH, sTimeM; //發(fā)車時(shí)間(小時(shí)sTimeH和分鐘sTimeM)</p><p>  int sumSeat, soldSeat; //總座位數(shù), 已訂票人數(shù)</p><p>  float lastTime; //行車時(shí)間<

9、/p><p>  char begin[20], end[20]; //起始站,終點(diǎn)站</p><p>  struct Node * next; //指向下一個(gè)節(jié)點(diǎn)</p><p>  }Node, * LinkedNode; </p><p><b>  四 詳細(xì)設(shè)計(jì)</b></p><

10、;p>  用全局變量List保存鏈表的頭結(jié)點(diǎn)</p><p>  LinkedNode List;</p><p>  ShowHead()、ShowNode(Node * p);這兩個(gè)函數(shù)用于顯示鏈表信息:</p><p>  ShowHead()輸出航班、發(fā)車時(shí)間、站點(diǎn)等標(biāo)題信息;</p><p>  ShowNode()輸出鏈表中

11、存儲(chǔ)的確切信息。</p><p>  Read()函數(shù)讀取文件信息并存入鏈表:</p><p>  定義一個(gè)指針*fp指向所要打開的文件,</p><p>  List = (LinkedNode)malloc(sizeof(Node));</p><p>  LinkedNode p = List; 為頭結(jié)點(diǎn)申請(qǐng)空間并用p指向頭結(jié)點(diǎn);<

12、;/p><p>  fseek()函數(shù)來移動(dòng)*fp指針;</p><p>  ftell()函數(shù)返回指針;</p><p>  然后用fscanf()從文件中輸入信息。</p><p>  最后用fclose(fp)來關(guān)閉文件。</p><p>  Save()函數(shù)將鏈表存儲(chǔ)的信息存進(jìn)文件并釋放所占空間:</p>

13、;<p>  用fopen()函數(shù)打開fp指向的文件;</p><p>  然后用fprintf()函數(shù)輸出鏈表信息并存到文件里;</p><p>  最后用fcolse(fp)關(guān)閉文件。</p><p>  IsSetOff(Node * p)函數(shù)用于判斷班次是否已經(jīng)出發(fā):</p><p><b>  time_t

14、t;</b></p><p><b>  time(&t);</b></p><p>  struct tm * timeinfo = localtime(&t)</p><p>  獲取系統(tǒng)時(shí)間,然后與班次出發(fā)時(shí)間比較并將結(jié)果用return()函數(shù)返回。</p><p>  Add()函數(shù)是

15、增加一個(gè)班次:</p><p>  LinkedNode p = List;定義p指向頭結(jié)點(diǎn);</p><p>  然后用malloc()函數(shù)為結(jié)點(diǎn)申請(qǐng)空間;</p><p>  用scanf()函數(shù)輸入各種信息;</p><p>  ShowHead();</p><p>  ShowNode(p); 輸出新增加的

16、班次信息。</p><p>  Lookup()函數(shù)顯示各班次信息:</p><p>  if (IsSetOff(p))</p><p>  printf("\n\n此班已出發(fā)");</p><p>  ShowNode(p);</p><p>  p = p->next; 依次顯示文件中的

17、班次信息。</p><p>  SearchPath()函數(shù)查詢路線:</p><p><b>  int n;</b></p><p>  printf("請(qǐng)輸入要出售的車票班次:");</p><p>  scanf("%d", &n); 按班次號(hào)來售票;</

18、p><p>  char ch[20];</p><p>  printf("請(qǐng)輸入終點(diǎn)站:");</p><p>  scanf("%s", &ch);按終點(diǎn)站來查詢。</p><p>  SaleTicket()、ReturnTicket()函數(shù)用來賣票退票:</p><p&

19、gt;  if (IsSetOff(p))</p><p>  printf("此班已出發(fā)!\n"); 此時(shí)班次出發(fā)時(shí)間超過系統(tǒng)時(shí)間;</p><p>  ++p->soldSeat;</p><p>  printf("售票成功\n");</p><p>  ShowHead();</p

20、><p>  ShowNode(p);輸出賣票后的該班次信息。</p><p>  退票功能的實(shí)現(xiàn)與以上功能相似,++p->soldSeat</p><p>  改成--p->soldSeat表示退票后soldSeat數(shù)減少一個(gè)。</p><p>  Quit()函數(shù)退出:</p><p>  MainMenu

21、()函數(shù)是主菜單,各個(gè)功能的選擇:</p><p>  switch(getch()) 用一個(gè)switch函數(shù)來選擇一個(gè)功能;</p><p>  用getch()從鍵盤輸入一個(gè)數(shù)字來選擇功能。</p><p>  主函數(shù)void main()</p><p>  主函數(shù)來調(diào)用Read()、MainMenu()、Save()三個(gè)函數(shù);<

22、/p><p>  實(shí)現(xiàn)從文件讀取信息,打開主菜單,保存信息到文件中的功能。</p><p><b>  五 調(diào)試分析</b></p><p>  1、該程序的關(guān)鍵是用一個(gè)結(jié)構(gòu)體來存儲(chǔ)每個(gè)班次的各種信息,然后建立一個(gè)單鏈表存儲(chǔ)所有的班次。要注意的是正確的定義頭結(jié)點(diǎn)指針,還有保證每次循環(huán)都能正確的進(jìn)行下去。只有保證這些細(xì)節(jié)都正確,程序才能正常的運(yùn)行。

23、</p><p>  2、在設(shè)計(jì)程序的時(shí)候要設(shè)計(jì)多個(gè)模塊,比如程序中的查詢、售票、退票、功能菜單等,最后用一個(gè)主函數(shù)來調(diào)用其他的函數(shù),我在調(diào)試時(shí)發(fā)現(xiàn)每次賣票后都不能正常的返回,經(jīng)檢查后才發(fā)現(xiàn)是因?yàn)榈袅艘痪鋚=p->next,所以在以后寫程序時(shí)都要認(rèn)真仔細(xì),這樣才不至于在調(diào)試程序的時(shí)候出現(xiàn)問題,浪費(fèi)很多時(shí)間。</p><p>  3、在寫這個(gè)程序的時(shí)候,調(diào)試過程中發(fā)現(xiàn)了很多錯(cuò)誤,這樣很

24、不容易修改,所以最好循序漸進(jìn),認(rèn)真寫好每一個(gè)程序,檢查后再寫下一個(gè),這樣更能保證整個(gè)程序的正確性,也便于隨時(shí)調(diào)整。</p><p>  4、在調(diào)試的過程中同樣出現(xiàn)文件寫入和讀出的問題,所以文件的格式必須熟練掌握,這樣才能正確的實(shí)現(xiàn)功能,達(dá)到目的。</p><p><b>  六 測(cè)試結(jié)果</b></p><p>  1、將程序在VC6中打開后

25、點(diǎn)擊編譯、運(yùn)行后出現(xiàn)主界面如下圖:</p><p>  2、我們先查看已有的班次,選擇2,則出現(xiàn)下圖:</p><p>  3、按任意鍵返回主菜單,然后我們選擇增加一個(gè)班次,選擇1,根據(jù)提示分別輸入班次:5、發(fā)車時(shí)間:22:30、起始站:武漢、終點(diǎn)站:南京、行車時(shí)間3.5、額定載量:50則出現(xiàn)下圖:</p><p>  此時(shí)按任意鍵返回主菜單,再選擇2查看班次,我們

26、發(fā)現(xiàn)班次5已經(jīng)增加進(jìn)去了,如圖:</p><p>  4、按任意鍵返回主菜單選擇3查詢功能,則出現(xiàn)按班次號(hào)查詢和按終點(diǎn)站查詢,我們先選擇1并輸入3,則會(huì)出現(xiàn)班次3的信息如圖:</p><p>  然后我們選擇2繼續(xù)按終點(diǎn)站查詢,輸入南京,則會(huì)顯示如圖:</p><p>  5、按ESC返回主菜單選擇4售票,然后輸入要購買的班次號(hào),若該班次已發(fā)出,則會(huì)顯示:此班已出發(fā)

27、。否則顯示售票成功,并輸出該班次的信息:</p><p><b>  ,</b></p><p>  6、現(xiàn)在我們按任意鍵返回主菜單并選擇5,實(shí)現(xiàn)退票功能,輸入要退票的班次,我們輸入5,則顯示如圖:</p><p>  此時(shí)我們發(fā)現(xiàn)已經(jīng)退票成功。</p><p>  7、若想退出,則按ESC,顯示如圖:</p>

28、;<p><b>  七 用戶使用說明</b></p><p>  1、本程序可以在VC6的環(huán)境下運(yùn)行。</p><p>  2、程序運(yùn)行后,會(huì)自動(dòng)從文件讀取數(shù)據(jù),并出現(xiàn)功能菜單</p><p>  用戶要根據(jù)自己的意愿自己選擇所要執(zhí)行的功能,每次用戶選擇功能后都會(huì)有提示輸入信息,用戶只需根據(jù)提示輸入信息便可輕松使用各種功能。&

29、lt;/p><p>  3、當(dāng)用戶使用完并退出后,新增加的班次信息會(huì)自動(dòng)保存在data.txt</p><p><b>  八 課程設(shè)計(jì)總結(jié)</b></p><p>  通過本次的課程設(shè)計(jì),讓我又重新拿起了程序設(shè)計(jì)和數(shù)據(jù)結(jié)構(gòu)課本,好好的復(fù)習(xí)了一下以前學(xué)過的知識(shí)。對(duì)循環(huán)結(jié)構(gòu)、指針、結(jié)構(gòu)體,函數(shù)調(diào)用,switch語句, for循環(huán)語句等有了更為系統(tǒng)的

30、了解,也學(xué)會(huì)了制作流程圖,明白了一個(gè)設(shè)計(jì)精良的程序要的不僅是它的正確輸出結(jié)果,還要有簡(jiǎn)明可靠地思路,良好的穩(wěn)定性等。通過這次課程設(shè)計(jì),讓我能把相關(guān)的知識(shí)聯(lián)系起來解決要解決的問題。更為重要的是,經(jīng)過這次課程設(shè)計(jì),我學(xué)會(huì)了要有模塊化的思想進(jìn)行程序設(shè)計(jì),提高了對(duì)問題的分析和解決能力。增強(qiáng)了程序設(shè)計(jì)過程中對(duì)程序的調(diào)試能力,知道如何解決調(diào)試過程中遇到的問題,從中提高對(duì)問題分析的能力。</p><p>  總之,設(shè)計(jì)程序是一

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 眾賞文庫僅提供信息存儲(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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論