任務要求:
創(chuàng)建一個火車票管理系統(tǒng),功能包括:
(1)錄入班次信息(信息用文件保存),可不定時地增加班次數(shù)據
(2)瀏覽班次信息,可顯示出所有班次當前狀總(如果當前系統(tǒng)時間超過了某班次的發(fā)車時間,則顯示“此班已發(fā)出”的提示信息)。
(3)查詢路線(起點、終點):可按班次號查詢 ,可按終點站查詢
(4)增加及修改班次和刪除班次信息
(5)售票和退票功能
系統(tǒng)設計:
一.車票管理系統(tǒng)的功能為:1.錄入班次2. 顯示所有班次3.查詢班次4.增加班次?? 5.售票6.退票7.修改班次8.刪除班次9.退出
車票管理系統(tǒng)軟件的功能模塊有:
(1)提供菜單界面,方便用戶對程序個功能進行選擇,選擇要實現(xiàn)的功能按enter鍵進入該功能。
(2)接受用戶輸入的功能項,按enter鍵結束輸入并將進入該系統(tǒng),其需要的結果顯示出來,方便用戶查看。
(3)完成每次功能,可保存用戶的修改的信息,及時更新文件信息。下次查詢時內容為最新信息。實時的信息更新對比等。
一個名TICKET的結構體進行定義,包括num[10] hour[3]; min[3] from[10]; to[10]; hours max; now;等結構體成員。
然后對調用函數(shù)進行定義。int system_time()系統(tǒng)時間,void NewMessage()???????????? 新紀錄錄入函數(shù),void ShowTable1() void ShowTable2(int i) 線框調用1和2不用每次輸,void Display()顯示所有函數(shù),void add()增加記錄,void save()????????? 保存函數(shù),void save()保存函數(shù),void load() 按班次查詢函數(shù),void search()?????? 查詢函數(shù),void change()修改函數(shù),void quit()退出函數(shù),void Ticketorder()??????? 售票函數(shù),void Ticketdelete()刪除函數(shù),int menu_select()菜單函數(shù), int whether(int)判斷時間是否超出函數(shù),void? find(char s1[],char s2[])???????? 查詢函數(shù)★//s1為班次//s2為終點站,void deletemessage()刪除函數(shù),int findnum(char s1[])班次查詢函數(shù),void get(int,int)修改及增加班次,char *menu[]菜單函數(shù)。
該系統(tǒng)將這些信息均放在文件d:車票管理系統(tǒng)0中。
最后定義main()函數(shù),利用函數(shù)調用,實現(xiàn)程序的各種功能。將其放在系統(tǒng)文件d:車票管理系統(tǒng)0中。
程序分為多個小模塊,通過調用實現(xiàn)各種功能,增強了程序的可建設性。
程序把每種功能分開實現(xiàn),更簡單,實用程序更易理解。
程序測試:
3.0? 菜單界面
圖3-1菜單界面
如上圖所示,該程序為用戶提供菜單界面,用戶可以對程序的各種功能進行選擇,方便用戶使用。選擇1-9并按enter鍵進行操作。如選擇出錯,系統(tǒng)將提出警告,并提醒用戶重新進行選擇。
-
- ?錄入班次功能
圖3-1- 1第一次輸入時的界面
圖3-1- 2第二次輸入時的界面
如上圖所示,該功能實現(xiàn)錄入班次信息。選擇1按enter鍵進入該功能,程序提醒用戶輸入車次.發(fā)車時間.起始站.終點站.行車時間.額定載量.已售票數(shù),輸入完畢后按enter鍵將完成錄入班次結果,同時程序將再次提醒用戶進行新的選擇。而第二次輸入時提醒已經輸過,不能在加。
3.2查詢所有班次功能
圖? 3-2-1查詢班次界面
圖3-2-2選擇查詢方式的界面
該功能將實現(xiàn)程序運行班次的查詢。選擇3并按enter鍵將實現(xiàn)該功能。分班次和終點站兩種方式查詢。
3.3增加班次功能
圖3-2-3增加班次功能界面
圖3-2-4增加班次后界面
該功能將增加班次信息,幫助用戶更新班次信息。選擇4并按enter鍵將實現(xiàn)該功能,再按提示輸入就行。按任意鍵返回主菜單。
3.3售票功能
圖3-3-1選擇售票功能界面
圖3-3-2選擇售票后的界面
圖3-3-3訂票的界面
選擇5按enter鍵實現(xiàn)該功能,按任意鍵關閉程序。買票程序可提示買票成功否,且自動判斷是否可賣。
3.4退票功能
圖3-4-1退票界面
選擇6按enter鍵實現(xiàn)該功能,按任意鍵關閉程序。退票程序可提示退票成功否,且自動判斷是否可退。
3.5修改班次功能
圖3-5-1修改界面
選擇7按enter鍵實現(xiàn)該功能,按任意鍵關閉程序。按提示操作修改班次。
3.6? 刪除班次功能
圖3-6-1刪除界面
3.7 ?退出功能
圖3-7-1退出界面
該功能可退出系統(tǒng),選擇9按enter鍵實現(xiàn)該功能
部分程序:
#include<stdio.h>? ???????????? ///宏定義函數(shù)
#include<string.h>??????????? //串操作及內存操作函數(shù)
#include<stdlib.h>???????????? /調用系統(tǒng)函數(shù)
#include<time.h>????? ?????????///時間庫函數(shù)???
#include<conio.h>???????????????? ///輸入輸出函數(shù)
#define N 1000??????????????????? //宏定義多條記錄
typedef struct TICKET??????????? 定義新結構體TICKET
{
?? char num[10];????????????????? //車次編號
?? char hour[3];?????????????? //時間,,小時
?? char min[3];?????????????? //分鐘
?? char from[10];??????? //起始站
?? char to[10];???????? //終點站
?? float hours;????????? //車程實際時間
?? int max;??????????? //最大車載容量
?? int now;?????????? //已售票數(shù)
}CLASS;
int class_num=0;????????????? ///初始班次總數(shù)為0?????
CLASS records[N];??????????? // 多條記錄
int system_time();?? //系統(tǒng)時間
void NewMessage();????? ???????//新紀錄*錄入函數(shù)******
void ShowTable1();???????? //線框調用1,,,不用每次輸?
void ShowTable2(int i);???? //線框調用2,,,不用每次輸???
void Display();?????????? //顯示所有函數(shù)
void add();???????????? //增加記錄
void save();????????? //?? 保存函數(shù)
void load();????????????? // 按班次查詢函數(shù)
void search();??????? //查詢函數(shù)
void change();???? //修改函數(shù)**
void quit();????????? // //退出函數(shù)******
void Ticketorder();??????? //??? //*售票函數(shù)***
void Ticketdelete();???????? //刪除函數(shù)*
int menu_select();???????? //菜單函數(shù)*
int whether(int);?????????? 判斷時間是否超出函數(shù)***
void? find(char s1[],char s2[]);???????? //查詢函數(shù)★//s1為班次//s2為終點站
void deletemessage();?????????? //刪除函數(shù)
int findnum(char s1[]);?????????? //班次查詢函數(shù)
void get(int,int);???????? //修改及增加班次*
char *menu[]={"*****************歡迎使用火車票查詢系統(tǒng)*****************",
"n*******************MENU功能菜單***********************",
"n????????????????? 1. 錄入班次??????????????????????? ",
"n????????????????? 2. 顯示所有班次??????????????????? ",
"n????????????????? 3. 查詢班次??????????????????????? ",
"n????????????????? 4. 增加班次??? ????????????????????",
"n????????????????? 5. 售票??????????????????????????? ",
"n????????????????? 6. 退票??????????????????????????? ",
"n????????????????? 7. 修改班次??????????????????????? ",
"n????????????????? 8. 刪除班次??????????????????????? ",
"n????? ????????????9. 退出??????????????????????????? "};??????????????????????????????
/**************************主函數(shù)*************************/
void main()
{?
?? system("cls");??????????? //刷屏
?? while(1)??????????????????? //菜單函數(shù)循環(huán)
?? {
????? switch(menu_select())??????? ??????????//菜單函數(shù)*
????? {
????? case 1: NewMessage();break;???? 新紀錄*錄入函數(shù)******
????? case 2: Display();break;?????????????? // //顯示
????? case 3: search();break;?????????? //查找函數(shù)**
????? case 4: add();break;?????????????? // //增加記錄
????? case 5: Ticketorder();break;????????? ?*售票函數(shù)***
????? case 6: Ticketdelete();break;??????? //刪除函數(shù)*
????? case 7: change();break;????????????? //修改函數(shù)**
????? case 8: deletemessage();break;???? //選擇調用刪除函數(shù)
????? case 9: quit();break;????? //退出函數(shù)******
????? }
?? }
}
/***********************菜單函數(shù)**************************/
int menu_select()???????? /菜單函數(shù)*
{
?? char s[5];?????????? ///定義要輸入的數(shù)字功能
?? int c,i;????????
?? system("cls");?????????? //刷屏
?? system("color 07");//改變顏色
?? for(i=0;i<11;i++)
?? {
????? printf("%s",menu[i]);?? //輸出菜單各項)
?? }
?? i=0;
??? while(c<0||c>9)???????????? //判斷是否是1到9的命令
?? {?
????? printf("n");?????????????? ///輸出換行
?????
??????? printf("******************************************************");
??????? printf("n請選擇(1-9):");
????? scanf("%s",s);
????? c=atoi(s);??????????????????? //atoi將字符串轉換成一個整數(shù)值
?? }? ??????????///輸出菜單面
?? return c;?????????? 返回請求???????????
}
/*******************************錄入函數(shù)************************************/
void NewMessage()??????????? //*錄入函數(shù)******
{? ????
?? int i=0,j=5,h;?????????????????
?? char s[5];
?? FILE *fp;??????? ???????定義文件型指針變量
?? system("cls");????? //刷屏
?? if((fp=fopen("d:車票管理系統(tǒng)0.dat","rb"))!=NULL)??? //fopen打開文件
?? {?
??????? printf("車票信息已經存在請選擇增加功能!n");
????? printf("任意輸入則返回菜單n");
????? scanf("%s",s);
????? i=1;????? ?? //通過是1
?? }?
?? if(i==0)
?? {??????????????
????? system("cls");??? //刷屏
????? printf("請輸入要錄入班次總數(shù):n");
????? scanf("%d",&class_num);??????? //指向班次指針
????? system("cls");??? //刷屏
????? for(i=0;i<class_num;i++)?????????????
????? {?
????????? system("cls");??? //刷屏
????????? printf("請輸入第%d個班次信息:n",i+1);
????????? h=-1;
????????? for(;h!=i;)???????????? ///循環(huán)輸出
????????? {
???????????? printf("請輸入班次:n");
???????????? scanf("%s",records[i].num);
???????????? for(h=0;h<i;h++)
??????????????? if(strcmp(records[h].num,records[i].num)==0)??
?????????????????? //判斷字符串比較是否相等,, 待比較的字符串???????????????
??????????????? {
?????????????????? printf("輸入錯誤!該班次已存在!n");
?????????????????? break;????????? ///返回
??????????????? }??????????????
????????? }
????????? get(i,j);?????????? 修改及增加班次*
????????? j=5;????????
????? }
????? save();?????????? //調用保存函數(shù)
?? }?
}
/*******************************顯示所有函數(shù)********************************/
資料包括:
需要完整的資料可在我的資源里下載,也可以加入我的紛傳圈子,里面有資源壓縮包的百度網盤下載地址及提取碼。
紛傳點擊用微信打開即可,過程有點繁瑣請見諒。