?? train_booking_fwrite.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, "更新列車的車廂信息時打開文件失?。?quot;, 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, "更新列車站點信息時打開文件失?。?quot;, 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, "更新用戶訂票信息時打開文件失?。?quot;, 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, "發送系統消息給用戶時打開文件失?。?quot;, 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, "保存乘客索引信息到文件時打開文件失?。?quot;, 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 + -