軟件課程設(shè)計(jì)報(bào)告(飛機(jī)票售票系統(tǒng))_第1頁
軟件課程設(shè)計(jì)報(bào)告(飛機(jī)票售票系統(tǒng))_第2頁
軟件課程設(shè)計(jì)報(bào)告(飛機(jī)票售票系統(tǒng))_第3頁
軟件課程設(shè)計(jì)報(bào)告(飛機(jī)票售票系統(tǒng))_第4頁
軟件課程設(shè)計(jì)報(bào)告(飛機(jī)票售票系統(tǒng))_第5頁
已閱讀5頁,還剩23頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、軟件課程設(shè)計(jì)報(bào)告 1軟件設(shè)計(jì)1設(shè)計(jì)題目1設(shè)計(jì)要求1設(shè)計(jì)思想1流程圖22軟件測試7航班查詢模塊測試7訂票模塊測試11退票模塊測試13管理員更改航班信息模塊測試143開發(fā)體會15附錄:源代碼清單171軟件設(shè)計(jì)飛機(jī)票銷售系統(tǒng)。 運(yùn)用C語言基本知識,結(jié)合相關(guān)算法思想和數(shù)據(jù)結(jié)構(gòu),編寫一個(gè)單微機(jī)系統(tǒng)下運(yùn)行的飛機(jī)票銷售系統(tǒng)。飛機(jī)票銷售系統(tǒng)應(yīng)實(shí)現(xiàn)航班信息查詢、機(jī)票購買、機(jī)票信息查詢、機(jī)票退購等功能。想程序包括管理員創(chuàng)建模塊,輸出模塊,保存模塊,讀取模塊,查詢模塊,訂票模塊,退票模塊,菜單模塊,以及初始化引入指針等9個(gè)模塊。定義了一個(gè)結(jié)構(gòu)體是儲存航班信息的,建立的分別是航班信息文件plane和Num。管理員創(chuàng)建

2、模塊是void creat(),輸出模塊由void print()實(shí)現(xiàn),保存模塊由void save()實(shí)現(xiàn),讀取模塊是int read,查詢模塊是PLANES *search(),訂票信息是int book_tickets(),退票是int bounce。其中訂票和退票都多次用到了查詢模塊。而輸出、保存和讀取都是公用模塊。這樣子設(shè)計(jì)更能夠方便地調(diào)用減少程序的長度。主函數(shù)與printfmenu函數(shù)流程圖主函數(shù)很短,直接調(diào)用printfmenu.這樣子功能不受限于主函數(shù),跟有利于模塊化.Creat是管理員輸入航班函數(shù):search ()為航班查找函數(shù),后面的訂票和退票都用到了它:訂購機(jī)票函數(shù)in

3、t book_tickets()流程圖退票函數(shù)int bounce()流程圖2軟件測試運(yùn)行程序,首先進(jìn)入主菜單界面。選擇1,進(jìn)入航班信息查詢模塊。顯示子菜單界面選擇1,按航班號查詢航班信息。輸入航班號“1111”。查找到相應(yīng)航班信息如下:若在子菜單中選擇2,按目的地查詢航班信息,輸入目的地“beijing”。查找到相應(yīng)航班信息如下:若在子菜單中選擇3,按飛行路線查找航班信息。輸入起點(diǎn)站“wuhan”,輸入終點(diǎn)站”beijing”。查找到相應(yīng)航班信息如下:在主菜單中選擇2,進(jìn)行機(jī)票購買。顯示購票界面。通過查詢來買滿足自己要求的票:輸入目的地beijing,確定后會詢問是否輸錯(cuò)重新輸入:然后選擇機(jī)

4、票數(shù)量,確定:2.3退票模塊測試在主菜單中選擇3,進(jìn)入退票模塊。選擇要退的票數(shù):屏幕上顯示“退票成功”字樣,則表示旅客已成功退票。管理員輸入航班信息在主菜單選擇4,進(jìn)入管理員輸入航班信息.首先輸入密碼:然后管理員輸入航班數(shù)量,信息等:最后保存這樣就輸入了航班信息,可以于航班查詢中查閱以及訂票.3開發(fā)體會 在開發(fā)飛機(jī)票信息管理系統(tǒng)的過程中,我遇到了許許多多的挫折,但也因此進(jìn)行了反反復(fù)復(fù)的思考,從中得到了不少體會。 最先我是直接用的四個(gè)模塊:查詢航班,訂票,退票以及界面模塊。可是這樣子寫發(fā)現(xiàn)每一個(gè)模塊中都要重復(fù)利用到輸入輸出等大量重復(fù)語句,真正區(qū)分這幾個(gè)模塊的只有switch選擇。于是我干脆把輸入

5、輸出讀取這幾個(gè)提出來作為單獨(dú)的模塊函數(shù),而把選擇如何查詢航班(比如按航班號查詢或者按目的地查詢)的方法直接整合在一個(gè)函數(shù)中。這樣子程序變短了很多;再者在編寫購票函數(shù)時(shí),先開始還在重新寫查詢函數(shù)。后來發(fā)現(xiàn)整個(gè)查詢函數(shù)實(shí)際上可以直接調(diào)用過來,因?yàn)楹椭翱紤]的四個(gè)模塊不同,我這個(gè)是把所有的搜索方式都寫在一個(gè)search函數(shù)里,所以調(diào)用更方便更全面了(所有的查找航班的方式全都可以用于購票的索引中)。然后我覺得編程最需要的就是細(xì)致。粗心大意地不僅不會編譯通過無法實(shí)現(xiàn)功能,而且耗時(shí)耗力不討好;更為繁瑣的是,有些錯(cuò)誤并不是語法錯(cuò)誤,程序無法識別,但是實(shí)際運(yùn)行時(shí)程序就會崩潰。比如我在程序中定義了一個(gè)全局指針,

6、但是卻不知道引入的方法就直接用了,程序編譯器通過了但是一旦用到它就會失去響應(yīng)。后來我的表哥告訴我之后我才恍然大悟。另外一些細(xì)節(jié)地方,比如變量的定義必須放在最前面、循環(huán)時(shí)事<還是<=等,這些都是需要注意的最基礎(chǔ)東西,但是常常會被忘記或說忽略。這種細(xì)致的習(xí)慣是一定要養(yǎng)成的。 4.源代碼清單 #include<stdio.h> #include<string.h> #include<stdlib.h> typedef struct flightPLANES /定義航班結(jié)構(gòu)體數(shù)組int num; /航班號char start20; /起始站char ov

7、er20; /終點(diǎn)站char time10; /時(shí)間按int count; /機(jī)票數(shù)struct flightPLANES *next; PLANES; /這個(gè)貌似必須用大寫字母,不然會出錯(cuò).#define PRINT "%3d%17s%12s%10s%9d |n",p->next->num,p->next->start,p->next->over,p->next->time,p->next->count /定義輸出格式void printfmenu(); /菜單int read(); /讀取航班信息void sa

8、ve(); /保存航班信息 void print(); /輸出航班信息PLANES *search(); /查找航班信息int book_tickets(); /訂票信息int bounce(); /退票信息PLANES *h=NULL; /建立全局變量,存鏈表頭指針int m=0; /航班數(shù)量void main()printfmenu(); /主函數(shù)結(jié)束void initlist(PLANES *h) *h=(PLANES *)malloc(sizeof(PLANES);(*h)->next=NULL;void save()/保存模塊程序 PLANES *p=NULL;FILE *fp

9、,*fp1;/定義文件指針p=h;if(fp=fopen("Plane.dat","wb")=NULL)/打開文件并判斷是否出錯(cuò) printf(" 創(chuàng)建文件失敗!nnn");/打印出錯(cuò)提示fflush(stdin);getchar();return;if(fp1=fopen("Num.dat","wb")=NULL)/打開文件并判斷是否出錯(cuò) printf(" 創(chuàng)建文件失敗!nnn");/打印出錯(cuò)提示fflush(stdin);getchar();return;while(p-

10、>next!=NULL)if(fwrite(p->next,sizeof(PLANES),1,fp)=0)/向文件寫入數(shù)據(jù),并判斷是否出錯(cuò)printf(" 向文件輸入數(shù)據(jù)失敗!nnn");break;else p=p->next;fprintf(fp1,"%d",m);fclose(fp);/關(guān)閉文件fclose(fp1);/關(guān)閉文件int read()/從文件讀取信息模塊 FILE *fp,*fp1;/定義文件指針PLANES *p=NULL;int i;initlist(&h);p=h;if(fp=fopen("P

11、lane.dat","rb")=NULL)/打開文件,并判斷是否出錯(cuò)printf(" 出錯(cuò),請檢查信息文件是否存在,按任意鍵后回車返回住菜單nnn");/打印出錯(cuò)提示fflush(stdin);getchar();system("cls");return 0;if(fp1=fopen("Num.dat","rb")=NULL)/打開文件并判斷是否出錯(cuò) printf(" 創(chuàng)建文件失敗!nnn");/打印出錯(cuò)提示fflush(stdin);getchar();syste

12、m("cls");return 0;fscanf(fp1,"%d",&m);fclose(fp1);/關(guān)閉文件printf("n 總共%d個(gè)航班信息n",m);for(i=0;i<m;i+)p->next=(PLANES *)malloc(sizeof(PLANES); p->next->next=NULL;fread(p->next,sizeof(PLANES),1,fp);/從文件中讀取信息p=p->next;fclose(fp);/關(guān)閉文件return 1; void print()/

13、打印模塊PLANES *p=NULL;if(read()=0)return;/調(diào)用讀取文件函數(shù),并判斷是否文件存在。p=h;printf("n"); printf("航班號 起始站 終點(diǎn)站 時(shí)間 機(jī)票數(shù) n"); printf("n"); while(p->next!=NULL)printf(PRINT);/打印信息p=p->next;printf(""); printf("nnnnnn請按任意鍵后回車結(jié)束返回上層菜單:n");fflush(stdin);getchar();syst

14、em("cls");PLANES *search()/查詢模塊PLANES *p=NULL;PLANES *x=NULL; /用于記錄查詢到的記錄char name120;char name220;char ii10;int n,no;int flag=0;if(read()=0) /調(diào)用讀取文件函數(shù),并判斷是否文件存在。return 0;p=h;doprintf(" 請選擇查找方式:n"); printf("-n");printf("| 1.按航班號查找 |n" "| 2.按終點(diǎn)站查找 |n"

15、 "| 3.按航線查找 |n" "| 0.返回 |n" "| 請?jiān)?-3中選擇: |n" "| 按其他鍵后回車返回主菜單: |nn");fflush(stdin);scanf("%d",&n);/讀取查找方式if(n=0)break;switch(n)case 1:printf(" 請輸入航班號:n");fflush(stdin);scanf("%d",&no);/航班號break;case 2:printf(" 請輸入終點(diǎn)站名稱

16、:n");fflush(stdin);scanf("%10s",name2);/讀取終點(diǎn)站break;case 3:printf(" 請輸入起始站名稱:n");fflush(stdin);scanf("%10s",name1);/讀取起始站printf(" 請輸入終點(diǎn)站名稱:n");fflush(stdin);scanf("%10s",name2);/終點(diǎn)站break;default: printf(" 請選擇有效查詢方式!nnn");while(p->nex

17、t!=NULL) if(strcmp(p->next->start,name1)=0|strcmp(p->next->over,name2)=0) /按終點(diǎn)站起始站判斷輸出條件printf(" n查找航班信息成功!nnn");printf("航班號 起始站 終點(diǎn)站 時(shí)間 機(jī)票數(shù)n");printf(PRINT);/打印信息x=p->next;flag=1;break;if(p->next->num=no)/按航班號判斷輸出條件 printf(" n查找航班信息成功!nnn");printf(&

18、quot;航班號 起始站 終點(diǎn)站 時(shí)間 機(jī)票數(shù)n");printf(PRINT);/打印信息x=p->next;flag=1;break; p=p->next;if(!flag)printf("查找失敗!:nnnnn");printf ( "nnn"" 是否重新查找?n"" 請鍵入yes或non"" 后回車鍵結(jié)束 n");no=0;/將航班號賦值為0p=h;flag=0;fflush(stdin);scanf("%10s",ii);system(&quo

19、t;cls");while(strcmp(ii,"yes")=0);/判斷結(jié)束system("cls");return(x); int book_tickets()/訂票模塊int n;char a10;PLANES *x=NULL; PLANES *p=NULL;doprintf(" 查找要訂票的航班:n");x = search(); /調(diào)用查詢模塊if(x!=NULL)printf(" 請輸入您要訂的機(jī)票數(shù)以回車鍵結(jié)束:n");fflush(stdin);scanf("%d",&

20、amp;n); /讀取所訂機(jī)票數(shù)else return (0);if(n<0)printf(" 請輸入有效的機(jī)票數(shù)!nnnnnn");/判斷機(jī)票數(shù)是否出錯(cuò)break;if(x->count!=0&&x->count>=n)/判斷是否出錯(cuò)x->count=x->count-n;save();/調(diào)用保存函數(shù)printf(" 訂票成功!nn按任意鍵返回nn");getch();system("cls");break;if(x->count<n)/判斷是否出錯(cuò)printf(&qu

21、ot; 可訂機(jī)票數(shù)不足,請輸入有效的機(jī)票數(shù):nnnnnn");break; printf(" 是否繼續(xù)? 請輸入yes或no以回車鍵結(jié)束:nnnnnn");/判斷是否繼續(xù)訂票fflush(stdin);scanf("%10s",a);while(!strcmp(a,"yes");/判斷結(jié)束return(1);int bounce()/退票模塊int n;char a10;PLANES *p=NULL;PLANES *x=NULL;do printf(" 查找要退票的航班n");x= search();/調(diào)

22、用查詢模塊if(x!=NULL)printf(" 請輸入您要退的機(jī)票數(shù)目:n");fflush(stdin);scanf("%d",&n);/輸入所退票數(shù)else return (0);while(n<0) /判斷票數(shù)是否有效printf(" 請輸入有效的機(jī)票數(shù)!nnnnnn");fflush(stdin);scanf("%d",&n);x->count= x->count+n;save(); /調(diào)用保存模塊printf(" 退票成功!nnnnn");printf(" 是否繼續(xù)? 請鍵入yes或no以回車鍵結(jié)束:nnn");/判斷是否繼續(xù)退票fflush(stdin);scanf("%10s",a);while(!strcmp(a,"yes");/判斷并跳出循環(huán)return (1);fflush(stdin);getchar();void printfmenu()int j;doprintf("

溫馨提示

  • 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論