亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? train_booking_bookop.c

?? 火車定標系統...用VC編譯通過的
?? C
?? 第 1 頁 / 共 2 頁
字號:
//	train_booking_bookop.c -- 包含用戶票務操作函數
//
/////////////////////////////////////////////////////////////////////////////

#ifndef TRAIN_BOOKING_BOOKOP_C_
#define TRAIN_BOOKING_BOOKOP_C_

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <conio.h>

#include "train_booking_declare.h"
#include "train_booking_const.h"
#include "train_booking_unit.h"

/////////////////////////////////////////////////////////////////////////////


/////////////////////////////////////////////////////////////////////////////
// 函數功能:	用戶軟臥票訂票事務處理
//
// 函數參數:	op_psngr_pt:操作用戶信息結構體指針
//				system_info_pt:系統信息結構體指針
//				train_info_pt:訂票列車信息結構體指針
//
// 函數說明:	1、車次、時間信息輸入在此函數外完成,站點信息輸入在此函數內完成
//				2、在使用此函數之前,應已找到對應列車及車次數據,本程序將依次
//				搜索該列車的所有要求類型的車廂,直到找到座位
//
/////////////////////////////////////////////////////////////////////////////
status book_sb_ticket(passenger_info *op_psngr_pt, system_info *system_info_pt, 
		train_info *train_info_pt)
{
	booked_info *booked_info_head, *booked_info_pt;
	char t_begin_station[64], t_end_station[64];
	int t_begin_order, t_end_order, t_seat_order, t_distance;
	int booked_state = 0, car_amount = 0, this_cost;
	int ok_car_order, ok_seat_order;
	int booked_car_order;
	char ch;
	int i, j;

	CLS;
	actitle("預訂軟臥車票");

	// 取得訂票的起點
	printf("第一步:確定始發站(當前站為 %s 站,回車直接確認)\n",
		system_info_pt->location);

	if (!(get_str("始發站", t_begin_station, MIN_STATION_ID_LEN, MAX_STATION_ID_LEN)))
	{
		message(INFO, "將當前站點設置為始發站!", NULL);
		printf("【信息】您輸入的始發站為 %s 站!\n", system_info_pt->location);
		WAIT;
	}

	// 取得訂票的終點
	printf("第二步:確定終點站\n");
	if (!(get_str("終點站", t_end_station, MIN_STATION_ID_LEN, MAX_STATION_ID_LEN)))
	{
		message(WARN, "預訂軟臥車票失敗!", WC);

		return FAIL;
	}

	// 根據始、終點確定列車行程區間的開始、結束序號
	if (!(get_span_order(&train_info_pt->station_links, t_begin_station, t_end_station, 
		&t_begin_order, &t_end_order)))
	{
		message(WARN, "抱歉!訂票失敗!", WC);
		
		return FAIL;
	}

	message(INFO, "正在執行訂票操作,請稍候...", NULL);
	
	// 依次檢測每個軟臥車廂是否還有空位
	for (i = 0; i < SOFT_BED_CAR; i++)
	{
		if (check_sbed_remained(&train_info_pt->sbed_info_list[i], t_begin_order, 
				t_end_order, &t_seat_order))	// 查找到合適的車廂號
		{
			ok_car_order = i;		
			printf("【信息】在第%d個軟臥車廂發現合適座位!", i + 1);
			printf("【信息】該車廂在列車內編號為 %d !\n", ok_car_order + 1);
			message(INFO, "恭喜恭喜", W);
		}
	}
	
	if (i == SOFT_BED_CAR - 1)		// 如果沒有找到合適的車廂
	{
		message(WARN, "抱歉!本趟列車已經沒有你需要的票了。", NULL);
		message(TIP, "告訴你一個好消息,本車站提供系統通知功能。", NULL);
		message(TIP, "如果你選擇排隊等票,那么你的運氣夠好的情況下,", NULL);
		message(TIP, "如果有人退了符合您的要求的票,系統將會以消息形", NULL);
		message(TIP, "式通知你,以便你能夠得以訂票。", NULL);
		message(TIP, "需要排隊,請按Y鍵,按其他任意鍵返回。", W);

		ch = getch();

		if ('y' == ch)		// 如果用戶要求通知
		{
			// 如果排隊等候人滿則拒絕請求
			if (train_info_pt->total_waiters == MAX_NOTIFY_AMOUNT)
			{
				message(INFO, "實在不好意思,排隊的人太多了,您還是換訂另一趟車的票吧,謝謝合作!", NULL);
				message(WARN, "預訂軟臥車票失敗!", WC);

				return FAIL;
			}
			else
			{
				// 登記本乘客至等候用戶列表
				strcpy(train_info_pt->waiter[train_info_pt->total_waiters], 
					op_psngr_pt->passenger_id);
				train_info_pt->total_waiters++;

				// 將候票操作保存至文件
				if (!(save_train_info(train_info_pt, train_info_pt->master)))
				{
					message(ERROR, "排隊時更新文件失敗!", NULL);
					message(WARN, "未能成功排隊候票!", W);
				}
			}
		}
		else
		{
			message(INFO, "您已放棄訂票操作!", WC);
			
			return FAIL;
		}
	}

confirm_check:
	{
		booked_car_order = ok_car_order + 1;	// 生成面向用戶的車廂號
		// 確認乘客的訂票行為
		printf("【提示】將要預訂 %s 次列車的 %s 第趟列車的第 %d 號(軟臥)車廂的第 %d 號座位,您確認嗎(Y/N)?", train_info_pt->master, train_info_pt->time_id,
			booked_car_order, t_seat_order);
		ch == get_choice("yn");
		if ('n' == ch)
		{
			message(INFO, "您已放棄訂票操作!", WC);

			return FAIL;
		}
		else if ('y' != ch)
		{
			goto confirm_check;
		}
		else
		{
			get_distance(&t_distance, &train_info_pt->station_links, 
				t_begin_order, t_end_order);		//計算路程
			pay_bill(&this_cost, system_info_pt->price_sbed_per_km, t_distance);
				// 取得票價 this_cost
		}
	}

	// 查找用戶是否已在該趟車上訂過票
	booked_info_head = &op_psngr_pt->booked_links;
	while (booked_info_head->next)
	{
		booked_info_pt = booked_info_head->next;
		car_amount++;		// 可直接用作 offset值

		// 如果用戶曾在此趟車上訂過票
		if ((!(strcmp(train_info_pt->master, booked_info_pt->booked_train_sq_id))) &&
			(!(strcmp(train_info_pt->time_id, booked_info_pt->booked_train_time_id))))
		{
			booked_state = 1;
		}
	}

	if (booked_state)		// 如果用戶曾在此趟車上訂過票
	{
		for (i = 0; i < MAX_BOOK_PER_PSNGR; i++)	// 查找是否還未達到訂票的最大數目
		{
			if (!booked_info_pt->soft_bed_sq[ok_car_order][i])
			{
				booked_info_pt->soft_bed_sq[ok_car_order][i] = t_seat_order;
			}
		}
		
		if (MAX_BOOK_PER_PSNGR == i)		// 已達到訂票的最大數目
		{
			message(ERROR, "您單獨在這趟車上訂票數已達到最大數目,不能再訂了!", WC);

			return FAIL;
		}

		strcpy(booked_info_pt->soft_bed_st[booked_info_pt->soft_bed], t_begin_station);
		strcat(booked_info_pt->soft_bed_st[booked_info_pt->soft_bed], "#");
		strcat(booked_info_pt->soft_bed_st[booked_info_pt->soft_bed], t_end_station);
		booked_info_pt->soft_bed++;
		save_booked_info(booked_info_pt, op_psngr_pt->passenger_id);
	}
	else					// 如果用戶沒有在此趟車上訂過票
	{
		if (!(booked_info_pt = (booked_info *)malloc(sizeof(booked_info))))
		{
			message(ERROR, "用戶訂票創建訂票信息時申請內存失敗!", NULL);
			message(WARN, "預訂軟臥車票失敗!", WC);

			return FAIL;
		}

		// 創建新的列車-用戶訂票信息
		strcpy(booked_info_pt->booked_train_sq_id, train_info_pt->master);
		strcpy(booked_info_pt->booked_train_time_id, train_info_pt->time_id);

		for (i = 0; i < SOFT_BED_CAR; i++)	// 軟臥訂票歷史記錄清零
		{
			for (j = 0; j < SOFT_BED_CAR; j++)
			{
				booked_info_pt->soft_bed_sq[i][j] = 0;
			}
		}
		for (i = 0; i < HARD_BED_CAR; i++)	// 硬臥訂票歷史記錄清零
		{
			for (j = 0; j < MAX_BOOK_PER_PSNGR; j++)
			{
				booked_info_pt->soft_bed_sq[i][j] = 0;
			}
		}
		for (i = 0; i < HARD_SEAT_CAR; i++)	// 硬座訂票歷史記錄清零
		{
			for (j = 0; j < MAX_BOOK_PER_PSNGR; j++)
			{
				booked_info_pt->soft_bed_sq[i][j] = 0;
			}
		}

		booked_info_pt->hard_bed = 0;
		booked_info_pt->hard_seat = 0;
		strcpy(booked_info_pt->master, op_psngr_pt->passenger_id);
		booked_info_pt->offset = car_amount;		// 見前文
		booked_info_pt->soft_bed = 0;
		booked_info_pt->soft_bed_sq[ok_car_order][booked_info_pt->soft_bed] = t_seat_order;
		booked_info_pt->next = NULL;
		strcpy(booked_info_pt->soft_bed_st[booked_info_pt->soft_bed], t_begin_station);
		strcat(booked_info_pt->soft_bed_st[booked_info_pt->soft_bed], "#");
		strcat(booked_info_pt->soft_bed_st[booked_info_pt->soft_bed], t_end_station);
		booked_info_pt->soft_bed++;

		// 即時更新系統信息并保存在文件
		booked_info_head->next = booked_info_pt;
		if (!(save_booked_info(booked_info_pt, op_psngr_pt->passenger_id)))
		{
			message(ERROR, "執行乘客訂票操作時更新文件失敗!", NULL);
			message(WARN, "預訂軟臥車票失敗!", WC);

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲高清免费观看 | 国产麻豆日韩欧美久久| 欧美三级蜜桃2在线观看| 亚洲欧美欧美一区二区三区| 色综合久久九月婷婷色综合| 一区二区三区小说| 欧美日韩高清影院| 精品一区二区在线播放| 久久精品人人做人人综合| 福利一区福利二区| 一区二区三区在线观看视频 | 91一区二区三区在线观看| 亚洲日本乱码在线观看| 在线观看一区二区精品视频| 亚洲动漫第一页| 精品日韩欧美在线| 国产99久久精品| 亚洲夂夂婷婷色拍ww47| 欧美一区二区三区精品| 国产成人免费av在线| 亚洲精品亚洲人成人网| 91麻豆精品国产91久久久久久久久| 日产国产高清一区二区三区| 2023国产一二三区日本精品2022| 成人激情校园春色| 无码av中文一区二区三区桃花岛| 久久亚洲私人国产精品va媚药| 99久久免费视频.com| 视频一区二区三区在线| 国产午夜精品福利| 欧美系列日韩一区| 国产高清亚洲一区| 亚洲国产美女搞黄色| 久久久久久久一区| 欧美剧在线免费观看网站| 国产精品自拍一区| 亚洲午夜在线视频| 中文在线一区二区| 911精品国产一区二区在线| 国产精品一区二区视频| 亚洲一二三四区| 久久久精品国产免大香伊| 欧美日韩在线综合| 成人综合在线观看| 免费成人av资源网| 亚洲一区二区在线免费看| 国产欧美精品区一区二区三区| 在线观看国产日韩| 成人免费黄色在线| 美女www一区二区| 亚洲一区在线观看网站| 国产日韩欧美麻豆| 日韩精品在线网站| 欧美夫妻性生活| 91片黄在线观看| 成人一区二区三区| 国产综合成人久久大片91| 日韩和的一区二区| 一区二区三区在线视频免费 | 欧美在线|欧美| 国产不卡视频一区| 六月丁香综合在线视频| 亚洲成人一区在线| 国产精品国产三级国产a| 久久亚洲二区三区| 2022国产精品视频| 91精品国产aⅴ一区二区| 色狠狠色狠狠综合| 99久久精品久久久久久清纯| 国产福利精品一区二区| 精品一区二区三区不卡| 日韩国产精品久久久| 亚洲电影一区二区三区| 一区二区三区四区不卡在线| 国产精品不卡在线| 中文字幕一区二区三区四区不卡| 久久久久久久久久看片| 久久久另类综合| 国产欧美一区在线| 中文字幕成人av| 国产精品入口麻豆九色| 亚洲国产激情av| 国产精品毛片久久久久久| 中文字幕国产一区二区| |精品福利一区二区三区| 中文字幕在线观看不卡| 亚洲精品视频观看| 亚洲不卡一区二区三区| 日韩电影网1区2区| 久久国产精品99精品国产| 黄色精品一二区| 高清视频一区二区| 成人小视频免费在线观看| youjizz久久| 在线精品视频一区二区| 欧美午夜精品久久久久久超碰| 欧美精品久久久久久久多人混战 | 久久99久久久欧美国产| 国产伦精品一区二区三区视频青涩 | 欧美精品日日鲁夜夜添| 91精品国产综合久久久久久漫画 | 欧美一级一区二区| 久久众筹精品私拍模特| 中文在线资源观看网站视频免费不卡| 国产精品三级视频| 亚洲综合一区在线| 日韩激情在线观看| 国产成人h网站| 色综合 综合色| 欧美一区二区久久久| 精品精品国产高清a毛片牛牛| 中文字幕高清不卡| 亚洲va欧美va国产va天堂影院| 蜜臀久久99精品久久久久宅男| 国产精品996| 欧美视频一二三区| 欧美大度的电影原声| 国产精品盗摄一区二区三区| 亚洲国产人成综合网站| 国产一区二区三区精品欧美日韩一区二区三区 | 亚洲精品综合在线| 精品在线一区二区| 91福利资源站| 26uuu国产在线精品一区二区| 亚洲美腿欧美偷拍| 国产在线一区观看| 欧美日精品一区视频| 久久久精品综合| 舔着乳尖日韩一区| 成人aa视频在线观看| 欧美一区二区三区影视| 成人欧美一区二区三区1314| 裸体一区二区三区| 欧美亚洲综合在线| 国产精品美女久久久久久久久 | 久久久三级国产网站| 亚洲国产精品久久人人爱| 国产精品影视网| 日韩午夜电影av| 亚洲一级片在线观看| 成人午夜短视频| 精品少妇一区二区三区免费观看| 一区二区三区日韩精品| 国产成人精品免费网站| 精品国产一区二区精华| 午夜精品久久久久久久| 91视频免费看| 亚洲国产精品成人综合色在线婷婷| 日日摸夜夜添夜夜添国产精品| 91视频一区二区三区| 中文字幕va一区二区三区| 韩国精品久久久| 日韩一区二区三区视频| 亚洲国产成人91porn| 欧美另类变人与禽xxxxx| 亚洲欧美日韩成人高清在线一区| 国产91精品久久久久久久网曝门 | 日韩一级黄色片| 亚洲成人高清在线| 欧美亚洲免费在线一区| 亚洲黄色在线视频| 日本国产一区二区| 亚洲伦理在线免费看| 91在线porny国产在线看| 国产精品国产三级国产普通话蜜臀 | 国产伦理精品不卡| 337p日本欧洲亚洲大胆精品 | 91国内精品野花午夜精品| 中文字幕一区二区三区在线观看 | 久久久综合网站| 国产一区在线观看视频| 精品欧美一区二区久久| 日日摸夜夜添夜夜添国产精品| 6080午夜不卡| 免费高清在线一区| 精品国产一区二区三区久久影院| 久久精品72免费观看| 久久综合久久综合亚洲| 国产成a人亚洲精| 国产精品麻豆久久久| 91美女精品福利| 一级日本不卡的影视| 欧美精品久久99久久在免费线 | 中文字幕在线一区| 99久久精品国产精品久久| 亚洲欧美色一区| 欧美中文字幕亚洲一区二区va在线 | 欧美调教femdomvk| 午夜欧美在线一二页| 日韩视频不卡中文| 国产在线精品一区二区| 国产精品你懂的在线欣赏| 97国产一区二区| 亚洲bdsm女犯bdsm网站| 欧美一二三在线| 国产精品99久久久久久宅男| 国产精品国产三级国产普通话三级| 色狠狠色狠狠综合| 理论电影国产精品| 国产精品人妖ts系列视频|