⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 train_booking_fwrite.c

📁 火车定标系统...用VC编译通过的
💻 C
字号:
//	train_booking_fileop.c -- 包含文件存储操作函数
//
/////////////////////////////////////////////////////////////////////////////

#ifndef TRAIN_BOOKING_FWRITE_C_
#define TRAIN_BOOKING_FWRITE_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"

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


/////////////////////////////////////////////////////////////////////////////
// 函数功能:	将当前系统信息写入文件
//
// 函数参数:	system_info_pt:指向系统信息结构体的指针
//
// 注意事项:	仅存储一个结构单元,不存储其上的链表
//
/////////////////////////////////////////////////////////////////////////////
status save_system_info(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, 1))
	{
		message(ERROR, "更新系统信息时打开文件失败!", WC);

		return FAIL;
	}

	fp = fopen(filepath, "rb+");		// 随机读写使用 rb+ 方式打开文件
	fwrite(system_info_pt, sizeof(system_info), 1, fp);
	fclose(fp);

	return OK;
}



/////////////////////////////////////////////////////////////////////////////
// 函数功能:	将车次信息结点(1个)写入文件
//
// 函数参数:	train_sq_info_pt:指向单个车次信息结点的指针
//
/////////////////////////////////////////////////////////////////////////////
status save_train_sq_info(train_sq_info *train_sq_info_pt)
{
	FILE *fp;
	char filepath[MAX_FILE_PATH_LEN];
	int offset = train_sq_info_pt->offset;		// 文件存储偏移量
	
	printf("【信息】正在更新车次(%s)的信息...", train_sq_info_pt->train_sq_id);

	// 取得文件路径
	create_i_dir(filepath, SYS_INFO_DIR, SQ_INFO_FILE);

	// 检测文件有效性
	if (!check_data(filepath, 1))
	{
		message(ERROR, "更新车次信息时打开文件失败!", WC);

		return FAIL;
	}

	// 文件存储位置的定位及写入
	fp = fopen(filepath, "rb+");		// 随机读写使用 rb+ 方式打开文件
	fseek(fp, train_sq_info_pt->offset*sizeof(train_sq_info), SEEK_SET); 
	fwrite(train_sq_info_pt, sizeof(train_sq_info), 1, fp);
	fclose(fp);

	return OK;
}


/////////////////////////////////////////////////////////////////////////////
// 函数功能:	将列车信息结点(1个)写入文件
//
// 函数参数:	train_info_pt:指向单个列车信息结点的指针
//				train_sq_id:该列车所属车次编号
//
// 注意事项:	trian_info_pt中本身包含time_id信息
//
/////////////////////////////////////////////////////////////////////////////
status save_train_info(train_info *train_info_pt, char *train_sq_id)
{
	FILE *fp;
	char filepath[MAX_FILE_PATH_LEN];
	
	printf("【信息】正在更新车次(%s)的第(%s)趟列车信息...", 
		train_sq_id, train_info_pt->time_id);

	// 取得文件路径
	create_iii_dir(filepath, TRAIN_INFO_DIR, train_sq_id, 
		train_info_pt->time_id, TRAIN_INFO_FILE);

	// 检测文件有效性
	if (!check_data(filepath, 1))
	{
		message(ERROR, "更新列车信息时打开文件失败!", WC);

		return FAIL;
	}

	// 文件存储位置的定位及写入
	fp = fopen(filepath, "rb+");		// 随机读写使用 rb+ 方式打开文件
	fwrite(train_info_pt, sizeof(train_info), 1, fp);
	fclose(fp);

	return OK;
}

/////////////////////////////////////////////////////////////////////////////
// 函数功能:	保存列车软卧车厢顺序表信息
//
// 函数参数:	sbed_arr:数组头
//				train_sq_id:车厢所在列车的从属车次编号
//				time_id:列车时间标识
//				amount:车厢数量
//
/////////////////////////////////////////////////////////////////////////////
status save_sbed_info_list(sbed_info *sbed_arr, char *train_sq_id, 
						   char *time_id, int amount)
{
	FILE *fp;
	char filepath[MAX_FILE_PATH_LEN];

	printf("【信息】正在更新车次(%s)的第(%s)趟列车的软卧信息...", 
		train_sq_id, time_id);

	// 取得文件路径
	create_iii_dir(filepath, TRAIN_INFO_DIR, train_sq_id, 
		time_id, SB_INFO_FILE);

	// 检测文件有效性
	if (!check_data(filepath, 1))
	{
		message(ERROR, "更新列车的车厢信息时打开文件失败!", WC);

		return FAIL;
	}

	// 文件存储位置的定位及写入
	fp = fopen(filepath, "rb+");
	fwrite(sbed_arr, sizeof(sbed_info), amount, fp);
	fclose(fp);

	return OK;
}


/////////////////////////////////////////////////////////////////////////////
// 函数功能:	保存列车硬卧车厢顺序表信息
//
// 函数参数:	hbed_arr:数组头
//				train_sq_id:车厢所在列车的从属车次编号
//				time_id:列车时间标识
//				amount:车厢数量
//
/////////////////////////////////////////////////////////////////////////////
status save_hbed_info_list(sbed_info *hbed_arr, char *train_sq_id, 
						   char *time_id, int amount)
{
	FILE *fp;
	char filepath[MAX_FILE_PATH_LEN];

	printf("【信息】正在更新车次(%s)的第(%s)趟列车的硬卧信息...", 
		train_sq_id, time_id);

	// 取得文件路径
	create_iii_dir(filepath, TRAIN_INFO_DIR, train_sq_id, 
		time_id, HB_INFO_FILE);

	// 检测文件有效性
	if (!check_data(filepath, 1))
	{
		message(ERROR, "更新列车的车厢信息时打开文件失败!", WC);

		return FAIL;
	}

	// 文件存储位置的定位及写入
	fp = fopen(filepath, "rb+");
	fwrite(hbed_arr, sizeof(hbed_info), amount, fp);
	fclose(fp);

	return OK;
}



/////////////////////////////////////////////////////////////////////////////
// 函数功能:	保存列车硬座车厢顺序表信息
//
// 函数参数:	hseat_arr:数组头
//				train_sq_id:车厢所在列车的从属车次编号
//				time_id:列车时间标识
//				amount:车厢数量
//
/////////////////////////////////////////////////////////////////////////////
status save_hseat_info_list(sbed_info *hseat_arr, char *train_sq_id, 
						   char *time_id, int amount)
{
	FILE *fp;
	char filepath[MAX_FILE_PATH_LEN];

	printf("【信息】正在更新车次(%s)的第(%s)趟列车的硬座信息...", 
		train_sq_id, time_id);

	// 取得文件路径
	create_iii_dir(filepath, TRAIN_INFO_DIR, train_sq_id, 
		time_id, HS_INFO_FILE);

	// 检测文件有效性
	if (!check_data(filepath, 1))
	{
		message(ERROR, "更新列车的车厢信息时打开文件失败!", WC);

		return FAIL;
	}

	// 文件存储位置的定位及写入
	fp = fopen(filepath, "rb+");
	fwrite(hseat_arr, sizeof(hseat_info), amount, fp);
	fclose(fp);

	return OK;
}



/////////////////////////////////////////////////////////////////////////////
// 函数功能:	将车站信息结点(1个)写入文件
//
// 函数参数:	station_info_pt:车站信息结点指针
//				train_sq_id:站点从属于车次的车次编号
//				time_id:站点从属列车的时间标识
//
/////////////////////////////////////////////////////////////////////////////
status save_station_info(station_info *station_info_pt, char *train_sq_id,
						 char *time_id)
{
	FILE *fp;
	char filepath[MAX_FILE_PATH_LEN];
	int offset = station_info_pt->offset;			// 文件存储偏移量
	
	printf("【信息】正在更新车次(%s)的第(%s)趟列车的站点信息...", 
		train_sq_id, time_id);

	// 取得文件路径
	create_iii_dir(filepath, TRAIN_INFO_DIR, train_sq_id, 
		time_id, STATION_INFO_FILE);

	// 检测文件有效性
	if (!check_data(filepath, 1))
	{
		message(ERROR, "更新列车站点信息时打开文件失败!", WC);

		return FAIL;
	}

	// 文件存储位置的定位及写入
	fp = fopen(filepath, "rb+");		// 随机读写使用 rb+ 方式打开文件
	fseek(fp, station_info_pt->offset*sizeof(station_info), SEEK_SET); 
	fwrite(station_info_pt, sizeof(station_info), 1, fp);
	fclose(fp);

	return OK;
}

/////////////////////////////////////////////////////////////////////////////
// 函数功能:	将单个前台用户信息写入文件
//
// 函数参数:	passenger_info_pt:指向用户信息结构体的指针
//
/////////////////////////////////////////////////////////////////////////////
status save_psngr_info(passenger_info *passenger_info_pt)
{
	FILE *fp;
	char filepath[MAX_FILE_PATH_LEN];
	
	printf("【信息】正在更新用户(%s)信息...\n", passenger_info_pt->passenger_id);

	// 取得文件路径
	create_ii_dir(filepath, USER_INFO_DIR, 
		passenger_info_pt->passenger_id, PSNGR_INFO_FILE);

	// 检测文件有效性
	if (!check_data(filepath, 1))
	{
		message(ERROR, "更新用户信息时打开文件失败!", WC);

		return FAIL;
	}

	// 文件存储位置的定位及写入
	fp = fopen(filepath, "rb+");		// 随机读写使用 rb+ 方式打开文件
	fwrite(passenger_info_pt, sizeof(passenger_info), 1, fp);
	fclose(fp);

	return OK;
}



/////////////////////////////////////////////////////////////////////////////
// 函数功能:	将单次车次的用户订票信息写入文件
//
// 函数参数:	booked_info_pt:指向单次车次的用户订票信息结构体的指针
//				psngr_id:用户名 
//
/////////////////////////////////////////////////////////////////////////////
status save_booked_info(booked_info *booked_info_pt, char *psngr_id)
{
	FILE *fp;
	char filepath[MAX_FILE_PATH_LEN];
	
	printf("【信息】正在更新用户(%s)的订票信息...\n", psngr_id);

	// 取得文件路径
	create_i_dir(filepath, USER_INFO_DIR, 
		psngr_id, BOOKED_INFO_FILE);

	// 检测文件有效性
	if (!check_data(filepath, 1))
	{
		message(ERROR, "更新用户订票信息时打开文件失败!", WC);

		return FAIL;
	}

	// 文件存储位置的定位及写入
	fp = fopen(filepath, "rb+");		// 随机读写使用 rb+ 方式打开文件
	fseek(fp, booked_info_pt->offset*sizeof(booked_info), SEEK_SET); 
	fwrite(booked_info_pt, sizeof(booked_info), 1, fp);
	fclose(fp);

	return OK;
}



/////////////////////////////////////////////////////////////////////////////
// 函数功能:	将用户接收到的系统消息写入文件
//
// 函数参数:	sysmsg_pt:指向用户接收到的系统消息结构体的指针
//				psngr_id:用户名
//
/////////////////////////////////////////////////////////////////////////////
status save_sysmsg(msgbox_item *sysmsg_pt, char *psngr_id)
{
	FILE *fp;
	char filepath[MAX_FILE_PATH_LEN];
	
	printf("【信息】正在发送系统消息给用户(%s)...\n", psngr_id);

	// 取得文件路径
	create_i_dir(filepath, USER_INFO_DIR, 
		psngr_id, MSGBOX_FILE);

	// 检测文件有效性
	if (!check_data(filepath, 1))
	{
		message(ERROR, "发送系统消息给用户时打开文件失败!", WC);

		return FAIL;
	}

	// 文件存储位置的定位及写入
	fp = fopen(filepath, "rb+");		// 随机读写使用 rb+ 方式打开文件
	fseek(fp, sysmsg_pt->offset*sizeof(msgbox_item), SEEK_SET); 
	fwrite(sysmsg_pt, sizeof(msgbox_item), 1, fp);
	fclose(fp);

	return OK;
}



/////////////////////////////////////////////////////////////////////////////
// 函数功能:	保存列车标识信息链到文件
//
// 函数参数:	train_item_pt:列车标识信息结点指针
//				sq_id:车次编号
//
/////////////////////////////////////////////////////////////////////////////
status save_train_item_info(train_item *train_item_pt, char *sq_id)
{
	FILE *fp;
	char filepath[128];

	// 取得列车标识信息链文件路径:注意,每车次仅有这样一个文件
	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+");		// 随机读写使用 rb+ 方式打开文件
	fseek(fp, train_item_pt->offset*sizeof(train_item), SEEK_SET); 
	fwrite(train_item_pt, sizeof(train_item), 1, fp);
	fclose(fp);

	return OK;
}


/////////////////////////////////////////////////////////////////////////////
// 函数功能:	保存新注册乘客索引信息文件
//
// 函数参数:	user_item_pt:指向索引信息体的指针
//				psngr_id:乘客名称
//
/////////////////////////////////////////////////////////////////////////////
status save_user_item_info(user_item *user_item_pt, char *psngr_id)
{
	FILE *fp;
	char filepath[128];

	// 取得列车标识信息链文件路径:注意,每车次仅有这样一个文件
	create_i_dir(filepath, SYS_INFO_DIR, PSNGR_ITEM_FILE);

	// 检测文件有效性
	if (!check_data(filepath, 1))
	{
		message(ERROR, "保存乘客索引信息到文件时打开文件失败!", WC);

		return FAIL;
	}

	// 文件存储位置的定位及写入
	fp = fopen(filepath, "rb+");		// 随机读写使用 rb+ 方式打开文件
	fseek(fp, user_item_pt->offset*sizeof(user_item), SEEK_SET); 
	fwrite(user_item_pt, sizeof(user_item), 1, fp);
	fclose(fp);

	return OK;
}



/////////////////////////////////////////////////////////////////////////////
#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -