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

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

?? train_booking_fread.c

?? 火車定標系統...用VC編譯通過的
?? C
?? 第 1 頁 / 共 2 頁
字號:
//	train_booking_fileop.c -- 包含文件讀取操作函數
//
/////////////////////////////////////////////////////////////////////////////

#ifndef TRAIN_BOOKING_FREAD_C_
#define TRAIN_BOOKING_FREAD_C_

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

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

#define _DEBUG_

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



/////////////////////////////////////////////////////////////////////////////
// 函數功能:	生成默認的車站管理系統配置
//
// 函數參數:	system_info_pt:車站信息結構體指針
//
/////////////////////////////////////////////////////////////////////////////
status create_default_system_settings(system_info *system_info_pt)
{
	message(WARN, "正在重置系統配置信息...", NULL);

	// 設置系統狀態
	system_info_pt->open = 1;
	system_info_pt->locked = 0;
	system_info_pt->total_train_sq = 0;
	system_info_pt->total_train = 0;
	system_info_pt->admin_amount = 0;
	system_info_pt->psngr_amount = 0;
	system_info_pt->train_sq_list.next = NULL;

	// 設置默認起始站點
	strcpy(system_info_pt->location, "武漢");

	// 設置其他默認參數
	system_info_pt->total_income = 0;
	system_info_pt->total_sold = 0;
	system_info_pt->price_hbed_per_km = 0.93;
	system_info_pt->price_hseat_per_km = 0.42;
	system_info_pt->price_sbed_per_km = 1.22;
	system_info_pt->bounce_off = 0.6;
	system_info_pt->special_off = 0.5;

	// 將創建信息寫入文件
	if (save_system_info(system_info_pt))
	{
		message(INFO, "成功創建默認系統配置信息!", NULL);
	}
	else
	{
		message(ERROR, "創建默認系統配置信息時存儲文件出錯!", NULL);
		message(WARN, "創建默認系統配置信息失敗!", WC);

		return FAIL;
	}

	return OK;
}


/////////////////////////////////////////////////////////////////////////////
// 函數功能:	從文件加載系統配置信息
//
// 函數參數:	system_info_pt:車站信息結構體指針
//
/////////////////////////////////////////////////////////////////////////////
status load_system_settings(system_info *system_info_pt)
{
	FILE *fp;
	char filepath[MAX_FILE_PATH_LEN];
	
	message(INFO, "正在加載系統配置信息...", NULL);

	// 生成文件路徑
	create_i_dir(filepath, SYS_INFO_DIR, SYS_INFO_FILE);

	// 檢測文件有效性
	if (!check_data(filepath, 0))
	{
		message(ERROR, "從文件加載系統配置信息失敗!", C);

		return FAIL;
	}

	// 只讀二進制方式打開文件讀取信息
	fp = fopen(filepath, "rb"); 
	fread(system_info_pt, sizeof(system_info), 1, fp);
	fclose(fp);		// 打開一個空文件也能讀?

	message(INFO, "系統配置信息加載成功。", NULL);

	return OK;
}



/////////////////////////////////////////////////////////////////////////////
// 函數功能:	從文件加載車次信息鏈
//
// 函數參數:	train_sq_info_head:車次信息鏈表頭結點指針
//				station_name:站點名稱
//				amount:車次數量
//
/////////////////////////////////////////////////////////////////////////////
status load_train_sq_info_list(train_sq_info *train_sq_info_head, 
							   char *station_name, int amount)
{
	FILE *fp;
	char filepath[MAX_FILE_PATH_LEN];
	train_sq_info *train_sq_info_pt;
	int i, j, ok = 0;
	
	printf("【信息】正在加載站點(%s)的車次信息...\n", station_name);

	// 生成文件路徑
	create_i_dir(filepath, SYS_INFO_DIR, SQ_INFO_FILE);

	// 檢測文件有效性
	if (!check_data(filepath, 1))
	{
		message(ERROR, "從文件加載車次信息失敗!", WC);

		return FAIL;
	}
	
	// 只讀二進制方式打開文件讀取信息
	fp = fopen(filepath, "rb"); 

	for (i = 0; i < amount; i++)
	{
		if (!(train_sq_info_pt = (train_sq_info *)malloc(sizeof(train_sq_info))))
		{
			message(ERROR, "加載車次信息時申請內存空間失敗!", WC);
			message(WARN, "加載車次信息完全失敗!", WC);

			// 釋放無效內存
			free_train_sq_info_list(train_sq_info_head);

			return FAIL;
		}
		ok++;
		fread(train_sq_info_pt, sizeof(train_sq_info), 1, fp);

		// 檢測車次與車站的從屬關系
		if (strcmp(station_name, train_sq_info_pt->master))
		{
			message(ERROR, "加載的車次信息不屬于本車站!", NULL);
			message(WARN, "加載車次信息完全失敗!", WC);

			// 釋放無效內存
			free_train_sq_info_list(train_sq_info_head);
			free(train_sq_info_pt);

			return FAIL; 
		}
		
		// 鏈上車次信息
		train_sq_info_head->next = train_sq_info_pt;
		train_sq_info_head = train_sq_info_head->next;

		// 加載該車次的所有列車標識
		if (!(load_train_item_list(&train_sq_info_pt->train_item_list, 
			train_sq_info_pt->train_sq_id, 
			train_sq_info_pt->running_amount_valid)))
		{
			printf("【錯誤】加載車次(%s)的列車標識信息失敗!\n", 
				train_sq_info_pt->train_sq_id);
			message(WARN, "加載車次信息完全失敗!", WC);

			free_train_sq_info_list(train_sq_info_head);	// 釋放無效內存

			return FAIL;
		}

		// 加載該車次的列車信息
		if (!(load_train_info_list(&train_sq_info_pt->train_list,
			train_sq_info_pt->train_sq_id,
			&train_sq_info_pt->train_item_list,
			train_sq_info_pt->running_amount_valid)))
		{
			printf("【錯誤】加載車次(%s)的列車信息失敗!\n", 
				train_sq_info_pt->train_sq_id);
			message(WARN, "加載車次信息完全失敗!", WC);

			free_train_sq_info_list(train_sq_info_head);	// 釋放無效內存

			return FAIL;
		}

	}
	if (ok)
	{
		train_sq_info_pt->next = NULL;
	}
	fclose(fp);

	return OK;
}


/////////////////////////////////////////////////////////////////////////////
// 函數功能:	從文件加載列車信息鏈
// 
// 函數參數:	train_info_head:列車信息鏈表頭結點指針
//				sq_iq:車次編號,檢測用
//				amount:列車數量
//
/////////////////////////////////////////////////////////////////////////////
status load_train_info_list(train_info *train_info_head, char *sq_id, 
							  train_item *train_item_head, int amount)
{
	char filepath[MAX_FILE_PATH_LEN];
	train_info *train_info_pt;
	int i;
	
	printf("【信息】正在加載車次(%s)的列車信息...\n", sq_id);

	train_item_head = train_item_head->next;		// 跳過頭結點

	// 根據時間標識符依次加載該車次的所有列車
	for (i = 0; i < amount; i++)
	{
		if (!(train_info_pt = (train_info *)malloc(sizeof(train_info))))
		{
			message(ERROR, "加載列車信息鏈時申請內存失敗!", WC);
			free_train_info_list(train_info_head);		// 釋放無效內存

			return FAIL;
		}

		// 加載單個列車基本信息
		if (!(load_single_train_info(train_info_pt, sq_id,
			train_item_head->train_time_id, 1)))
		{
			printf("【錯誤】加載車次(%s)的列車信息失敗!\n", sq_id);
			message(WARN, "加載列車息完全失敗!", WC);	

			free_train_info_list(train_info_head);		// 釋放無效內存

			return FAIL;
		}
		
		// 檢測列車與車次、時間標識的從屬關系
		if ((strcmp(sq_id, train_info_pt->master)) ||
			(strcmp(train_item_head->train_time_id, train_info_pt->time_id)))
		{
			message(ERROR, "加載的列車信息不屬于本車次!", NULL);
			message(WARN, "加載列車信息完全失敗!", WC);

			// 釋放無效內存
			free_train_info_list(train_info_head);
			free(train_info_pt);

			return FAIL; 
		}
		
		// 加載座位信息數組
		if (!(load_dot_info_list(&train_info_pt->sbed_info_list,
			&train_info_pt->hbed_info_list,
			&train_info_pt->hseat_info_list,
			sq_id, train_info_pt->time_id, 
			SOFT_BED_CAR, HARD_BED_CAR, HARD_SEAT_CAR)))
		{
			printf("【錯誤】加載車次(%s)的車廂信息失敗!\n", sq_id);
			message(WARN, "加載列車息完全失敗!", WC);	

			free_train_info_list(train_info_head);		// 釋放無效內存

			return FAIL;
		}

		// 加載站點信息雙鏈
		if (!(load_station_info_list(&train_info_pt->station_links, sq_id, 
			train_info_pt->time_id,
			train_info_pt->total_station)))
		{
			printf("【錯誤】加載車次(%s)的站點信息失敗!\n", sq_id);
			message(WARN, "加載列車息完全失敗!", WC);	

			free_train_info_list(train_info_head);		// 釋放無效內存

			return FAIL;
		}

		// 鏈上表尾
		train_info_head->next = train_info_pt;
		train_info_head = train_info_head->next;

		// 列車標識信息同步推進
		if (train_item_head = train_item_head->next)
		{
			train_item_head = train_item_head->next;
		}
		else
		{
			message(ERROR, "根據列車標識信息加載列車信息時兩者不一致錯誤!", NULL);
			message(WARN, "加載列車息完全失敗!", WC);	

			free_train_info_list(train_info_head);		// 釋放無效內存

			return FAIL;
		}
	}

	train_info_pt = NULL;

	return OK;
}


/////////////////////////////////////////////////////////////////////////////
// 函數功能:	從文件加載列車標識信息鏈
//
// 函數參數:	train_item_head:列車標識信息鏈頭結點指針
//				sq_id:車次編號
//				amount:標識數量
//
/////////////////////////////////////////////////////////////////////////////
status load_train_item_list(train_item *train_item_head, char *sq_id, int amount)
{
	int i;
	FILE *fp;
	train_item *train_item_pt;
	char filepath[MAX_FILE_PATH_LEN];

	printf("【信息】正在加載車次(%s)的所有列車標識信息...\n", sq_id);

	// 生成文件路徑
	create_ii_dir(filepath, TRAIN_INFO_DIR, sq_id, SQ_ITEM_FILE);

	// 檢測文件有效性
	if (!check_data(filepath, 1))
	{
		message(ERROR, "從文件加載列車標識信息失敗!", WC);

		return FAIL;
	}
		
	fp = fopen(filepath, "rb");

	for (i = 0; i < amount; i++)
	{
		// 從文件中讀取列車標識信息
		if (!(train_item_pt = (train_item *)malloc(sizeof(train_item))))
		{
			message(ERROR, "加載列車標識信息時讀申請內存失敗!", NULL);
			message(WARN, "加載列車標識信息失敗!", WC);

			free_train_item_info_list(train_item_head);		// 釋放無效內存

			return FAIL;
		}

		fread(train_item_pt, sizeof(train_item), 1, fp);

		// 檢測列車標識與車次的從屬關系
		if (strcmp(sq_id, train_item_pt->master))
		{
			message(ERROR, "加載的列車標識信息不屬于本車次!", NULL);
			message(WARN, "加載列車標識信息完全失敗!", WC);

			// 釋放無效內存
			free_train_item_info_list(train_item_head);
			free(train_item_pt);

			return FAIL; 
		}

		train_item_head->next = train_item_pt;
		train_item_head = train_item_head->next ;
	}

	train_item_pt->next = NULL;
	fclose(fp);

	return OK;
}



/////////////////////////////////////////////////////////////////////////////
// 函數功能:	從文件加載單個列車信息
//
// 函數參數:	train_info_pt:內存緩沖區
//				sq_id:列車所屬車次編號
//			 	time_id:列車的時間標識符
//				check_expired:是否加載過期列車:1(否);0(是)
//
/////////////////////////////////////////////////////////////////////////////
status load_single_train_info(train_info *train_info_pt, char *sq_id,
							  char *time_id, char check_expired)
{
	char filepath[MAX_FILE_PATH_LEN];
	struct tm tm_tmp;
	FILE *fp;
	train_info train_info_buf;
	time_t cur_time, train_time;

	printf("【信息】正在加載車次為(%s),時間標識為(%s)的列車信息...\n",
		sq_id, time_id);

	create_iii_dir(filepath, TRAIN_INFO_DIR, sq_id, 
		time_id, TRAIN_INFO_FILE);						// 生成列車信息文件路徑

	// 檢測文件有效性
	if (!check_data(filepath, 1))
	{
		message(ERROR, "從文件加載單個列車信息失敗!", WC);

		return FAIL;
	}

	fp = fopen(&train_info_buf, fp);
	get_current_time(&tm_tmp, &cur_time);				// 獲得當前標準時間
	train_time = mktime(&train_info_buf.start_tm);		// 獲得火車啟動的標準時間

	if ((1==check_expired) && (train_time<cur_time))	// 火車啟動時間晚于當前時間
	{
		message(WARN, "該列車已過期,終止加載信息!", NULL);

		return ABORT;
	}
	else
	{
		*train_info_pt = train_info_buf;	// 寫入信息
	}

	fclose(fp);

	return OK;
}



/////////////////////////////////////////////////////////////////////////////
// 函數功能:	從文件加載列車途經站點信息鏈
//
// 函數參數:	station_info_head:中途站點信息鏈頭結點指針
//				sq_id:車次編號
//				timd_id:該趟列車的時間標識符
//				amonut:站點數量
//
/////////////////////////////////////////////////////////////////////////////
status load_station_info_list(station_info *station_info_head, 
							  char *sq_id, char *time_id, int amount)
{
	int i;
	station_info *station_info_pt;
	char filepath[MAX_FILE_PATH_LEN];
	FILE *fp;

	printf("【信息】正在加載列車(%s)的所有途經站點信息...\n", sq_id);

	station_info_head->pre = NULL;			// 頭結點沒有前趨

	create_iii_dir(filepath, TRAIN_INFO_DIR, sq_id, 
		time_id, STATION_INFO_FILE);		// 生成文件路徑

	// 檢測文件有效性
	if (!check_data(filepath, 1))
	{
		message(ERROR, "從文件加載列車途經站點信息失敗!", WC);

		return FAIL;
	}

	fp = fopen(filepath, "rb");

	for (i = 0; i < amount; i++)
	{
		if (!(station_info_pt = (station_info *)malloc(sizeof(station_info))))
		{
			message(ERROR, "加載列車站點時申請內存失敗!", NULL);
			message(WARN, "加載列車站點信息失敗!", WC);

			free_station_info_list(station_info_head);	// 釋放無效內存

			return FAIL;
		}

		fread(station_info_pt, sizeof(station_info), 1, fp);

		// 檢測站點與車次、列車時間標識的從屬關系
		if ((strcmp(sq_id, station_info_pt->master)) ||
			(strcmp(time_id, station_info_pt->time_id)))
		{
			message(ERROR, "加載的站點信息不屬于本車次!", NULL);
			message(WARN, "加載站點信息完全失敗!", WC);
	
			// 釋放無效內存
			free_station_info_list(station_info_head);
			free(station_info_pt);

			return FAIL;
		}

		// 雙向鏈表賦指針
		station_info_head->next = station_info_pt;
		station_info_pt->pre = station_info_head;

		station_info_head = station_info_head->next;	// 向后移指針
	}
	
	station_info_pt->pre = station_info_head;	// 尾結點接頭
	station_info_pt->next = NULL;		// 尾結點封尾
	fclose(fp);

	return OK;
}



/////////////////////////////////////////////////////////////////////////////
// 函數功能:	從文件加載列車軟臥信息數組
//
// 函數參數:	sbed_arr:軟臥信息結構數組首地址
//				sq_id:車次編號
//				timd_id:該趟列車的時間標識符
//				amonut:軟臥車廂數量
//
/////////////////////////////////////////////////////////////////////////////
status load_sbed_info_list(sbed_info *sbed_arr, char *sq_id, 
						   char *time_id, int amount)
{
	char filepath[MAX_FILE_PATH_LEN];
	FILE *fp;

	printf("【信息】正在加載列車(%s)的軟臥車廂信息...\n", sq_id);

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
一区二区三区精品| 国产亚洲午夜高清国产拍精品| 久久机这里只有精品| 国产精品久久久久久久久晋中 | 精品国产1区二区| 成人理论电影网| 欧美a级理论片| 亚洲欧美另类久久久精品| 久久午夜国产精品| 欧美久久久久久蜜桃| www.亚洲激情.com| 国产一区二区三区免费看| 石原莉奈在线亚洲二区| 一区二区激情视频| 国产精品色在线| 久久久精品免费免费| 欧美成人一区二区三区片免费| 91蜜桃视频在线| 成人性生交大片免费看视频在线 | 久久精品国产亚洲5555| 亚洲丶国产丶欧美一区二区三区| 中文字幕一区不卡| 国产日韩欧美精品一区| 2019国产精品| 久久亚洲一区二区三区明星换脸 | 国产一区二区福利| 久久精品国产秦先生| 日韩精品久久久久久| 亚洲成人一二三| 日韩毛片精品高清免费| 久久欧美中文字幕| 欧美日韩国产中文| 国产福利精品导航| 亚洲第一二三四区| 国产精品污污网站在线观看| 国产亚洲制服色| 视频一区免费在线观看| 91蝌蚪porny| 久久综合色婷婷| 日韩欧美亚洲一区二区| 色综合欧美在线| 日本成人在线网站| 中文字幕在线观看一区| 日韩欧美国产1| 欧美日韩国产一二三| 麻豆成人在线观看| 欧美国产视频在线| 久久综合一区二区| 亚洲精品国久久99热| 国产精品国产自产拍高清av| 日本一区二区不卡视频| 中文字幕亚洲一区二区va在线| 国产精品福利av| 亚洲欧美成aⅴ人在线观看| 夜夜爽夜夜爽精品视频| 香蕉久久夜色精品国产使用方法 | 欧美在线观看一区| 欧美美女激情18p| 精品久久久久久综合日本欧美| 久久久久久久综合日本| 一色屋精品亚洲香蕉网站| 亚洲精品一二三| 日日夜夜一区二区| 激情综合色播激情啊| 欧美一区二区福利视频| 欧美精品一二三四| 久久久噜噜噜久噜久久综合| 在线观看区一区二| 欧美酷刑日本凌虐凌虐| 精品免费日韩av| 国产精品久久久久影视| 亚洲第一主播视频| 狠狠色综合色综合网络| 成人av网站在线| 欧美高清视频www夜色资源网| 精品99一区二区| 亚洲男人都懂的| 美女诱惑一区二区| 成人ar影院免费观看视频| 欧美精品久久久久久久久老牛影院| 精品国产一区久久| 亚洲男同性视频| 韩国一区二区三区| 欧美色涩在线第一页| 2023国产一二三区日本精品2022| 一区二区三区四区蜜桃| 久久av中文字幕片| 91久久精品国产91性色tv| 欧美大片在线观看一区| 亚洲综合av网| 国产视频不卡一区| 亚洲三级电影网站| 国产福利一区二区三区视频| av一区二区久久| 日韩欧美国产成人一区二区| 亚洲视频图片小说| 国产在线麻豆精品观看| 欧美猛男超大videosgay| 亚洲国产精品99久久久久久久久| 五月天一区二区三区| av不卡一区二区三区| 精品噜噜噜噜久久久久久久久试看| 亚洲精品久久久蜜桃| 丁香天五香天堂综合| 日韩亚洲欧美一区二区三区| 亚洲男人的天堂在线aⅴ视频| 国产一区二区三区精品欧美日韩一区二区三区 | 五月天网站亚洲| 99久久免费精品高清特色大片| 精品奇米国产一区二区三区| 亚洲综合视频在线观看| 成人精品在线视频观看| 精品成人私密视频| 三级成人在线视频| 色悠久久久久综合欧美99| 中文字幕电影一区| 国产精品一区2区| 欧美人体做爰大胆视频| 丝袜美腿亚洲色图| 日韩欧美一级精品久久| 日本美女一区二区三区视频| 欧美一区二区网站| 久久精品国产网站| 日本一区二区三区免费乱视频| 美女诱惑一区二区| 国产女人aaa级久久久级| 国产99精品在线观看| 中文字幕一区三区| 99国产精品久久久久| 樱桃视频在线观看一区| 欧美在线观看一二区| 日本在线不卡一区| 久久久久久亚洲综合影院红桃 | 欧美一区二区播放| 99久久久国产精品| 美腿丝袜亚洲色图| 国产精品视频你懂的| 首页国产丝袜综合| 久久久一区二区三区| 99vv1com这只有精品| 日韩国产成人精品| 国产一区在线看| 欧美在线视频日韩| 4438亚洲最大| 国产剧情在线观看一区二区| 免费成人在线网站| 免费成人av在线播放| 制服.丝袜.亚洲.中文.综合| 国产精品一区二区无线| 欧美视频在线观看一区二区| 日本高清免费不卡视频| 久久久久9999亚洲精品| 久久久电影一区二区三区| 久久久久青草大香线综合精品| 日韩欧美中文字幕一区| 日韩一区二区免费在线观看| 欧美精品乱人伦久久久久久| 精品国产乱码久久久久久浪潮 | 国产一区二区在线电影| 激情av综合网| 成人午夜av电影| 色欲综合视频天天天| 欧美日韩国产天堂| 国产亚洲精品中文字幕| 亚洲人成网站色在线观看| 日韩国产欧美三级| 国产成人午夜精品影院观看视频| 成人av综合在线| 日韩视频免费观看高清完整版在线观看 | 色婷婷久久综合| 日韩欧美二区三区| 国产日韩欧美高清在线| 91精品久久久久久久91蜜桃 | 国产激情视频一区二区在线观看 | 亚洲va国产va欧美va观看| 欧美一区二区免费| 国产成人精品影视| 亚洲一区二区三区中文字幕| 日韩欧美成人一区二区| 国产成人av一区二区三区在线| 亚洲精品少妇30p| 精品免费日韩av| 91精品福利在线| 久久99国产精品久久99| 亚洲欧洲另类国产综合| 91精品久久久久久久91蜜桃| 成人激情文学综合网| 免费观看在线色综合| 国产精品美女久久久久久| 欧美久久高跟鞋激| 成人午夜av在线| 美女网站色91| 亚洲自拍偷拍欧美| 欧美国产日韩亚洲一区| 91精品国产一区二区| 91免费国产视频网站| 国产一区视频在线看| 午夜精品久久久久久久久| 中文字幕第一页久久| 日韩视频免费直播|