


版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、妹朮即館九宇堆覽$吃Cc-Mvnp Cdlvgn. 4®卜戈Uniwn腳 * wH cwf TdfrrwrflnvnjeHQm課程設(shè)計報告課程設(shè)計名稱數(shù)據(jù)結(jié)構(gòu)課程設(shè)計專 業(yè) 計算機科學(xué)與技術(shù)班 級 學(xué) 號姓 名 指導(dǎo)教師 成 績 2012年 2 月 26 日數(shù)據(jù)結(jié)構(gòu)課程設(shè)計飛機票票訂票管理目錄目錄 ii第1章 軟件的需求分析 31 1 軟件達到的目的 31 2 軟件功能說明 31.2.1 功能分析說明圖 3第2章 軟件概要設(shè)計 42.1 軟件模塊的總體設(shè)計 42.2 軟件設(shè)計詳細內(nèi)容 42.2.1 采用的主要數(shù)據(jù)結(jié)構(gòu)類型 42.2.3 主要流程圖 4第3章 設(shè)計的詳細說明及關(guān)鍵代碼分
2、析 173.1 設(shè)計的詳細說明 173.2 關(guān)鍵代碼分析和說明 173.3 測試說明 . 18第4章 程序運行 1941 程序運行 . 19參考文獻 21總結(jié) 0第 1 章 軟件的需求分析11 軟件達到的目的通過此系統(tǒng)可以實現(xiàn)如下功能1)錄入:可以錄入航班情況(數(shù)據(jù)可以存儲在一個數(shù)據(jù)文件中,數(shù)據(jù)結(jié)構(gòu)、具體數(shù)據(jù)自 定)2)查詢:可以查詢某個航線的情況(如,輸入航班號,查詢起降時間,起飛抵達城市, 航班票價,票價折扣,確定航班是否滿倉) ;可以輸入起飛抵達城市,查詢飛機航班情況;3)訂票:(訂票情況可以存在一個數(shù)據(jù)文件中,結(jié)構(gòu)自己設(shè)定) 可以訂票,如果該航班已經(jīng)無票,可以提供相關(guān)可選擇航班;4)退
3、票: 可退票,退票后修改相關(guān)數(shù)據(jù)文件; 客戶資料有姓名,證件號,訂票數(shù)量及航班情況,訂單要有編號。5)修改航班信息:當(dāng)航班信息改變可以修改航班數(shù)據(jù)文件1 2 軟件功能說明1.2.1 功能分析說明圖該軟件功能分析說明圖如 1-1 所示:飛機 訂票 系統(tǒng)廣退出并、 保存圖1-1第 2章 軟件概要設(shè)計2.1 軟件模塊的總體設(shè)計編寫一個飛機訂票系統(tǒng)的程序, 使該系統(tǒng)能夠?qū)崿F(xiàn)對航班信息的錄入、 瀏覽、排 序、查詢以及訂票、退票的功能。根據(jù)題目要求,首先要制作一個主菜單顯示出 各個操作的提示可供用戶選擇, 進而一步步地深入操作。 根據(jù)主菜單的內(nèi)容再進 一步編制具體操作的函數(shù), 各個功能均用專門編制的函數(shù)來
4、完成。 這就是看到題 目后的最初的思路。2.2 軟件設(shè)計詳細內(nèi)容2.2.1 采用的主要數(shù)據(jù)結(jié)構(gòu)類型頭文件包含、全局變量定義和結(jié)構(gòu)體定義源代碼:#include<stdio.h>/ 標(biāo)準(zhǔn)輸入、輸出頭文件#include<string.h>/ 包含字符串函數(shù)處理頭文件#include<process.h> / 包含 access 函數(shù)的頭文件#define N 1000/ 定義最多的航班數(shù)#definePRINT“ %dtt%stt%st星期 %st%dn ” ,si.numsi.startsi. over,si. time,si. .count / 宏定義輸出
5、格式struct air/ 定義結(jié)構(gòu)體數(shù)組int num;/ 定義航班號char start20;/ 航班起始站char over20;/ 航班終點站char time10;/ 飛行時間int count;/ 機票數(shù)量sN;int i,m=O;char ii10;/定義全局變量,記錄下航班信息的數(shù)量/用來選擇是否繼續(xù)的變量w1=1w1=0Nn=1entern=2browsen=3n=4n=5n=6load(2) enter函數(shù)流程圖如圖2-2返回主目錄 menu ()結(jié)束圖2-2(3) in put函數(shù)流程圖如圖2-3,開始定義i輸出:請輸入航班代號/TX輸入ID/T輸出:請輸入起飛地點7T/
6、 輸入 BePlaceT輸出:請輸入降落地點T/ 輸入 EnPlace/T輸出:請輸入起飛時間T輸入date輸出:請輸入航班最大載客人數(shù)輸入max圖2-3(4) browse函數(shù)流程圖如圖2-4圖2-4w1=1w1=0(7) search_time函數(shù)流程圖如圖2-7輸出對應(yīng)航班信息輸入出發(fā)時間i=0(8) serch_end函數(shù)流程圖如圖2-8i=0N結(jié)束(10)book函數(shù)流程圖1開始如圖2-10疋義i=search()Ni!=-1YNY結(jié)束輸出:該趟航班輸出:訂票成功清屏(11)back函數(shù)流程圖如圖2-11tii. num >=tii.max輸出:該趟航班票已售完輸出:歡迎進入售
7、票窗口圖 2-10返回返主目錄目錄e nu()定義i,k=-1tii. nu m+開始i=0Ni<ni+YNsD=tiiDYk=iNk=-1Y結(jié)束輸出:歡迎進入退票窗口輸入航班代號ID圖 2-11(12) save函數(shù)流程圖如圖2-12輸出:NO exist!輸出:退票成功調(diào)用 printf_one(k)清屏返回主目錄 menu()定義結(jié)構(gòu)體stii. num-開始如圖2313第3章 設(shè)計的詳細說明及關(guān)鍵代碼分析3.1設(shè)計的詳細說明程序中各個模塊之間的調(diào)用方式主要是通過文件的包含和函數(shù)的調(diào)用實現(xiàn)的,用文件的形式把各個函數(shù)分開,再用頭文件把它們包含進來,使用主函數(shù)進行調(diào)用。3.2關(guān)鍵代碼分
8、析和說明1)定義系統(tǒng)初始化函數(shù)模塊功能:設(shè)立一個 初始化函數(shù)來得到航班 信息。具體設(shè)計是第一次 運行程序時自動生成保 存航班信息的文件,并輸 入初始航班信息,待第二 次開始就可以直接讀取 該文件獲得已有的航班 信息并可直接使用。運用 了 access函數(shù)判斷文件 是否存在。該函數(shù)源代碼 為:void chushihua()/初始化函數(shù)if(access("ha ngba n.dat",O)build();elseread();2) 定義建立新數(shù)據(jù)文件的函數(shù)系統(tǒng)初始化后, 沒有尋找到數(shù)據(jù)文件, 則進行新建數(shù)據(jù)文件, 此函數(shù)的作用 就是進行新建文件數(shù)據(jù)的錄入。運用到了文件指針的
9、定義 FILE *fp ,文件的打 開 fopen 和關(guān)閉 fclose 、成塊讀寫函數(shù)中的 fwrite ;運用 for 循環(huán)進行各組數(shù) 據(jù)的輸入,用m+己錄下輸入的航班數(shù)量,并運用if語句判斷是否輸入下一條 航班信息,若不繼續(xù)則返回主界面。3) 定義讀取文件內(nèi)航班信息的函數(shù)系統(tǒng)初始化之后, 若原始數(shù)據(jù)文件存在, 則進行文件內(nèi)航班信息的讀取, 以 供接下來程序中的各個函數(shù)來使用。在該函數(shù)中同樣運用到了文件指針FILE*fp 、文件的打開 fopen 和關(guān)閉 fclose 、成塊讀寫函數(shù)中的 fread 、文件結(jié)束檢 測函數(shù)feof同時配合while語句控制文件的讀取;m+己錄下讀取到的航班數(shù)
10、量 等。4) 定義保存函數(shù)因為在飛機訂票系統(tǒng)中涉及到飛機的訂票和退票業(yè)務(wù), 還有按航班號的排序 功能,所以我就定義了這個保存函數(shù)來保存下每次運行系統(tǒng)后對整個訂票系統(tǒng)涉 及到的資料的修改。 為了簡便程序, 我就準(zhǔn)備將此函數(shù)放在整個系統(tǒng)得推出選項 中,這樣就只在每次退出系統(tǒng)的時候進行一次保存, 將此次對文件修改的所有新 信息都一次保存下來。 這樣就實現(xiàn)了整個系統(tǒng)運行時進行一次讀取, 推出時一次 保存的設(shè)計, 大大簡便了文件的調(diào)用和讀取。 保存函數(shù)運用到的知識點與讀取函 數(shù)大致相同。此函數(shù)的源代碼為:有關(guān)文件讀取、寫入和保存的函數(shù)定義完了就開始設(shè)計與題目要求直接相關(guān)的函數(shù)了。5) 定義訂票業(yè)務(wù)函數(shù)在
11、這個函數(shù)中首先調(diào)用了 search 函數(shù)查找需要訂票的航班。 運用 if 語句實 現(xiàn)訂票時的多種情況: 訂票數(shù)輸入不正確、 飛機票數(shù)不足等情況。 訂票成功時運 用 si.count=si.count-n; 將已被訂的機票數(shù)減去,以顯示新的即時航班信6) 定義退票業(yè)務(wù)函數(shù): 與訂票函數(shù)相類似,只做稍稍修改就行退票成功是用 si.count=si.count+n; 將航班的剩余票數(shù)加上去以顯示即時航班信息。7) 定義主函數(shù) 主函數(shù)主要就是提供系統(tǒng)的主菜單界面供用戶選擇。運行主函數(shù)時首先調(diào)用 chushihua 函數(shù)判定數(shù)據(jù)文件是否存在、 是否要進行初始航班信息輸入; 若已存在則進入主界面菜單供 用
12、戶選擇,運用 swich語句對用戶的不同選擇來調(diào)用各功能的函數(shù)。并用dowhile語句循環(huán)實現(xiàn)能夠讓用戶進行多次的選擇。3.3 測試說明 調(diào)試過程中曾經(jīng)遇到過一些問題,但是也不多,遇到過:訂票或退票的時候不能將剩 余的票數(shù)加上和減去。 后來經(jīng)過詳細的檢查與對照課本知識點找出了相應(yīng)的錯誤點,經(jīng)過修改加入票數(shù)加減語句,再經(jīng)過與保存函數(shù)的配合后實現(xiàn)了題目要求的功能。調(diào)試成功。第 4 章 程序運行4.1 程序運行進入程序菜單界面 如圖 4-1圖 4-1查詢航班界面 如圖 4-2圖 4-2訂票過程界面 如圖 4-3圖 4-3飛機售票操作界面 如圖 4-4圖 4-4退票系統(tǒng)界面 如圖 4-5圖 4-參考文
13、獻1. 數(shù)據(jù)結(jié)構(gòu) C 語言 嚴蔚敏 清華大學(xué)出版社2. c 語言程序設(shè)計 譚浩強 清華大學(xué)出版社3. 數(shù)據(jù)結(jié)構(gòu) 高教出版社4. 數(shù)據(jù)結(jié)構(gòu)習(xí)題 李春保 清華大學(xué)出版社5. 數(shù)據(jù)結(jié)構(gòu)習(xí)題 嚴蔚敏 清華大學(xué)出版社6. c 語言與數(shù)據(jù)結(jié)構(gòu) 王立柱 清華大學(xué)出版社7. 數(shù)據(jù)結(jié)構(gòu)( C 語言篇)習(xí)題與解析李春葆 清華大學(xué)出版社總結(jié)經(jīng)過此次的課程設(shè)計,可以很明確的了解到自己哪些知識點掌握的比較好, 哪些知識點運用的還不夠熟練。 通過此次課程設(shè)計也學(xué)會綜合運用理論知識來分 析和解決實際問題的能力、 養(yǎng)成嚴謹?shù)目茖W(xué)態(tài)度和良好的程序設(shè)計習(xí)慣, 實現(xiàn)由 知識向智能的初步轉(zhuǎn)化; 學(xué)會遵循軟件開發(fā)過程的基本規(guī)范, 運用
14、結(jié)構(gòu)化程序設(shè) 計的方法,按照課程設(shè)計的題目要求,并與同組成員共同完成設(shè)計、編寫、調(diào)試 和測試應(yīng)用程序及編寫文檔的任務(wù)。學(xué)生:指導(dǎo)教師簽字:年月日源代碼#include <stdio.h> #include <string.h> #include <stdlib.h> #define N 1000 typedef struct planechar ID10; /* 航班代號 */char BePlace10;/*飛機起飛地點 */char EnPlace10;/*飛機降落終點 */char data15;/*飛機起飛時間*/int max;/* 飛機最大乘客人
15、數(shù) */int price;/* 飛機票價 */int num;/* 飛機已售票數(shù) */PLANE;PLANE tiN;int n;/* 當(dāng)前的航班數(shù)目 */void menu();void menu1();void input(int i)printf(" 請輸入航班代號: n");scanf("%s",tii.ID);printf(" 請輸入起飛地點: n");scanf("%s",tii.BePlace);printf(" 請輸入降落地點: n");scanf("%s"
16、,tii.EnPlace);printf(" 請輸入起飛時間: n");scanf("%s",tii.data);printf(" 請輸入航班的最大載客人數(shù): n"); scanf("%d",&tii.max);printf(" 請輸入航班的票價: n");scanf("%d",&tii.price);tii.num=0;void enter()int i;system( "cls" );printf(" 請輸入航班的數(shù)目 (0-
17、%d)?:",N);scanf("%d",&n);/* 要輸入的記錄個數(shù) */printf("n 請輸入數(shù)據(jù) nn");for(i=0;i<n;i+)printf("n 請輸入第 %d 航班記錄 .n",i+1);input(i);/* 調(diào)用輸入函數(shù) */ getchar(); menu();void printf_one(int i)/* 顯示一個記錄的函數(shù) */printf("%11s %6s %10s %6s %6d %6d %6d",tii.ID,tii.BePlace,tii.En
18、Place,tii. data,tii.price,tii.max,tii.num);void browse()int i;system( "cls" );puts("n");printf("nt 航班代號 起飛地點 降落地點 起飛時間 票價 最大乘客 已售票數(shù) n"); for(i=0;i<n;i+)printf_one(i);printf("n");getchar();getchar();menu();void order()/* 排序模塊 (按平均成績 )*/int i,j;struct plane s
19、;system( "cls" );for(i=0;i<n;i+) /* 冒泡法排序 */for(j=i+1;j<n;j+)if(strcmp(tii.data,tij.data)>0) s=tii;tii=tij;tij=s;browse();void search_time()int i,m=0; struct plane s; system( "cls" ); printf("nnEnter the time:"); scanf("%s",s.data); puts("nprintf
20、("nt 航班代號 起飛地點 降落地點 起飛時間 for(i=0;i<n;i+)/* 輸入出發(fā)的時間 */");票價 最大乘客已售票數(shù) n");if(strcmp(s.data,tii.data)=0)m+;if(m!=0)&&(m%10=0) /* 目的是分屏顯示*/ puts("n- getchar(); getchar(); menu1();printf("nnPress any key to contiune getchar();puts("nn");printf_one(i);printf(&
21、quot;n");/* 調(diào)用顯示一個記錄的函數(shù) */ void serch_end()int i,m=0; struct plane s; system( "cls" ); printf("nnEnter the end Place:"); scanf("%s",s.EnPlace); puts("n. . .");");/* 按任意健 */printf("nt 航班代號 起飛地點 降落地點 起飛時間 for(i=0;i<n;i+) if(strcmp(tii.EnPlace,s
22、.EnPlace)=0) /* 輸入要到達的地方 */ ");票價 最大乘客已售票數(shù) n");m+;if(m!=0)&&(m%10=0) printf("nnPress any key to contiune . . ."); getchar();puts("nn");printf_one(i);printf("n");/* 調(diào)用顯示一個記錄的函數(shù) */* 目的是分屏顯示 */puts("n");getchar();/* 按任意健 */getchar();menu1();void
23、 menu1()int n,w1;dosystem( "cls" );/* 清屏 */puts("tttt 飛機售票操作 !nn");puts("tt*MENU*nn");puts("tttt1. 按照時間排序 "); puts("tttt2. 按照時間查找航班 "); puts("tttt3. 按照地點查找航班 ");puts("tttt4. 返回主菜單 ");puts("nntt*n");/* 對選擇的數(shù)字作判斷 */printf(
24、"Choice your number(1-4): bb"); scanf("%d",&n);if(n<1|n>4)w1=1;printf("your choice is not between 1 and 4,Please input again:"); getchar();getchar();else w1=0; while(w1=1);/* 選擇功能 */switch(n)case 1:order();break;case 2:search_time();break;case 3:serch_end();br
25、eak;case 4:menu();break;int search()int i,k;struct plane s; k=-1;system( "cls" );printf("nn 請輸入要訂票的起飛地點 scanf("%s",s.BePlace);printf("nn 請輸入要訂票的降落地點scanf("%s",s.EnPlace);/* 查找模塊 */:");/* 輸入要到達的地方 */:");:");scanf("%s",s.data);/* 輸入出發(fā)的時間
26、 */for(i=0;i<n;i+)/* 查找要修改的數(shù)據(jù) */printf("nn 請輸入要訂票的起飛時間if(strcmp(s.BePlace,tii.BePlace)=0&&strcmp(s.EnPlace,tii.EnPlace)=0&&strcmp(s.data,tii.data)=0)k=i; /* 找到要修改的記錄 */printf_one(k);break; /* 調(diào)用顯示一個記錄的函數(shù) */if(k=-1)printf("nnNO exist!");return -1;elsereturn k;void bo
27、ok()int i;system( "cls" );printf(" 歡迎進入售票窗口 !n"); i=search();if(i!=-1)if(tii.num>=tii.max)printf("n 該趟航班票已售完! ");elsetii.num+;printf("n 訂票成功 !n");elseprintf(" 該航班不存在 !n");getchar();getchar(); /* 按任意健 */ menu();void back()int i,k=-1;struct plane s;
28、system( "cls" );printf(" 歡迎進入退票窗口 !n");printf("nn 輸入航班代號 :");scanf("%s",s.ID); /* 輸入要到達的地方 */for(i=0;i<n;i+)if(strcmp(s.ID,tii.ID)=0)k=i;printf_one(k);break;if(k=-1)/* 查找要修改的數(shù)據(jù) */* 找到要修改的記錄 */* 調(diào)用顯示一個記錄的函數(shù) */printf("nnNO exist!");elsetii.num-;/* 按
29、任意健 */ /* 按任意健 */printf("n 退票成功 !n"); getchar(); getchar();menu();void save()int w=1;FILE *fp; int i;system( "cls" );我的文檔 桌面 ticket.txt","wt")=NULL)/* 以輸出打開方式 ,在此前的記錄被覆蓋 */printf("nCannot open filen");return ;for(i=0;i<n;i+)if(fwrite(&tii,sizeof(st
30、ruct plane),1,fp)!=1)printf("file write errorn");w=0;if(w=1)printf("file save ok!n");fclose(fp);getchar();getchar();menu();void load()FILE *fp;int i,w;w=1;system( "cls" );我的文檔 桌面 ticket.txt","rt")=NULL)printf("nCan not open filen");w=0;return;n=0;for(i=0;!feof(fp);i+)fread(&tii,sizeof(struct plane),1,fp); n+
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 租庫協(xié)議合同
- 合同編號更換協(xié)議
- 購買地皮合同協(xié)議
- 房租拖欠合同協(xié)議
- 加購合同補充協(xié)議
- 合同終止如何補充協(xié)議
- 開發(fā)協(xié)議采購合同
- 合同終止協(xié)議理由
- 農(nóng)村建房出售協(xié)議合同
- 合同增加項協(xié)議
- 2024年西安鐵路職業(yè)技術(shù)學(xué)院單招職業(yè)適應(yīng)性測試題庫必考題
- 消化內(nèi)鏡進修總結(jié)匯報
- 山東省臨沂市河?xùn)|區(qū)2023-2024學(xué)年七年級下學(xué)期期中測試歷史試題
- MOOC 大地測量學(xué)基礎(chǔ)-南京信息工程大學(xué) 中國大學(xué)慕課答案
- 運輸安保工作方案
- 《早期教育概論》課程標(biāo)準(zhǔn)
- 小學(xué)科學(xué)冀人版六年級下冊全冊同步練習(xí)含答案
- 生物地球化學(xué)性疾病試題
- 休閑與旅游農(nóng)業(yè)課件
- 產(chǎn)品驗證報告
- 電影項目融資計劃書
評論
0/150
提交評論