C語(yǔ)言實(shí)現(xiàn)飛機(jī)訂票系統(tǒng)
問(wèn)題描述與題目要求
問(wèn)題描述: 假定某民航有M個(gè)航次的班機(jī),每個(gè)航次都只到達(dá)一個(gè)地方。試為該機(jī)場(chǎng)售票處設(shè)計(jì)一個(gè)自動(dòng)訂票和退票系統(tǒng),要求系統(tǒng)具有以下功能:
(1) 訂票:若該航次余票大于等于乘客訂票數(shù),則在該航次的乘客表中,插入訂票乘客的信息項(xiàng),并修改該航次有關(guān)數(shù)據(jù),否則給出相應(yīng)信息。
(2) 退票:若該航次當(dāng)前退票數(shù)小于等于乘客原訂票數(shù),則在相應(yīng)的乘客表中找到該乘客項(xiàng),修改該航次及乘客表中有關(guān)數(shù)據(jù);當(dāng)某乘客由于退票使訂票數(shù)為零時(shí),則從乘客表中撤消該數(shù)據(jù)項(xiàng)。
要求:
(1)描述對(duì)航次表和乘客表選用的數(shù)據(jù)結(jié)構(gòu)。
(2)編程實(shí)現(xiàn)飛機(jī)票訂票和退票系統(tǒng)。
模型假設(shè)
1.假設(shè)所有輸入均為整數(shù)且在int類型的表示范圍內(nèi)
2.假設(shè)航次是從1到n的連續(xù)整數(shù)
3.假設(shè)每個(gè)乘客 ID 均唯一
數(shù)據(jù)結(jié)構(gòu)的選用
聯(lián)想到圖中的鄰接鏈表,采用相似的數(shù)據(jù)結(jié)構(gòu)描述該問(wèn)題
航次表: 用一個(gè)數(shù)組flight_info_list存儲(chǔ)每個(gè)航次的乘客表,該數(shù)組下標(biāo)即為航班航次,對(duì)應(yīng)元素即為該航次相關(guān)信息(乘客表,航班編號(hào)及航班余票數(shù))
乘客表: 用雙向鏈表存儲(chǔ)每個(gè)航次的乘客表passenger_info_list,每個(gè)結(jié)點(diǎn)存儲(chǔ)乘客的 ID,訂票數(shù)以及指向前、后結(jié)點(diǎn)的指針
編程實(shí)現(xiàn)(C語(yǔ)言實(shí)現(xiàn))
/*
* @Description: 模擬航班的訂票系統(tǒng)
* 模型假設(shè):
* 1. 飛機(jī)最大載客量為300人
* 2. 共10個(gè)航次
* 用雙向鏈表存儲(chǔ)乘客信息
* 用array存儲(chǔ)航班信息
* @Author: Fishermanykx
* @Date: 2019-09-29 10:32:56
* @LastEditors: Fishermanykx
* @LastEditTime: 2019-09-30 12:29:16
*/
#include <stdbool.h>
#include <stdio.h>
#include <stdlib.h>
#define MAX_CAPACITY 300 // 假定飛機(jī)最大載客量為300
#define TOTAL_AIRLINE 10 // 假定不同航線最大數(shù)目為10
#define BOOK_TICKET 1
#define REFUND -1
#define EXIT_SYSTEM 0
#define PRINT_INFO 11
#define ROOT 123456
// 某航次航班
struct SingleFlight {
int flight_id; // 航班編號(hào),從1開始,到TOTAL_AIRLINE為止
int remain_tickets; // 該航班余票數(shù)
struct SinglePassenger* passenger_info_list; // 該航班乘客表
};
// 某航次航班的某個(gè)乘客的信息
struct PassengerInfo {
int passenger_id; // 乘客id
int ticket_number; // 該乘客購(gòu)買票數(shù)
};
// 乘客表中的一個(gè)結(jié)點(diǎn)
struct SinglePassenger {
struct PassengerInfo passenger_info; // 乘客信息
struct SinglePassenger* prev_passenger; // 指向前一個(gè)乘客的指針
struct SinglePassenger* next_passenger; // 指向后一個(gè)乘客的指針
};
typedef struct SingleFlight SingleFlight;
typedef struct SinglePassenger SinglePassenger;
// 訂票操作
SingleFlight* BookTicket(SingleFlight flight_info_list[]);
SinglePassenger* GetNewPassenger(const int new_passenger_id,
const int book_ticket_number);
SinglePassenger* AddNewPassenger(SinglePassenger* head,
const int new_passenger_id,
const int book_ticket_number);
// 退票操作
SingleFlight* Refund(SingleFlight flight_info_list[]);
SinglePassenger* RemovePassenger(SinglePassenger* head, const int passenger_id);
// 判斷操作
bool IsPassengerExist(SinglePassenger* head, const int passenger_id);
// 打印操作
void PrintCurrentAirlineInfo(SingleFlight flight_info_list[]);
void PrintPassengerList(SinglePassenger* head, SingleFlight* flight_info_list,
int airline_id);
int main(void) {
int order, exit_loop = 1;
// 初始化航班信息
SingleFlight* flight_info_list;
flight_info_list =
(SingleFlight*)malloc(TOTAL_AIRLINE * sizeof(SingleFlight));
for (int i = 0; i < TOTAL_AIRLINE; ++i) {
flight_info_list[i].flight_id = i + 1;
flight_info_list[i].remain_tickets = MAX_CAPACITY;
flight_info_list[i].passenger_info_list = NULL;
}
/* 登錄界面 */
printf("您好,歡迎使用此系統(tǒng)!\n\n");
printf("使用說(shuō)明:\n");
printf("1. 本程序所有輸入均為整數(shù)\n");
printf("2. 可供選擇的航次編號(hào)為1-%d, 每架次最大載客量為%d\n", TOTAL_AIRLINE,
MAX_CAPACITY);
printf(
"3. 若訂票,請(qǐng)輸入1;若退票,請(qǐng)輸入-1;若退出系統(tǒng),請(qǐng)輸入0; "
"若要以root用戶登錄,請(qǐng)輸入root密碼\n");
printf("使用說(shuō)明到此結(jié)束,祝您使用愉快!\n");
// 判斷是否以root登錄
int log_in_as_root, root_key;
bool is_root = false;
printf("-------------------------------------------------------------\n\n");
printf("是否以root用戶登錄?若是,請(qǐng)輸入1,否則請(qǐng)輸入0:");
scanf("%d", &log_in_as_root);
if (log_in_as_root) printf("請(qǐng)輸入root密碼(按0退出root登錄程序):");
while (log_in_as_root) {
scanf("%d", &root_key);
if (!root_key) {
break;
} else if (root_key != ROOT) {
printf("輸入密碼錯(cuò)誤!請(qǐng)重新輸入或按0退出root登錄程序:");
} else {
is_root = true;
break;
}
}
// 歡迎界面
if (is_root)
printf("歡迎,root用戶!輸入11可查看當(dāng)前航次表\n");
else
printf("歡迎,普通用戶!\n");
printf("-------------------------------------------------------------\n");
// 主循環(huán)
while (true) {
if (is_root)
printf("請(qǐng)輸入1, 0, -1或11中的一個(gè)數(shù)字: ");
else
printf("請(qǐng)輸入1, 0, -1中的一個(gè)數(shù)字: ");
scanf("%d", &order);
switch (order) {
case BOOK_TICKET:
flight_info_list = BookTicket(flight_info_list);
break;
case REFUND:
flight_info_list = Refund(flight_info_list);
break;
case EXIT_SYSTEM:
exit_loop = 0;
break;
case PRINT_INFO:
printf(
"-------------------------------------------------------------\n");
PrintCurrentAirlineInfo(flight_info_list);
break;
default:
printf("非法輸入!\n");
break;
}
if (!exit_loop) break;
}
return 0;
}
/**
* @description: 一次訂票操作的模擬
* @param {type}
* flight_info_list {SingleFlight *}: 航班信息表(航次表)
* @return:
*/
SingleFlight* BookTicket(SingleFlight flight_info_list[]) {
/* 獲取乘客預(yù)定航次 */
int target_airline;
printf("可供選擇的航次對(duì)應(yīng)的編號(hào)為: 1 - %d\n", TOTAL_AIRLINE);
printf("請(qǐng)輸入您想預(yù)定的航次(輸入0時(shí)退出訂票程序): ");
// 判斷輸入合法性
while (true) {
scanf("%d", &target_airline);
if (target_airline < 0 || target_airline > TOTAL_AIRLINE) {
printf("您要預(yù)定的航次不存在!\n");
printf("請(qǐng)重新輸入一個(gè)正確的航次,或按0退出訂票程序:");
} else if (target_airline == 0) {
printf("-------------------------------------------------------------\n");
return flight_info_list;
} else
break;
}
/* 獲取乘客id */
int passenger_id;
int modify_tickets;
printf("若您原先已經(jīng)訂票,且想增加您的訂票數(shù),請(qǐng)輸入1,否則請(qǐng)輸入0: ");
// 判斷輸入合法性
while (true) {
scanf("%d", &modify_tickets);
if (modify_tickets != 1 && modify_tickets != 0) {
printf("您輸入的是非法命令,請(qǐng)重新輸入0(原先未訂票)或1(原先已經(jīng)訂票):");
} else
break;
}
printf("請(qǐng)輸入您的ID: ");
// 若原先未訂票
while (!modify_tickets) {
scanf("%d", &passenger_id);
if (IsPassengerExist(
flight_info_list[target_airline - 1].passenger_info_list,
passenger_id)) {
printf("該ID已存在,請(qǐng)輸入一個(gè)新的ID: ");
} else
break;
}
// 若原先已經(jīng)訂票
if (modify_tickets) {
scanf("%d", &passenger_id);
if (!IsPassengerExist(
flight_info_list[target_airline - 1].passenger_info_list,
passenger_id)) {
printf("您原先并未預(yù)訂該航次的票!\n");
printf("-------------------------------------------------------------\n");
return flight_info_list;
}
}
/* 獲取乘客預(yù)定票數(shù) */
// 獲取當(dāng)前航次余票數(shù)
int remain_tickets;
remain_tickets = flight_info_list[target_airline - 1].remain_tickets;
printf("當(dāng)前航次余票數(shù)為: %d\n", remain_tickets);
// 若該乘客想修改票數(shù),顯示此乘客此前預(yù)訂的票數(shù)
if (modify_tickets) {
SinglePassenger* head =
flight_info_list[target_airline - 1].passenger_info_list;
while (head->passenger_info.passenger_id != passenger_id) {
head = head->next_passenger;
}
printf("您此前預(yù)訂的票數(shù)為%d張\n", head->passenger_info.ticket_number);
}
// 獲取乘客想預(yù)定的票數(shù)
int target_ticket_num;
printf("請(qǐng)輸入您想預(yù)定(或增訂)的票數(shù): ");
// 判斷輸入合法性
while (true) {
scanf("%d", &target_ticket_num);
if (target_ticket_num > remain_tickets) {
printf("您想預(yù)定的票數(shù)為%d, 但當(dāng)前航次余票數(shù)僅為%d, 余票不足!\n",
target_ticket_num, remain_tickets);
printf("請(qǐng)輸入您想預(yù)定的票數(shù),或按0退出訂票程序: ");
} else if (target_ticket_num == 0) {
printf("-------------------------------------------------------------\n");
return flight_info_list;
} else {
break;
}
}
/* 修改航次余票數(shù) */
flight_info_list[target_airline - 1].remain_tickets -= target_ticket_num;
/* 修改乘客表中對(duì)應(yīng)的項(xiàng) */
// 判斷該乘客原先是否存在
if (modify_tickets) {
// 若存在,找到該乘客并修改他的訂票項(xiàng)
SinglePassenger* tmp =
flight_info_list[target_airline - 1].passenger_info_list;
while (tmp->passenger_info.passenger_id != passenger_id) {
tmp = tmp->next_passenger;
}
tmp->passenger_info.ticket_number += target_ticket_num;
printf("增訂成功!您現(xiàn)在共預(yù)訂%d張航次%d的票\n",
tmp->passenger_info.ticket_number, target_airline);
} else {
// 若不存在,則在該航次的乘客列表中增加該乘客及其對(duì)應(yīng)信息
flight_info_list[target_airline - 1].passenger_info_list = AddNewPassenger(
flight_info_list[target_airline - 1].passenger_info_list, passenger_id,
target_ticket_num);
printf("預(yù)訂成功!您現(xiàn)在共預(yù)訂%d張航次%d的票\n", target_ticket_num,
target_airline);
}
printf("-------------------------------------------------------------\n");
return flight_info_list;
}
/**
* @description: 查找乘客表(雙向鏈表)中某乘客是否存在
* @param {type}
* head {SinglePassenger*}: 雙向鏈表頭結(jié)點(diǎn)
* passenger_id {const int}: 待查找的鍵值
* @return: 若存在,返回true;否則返回false
*/
bool IsPassengerExist(SinglePassenger* head, const int passenger_id) {
SinglePassenger* tmp = head;
bool exist = false;
if (!head) {
return false;
}
while (tmp) {
if (tmp->passenger_info.passenger_id == passenger_id) {
exist = true;
break;
}
tmp = tmp->next_passenger;
}
return exist;
}
/**
* @description: 初始化一個(gè)新結(jié)點(diǎn)
* @param {type}
* new_passenger_id {const int}: 新增加的乘客的id
* book_ticket_number {const int}: 新增加乘客的訂票數(shù)
* @return: 初始化后的結(jié)點(diǎn)(前驅(qū),后繼均為空指針)
*/
SinglePassenger* GetNewPassenger(const int new_passenger_id,
const int book_ticket_number) {
SinglePassenger* new_passenger =
(SinglePassenger*)malloc(sizeof(SinglePassenger));
new_passenger->passenger_info.passenger_id = new_passenger_id;
new_passenger->passenger_info.ticket_number = book_ticket_number;
new_passenger->next_passenger = NULL;
new_passenger->prev_passenger = NULL;
return new_passenger;
}
SinglePassenger* AddNewPassenger(SinglePassenger* head,
const int new_passenger_id,
const int book_ticket_number) {
SinglePassenger* new_passenger =
GetNewPassenger(new_passenger_id, book_ticket_number);
if (!head) {
head = new_passenger;
} else {
// 直接從頭部插入
new_passenger->next_passenger = head->next_passenger;
if (head->next_passenger) {
head->next_passenger->prev_passenger = new_passenger;
}
new_passenger->prev_passenger = head;
head->next_passenger = new_passenger;
}
return head;
}
/**
* @description: 一次退票操作的模擬
* @param {type}
* flight_info_list {SingleFlight *}: 航次表
* @return: 修改后的航次表
*/
SingleFlight* Refund(SingleFlight flight_info_list[]) {
/* 獲取乘客預(yù)定航次 */
int target_airline;
printf("可供選擇的航次對(duì)應(yīng)的編號(hào)為: 1 - %d\n", TOTAL_AIRLINE);
printf("請(qǐng)輸入您想退訂的航次(輸入0時(shí)退出訂票程序): ");
// 判斷輸入合法性
while (true) {
scanf("%d", &target_airline);
if (target_airline < 0 || target_airline > TOTAL_AIRLINE) {
printf("您要退訂的航次不存在!\n");
printf("請(qǐng)重新輸入一個(gè)正確的航次,或按0退出退票程序:");
} else if (target_airline == 0) {
printf("-------------------------------------------------------------\n");
return flight_info_list;
} else
break;
}
/* 獲取乘客ID并判斷其合法性 */
int passenger_id;
printf("請(qǐng)輸入您的ID: ");
scanf("%d", &passenger_id);
SinglePassenger* head =
flight_info_list[target_airline - 1].passenger_info_list;
if (!IsPassengerExist(head, passenger_id)) {
printf("您并未預(yù)訂此次航班!\n");
printf("-------------------------------------------------------------\n");
return flight_info_list;
}
/* 獲取乘客退票數(shù) */
// 打印此乘客的預(yù)訂票數(shù)
SinglePassenger* tmp = head;
while (tmp->passenger_info.passenger_id != passenger_id) {
tmp = tmp->next_passenger;
}
printf("您當(dāng)前預(yù)訂的票數(shù)為: %d張\n", tmp->passenger_info.ticket_number);
// 讀入退票數(shù)
int refund_ticket_num;
printf("請(qǐng)輸入您的退票數(shù)(輸入0退出退票程序): ");
scanf("%d", &refund_ticket_num);
// 輸入合法性檢查
int cur_ticket = tmp->passenger_info.ticket_number; // 當(dāng)前該乘客預(yù)訂的票數(shù)
while (cur_ticket < refund_ticket_num) {
if (!refund_ticket_num) {
printf("-------------------------------------------------------------\n");
return flight_info_list;
}
printf("您輸入的退票數(shù)大于您當(dāng)前預(yù)訂的票數(shù)!");
printf("請(qǐng)重新輸入退票數(shù)(輸入0退出退票程序): ");
scanf("%d", &refund_ticket_num);
}
/* 退票 */
// 更新航次表
flight_info_list[target_airline - 1].remain_tickets += refund_ticket_num;
// 更新乘客表
if (cur_ticket > refund_ticket_num) {
tmp->passenger_info.ticket_number -= refund_ticket_num;
printf("您已成功退票,現(xiàn)在您%d航次的余票為%d張\n", target_airline,
tmp->passenger_info.ticket_number);
} else {
flight_info_list[target_airline - 1].passenger_info_list =
RemovePassenger(head, passenger_id);
printf("您已成功退票,現(xiàn)在您%d航次的余票為%d張\n", target_airline, 0);
}
printf("-------------------------------------------------------------\n");
return flight_info_list;
}
/**
* @description: 從乘客表中刪除某個(gè)結(jié)點(diǎn)
* @param {type}
* head {SinglePassenger *}: 乘客表
* passenger_id {const int}: 待刪除乘客的id
* @return: 修改后的航次表
*/
SinglePassenger* RemovePassenger(SinglePassenger* head,
const int passenger_id) {
SinglePassenger* tmp = head;
while (tmp->passenger_info.passenger_id != passenger_id) {
tmp = tmp->next_passenger;
}
// 若為頭結(jié)點(diǎn)
if (!tmp->prev_passenger) {
head = head->next_passenger;
}
// 若為尾結(jié)點(diǎn)
else if (!tmp->next_passenger) {
tmp->prev_passenger->next_passenger = NULL;
}
// 若為中間某個(gè)結(jié)點(diǎn)
else {
tmp->prev_passenger->next_passenger = tmp->next_passenger;
tmp->next_passenger->prev_passenger = tmp->prev_passenger;
}
return head;
}
/**
* @description: 輸出當(dāng)前航次表
* @param {type}
* flight_info_list {SingleFlight *}: 航班信息表(航次表)
* @return: void
*/
void PrintCurrentAirlineInfo(SingleFlight flight_info_list[]) {
for (int current_airline_index = 1; current_airline_index <= TOTAL_AIRLINE;
++current_airline_index) {
int remain_ticket_num =
flight_info_list[current_airline_index - 1].remain_tickets;
SinglePassenger* head =
flight_info_list[current_airline_index - 1].passenger_info_list;
// 輸出
PrintPassengerList(head, flight_info_list, current_airline_index);
printf("-------------------------------------------------------------\n");
}
}
/**
* @description: 打印某航次的乘客表
* @param {type}
* head {SinglePassenger*}: 乘客表的頭結(jié)點(diǎn)
* flight_info_list {SingleFlight *}: 航次表
* @return:
*/
void PrintPassengerList(SinglePassenger* head, SingleFlight* flight_info_list,
int airline_id) {
if (!head) {
printf("%d航次無(wú)乘客訂票!\n", airline_id);
} else {
printf("%d航次余票數(shù)為: %d, 其中:\n", airline_id,
flight_info_list[airline_id - 1].remain_tickets);
}
while (head) {
printf("ID為%d的乘客訂票數(shù)為%d張\n", head->passenger_info.passenger_id,
head->passenger_info.ticket_number);
head = head->next_passenger;
}
printf("\n");
}
實(shí)現(xiàn)亮點(diǎn)
1.每一步操作均有對(duì)非法輸入的處理,最大限度上確保了程序運(yùn)行的穩(wěn)定性
2.區(qū)分root用戶和普通用戶,且只有root用戶能夠查看所有人的訂票情況,從而保護(hù)了客戶的隱私
3.使用雙向鏈表存儲(chǔ)乘客信息,一方面便于存取乘客的信息(定長(zhǎng)數(shù)組分配的是棧內(nèi)存,而棧內(nèi)存小于堆內(nèi)存,所以用鏈表進(jìn)行存儲(chǔ)更不容易造成內(nèi)存溢出),另一方面降低了編程難度(既不需要實(shí)現(xiàn)對(duì)數(shù)組進(jìn)行動(dòng)態(tài)內(nèi)存分配的一系列操作,又最大限度地降低了刪除結(jié)點(diǎn)操作的復(fù)雜度)
實(shí)現(xiàn)缺點(diǎn)
1.只考慮了數(shù)字輸入的情況,沒(méi)有考慮字符及其他數(shù)據(jù)類型的輸入
2.用鏈表存儲(chǔ)導(dǎo)致不能隨機(jī)訪問(wèn),使查找操作復(fù)雜度始終為O(n) O(n)O(n)
運(yùn)行結(jié)果
您好,歡迎使用此系統(tǒng)! 使用說(shuō)明: 1. 本程序所有輸入均為整數(shù) 2. 可供選擇的航次編號(hào)為1-10, 每架次最大載客量為300 3. 若訂票,請(qǐng)輸入1;若退票,請(qǐng)輸入-1;若退出系統(tǒng),請(qǐng)輸入0; 若要以root用戶登錄,請(qǐng)輸入root密碼 使用說(shuō)明到此結(jié)束,祝您使用愉快! ------------------------------------------------------------- 是否以root用戶登錄?若是,請(qǐng)輸入1,否則請(qǐng)輸入0:1 請(qǐng)輸入root密碼(按0退出root登錄程序):123456 歡迎,root用戶!輸入11可查看當(dāng)前航次表 ------------------------------------------------------------- 請(qǐng)輸入1, 0, -1或11中的一個(gè)數(shù)字: 1 可供選擇的航次對(duì)應(yīng)的編號(hào)為: 1 - 10 請(qǐng)輸入您想預(yù)定的航次(輸入0時(shí)退出訂票程序): 1 若您原先已經(jīng)訂票,且想增加您的訂票數(shù),請(qǐng)輸入1,否則請(qǐng)輸入0: 0 請(qǐng)輸入您的ID: 1 當(dāng)前航次余票數(shù)為: 300 請(qǐng)輸入您想預(yù)定(或增訂)的票數(shù): 12 預(yù)訂成功!您現(xiàn)在共預(yù)訂12張航次1的票 ------------------------------------------------------------- 請(qǐng)輸入1, 0, -1或11中的一個(gè)數(shù)字: 1 可供選擇的航次對(duì)應(yīng)的編號(hào)為: 1 - 10 請(qǐng)輸入您想預(yù)定的航次(輸入0時(shí)退出訂票程序): 1 若您原先已經(jīng)訂票,且想增加您的訂票數(shù),請(qǐng)輸入1,否則請(qǐng)輸入0: 0 請(qǐng)輸入您的ID: 2 當(dāng)前航次余票數(shù)為: 288 請(qǐng)輸入您想預(yù)定(或增訂)的票數(shù): 21 預(yù)訂成功!您現(xiàn)在共預(yù)訂21張航次1的票 ------------------------------------------------------------- 請(qǐng)輸入1, 0, -1或11中的一個(gè)數(shù)字: 1 可供選擇的航次對(duì)應(yīng)的編號(hào)為: 1 - 10 請(qǐng)輸入您想預(yù)定的航次(輸入0時(shí)退出訂票程序): 1 若您原先已經(jīng)訂票,且想增加您的訂票數(shù),請(qǐng)輸入1,否則請(qǐng)輸入0: 0 請(qǐng)輸入您的ID: 3 當(dāng)前航次余票數(shù)為: 267 請(qǐng)輸入您想預(yù)定(或增訂)的票數(shù): 32 預(yù)訂成功!您現(xiàn)在共預(yù)訂32張航次1的票 ------------------------------------------------------------- 請(qǐng)輸入1, 0, -1或11中的一個(gè)數(shù)字: 1 可供選擇的航次對(duì)應(yīng)的編號(hào)為: 1 - 10 請(qǐng)輸入您想預(yù)定的航次(輸入0時(shí)退出訂票程序): 2 若您原先已經(jīng)訂票,且想增加您的訂票數(shù),請(qǐng)輸入1,否則請(qǐng)輸入0: 0 請(qǐng)輸入您的ID: 32 當(dāng)前航次余票數(shù)為: 300 請(qǐng)輸入您想預(yù)定(或增訂)的票數(shù): 2 預(yù)訂成功!您現(xiàn)在共預(yù)訂2張航次2的票 ------------------------------------------------------------- 請(qǐng)輸入1, 0, -1或11中的一個(gè)數(shù)字: 1 可供選擇的航次對(duì)應(yīng)的編號(hào)為: 1 - 10 請(qǐng)輸入您想預(yù)定的航次(輸入0時(shí)退出訂票程序): 10 若您原先已經(jīng)訂票,且想增加您的訂票數(shù),請(qǐng)輸入1,否則請(qǐng)輸入0: 0 請(qǐng)輸入您的ID: 212 當(dāng)前航次余票數(shù)為: 300 請(qǐng)輸入您想預(yù)定(或增訂)的票數(shù): 123 預(yù)訂成功!您現(xiàn)在共預(yù)訂123張航次10的票 ------------------------------------------------------------- 請(qǐng)輸入1, 0, -1或11中的一個(gè)數(shù)字: 1 可供選擇的航次對(duì)應(yīng)的編號(hào)為: 1 - 10 請(qǐng)輸入您想預(yù)定的航次(輸入0時(shí)退出訂票程序): 1 若您原先已經(jīng)訂票,且想增加您的訂票數(shù),請(qǐng)輸入1,否則請(qǐng)輸入0: 1 請(qǐng)輸入您的ID: 1 當(dāng)前航次余票數(shù)為: 235 您此前預(yù)訂的票數(shù)為12張 請(qǐng)輸入您想預(yù)定(或增訂)的票數(shù): -1 增訂成功!您現(xiàn)在共預(yù)訂11張航次1的票 ------------------------------------------------------------- 請(qǐng)輸入1, 0, -1或11中的一個(gè)數(shù)字: -1 可供選擇的航次對(duì)應(yīng)的編號(hào)為: 1 - 10 請(qǐng)輸入您想退訂的航次(輸入0時(shí)退出訂票程序): 1 請(qǐng)輸入您的ID: 2 您當(dāng)前預(yù)訂的票數(shù)為: 21張 請(qǐng)輸入您的退票數(shù)(輸入0退出退票程序): 222 您輸入的退票數(shù)大于您當(dāng)前預(yù)訂的票數(shù)!請(qǐng)重新輸入退票數(shù)(輸入0退出退票程序): 2 您已成功退票,現(xiàn)在您1航次的余票為19張 ------------------------------------------------------------- 請(qǐng)輸入1, 0, -1或11中的一個(gè)數(shù)字: 1 可供選擇的航次對(duì)應(yīng)的編號(hào)為: 1 - 10 請(qǐng)輸入您想預(yù)定的航次(輸入0時(shí)退出訂票程序): 10 若您原先已經(jīng)訂票,且想增加您的訂票數(shù),請(qǐng)輸入1,否則請(qǐng)輸入0: 32 您輸入的是非法命令,請(qǐng)重新輸入0(原先未訂票)或1(原先已經(jīng)訂票):0 請(qǐng)輸入您的ID: 322 當(dāng)前航次余票數(shù)為: 177 請(qǐng)輸入您想預(yù)定(或增訂)的票數(shù): 12 預(yù)訂成功!您現(xiàn)在共預(yù)訂12張航次10的票 ------------------------------------------------------------- 請(qǐng)輸入1, 0, -1或11中的一個(gè)數(shù)字: -1 可供選擇的航次對(duì)應(yīng)的編號(hào)為: 1 - 10 請(qǐng)輸入您想退訂的航次(輸入0時(shí)退出訂票程序): 10 請(qǐng)輸入您的ID: 212 您當(dāng)前預(yù)訂的票數(shù)為: 123張 請(qǐng)輸入您的退票數(shù)(輸入0退出退票程序): 123 您已成功退票,現(xiàn)在您10航次的余票為0張 ------------------------------------------------------------- 請(qǐng)輸入1, 0, -1或11中的一個(gè)數(shù)字: 11 ------------------------------------------------------------- 1航次余票數(shù)為: 238, 其中: ID為1的乘客訂票數(shù)為11張 ID為3的乘客訂票數(shù)為32張 ID為2的乘客訂票數(shù)為19張 ------------------------------------------------------------- 2航次余票數(shù)為: 298, 其中: ID為32的乘客訂票數(shù)為2張 ------------------------------------------------------------- 3航次無(wú)乘客訂票! ------------------------------------------------------------- 4航次無(wú)乘客訂票! ------------------------------------------------------------- 5航次無(wú)乘客訂票! ------------------------------------------------------------- 6航次無(wú)乘客訂票! ------------------------------------------------------------- 7航次無(wú)乘客訂票! ------------------------------------------------------------- 8航次無(wú)乘客訂票! ------------------------------------------------------------- 9航次無(wú)乘客訂票! ------------------------------------------------------------- 10航次余票數(shù)為: 288, 其中: ID為322的乘客訂票數(shù)為12張 ------------------------------------------------------------- 請(qǐng)輸入1, 0, -1或11中的一個(gè)數(shù)字: 0
注:普通用戶不能執(zhí)行查看所有乘客信息的操作,只能查看自己的購(gòu)票信息
更多學(xué)習(xí)資料請(qǐng)關(guān)注專題《管理系統(tǒng)開發(fā)》。
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持我們。
上一篇:詳解C語(yǔ)言中的指針與數(shù)組的定義與使用
欄 目:C語(yǔ)言
下一篇:c++優(yōu)先隊(duì)列(priority_queue)用法詳解
本文標(biāo)題:C語(yǔ)言實(shí)現(xiàn)飛機(jī)訂票系統(tǒng)
本文地址:http://www.jygsgssxh.com/a1/Cyuyan/19.html
您可能感興趣的文章
- 04-02c語(yǔ)言函數(shù)調(diào)用后清空內(nèi)存 c語(yǔ)言調(diào)用函數(shù)刪除字符
- 04-02c語(yǔ)言的正則匹配函數(shù) c語(yǔ)言正則表達(dá)式函數(shù)庫(kù)
- 04-02func函數(shù)+在C語(yǔ)言 func函數(shù)在c語(yǔ)言中
- 04-02c語(yǔ)言中對(duì)數(shù)函數(shù)的表達(dá)式 c語(yǔ)言中對(duì)數(shù)怎么表達(dá)
- 04-02c語(yǔ)言用函數(shù)寫分段 用c語(yǔ)言表示分段函數(shù)
- 04-02c語(yǔ)言編寫函數(shù)冒泡排序 c語(yǔ)言冒泡排序法函數(shù)
- 04-02c語(yǔ)言沒(méi)有round函數(shù) round c語(yǔ)言
- 04-02c語(yǔ)言分段函數(shù)怎么求 用c語(yǔ)言求分段函數(shù)
- 04-02C語(yǔ)言中怎么打出三角函數(shù) c語(yǔ)言中怎么打出三角函數(shù)的值
- 04-02c語(yǔ)言調(diào)用函數(shù)求fibo C語(yǔ)言調(diào)用函數(shù)求階乘


閱讀排行
- 1C語(yǔ)言 while語(yǔ)句的用法詳解
- 2java 實(shí)現(xiàn)簡(jiǎn)單圣誕樹的示例代碼(圣誕
- 3利用C語(yǔ)言實(shí)現(xiàn)“百馬百擔(dān)”問(wèn)題方法
- 4C語(yǔ)言中計(jì)算正弦的相關(guān)函數(shù)總結(jié)
- 5c語(yǔ)言計(jì)算三角形面積代碼
- 6什么是 WSH(腳本宿主)的詳細(xì)解釋
- 7C++ 中隨機(jī)函數(shù)random函數(shù)的使用方法
- 8正則表達(dá)式匹配各種特殊字符
- 9C語(yǔ)言十進(jìn)制轉(zhuǎn)二進(jìn)制代碼實(shí)例
- 10C語(yǔ)言查找數(shù)組里數(shù)字重復(fù)次數(shù)的方法
本欄相關(guān)
- 04-02c語(yǔ)言函數(shù)調(diào)用后清空內(nèi)存 c語(yǔ)言調(diào)用
- 04-02func函數(shù)+在C語(yǔ)言 func函數(shù)在c語(yǔ)言中
- 04-02c語(yǔ)言的正則匹配函數(shù) c語(yǔ)言正則表達(dá)
- 04-02c語(yǔ)言用函數(shù)寫分段 用c語(yǔ)言表示分段
- 04-02c語(yǔ)言中對(duì)數(shù)函數(shù)的表達(dá)式 c語(yǔ)言中對(duì)
- 04-02c語(yǔ)言編寫函數(shù)冒泡排序 c語(yǔ)言冒泡排
- 04-02c語(yǔ)言沒(méi)有round函數(shù) round c語(yǔ)言
- 04-02c語(yǔ)言分段函數(shù)怎么求 用c語(yǔ)言求分段
- 04-02C語(yǔ)言中怎么打出三角函數(shù) c語(yǔ)言中怎
- 04-02c語(yǔ)言調(diào)用函數(shù)求fibo C語(yǔ)言調(diào)用函數(shù)求
隨機(jī)閱讀
- 01-11Mac OSX 打開原生自帶讀寫NTFS功能(圖文
- 01-11ajax實(shí)現(xiàn)頁(yè)面的局部加載
- 01-10使用C語(yǔ)言求解撲克牌的順子及n個(gè)骰子
- 04-02jquery與jsp,用jquery
- 01-10SublimeText編譯C開發(fā)環(huán)境設(shè)置
- 08-05DEDE織夢(mèng)data目錄下的sessions文件夾有什
- 08-05織夢(mèng)dedecms什么時(shí)候用欄目交叉功能?
- 01-10C#中split用法實(shí)例總結(jié)
- 08-05dedecms(織夢(mèng))副欄目數(shù)量限制代碼修改
- 01-10delphi制作wav文件的方法


