火車售票系統
一、專案需求
(1)查詢功能:查詢車票資訊,包括起始地、車次、余票和票價;
(2)訂票功能:車票預訂;
(3)修改功能:修改訂票資訊;
(4)錄入管理功能:輸入車票的基本資訊;
(5)顯示功能:將查詢到的資訊顯示出來,供用戶查看。
二、系統設計思想
(1)火車訂票系統總體結構。
主程式分為售票服務和系統管理(票務管理和車站管理)。
(2)售票服務模塊分為查詢、訂票和退票。
(3)車站管理分為查詢、添加、修改和洗掉。
(4)票務管理分為查詢、添加、洗掉和修改。
三、專案實作
1頭檔案 ticket.h
定義車站資訊結構體,訂票資訊結構體及其輔助結構體;其中的函式宣告分別按照系統管理、站點管理、票務管理、票務服務和主調五個大模塊進行劃分和宣告。
//#ifdef _TICKET_H//判斷TICKET宏是否未被定義
#define _TICKEY_H//定義TICKET預處理宏
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>//UTC(世界標準時間),Calendar Time(日歷時間),epoch(時間點),clock tick(時鐘計時單元)
#include <conio.h>
#define STARION_NUM 100//車站數
#define TICKET_NUM 1000//車票數
#define STR_LEN 10//字符陣列的長度
typedef struct
{
int stdtionId;//車站號
char form[STR_LEN];//車票起點
char to[STR_LEN];//車票終點
int money;//票價
int numbers;//票數
}StationInfo;//車站票務資訊
typedef struct
{
StationInfo station[STATION_NUM];//結構體計數器
int count;//計數器
}Station;
typedef struct
{
int stationId;//車站號
int seatId;//座位號,與票數相關
int ticketId;//車票編碼
char trainId[STR_LEN];//火車車次
char date[STR_LEN];//出發日期
char time[STR_LEN];//出發時間
}TicketInfo;//車票資訊
typedef struct
{
TicketInfo ticket[TICKET_NUM];
int count;
}Ticket;
typedef struct
{
int autoId;//隨機生成的訂票號,退票使用
char name[STR_LEN];//訂票人姓名
TcketInfo ticketInfo;
}BookInfo;//訂票資訊
typedef struct
{
Bookinfo book[TICKET_NUM];
int count;
}Book;
/*主調模塊檔案doMain.c用到的函式模塊*/
void start(int &flag);//系統開始函式
void initialize(Station &station,Ticket &ticket,Book &book);//初始化資料
/*系統管理模塊檔案systemManage.c用到的函式模塊*/
//系統管理
void systemManage(Station &station,Ticket &ticket,Book &book,int &flag);
/*站點管理模塊檔案stationManage.c用到的函式模塊*/
void addStation(Station &station,Ticket &ticket,int i);//添加車站
void printStation(Station &station);//顯示車站資訊
void stationManage(Station &station,Ticket &ticket,Book &book,int &flag);//站點管理
void updateStation(Station &station,Ticket &ticket);//更新車站資訊
void updateTicketPrice(Station &s,int stationId);//更新車票價格 未實作
void updateTicketNum(Station &s,int stationId,Ticket &t);//更新車票數量 未實作
/*票務管理模塊檔案ticketManage.c用到的函式*/
void addTicket(int sationId,int count,Ticket &ticket);//添加車票資訊
void deleteTicket(Station &station,Ticket &ticket);//洗掉車票資訊
void showOnsaleTickets(Stataion &station);//顯示待售車票
void showsaledTickets(Book b);//顯示已售資訊
void ticketManage(Station &station,Ticket &ticket,Book &book,int &flag);//票務管理
/*客戶票務服務檔案ticketServices.c用到的函式模塊*/
void ticketBook(Book &book,Ticket &ticket,Station &s);//訂票
void addBookInfo(Book &b,Ticket &t,int stationId,int bookNum);//添加訂票資訊
void ticketInquire(Station s,Ticket ticket);//查詢票務資訊
void ticketServices(Station &s,Ticket &t,Book &b,int &flag);//票務服務
//#endif
2主調模塊實作檔案doMain.cpp
#include "ticket.h"
Station station;
Ticket ticket;
Book book;
int flag = 1;
void initialize(Station &station,Ticket &ticket,Book &book)//初始化資料
{
station.count = 0;//車站資訊初始化
ticket.count = 0;//車票資訊初始化
book.count = 0;//訂票資訊初始化
}
void start(int&falg)//系統開始函式
{
int option;
if(flag)
{
int i = 0;//第一錄入車站資訊個數
printf("\n本系統第一次運行,請添加車站及對應車票資訊!\n");
initialize(station,ticket);//初始化資料
printf("\n請輸入添加車站資訊的個數:");
scanf("%d",i);
if(i > 0)
{
addStation(station,ticket,i);//添加車站 i添加車站的數量
flag = 1;
}else start(flag);//輸入其他資料,重修執行系統開始函式,相當于對輸入進行判斷
}
//系統開始界面,3個操作選項
printf("\n");
printf("\t\t**************************************\n");
printf("\t\t\t售票服務-----------------1\n");
printf("\t\t\t系統管理-----------------2\n");
printf("\t\t\t退出系統-----------------0\n");
printf("\t\t**************************************\n");
printf("\t\t請選擇:");
scanf("%d",&option);
switch(option)
{
case 1:
ticketServices(station,ticket,book,flag);//售票服務
flag = 0;
break;
case 2:
systemManage(station,ticket,boob,flag);//系統管理選單
flag = 0;
break;
case 0:
printf("謝謝你的使用!\n");
exit(0);//0 代碼一切正常的時候退出;1非正常退出
break;
default://對option的輸入判斷
printf("\n選擇出錯!\n");
flag = 0;
start(flag);
break;
}
}
int main()
{
srand((unsigned int)time)(NULL);//在呼叫rand()前必須先利用srand()設好亂數種子,未設rand()會自動設亂數種子
while(1) start(flag);
3系統管理功能模塊實作檔案systemManage.cpp
#include "ticket.h"
//系統管理選單
void sysytemManage(Station &station, Ticket &ticket, Book &book, int &flag)
{
int option;
//系統管理選單界面
printf("\t\t**************************************\n");
printf("\t\t\t站點操作-----------------1\n");
printf("\t\t\t票務操作-----------------2\n");
printf("\t\t\t回傳上一級選單-----------0\n");
printf("\t\t**************************************\n");
printf("\t\t請選擇:");
scanf("%d",&option);
switch(option)
{
case 1:
stationManage(station,ticket,book,flag);//站點管理
break;
case 2:
ticketManage(station,ticket,book,flag);//票務管理
break;
case 0:
start(flag);
break;
default:
printf("\n選擇出錯!\n");
systemManage(station,ticket,book,flag
4站點管理功能模塊實作檔案stationManage.cpp
#include "ticket.h"
//車站管理
void stationManage(Station &station,Ticket &ticket,Book &book,int flag)
{
int i = 0;
int option;
//車站管理界面
printf("\t\t**************************************\n");
printf("\t\t\t查看車站資訊-----------------1\n");
printf("\t\t\t添加車站資訊-----------------2\n");
printf("\t\t\t修改車站資訊-----------------3\n");//要求修改票價和余量票
printf("\t\t\t洗掉車站資訊-----------------4\n");
printf("\t\t\t回傳上一級選單-----------------0\n");
printf("\t\t**************************************\n");
printf("\t\t請選擇:");
scanf("%d",&option);
switch(option)
{
case 1:
printStation(station);//列印站點資訊
break;
case 2:
printf("\n請輸入添加車站資訊的個數:");
scanf("%d",&i);
printf("%d\n",i);
if(i > 0)
addStation(station,ticket,i);//添加站點
break;
case 3:
updateStation(station,ticket);//更新站點資訊
break;
case 4:
deleteStation(station,ticket);//洗掉站點資訊
break;
case 0:
systemManage(station,ticket,book,flag);//回傳系統管理選單
break;
default :
printf("\n選擇出錯!\n");
break;
}
}
void addStation(Station &s,Ticket &t,int snum)
{//添加車站 snum添加車站的數量
int i = s.count;//車站初始數量
int end = s.count + snum;//車站總數
printf("\n請輸入%d個車站資訊:\n",snum);
for(;i < end; i++)
{
//輸入車站資訊:起點站、終點站、票價、票數、票務資訊
printf("----------------------------\n");
printf("請輸入第%d個車站資訊:\n",i+1);
printf("1.請輸入起點站名:\t");
scanf("%s",s.station[i].from);
printf("2.請輸入終點站名:\t");
scanf("%s",s.station[i].to);
printf("3.請輸入票價:\t");
scanf("%d",&s.station[i].money);
printf("4.請輸入票數:\t");
scanf("%d",&s.station[i].numbers);
s.station[i].stdtionId = rand()%1000;//生成一萬以內的隨機個元素
printf("\n\t5.請添加票務資訊:\n");
addTicket(s.station [i].stdtionId,s.station[i].numbers,t);//添加車票資訊
printf("**第%d個車站資訊和票務資訊添加記錄成功!**\n",i+1);
printf("----------------------------\n");
s.count++;
}
}
void printStation(Station &s)
{//函式功能:列印站點資訊
int i ;
printf("\n\t車站編號\t起點\t終點\t票價\t剩余票數\n");
printf("----------------------------\n");
for(i = 0;i < s.count; i++)
{
if(!s.station[i].stdtionId)//當車站編號為空時,彈出提示并退出
{
printf("無車站資訊!\n");
break;
}
printf("\t\t%d\t%s\t%s\t%d\t%d\n",s.station[i].stdtionId,s.station[i].form,
s.station[i].to,s.station[i].money,s.station[i].numbers);//列印車站編號、起點、終點、票價、剩余票數
printf("----------------------------\n");
}
}
void updateStation(Station &s,Ticket &t)
{//更新車站資訊
int stationId;
printfStation(s);//列印站點資訊
printf("\n\t\t選擇要修改的車站序號:");
scanf("%d",&s
5票務管理功能模塊實作檔案ticketManage.cpp
#include "ticket.h"
//車票管理
void ticketManage(Station &station,Ticket &ticket,Book &book,int &flag)
{
int option;
//車票管理界面
printf("\t\t**************************************\n");
printf("\t\t\t已售車票-----------------1\n");
printf("\t\t\t剩余車票-----------------2\n");
printf("\t\t\t回傳上一級選單-----------0\n");
printf("\t\t**************************************\n");
printf("\t\t請選擇:");
scanf("%d",&option);
switch(option)
{
case 1:
showSaledTickets(book);//顯示待售車票
break;
case 2:
showSaleTickets(station);//顯示已售車票
break;
case 0:
systemManage(station,ticket,book,flag);
break;
default:
printf("\n選擇錯誤!\n");
ticketManage(station,ticket,book,falg);
break;
}
}
void addTicket(int stationId,int number,Ticket &t)//添加車票資訊
{
//初始化長度
int i = t.count;
int end = t.count + number;
char trainId[STR_LEN],date[STR_LEN],time[STR_LEN];
printf("\t\t列車車次(%d個字符以內):",STR_LEN);
scanf("%s",trainId);
printf("\t\t列車出發日期(%d個字符以內):",STR_LEN);
scanf("%s",date);
printf("\t\t列車出發時間(%d個字符以內):",STR_LEN);
scanf("%s",time);
for(;i < end; i++)
{
//賦值車站號、座位號、車票編碼
t.ticket[i].stationId = stationId;
t.ticket[i].seatId = rand()/100;
t.ticket[i].ticketId = rand()%1000;
//字串復制出發日期、出發時間、火車車次
strcpy(t.ticket[i].date,date);
strcpy(t.ticket[i].time,time);
strcpy(t.ticket[i].trainId,trainId);
t.count++;
}
}
void deleteTicket(int stationId,Ticket &t)//洗掉站點對應的車票資訊
{
int i,j;
for(i = 0;i < t.count; i++)//遍歷車票資訊陣列
{
if(t.ticket[i].stationId == stationId)//如果洗掉的站點存在
{
for(j = i;j < t.count; j++)
t.ticket[j] = t.ticket[j+1];//洗掉車票資訊操作
}
}
}
void showSaledTickets(Book b)//顯示已售車票
{
int i;
printf("\t\t售票情況如下:\n");
printf("\t\t--------------------------------\n");
printf("\t\t訂票號\t車次\t出發日期\t出發時間\t座號\t訂票人\n");
printf("\t\t--------------------------------\n");
for(i = 0; i < b.count; i++)
{
printf("\t\t%d\t%s\t%s\t%s\t%d\t%s\n",b.book[i].autoId,b.book[i].ticketInfo.ticketId,
b.book[i].ticketInfo.date,b.book[i].ticketInfo.time,b.book[i].ticketInfo.seatId,b.book[i].name);
printf("\t\t--------------------------------\n");
}
}
void showOnsaleTickets(Station &s)//顯示待售車票
{
printStation(s);//列印站點資訊
g
6售票服務功能模塊實作檔案ticketServices.cpp
#include "ticket.h"
void ticketServices(Station &s,Ticket &t,Book &b,int &flag)//售票服務
{
int option;
printf("\t\t**************************************\n");
printf("\t\t\t車票查詢-----------------1\n");
printf("\t\t\t預訂車票-----------------2\n");
printf("\t\t\t退訂車票-----------------3\n");
printf("\t\t\t回傳上一級選單-----------0\n");
printf("\t\t**************************************\n");
printf("\t\t請選擇:");
scanf("%d",&option);
switch(option)
{
case 1:
ticketInquire(s,t);
break;
case 2:
ticketBook(b,t,s);
break;
case 3:
//退票服務
break;
case 0:
flag =
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/280022.html
標籤:C++ 語言
上一篇:PC軟體自動升級問題
