C++實(shí)現(xiàn)航空訂票程序
這是幫我同學(xué)寫的一個(gè)C++作業(yè),說實(shí)話好久沒寫過C++都有些生疏了。但他們好像還沒學(xué)面向?qū)ο缶幊?,所以只能是簡單的結(jié)構(gòu)體和輸入輸出的邏輯。
題目要求:
編寫一個(gè)航空訂票程序:
假設(shè)一等艙5個(gè)座位,編號(hào)為1~5,經(jīng)濟(jì)艙20個(gè)座位,編號(hào)為1~20
具體要求如下:
當(dāng)程序開始時(shí),提示輸入乘客姓名,一個(gè)名字只能訂一個(gè)座位,如果該名字已經(jīng)訂過座位了,則提示該乘客座位已定及座位號(hào),否則提示輸入艙位類型;
當(dāng)輸入艙位類型后,如果該艙位已全部訂出,則提示此艙全部訂完,重新選擇艙位類型;否則顯示可以選擇的座位號(hào),注意已經(jīng)被訂出的座位號(hào)不能出現(xiàn),提示輸入座位號(hào);
艙位類型:只能輸入”F”或”E”,一等艙為F,經(jīng)濟(jì)艙為E,如果輸入其它字符則提示輸入無效。
座位號(hào):只能輸入前面列出可以選擇的座位號(hào),若輸入其它則提示輸入無效。
程序可以為多個(gè)乘客訂票,直到輸入名字為”.”;
最后程序按照艙位類型與座位號(hào)排序打印出所有訂票信息(座位號(hào)及對應(yīng)乘客姓名)
最終實(shí)現(xiàn)效果:
1、變量
不過既然提到了結(jié)構(gòu)體用來存儲(chǔ)票的信息(其實(shí)這就是面向?qū)ο笏枷氲脑缙冢B?lián)系實(shí)際,一個(gè)結(jié)構(gòu)體代表一個(gè)事物,結(jié)構(gòu)體中的字段代表這個(gè)事物的屬性;這樣的話,我們可以提取出兩個(gè)結(jié)構(gòu)體:座位Seat和票Ticket,由于題目給定總共25個(gè)座位,意味著25張票,則將它們聲明成全局變量。
//座位,那么座位有3個(gè)基本屬性:座位類型(F/E),座位編號(hào),座位預(yù)定狀態(tài)(是否已經(jīng)被預(yù)定)
struct Seat{
char type;
int number;
bool isReservation;
}seats[25];
//票,票有兩個(gè)屬性,即票需要表明:誰預(yù)定了哪個(gè)座位,第一個(gè)Seat就是我們前面定義的那個(gè)結(jié)構(gòu)體。
struct Ticket{
Seat seat;
string passenger_name;
}tickets[25];
2、函數(shù)
我們需要將一些輸出輸入的操作提取成函數(shù),簡化我們的代碼,這里之所以將輸入提取成input()函數(shù),是因?yàn)槲覀冃枰粩噍斎耄词钩鲥e(cuò),所以為了便于遞歸調(diào)用就封裝成函數(shù);
bool check(string name);//檢測是否已購票 void input();//用于執(zhí)行輸入 void printSeat(char seatType);//顯示剩余座位 void reservation(string name,int seatNumber,char seatType);//購票 void printTickets(string name);//顯示已購票信息 void printError();//顯示輸入不合法
3、主體邏輯
main函數(shù)非常簡單,首先需要將座位和票信息初始化,即將它們編號(hào),預(yù)定狀態(tài)全為“未預(yù)定”,然后執(zhí)行輸入,一個(gè)while循環(huán),如果不符合條件就直接跳出while,執(zhí)行printTickets()打印出所有的訂票信息;
int main()
{
//初始化艙位和票
for(int i=0;i<25;i++){
if(i<5){
seats[i].type='F';
seats[i].number=i+1;
}else{
seats[i].type='E';
seats[i].number=i+1-5;
}
seats[i].isReservation=false;
tickets[i].seat=seats[i];
tickets[i].passenger_name=" ";
}
cout<<"================================================="<<endl;
cout<<" 歡迎使用CT票務(wù)系統(tǒng) "<<endl;
cout<<"================================================="<<endl;
cout<<"乘客姓名:";
while(cin>>name){
if(name==".")break;
if(surplusF+surplusE==0){
cout<<"\n很遺憾所有票已購?fù)?!\n";
break;
}
if(check(name)){
cout<<"\n您已購票,購票信息:\n"<<endl;
printTickets(name);
}else{
cout<<"\n艙位類型 F:一等艙 E:經(jīng)濟(jì)艙\n";
input();
}
cout<<"\n乘客姓名:";
}
printTickets("");
return 0;
}
4、具體函數(shù)實(shí)現(xiàn)
具體的函數(shù)實(shí)現(xiàn)邏輯我就不講了,就看代碼吧~
5、完整代碼:
main.cpp
#include<iostream>
using namespace std;
//定義全局變量,艙位,票,各類型艙位剩余數(shù),便于其它函數(shù)全局訪問
int surplusF=5;
int surplusE=20;
int flag=0;
char seat_type;
int seatNumber;
string name;
//座位
struct Seat{
char type;
int number;
bool isReservation;
}seats[25];
//票
struct Ticket{
Seat seat;
string passenger_name;
}tickets[25];
bool check(string name);//檢測是否已購票
void input();//用于執(zhí)行輸入
void printSeat(char seatType);//顯示剩余座位
void reservation(string name,int seatNumber,char seatType);//購票
void printTickets(string name);//顯示已購票信息
void printError();//顯示輸入不合法
int main()
{
//初始化艙位和票
for(int i=0;i<25;i++){
if(i<5){
seats[i].type='F';
seats[i].number=i+1;
}else{
seats[i].type='E';
seats[i].number=i+1-5;
}
seats[i].isReservation=false;
tickets[i].seat=seats[i];
tickets[i].passenger_name=" ";
}
cout<<"================================================="<<endl;
cout<<" 歡迎使用CT票務(wù)系統(tǒng) "<<endl;
cout<<"================================================="<<endl;
cout<<"乘客姓名:";
while(cin>>name){
if(name==".")break;
if(surplusF+surplusE==0){
cout<<"\n很遺憾所有票已購?fù)?!\n";
break;
}
if(check(name)){
cout<<"\n您已購票,購票信息:\n"<<endl;
printTickets(name);
}else{
cout<<"\n艙位類型 F:一等艙 E:經(jīng)濟(jì)艙\n";
input();
}
cout<<"\n乘客姓名:";
}
printTickets("");
return 0;
}
bool check(string name)
{
for(int i=0;i<25;i++){
if(name==tickets[i].passenger_name)
return true;
}
return false;
}
//負(fù)責(zé)輸入,之所以單獨(dú)寫成函數(shù),是因?yàn)榉欠ㄝ斎氲臅r(shí)候需要遞歸調(diào)用
void input()
{
flag=0;
cout<<"\n艙位類型(F/E):";
cin>>seat_type;
cin.get();
switch(seat_type){
case 'F':
if(surplusF>0)
cout<<"\n可選座位號(hào):";
printSeat('F');
if(flag!=0)break;
cin>>seatNumber;
cin.get();
reservation(name,seatNumber,'F');
break;
case 'E':
if(surplusE>0)
cout<<"\n可選座位號(hào):";
printSeat('E');
if(flag!=0)break;
cin>>seatNumber;
cin.get();
reservation(name,seatNumber,'E');
break;
default:
printError();
input();
break;
}
}
//輸出可選的座位號(hào)
void printSeat(char seatType)
{
int full=0;
for(int i=0;i<25;i++){
if(seats[i].isReservation==false){
if(seatType=='F'){
if(surplusF==0){
cout<<"\n此艙位全部訂完,請重新選擇艙位類型:\n";
full++;
break;
}
cout<<seats[i].number<<" ";
if(i==4) break;
}
if(seatType=='E'){
if(surplusE==0){
cout<<"\n此艙位全部訂完,請重新選擇艙位類型:\n";
full++;
break;
}
if(i>4){
cout<<seats[i].number<<" ";
}
}
}
}
if(full==0){
cout<<"\n";
cout<<"\n座位號(hào):";
}else{
input();
flag++;
}
}
//輸入無效
void printError()
{
cout<<"\n輸入無效!"<<endl;
}
//購票,即改變seats tickets 屬性值
void reservation(string name,int seatNumber,char seatType)
{
if(seatNumber<1&&seatNumber>20){
printError();
}
else{
switch(seatType){
case 'F':
if(seatNumber>0&&seatNumber<6){
if(seats[seatNumber-1].isReservation==false){
seats[seatNumber-1].isReservation=true;
tickets[seatNumber-1].seat=seats[seatNumber-1];
tickets[seatNumber-1].passenger_name=name;
surplusF--;
cout<<"\n 恭喜 "+name+" 訂票成功!"<<endl;
break;
}else{
printError();
//input();
}
}else
printError();
break;
case 'E':
if(seatNumber>0&&seatNumber<=20){
if(seats[seatNumber+4].isReservation==false){
seats[seatNumber+4].isReservation=true;
tickets[seatNumber+4].seat=seats[seatNumber+4];
tickets[seatNumber+4].passenger_name=name;
surplusE--;
cout<<"\n 恭喜 "+name+" 訂票成功!"<<endl;
break;
}else{
printError();
}
}else
printError();
break;
}
}
}
void printTickets(string name)
{
cout<<"================================================="<<endl;
cout<<" 訂 票 信 息 "<<endl;
cout<<"================================================="<<endl;
cout<<" 艙位類型 座位號(hào) 乘客姓名 "<<endl;
cout<<"\n";
for(int i=0;i<25;i++){
if(name==tickets[i].passenger_name){
switch(tickets[i].seat.type){
case 'F':
cout<<" 頭等艙 ";
break;
case 'E':
cout<<" 經(jīng)濟(jì)艙 ";
break;
}
cout<<tickets[i].seat.number<<" "<<tickets[i].passenger_name<<endl;
cout<<"\n";
break;
}
else if(name==""){
if(tickets[i].seat.isReservation==true){
switch(tickets[i].seat.type){
case 'F':
cout<<" 頭等艙 ";
break;
case 'E':
cout<<" 經(jīng)濟(jì)艙 ";
break;
}
cout<<tickets[i].seat.number<<" "<<tickets[i].passenger_name<<endl;
cout<<"\n";
}
}
}
cout<<"================================================="<<endl;
}
Tips:
如果某些偷懶的家伙正好是做這個(gè)課程大作業(yè)搜到這兒了,希望你能在看懂的基礎(chǔ)上自己多改改,畢竟這是我替同學(xué)寫的,要是你們都一樣,豈不要尷尬了。
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持我們。
上一篇:C語言學(xué)生信息管理系統(tǒng)小項(xiàng)目
欄 目:C語言
下一篇:C和C++中的基本數(shù)據(jù)類型的大小及表示范圍詳解
本文標(biāo)題:C++實(shí)現(xiàn)航空訂票程序
本文地址:http://www.jygsgssxh.com/a1/Cyuyan/933.html
您可能感興趣的文章
- 04-02c語言沒有round函數(shù) round c語言
- 01-10數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)-用棧實(shí)現(xiàn)表達(dá)式求值的方法詳解
- 01-10使用OpenGL實(shí)現(xiàn)3D立體顯示的程序代碼
- 01-10深入理解C++中常見的關(guān)鍵字含義
- 01-10求斐波那契(Fibonacci)數(shù)列通項(xiàng)的七種實(shí)現(xiàn)方法
- 01-10C語言 解決不用+、-、&#215;、&#247;數(shù)字運(yùn)算符做加法
- 01-10使用C++實(shí)現(xiàn)全排列算法的方法詳解
- 01-10c++中inline的用法分析
- 01-10用C++實(shí)現(xiàn)DBSCAN聚類算法
- 01-10深入全排列算法及其實(shí)現(xiàn)方法


閱讀排行
本欄相關(guān)
- 04-02c語言函數(shù)調(diào)用后清空內(nèi)存 c語言調(diào)用
- 04-02func函數(shù)+在C語言 func函數(shù)在c語言中
- 04-02c語言的正則匹配函數(shù) c語言正則表達(dá)
- 04-02c語言用函數(shù)寫分段 用c語言表示分段
- 04-02c語言中對數(shù)函數(shù)的表達(dá)式 c語言中對
- 04-02c語言編寫函數(shù)冒泡排序 c語言冒泡排
- 04-02c語言沒有round函數(shù) round c語言
- 04-02c語言分段函數(shù)怎么求 用c語言求分段
- 04-02C語言中怎么打出三角函數(shù) c語言中怎
- 04-02c語言調(diào)用函數(shù)求fibo C語言調(diào)用函數(shù)求
隨機(jī)閱讀
- 01-11ajax實(shí)現(xiàn)頁面的局部加載
- 08-05dedecms(織夢)副欄目數(shù)量限制代碼修改
- 01-11Mac OSX 打開原生自帶讀寫NTFS功能(圖文
- 01-10C#中split用法實(shí)例總結(jié)
- 08-05織夢dedecms什么時(shí)候用欄目交叉功能?
- 01-10delphi制作wav文件的方法
- 01-10使用C語言求解撲克牌的順子及n個(gè)骰子
- 01-10SublimeText編譯C開發(fā)環(huán)境設(shè)置
- 08-05DEDE織夢data目錄下的sessions文件夾有什
- 04-02jquery與jsp,用jquery


