《車票管理系統(tǒng)課程設(shè)計(jì)報(bào)告.doc》由會員分享,可在線閱讀,更多相關(guān)《車票管理系統(tǒng)課程設(shè)計(jì)報(bào)告.doc(11頁珍藏版)》請?jiān)谘b配圖網(wǎng)上搜索。
1、軟件技術(shù)課程設(shè)計(jì)車票管理系統(tǒng)一 目的通過課程設(shè)計(jì),加深對C語言程序設(shè)計(jì)和數(shù)據(jù)結(jié)構(gòu)課程所學(xué)知識的理解,熟練掌握和鞏固C語言的基本知識和語法規(guī)范,包括:數(shù)據(jù)類型(整形、實(shí)型、字符型、指針、數(shù)組、結(jié)構(gòu)等);運(yùn)算類型(算術(shù)運(yùn)算、邏輯運(yùn)算、自增自減運(yùn)算、賦值運(yùn)算等);程序結(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)、存儲結(jié)構(gòu)以及相關(guān)運(yùn)算和應(yīng)用。學(xué)會編制結(jié)構(gòu)清晰、風(fēng)格良好、數(shù)據(jù)結(jié)構(gòu)適當(dāng)?shù)腃語言程序,從而具備利用計(jì)算機(jī)編程分析解決綜合性實(shí)際問題的初步能力二
2、需求分析1、首先本演示程序要實(shí)現(xiàn)錄入班次信息的功能,并且要用文件來保存這些信息,還可以不定時的增加班次數(shù)據(jù)。2、需要瀏覽班次信息是可以一次性輸出當(dāng)前的班次狀況,并且要從實(shí)際考慮,若當(dāng)前系統(tǒng)時間已經(jīng)超過了某班次的發(fā)車時間,則要顯示“此班已發(fā)出”的提示信息。3、此程序既為車票管理系統(tǒng),就要實(shí)現(xiàn)查詢路線、售票、退票等功能。當(dāng)使用查詢路線功能時,要分兩種情況:按班次號查詢和按終點(diǎn)站查詢。若使用售票功能,則只有在查詢出已定票人數(shù)小于額定載量且當(dāng)前系統(tǒng)時間小于發(fā)車時間時才能售票,并且要自動跟新已售票人數(shù)。退票要輸入退票的班次,當(dāng)本班車尚未出發(fā)時才能退票,也要自動更新已售票人次。4、演示程序以用戶和計(jì)算機(jī)的
3、對話方式執(zhí)行,即在計(jì)算機(jī)的屏幕上顯示“提示信息”下,用戶根據(jù)自己的意愿自行操作,每次測試完畢,新增加的班次信息要保存在data.txt文件中。三 概要設(shè)計(jì)1、本程序各個模塊的功能及調(diào)用關(guān)系:(1)主程序模塊main()函數(shù):此主程序的主要目的是用來調(diào)用讀取文件函數(shù)、功能菜單函數(shù)以及保存文件信息函數(shù)。(2)文件讀入與保存函數(shù)read()、save()以及功能菜單MainMenu()函數(shù):這三個函數(shù)的主要目的是為了讀取文件,保存文件和為用戶創(chuàng)造一個功能菜單以便于用戶的操作。(3)在MainMenu()函數(shù)中調(diào)用的各級功能函數(shù):這個模塊中有六個函數(shù),MainMenu()函數(shù)調(diào)用這六個函數(shù)來分別實(shí)現(xiàn)增
4、加班次、瀏覽班次信息、查找班次、售票、退票、退出的功能。 2、程序中出現(xiàn)的數(shù)據(jù)類型定義及含義:本程序采用鏈表存儲相關(guān)信息,定義如下typedef struct Node int num; /班次號 int sTimeH, sTimeM; /發(fā)車時間(小時sTimeH和分鐘sTimeM) int sumSeat, soldSeat; /總座位數(shù), 已訂票人數(shù) float lastTime; /行車時間 char begin20, end20; /起始站,終點(diǎn)站 struct Node * next; /指向下一個節(jié)點(diǎn)Node, * LinkedNode; 四 詳細(xì)設(shè)計(jì)讀文件開始主菜單getch(
5、)=?1增加2查看3查詢4售票5賣票結(jié)束ESC存儲用全局變量List保存鏈表的頭結(jié)點(diǎn)LinkedNode List;ShowHead()、ShowNode(Node * p);這兩個函數(shù)用于顯示鏈表信息: ShowHead()輸出航班、發(fā)車時間、站點(diǎn)等標(biāo)題信息; ShowNode()輸出鏈表中存儲的確切信息。Read()函數(shù)讀取文件信息并存入鏈表:定義一個指針*fp指向所要打開的文件,List = (LinkedNode)malloc(sizeof(Node);LinkedNode p = List; 為頭結(jié)點(diǎn)申請空間并用p指向頭結(jié)點(diǎn);fseek()函數(shù)來移動*fp指針;ftell()函數(shù)返回
6、指針;然后用fscanf()從文件中輸入信息。最后用fclose(fp)來關(guān)閉文件。Save()函數(shù)將鏈表存儲的信息存進(jìn)文件并釋放所占空間: 用fopen()函數(shù)打開fp指向的文件; 然后用fprintf()函數(shù)輸出鏈表信息并存到文件里; 最后用fcolse(fp)關(guān)閉文件。IsSetOff(Node * p)函數(shù)用于判斷班次是否已經(jīng)出發(fā):time_t t; time(&t);struct tm * timeinfo = localtime(&t)獲取系統(tǒng)時間,然后與班次出發(fā)時間比較并將結(jié)果用return()函數(shù)返回。 Add()函數(shù)是增加一個班次:LinkedNode p = List;定義
7、p指向頭結(jié)點(diǎn);然后用malloc()函數(shù)為結(jié)點(diǎn)申請空間;用scanf()函數(shù)輸入各種信息;ShowHead(); ShowNode(p); 輸出新增加的班次信息。Lookup()函數(shù)顯示各班次信息:if (IsSetOff(p) printf(nn此班已出發(fā));ShowNode(p);p = p-next; 依次顯示文件中的班次信息。SearchPath()函數(shù)查詢路線:int n; printf(請輸入要出售的車票班次:); scanf(%d, &n); 按班次號來售票;char ch20; printf(請輸入終點(diǎn)站:); scanf(%s, &ch);按終點(diǎn)站來查詢。SaleTicket
8、()、ReturnTicket()函數(shù)用來賣票退票:if (IsSetOff(p) printf(此班已出發(fā)!n); 此時班次出發(fā)時間超過系統(tǒng)時間;+p-soldSeat; printf(售票成功n);ShowHead();ShowNode(p);輸出賣票后的該班次信息。退票功能的實(shí)現(xiàn)與以上功能相似,+p-soldSeat改成-p-soldSeat表示退票后soldSeat數(shù)減少一個。Quit()函數(shù)退出:MainMenu()函數(shù)是主菜單,各個功能的選擇:switch(getch() 用一個switch函數(shù)來選擇一個功能;用getch()從鍵盤輸入一個數(shù)字來選擇功能。主函數(shù)void main(
9、)主函數(shù)來調(diào)用Read()、MainMenu()、Save()三個函數(shù);實(shí)現(xiàn)從文件讀取信息,打開主菜單,保存信息到文件中的功能。五 調(diào)試分析1、該程序的關(guān)鍵是用一個結(jié)構(gòu)體來存儲每個班次的各種信息,然后建立一個單鏈表存儲所有的班次。要注意的是正確的定義頭結(jié)點(diǎn)指針,還有保證每次循環(huán)都能正確的進(jìn)行下去。只有保證這些細(xì)節(jié)都正確,程序才能正常的運(yùn)行。2、在設(shè)計(jì)程序的時候要設(shè)計(jì)多個模塊,比如程序中的查詢、售票、退票、功能菜單等,最后用一個主函數(shù)來調(diào)用其他的函數(shù),我在調(diào)試時發(fā)現(xiàn)每次賣票后都不能正常的返回,經(jīng)檢查后才發(fā)現(xiàn)是因?yàn)榈袅艘痪鋚=p-next,所以在以后寫程序時都要認(rèn)真仔細(xì),這樣才不至于在調(diào)試程序的時
10、候出現(xiàn)問題,浪費(fèi)很多時間。3、在寫這個程序的時候,調(diào)試過程中發(fā)現(xiàn)了很多錯誤,這樣很不容易修改,所以最好循序漸進(jìn),認(rèn)真寫好每一個程序,檢查后再寫下一個,這樣更能保證整個程序的正確性,也便于隨時調(diào)整。4、在調(diào)試的過程中同樣出現(xiàn)文件寫入和讀出的問題,所以文件的格式必須熟練掌握,這樣才能正確的實(shí)現(xiàn)功能,達(dá)到目的。六 測試結(jié)果1、將程序在VC6中打開后點(diǎn)擊編譯、運(yùn)行后出現(xiàn)主界面如下圖:2、我們先查看已有的班次,選擇2,則出現(xiàn)下圖:3、按任意鍵返回主菜單,然后我們選擇增加一個班次,選擇1,根據(jù)提示分別輸入班次:5、發(fā)車時間:22:30、起始站:武漢、終點(diǎn)站:南京、行車時間3.5、額定載量:50則出現(xiàn)下圖:
11、此時按任意鍵返回主菜單,再選擇2查看班次,我們發(fā)現(xiàn)班次5已經(jīng)增加進(jìn)去了,如圖:4、按任意鍵返回主菜單選擇3查詢功能,則出現(xiàn)按班次號查詢和按終點(diǎn)站查詢,我們先選擇1并輸入3,則會出現(xiàn)班次3的信息如圖:然后我們選擇2繼續(xù)按終點(diǎn)站查詢,輸入南京,則會顯示如圖:5、按ESC返回主菜單選擇4售票,然后輸入要購買的班次號,若該班次已發(fā)出,則會顯示:此班已出發(fā)。否則顯示售票成功,并輸出該班次的信息:,6、現(xiàn)在我們按任意鍵返回主菜單并選擇5,實(shí)現(xiàn)退票功能,輸入要退票的班次,我們輸入5,則顯示如圖:此時我們發(fā)現(xiàn)已經(jīng)退票成功。7、若想退出,則按ESC,顯示如圖:七 用戶使用說明1、本程序可以在VC6的環(huán)境下運(yùn)行。
12、2、程序運(yùn)行后,會自動從文件讀取數(shù)據(jù),并出現(xiàn)功能菜單用戶要根據(jù)自己的意愿自己選擇所要執(zhí)行的功能,每次用戶選擇功能后都會有提示輸入信息,用戶只需根據(jù)提示輸入信息便可輕松使用各種功能。3、當(dāng)用戶使用完并退出后,新增加的班次信息會自動保存在data.txt八 課程設(shè)計(jì)總結(jié)通過本次的課程設(shè)計(jì),讓我又重新拿起了程序設(shè)計(jì)和數(shù)據(jù)結(jié)構(gòu)課本,好好的復(fù)習(xí)了一下以前學(xué)過的知識。對循環(huán)結(jié)構(gòu)、指針、結(jié)構(gòu)體,函數(shù)調(diào)用,switch語句, for循環(huán)語句等有了更為系統(tǒng)的了解,也學(xué)會了制作流程圖,明白了一個設(shè)計(jì)精良的程序要的不僅是它的正確輸出結(jié)果,還要有簡明可靠地思路,良好的穩(wěn)定性等。通過這次課程設(shè)計(jì),讓我能把相關(guān)的知識聯(lián)系起來解決要解決的問題。更為重要的是,經(jīng)過這次課程設(shè)計(jì),我學(xué)會了要有模塊化的思想進(jìn)行程序設(shè)計(jì),提高了對問題的分析和解決能力。增強(qiáng)了程序設(shè)計(jì)過程中對程序的調(diào)試能力,知道如何解決調(diào)試過程中遇到的問題,從中提高對問題分析的能力。總之,設(shè)計(jì)程序是一件很需要毅力的事,不僅讓我懂得了一個程序設(shè)計(jì)者基本的工作素質(zhì)要求,也讓我懂得今后無論做什么事情都需要決心、耐心、細(xì)心、專心、恒心、信心。11