第一篇:火車訂票管理系統主程序流程
程序簡介
此程序是采用多文件模塊化形式編寫;其中自定義頭文件中包括了程序中所有調用的函數的聲明,以及需要的所有系統頭文件。
#include
編寫時的分塊包括訂票塊、查詢塊、輸出塊,及已訂票修改部分等。
訂票塊則包含了定票流程的所有代碼。查詢塊中是通過車次號碼或是到達城市來查詢的。輸出部分包括了主界面的輸出,已定車票信息的輸出,所查車次信息輸出的頭部分。訂票修改即是改定過程的編程。
即此程序包括了查詢、訂票、改定的流程。
編程過程
在編寫該程序時,遇到了信息的保存問題。訂票時與改定時的錄入信息的保存不知如何處理;之后將保存的部分分為鏈表暫存和文件的保存,在錄入信息時是暫存在鏈表中的,當離開此系統是會提示是否保存信息,若是則保存到文件中。此舉方便了票的改定,將數據分割開了,也精簡了程序,更便于閱讀。
編程模塊劃分后,編寫程序之后的編譯時,總是連分文件編譯時都無法通過。但是寫入的代碼經過檢查又沒有問題,一直困擾著我。直到想起老師教的課本以外的知識,并以一種玩玩試一試的心態用條件編譯得以解決此問題。
同時在編程時多次用到“清屏”,保證了輸出界面的簡潔。
在分出模塊后,未完成所有部分的編程時的試運行時出現剛一進入子程序時便會回到主界面,后發現時由于只有輸出部分沒有輸入部分,每當運行完子程序后回到主程序時都會被“清屏”,結果造成編譯時正常,到運行時卻漏洞百出。
在編程時,由于對文件的處理不熟悉,以及計算機的設置問題沒考慮,使用了‘w+’的調用方式,使得在保存數據到文件時出現無法寫入文件的現象。在百度,問同學以及問老師后才用‘wb+’和別的方式調用,并寫入成功。
這個程序時我學習計算機c以來編寫的最大型涵蓋面最廣的一個程序,沒有之一。但同時我也知道這在c語言編程中也只是很小的一個小程序而已,我在這編程中發現:我要學的還有很多,大型程序也不是一個人能寫出來的,會一些編程技巧是很有必要的,與人合作是
– 1 – 必須的,當然了,我不是在寫詩,而是真的這么覺得。一個人會的有限,專精方向也不同,若能好好的合作肯定可以超過一個人單干。
部分源代碼
訂票程序
#ifndef TRAINHEAD_H #define TRAINHEAD_H #include“trainhead.h” #endif/*條件編譯,作用是防止頭文件被重復引用*/ int saveflag = 0;void Bookticket(link l,booklink k){ Node *p[10],*q;char c[2],tnum[10],str[10],str1[10];Book *r,*s;int i = 0,t = 0,flag = 0,dnum;r = k;while(r->next!=NULL)
r = r->next;printf(“Input the city you want to go:”);scanf(“%s”,&str);q = l->next;while(q!=NULL)
{
if(strcmp(q->data.reachcity,str)==0)
{
p[i] = q;
i++;
}
q = q->next;
}
printf(“nthe number of record have %dn”,i);
printhead();
for(t=0;t
printdata(p[t]);
if(i==0)
printf(“nSorry!Can't find the train for you!n”);
else
{
printf(“ndo you want to book it?
scanf(“%s”,c);
if(strcmp(c,“Y”)==0||strcmp(c,“y”)==0)/*判斷是否訂票*/
{
s =(Book*)malloc(sizeof(Book));
printf(“nInput your name: ”);
scanf(“%s”,&s->data.name);
printf(“nInput your ID: ”);
scanf(“%s”,&str1);
相應減少*/
strcpy(s->data.num,str1);printf(“nplease input the number of the train:”);scanf(“%s”,tnum);for(t=0;tdata.num,tnum)==0){ if(p[t]->data.ticketnum < 1)/*判斷剩余的供訂票的票數是否為0*/ {
printf(“nsorry,no ticket!”);
Sleep(2);
return;} printf(“nremain %d ticketsn”,p[t]->data.ticketnum);flag = 1;break;} if(flag==0){ printf(“ninput error”);Sleep(2);return;} printf(“nInput your bookNum: ”);scanf(“%d”,&dnum);p[t]->data.ticketnum=p[t]->data.ticketnum-dnum;/*定票成功則可供訂的票數s->data.bookNum = dnum;s->next = NULL;r->next = s;r = s;printf(“nLucky!you have booked a ticket!”);getch();
– 3 –
} } } saveflag = 1;使用說明
運行程序時,首先進入到菜單部分,菜單部分提供了菜單顯示和輸入功能部分。其運行效果如圖19.1所示。在主界面上輸入數字0——6,實現相應的功能。
圖19.1 火車訂票系統主界面
主界面輸入“1”,進入添加火車信息界面,如圖19.2所示。根據屏幕上給出的提示輸入火車的車次,起點,終點,出發時間,到達時間,票價和可以訂購的票數。
– 4 –
圖19.2 輸入效果圖
主界面輸入“2”,可以查詢火車信息,可以選擇查詢的方法有兩種,一種是按照車次查詢,一種是按照你想要到達的地方查詢,運行效果如圖19.3所示。
– 5 –
圖19.3 查詢效果圖
當在主界面輸入“3”時,進入訂票界面,按照提示輸入你想要到達的城市,會自動顯示出你終點站為你輸入城市的信息,根據提示輸入你是否決定訂票以及你的個人信息,運行效果如圖19.4所示。
圖19.4 訂票效果圖
當在主界面輸入“4”時,進入修改界面,根據提示輸入你要修改的內容,修改模塊的運行效果如圖19.5所示。
– 6 –
圖19.5 修改效果圖
當在主界面輸入“5”時,可以顯示出所有的火車信息,顯示模塊效果如圖19.6所示。
– 7 –
圖19.6 顯示效果圖
當在主界面輸入“6”時,進入到保存模塊,將錄入的火車信息進行保存,并且將訂票人的信息也進行保存,存儲在指定的磁盤文件中。運行效果如圖19.7所示。
圖19.7 保存效果圖
– 8 –
第二篇:火車訂票管理系統
學號11~15 選題三:火車票訂票管理系統
1.基本要求:為方便管理火車票購買信息,編寫一個火車票訂票管理系統軟件。系統記錄必須包括訂票人姓名、訂票人身份證號、始發站、終到站、票價、席別、訂票時間等。2.基本管理功能: [1] [2] 添加:增加一條訂票人的記錄到管理系統中。
查詢:根據訂票人身份證查找訂票人的相關信息并顯示,若找不到也要給出相應提示。[3] [4] 修改:在管理系統中修改訂票人的訂票記錄。
保存:將所有訂票信息保存在一個文件中(數據庫文件或普通的文本文件)。[5] [6] [7] [8] 讀取:從文件中讀取已保存了數據。刪除:從管理系統中刪除一條記錄。恢復:能恢復被刪除的記錄。
統計:(A)統計每天訂票張數和總車票金額;(B)統計單價在100元以下、100~400元之間和400元以上的票數總張數及總金額;(C)以表格形式打印所有訂票信息。
源代碼:
#include
int d;//用于選擇(按1繼續,按2退出,按他其他報錯待完善)int x=1;//用于脫出while循環
string sfz;//身份證號碼,用戶輸入可用到
class ticket {public: string ID;string name;string Sstation;string Tstation;float price;string seat;string time;ticket *next;ticket(string I,string n,string S, string T,float p, string s,string t){ID=I;name=n;Sstation=S;Tstation=T;price=p;seat=s;time=t;} void display();};
void ticket::display(){cout< cout<<“|”< ************歡迎使用 ************”< **請輸入選項前的編號**”< **************************************************************”< * 1.添加車票信息 *”< * 2.查詢車票信息 *”< * 3.修改車票信息 *”< * 4.刪除車票信息 *”< * 5.恢復車票信息 *”< * 6.顯示車票信息 *”< * 7.統計車票信息 *”< * 8.保存車票信息 *”< * 9.讀取車票信息 *”< * 0.離開 *”< **************************************************************”< ticket *head=NULL,*del=NULL,*p0,*p1,*p2,*p3,*p4;//head數據鏈表頭指針,p0,p1,p2添加函數專用,避免發生錯誤 int check(string b)//身份證號碼作為功能基本辨別數據,應該有一個函數專門檢查其是否重復,0 表示重復,1 表示不重復 {ticket *ch;ch=head;int che=1;while(ch!=NULL) {if(ch->ID==b){che=0;ch=NULL;} else {ch=ch->next;} } return che;} int check1(string b)// sbl {ticket *ch;ch=del;int che=1;while(ch!=NULL) {if(ch->ID==b){che=0;ch=NULL;} else {ch=ch->next;} } return che;} int add()//將訂票數據保存在一個基礎鏈表中 {system(“cls”);float price;string name,ID,Sstation,Tstation,seat,time; if(head==NULL)//以下為鏈表為空的情況 { cout<<“=============開始輸入訂票信息=============”< cout<<“請輸入訂票人身份證號碼:”;cin>>ID;cout<<“請輸入訂票人姓名:”;cin>>name;cout<<“請輸入始發站:”;cin>>Sstation; cout<<“請輸入終點站:”;cin>>Tstation; cout<<“請輸入票價:”;cin>>price;cout<<“請輸入席別:”;cin>>seat;cout<<“請輸入訂票時間(年月日以“-”隔開):”;cin>>time; head=p1=p2=new ticket(ID,name,Sstation,Tstation,price,seat,time);x=1;while(x){system(“cls”); cout<<“按1繼續輸入,按2退出-》”; cin>>d; if(d==1) {system(“cls”); p1->next=NULL; cout<<“=============開始輸入訂票信息=============”< cout<<“請輸入訂票人身份證號碼:”; cin>>ID; if(check(ID)==0){cout<<“身份證號碼重復!”< system(“pause”); return 0;} cout<<“請輸入訂票人姓名:”; cin>>name; cout<<“請輸入始發站:”; cin>>Sstation; cout<<“請輸入終點站:”; cin>>Tstation; cout<<“請輸入票價:”; cin>>price; cout<<“請輸入席別:”; cin>>seat; cout<<“請輸入訂票時間(年月日以“-”隔開):”; cin>>time; p1=new ticket(ID,name,Sstation,Tstation,price,seat,time); p2->next=p1; p2=p1; } else if(d==2) {p1->next=NULL; x=0; } else {cout<<“非法輸入!”< } //以上為鏈表為空的情況 else //以下為鏈表已有數據,往末尾添加 {p3=head; while(p3->next!=NULL) {p3=p3->next;} x=1; while(x) {system(“cls”); cout<<“=============開始輸入訂票信息=============”< cout<<“請輸入訂票人身份證號碼:”; cin>>ID; if(check(ID)==0){cout<<“身份證號碼重復!”< system(“pause”); return 0;} cout<<“請輸入訂票人姓名:”; cin>>name; cout<<“請輸入始發站:”; cin>>Sstation; cout<<“請輸入終點站:”; cin>>Tstation; cout<<“請輸入票價:”; cin>>price; cout<<“請輸入席別:”; cin>>seat; cout<<“請輸入訂票時間(年月日以“-”隔開):”; cin>>time; p0=new ticket(ID,name,Sstation,Tstation,price,seat,time); p3->next=p0; p3=p0; system(“cls”); cout<<“按1繼續輸入,按2退出-》”; cin>>d; if(d==1){x=1;p3->next=NULL;} else if(d==2){p3->next=NULL;x=0;} else {cout<<“非法輸入!”< } } //以上為鏈表已有數據,往末尾添加 return 1;} ticket *search1(string a)//查詢函數1,用于輸入身份證號碼返回一個指針,可在其他部分被使用 {ticket *cha1;cha1=head;x=1;while(x) {if(cha1==NULL){x=0;} else if(cha1->ID==a){x=0;} else {cha1=cha1->next;} } return cha1;} ticket *search_1(string a)//改查1后面都得改,嗯,就這樣了(~ ̄▽ ̄)~ {ticket *cha1;cha1=del;x=1;while(x) {if(cha1==NULL){x=0;} else if(cha1->ID==a){x=0;} else {cha1=cha1->next;} } return cha1;} ticket *search2(string b)//查詢函數2,返回所要查詢結點的前一個結點的指針,在刪除部分使用 {ticket *cha2,*cha3;cha2=cha3=head;x=1;while(x) {if(cha2->next==NULL){x=0;} else if(cha2->ID==b){x=0;} else {cha3=cha2; cha2=cha2->next;} } return cha3;} ticket *search_2(string b)//-_-{ticket *cha2,*cha3;cha2=cha3=del;x=1;while(x) {if(cha2->next==NULL){x=0;} else if(cha2->ID==b){x=0;} else {cha3=cha2; cha2=cha2->next;} } return cha3;} void search()//用于用戶查詢功能(目前只能查詢一次,然后退出,待完善){system(“cls”);cout<<“請輸入身份證號碼:”;cin>>sfz;p3=search1(sfz);if(p3==NULL){cout<<“無相關信息!”< cout<<“|”< cout<<“----------”< p3->display();system(“pause”);} } void display1()// {system(“cls”);ticket *dis;cout< {dis->display(); dis=dis->next; } while(dis!=NULL);} void modify()//修改函數,用于修改數據(目前只可以修改單個訂票信息,待完善){system(“cls”);display1();cout<<“請輸入要修改信息的身份證號碼:”;cin>>sfz;p3=search1(sfz);if(p3==NULL){cout<<“無相關信息!”< while(x) {system(“cls”); cout<<“1.身份證號碼 2.姓名 3.始發站 4.終點站 5.票價 6.席別 7.時間”< cout<<“請輸入要修改的選項前的編號:”; cin>>d; if(d==1){hui2: cout<<“請輸入身份證號碼:”; cin>>sfz; if(check(sfz)==0){cout<<“身份證號碼重復!”< goto hui2;} p3->ID=sfz; } else if(d==2){cout<<“請輸入姓名:”;cin>>p3->name;} else if(d==3){cout<<“請輸入始發站:”;cin>>p3->Sstation;} else if(d==4){cout<<“請輸入終點站:”;cin>>p3->Tstation;} else if(d==5){cout<<“請輸入票價:”;cin>>p3->price;} else if(d==6){cout<<“請輸入席別:”;cin>>p3->seat;} else if(d==7){cout<<“請輸入時間:”;cin>>p3->time;} else {cout<<“非法輸入!”< hui1: cout<<“按1繼續輸入,按2退出-》”; int d1; cin>>d1; if(d1==1){x=1;} else if(d1==2){x=0;} else {cout<<“非法輸入!”< } } } void Darea(ticket *c)//將刪除信息儲存在另一鏈表中 {if(del==NULL){del=c;del->next=NULL;} else {ticket *Dar; Dar=del; while(Dar->next!=NULL) {Dar=Dar->next;} Dar->next=c; Dar=c; Dar->next=NULL; } } void Delete()//刪除函數將要刪除的訂票信息移出鏈表,并將所有刪除信息結成另一鏈表,供恢復使用 {system(“cls”);display1();cout<<“請輸入要刪除訂票信息的身份證號碼:”;cin>>sfz;p3=search1(sfz);p4=search2(sfz);if(p3==NULL){cout<<“無相關信息!”< void recover()//恢復函數,用于將已經刪除的訂票信息恢復 {system(“cls”);ticket *r1,*r2,*r3;if(del==NULL){cout<<“無可恢復訂票信息!”< cout<<“|”< cout<<“----------”< r1=del; if(del!=0) do {r1->display(); r1=r1->next; } while(r1!=NULL);hui3: cout<<“請輸入要恢復的訂票信息的身份證號碼:”; cin>>sfz; if(check1(sfz)==1){cout<<“非法輸入!”< r2=head; while(r2->next!=NULL){r2=r2->next;} r3=search_1(sfz); r2->next=r3; r3->next=NULL; Rdel(sfz); cout<<“成功恢復!”< system(“pause”); } } void display()//顯示基礎鏈表中的所有訂票信息 {system(“cls”);ticket *dis;cout< {dis->display(); dis=dis->next; } while(dis!=NULL);system(“pause”);} void count()//統計部分 {system(“cls”);if(head==NULL){cout<<“無可統計信息!”< n=0,n1=0,n2=0,n3=0; float i,m=0,m1=0,m2=0,m3=0; p3=head; while(p3!=NULL) {i=p3->price; n=n+1; m=m+i; if(i<100){n1=n1+1;m1=m1+i;} if(i>=100&&i<=400){n2=n2+1;m2=m2+i;} if(i>400){n3=n3+1;m3=m3+i;} p3=p3->next; } cout< cout<<“|”< cout<<“-------------------”< cout<<“|”< 元 以 下 cout<<“|”< cout<<“|”< cout<<“|”< system(“pause”); } } void save()//保存函數 {system(“cls”);string filename,filename1;ofstream file;cout<<“請輸入文件名:”;cin>>filename1;filename1=filename1+“.txt”;filename=“C:Program Files(x86)Microsoft Visual StudioMyProjects火車票訂票管理系統savedata”+filename1;//此處路徑根據需要自行更改 /*file.open(filename.c_str(),ios::in);//功能失敗部分待完善 if(!file){d=1;} else {d=2;} file.close();if(d==1){file.open(filename.c_str(),ios::out); p1=head; x=1; while(x) {if(p1!=NULL) {file< ID< name< Sstation< Tstation< price< seat< time< p1=p1->next;} else {x=0;} } file.close(); cout<<“保存成功”< if(d==2){ */ int i;// cout<<“文件已存在!”< cin>>i; if(i==1) {file.open(filename.c_str(),ios::out); p3=head; x=1; while(x) {if(p3!=NULL) {file< ID< p3=p3->next;} else {x=0;} } file.close(); cout<<“保存成功”< } else if(i==2) {file.open(filename.c_str(),ios::app); p3=head; x=1; while(x) {if(p3!=NULL) {file< ID< p3=p3->next;} else {x=0;} } file.close(); cout<<“保存成功”< } else {cout<<“非法輸入!”;goto hui;} //} } int load()//讀取函數 {system(“cls”);int i=0,ii=0,j=0;ifstream infile;string filename,filename1;cout<<“請輸入文件名:”;cin>>filename1;filename1=filename1+“.txt”;filename=“C:Program Files(x86)Microsoft Visual StudioMyProjects火車票訂票管理系統savedata”+filename1;//此處路徑根據需要自行更改 infile.open(filename.c_str(),ios::in); if(!infile){cerr<<“讀取失敗!”< system(“pause”); return-1;} string a[1000];//能力有限,不會動態大小,只能這樣了(+﹏+)~ while(!infile.eof()){getline(infile,a[i],'n'); i++;} ticket *L1,*L2;float f;for(ii=0;ii {f=atof(a[ii+4].c_str()); head=new ticket(a[ii],a[ii+1],a[ii+2],a[ii+3],f,a[ii+5],a[ii+6]); head->next=NULL; } else {L1=head; while(L1->next!=NULL) {L1=L1->next;} f=atof(a[ii+4].c_str()); L2=new ticket(a[ii],a[ii+1],a[ii+2],a[ii+3],f,a[ii+5],a[ii+6]); L1->next=L2; L1=L2; L1->next=NULL; } } infile.close();cout<<“讀取成功”< void select()//選擇功能分支 {system(“cls”);menu();cin>>d; if(d==1){add();select();} if(d==2){search();select();} if(d==3){modify();select();} if(d==4){Delete();select();} if(d==5){recover();select();} if(d==6){display();select();} if(d==7){count();select();} if(d==8){save();select();} if(d==9){load();select();} else if(d==0) {ticket *ex1,*ex2,*ex3,*ex4; ex1=head; while(ex1!=NULL) {ex2=ex1; ex1=ex1->next; delete ex2; } ex3=del; while(ex3!=NULL) {ex4=ex3; ex3=ex3->next; delete ex4; } cout<<“離開!”< exit(0);} else {cout<<“錯誤!”< int main(){head=NULL;select();return 0;} //較多bug,比如,如果先恢復第一個會導致后面的數據全部丟失,時間能力有限,實在抱歉->_<- /* 頭文件 */ #include #include #include char lt[10];//開車時間 char at[10];//到達時間 int count;//票數 }s[N];/* 全局變量 */ int i;//輸入計數器 int m=0;//合計計數器 char l[20];//糾錯空間 /* 函數聲明 */ void INPUT();//輸入車次信息 void PRINTF();//輸出車次信息 void save();//保存車次信息 void read();//讀取車次信息 void search();//查找車次信息 void dingpiao();//訂票信息 void tuipiao();//退票信息 void WRONG();//糾錯模塊 ///////////////////////////////////////////////////////////////////////////////////////主函數 void main(){ int j;do { system(“cls”);//清屏語句 printf(“ *************************************************************n”);printf(“ 歡迎進入火車票務管理系統 n”);printf(“ *************************************************************”);printf(“ n 請輸入選項 nn”);printf(“ 1.添加列車信息 nn” “ 2.查找 nn” “ 3.訂票 nn” “ 4.退票 nn” “ 5.退出 nn”);printf(“ *************************************************************nn”);printf(“請選擇: ”);scanf(“%d”,&j);gets(l); switch(j){ case 1: INPUT();//調用輸入模塊 break;case 2:search();//調用查找模塊 break;case 3:dingpiao();//調用訂票模塊 break;case 4:tuipiao();//調用退票模塊 break;case 5:;break;default:WRONG();break;} }while(j!=5);//判斷結束 printf(“n 王志強 1241班 201210913124 n ”);printf(“n--------”); printf(“n 正在退出,請按任意鍵退出”); printf(“n--------n ”);}//主函數結束 //////////////////////////////////////////////////////////////////////////////////////////輸入模塊 void INPUT(){ int y; system(“cls”);printf(“n ====================歡迎進入 錄入火車時刻信息 界面====================nn”);for(i=0;i printf(“請輸入車次號: ”);scanf(“%s”,&s[i].code);//讀取車次號 printf(“請輸入站數: ”);scanf(“%s”,&s[i].data);//讀取站數 printf(“請輸入起始站: ”);scanf(“%s”,s[i].lp);//讀取起始站 printf(“請輸入終點站: ”);scanf(“%s”,s[i].ap);//讀取終點站 printf(“請輸入開車時間: ”);scanf(“%s”,s[i].lt);//讀取開車時間 printf(“請輸入到達時間: ”);scanf(“%s”,s[i].at);//讀取到達時間 printf(“請輸入車票數: ”);scanf(“%d”,&s[i].count);//讀取票數 m++; printf(“第%d個信息已經輸完.按任意鍵繼續,按 0 結束: ”,m);scanf(“%d”,&y);gets(l);if(y==0){ save();//將結構體信息存盤 PRINTF();//輸出輸入的列車信息 printf(“n 按任意鍵返回上級菜單: ”);gets(l);break;} } } ////////////////////////////////////////////////////////////////////////保存模塊程序 void save(){ FILE *fp,*fp1;//定義文件指針 if((fp=fopen(“chen.dat”,“wb”))==NULL)//打開文件并判斷是否出錯 { printf(“創建文件失敗!nn”);//打印出錯提示 getchar();return;} if((fp1=fopen(“hao.dat”,“wb”))==NULL)//打開文件并判斷是否出錯 { printf(“創建文件失敗!nn”);//打印出錯提示 getchar();return;} for(i=0;i printf(“向文件輸入數據失敗!nn”);fprintf(fp1,“%d”,m);fclose(fp);//關閉文件 fclose(fp1);//關閉文件 } ///////////////////////////////////////////////////////////////////////文件讀取模塊 void read(){ FILE *fp,*fp1;//定義文件指針 if((fp=fopen(“chen.dat”,“rb”))==NULL)//打開文件,并判斷是否出錯 { printf(“出錯,請檢查文件是否存在,按任意鍵返回住菜單”);//打印出錯提示 getchar();} if((fp1=fopen(“hao.dat”,“rb”))==NULL)//打開文件并判斷是否出錯 { printf(“創建文件失敗!nn”);//打印出錯提示 getchar();return;} fscanf(fp1,“%d”,&m);fclose(fp1);//關閉文件 for(i=0;i //////////////////////////////////////////////////////////////////////////////查詢模塊 void search(){ char name1[20];char name2[20];char ii[10];int nk;char no[10];do { system(“cls”);//清屏語句 printf(“nn ====================歡迎進入 查詢火車時刻信息 界面====================n”); printf(“n ++++++++++++++++++請選擇查找方式++++++++++++++++++nn”); printf(“ ----1.顯示所有列車信息 2.按車次查詢 3.按始發站查詢----n”); printf(“ -----4.按終點站查詢 5.返回主菜單----n”); printf(“n 請選擇: ”);scanf(“%d”,&nk);//讀取查找方式 gets(l);if(nk==5)break; switch(nk){ case 1:PRINTF();//調用打印模塊 break;case 2: printf(“請輸入車次號:n”);scanf(“%s”,&no);//車次號 break;case 3: printf(“請輸入始發站名稱:n”);scanf(“%s”,name1);//讀取始發站 break;case 4: printf(“請輸入終點站名稱:n”);scanf(“%s”,name2);//終點站 break;default: WRONG(); break;} read();//調用讀取函數 for(i=0;i search();//調用查詢模塊 printf(“請輸入您要訂的車票數以回車鍵結束:”);scanf(“%d”,&n);//讀取所訂機票數 if(n<0){ system(“cls”);WRONG();//scanf(“%s”,l);//gets(l); break;} if(s[i].count!=0&&s[i].count>=n)//判斷是否出錯 { s[i].count=s[i].count-n;//調用保存函數 system(“cls”);printf(“訂票成功!nn”);printf(“ntt按任意鍵返回主菜單: ”);scanf(“%s”,l); break;} if(s[i].count break;} printf(“是否繼續?(y/n):n”);//判斷是否繼續訂票 scanf(“%s”,a);}while(!strcmp(a,“y”));//判斷結束 } ///////////////////////////////////////////////////////////////////////////////退票模塊 void tuipiao(){ int n;char a;do { search();//調用查詢模塊 printf(“請輸入您要退的機票數目:n”);scanf(“%d”,&n);//輸入所退票數 gets(l);if(n<0)//判斷票數是否有效 { WRONG(); break;} s[i].count=s[i].count+n;do { system(“cls”);//借鑒而來的清屏語句,好用! printf(“nn-->退票成功<--”);printf(“nn-->繼續 y,返回主菜單 n <--”); a=getchar(); gets(l); if(a!='y'&&a!='n') WRONG(); }while(a!='y'&&a!='n');}while(a!='n');//判斷并跳出循環 } ///////////////////////////////////////////////////////////////////////////////////////糾錯模塊 void WRONG(){ system(“cls”);//借鑒而來的清屏語句,好用! printf(“nn--->!!輸入錯誤,請按任意鍵返回!!<---”);gets(l);} 全程一體化建模報告 ——火車訂票系統 工商管理學院 信息1101 20110837 王若洲 1.火車訂票系統描述....................................................................3 2.用例圖和用例說明....................................................................3 3.類圖 ........................................................................................11 4.對象圖......................................................................................13 5.順序圖和協作圖.....................................................................14 6.狀態圖....................................................................................28 7.組件圖.....................................................................................29 8.部署圖.....................................................................................30 9.總結............................................................................................301.火車訂票系統描述 線上預訂火車票系統是一款功能強大、操作簡便、易維護的、具有良好人機交互界面的線上訂票系統,用戶可以在注冊之后進入系統。購票用戶可以在系統中查詢車票信息,并進行車票預定。同時購票用戶的個人信息可以修改,已預定的車票也可以在取消訂單的窗口中取消,很方便用戶的使用。 對于管理員來說,可以對用戶的信息進行統一的管理,具有實時性、便捷性等有點。同時,系統的數據可以定期備份,以防止信息的丟失。 2.用例圖和用例描述 2.1 用例描述 用例編號:001 用例名:注冊帳號 用例描述:購票用戶在注冊帳號后成為該系統的用戶,使用該系統的功能 參與者:購票用戶 前置條件:電子商城正常運行 后置條件:如果用戶輸入的帳號在系統中未被注冊過,該用戶會注冊成功;否則,顯示帳號已注冊,提示用戶重新輸入。基本路徑: 1.用戶登錄火車訂票系統 2.購票用戶輸入要注冊的帳號和密碼 3.購票用戶提交信息 4.系統檢查用戶帳號是否已被注冊 5.系統添加帳號,并顯示注冊成功 擴展點: 4a:系統檢測到帳號已被注冊 4a1.用戶重新輸入 4a2.用戶離開系統 變異點:無 用例編號:002 用例名:登錄帳號 用例描述:購票用戶在登錄帳號后進入系統,使用該系統的功能 參與者:購票用戶 前置條件:電子商城正常運行 后置條件:如果用戶輸入的帳號和密碼與系統數據庫中的數據一致,該用戶會登錄成功;否則,顯示輸入信息有誤,提示用戶重新輸入。基本路徑: 1.用戶登錄火車訂票系統 2.購票用戶輸入自己的帳號和密碼 3.購票用戶提交信息 4.系統檢查用戶帳號和密碼是否匹配 5.系統記錄并顯示當前用戶 擴展點: 4a:系統檢測到帳號有誤 4a1.用戶重新輸入 4a2.用戶離開系統 4b:購票用戶密碼錯誤 4b1:系統彈出密碼錯誤警告信息 4b2:購票用戶離開或重新輸入密碼 變異點:無 用例編號:003 用例名:車票查詢 用例描述:在車票查詢頁面可以通過車次,始發地等信息查詢相關車次,獲得具體的車票信息 參與者:購票用戶 前置條件:電子商城正常運行,用戶已登錄該系統 后置條件:用戶輸入的車次信息是在實際的火車運行系統中存在的則顯示相應的車票信息,否則,提示用戶輸入的信息有誤。基本路徑: 1.用戶執行登錄帳號進入自己的頁面 2.用戶進入車票查詢界面 3.購票用戶輸入要查詢的車票、車次或時間等信息 4.系統檢測輸入的信息是否正確 5.系統返回給用戶車票的具體信息 擴展點: 4a:系統檢測到用戶輸入的信息有誤 4a1.用戶重新輸入 4a2.用戶離開該功能界面 變異點:無 用例編號:004 用例名:訂單查詢 用例描述:用戶在提交訂單后可以通過該功能查詢自己的訂單情況以及歷史訂單 參與者:購票用戶 前置條件:電子商城正常運行,用戶已登錄該系統并在該系統已提交過訂單 后置條件:用戶提交信息后系統會查詢相關的數據庫信息,如果用戶提交過訂單,系統返回所有訂單(包括歷史訂單),否則提示用戶訂單列表為空 基本路徑: 1.用戶執行登錄帳號進入自己的頁面 2.用戶進入訂單查詢界面 3.購票用戶輸入要查詢的訂單的時間區間 4.系統調取用戶的訂單信息 5.系統返回給用戶想要的訂單信息(沒有訂單顯示空) 擴展點:無 變異點:無 用例編號:005 用例名:取消訂單 用例描述:該功能是訂單查詢的拓展功能,在訂單查詢之后可以選擇取消之前的訂單操作 參與者:購票用戶 前置條件:用戶在執行完查詢訂單功能,并至少有一份未完成的訂單 后置條件:系統根據用戶的操作在系統數據庫中找到相應數據,如果符合條件則刪除該條訂單信息,否則,提示用戶沒有未完成的訂單 基本路徑: 1.用戶執行登錄帳號進入自己的頁面 2.用戶進入訂單查詢界面 3.用戶執行取消訂單操作 4.系統檢測該操作是否符合取消訂單的條件 5.系統刪除用戶為完成的訂單 擴展點: 4a:用戶沒有未完成的訂單,用戶取消操作 變異點:無 用例編號:006 用例名:車票預定 用例描述:該功能是車票查詢的拓展功能,在查詢完車票信息后可以繼續執行該功能,完成車票的最后預定 參與者:購票用戶 前置條件:電子商城正常運行,用戶已登錄該系統并查詢到自己需要的車票 后置條件:用戶提交信息后系統會查詢相關的數據庫信息,如果該車票有余票,則用戶預定成功,否則,提示用戶重新選擇車票或者放棄操作 基本路徑: 1.用戶執行登錄帳號進入自己的頁面 2.用戶執行車票查詢功能 3.用戶預定車票 4.系統檢測車票是否有余票 5.系統返回用戶預定成功 擴展點: 4a:車票已被全部出售 4a1:用戶重新選擇車票 4a2:用戶放棄該操作 變異點:無 用例編號:007 用例名:信息查詢 用例描述:該功能可以讓用戶查詢自己的相關信息,包括帳號、密碼、姓名及郵箱等 參與者:購票用戶 前置條件:電子商城正常運行,用戶登錄系統進入自己的頁面 后置條件:用戶提交請求后系統從數據庫中調用與該用戶有關的所有信息 基本路徑: 1.用戶執行登錄帳號進入自己的頁面 2.用戶提交信息查詢申請 3.系統調用數據庫中與該用戶有關的信息 4.系統把數據返回給用戶 擴展點:無 變異點:無 用例編號:008 用例名:修改信息 用例描述:該功能是信息查詢的拓展功能,主要指密碼、郵箱的修改 參與者:購票用戶 前置條件:電子商城正常運行,用戶已登錄系統并執行了查詢功能 后置條件:用戶提交修改信息功能后,系統對比修改信息需要的條件,如果符合則把用戶在系統數據庫中的信息修改,否則,提示信息修改失敗 基本路徑: 1.用戶執行登錄帳號進入自己的頁面 2.用戶執行信息查詢功能 3.用戶填寫想要修改的信息 4.系統檢測相關條件 5.系統修改用戶的信息 擴展點:無 變異點:無 用例編號:009 用例名:添加用戶 用例描述:把新注冊的用戶添加到系統數據庫中 參與者:系統管理員 前置條件:有用戶條件注冊申請,管理員執行添加操作 后置條件:如果用戶輸入的帳號在系統中未被注冊過,該用戶會注冊成功;否則,顯示帳號已注冊,提示用戶重新輸入。基本路徑: 1.管理員登錄系統 2.管理員執行添加用戶操作 3.系統檢測用戶是否注冊 4.管理員將用戶信息添加到數據庫中 擴展點:無 變異點:無 用例編號:010 用例名:修改用戶 用例描述:該功能可以修改用戶的信息及用戶權限 參與者:系統管理員 前置條件:系統正常運行 后置條件:管理員選擇修改用戶信息,系統修改用戶在數據庫中的信息 基本路徑: 1.管理員登錄系統 2.管理員執行修改用戶操作 3.系統修改用戶信息 擴展點:無 變異點:無 用例編號:011 用例名:刪除用戶 用例描述:該功能可以把用戶從系統中徹底刪除 參與者:系統管理員 前置條件:系統正常運行 后置條件:管理員選擇刪除用戶,將用戶從系統中徹底刪除 基本路徑: 1.管理員登錄系統 2.管理員執行刪除用戶操作 3.系統將用戶徹底刪除 擴展點:無 變異點:無 用例編號:012 用例名:修改票務信息 用例描述:在車票的價格及火車的發車時間等實際信息更改后要在系統中做出相應修改 參與者:系統管理員 前置條件:系統正常運行,實際運行的票務信息有變化 后置條件:管理員根據實際的修改對系統中的票務信息做出相應修改 基本路徑: 1.管理員登錄系統 2.管理員執行修改票務信息操作 3.系統重新存儲修改后的信息 擴展點:無 變異點:無 用例編號:013 用例名:數據備份 用例描述:定期將重要數據進行備份,防止數據丟失 參與者:系統管理員 前置條件:系統正常運行 后置條件:管理員選擇數據備份,數據被備份存儲 基本路徑: 1.管理員登錄系統 2.管理員執行數據備份操作 3.系統將重要數據進行備份 擴展點:無 變異點:無 2.2用例圖 3.類圖 3.1 實體類 3.2 邊界類 3.3控制類 4.對象圖 5.順序圖和協作圖 5.1用戶的順序圖和協作圖 (1)注冊帳號 :購票用戶:注冊界面:處理注冊:系統數據庫1: c_register2: submit_info3: check_account4: return_account5: register6: succeed1: c_register:購票用戶:注冊界面2: submit_info3: check_account5: register:處理注冊4: return_account6: succeed:系統數據庫 (2)登錄帳號 :購票用戶:登錄界面:處理登錄:系統數據庫1: c_login2: submit_info3: check_account4: account5: return_ok 1: c_login:購票用戶:登錄界面5: return_ok2: submit_info3: check_account:處理登錄4: account:系統數據庫 (3)車票查詢 :購票用戶:車票查詢界:查詢車票面1: c_query_ticket2: submit_ticket_info:車票數據3: request_info4: return_info1: c_query_ticket:購票用戶:車票查詢界面2: submit_ticket_info3: request_info:查詢車票4: return_info:車票數據 (4)車票預定 :購票用戶:車票查詢界:查詢車票面1: c_query_ticket2: submit_ticket_info:車票數據庫:預定車票:個人訂單3: request_info4: return_info5: c_reserve_ticket6: submit_order8: return_success7: create_order9: deliver_order 1: c_query_ticket5: c_reserve_ticket:購票用戶:車票查詢界面4: return_info2: submit_ticket_info:查詢車票8: return_success:車票數據庫3: request_info6: submit_order:個人訂單7: create_order9: deliver_order:預定車票 (5)訂單查詢 :購票用戶:訂單查詢界面:查詢訂單:個人信息:個人訂單1: query_order2: submit_info3: request_person_info4: return_info5: request_order6: return_order_info 1: query_order:購票用戶:訂單查詢界面2: submit_info:查詢訂單4: return_info6: return_order_info5: request_order3: request_person_info:個人訂單:個人信息 (6)取消訂單 :購票用戶:訂單查詢界面:查詢訂單:個人信息:個人訂單:取消訂單1: c_query_order2: submit_info3: request_person_info4: return_info5: request_order6: return_order_info7: c_cancel_order8: submit_cancel9: cancel_order10: return_success11: return_cancel_ok:購票用戶1: c_query_order7: c_cancel_order:訂單查詢界面6: return_order_info2: submit_info:查詢訂單8: submit_cancel5: request_order11: return_cancel_ok10: return_success3: request_person_info4: return_info:個人訂單:取消訂單9: cancel_order:個人信息 (7)信息查詢 :購票用戶:信息查詢界面:信息查詢:個人信息1: c_person_query2: submit_request3: query_info4: info5: return_person_info 1: c_person_query:購票用戶5: return_person_info:信息查詢界面2: submit_request3: query_info:信息查詢4: info:個人信息 (8)修改個人信息 :購票用戶:信息查詢界面:信息查詢:個人信息:修改信息1: c_person_query2: submit_request3: query_info4: info5: return_person_info6: c_edit_info7: request_edit8: edit_info9: true10: return_edit_ok1: c_person_query6: c_edit_info:購票用戶:信息查詢界面2: submit_request:信息查詢5: return_person_info10: return_edit_ok4: info3: query_info7: request_edit8: edit_info:修改信息9: true:個人信息 5.2 系統管理員的順序圖和協作圖 (1)添加用戶 :系統管理員:添加用戶界面:添加用戶:系統數據庫1: a_add_account2: add_request3: check_account4: true5: add_account6: ok7: return_add_ok1: a_add_account:添加用戶界面:系統管理員7: return_add_ok2: add_request3: check_account5: add_account:系統數據庫:添加用戶4: true6: ok (2)刪除用戶 :系統管理員:刪除用戶界面:刪除用戶:用戶信息1: a_delete_account2: delete_request3: check_account4: true5: delete_account6: true7: return_delete_ok :系統管理員1: a_delete_account7: return_delete_ok:刪除用戶界面:刪除用戶2: delete_request3: check_account5: delete_account4: true6: true:用戶信息 (3)修改用戶信息 :系統管理員:修改信息界面:修改用戶信息:用戶信息1: a_edit_account2: edit_request3: edit_info4: true5: return_edit_ok 1: a_edit_account:系統管理員:修改信息界面5: return_edit_ok2: edit_request3: edit_info:修改用戶信息4: true:用戶信息 (4)修改票務信息 :系統管理員:系統信息管理界面:票務信息修改:票務信息1: a_manage_info2: request_edit_ticket3: edit_info4: true5: get_info6: info7: return_new_info :系統信息管理界面1: a_manage_info:系統管理員7: return_new_info2: request_edit_ticket3: edit_info5: get_info:票務信息修改:票務信息4: true6: info (5)數據備份 :系統管理員:系統信息管理界面:數據備份:系統數據:備份數據1: a_manage_info2: backup_request3: backup_data4: data5: restore_data6: success 1: a_manage_info:系統管理員:系統信息管理界面2: backup_request:數據備份4: data6: success3: backup_data5: restore_data:系統數據:備份數據 6.狀態圖 6.1 車票狀態圖 添加車票車票可訂選定車票被選定提交訂單被預訂取消訂單完成支付已被取取票成功等待取票 6.2 用戶狀態圖 未注冊createAccountEvent已注冊關閉帳號帳號被注銷 7.組件圖 login.jspcustomer.javaregister.jspdata.java火車訂票系統java庫order_ticket.jsporder.javacancel_order.jspcancel.javaconsult_order.jspconsult.java 8.部署圖 路由器防火墻< 9.總結 通過這次對火車訂票系統的建模分析,讓我對全程城一體化建模的理解更深了。在做系統分析的時候,遇到了很多問題。其中最大的問題就是,系統在實際做的時候跟想的時候差距是很大的。做系統的時候要注意到所有的細節,要把每一步都想的非常清楚,只有這樣才能搭建一個合理的系統。 演講稿 工作總結 調研報告 講話稿 事跡材料 心得體會 策劃方案 單片機主程序流程 單片機教程 欄目導航 第一頁..單片機入門教程 第二頁..單片機c語言 第三頁..紅外遙控和步進電機 第四頁..單片機問答 3.主程序流程圖---51系列單片機設計實例教程 主程序流程圖如圖6.2所示。 圖6.2 主程序流程圖 本控制器在使用中,如要改變閃爍的方式,可按下相應的功能按鍵。當一個完整的閃爍循環結束后,即可轉入新的閃爍方式。由于鍵掃描是在閃爍循環結束時進行,因此,功能開關按下的時間應較長才能被讀入。改進的方法是把DL05S延時子程序用鍵掃描子程序來替代,這樣,只要按下按鍵即可被鍵掃描程序讀入。以下是LED小燈閃爍控制器的完整源程序: ;* * * * * * * * * * * *;; 小燈控制程序; ;* * * * * * * * * * * *; ; ;* * * * * * * * * * * *;; 中斷入口程序 ; 精心收集 精心編輯 精致閱讀 如需請下載! 演講稿 工作總結 調研報告 講話稿 事跡材料 心得體會 策劃方案 ;* * * * * * * * * * * *; ; ORG OOOOH;程序執行開始地址 LJMP START;跳至START執行 ORG OOO3H;外中斷0中斷入口地址 RETI; 中斷返回(不開中斷) ORG OOOBH;定時器TO中斷入口地址 RETI; 中斷返回(不開中斷) ORG OO13H;外中斷1中斷入口地址 RETI; 中斷返回(不開中斷) ORG 001BH;定時器T1中斷入口地址 RETI; 中斷返回(不開中斷) ORG 0023H;串行口中斷入口地址 RETI; 中斷返回(不開中斷) ; ;* * * * * * * * * * * *;; 初始化程序; ;* * * * * * * * * * * *; ; CLEAR: MOV 20H,#00H;20H單元內存清0(閃爍標志清0) SETB 00H; 20H.0位置1(上電時,自動執行閃爍功能1) 精心收集 精心編輯 精致閱讀 如需請下載! 演講稿 工作總結 調研報告 講話稿 事跡材料 心得體會 策劃方案 RET; 子程序返回 ; ;* * * * * * * * * * * *;; 主程序 ; ;* * * * * * * * * * * *; ; START: ACALL CLEAR; 調用初始化子程序 MAIN: LCALL KEYWORK; 調用鍵掃描子程序 JB OOH,FUNO;20H.0位為1時執行FUNO JB 01H,FUN1;20H.1位為1時執行FUN1 JB 02H,FUN2;20H.2位為1時執行FUN2 JB 03H,MAIN;備用 AJMP MAIN; 返回主程序MAIN ; ;* * * * * * * * * * * *;; 功能程序 ; ;* * * * * * * * * * * *; ;第1種閃爍功能程序 FUNO: MOV A,OFEH; 累加器賦初值 FUNOO: MOV P1,A; 累加器值送至P1口 LCALL DL05S; 延時 JNB ACC.7.MAIN;累加器最高位為0時轉MAIN 精心收集 精心編輯 精致閱讀 如需請下載! 演講稿 工作總結 調研報告 講話稿 事跡材料 心得體會 策劃方案 RL A; 累加器A中數據循環左移1位 AJMP FUNOO; 轉FUNOO循環 ; ;第2種閃爍功能程序 FUN1: MOV A,#OFEH; 累加器賦初值 FUN11: MOV P1,A; 累加器值送至P1口 LCALL DLO5S; 延時 CPL A; A中各位取反 MOV P1,A; 累加器值送至P1口 LCALL DL05S; 延時 AJMP MAIN; 轉MAIN ;* * * * * * * * * * * *;; 掃鍵程序 ; ;* * * * * * * * * * * *; ; KEYWORK:MOV P3#OFFH; 置P3口為輸入狀態 JNB P3.0,KEYO;讀P3.0口,若為0轉KEYO JNB P3.1,KEY1;讀P3.1口,若為0轉KEY1 JNB P3.2,KEY2;讀P3.2口,若為0轉KEY2 JNB P3.3,KEY3;讀P3.3口,若為0轉KEY3 RET; 子程序返回 ; 精心收集 精心編輯 精致閱讀 如需請下載! 演講稿 工作總結 調研報告 講話稿 事跡材料 心得體會 策劃方案 ;閃爍功能0鍵處理程序 KEYO: LCALL DL10MS; 延時10ms消抖 JB P3.0,OUTO;P3.0為1,子程序返回(干擾) SETB OOH; 20H.0位置1(執行閃爍功能1標志) CLR 01H; 20H.1位清0 CLR 02H; 20H.2位清0 OUTO: RET; 子程序返回 ; ;閃爍功能1鍵處理程序 KEY1: LCALL PL10MS JB P3.1,OUT1 SETB 01H; 20H.1位置1(執行閃爍功能2標志) CLR 00H CLR 02H CLR 03H OUT2: RET ; ;閃爍功能(備用)鍵處理程序 KEY3: LCALL DL10MS JB P3.2,OUT2 SETB 02H; 20H.2位置1(執行閃爍功能3標志) 精心收集 精心編輯 精致閱讀 如需請下載! 演講稿 工作總結 調研報告 講話稿 事跡材料 心得體會 策劃方案 CLR 01H CLR 00H CLR 03H OUT2: RET ; ;閃爍功能(備用)鍵處理程序 KEY3: LCALL DL10MS JB P3.3,OUT3 SETB 03H; 20H.3位置1(執行閃爍功能3標志) CLR 01H CLR 02H CLR 00H OUT3: RET ; ;* * * * * * * * * * * *;; 延時程序 ; ;* * * * * * * * * * * *; ;延時子程序,執行一次時間為513us DL512: MOV R2,#OFFH LOOP1: DJNZ R2,LOOP1 RET ; 精心收集 精心編輯 精致閱讀 如需請下載! 演講稿 工作總結 調研報告 講話稿 事跡材料 心得體會 策劃方案 ;10ms延時子程序(調用20次0.5ms延時子程序) DL10MS:MOV R3,#14H LOOP2: LCALL DL512 DJNZ R3,LOOP2 RET ; ;延時子程序,改變R4寄存器初值可改變閃爍的快慢(時間為25msX15) DL05s: MOV R4,#OFH LOOP3: LCALL DL25MS DJNZ R4,LOOP3 RET ; ;延時子程序,改變R4寄存器初值可改變閃爍的快慢(時間為25msX15) DL05S: MOV R4,#OFH LOOP3: LCALL DL25MS DJNZ R4,LOOP3 RET ; ;25ms延時子程序,調用掃鍵子程序延時,可快速讀出功能按鍵值 DL25MS:MOV R5,#OFFH LOOP4: LCALL KEYWORK DJNZ R5,LOOP4 精心收集 精心編輯 精致閱讀 如需請下載! 演講稿 工作總結 調研報告 講話稿 事跡材料 心得體會 策劃方案 RET END; 程序結束 12個經典單片機程序設計實例: 閃爍LED小燈主程序圖 數碼管時鐘電路的主程序 單鍵學習型遙控器的設計 15路電器遙控器的設計 自行車里程/速度計的設計 自動往返行駛小汽車的設計 遙控小汽車的設計 數碼管時鐘電路的設計 8*8點陣LED字符顯示器的設計 8路輸入模擬信號數值顯示電路的設計 8路輸入模擬信號數值顯示電路程序 單鍵學習型遙控器的程序如果對本文有疑問,請到論壇提問 編輯:51單片機學習網 @ 2009-10-20校對 中國開發板最佳品牌 版權:部分由編輯摘引,權利屬原著作人 精心收集 精心編輯 精致閱讀 如需請下載!第三篇:火車訂票系統c++程序
第四篇:火車訂票系統部分 uml[推薦]
第五篇:單片機主程序流程