第一篇:一個(gè)簡單的火車票售票管理系統(tǒng)
一個(gè)簡單的火車票售票管理系統(tǒng)(原創(chuàng))#include
typedef struct time
//時(shí)間類型 {
int x,y,z;
//分別對(duì)應(yīng)年,月,日 }TIME;
typedef struct cnode
//票信息類型 {
int no;
//票號(hào)
int id;
//購票人證件號(hào)
TIME date;
//購票日期
struct cnode *next;}CNODE;
typedef struct tnode
//車次信息類型 {
char data;
//車次編號(hào)
struct tnode *lchild,*rchild;
CNODE *head;}TNODE;
void create();
//按車次建立二叉排序樹
void insert(int);
//增加新的車次(二叉排序樹的插入)void del();
//取消車次(二叉排序樹節(jié)點(diǎn)刪除)
void inorder(TNODE *);
//中序遍歷車次二叉排序樹(僅顯示車次信息)void inorder_all(TNODE *);
//中序遍歷車次二叉排序樹(顯示車次及售票信息)void preorder(TNODE *);
//先序遍歷車次二叉排序樹(僅顯示車次信息)TNODE *search();
//按車次編號(hào)搜索
CNODE *insert_c(CNODE *);
//插入新的售票信息(單張)CNODE *insert_c_more(CNODE *);
//插入新的售票信息(批量)CNODE *del_c(CNODE *,CNODE *);
//退票處理(刪除售票信息)CNODE *search_c(CNODE *,int);
//按票號(hào)查詢
void search_c_id(CNODE *,int);
//按購票人證件號(hào)搜索(限定某車次)void search_c_id_all(TNODE *,int);
//按購票人證件號(hào)搜索(所有車次)void search_date(CNODE *,TIME);
//按購票日期搜索(限定某車次)void search_date_all(TNODE *,TIME);
//按購票日期搜索(所有車次)void print_c(CNODE *);
//輸出售票紀(jì)錄(單張)void print_c_all(CNODE *);
//輸出售票紀(jì)錄(批量)
TNODE *root=NULL;
void main(){
int i,func,no,ok;
TNODE *t;
CNODE *c;
TIME d;
printf(“nnn”);
for(i=0;i<15;i++)printf(“=”);
printf(“列車售票信息管理系統(tǒng)”);
for(i=0;i<15;i++)printf(“=”);
printf(“n”);
printf(“t1.車次信息管理n”);
printf(“t2.售票記錄管理n”);
printf(“t3.售票記錄查詢n”);
printf(“t4.售票記錄一覽n”);
printf(“t5.退出系統(tǒng)n”);
for(i=0;i printf(“n請(qǐng)選擇您所需要的功能:”); fflush(stdin); scanf(“%d”,&func); switch(func){ case 1: printf(“nn車次信息管理>>>>n”); for(i=0;i printf(“nt1.增加新的車次”); printf(“nt2.取消車次”); printf(“nt3.返回上級(jí)菜單n”); for(i=0;i printf(“n請(qǐng)選擇您所需要的功能:”); fflush(stdin); scanf(“%d”,&func); switch(func){ case 1: create(); printf(“n售票信息更新成功!nn”); break; case 2:del();break; case 3:main();break; default:printf(“n[錯(cuò)誤]功能號(hào)輸入有誤!請(qǐng)重新輸入!”); } break; case 2: printf(“nn售票記錄管理>>>>n”); for(i=0;i printf(“nt1.增加新的售票記錄”); printf(“nt2.退票”); printf(“nt3.返回上級(jí)菜單n”); for(i=0;i printf(“n請(qǐng)選擇您所需要的功能:”); fflush(stdin); scanf(“%d”,&func); switch(func){ case 1: t=search(); if(t!=NULL)t->head=insert_c_more(t->head); break; case 2: t=search(); printf(“需要退票的票號(hào):”); scanf(“%d”,&no); t->head=del_c(t->head,search_c(t->head,no)); break; case 3:main();break; default:printf(“n[錯(cuò)誤]功能號(hào)輸入有誤!請(qǐng)重新輸入!”); } break; case 3: printf(“nn售票記錄查詢>>>>n”); for(i=0;i printf(“nt1.按票號(hào)搜索”); printf(“nt2.按購票者證件號(hào)搜索”); printf(“nt3.按購票日期搜索”); printf(“nt4.返回上級(jí)菜單n”); for(i=0;i printf(“n請(qǐng)選擇您所需要的功能:”); fflush(stdin); scanf(“%d”,&func); switch(func){ case 1: t=search(); if(t!=NULL){ printf(“n請(qǐng)輸入您所要查詢的票號(hào):”); scanf(“%d”,&no); c=search_c(t->head,no); if(c==NULL)printf(“[錯(cuò)誤]沒有該票號(hào)的紀(jì)錄!該票還未售出或?yàn)閺U票!自動(dòng)返回上級(jí)菜單n...”);} break; case 2: printf(“n請(qǐng)輸入您所要查詢的購票者證件號(hào):”); scanf(“%d”,&no); search_c_id_all(root,no); printf(“搜索完畢!自動(dòng)返回上級(jí)菜單n...”); break; case 3: do{ printf(“n請(qǐng)輸入您所要查詢的日期(格式: yy-mm-dd):”); scanf(“%d-%d-%d”,&d.x,&d.y,&d.z); if(d.y<13&&d.y>0){ if(d.y==1||d.y==3||d.y==5||d.y==7||d.y==8||d.y==10||d.y==12) if(d.z<32&&d.z>0)ok=1; else if(d.z==2) if(d.z<30&&d.z>0)ok=1; else if(d.z<31&&d.z>0)ok=1; } else ok=0; if(!ok)printf(“n[錯(cuò)誤]日期輸入有誤!請(qǐng)重新輸入!”); }while(!ok); printf(“n指定車次嗎?(1->是,0->否):”); scanf(“%d”,&ok); if(ok)search_date(search()->head,d); else search_date_all(root,d); break; case 4:main();break; default:printf(“n[錯(cuò)誤]功能號(hào)輸入有誤!自動(dòng)返回上級(jí)菜單n...”); } break; case 4: printf(“nn售票記錄一覽>>>>n”); for(i=0;i printf(“nt1.僅瀏覽車次”); printf(“nt2.指定車次已售票記錄”); printf(“nt3.所有車次已售票記錄”); printf(“nt4.測試:先序遍歷車次”); printf(“nt5.返回上級(jí)菜單n”); for(i=0;i printf(“n請(qǐng)選擇您所需要的功能:”); fflush(stdin); scanf(“%d”,&func); switch(func){ case 1: printf(“n+++僅瀏覽車次n”); if(root==NULL)printf(“[錯(cuò)誤]無車次紀(jì)錄!”); else{inorder(root);printf(“n”);} break; case 2: printf(“n+++指定車次已售票記錄n”); t=search(); if(t!=NULL){ print_c_all(t->head); printf(“n”); } break; case 3: printf(“n+++所有車次已售票記錄n”); if(root==NULL)printf(“[錯(cuò)誤]無車次紀(jì)錄!”); else{inorder_all(root);printf(“n”);} break; case 4: printf(“n+++測試:先序遍歷車次n”); if(root==NULL)printf(“[錯(cuò)誤]無車次紀(jì)錄!”); else{preorder(root);printf(“n”);} break; case 5:main();break; default:printf(“n[錯(cuò)誤]功能號(hào)輸入有誤!自動(dòng)返回上級(jí)菜單n...”); } break; case 5:exit(0); default:printf(“n[錯(cuò)誤]功能號(hào)輸入有誤!請(qǐng)重新輸入!”); } main();} void inorder_all(TNODE *ptr){ if(ptr!=NULL) { inorder_all(ptr->lchild); printf(“%d:n”,ptr->data); print_c_all(ptr->head); printf(“n”); inorder_all(ptr->rchild); } } void inorder(TNODE *ptr){ if(ptr!=NULL) { inorder(ptr->lchild); printf(“%dt”,ptr->data); inorder(ptr->rchild); } } void preorder(TNODE *ptr){ if(ptr!=NULL) { printf(“%dt ”,ptr->data); preorder(ptr->lchild); preorder(ptr->rchild); } } void print_c(CNODE *tkt){ if(tkt!=NULL)printf(“t%dt%dt%d-%d-%dn”,tkt->no,tkt->id,tkt->date.x,tkt->date.y,tkt->date.z);} void print_c_all(CNODE *head){ int i=0,j=0; if(head==NULL){printf(“n記錄為空!n”);return;} for(i=0;i printf(“nNOt票號(hào)t購票者證件號(hào)t購票日期(年-月-日)n”); for(i=0;i for(j=0;head!=NULL;j++){ printf(“n%d”,j); print_c(head); head=head->next; } printf(“n”); for(i=0;i printf(“n總計(jì) %d 條記錄n”,j); for(i=0;i printf(“n”);} void create(){ int n,i;int k[MAX];printf(“n您所希望增加車次的數(shù)量:”);scanf(“%d”,&n);for(i=0;i printf(“新增第%d列車次:”,i+1); scanf(“%d”,&k[i]);} for(i=0;i insert(k[i]);} void insert(int m){ TNODE *p1,*p2;if(root==NULL) { root=(TNODE *)malloc(sizeof(TNODE)); root->data=m; root->lchild=root->rchild=NULL; root->head=NULL; } else { p1=root; while(m!=p1->data) { if((m data)&&(p1->lchild!=NULL))p1=p1->lchild; else if((m>p1->data)&&(p1->rchild!=NULL))p1=p1->rchild; else if((m data)&&(p1->lchild==NULL)) { p2=(TNODE *)malloc(sizeof(TNODE)); p2->data=m; p2->lchild=p2->rchild=NULL; p2->head=NULL; p1->lchild=p2; return; } else if((m>p1->data)&&(p1->rchild==NULL)) { p2=(TNODE *)malloc(sizeof(TNODE)); p2->data=m; p2->lchild=p2->rchild=NULL; p2->head=NULL; p1->rchild=p2; return; } } printf(“n[錯(cuò)誤]未能成功增加車次%d,車次號(hào) %d 已存在!”,m,m); } } TNODE *search(){ int key; TNODE *p; p=root; printf(“n輸入您所要查找的車次編號(hào):”); scanf(“%d”,&key); while(p!=NULL&&p->data!=key){ if(key data){p=p->lchild;} else if(key>p->data){p=p->rchild;} } if(p==NULL)printf(“n該車次不存在!”); return(p);} void del(){ int key; TNODE *p1,*p2,*p3,*temp; p1=p2=root; p3=temp=NULL; printf(“n請(qǐng)輸入您想要取消的車次編號(hào):”); scanf(“%d”,&key); while(p2!=NULL&&p2->data!=key){ if(key data){p1=p2;p2=p2->lchild;} else if(key>p2->data){p1=p2;p2=p1->rchild;} } if(p2==NULL){printf(“n[錯(cuò)誤]該車次不存在!返回上級(jí)菜單n...”);return;} else if(p2->lchild==NULL&&p2->rchild==NULL) { if(p1->lchild==p2)p1->lchild=NULL; if(p1->rchild==p2)p1->rchild=NULL; temp=p2; if(root==p2){temp=root;root=NULL;} } else{ if(p2->rchild==NULL){ temp=p2->lchild; p2->data=temp->data; p2->lchild=temp->lchild; p2->rchild=temp->rchild; } else if(p2->lchild==NULL){ temp=p2->rchild; p2->data=temp->data; p2->lchild=temp->lchild; p2->rchild=temp->rchild; } else{ p3=p2; temp=p2->lchild; while(temp->rchild!=NULL){p3=temp;temp=temp->rchild;} p2->data=temp->data; if(p3==p2)p3->lchild=temp->lchild; else p3->rchild=temp->lchild; } } free(temp); printf(“車次 %d 已取消!nn”,key);} CNODE *insert_c(CNODE *head){ CNODE *k,*p; k=(CNODE *)malloc(sizeof(CNODE)); do{ printf(“n車票編號(hào):”); scanf(“%d”,&k->no); p=search_c(head,k->no); if(p!=NULL)printf(“n[錯(cuò)誤]該票已被購買!請(qǐng)重新選擇!n”); }while(p!=NULL); printf(“購票者證件號(hào):”); scanf(“%d”,&k->id); printf(“購票日期(格式:yy-mm-dd):”); scanf(“%d-%d-%d”,&k->date.x,&k->date.y,&k->date.z); k->next=head; head=k; return(head);} CNODE *insert_c_more(CNODE *head){ int n,i; printf(“n請(qǐng)輸入批量新增售票記錄數(shù):”); fflush(stdin); scanf(“%d”,&n); for(i=0;i printf(“n售票記錄更新成功!n”); return(head);} CNODE *search_c(CNODE *head,int id){ CNODE *temp,*s; s=temp=head; while(temp!=NULL&&temp->id!=id){s=temp;temp=temp->next;} print_c(temp); if(temp!=NULL)return(s); else return NULL;} void search_c_id(CNODE *head,int id){ CNODE *s,*head_s; s=head_s=NULL; if(head==NULL)printf(“無該證件號(hào)紀(jì)錄!n”); while(head!=NULL){ if(head->id==id){ s=(CNODE *)malloc(sizeof(CNODE)); s->no=head->no;s->id=head->id;s->date=head->date; s->next=head_s;head_s=s; } head=head->next; } print_c_all(head_s); printf(“n”);} void search_c_id_all(TNODE *ptr,int id){ if(ptr!=NULL){ search_c_id_all(ptr->lchild,id); printf(“n車次:%dn”,ptr->data); search_c_id(ptr->head,id); search_c_id_all(ptr->rchild,id); } } void search_date(CNODE *head,TIME t){ CNODE *s,*head_s; s=head_s=NULL; while(head!=NULL){ if(t.x==head->date.x) if(t.y==head->date.y) if(t.z==head->date.z) { s=(CNODE *)malloc(sizeof(CNODE)); s->no=head->no;s->id=head->id;s->date=head->date; s->next=head_s;head_s=s; } head=head->next; } print_c_all(head_s); printf(“n”);} void search_date_all(TNODE *ptr,TIME t){ if(ptr!=NULL){ search_date_all(ptr->lchild,t); printf(“n車次:%dn”,ptr->data); search_date(ptr->head,t); search_date_all(ptr->rchild,t); } } CNODE *del_c(CNODE *head,CNODE *p){ CNODE *temp; if(p==NULL)printf(“[錯(cuò)誤]該票未售出或?yàn)閺U票!返回上級(jí)菜單n...”); else if(p==head){head=NULL;free(p);} else{ temp=p->next; p->next=temp->next; free(temp); } return(head);} 三、需求規(guī)格說明書 三、需求規(guī)格說明書 1.引言...........................................................................................................................1 1.1編寫目的.............................................................................................................1 1.2項(xiàng)目背景.............................................................................................................2 1.3定義....................................................................................................................2 1.4參考資料.............................................................................................................2 2.任務(wù)概述....................................................................................................................2 2.1目標(biāo)....................................................................................................................2 2.2運(yùn)行環(huán)境.............................................................................................................3 2.3條件與限制..........................................................................................................3 3.?dāng)?shù)據(jù)描述....................................................................................................................3 3.1靜態(tài)數(shù)據(jù).............................................................................................................3 3.2動(dòng)態(tài)數(shù)據(jù).............................................................................................................3 3.3數(shù)據(jù)庫介紹..........................................................................................................4 3.4數(shù)據(jù)詞典.............................................................................................................4 3.5數(shù)據(jù)采集.............................................................................................................8 4.功能需求....................................................................................................................8 4.1功能劃分.............................................................................................................8 4.2功能描述.............................................................................................................9 5.性能需求....................................................................................................................9 5.1數(shù)據(jù)精確度..........................................................................................................9 5.2時(shí)間特性.............................................................................................................9 5.3適應(yīng)性.................................................................................................................9 6.運(yùn)行需求....................................................................................................................9 6.1用戶界面.............................................................................................................9 6.2硬件接口...........................................................................................................10 6.3軟件接口...........................................................................................................10 6.4故障處理...........................................................................................................10 7.其它需求..................................................................................................................10 1.引言 1.1編寫目的 本需求分析報(bào)告的目的是規(guī)范化本軟件的編寫,旨在于提高軟件開發(fā)過程中的能見度,便于對(duì)軟件開發(fā)過程中的控制與管理,同時(shí)提出了本火車售票系統(tǒng)的軟件開發(fā)過程,便于程 三、需求規(guī)格說明書 序員與客戶之間的交流、協(xié)作,并作為工作成果的原始依據(jù),同時(shí)也表明了本軟件的共性,以期能夠獲得更大范圍的應(yīng)用。本文檔供項(xiàng)目經(jīng)理、設(shè)計(jì)人員、開發(fā)人員參考。 1.2項(xiàng)目背景 a.項(xiàng)目的委托單位:中國鐵路局 b.開發(fā)單位:xx大學(xué) c.主管部門:計(jì)算機(jī)學(xué)院 d.軟件名稱:火車售票系統(tǒng) e.軟件開發(fā)者: 1.3定義 a.鐵路售票應(yīng)用系統(tǒng)軟件:基本元素為構(gòu)成鐵路售票及相關(guān)行為所必須的各種部分。 b.需求:用戶解決問題或達(dá)到目標(biāo)所需的條件或功能;系統(tǒng)或系統(tǒng)部件要滿足合同、標(biāo)準(zhǔn),規(guī)范或其它正式規(guī)定文檔所需具有的條件或權(quán)能。 c.需求分析:包括提煉,分析和仔細(xì)審查已收集到的需求,以確保所有的風(fēng)險(xiǎn)承擔(dān)者都明其含義并找出其中的錯(cuò)誤,遺憾或其它不足的地方。 d.模塊的獨(dú)立性:是指軟件系統(tǒng)中每個(gè)模塊只涉及軟件要求的具體的子功能,而和軟件系統(tǒng)中其他的模塊的接口是簡單的。 1.4參考資料 a.《實(shí)用軟件工程》(第二版)鄭人杰,殷人昆,陶永雷。清華大學(xué)出版社,1997。b.《JAVA網(wǎng)絡(luò)高級(jí)編程》金勇華,曲俊生。人民郵電出版社,2001。 c.《JBUILDER培訓(xùn)教程》Borland software corporation。機(jī)械工業(yè)出版社,2002。 2.任務(wù)概述 2.1目標(biāo) (1)完善目前火車售票系統(tǒng),使之能跟上時(shí)代的發(fā)展。同時(shí)通過實(shí)踐來提高自己的動(dòng)手能 三、需求規(guī)格說明書 (2)應(yīng)用范圍:理論上能夠?qū)崿F(xiàn)于鐵路部門的售票系統(tǒng),其目的在于在原有的系統(tǒng)基礎(chǔ)使得火車售票便捷化,以期實(shí)現(xiàn)完善日常生活中火車售票的各種缺陷。 (3)可實(shí)現(xiàn)旅客對(duì)于火車票的查詢與購買功能,售票員則可實(shí)現(xiàn)查詢、添加和刪除等功能;對(duì)于所查詢的車次結(jié)果提供列表顯示輸出;有一定的安全機(jī)制,普通旅客不能對(duì)車次信息隨意刪改,只有授權(quán)的售票員可通過密碼識(shí)別進(jìn)行維護(hù)。 2.2運(yùn)行環(huán)境 操作系統(tǒng):Microsoft Windows 2000 Advanced Server 支持環(huán)境:IIS 5.0 數(shù) 據(jù) 庫:Microsoft SQL Server 2000 2.3條件與限制 一個(gè)更完善的火車票售票系統(tǒng),應(yīng)提供更為便捷與強(qiáng)大的查詢購買功能,如相應(yīng)的網(wǎng)絡(luò)操作及服務(wù),由于開發(fā)時(shí)間和計(jì)算機(jī)數(shù)量有限,該系統(tǒng)并未提供這一功能,對(duì)于信息的保護(hù)手段僅限制于設(shè)置用戶級(jí)別,以記名提供數(shù)據(jù)文件的備份,比較簡單,不能防止惡意的破壞,安全性能有待進(jìn)一步完善。 3.?dāng)?shù)據(jù)描述 3.1靜態(tài)數(shù)據(jù) 火車票:列車車號(hào) (int SerialNumber) 列車始發(fā)時(shí)間(struct time SetOut) 列車始發(fā)站(char DeparturePoint) 列車終點(diǎn)站(char TerminalPoint) 票務(wù):列車車號(hào) (int SerialNumber) 已售出車票票數(shù)(int FixedNumber) 額定載量(int FixNumber) 售票員:用戶名(char name) 密碼(char password)3.2動(dòng)態(tài)數(shù)據(jù) 輸入數(shù)據(jù):根據(jù)界面提示,鍵盤輸入操作; 查詢方式:查詢車次、查詢始發(fā)站; 三、需求規(guī)格說明書 旅客購買時(shí)的票務(wù)信息,售票員添加、購票、退票時(shí)的票務(wù)信息; 售票員備份數(shù)據(jù)恢復(fù)所需的數(shù)據(jù)備份文件; 售票員操作需密碼,旅客操作受限; 輸出信息:查詢車次確定的數(shù)據(jù)庫記錄的子集; 統(tǒng)計(jì)結(jié)果; 車次信息錄入、刪除(成功或失?。?; 車次信息查詢、購買的操作結(jié)果; 數(shù)據(jù)備份輸出的數(shù)據(jù)備份文件; 內(nèi)部數(shù)據(jù):查詢操作建立的索引; 3.3數(shù)據(jù)庫介紹 數(shù)據(jù)庫采用Microsoft Access數(shù)據(jù)庫 3.4數(shù)據(jù)詞典 《火車售票系統(tǒng)》的總體功能如下: 車票的售出; 車票的退還; 車票信息的查詢; 車票的增刪改; 售票員查詢統(tǒng)計(jì)車票信息; 售票系統(tǒng)數(shù)據(jù)備份; 售票管理者口令修改; 1.售票員登陸系統(tǒng):(1)數(shù)據(jù)流圖 售票退票選擇檢驗(yàn)錯(cuò)誤售票員選擇用戶名密碼身份驗(yàn)證售票員信息密碼正確登陸系統(tǒng)選擇選擇選擇授權(quán)信息表查詢錄入新的班次信息 (2)數(shù)據(jù)詞典 ? 數(shù)據(jù)源點(diǎn)及匯點(diǎn)描述: ① 名稱:售票員 簡要描述:管理售票員信息 有關(guān)數(shù)據(jù)流:用戶名、密碼、系統(tǒng)選擇:售票系統(tǒng)、退票系統(tǒng)、查詢系統(tǒng)、錄入信息系統(tǒng) 數(shù)目:1 三、需求規(guī)格說明書 ? 加工邏輯詞條描述: ① 加工名:身份檢驗(yàn) 加工編號(hào):1 簡要描述:檢驗(yàn)用戶身份 輸入數(shù)據(jù)流:用戶名、密碼 輸出數(shù)據(jù)流:密碼正確、身份驗(yàn)證錯(cuò)誤 加工邏輯: IF 用戶名為空 THEN 發(fā)出“用戶名為空錯(cuò)誤” ELSE IF 密碼為空 THEN 發(fā)出“密碼為空錯(cuò)誤” ELSE IF 用戶名和密碼不符 THEN 發(fā)出“用戶名和密碼不匹配錯(cuò)誤” ENDIF ENDIF ENDIF ENDIF ? 數(shù)據(jù)流名詞條描述: ① 數(shù)據(jù)流名:用戶名 說明:售票員姓名 數(shù)據(jù)流來源:售票員 數(shù)據(jù)流去向:身份檢驗(yàn) 數(shù)據(jù)流組成:用戶名=字符型字符串 ② 數(shù)據(jù)流名:密碼 說明:與用戶名相匹配的密碼 數(shù)據(jù)流來源:售票員 數(shù)據(jù)流去向:身份檢驗(yàn) 數(shù)據(jù)流組成:密碼=短整型字符串 每個(gè)數(shù)據(jù)量流通量: ③ 數(shù)據(jù)流名:出錯(cuò)信息 說明:用于指示身份驗(yàn)證錯(cuò)誤的信息 數(shù)據(jù)流來源:身份檢驗(yàn) 數(shù)據(jù)流去向:售票員 數(shù)據(jù)流組成:出錯(cuò)信息=任意字符串 ④ 數(shù)據(jù)流名:系統(tǒng)名稱 說明:系統(tǒng)的名稱 數(shù)據(jù)流來源: 數(shù)據(jù)流去向:選擇 數(shù)據(jù)流組成: ? 數(shù)據(jù)文件詞條描述: ① 數(shù)據(jù)文件名:授權(quán)信息表 簡述:存放售票員信息 輸入數(shù)據(jù): 輸出數(shù)據(jù):售票員信息 數(shù)據(jù)文件組成:授權(quán)信息表由“售票員信息”組成 三、需求規(guī)格說明書 2.售票員相關(guān)操作(售票、退票、查詢、錄入) 票務(wù)信息表車票信息車票信息售票退票選擇檢驗(yàn)錯(cuò)誤售票員選擇用戶名密碼身份驗(yàn)證售票員信息密碼正確登陸系統(tǒng)選擇選擇選擇授權(quán)信息表查詢車票信息錄入新的班次信息車票信息列車信息表 (2):數(shù)據(jù)詞典: ? 數(shù)據(jù)源點(diǎn)及匯點(diǎn)描述: 1 名稱:售票員 ○簡要描述:管理售票員信息 有關(guān)數(shù)據(jù)流:用戶名、密碼 數(shù)目:1 ? 加工邏輯詞條描述: 1加工名:身份檢驗(yàn) ○加工編號(hào):1 簡要描述:檢驗(yàn)用戶身份 輸入數(shù)據(jù)流:用戶名、密碼 輸出數(shù)據(jù)流:密碼正確、身份驗(yàn)證錯(cuò)誤 2加工名:售票 ○加工編號(hào):2 簡要描述:根據(jù)所讀入的操作信息,售出火車票 輸入數(shù)據(jù)流:操作信息,火車票信息 輸出數(shù)據(jù)流:火車票信息 加工邏輯:根據(jù)所讀入的操作信息,售出火車票 ? 數(shù)據(jù)流名詞條描述: 數(shù)據(jù)流名:用戶名 ○ 三、需求規(guī)格說明書 說明:售票員的姓名 數(shù)據(jù)流來源:售票員 數(shù)據(jù)流去向:身份檢驗(yàn) 數(shù)據(jù)流組成:用戶名=字符型字符串 2數(shù)據(jù)流名:密碼 ○說明:與職工名稱相匹配的密碼 數(shù)據(jù)流來源:售票員 數(shù)據(jù)流去向:身份檢驗(yàn) 數(shù)據(jù)流組成:密碼=短整型字符串 每個(gè)數(shù)據(jù)量流通量: 3數(shù)據(jù)流名:車票信息 ○說明:車票信息 數(shù)據(jù)流來源:售票員 數(shù)據(jù)流去向:列車信息表 ? 數(shù)據(jù)文件詞條描述: ① 數(shù)據(jù)文件名:列車信息表 簡述:車票信息 輸入數(shù)據(jù):車票信息 輸出數(shù)據(jù): 數(shù)據(jù)文件組成:列車信息表由“車票信息”組成 存儲(chǔ)方式:關(guān)鍵碼 存取頻率:頻繁 2數(shù)據(jù)文件名:票務(wù)信息表 ○簡述:票務(wù)信息 輸入數(shù)據(jù):票務(wù)信息 輸出數(shù)據(jù): 數(shù)據(jù)文件組成:票務(wù)信息表由“列車號(hào)、已售票、剩余票”組成 存儲(chǔ)方式:關(guān)鍵碼 存取頻率:頻繁 3.旅客查詢購票過程:(1)數(shù)據(jù)流圖 三、需求規(guī)格說明書 旅客 登錄系統(tǒng)選擇選擇選擇選擇訂票退票查詢 (2)數(shù)據(jù)詞典: ● 數(shù)據(jù)源點(diǎn)及匯點(diǎn)描述: 名稱:旅客 簡要描述:訂票,退票,查詢 有關(guān)數(shù)據(jù)流:系統(tǒng)選擇:訂票系統(tǒng)、退票系統(tǒng)、查詢系統(tǒng) ●數(shù)據(jù)流名詞條描述: ⑤ 數(shù)據(jù)流名:系統(tǒng)名稱 說明:系統(tǒng)的名稱 數(shù)據(jù)流來源: 數(shù)據(jù)流去向:選擇 數(shù)據(jù)流組成: 3.5數(shù)據(jù)采集 數(shù)據(jù)采集采用鍵盤輸入 4.功能需求 4.1功能劃分 該軟件具有如下主要功能: 1.瀏覽功能 2.查詢功能 3.添加功能 4.修改功能 5.刪除功能 三、需求規(guī)格說明書 6.授權(quán)功能 4.2功能描述 1.瀏覽功能 列出當(dāng)前數(shù)據(jù)庫文件中車票的所有記錄 可選定一項(xiàng)紀(jì)錄,顯示說有域 2.查詢功能 車次信息匹配查詢 始發(fā)站信息匹配查詢 3.添加功能 增加一條車票的信息 4.修改功能 修改某一已存在的記錄內(nèi)容,提供確認(rèn)機(jī)制 5.刪除功能 刪除一條記錄,提供確認(rèn)機(jī)制 6.授權(quán)功能 授權(quán)票務(wù)管理人員修改數(shù)據(jù)的權(quán)限 5.性能需求 5.1數(shù)據(jù)精確度 查詢時(shí)應(yīng)保證查全率,所有在相應(yīng)域中包含查詢車次的記錄都應(yīng)能查到,同時(shí)保證查準(zhǔn)率。 5.2時(shí)間特性 一般操作的相應(yīng)時(shí)間應(yīng)在1~2秒內(nèi) 5.3適應(yīng)性 滿足運(yùn)行環(huán)境在允許操作系統(tǒng)之間的安全轉(zhuǎn)換和雨其它又能夠用軟件的獨(dú)立運(yùn)行要求。 6.運(yùn)行需求 6.1用戶界面 采取對(duì)話框方式,多功能窗口運(yùn)行 三、需求規(guī)格說明書 6.2硬件接口 (1)硬件接口:支持x86系列PC機(jī) (2)網(wǎng)絡(luò)硬件接口要求:現(xiàn)實(shí)中要求具有高速以太網(wǎng)組網(wǎng)一實(shí)現(xiàn)聯(lián)網(wǎng)銷售,但是在理論實(shí)驗(yàn)驗(yàn)證軟件本身的目的來看,無需網(wǎng)絡(luò)通訊接口。 6.3軟件接口 運(yùn)行于Windows2000及更高版本并裝有JAVA虛擬機(jī)的操作系統(tǒng)之上。 6.4故障處理 正常使用時(shí)不用出錯(cuò),對(duì)于用戶的輸入錯(cuò)誤應(yīng)及時(shí)給出適當(dāng)?shù)母恼畔⑻崾?,若運(yùn)行遇到不可恢復(fù)的系統(tǒng)錯(cuò)誤,也必須保證數(shù)據(jù)庫完好無損。 7.其它需求 (1)可用性:該軟件也可以通過單步跟蹤的操作進(jìn)行檢查處理。 (2)安全性:由于軟件運(yùn)行數(shù)據(jù)放在數(shù)據(jù)庫中,所以參數(shù)不容易被錯(cuò)改、破壞,萬一參數(shù)受到破壞也不會(huì)影響源程序。 (3)可維護(hù)性:該軟件利用數(shù)據(jù)庫進(jìn)行編程,系統(tǒng)結(jié)構(gòu)由程序基本確定,大量的參數(shù)及文本內(nèi)容全部放于數(shù)據(jù)庫中。修改、更新數(shù)據(jù)只要在數(shù)據(jù)庫進(jìn)行修改添加,而不需要對(duì)系統(tǒng)結(jié)構(gòu)進(jìn)行修改,這樣系統(tǒng)維護(hù)性、升級(jí)都十分方便。 (4)兼容性:由于尚未測試,故無法對(duì)兼容性進(jìn)行評(píng)析。 二.需求分析 經(jīng)過對(duì)程序設(shè)計(jì)題目的分析可知,整個(gè)程序的設(shè)計(jì)實(shí)現(xiàn)大致分為八個(gè)模塊,每一個(gè)模塊對(duì)應(yīng)一個(gè)函數(shù)。在這些函數(shù)當(dāng)中,添加車次數(shù)據(jù)函數(shù)、售票函數(shù)、查詢總額函數(shù)的實(shí)現(xiàn)嚴(yán)格按照題目的要求,而顯示時(shí)間函數(shù)和顯示車次函數(shù)屬于附加功能。讀取文件函數(shù)和保存信息函數(shù)對(duì)其它函數(shù)的實(shí)現(xiàn)起輔助作用,主函數(shù)及菜單函數(shù)控制程序的整體運(yùn)行。 1.添加車次函數(shù) 主要實(shí)現(xiàn)程序最初運(yùn)行時(shí)車次的錄入 2.旅客買票函數(shù) 實(shí)現(xiàn)的功能是按照旅客所需車次幾所購買車票的數(shù)目 3.查詢車票總額 按照題目的具體要求實(shí)現(xiàn)的是總額的查詢 4.顯示函數(shù) 實(shí)現(xiàn)的是顯示目前所有的有效車次信息 除上面介紹的功能之外,程序還具有顯示當(dāng)?shù)貢r(shí)間,以及退出功能,可以在程序的一次運(yùn)行當(dāng)中循環(huán)執(zhí)行所有的功能,并根據(jù)需要終止程序的執(zhí)行。 每一個(gè)車次都包含車次、日期,始發(fā)、終點(diǎn)以及所受票數(shù)和所需費(fèi)用,在程序當(dāng)中,將車次類型定義為結(jié)構(gòu)體類型,添加的車次信息直接寫入E盤的train.txt文件中,其它函數(shù)每次對(duì)車次記錄的訪問,其數(shù)據(jù)來源都是train.txt文件,這樣做不但可以保證學(xué)生數(shù)據(jù)的一致性,而且可以對(duì)車次數(shù)據(jù)進(jìn)行永保存,保證每次運(yùn)行程序都可以采用原來的數(shù)據(jù) 近年來,中國乃至世界的人口急劇增加,人口流動(dòng)量也隨之增加,火車作為一種便捷且相對(duì) 比較便宜的交通工具也受到廣大出行者的青睞,為了減輕鐵道部售票的壓力,特此編寫此程序,便于乘客在網(wǎng)上購票。 3.1.2 軟件項(xiàng)目概述 本系統(tǒng)擁有四大功能,分別是查詢、訂票、改簽和退票。在使用不能系統(tǒng)之前,用戶必須注 冊(cè)用戶名,用戶名必須包括乘客的身份證號(hào),這樣可以實(shí)行實(shí)名制購票,防止在購票高峰,非法 分子以高價(jià)倒賣火車票,以此來保證乘客的利益。用戶在利用用戶名登陸本系統(tǒng)以后,方可經(jīng)行 查詢、訂票、改簽和退票的相關(guān)操作。其中,查詢?cè)试S乘客對(duì)自己所需乘坐的列車經(jīng)行查詢,來 判斷是否有票,如果有票,乘客則可以選擇訂票,訂票以后,用戶的信息將被修改,用戶信息將 會(huì)添加剛才購買的火車票的列車車次以及起始地和目的地。如果乘客已經(jīng)購票,需要換票,則必 須先查詢是否有需要換的票,如果有票,則可以經(jīng)行換票操作,同樣,用戶信息將也會(huì)被修改。 當(dāng)乘客已經(jīng)訂票,需要退票,點(diǎn)擊退票,則可以退票,但同時(shí)會(huì)彈出 需要用戶支付手續(xù)費(fèi)的窗 口,用戶支付完手續(xù)費(fèi)后,退票成功,用戶信息將被修改,推掉的車票對(duì)應(yīng)的列車號(hào)以及相關(guān)信 息將從用戶信息中刪除。 3.2 訂票流程設(shè)計(jì) 3.2.1 訂票流程描述 乘客在使用系統(tǒng)之前,首先注冊(cè)新用戶,需要輸入自己相關(guān)個(gè)人信息,包括自己的身份證號(hào) 碼,名稱,登陸密碼等。當(dāng)已經(jīng)注冊(cè)好用戶以后,用戶可以利用自己的證件號(hào)碼和登陸密碼登陸 火車票訂票系統(tǒng),乘客需先查詢自己所需要乘坐的列車,看是否有票,如果有票則可以選擇訂票,進(jìn)行訂票;如果用戶已經(jīng)購票,需要換票,則需要查詢目標(biāo)票看其是否有剩余,如果有剩余,則 可以進(jìn)行換票,當(dāng)用戶輸入已擁有的火車票的列車號(hào)點(diǎn)擊退票,則可以經(jīng)行退票。當(dāng)然,以上操 作都必須建立在用戶已登錄的基礎(chǔ)上 階段通過對(duì)系統(tǒng)目標(biāo)的初步調(diào)研和分析,提出可行性方案并進(jìn)行論證。我們?cè)谶@ 里主要從技術(shù)可行性、經(jīng)濟(jì)可行性和操作可行性三方面進(jìn)行分析。2.1.1 經(jīng)濟(jì)可行性 本系統(tǒng)其他應(yīng)用軟件、硬件系統(tǒng)也易于獲得.因此 , 開發(fā)成本較低。而引進(jìn)使用本系 統(tǒng)后,與傳統(tǒng)方式相比,具有高效率、低成本、高質(zhì)量的特點(diǎn),可以節(jié)省不少人力、物 力及財(cái)力。所以,從經(jīng)濟(jì)的角度來看,該系統(tǒng)可行。2.1.2 技術(shù)可行性 開發(fā)工具: VS2005 數(shù)據(jù)庫環(huán)境: SQL Server 2005 系統(tǒng)環(huán)境: Microsoft Windows 2000 或以上版本。 系統(tǒng)實(shí)現(xiàn)依靠相對(duì)熟悉的 c 語言和 SQL Server2008 數(shù)據(jù)庫系統(tǒng),其基本操作實(shí)質(zhì)還 是對(duì)數(shù)據(jù)庫進(jìn)行添加、刪除、查找等操作。2.1.3 操作可行性 系統(tǒng)采用菜單式,實(shí)現(xiàn)用戶與數(shù)據(jù)庫的交互,界面簡潔友好,操作方便。2.2 需求分析 需求分析是軟件設(shè)計(jì)的一個(gè)重要的環(huán)節(jié)。本階段對(duì)訂票系統(tǒng)的應(yīng)用情況作全面調(diào) 查,以確定系統(tǒng)目標(biāo),并對(duì)系統(tǒng)所需要的基礎(chǔ)數(shù)據(jù)以及數(shù)據(jù)處理要求進(jìn)行分析,從而確 定用戶的需求。用戶對(duì)系統(tǒng)的需求我們從以下幾方面進(jìn)行分析。2.2.1 功能需求 本網(wǎng)上售票系統(tǒng)應(yīng)該具備如下功能: 1.查詢 分為對(duì)車次信息的查詢和客戶對(duì)已訂車票信息的查詢。要求: 1)對(duì)車次的查詢,可以按照發(fā)車車次進(jìn)行查詢; 2)車次信息包括:車號(hào)、出發(fā) 地、目的地、發(fā)車日期、開出時(shí)刻、票價(jià)。3)座位類型設(shè)定。4)車次信息只允許用戶查詢,不能修改。2.添加車票 通過查詢系統(tǒng),客戶根據(jù)自己的需求找到滿意的車次,再輸入個(gè)人信息后直接通過 網(wǎng)上售票確定已預(yù)訂選中的車票。要求 : 售票記錄應(yīng)包括:會(huì)員名、車號(hào)、發(fā)車日期、訂購票數(shù)、總價(jià)。3.退票 可退票,通過查詢系統(tǒng),客戶可以根據(jù)自己的名字找到自己的訂票信息,通過退票 模塊退去已購車票。2.2.2 數(shù)據(jù)需求 信息需求,即在系統(tǒng)中需要處理哪些數(shù)據(jù)。根據(jù)對(duì)火車站網(wǎng)上訂票系統(tǒng)的分析,本 系統(tǒng)的信息需求如表 2-1 所示。表 2-1 信息輸入輸出 信息輸 入 信息 處理 信息 輸出 用戶輸 入所需車次 檢索 系統(tǒng)數(shù)據(jù)庫 符合 用戶需求的車次及相關(guān) 信息 用戶輸 入個(gè)人信息及所需 購的車 票信息 更新 系統(tǒng)中的訂票信息,將新 信息存入系統(tǒng)數(shù)據(jù)庫 操作 反饋(如找零)2.2.3 性能需求 為了保證系統(tǒng)能夠長期、安全、穩(wěn)定、可靠、高效的運(yùn)行,本系統(tǒng)應(yīng)該滿足以下的 性能需求。1.準(zhǔn)確性和及時(shí)性 系統(tǒng)處理的準(zhǔn)確性和及時(shí)性是系統(tǒng)的必要性能。系統(tǒng)應(yīng)能及時(shí)而且準(zhǔn)確的根據(jù)用戶 權(quán)限及所輸入的信息做出響應(yīng)。 由于本系統(tǒng)的查詢功能對(duì)于整個(gè)系統(tǒng)的功能和性能完成 舉足輕重。作為系統(tǒng)的很多數(shù)據(jù)來源,而車票的數(shù)量和時(shí)間又影響用戶的決策活動(dòng),其 準(zhǔn)確性和及時(shí)性很大程度上決定了系統(tǒng)的成敗。在系統(tǒng)開發(fā)過程中,必須采用一定的方 法保證系統(tǒng)的準(zhǔn)確性和及時(shí)性。2.易用性 本系統(tǒng)是直接面對(duì)用戶的,而用戶往往對(duì)計(jì)算機(jī)并不是非常熟悉。這就要求系統(tǒng)能 夠提供良好的用戶接口,易用的人機(jī)交互界面。要實(shí)現(xiàn)這一點(diǎn),就要求系統(tǒng)應(yīng)該盡量使 用用戶熟悉的術(shù)語和中文信息的界面,從而保證系統(tǒng)的易用性。 火車票管理系統(tǒng)一、課題內(nèi)容和要求 改系統(tǒng)要求實(shí)現(xiàn)一個(gè)簡單、實(shí)用的火車票管理程序,主要功能包括火車票數(shù)據(jù)的錄入、查找、刪除、顯示、售票、退票等。所有火車票數(shù)據(jù)都要利用文件系統(tǒng)保存,以備系統(tǒng)下次運(yùn)行時(shí)使用。通過此課題,熟練掌握文件、數(shù)組、指針的各種操作,以及一些基本算法思想的應(yīng)用。 二、需求分析 功能框架圖:(見圖2-1) 火車票管理系統(tǒng) 錄入 查找 刪除 排序 售票 退票 保存 圖2-1。 1.新增火車票數(shù)據(jù)記錄:預(yù)先建立一個(gè)txt文檔,存入數(shù)據(jù),然后在程序中讀取文檔。 2.查找火車票數(shù)據(jù)(可按車次,發(fā)車時(shí)間、起點(diǎn)站、終點(diǎn)站等查找)。 3.刪除火車票數(shù)據(jù)記錄(先查找,再刪除。若查找出多條記錄,則進(jìn)一步提示用戶選擇記錄的車次,再刪除)。 4.對(duì)火車票排序(可按車次、發(fā)車時(shí)間、起點(diǎn)站、終點(diǎn)站等排序。)。 5.顯示當(dāng)前所有火車票信息列表。 6.售票(先查找,當(dāng)確定車次后,根據(jù)售票張數(shù)對(duì)該車次的已售票人數(shù)進(jìn)行修改)。 7.退票(售票的逆處理,過程與售票類似)。 8.保存火車票數(shù)據(jù)到文件中。 9.從文件中讀入火車票數(shù)據(jù)。 三、概要設(shè)計(jì) 1)主要結(jié)構(gòu)體: struct time { int hour; int minutes; }; struct ticket { char SerialNumber[10]; struct time SetOut; char DeparturePoint[MAX]; char TerminalPoint[MAX]; float LastTime; int FixNumber; int FixedNumber; }train[N]; 2)主要函數(shù)流程圖: l 載入函數(shù):用于從文本中載入信息。(見圖3-1) 打開文本 能否打開 讀入數(shù)據(jù) 是否結(jié)束 結(jié)束 否 否 開始 開始 否 是 是 讀入車次 是否符合輸出信息 結(jié)束 是 圖3-2 圖3-1 l 查找函數(shù):利用輸入的車次或站點(diǎn)進(jìn)行順序查找并將找到的信息輸出。(見圖3-2) l 刪除函數(shù):先查找出要?jiǎng)h除的信息再刪除。(見圖3-3) 否 否 是 無法訂票 人數(shù)加一 是否超載 否 圖3-4 結(jié)束 開始 讀入車次 是否誤點(diǎn) 否 圖3-3 是 是 否 是否符合讀入車次 開始 記錄下標(biāo)i i=i+1,i++ i<車次總數(shù)-1 結(jié)束 l 售票退票函數(shù):先判斷該車是否已發(fā)車,若未發(fā)車且人未滿則訂票成功,否則無法訂票退票。(見圖3-4) l 備份文件函數(shù):將文件內(nèi)容存儲(chǔ)到用戶給定的地址中(見圖3—5) 圖3-5 l 排序函數(shù)(見圖3-6) 圖3-6 四、源程序代碼 #include #include #include #include #include #include const int MAX=20; const int N=50; const int MAXFILENAME=100; enum {FALSE,TRUE}; struct time { int hour; int minutes; }; struct ticket { char SerialNumber[10]; struct time SetOut; char DeparturePoint[MAX]; char TerminalPoint[MAX]; float LastTime; int FixNumber; int FixedNumber; }train[N]; int RecordNumber; int FLAG=FALSE; /**********************************************/ int ShowMessage(void); //載入原始數(shù)據(jù) void mainmenu(void); //主菜單 void InsertMessage(void); //錄入班次信息 void SearchMenu(void); //查詢路線子菜單 void SearchByNumber(void); //按班次號(hào)查詢 void SearchByAddress(void); //按終點(diǎn)站查詢 void cancle(void);//刪除數(shù)據(jù) void selection(ticket *pa,int n);//排序 void TicketManagement(void); //車票售出與退回 void TicketOrder(void); //售票 void TicketDelete(void); //退票 void exit(void); //退出該系統(tǒng) void SaveRecord(ticket x); //儲(chǔ)存信息到文件中 /********************************************/ int main(void) { do{ mainmenu(); }while(FLAG==FALSE); return 0; } void mainmenu(void) { system(“mode con: cols=140 lines=130“); char functionNumber; printf(“ 火車票管理系統(tǒng)\n\n“); printf(“============================================================================\n“); printf(“ 1.錄入班次信息\t\n“); printf(“ 2.顯示所有車票信息列表\t\n“); printf(“ 3.查詢火車票數(shù)據(jù)\t\n“); printf(“ 4.刪除火車票數(shù)據(jù)記錄\t\n“); printf(“ 5.按行車時(shí)間排序\t\n“); printf(“ 6.售票與退票系統(tǒng)\t\n“); printf(“ 7.退出該系統(tǒng)\t\n“); printf(“============================================================================\n“); printf(“請(qǐng)選擇你所需要的功能:“); scanf(“%c“,&functionNumber); switch(functionNumber) { case '1': { InsertMessage(); printf(“\n按任意鍵回主菜單......\n“); getchar(); getchar(); } break; case '2': { RecordNumber=ShowMessage(); printf(“\n按任意鍵回主菜單......\n“); getchar(); getchar(); } break; case '3': { SearchMenu(); printf(“\n按任意鍵回主菜單......\n“); getchar(); getchar(); } break; case '4': { cancle(); printf(“\n按任意鍵回主菜單......\n“); getchar(); getchar(); } break; case '5': { selection(train,RecordNumber); printf(“班次\t發(fā)車時(shí)間\t起點(diǎn)\t終點(diǎn)\t行車時(shí)間(小時(shí))\t額定載量\t已定票人數(shù)\n“); int i; for(i=0;i { printf(“%s\t%d:%d\t\t“,train[i].SerialNumber,train[i].SetOut.hour,train[i].SetOut.minutes); printf(“%s\t%s\t\t%.1f\t %d\t\t%d\n“,train[i].DeparturePoint,train[i].TerminalPoint,train[i].LastTime,train[i].FixNumber,train[i].FixedNumber); } printf(“\n按任意鍵回主菜單......\n“); getchar(); getchar(); } break; case '6': { TicketManagement(); getchar(); getchar(); } break; case '7': { int i; FLAG=TRUE; for(i=0;i { SaveRecord(*(train+i)); } exit(); } break; default: { printf(“輸入錯(cuò)誤,請(qǐng)確保你的輸入為1--7.\n“); printf(“按任意鍵回主菜單......\n“); getchar(); getchar(); } }//switch ends FLAG=FALSE; } void InsertMessage(void) { FILE *fp; char filename[MAXFILENAME]; int i; printf(“請(qǐng)輸入文件名或者文件路徑名:“); scanf(“%s“,filename); if((fp=fopen(filename,“r“))==NULL) { printf(“文件%s不可讀,請(qǐng)確認(rèn)文件%s存在或者文件路徑正確.\n\n“,filename,filename); mainmenu(); } for(i=RecordNumber;!feof(fp)&&!ferror(fp);i++) { fscanf(fp,“%s%d%d“,&train[i].SerialNumber,&train[i].SetOut.hour,&train[i].SetOut.minutes); fscanf(fp,“%s%s%f%d%d“,&train[i].DeparturePoint,&train[i].TerminalPoint,&train[i].LastTime,&train[i].FixNumber,&train[i].FixedNumber); } RecordNumber=i; /*******************************輸出更新后的訂票記錄************************************************************/ printf(“班次\t發(fā)車時(shí)間\t起點(diǎn)\t終點(diǎn)\t行車時(shí)間(小時(shí))\t額定載量\t已定票人數(shù)\n“); for(i=0;i { printf(“%s\t%d:%d\t\t“,train[i].SerialNumber,train[i].SetOut.hour,train[i].SetOut.minutes); printf(“%s\t%s\t\t%.1f\t %d\t\t%d\n“,train[i].DeparturePoint,train[i].TerminalPoint,train[i].LastTime,train[i].FixNumber,train[i].FixedNumber); } fclose(fp); } int ShowMessage(void) { int i; FILE *fp; if((fp=fopen(“add.txt“,“r“))==NULL) { printf(“讀取數(shù)據(jù)失敗,請(qǐng)檢查文件add.txt是否存在.\n“); exit(-1); } for(i=RecordNumber;!feof(fp)&&!ferror(fp);i++) { fscanf(fp,“%s%d%d“,&train[i].SerialNumber,&train[i].SetOut.hour,&train[i].SetOut.minutes); fscanf(fp,“%s%s%f%d%d“,&train[i].DeparturePoint,&train[i].TerminalPoint,&train[i].LastTime,&train[i].FixNumber,&train[i].FixedNumber); } int count=i; printf(“班次\t發(fā)車時(shí)間\t起點(diǎn)\t終點(diǎn)\t行車時(shí)間(小時(shí))\t額定載量\t已定票人數(shù)\n“); for(i=0;i { printf(“%s\t%d:%d\t\t“,train[i].SerialNumber,train[i].SetOut.hour,train[i].SetOut.minutes); printf(“%s\t%s\t\t%.1f\t %d\t\t%d\t“,train[i].DeparturePoint,train[i].TerminalPoint,train[i].LastTime,train[i].FixNumber,train[i].FixedNumber); printf(“\n“); } return count; } void SearchMenu(void) { system(“mode con: cols=140 lines=130“); char functionNumber; printf(“ 查詢子菜單\n“); printf(“============================================================================\n“); printf(“ 1.按班次號(hào)查詢\t\n“); printf(“ 2.按終點(diǎn)站查詢\t\n“); printf(“ 3.返回主菜單\t\n“); printf(“============================================================================\n“); printf(“請(qǐng)選擇你所需要的功能:“); scanf(“%*c%c“,&functionNumber); switch(functionNumber) { case '1':SearchByNumber();break; case '2':SearchByAddress();break; case '3': getchar(); mainmenu(); break; default: printf(“輸入錯(cuò)誤,請(qǐng)確保你的輸入為1--3.\n“); printf(“按任意鍵回查詢子菜單......\n“); getchar(); getchar(); SearchMenu(); } } void SearchByNumber(void) { int i; char Number[MAX]; printf(“請(qǐng)輸入班次號(hào):“); scanf(“%s“,&Number); printf(“班次\t發(fā)車時(shí)間\t起點(diǎn)\t終點(diǎn)\t行車時(shí)間(小時(shí))\t額定載量\t已定票人數(shù)\n“); for(i=0;i { //對(duì)比終點(diǎn)站記錄,找到并輸出 if((strcmp(Number,train[i].SerialNumber))==0) { printf(“%s\t%d:%d\t\t“,train[i].SerialNumber,train[i].SetOut.hour,train[i].SetOut.minutes); printf(“%s\t%s\t\t%.1f\t %d\t\t%d\n“,train[i].DeparturePoint,train[i].TerminalPoint,train[i].LastTime,train[i].FixNumber,train[i].FixedNumber); } } } void SearchByAddress(void) { int i; char Address[MAX]; printf(“請(qǐng)輸入終點(diǎn)站的名稱:“); scanf(“%s“,&Address); printf(“班次\t發(fā)車時(shí)間\t起點(diǎn)\t終點(diǎn)\t行車時(shí)間(小時(shí))\t額定載量\t已定票人數(shù)\n“); for(i=0;i { //對(duì)比終點(diǎn)站記錄,找到并輸出 if((strcmp(Address,train[i].TerminalPoint))==0) { printf(“%s\t%d:%d\t\t“,train[i].SerialNumber,train[i].SetOut.hour,train[i].SetOut.minutes); printf(“%s\t%s\t\t%.1f\t %d\t\t%d\n“,train[i].DeparturePoint,train[i].TerminalPoint,train[i].LastTime,train[i].FixNumber,train[i].FixedNumber); } } } void cancle(void) { SearchMenu(); int i,j; char m[MAX]; printf(“請(qǐng)輸入要?jiǎng)h除的班次:“); scanf(“%s“,&m); for(i=0;i { if(i==RecordNumber) { printf(“對(duì)不起,沒有這趟車\n“); } } for(j=i;j { train[j]=train[j+1]; } printf(“刪除成功\n“); } void selection(ticket *pa,int n) { int i,k,index; struct ticket temp; for(k=0;k { index=k; for(i=k+1;i if(pa[i].LastTime index=i; if(index!=k) { temp=pa[index]; pa[index]=pa[k]; pa[k]=temp; } } } void TicketManagement(void) { char functionNumber; system(“mode con: cols=140 lines=130“); printf(“ 訂票與退票菜單\n“); printf(“============================================================================\n“); printf(“ 1.訂票\t\n“); printf(“ 2.退票\t\n“); printf(“ 3.返回主菜單.\n“); printf(“============================================================================\n“); printf(“選擇你需要的功能:“); scanf(“%*c%c“,&functionNumber); switch(functionNumber) { case '1': { TicketOrder(); //getchar(); //getchar(); } break; case '2':TicketDelete();break; case '3': { getchar(); mainmenu(); } break; default: { printf(“輸入錯(cuò)誤,請(qǐng)確保你的輸入為1--3.\n“); printf(“按任意鍵回主菜單......\n“); getchar(); getchar(); mainmenu(); } } } void TicketOrder(void) { SearchMenu(); int i,j; char a[MAX]; printf(“請(qǐng)輸入要訂購的車票的班次:“); scanf(“%s“,&a); printf(“請(qǐng)輸入要訂購的車票的張數(shù):“); scanf(“%d“,&j); for(i=0;i { if((strcmp(a,train[i].SerialNumber))==0) { if(train[i].FixedNumber { (train[i].FixedNumber)+=j; printf(“你的訂票成功,請(qǐng)按時(shí)上車,謝謝使用!\n“); printf(“班次\t發(fā)車時(shí)間\t起點(diǎn)\t終點(diǎn)\t行車時(shí)間(小時(shí))\t額定載量\t已定票人數(shù)\n“); printf(“%s\t%d:%d\t\t“,train[i].SerialNumber,train[i].SetOut.hour,train[i].SetOut.minutes); printf(“%s\t%s\t\t%.1f\t %d\t\t%d\n“,train[i].DeparturePoint,train[i].TerminalPoint,train[i].LastTime,train[i].FixNumber,train[i].FixedNumber); } else printf(“對(duì)不起,票已賣完\n“); } } } void TicketDelete(void) { SearchMenu(); int i,j; char b[MAX]; printf(“請(qǐng)輸入要退購的車票的班次:“); scanf(“%s“,&b); printf(“請(qǐng)輸入要退購的車票的張數(shù):“); scanf(“%d“,&j); for(i=0;i { if((strcmp(b,train[i].SerialNumber))==0) { if(train[i].FixedNumber>=1) { train[i].FixedNumber-=j; printf(“退訂車票成功,謝謝使用!\n“); printf(“班次\t發(fā)車時(shí)間\t起點(diǎn)\t終點(diǎn)\t行車時(shí)間(小時(shí))\t額定載量\t已定票人數(shù)\n“); printf(“%s\t%d:%d\t\t“,train[i].SerialNumber,train[i].SetOut.hour,train[i].SetOut.minutes); printf(“%s\t%s\t\t%.1f\t %d\t\t%d\n“,train[i].DeparturePoint,train[i].TerminalPoint,train[i].LastTime,train[i].FixNumber,train[i].FixedNumber); } else printf(“對(duì)不起,今天的這趟車的票尚未賣出,無法完成退票!\n“); } } } void exit(void) { printf(“\n\n*********************謝謝使用本系統(tǒng),歡迎下次繼續(xù)使用***********************\n“); exit(0); } void SaveRecord(ticket x) { FILE *fp; if((fp=fopen(“add.txt“,“a“))==NULL) { printf(“打開文件%s失?。躰“,“add.txt“); exit(-1); } fprintf(fp,“\n%s\t%d\t%d\t\t“,x.SerialNumber,x.SetOut.hour,x.SetOut.minutes); fprintf(fp,“%s\t%s\t\t%.1f\t %d\t\t%d“,x.DeparturePoint,x.TerminalPoint,x.LastTime,x.FixNumber,x.FixedNumber); } 五、測試數(shù)據(jù)及其結(jié)果分析 顯示的主菜單界面: 火車票管理系統(tǒng) ============================================================================ 1.錄入班次信息 2.顯示所有車票信息列表 3.查詢火車票數(shù)據(jù) 4.刪除火車票數(shù)據(jù)記錄 5.按行車時(shí)間排序 6.售票與退票系統(tǒng) 7.退出該系統(tǒng) ============================================================================ 請(qǐng)選擇你所需要的功能: 1)錄入班次信息 輸入:1 輸出:請(qǐng)輸入文件名或者文件路徑名: 輸入:D:\\1.txt 輸出: 班次 發(fā)車時(shí)間 起點(diǎn) 終點(diǎn) 行車時(shí)間(小時(shí)) 額定載量 已定票人數(shù) k1111 8:30 南京 上海 4.0 300 200 k1234 10:20 上海 蘇州 2.0 200 t2222 12:40 長沙 上海 9.0 250 k2323 13:50 揚(yáng)州 南京 1.5 200 k1122 9:20 廣州 南京 20.0 300 170 按任意鍵回主菜單......2)顯示所有車票信息列表 輸入:2 輸出: 班次 發(fā)車時(shí)間 起點(diǎn) 終點(diǎn) 行車時(shí)間(小時(shí)) 額定載量 已定票人數(shù) k1111 8:30 南京 上海 4.0 300 200 k1234 10:20 上海 蘇州 2.0 200 t2222 12:40 長沙 上海 9.0 250 k2323 13:50 揚(yáng)州 南京 1.5 200 k1122 9:20 廣州 南京 20.0 300 170 按任意鍵回主菜單......3)查詢火車票記錄 輸入:3 輸出: 查詢子菜單 ============================================================================ 1.按班次號(hào)查詢 2.按終點(diǎn)站查詢 3.返回主菜單 ============================================================================ 請(qǐng)選擇你所需要的功能: 輸入:1 輸出:請(qǐng)輸入班次號(hào): 輸入:k1111 輸出: 班次 發(fā)車時(shí)間 起點(diǎn) 終點(diǎn) 行車時(shí)間(小時(shí)) 額定載量 已定票人數(shù) k1111 8:30 南京 上海 4.0 300 200 按任意鍵回主菜單......輸入:2 輸出:請(qǐng)輸入終點(diǎn)站的名稱: 輸入:上海 輸出: 班次 發(fā)車時(shí)間 起點(diǎn) 終點(diǎn) 行車時(shí)間(小時(shí)) 額定載量 已定票人數(shù) k1111 8:30 南京 上海 4.0 300 200 t2222 12:40 長沙 上海 9.0 250 按任意鍵回主菜單......4)刪除火車票數(shù)據(jù) 輸入:4 輸出:查詢子菜單 ============================================================================ 1.按班次號(hào)查詢 2.按終點(diǎn)站查詢 3.返回主菜單 ============================================================================ 請(qǐng)選擇你所需要的功能: (查找過程同上) 輸出:請(qǐng)輸入要?jiǎng)h除的班次: 輸入:t2222 輸出:刪除成功 按任意鍵回主菜單......5)按行車時(shí)間排序: 輸入:5 輸出: 班次 發(fā)車時(shí)間 起點(diǎn) 終點(diǎn) 行車時(shí)間(小時(shí)) 額定載量 已定票人數(shù) k2323 13:50 揚(yáng)州 南京 1.5 200 k1234 10:20 上海 蘇州 2.0 200 k1111 8:30 南京 上海 4.0 300 200 t2222 12:40 長沙 上海 9.0 250 k1122 9:20 廣州 南京 20.0 300 170 按任意鍵回主菜單......6)售票 輸入:6 輸出: 訂票與退票菜單 =================================================== 1.訂票 2.退票 3.返回主菜單 ================================================== 選擇你需要的功能: 輸入:1 輸出: 查詢子菜單 ======================================================================== 1.按班次號(hào)查詢 2.按終點(diǎn)站查詢 3.返回主菜單 ========================================================================= 請(qǐng)選擇你所需要的功能: (查詢過程同上) 輸出:請(qǐng)輸入需要訂購的車票班次 輸入:k1111 輸出:請(qǐng)輸入要訂購的車票張數(shù) 輸入:10 輸出: 您的訂票成功,請(qǐng)按時(shí)上車,謝謝使用! 班次 發(fā)車時(shí)間 起點(diǎn) 終點(diǎn) 行車時(shí)間(小時(shí)) 額定載量 已定票人數(shù) k1111 8:30 南京 上海 4.0 300 210 7)退票 輸入:6 輸出: 訂票與退票菜單 =================================================== 1.訂票 2.退票 3.返回主菜單 ================================================== 選擇你需要的功能: 輸入:2 輸出: 查詢子菜單 ======================================================================== 1.按班次號(hào)查詢 2.按終點(diǎn)站查詢 3.返回主菜單 ========================================================================= 請(qǐng)選擇你所需要的功能: (查詢過程同上) 輸出:請(qǐng)輸入需要退購的車票班次 輸入:k1111 輸出:請(qǐng)輸入要訂購的車票張數(shù) 輸入:5 退訂車票成功,謝謝使用! 班次 發(fā)車時(shí)間 起點(diǎn) 終點(diǎn) 行車時(shí)間(小時(shí)) 額定載量 已定票人數(shù) k1111 8:30 南京 上海 4.0 300 195 8)退出 輸入:7 輸出:****************謝謝使用本系統(tǒng),歡迎下次繼續(xù)使用**************** 結(jié)果分析:(1).若輸入數(shù)字不在1——7之間,則會(huì)提示錯(cuò)誤。 (2).當(dāng)輸入列車班次信息不正確時(shí),將不會(huì)得到結(jié)果。 (3).文件錄入不正確時(shí),將不會(huì)得到任何結(jié)果。 六、調(diào)試過程中的問題 1)文件存儲(chǔ)方式不正確:應(yīng)先定義一個(gè)文件存儲(chǔ)函數(shù),在其它函數(shù)中調(diào)用,方便有效。 2)刪除時(shí)若遇到?jīng)]有的班次則程序出錯(cuò)。應(yīng)在不存在輸入的列車班次時(shí),輸出不存在的提示 3)保存后在下次運(yùn)行時(shí)出錯(cuò)問題:在保存信息時(shí),應(yīng)在每個(gè)信息之間加一空格來保存,否則在文件下次使用時(shí)讀取就會(huì)沒有分界點(diǎn)。 4)訂票退票只能一次一張。應(yīng)在用戶輸入列車班次后讓用戶輸入需要訂購的張數(shù)。 5)結(jié)構(gòu)指針定義錯(cuò)誤,ticket前不應(yīng)加struct。 #include typedef struct node//定義信息結(jié)構(gòu)體 { char num[10];// 航班號(hào) int hour;//起飛時(shí)間小時(shí) int minitues;//起飛時(shí)間分鐘 char start[10];//起始 char end[10];//終點(diǎn) float prize;//經(jīng)濟(jì)艙票價(jià) int last;//剩余座位 }FLIGHT; typedef struct Order//訂單信息 { char name[10];//乘客姓名 char num[10];//航班號(hào) int count;//訂票數(shù)量 }Order; class flight//定義類 { private: FLIGHT stu[N];//每個(gè)元素對(duì)應(yīng)一條信息 Order psg[N];//訂單 int len;//航班總數(shù) int lenp;//訂票者總數(shù) public: flight(); ~flight();void input();//錄入信息 void show();//瀏覽 void sall();//售票 void back();//退票 void search();// 信息查詢 void search2();// 信息查詢(起點(diǎn)終點(diǎn)) char menu();//菜單 }; flight stud; char filename[]=“flight.txt”; flight::flight(){}//構(gòu)造函數(shù) flight::~flight(){}//析構(gòu)函數(shù) bool CheckTime(int h1,int m1,int h2,int m2)//判斷兩個(gè)時(shí)間前后 { if(h1 return true;else if(h1==h2){ if(m1 return true; else return false;} else return false;} void flight::show()//瀏覽 { system(“cls”);//清屏 cout<<“ 所有航班信息如下:”< 起飛時(shí)間 起點(diǎn) 終點(diǎn) 經(jīng)濟(jì)艙票價(jià) 剩余座位 備注”< for(int i=0;i printf(“%-10s%-2.2d:%-2.2d %-10s%-10s%-12.2f%-10d”,stu[i].num,stu[i].hour,stu[i].minitues,stu[i].start,stu[i].end,stu[i].prize,stu[i].last); time_t t; struct tm *tm; t=time(NULL);//獲取當(dāng)前系統(tǒng)時(shí)間 tm=localtime(&t); if(CheckTime(stud.stu[i].hour,stud.stu[i].minitues,tm->tm_hour,tm->tm_min)==true)//如果起飛時(shí)間在當(dāng)前時(shí)間之前 輸出此次航班已發(fā)出 cout<<“此次航班已發(fā)出”< else cout< } cout<<“_______________________________________________________________________________”< void flight::back()//退票 { char name[20]; char s[20]; system(“cls”);//清屏 cout<<“請(qǐng)輸入退票的航班編號(hào):”;cin>>s; for(int i=0;i if(strcmp(stud.stu[i].num,s)==0) break;//存在 結(jié)束循環(huán) if(i==stud.len)//這二者相等說明查找完所有信息也沒找到輸入信息,說明輸入航班編號(hào)不存在{ cout<<“對(duì)不起!沒有你輸入航班編號(hào)的相關(guān)信息。n”; system(“pause”);//任意鍵繼續(xù) return;} time_t t; struct tm *tm; t=time(NULL);//獲取當(dāng)前系統(tǒng)時(shí)間 tm=localtime(&t);if(CheckTime(stud.stu[i].hour,stud.stu[i].minitues,tm->tm_hour,tm->tm_min)==true) { cout<<“對(duì)不起!該航班已經(jīng)起飛。不能退票。n”; system(“pause”);//任意鍵繼續(xù) return;} int j=i; cout<<“請(qǐng)輸入您的姓名:”;cin>>name;for(i=0;i if(strcmp(stud.psg[i].name,name)==0 && strcmp(stud.psg[i].num,s)==0)//查詢這個(gè)名字是否相同 { stud.stu[j].last+=stud.psg[i].count;//退票 stud.psg[i]=stud.psg[stud.lenp-1];///刪除這個(gè)訂單 stud.lenp--;//訂單數(shù)減一 cout<<“退票成功!n”; system(“pause”);//任意鍵繼續(xù) return; } } cout<<“對(duì)不起!您沒有定該航班的票。n”; system(“pause”);//任意鍵繼續(xù) } void flight::sall()//售票 { char s[20]; system(“cls”);//清屏 cout<<“請(qǐng)輸入要購買的航班編號(hào):”;cin>>s; for(int i=0;i if(strcmp(stud.stu[i].num,s)==0) break;//存在 結(jié)束循環(huán) if(i==stud.len)//這二者相等說明查找完所有信息也沒找到輸入信息,說明輸入航班編號(hào)不存在{ cout<<“對(duì)不起!沒有你輸入航班編號(hào)的相關(guān)信息。n”; system(“pause”);//任意鍵繼續(xù) return;} if(stud.stu[i].last<=0)//沒有票了 { cout<<“對(duì)不起!該航班票已售完。n”; system(“pause”);//任意鍵繼續(xù) return;} time_t t; struct tm *tm; t=time(NULL);//獲取當(dāng)前系統(tǒng)時(shí)間 tm=localtime(&t);if(CheckTime(stud.stu[i].hour,stud.stu[i].minitues,tm->tm_hour,tm->tm_min)==true) { cout<<“對(duì)不起!該航班已經(jīng)起飛。n”; system(“pause”);//任意鍵繼續(xù) return;} int j=i;i=stud.lenp;strcpy(stud.psg[i].num,stud.stu[i].num);cout<<“請(qǐng)輸入購票數(shù)量:”;cin>>stud.psg[i].count; while(stud.psg[i].count>stud.stu[i].last){ cout<<“余票不足,請(qǐng)重新輸入:”; cin>>stud.psg[i].count; } cout<<“請(qǐng)輸入您的姓名:”;cin>>stud.psg[i].name; stud.stu[j].last-=stud.psg[i].count;//剩余票數(shù) stud.lenp++;cout<<“購票成功!n”;system(“pause”);//任意鍵繼續(xù) } void flight::input()//錄入信息 { system(“cls”);//清屏 for(int i=stud.len;i { cout<<“請(qǐng)輸入航班號(hào):”; cin>>stud.stu[i].num; cout<<“請(qǐng)輸入起飛時(shí)間(格式: 12:30):”; char ch; cin>>stud.stu[i].hour>>ch>>stud.stu[i].minitues; cout<<“請(qǐng)輸入起點(diǎn):”; cin>>stud.stu[i].start; cout<<“請(qǐng)輸入終點(diǎn):”; cin>>stud.stu[i].end; cout<<“請(qǐng)輸入經(jīng)濟(jì)艙票價(jià):”; cin>>stud.stu[i].prize; cout<<“請(qǐng)輸入剩余座位:”; cin>>stud.stu[i].last; stud.len++;//個(gè)數(shù)加1 cout<<“一條航班信息錄入完成,是否繼續(xù)錄入?(y/n):”; while(1) { cin>>ch; if(ch=='y' || ch=='Y' || ch=='n' || ch=='N') break; else cout<<“輸入錯(cuò)誤請(qǐng)重新輸入:”; } if(ch=='n' || ch=='N') break; } } void flight::search()// 信息查詢 { char s[20]; system(“cls”);//清屏 cout<<“請(qǐng)輸入要查詢的航班編號(hào):”;cin>>s; for(int i=0;i if(strcmp(stud.stu[i].num,s)==0) break;//存在 結(jié)束循環(huán) if(i==stud.len)//這二者相等說明查找完所有信息也沒找到輸入信息,說明輸入航班編號(hào)不存在{ cout<<“對(duì)不起!沒有你輸入航班編號(hào)的相關(guān)信息。n”; system(“pause”);//任意鍵繼續(xù) return;} cout<<“ 查詢結(jié)果如下:”< 起飛時(shí)間 起點(diǎn) 終點(diǎn) 經(jīng)濟(jì)艙票價(jià) 剩余座位 備注”< printf(“%-10s%-2.2d:%-2.2d %-10s%-10s%-12.2f%-10d”,stu[i].num,stu[i].hour,stu[i].minitues,stu[i].start,stu[i].end,stu[i].prize,stu[i].last); time_t t; struct tm *tm; t=time(NULL);//獲取當(dāng)前系統(tǒng)時(shí)間 tm=localtime(&t); if(CheckTime(stud.stu[i].hour,stud.stu[i].minitues,tm->tm_hour,tm->tm_min)==true)//如果起飛時(shí)間在當(dāng)前時(shí)間之前 輸出此次航班已發(fā)出 cout<<“此次航班已發(fā)出”< else cout< cout<<“_______________________________________________________________________________”< void flight::search2()// 信息查詢(按線路){ char s1[20],s2[20]; system(“cls”);//清屏 cout<<“請(qǐng)輸入要查詢的線路起點(diǎn):”;cin>>s1; cout<<“請(qǐng)輸入要查詢的線路終點(diǎn):”;cin>>s2; for(int i=0;i if(strcmp(stud.stu[i].start,s1)==0 && strcmp(stud.stu[i].end,s2)==0) break;//存在 結(jié)束循環(huán) if(i==stud.len)//這二者相等說明查找完所有信息也沒找到輸入信息,說明輸入航班編號(hào)不存在{ cout<<“對(duì)不起!沒有你輸入線路的相關(guān)信息。n”; system(“pause”);//任意鍵繼續(xù) return;} cout<<“ 查詢結(jié)果如下:”< 起飛時(shí)間 起點(diǎn) 終點(diǎn) 經(jīng)濟(jì)艙票價(jià) 剩余座位 備注”< for(i=0;i if(strcmp(stud.stu[i].start,s1)==0 && strcmp(stud.stu[i].end,s2)==0) { printf(“%-10s%-2.2d:%-2.2d %-10s%-10s%-12.2f%-10d”,stu[i].num,stu[i].hour,stu[i].minitues,stu[i].start,stu[i].end,stu[i].prize,stu[i].last); time_t t; struct tm *tm; t=time(NULL);//獲取當(dāng)前系統(tǒng)時(shí)間 tm=localtime(&t); if(CheckTime(stud.stu[i].hour,stud.stu[i].minitues,tm->tm_hour,tm->tm_min)==true)//如果起飛時(shí)間在當(dāng)前時(shí)間之前 輸出此次航班已發(fā)出 cout<<“此次航班已發(fā)出”< else cout< } cout<<“_______________________________________________________________________________”< char flight::menu()//菜單 { char c; system(“cls”);//清屏 cout<<“nnnn ╔═══════════════════════════╗n”;cout<<“ ║ 1、錄入航班信息 ║n”; cout<<“ ╠═══════════════════════════╣n”;cout<<“ ║ 2、瀏覽航班信息 ║n”;cout<<“ ╠═══════════════════════════╣n”; cout<<“ ║ 3、查詢路線(按編號(hào)) ║n”; cout<<“ ╠═══════════════════════════╣n”;cout<<“ ║ 4、查詢路線(按線路) ║n”; cout<<“ ╠═══════════════════════════╣n”;cout<<“ ║ 5、售票 ║n”; cout<<“ ╠═══════════════════════════╣n”;cout<<“ ║ 6、退票 ║n”; cout<<“ ╠═══════════════════════════╣n”;cout<<“ ║ 0、退出系統(tǒng) ║n”; cout<<“ ╚═══════════════════════════╝n”;cout<<“ 請(qǐng)選擇:”; cin>>c; return c;} int main(){ while(1) { char ch; ch=stud.menu();//獲取選擇 switch(ch) { case '1': stud.input();break;//錄入航班信息 case '2': stud.show();break;//瀏覽航班信息 case '3': stud.search();break;// 查詢路線 case '4': stud.search2();break;// 查詢路線(按線路) case '5': stud.sall();break;// 售票 case '6': stud.back(); break;// 退票 case '0': exit(0);//退出 } } return 0;}第二篇:火車票售票系統(tǒng) 需求分析報(bào)告
第三篇:課程設(shè)計(jì)火車票售票系統(tǒng)的需求分析
第四篇:火車票管理系統(tǒng)
第五篇:航空售票管理系統(tǒng)