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

📄 train_booking_main.c

📁 火车定标系统...用VC编译通过的
💻 C
📖 第 1 页 / 共 2 页
字号:
//	train_booking_main.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"

#define _DEBUG_


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

int main(void)
{
	system_info this_system_info;			// 系统信息数据缓冲区
	passenger_info this_psngr_info;			// 用户数据缓冲区
	passenger_info psngr_links;				// 用户数据链表
	train_info ok_train_info_list;			// 列车数据链头结点缓冲区
	train_sq_info *train_sq_pt;				// 车次信息体指针
	train_info target_train_buffer;			// 订退票目标列车数据缓冲区
	train_info *target_train_pt;			// 订退票目标列车数据缓冲区指针
	train_sq_info target_sq_info;			// 操作列车的车次数据缓冲区
	char choice;
	int sq_empty, mgr;
	int i;

	// 主菜单
	char main_menu[][MAX_MENU_LEN] = {
		"公共查询系统",
		"车站管理员登录",
		"注册新乘客信息",
		"老乘客登录系统",
		"退出订票系统"};

	// 管理员菜单
	char admin_menu[][MAX_MENU_LEN] = {
		"报表生成工具",
		"配置乘客信息",
		"配置系统信息",
		"车次数据管理",
		"列车数据管理",
		"个人信息管理",
		"注册新管理员",
		"退出管理登录"};

	// 报表工具菜单
	char admin_report_menu[][MAX_MENU_LEN] = {
		"系统信息报表",
		"车次信息报表",
		"列车信息报表",
		"财务收支报表",
		"退出报表工具菜单"};

	// 配置乘客信息菜单
	char admin_set_psngr_menu[][MAX_MENU_LEN] = {
		"注销乘客帐户",
		"更改乘客类型",
		"退出配置乘客菜单"};
	
	// 配置系统信息菜单
	char admin_set_system_menu[][MAX_MENU_LEN] = {
		"开放/关闭订票系统",
		"重命名本地车站",
		"设置每公里软卧标准票价",
		"设置每公里硬卧标准票价",
		"设置每公里硬座标准票价",
		"设置乘客退票打折率",
		"设置特殊乘客购票打折率",
		"退出配置系统菜单"};

	// 车次数据管理菜单
	char admin_sq_menu[][MAX_MENU_LEN] = {
		"添加新的车次",
		"编辑车次信息",
		"删除作废车次",
		"退出车次管理菜单"};

	// 列车数据管理菜单
	char admin_train_menu[][MAX_MENU_LEN] = {
		"添加新的列车",
		"编辑列车信息",
		"删除作废列车"
		"退出列车管理菜单"};

	// 普通乘客菜单
	char psngr_menu[][MAX_MENU_LEN] = {
		"预订软卧车票",
		"预订硬卧车票",
		"预订硬座车票",
		"退订软卧车票",
		"退订硬卧车票",
		"退订硬座车票",
		"查看订票历史",
		"查看系统消息",
		"个人信息管理",
		"退出乘客登录"};

	// 公共查询菜单
	char search_menu[][MAX_MENU_LEN] = {
		"按车次名查询车次",
		"按始发站查询车次",
		"按终点站查询车次",
		"按过路站查询车次",
		"按车次名查询列车",
		"退出查询系统"};

	// 个人设置菜单
	char personal_set_menu[][MAX_MENU_LEN] = {
		"更改个人密码",
		"退出个人设置菜单"};


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


	message(INFO, "正在初始化订票系统信息...", NULL);

	// 检测系统资料夹及处理
	if (!check_system_data())
	{
		message(WARN, "系统文件损毁或不完整,原来的车站数据将不可用!", NULL);
		message(TIP, "您可以将手中的一套数据复制到程序同一目录下即可正常使用!", NULL);
		message(INFO, "按任意键重建系统运行支持文件!", W);
		message(INFO, "正在创建系统资料夹...", NULL);
		if (!(prepare_system_dir()))
		{
			message(ERROR, "系统运行故障,意外终止!", WC);

			return 1;
		}
		message(INFO, "系统资料夹创建完成。", NULL);
	}

	// 加载系统配置信息,若没有则创建默认配置
	if (!(load_system_settings(&this_system_info)))
	{
		message(INFO, "正在创建系统支持文件...", NULL);
		if (!(prepare_system_file()))
		{
			message(ERROR, "系统运行故障,意外终止!", WC);

			return 1;
		}
		message(INFO, "系统支持文件创建完成。", W);

		message(INFO, "正在创建系统默认配置信息...", NULL);
		if (!(create_default_system_settings(&this_system_info)))	// 创建默认系统配置
		{
			message(ERROR, "系统运行故障,意外终止!", WC);

			return 1;
		}

#ifdef _DEBUG_
	show_system_info(&this_system_info);
#endif

		message(INFO, "系统默认配置信息创建完成。", NULL);
		message(INFO, "正在创建默认管理员信息...", NULL);
		if (!(create_default_admin_info(&this_psngr_info, &this_system_info)))		// 创建默认管理员
		{
			message(ERROR, "系统运行故障,意外终止!", WC);

			return 1;
		}
		message(INFO, "创建默认管理员信息完成。", NULL);
	}


	// 加载所有的车次信息
	message(INFO, "正在加载车次信息...", NULL);
	if (!(load_train_sq_info_list(&this_system_info.train_sq_list, this_system_info.location,
		this_system_info.total_train_sq)))
	{
		message(ERROR, "系统运行故障,意外终止!", WC);

		return 1;
	}
	message(INFO, "车次信息加载完成。", NULL);
	
	message(INFO, "正在为每个车次加载其所有的列车信息...", NULL);
	if (this_system_info.train_sq_list.next)			// 如果车站中已有车次信息	
	{
		train_sq_pt = this_system_info.train_sq_list.next;			// 跳过头结点
		sq_empty = 0;
	}
	else
	{
		message(WARN, "本车站还没有车次信息,暂时不能订票!", NULL);
		message(TIP, "本车站暂时只开放乘客注册功能。", W);
		sq_empty = 1;
	}

	// 加载每个车次的所有列车信息
	for (i = 0; i < this_system_info.total_train_sq; i++)
	{
		// 首先取得每个车次的所有列车的时间标识符
		if (!(load_train_item_list(&train_sq_pt->train_item_list,
			train_sq_pt->train_sq_id, train_sq_pt->running_amount)))
		{
			message(ERROR, "系统运行故障,意外终止!", WC);

			return 1;
		}

		// 根据标识符加载对应的列车信息(包含站点信息、座位信息)
		load_train_info_list(&train_sq_pt->train_list, train_sq_pt->train_sq_id,
			&train_sq_pt->train_item_list, train_sq_pt->running_amount);
		train_sq_pt = train_sq_pt->next;
	}
	message(INFO, "加载所有列车信息完成。", NULL);

	// 加载用户信息数据
	message(INFO, "正在加载注册乘客数据...", NULL);
	load_psngr_item_list(&this_system_info.psngr_item_list, this_system_info.location, 
		this_system_info.psngr_amount);		// 加载索引信息
	load_psngr_info_list(&psngr_links, this_system_info.location, &this_system_info.psngr_item_list, 
		this_system_info.psngr_amount);

#ifdef _DEBUG_
	show_psngr_info_list(&psngr_links);
#endif

	message(INFO, "注册乘客数据加载成功。", NULL);

	message(INFO, "初始化订票系统信息完成,按任意键进入主菜单。", WC);



////////////////////////////////////////////////////////////////////////////		
main_menu:						// 主菜单
	{
		CLS;
		choice = text_menu(main_menu, "", 0, 4);
		switch (choice)
		{
		case	'1':					// 公共查询系统
			goto search_menu;
			break;


		case	'2':					// 管理员登录
			if (psngr_login(&psngr_links, &this_psngr_info, this_system_info.location, 1))
			{
				printf("【信息】管理员(%s)已成功登录管理系统!\n", this_psngr_info.passenger_id);
				message(INFO, "恭喜恭喜!", W);
				mgr = 1;			// 设置登录标记
				goto admin_menu;
			}
			else
			{
				message(ERROR, "您输入的信息有误,登录管理系统失败!", NULL);
				message(TIP, "按任意键返回主菜单。", WC);
				goto main_menu;
			}
			break;
		

		case	'3':					// 新乘客注册
			if (psngr_reg(&this_psngr_info, &this_system_info, this_system_info.location, 0))
			{
				message(INFO, "恭喜!新乘客注册成功!您以后可以凭此身份执行订票操作。", WC);
				goto main_menu;
			}
			else
			{
				message(ERROR, "注册新乘客的过程中意外出错,注册失败!", WC);
				goto main_menu;
			}
			break;

		case	'4':					// 老乘客登录
			if (psngr_login(&this_psngr_info, &psngr_links, this_system_info.location, 0))
			{
				printf("【信息】乘客(%s)已成功登录订票系统。", this_psngr_info.passenger_id);
				message(TIP, "按任意键进入主菜单。", WC);
				mgr = 0;			// 设置登录标记
				goto psngr_menu;
			}
			else
			{
				message(ERROR, "输入信息有误,登录订票系统失败!", NULL);
				message(TIP, "按任意键返回主菜单。", WC);
				goto main_menu;
			}
			break;

		case	'5':					// 退出订票系统
			CLS;
			message(WARN, "真的要退出订票系统吗(Y/N)?", NULL);
			choice = getch();
			if (('y' == choice) || ('Y' == choice))
			{
				message(INFO, "正在退出订票系统...", NULL);

				save_system_info(&this_system_info);	// 文件保存
				free_passenger_info_list(&psngr_links);
				free_train_sq_info_list(&this_system_info.train_sq_list);	// 内存清理

				message(INFO, "已成功退出订票系统。", NULL);
				message(INFO, "谢谢您的使用。", WC);

				return 0;
			}
			break;

		default:
			goto main_menu;
		}
	}

////////////////////////////////////////////////////////////////////////////
admin_menu:						// 管理员菜单
	{
		CLS;
		choice = text_menu(admin_menu, "", 0, 7);
		switch (choice)
		{
		case	'1':					// 报表生成工具
			goto admin_report_menu;
			break;

		case	'2':					// 配置乘客信息
			goto admin_set_psngr_menu;
			break;

		case	'3':					// 配置系统信息
			goto admin_set_system_menu;
			break;

		case	'4':					// 车次数据管理
			goto admin_sq_menu;
			break;

		case	'5':					// 列车数据管理
			goto admin_train_menu;
			break;

		case	'6':					// 个人信息管理
			goto personal_set_menu;
			break;

		case	'7':					// 注册新管理员
			if (psngr_reg(&this_psngr_info, &this_system_info, this_system_info.location, 1))
			{
				message(INFO, "新的管理员注册成功!按任意键返回主菜单。", WC);
				goto main_menu;
			}
			else
			{
				message(ERROR, "注册新的管理员失败!按任意键返回主菜单。", WC);
				goto main_menu;
			}
			break;

		case	'8':					// 退出管理登录
			message(TIP, "您真的要退出管理菜单吗(Y/N)?", NULL);
			choice = getch();
			if (('y' == choice) || ('Y' == choice))
			{
				if (psngr_logout(&this_psngr_info))
				{
					message(INFO, "您已成功退出管理系统", W);
					mgr = 0;		// 设置登录标记
					goto main_menu;
				}
				else
				{
					message(ERROR, "管理员退出系统过程中出错,您可能会丢失数据!", W);
					goto main_menu;
				}
			}
			break;

		default:
			goto admin_menu;
		}		

	}



////////////////////////////////////////////////////////////////////////////
admin_train_menu:				// 列车数据管理菜单
	{
		CLS;
		choice = text_menu(admin_train_menu, "", 0, 3);
		switch (choice)
		{
		case	'1':					// 添加新的列车
			if (train_add_file(&this_system_info.train_sq_list))
			{
				message(INFO, "添加新车次成功。", WC);
				goto admin_sq_menu;
			}
			else
			{
				message(WARN, "添加新车次过程中发生异常,添加失败!", WC);
				goto admin_sq_menu;
			}

		case	'2':					// 编辑列车信息
			message(INFO, "功能尚在开发中。", WC);
			break;

		case	'3':					// 删除作废列车
			message(INFO, "功能尚在开发中。", WC);
			break;
		
		case	'4':					// 退出列车管理菜单
			CLS;
			message(WARN, "真的要退出列车管理菜单吗(Y/N)?", NULL);
			choice = getch();

			if (('y' == choice) || ('Y' == choice))
			{
				goto admin_menu;
			}
			else
			{
				goto admin_train_menu;
			}
			break;
		}
	}
							

////////////////////////////////////////////////////////////////////////////
admin_sq_menu:					// 车次数据管理
	{
		CLS;
		choice = text_menu(admin_sq_menu, "", 0, 3);
		switch (choice)
		{
		case	'1':					// 添加新的车次
			if (train_sq_add(&this_system_info))
			{
				message(INFO, "添加新车次成功。", WC);
				goto admin_sq_menu;
			}
			else
			{

⌨️ 快捷键说明

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