第一篇:C語言課程設計——飛機訂票系統源代碼
#include //包含access函數的頭文件 #define N 9999 //定義最多的航班數 #define PRINT “%dtt%stt%stt星期%stt%dn ”,s[i].num,s[i].start,s[i].over,s[i].time,s[i].count //宏定義輸出格式 struct air //定義結構體數組 { int num; //定義航班號 char start[20];//航班起始站 char over[20];//終點站 char time[10];//飛行時間 int count; //機票數量 }s[N]; int i,m=0; //定義全局變量 char ii[10]; void add();//函數聲明增加航班信息函數 void print(); //顯示航班信息 void search();//查找航班信息 void dingpiao();//訂票業務 void tuipiao();//退票 void read();//讀取文件 void save();//保存文件 void output();//輸出格式 void paixu();//航班排序 void chushihua();//系統初始化 void build();//建立數據文件 void paixu1();//按航班號從小到大排序 void paixu2();//從大到小 void main()//主函數 { int j; chushihua();//系統初始化判斷是否存在原始數據文件 printf(“ 歡迎使用飛機訂票系統n”);//打印出系統主界面 do { printf(“================================== ”); printf(“1.增加航班信息n” “t2.瀏覽航班信息n” “tt3.查找航班信息(按航班號)tt╮(╯_╰)╭n” “ttt4.航班排序(按航班號)n” “tttt5.訂票業務n” “to(︶︿︶)ottt6.退票業務n” “tttttt0.退出n”);printf(“================================== ”); printf(“請在0-6中選擇以回車鍵結束: ”);scanf(“%d”,&j);switch(j){ case 1: add();//調用增加航班函數 break; case 2:print();//調用顯示模塊 break; case 3:search();//調用查找模塊 break; case 4:paixu();//調用排序函數 break; case 5:dingpiao();//調用訂票模塊 break; case 6:tuipiao();//調用退票模塊 break; case 0: //退出系統 save(); printf(“謝謝使用,再見!”); break;} }while(j!=0);//判斷是否調用其他函數 } void chushihua()//定義系統初始化函數 { if(access(“hangban.dat”,0)){ build();} else read();} void build()//定義建立數據文件函數 { FILE *fp;//定義文件指針 if((fp=fopen(“hangban.dat”,“wb”))==NULL)//打開文件并判定是否出錯 { printf(“創建文件失敗!”);//打印出錯提示 getchar(); return;} printf(“請依次輸入航班信息(以回車鍵結束):n”); //打印提示信息 printf(“------------n”);for(i=0;i printf(“請輸入航班號: ”); scanf(“%d”,&s[i].num);//輸入航班號 printf(“請輸入起始站: ”); scanf(“%s”,s[i].start);//輸入起始站 printf(“請輸入終點站: ”); scanf(“%s”,s[i].over);//輸入終點站 printf(“請輸入時間(星期幾): ”); scanf(“%s”,s[i].time);//輸入時間 printf(“請輸入機票數: ”); scanf(“%d”,&s[i].count);//輸入機票數 fwrite(&s[i],sizeof(struct air),1,fp); m++; printf(“添加完畢,是否繼續添加?請鍵入y或n以回車鍵結束:”); scanf(“%s”,ii); if(strcmp(ii,“y”)!=0) //判斷是否繼續添加航班信息 { fclose(fp); //關閉文件 return; } } } void read() //定義讀取文件函數 { FILE *fp;if((fp=fopen(“hangban.dat”,“r”))==NULL){ printf(“創建文件失敗!”); getchar(); return;} i=0;while(!feof(fp)){ fread(&s[i],sizeof(struct air),1,fp);//逐塊讀取數據 i++; m++;//計算存在航班數 } m--;fclose(fp);} void save()//定義保存函數 { FILE *fp;if((fp=fopen(“hangban.dat”,“wb”))==NULL) { printf(“創建文件失敗!”); getchar(); return;} for(i=0;i //逐塊保存數據 fwrite(&s[i],sizeof(struct air),1,fp);fclose(fp);} void add()//定義增加航班信息函數 { do{ printf(“請依次輸入您要增加的航班信息(以回車鍵結束): n”); //打印提示信息 printf(“------------n”); printf(“請輸入航班號: ”); scanf(“%d”,&s[m].num);//讀取航班號 printf(“請輸入起始站: ”); scanf(“%s”,s[m].start);//讀取起始站 printf(“請輸入終點站: ”); scanf(“%s”,s[m].over);//讀取終點站 printf(“請輸入時間: ”); scanf(“%s”,s[m].time);//讀取時間 printf(“請輸入機票數: ”); scanf(“%d”,&s[m].count);//讀取機票數 m++; printf(“添加完畢,是否繼續添加?請鍵入y或n以回車鍵結束:”); scanf(“%s”,ii);}while(!strcmp(ii,“y”));//判斷是否繼續添加 } void output()//定義輸出格式函數 { printf(“航班號tt起始站tt終點站tt時間tt機票數n”);//信息標題 for(i=0;i printf(PRINT);//打印出信息 } void print()//定義顯示航班信息函數 { printf(“n目前我們有如下航班:n”);output(); //調用輸出格式函數 printf(“n請按回車鍵返回上層菜單 ”);getchar();getchar();} void search()//定義查詢函數 { int n; do { printf(“n請輸入航班號: ”); scanf(“%d”,&n);//輸入查詢的航班號 for(i=0;i { if(s[i].num==n)//按航班號判定輸出條件 { printf(“n您所查找的航班信息為:n ”); printf(“航班號tt起始站tt終點站tt時間tt機票數 nn”); printf(PRINT);//顯示信息 printf(“n查詢完畢,按回車鍵繼續”); getchar(); getchar(); return; } } printf(“n對不起,沒有您需要的信息!n ”);printf(“是否重新查找?請鍵入y或n以回車鍵結束 ”);scanf(“%s”,ii);}while(!strcmp(ii,“y”));//判定是否重新查找 } void dingpiao()//定義訂票業務函數 { int n;char a[10]=“y”;do { search();//調用查詢模塊 if(!strcmp(ii,“n”)) { printf(“對不起!沒有找到您所需要的航班,所以不能訂票。n”);//未查找到所需航班 printf(“n請按回車鍵返回上層菜單 ”); getchar(); getchar(); strcpy(ii,“n”); break; } do { printf(“請輸入您要訂的機票數(以回車鍵結束): ”); scanf(“%d”,&n);//輸入所訂機票數 if(n<=0) //判定機票數是否出錯 { printf(“輸入錯誤!至少需訂1張機票。n”); } else if(s[i].count==0)//判定機票是否售完 { printf(“對不起,你所選擇的航班的機票已售完!n”); break; } else if(s[i].count!=0&&s[i].count>=n)//判定機票數是否大于等于訂票數 { s[i].count=s[i].count-n; printf(“訂票成功!”); break; } else if(s[i].count { printf(“對不起,你所選擇的航班只剩 %d張機票n”, s[i].count); printf(“是否需要重新輸入機票數?請輸入y或n以回車鍵結束: ”);//判定是否重新輸入訂票數 scanf(“%s”,a); } }while(!strcmp(a,“y”)); printf(“是否需要訂其他航班的機票?請輸入y或n以回車鍵結束: ”); scanf(“%s”,a);}while(!strcmp(a,“y”));//判定是否繼續訂票 } void tuipiao()//定義退票函數 { int n;char a[10];do { search();//調用查詢函數 if(!strcmp(ii,“n”)) { printf(“對不起!沒有找到您所需要的航班,所以不能退票。n”); printf(“n請按回車鍵返回上層菜單 ”); getchar(); getchar(); strcpy(ii,“n”); break; } printf(“請輸入您要退的機票數目: ”); scanf(“%d”,&n);//輸入所退票數 if(n<=0) //判定票數是否有效 printf(“輸入錯誤!至少需退1張機票。”); else { s[i].count=s[i].count+n; printf(“退票成功!”); } printf(“是否繼續? 請鍵入y或n以回車鍵結束: ”);//判定是否繼續退票 scanf(“%s”,a);}while(!strcmp(a,“y”));//判定并跳出循環 } void paixu()//定義排序函數 { int n; printf(“n******************************************************************************** ”); printf(“1.按航班號從小到大排序n” “t2.按航班號從大到小排序n”);printf(“******************************************************************************** ”); printf(“請在1-2中選擇以回車鍵結束: ”);scanf(“%d”,&n);//輸入排序方式 switch(n){ case 1:paixu1();//調用從小到大排序函數 break; case 2:paixu2();//調用從大到小排序函數 break;} printf(“排序后的航班信息為:n”);output(); //顯示排序后航班信息 printf(“n請按回車鍵返回上層菜單 ”); getchar(); getchar();} void paixu1()//定義從小到大排序函數 { int k,j;struct air t;for(i=0;i { k=i; for(j=i+1;j if(s[k].num>s[j].num) k=j; if(i!=k) { t=s[k]; s[k]=s[i]; s[i]=t; } } } void paixu2()//定義從大到小排序函數 { } int k,j;struct air t;for(i=0;i if(s[k].num k=j;if(i!=k){ t=s[k]; s[k]=s[i]; s[i]=t;} } 飛機訂票系統 1.需求分析 描述要求編程解決的問題。以無歧義的陳述說明程序設計的任務,強調的是程序要做什么?明確規定: (a)輸入的形式和輸入值的范圍; (b)輸出的形式; (c)程序所能達到的功能; (d)測試數據:包括正確的輸入及其輸出結果和含有錯誤的輸入及其輸出結果。 2.概要設計 給出程序要達到的具體的要求。描述解決相應問題算法的設計思想。描述所設計程序的各個模塊(即函數)功能。說明本程序中用到的所有抽象數據類型的定義、主程序的流程以及各程序模塊之間的層次(調用)關系。 3.詳細設計 實現概要設計中定義的所有數據類型,對每個操作只需要寫出流程或偽碼算法;對主程序和其他模塊也都需要寫出流程或偽碼算法(偽碼算法達到的詳細程度建議為:按照偽碼算法可以在計算機鍵盤直接輸入高級程序設計語言程序);畫出函數的調用關系圖。給出所使用的基本抽象數據類型,所定義的具體問題的數據類型,以及新定義的抽象數據類型。設計出良好的輸入輸出界面(清晰易懂)。 4.調試分析 內容包括: (a)調試過程中遇到的問題是如何解決的以及對設計與實現的回顧討論和分析; (b)算法的時空分析(包括基本操作和其他算法的時間復雜度和空間復雜度的分析)和改進設想; (c)經驗和體會等。 5.用戶使用說明 說明如何使用你編寫的程序,詳細列出每一步的操作步驟。 6.測試結果 設計測試數據,或具體給出測試數據。要求測試數據能全面地測試所設計程序的功能。列出你的測試結果,包括輸入和輸出。這里的測試數據應該完整和嚴格,最好多于需求分析中所列。 7.測試情況:給出程序的測試情況,并分析運行結果 附錄(非必須,按照需要添加) 帶注釋的源程序。可以只列出程序文件名的清單。 需求分析 任務:通過此系統可以實現如下功能: 錄入: 可以錄入航班情況(數據可以存儲在一個數據文件中,數據結構、具體數據自定) 查詢: 可以查詢某個航線的情況(如,輸入航班號,查詢起降時間,起飛抵達城市,航班票價,票價折扣,確定航班是否滿倉); 可以輸入起飛抵達城市,查詢飛機航班情況; 訂票:(訂票情況可以存在一個數據文件中,結構自己設定)可以訂票,如果該航班已經無票,可以提供相關可選擇航班; 退票: 可退票,退票后修改相關數據文件; 客戶資料有姓名,證件號,訂票數量及航班情況,訂單要有編號。 概要設計 詳細設計 詳列函數 void list(){ struct airline *info; int i=0; info=start; printf(“起點城市t終點城市t航班號t起飛時間t降落時間t總票數t余票數n”); while(i { display(info); info++; i++; } printf(“nn”);} 查詢函數 void search(){ struct airline *info,*find(); char qiname[10]; char jiangname[10]; int i=0; info=start; printf(“請輸入要起飛城市的名稱:”); scanf(“%s”,qiname); printf(“請輸入要抵達城市的名稱:”); scanf(“%s”,jiangname); while(i { if(!strcmp(jiangname,info->jiang_name)) { break; } info++; i++; } if(i>=MAXSIZE) { printf(“沒有這條航線!n”); } else { printf(“起飛城市t降落城市t航班號t起飛時間t降落時間t總票數t余票數n”); display(info); } } struct airline *find(){ struct airline *info; char number[10]; int i=0; info=start; printf(“請輸入航班號:”); scanf(“%s”,number); while(i { if(!strcmp(number,info->air_num)) { return info; } info++; i++; } printf(“沒有這條航線!n”); return NULL;} 訂票函數 void order(){ struct airline *info; char qiname[10]; char jiangname[10]; int amount; char name[10]; char id[30]; info=start; printf(“請輸入您的起飛城市:”); scanf(“%s”,qiname); printf(“請輸入您的降落城市:”); scanf(“%s”,jiangname); printf(“請輸入您需要的票數:”); scanf(“%d”,&amount); int i=1; while(i<5) { if(!strcmp(info->qi_name,qiname)&&!strcmp(info->jiang_name,jiangname)) { if(amount<=info->ticket_left) { int i; printf(“請輸入您的姓名:”); scanf(“%s”,name); printf(“請輸入您的身份證號:”); scanf(“%s”,id); info->order=insertlink(info->order,amount,name,id); printf(“您的航班信息為:n”); display(info); for(i=0;i { printf(“%s的座位號是:%dn”,name,info->ticket_all-info->ticket_left+i+1); } info->ticket_left-=amount; printf(“訂票成功!n”); break; } else { info++; i++; } } else { info++; i++; } } } 退票函數 void returnticket(){ struct airline *info; linklist *p1,*p2,*head; char name[10]; if(!(info=find())) { return; } head=info->order; p1=head; printf(“請輸入您的姓名:”); scanf(“%s”,name); while(p1!=NULL) { if(!strcmp(name,p1->name)) { break; } p2=p1; p1=p1->next; } if(p1==NULL) { printf(“您沒有訂過票!n”); return; } else { if(p1==head) { head=p1->next; } else { p2->next=p1->next; } info->ticket_left+=p1->tickets; printf(“%s退票成功!n”,p1->name); free(p1); } info->order=head;} 存儲結構 typedef struct passenger { char name[10]; int tickets; char id[30]; struct passenger *next;} linklist;typedef struct airline { char qi_name[10]; char jiang_name[10]; char air_num[10]; char qi_time[10]; char jiang_time[10]; int ticket_all; int ticket_left; linklist *order;} lineinfo;調試分析 查看航線信息 查詢航線 ① 輸入起飛城市 ② 輸入抵達城市 ③ 輸出航班信息 辦理訂票業務 ① 查詢符合的航班 ② 查詢余票量 ③ 輸出航班信息 辦理退票業務 源代碼 #include char name[10]; int tickets; char id[30]; struct passenger *next;} linklist; typedef struct airline { char qi_name[10]; char jiang_name[10]; char air_num[10]; char qi_time[10]; char jiang_time[10]; int ticket_all; int ticket_left; linklist *order;} lineinfo; struct airline *start; void display(struct airline *info){ printf(“%st %10st %10st %10st %10st %5dt %5dn”,info->qi_name,info->jiang_name,info->air_num,info->qi_time,info->jiang_time,info->ticket_all,info->ticket_left);} void list(){ struct airline *info; int i=0; info=start; printf(“起點城市t終點城市t航班號t起飛時間t降落時間t總票數t余票數n”); while(i { display(info); info++; i++; } printf(“nn”);} void search(){ struct airline *info,*find(); char qiname[10]; char jiangname[10]; int i=0; info=start; printf(“請輸入要起飛城市的名稱:”); scanf(“%s”,qiname); printf(“請輸入要抵達城市的名稱:”); scanf(“%s”,jiangname); while(i { if(!strcmp(jiangname,info->jiang_name)) { break; } info++; i++; } if(i>=MAXSIZE) { printf(“沒有這條航線!n”); } else { printf(“起飛城市t降落城市t航班號t起飛時間t降落時間t總票數t余票數n”); display(info); } } struct airline *find(){ struct airline *info; char number[10]; int i=0; info=start; printf(“請輸入航班號:”); scanf(“%s”,number); while(i { if(!strcmp(number,info->air_num)) { return info; } info++; i++; } printf(“沒有這條航線!n”); return NULL;} linklist *insertlink(linklist *head,int amount,char name[],char id[]){ linklist *p1,*new1; p1=head; new1=(linklist*)malloc(sizeof(linklist)); strcpy(new1->name,name); new1->tickets=amount; new1->next=NULL; strcpy(new1->id,id); if(head==NULL) { head=new1; new1->next=NULL; } else { while(p1->next!=NULL) p1=p1->next; p1->next=new1; } return head;} void order(){ struct airline *info; char qiname[10]; char jiangname[10]; int amount; char name[10]; char id[30]; info=start; printf(“請輸入您的起飛城市:”); scanf(“%s”,qiname); printf(“請輸入您的降落城市:”); scanf(“%s”,jiangname); printf(“請輸入您需要的票數:”); scanf(“%d”,&amount); int i=1; while(i<5) { if(!strcmp(info->qi_name,qiname)&&!strcmp(info->jiang_name,jiangname)) { if(amount<=info->ticket_left) { int i; printf(“請輸入您的姓名:”); scanf(“%s”,name); printf(“請輸入您的身份證號:”); scanf(“%s”,id); info->order=insertlink(info->order,amount,name,id); printf(“您的航班信息為:n”); display(info); for(i=0;i { printf(“%s的座位號是:%dn”,name,info->ticket_all-info->ticket_left+i+1); } info->ticket_left-=amount; printf(“訂票成功!n”); break; } else { info++; i++; } } else { info++; i++; } } } void returnticket(){ struct airline *info; linklist *p1,*p2,*head; char name[10]; if(!(info=find())) { return; } head=info->order; p1=head; printf(“請輸入您的姓名:”); scanf(“%s”,name); while(p1!=NULL) { if(!strcmp(name,p1->name)) { break; } p2=p1; p1=p1->next; } if(p1==NULL) { printf(“您沒有訂過票!n”); return; } else { if(p1==head) { head=p1->next; } else { p2->next=p1->next; } info->ticket_left+=p1->tickets; printf(“%s退票成功!n”,p1->name); free(p1); } info->order=head;} int menu_select(){ int c; char s[20]; printf(“ 訂票系統n”); printf(“-------------n”); printf(“ 1.查看航線信息 printf(” 2.查詢航線 printf(“ 3.辦理訂票業務 printf(” 4.辦理退票業務 printf(“ 5.退出系統 printf(”-------------n“); do { printf(”請選擇(1-5):“); scanf(”%s“,s); c=atoi(s); } while(c<1||c>6); return c; n”);n“);n”);n“); n”); } int main(){ struct airline air[MAXSIZE]= { {“harbin”,“beijing”,“1”,“12:00”,“14:00”,30,30},{“harbin”,“shanghai”,“2”,“10:00”,“13:00”,20,20},{“harbin”,“beijing”,“3”,“13:30”,“10:00”,50,50},{“harbin”,“guangzhou”,“4”,“17:00”,“21:00”,50,50},{“harbin”,“dalian”,“5”,“14:00”,“17:00”,40,40} }; start=air; while(1) { system(“cls”); switch(menu_select()) { case 1: list(); break; case 2: search(); break; case 3: order(); break; case 4: returnticket(); break; case 5: exit(0); } getch(); } } 經驗體會 1、通過設計飛機訂票系統,加深了對鏈表的運用和理解。 2、通過多組測試數據,發現了程序的問題,并做了調整、3、通過設計選擇菜單,對選擇結構有更深刻的了解。 飛機訂票系統 1.概述(設計題目與可行性分析) 1.1設計題目:飛機訂票系統 1.2可行性分析 飛機訂票系統是為機場工作人員和客戶提供訂票退票等與機票相關內容的管理系統,方便機場工作人員對機票的管理,以提高機場工作人員對機票管理工作的效率。當前飛機訂票問題:手工訂票所產生的客座率低。而我們的目標是:建立一個飛機訂票系統數據庫。 1.2.1研究現有系統,畫現有系統的流程圖 了解當前系統能夠完成的功能及組成 航班管理:票據管理 售票點:直接面向用戶 航班管理 票據管理 票庫 訂票庫 訂票管理 出售管理 打印機票 售票點1 售票點n 現有系統:票據都分布在各個售票點 1.2.2導出新系統的高層邏輯結構 數據流圖的基本符號: 數據源/終點(人機界面): 加工處理: 文件名 文件: 數據流名 數據流: 票價信息 機票 查訂票號 訂票處理 客戶信息 出票處理 訂票記錄 顧客 訂票信息 訂票號 庫存信息 票價信息 票價管理 航班管理 航班信息 操作員 航班信息 保存 新系統的數據流圖: 說明:流向文件的數據流的名可以省略 1.2.3可行性分析報告 隨著Internet的迅速發展和用戶數量的急劇增加,互聯網對于企業和事業單位的運營和發展日益重要,網上交易也逐漸被人們認可,并成為未來交易的發展方向。在這種情況下,很多原有的C/S模式的系統也逐步向B/S模式靠攏,飛機訂票系統也不例外。 飛機訂票系統是飛機旅游服務信息系統的一個重要組成部分。為旅客提供優質便捷的服務,為了提高飛機客運的售票效率,豐富飛機客運的營銷手段,飛機售票總站的下屬代售點可以通過公用的互聯網資源,建立數據庫,實現網上的售票,查詢及管理工作。 2.系統目標和設計原則 2.1系統目標: 建立一個飛機訂票系統數據庫。 2.1.1系統簡介: 本系統是專為乘坐飛機的旅客準備的,旅客只需把自己的信息(姓名.性別.工作單位.身份證號.旅行時間.旅行目的地)預先交給旅行社,旅行社就可以將信息輸入本系統,系統就可以為旅客安排航班,打印出取票通知和帳單。旅客只要在飛機起飛的前一天憑取票通知單和帳單交款取單,系統校對無誤即印出機票給旅客。 2.2設計原則 2.2.1根據實際情況考慮三種可行性 技術可行性、經濟可行性、操作可行性 2.2.2提出侯選方案、提出各種各樣的實現方案 主機(純主機型、C/S型)、開發環境、網絡方案、對提出的每個方案進行成本估計 硬件、軟件費用投資(根據各公司的報價)開發成本估計(任務估算法) 運行費用、投資回收期 純收入:通過本系統的運行、投資回收后的收入 3、描述推薦理由:分別從技術、經濟、用戶、投資方的不同角度考慮 3.支撐環境規劃 3.1整體系統運作圖 3.2運行環境 服務器:硬件配置:CPU Intel P4 1.2G以上 內存256 硬盤 80G以上 軟件配置:Windows 2000/2003 SERVER SQL SERVER 2000 4.系統功能結構 1、錄入:可以錄入航班情況(數據可以存儲在一個數據文件中,數據結構、具體數據自定) 2、查詢:可以查詢某個航線的情況(如,輸入航班號,查詢起降時間,起飛抵達城市,航班票價,票價折扣,確定航班是否滿倉);可以輸入起飛抵達城市,查詢飛機航班情況; 3、訂票:(訂票情況可以存在一個數據文件中,結構自己設定)可以訂票,如果該航班已經無票,可以提供相關可選擇航班; 4、退票:可退票,退票后修改相關數據文件; 客戶資料有姓名,證件號,訂票數量及航班情況,訂單要有編號。 5、修改航班信息:當航班信息改變可以修改航班數據文件。 5.數據庫設計 5.1概念結構設計 E-R圖如下: 5.2邏輯結構設計 1.航空公司表:AIRLINE 2.客戶表CUSTOMER 3、飛機表PLANE 4.航線表LINE 5.航班表FLIGHT 6.訂票表BOOKTICKET 5.3實現設計 實現以下操作: 1、注冊航空公司: 2、增加飛機: 3、增加航線: 4、增加航班: 5、增加客戶: 6、建立一個訂票的存儲過程,存儲過程名為Book_Ticket,請完成以下存儲過程,實現訂票的操作: a)指定要訂的航班號(HID)及客戶的編號(KID); b)先查看客戶是否為特殊客戶,如果不是,票價不打折扣; c)否則如果客戶航程超過5萬公里,票價7折,超過15萬公里,票價打5折; d)查看客戶訂票以后,所有乘客的票數是否超過總的座位數,如果超過,回滾訂票操作; e)要求在操作過程中使用到事務技術。 CREATE PROCEDURE Book_ticket @HID VARCHAR(20) @HID VARCHAR(20) AS DECLARE @TRANS_NAME VARCHAR(20)select @TRANS_NAME=’ ’ BEGIN TRANSACTION DECLARE @Bookid int,@seats int,@IsSpec char(1)/*定義訂票里程DIST、折扣率discount、總的訂票里程distance、票價PRICE(實型)*/ select @Isspec=Isspec,@distance=Points FROM Customer where select @discount=1 IF @ BEGIN END /*選擇出票價*/ SELECT @PRICE=PRICE FROM FLIGHT WHERE /*加入客戶訂票信息*/ /*將客戶新訂票里程的信息累計到用戶信息里面*/ UPDATE SET WHERE /*查看客戶訂票后,是否超過可容納的座位數目,如果超過,取消所有操作*/ SELECT booked=count(*)FROM WHERE FID= /*查看額定座位容量*/ SELECT @seats=seatsnum FROM WHERE IF @BOOKED>@SEATS ELSE COMMIT TRANSACTION GO 7.運行這個訂票操作的存儲過程(自己設定客戶及航班) book_ticket , 8.事務運行成功后,再顯示各表的數據,按表分別寫出來。 6.總體實施計劃 6.1可行性研究: 研究現有系統,畫現有系統的流程圖,編寫可行性分析報告 6.2進行數據庫設計: 概念結構設計,邏輯結構設計,實現設計 6.3概要設計: 從數據流圖導出初始結構圖,設計優化 6.4詳細設計: 結構化的程序設計,采用流程圖的形式 6.5保密設計 1.每個用戶需要注冊才能進入航空訂票信息系統,并進行網上訂票的。用戶必須 用自己真實的身份進行注冊。 2.系統要另外在備一份數據庫,防止系統出現錯誤而使數據信息丟失的可能性。 3.系統要安裝防火墻,防止黑客入侵破壞系統。還有就是安裝殺毒軟件,防止 病毒入侵而導致系統癱瘓。 6.6維護設計 系統設置提供管理員操作頁面: 1.提供管理員密碼,方便維護操作.2.固定時間對系統進行維護和檢測.3.若系統出現癱瘓時,可出動備用系統維持運轉.4.定期對系統進行更新整頓清空.7.總結 這次數據庫課程設計的“飛機訂票系統”,通過近一周的上機操作,充分應用了所學的數據庫的知識,并去圖書館查閱了一些書集和上網搜索一部分相當資料,粗略設計出該系統。總體上來說,這次課程設計還是比較成功的,充分運用了所學的軟件工程設計、數據庫的設計,設計出E-R圖、流程圖、數據庫基本表,從整體規劃出了系統的運行環境和系統實現的功能。 當然,由于學藝不精,在課程設計的過程也碰到的一些問題。其中,畫E-R圖時,各實體中的關系的確定,由于對系統還不夠了解而找不到一個準確的詞來形容;總體規劃時,材料太多,不易整理;相關數據庫技術方面沒有多注意,這次課程設計的重點只在對整個系統的總體思路設計。 其實這些通過最近的課程設計覺得最重要一點就是:我們一定要自己動手,這樣才能真正的學到東西。書本知識固然重要,但我們更要學會將書本知識應用到實際的工作中。實踐中才會發現錯誤,也才能改進,才能達到學習的最終目的。 最后感謝在這次課程設計中幫助過我的老師,同學!8.參考文獻 物流信息系統 趙剛 四川大學人民出版社 2002/9 物流信息管理 尹濤 東北財經大學出版社 2005/1 數據庫系統概論 王珊 薩師煊 高等教育出版社 2006/5 數據庫技術與應用-Access2000篇 郭力平人民郵電出版社 2002/8 軟件設計師教程 陳平禇華 清華大學出版社 2006/6 文章引用自: 《銀行帳戶管理系統》設計報告 飛機航班訂票系統概要設計 根據需求分析中的描述,知道需要三個struct結構體類型和一個class的類 struct person //定義旅客信息結構體類型 { char name[50];//旅客姓名 char sex[20];//旅客性別 char id[20];//旅客身份證號 char from[50];//旅客出發地 char to[50];//旅客目的地 int year;//旅客出發年 int month;//月 int day;//日 };struct fly //定義航班信息結構體類型 struct piao //定義訂單信息結構體類型 這兩個結構體類型和之前第一個相似。 class plane //定義一個類--plane { public: //public表示是共有屬性,里面的東西變為共有的。對象外的用戶可以調用對象內的類型 char menu();//定義 各種成員函數 void set();//**********************旅客信息添加修改刪除函數聲明 void AddPer();//旅客 增加信息 void chp();//旅客 修改信息 void dep();//旅客 刪除信息 //**********************航班信息添加修改刪除函數聲明 《銀行帳戶管理系統》設計報告 void addf();//航班 增加信息 void chf();//航班 修改信息 void def();//航班 刪除信息 //**********************訂單信息添加修改刪除函數聲明 void addt();//訂單中 增加信息 void cht();//訂單中 修改信息 void det();//訂單中 刪除信息 //**********************按條件顯示訂單信息函數聲明 void showno();//按航班班次顯示訂單信息 void showplace();//按出發地、目的地顯示訂單信息 void showname();//按旅客姓名顯示訂單信息 void save();//保存信息 void exit();//退出界面 private: person a[100];//定義一個用戶的數組 fly b[100];//定義一個航班的數組 piao c[100];//定義一個訂單的數組 int t; //旅客個數 int s; //航班個數 int r;//訂單個數 };三個struct結構體類型中用于存放數據,在private中定義出a[]、b[]、c[]三個數組用來存放數據。并在public中聲明出將要調用的函數。public表示是共有屬性,將里面的東西變為共有的。對象外的用戶也可以調用對象內的類型。 然后在main函數中寫入一個switch函數用來滿足用戶的選擇,依照用戶的選擇來實現case中的函數。case中函數來實現用戶的需求:例如增加、修改、刪除一個旅客資料等等。 《銀行帳戶管理系統》設計報告 2. 詳細設計 //***********************plane創建一個類m將鍵盤輸入的數據輸入進m類中 plane m; //**************************從文件流之中講數據讀取************ void plane::set() { fstream file(“person.txt”,ios::in);//定義一個文件流,以輸入的方式打開文件 int i=0;if(file.is_open()) //判斷文件是否打開 { while(!file.eof()) //判斷文件是否是最末尾端(如果不是則運行下列代碼) { file>>m.a[i].name;//將名字寫入到結構體類型person中 file>>m.a[i].sex; file>>m.a[i].id; file>>m.a[i].from; file>>m.a[i].to; file>>m.a[i].year>>m.a[i].month>>m.a[i].day; if(!file.eof())//判斷文件是否是最末尾端 i++; //不是的話i+1 } m.t=i; file.close();} fstream file2(“fly.txt”,ios::in); //file2 3類似 fstream file3(“piao.txt”,ios::in);//***************************講變量名中的數據輸入到文件流之中 void plane::save(){ //*******************************將數據輸入到person文件中 fstream file(“person.txt”,ios::out | ios::trunc);/*out以輸出方式打開一個文件 trunc打開一個文件要是存在則刪除其中全部數據 若不存在則建立新文件*/ if(file.is_open())//講變量名之中的數據輸入到file中 { for(int i=0;i file< file< file< 《銀行帳戶管理系統》設計報告 file< file< file< file< file< file.close(); } fstream file2(“fly.txt”,ios::out | ios::trunc); //file2 3類似 fstream file3(“piao.txt”,ios::out | ios::trunc); //******************************定義一個menu char plane::menu() { int k; cout<<“*************************飛 機 航 班 訂 票 系 統**********************”< cout<<“ 1.增加一個旅客信息 ”< cout<<“ 2.修改一個旅客信息 ”< cout<<“ 3.刪除一個旅客信息 ”< cout<<“ 4.增加一個航班信息 ”< cout<<“ 5.修改一個航班信息 ”< cout<<“ 6.刪除一個航班信息 ”< cout<<“ 7.增加一個訂單信息 ”< cout<<“ 8.修改一個訂單信息 ”< cout<<“ 9.刪除一個訂單信息 ”< cout<<“ 10.按班次顯示訂單資料 ”< cout<<“ 11.按航班線路顯示訂單資料 ”< cout<<“ 12.按旅客姓名顯示訂單資料 ”< cout<<“請輸入您要選擇的功能序號:”; cin>>k; return k; //將用戶選擇的K值返回到主函數中賦值給R以此選擇case } //*****************************添加旅客信息—從鍵盤中將數據輸入到一個變量名之中 void plane::AddPer() { char choice;//choice用來判斷y/n for(int i=m.t;i<100;i++) { //**************添加旅客信息 cout<<“添加旅客信息--姓名:”; cin>>m.a[i].name; cout<<“添加旅客信息--性別:”; cin>>m.a[i].sex; cout<<“添加旅客信息--身份證:”; cin>>m.a[i].id; cout<<“添加旅客信息--出發地:”; cin>>m.a[i].from; cout<<“添加旅客信息--目的地:”; cin>>m.a[i].to; cout<<“添加旅客信息--出發年:”; cin>>m.a[i].year; 《銀行帳戶管理系統》設計報告 cout<<“添加旅客信息--出發月:”; cin>>m.a[i].month; cout<<“添加旅客信息--出發日:”; cin>>m.a[i].day; m.t++; cout<<“一位旅客新信息輸入完成,還要繼續添加新的旅客信息么(y/n)?”; while(1) { cin>>choice; if(choice=='y'||choice=='n') //邏輯或 如果是y或者n則跳出while函數 break; else cout<<“輸入錯誤!請重新輸入!”< if(choice=='n')//如果是n的話跳出for循環 break; } save(); //保存旅客信息 } //************************改變旅客信息 void plane::chp(){ char J[100];//定義一個數組J用于修改旅客身份證號(利用id號來進行修改) cout<<“請輸入要修改的旅客身份證號:”; cin>>J; for(int i=0;i if(strcmp(m.a[i].id,J)==0) //將已有的旅客id號和剛輸入的id號進行比較 break; if(i==m.t) { cout<<“輸入錯誤,沒有此航班!”< return; } //********************輸出修改內容 進行修改 cout<<“請輸入旅客的姓名:”; cin>>m.a[i].name; cout<<“請輸入旅客的性別:”; cin>>m.a[i].sex; cout<<“請輸入旅客的身份證號:”; cin>>m.a[i].id; cout<<“請輸入旅客的出發地:”; cin>>m.a[i].from; cout<<“請輸入旅客的目的地:”; cin>>m.a[i].to; cout<<“請輸入旅客的出發年:”; cin>>m.a[i].year; cout<<“請輸入旅客的出發月:”; cin>>m.a[i].month; cout<<“請輸入旅客的出發日:”; cin>>m.a[i].day; save(); cout<<“修改成功!”< } //**************************刪除旅客信息 void plane::dep() 《銀行帳戶管理系統》設計報告 { char R[100]; cout<<“請輸入要刪除的旅客身份證:”;cin>>R; for(int i=0;i if(strcmp(m.a[i].id,R)==0) break; if(i==m.t) { cout<<“刪除錯誤,沒有您要刪除的游客!”< return; } m.a[i]=m.a[m.t-1]; //將后面數組賦值到了找到的要刪除的數組就將那個要刪除的數組給刪除了 m.t--; save(); cout<<“刪除成功!”< 之后的幾個函數都相類似。 //****************************添加航班信息 void plane::addf()//*****************************修改航班信息 void plane::chf()//*************************刪除航班信息 void plane::def()//***********************添加航班訂票信息 void plane::addt()//******************************修改訂票信息 void plane::cht()//*********************刪除訂單信息 void plane::det()//****************************按航班起飛降落城市來查詢訂單信息 void plane::showplace() { char H[100]; char E[100]; cout<<“請輸入要查詢的訂單航班出發地:”; cin>>H; cout<<“請輸入要查詢的訂單航班目的地:”; cin>>E; for(int i=0;i //將輸入的出發和降落城市和已存在的城市想比較來找到這筆訂單 if(strcmp(m.c[i].chufadi,H)==0 && strcmp(m.c[i].mudidi,E)==0) break; if(i==m.r) { 《銀行帳戶管理系統》設計報告 cout<<“沒有此訂單!輸入錯誤!”< return; } cout<<“查詢結果如下:”< for(i=0;i if(strcmp(m.c[i].chufadi,H)==0 && strcmp(m.c[i].mudidi,E)==0) { cout<<“旅客姓名:”< cout<<“旅客性別:”< cout<<“旅客身份證:”< cout<<“航班班次:”< cout<<“出發地:”< cout<<“目的地:”< cout<<“出發日期-年:”< cout<<“出發日期-月:”< cout<<“出發日期-日:”< } } //*****************************按訂單姓名來查詢訂單信息 void plane::showname()//****************************按航班班次來查詢訂單信息 void plane::showno()//***************************主函數使用switch函數來選擇各個功能 int main(){ plane p; //plane定義一個p的類 p.set(); /*面向對象的思想 以對象為載體下一個對象要干什么 執行過程應該封裝起來 而不是像面向過程一樣講過程代碼一步一步寫出來*/ while(1){ int R; R=p.menu();//在menu函數中選擇case然后賦值到R中然后選擇是第幾個case switch(R) { case 1:p.AddPer(); break; case 2:p.chp(); break; case 3:p.dep(); break; case 4:p.addf(); break; case 5:p.chf(); break; case 6:p.def(); break; case 7:p.addt(); break; case 8:p.cht(); break; 《銀行帳戶管理系統》設計報告 case 9:p.det(); break; case 10:p.showno(); break; case 11:p.showplace(); break; case 12:p.showname(); break; default:cout<<“輸入錯誤,請重新輸入!”< } } return 0;} C語言程序設計——飛機訂票系統 代碼如下:” #include“stdio.h” #include“stdlib.h” #include“string.h” #defineLENsizeof(structplane)#defineMAX 10;structplane { char destination[12];char num[10];char time[12];int price;int amount;};typedefstructplanePLANE;PLANE a[100];void menu();void input();void search();void preserve();void planeadd();void delplane(); void main(){ system(“cls”);menu();} void menu(){ char *menu[] = { ************** 歡迎進入飛機訂票系統*************,“ a:輸入航線 ”,“ b:查詢航線 ”,“ c:退訂票系統 ”,“ d:追加航線 ”,“ e:刪除航線 ”,“ f: 退出 ”,“****************************************************” };int i;char NO;int quit = 0;do { system(“cls”); for(i = 0;i<9;i++) printf(“n%s”, menu[i]); printf(“n請輸入服務代碼a,b,c,d,e或fn”); NO = getchar(); switch(NO) { case'a': input();break; case'b': search();break; case'c': preserve();break; case'd': planeadd();break; case'e': delplane();break; case'f': quit = 1;break; } } while(!quit);} void input(){ int i, n;FILE *fp;system(“cls”);if((fp = fopen(“D:file”, “wb”))== NULL){ printf(“error!n”);exit(0);} printf(“n請輸入航班總數n:”);scanf(“%d”, &n);printf(“n請按下面提示輸入航班信息:起點站:沈陽”);for(i = 0;i printf(“nt請輸入終點:”); scanf(“%s”, a[i].destination); printf(“t 航班班次:”); scanf(“%s”, a[i].num); printf(“t 時間:”); scanf(“%s”, a[i].time); printf(“t 票價:”); scanf(“%d”, &a[i].price); printf(“t機票總數:”); scanf(“%d”, &a[i].amount); fwrite(&a[i], sizeof(PLANE), 1, fp);} fclose(fp);} void search(){ int i, j = 0, k = 101;char str[12];FILE *fp;PLANE b[5];if((fp = fopen(“D:file”, “rb”))== NULL){ printf(“error!n”); exit(0);} printf(“n請輸入航班號:”);scanf(“%s”, str);while(fread(&b[j], LEN, 1, fp)!= 0) j++;for(i = 0;i if(strcmp(b[i].num, str)== 0) { printf(“沈陽至%s 航班號:%s 時間:%s 票價:%d 剩余票數:%dn”, b[i].destination, b[i].num, b[i].time, b[i].price, b[i].amount); k = i; } if(k == 101) printf(“對不起,沒有您需要的航線。”);fclose(fp);system(“pause”);} void preserve(){ int a = 0, i = 0, k, m, n, x;char str[12];PLANE preserve[10];FILE *fp;if((fp = fopen(“D:file”, “rb”))== NULL){ printf(“error!n”); exit(0);} printf(“請輸入航班號:”);scanf(“%s”, str);while(fread(&preserve[i], LEN, 1, fp)!= 0){ if(strcmp(preserve[i].num, str)== 0) printf(“沈陽至%s 航班號:%s 時間:%s 價格:%d 剩余票數:%d”, preserve[i].destination, preserve[i].num, preserve[i].time, preserve[i].price, preserve[i].amount); k = i; i++;} fclose(fp);printf(“n請輸入訂退票代碼:0-訂票 1-退票”);scanf(“%d”, &m);if(m == 0){ printf(“沈陽至%s 航班號:%s 時間:%s 價格:%d元剩余票數:%d”, preserve[k].destination, preserve[k].num, preserve[k].time, preserve[k].price, preserve[k].amount); printf(“n請輸入訂票總數n:”); scanf(“%d”, &n); x = preserve[k].price*n; printf(“n應付款%d元”, x); preserve[k].amount = preserve[k].amount1; del = 1; printf(“n成功刪除信息!!”);} if(del == 0) { printf(“系統中不存在要刪除的信息!”);menu();} else { if((fp = fopen(“D:file”, “wb+”))== NULL);{printf(“文件有錯誤不能打開!”); exit(0); } } for(i = 0;i fwrite(&delplane[i], LEN, 1, fp); fclose(fp);} }第二篇:數據結構課程設計 飛機訂票系統
第三篇:數據庫課程設計+飛機訂票系統
第四篇:飛機訂票系統課程設計
第五篇:C語言程序設計——飛機訂票系統