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

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

?? train_booking_psngrop.c

?? 火車定標系統...用VC編譯通過的
?? C
字號:
//	train_booking_psngrop.c -- 包含用戶數據操作函數
//
/////////////////////////////////////////////////////////////////////////////

#ifndef TRAIN_BOOKING_PSNGROP_C_
#define TRAIN_BOOKING_PSNGROP_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"


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


/////////////////////////////////////////////////////////////////////////////
// 函數功能:	為剛注冊的用戶準備資料夾和空文件
//
// 函數參數:	psngr_id:用戶名
//
/////////////////////////////////////////////////////////////////////////////
status prepare_psngr_dir(char *psngr_id)
{
	build_ii_dir(USER_INFO_DIR, psngr_id, NULL);	// 創建專門的目錄

	// 創建空文件以準備寫入
	build_ii_dir(USER_INFO_DIR, psngr_id, PSNGR_INFO_FILE);
	build_ii_dir(USER_INFO_DIR, psngr_id, BOOKED_INFO_FILE);
	build_ii_dir(USER_INFO_DIR, psngr_id, MSGBOX_FILE);

	return OK;
}


/////////////////////////////////////////////////////////////////////////////
// 函數功能:	注冊隸屬于某一車站的用戶
//
// 函數參數:	psngr_info_head:整個車站前臺用戶信息鏈表頭結點指針
//				system_info_pt:指向車站信息結構體的指針
//				station_id:該車站名 
//				type:要注冊的類型:0管理員;1普通用戶;2特殊用戶
//
////////////////////////////////////////////////////////////////////////////
status psngr_reg(passenger_info *psngr_info_head, system_info *system_info_pt, 
				 char *station_id, char type)
{
	passenger_info *psngr_info_buffer_pt;	// 注冊數據緩沖區
	passenger_info *psngr_info_pt, *psngr_info_head_reset = psngr_info_head;
	char t_id[MAX_PSNGR_ID_LEN * 2];	
	char t_pass1[MAX_PASS_LEN * 2], t_pass2[MAX_PASS_LEN * 2];
	char call[32];
	char ch;
	
	actitle("注冊車站新用戶");

input_name:		// 取得用戶名
	{
		CLS;

		// 信息鏈指針的復位
		psngr_info_head = psngr_info_head_reset;

		// 取得合適長度的臨時用戶名
		if (!get_str("要注冊的用戶名", t_id, 4, MAX_PSNGR_ID_LEN))
		{
			message(WARN, "用戶注冊失敗!", WC);

			return FAIL;
		}

		// 檢測該用戶是否已存在
		message(INFO, "正在驗證用戶名的合法性...", NULL);
		while (psngr_info_head->next)
		{
			psngr_info_pt = psngr_info_head->next;

			if (!strcpy(t_id, psngr_info_pt->passenger_id))
			{
				message(WARN, "抱歉!該用戶名已被人注冊過。", NULL);
				printf("【1】換名重新注冊\n");
				printf("【2】放棄注冊\n");
				ch = get_choice("12");

				if ('2' == ch)
				{
					message(WARN, "已放棄注冊新用戶!", WC);

					return FAIL;
				}
				else
				{
					goto input_name;
				}
			}
			psngr_info_head = psngr_info_head->next;	// 依次往下搜索
		}
		printf("【信息】用戶名(%s)沒有被人使用過,可以注冊。\n", t_id);
	}

input_pass:		// 取得用戶密碼
	{
		CLS;

		// 取得第一個密碼
		if (!get_str("要設定的密碼", t_pass1, 4, MAX_PASS_LEN))
		{
			message(WARN, "用戶注冊失??!", WC);

			return FAIL;
		}

		// 再次取得密碼
		printf("【提示】需要再次輸入密碼以確認沒有錯誤!\n");
		if (!get_str("要設定的密碼", t_pass2, 4, MAX_PSNGR_ID_LEN))
		{
			return FAIL;
		}

		// 比較兩次輸入的密碼是否相同
		if (strcmp(t_pass1, t_pass2))
		{
			message(WARN, "兩次輸入的密碼不匹配!", NULL);
			message(TIP, "必須重新輸入密碼!", W);

			goto input_pass;
		}
	}

write_info:		// 寫入文件數據
	{
		CLS;
		message(INFO, "正在寫入新用戶數據...", NULL);

		if (!(psngr_info_buffer_pt = (passenger_info *)malloc(sizeof(passenger_info))))
		{
			message(ERROR, "創建新注冊用戶數據時申請內存出錯!", NULL);
			message(WARN, "注冊新用戶失敗!", WC);

			return FAIL;
		}

		// 寫入用戶的各項基本數據
		strcpy(psngr_info_buffer_pt->passenger_id, t_id);
		strcpy(psngr_info_buffer_pt->password, t_pass1);
		strcpy(psngr_info_buffer_pt->station_id, station_id);
		psngr_info_buffer_pt->type = type;

		psngr_info_buffer_pt->total_booked_tickets = 0;
		psngr_info_buffer_pt->total_booked_train = 0;
		psngr_info_buffer_pt->total_cost = 0;
		psngr_info_buffer_pt->sysmsg_amount = 0;
		psngr_info_buffer_pt->sysmsg_new = 0;

		psngr_info_buffer_pt->next = NULL;
		
		if (!(save_psngr_info(psngr_info_buffer_pt)))		// 寫入磁盤文件
		{
			message(ERROR, "注冊新用戶寫入文件時發生意外錯誤!", NULL);
			message(WARN, "注冊新用戶失敗!", WC);

			free(psngr_info_buffer_pt);

			return FAIL;
		}

		// 登記乘客索引記錄


		// 如果是管理員則登記入系統信息
		if (1 == type)
		{
			if (system_info_pt->admin_amount > MAX_ADMIN_AMOUNT)	// 管理員人數已滿
			{
				message(ERROR, "本車站管理員已達到最大人數,不能再繼續注冊管理員了!", NULL);
				message(WARN, "注冊新用戶(管理員)失敗!", WC);
				free(psngr_info_buffer_pt);

				return FAIL;
			}
			else
			{
				// 寫入管理員信息,將本用戶名添加進入管理員列表
				strcpy(system_info_pt->admin[system_info_pt->admin_amount], t_id);
				system_info_pt->admin_amount++;
				save_system_info(system_info_pt);		// 更新文件數據
				
				message(INFO, "該用戶已注冊為車站新管理員!", NULL);
				message(INFO, "除了可以訂票外,還可對車站、車次、列車進行管理!", WC);
			}
		}

		system_info_pt->psngr_amount++;			// 注冊人數加1
		save_system_info(system_info_pt);		// 更新文件數據

		// 為用戶數據準備文件夾
		prepare_psngr_dir(psngr_info_buffer_pt->passenger_id);

		message(INFO, "新用戶已經注冊成功!", NULL);
		printf("【信息】請記住您的用戶名(%s)和所屬車站(%s),不要登錄錯誤!\n", 
			t_id, station_id);
		message(INFO, "感謝您使用本系統。按任意鍵返回。", WC);
	}

	return OK;
}



/////////////////////////////////////////////////////////////////////////////
// 函數功能:	車站用戶登錄
//
// 函數參數:	psngr_info_head:整個車站前臺用戶信息鏈表頭結點指針
//				psngr_info_pt:此指針指向的空間用于返回成功登錄的用戶信息
//				station_id:用戶所屬的車站名
//				type:登錄類型:1為管理員,0為普通乘客
//	
////////////////////////////////////////////////////////////////////////////
status psngr_login(passenger_info *psngr_info_head, passenger_info *psngr_info_buf, 
				   char *station_id, char type)
{
	passenger_info *psngr_info_head_reset = psngr_info_head;
	char t_id[MAX_PSNGR_ID_LEN * 2];	
	char t_pass[MAX_PASS_LEN * 2];
	char ch;

	
check_name:		// 取得用戶名
	{
		CLS;
		actitle("車站訂票用戶登錄");

		if (!get_str("要登錄的用戶名", t_id, 4, MAX_PSNGR_ID_LEN))
		{
			message(WARN, "用戶登錄失??!", WC);

			return FAIL;
		}

		// 檢測該用戶是否已存在
		message(INFO, "正在驗證用戶名是否存在...", NULL);
		while (psngr_info_head->next)
		{
			psngr_info_head = psngr_info_head->next;
			// 找到該用戶,即復制相關數據到內存中
			if (!strcpy(t_id, psngr_info_head->passenger_id))		
			{
				*psngr_info_buf = *psngr_info_head;
				goto check_pass;	// 直接跳到下一步
			}
		}

		printf("【警告】無(%s)此用戶存在!\n\n", t_id);
		printf("【1】重新登錄\n");
		printf("【2】退出\n\n");
		ch = get_choice("12");

		if ('1' == ch)
		{
			psngr_info_head = psngr_info_head_reset;	// 信息鏈指針的復位
			goto check_name;
		}
		else
		{
			CLS;
			message(WARN, "已放棄用戶登錄!", NULL);
			message(WARN, "按任意鍵退出此系統!", WC);

			return FAIL;
		}
	}

	// 檢測用戶與車站的從屬關系
	if (strcmp(psngr_info_buf->station_id, station_id))
	{
		printf("【錯誤】用戶(%s)不是本站(%s)的注冊用戶!\n",
			psngr_info_buf->passenger_id);
		message(WARN, "該用戶不能在本車站登錄!", NULL);
		printf("【1】重新換名登錄\n");
		printf("【2】退出\n");

		ch = get_choice("12");

		if ('1' == ch)
		{
			psngr_info_head = psngr_info_head_reset;
			goto check_name;
		}
		else
		{	
			message(WARN, "已放棄用戶登錄!", WC);

			return FAIL;
		}
	}
	
check_pass:		// 取得密碼
	{
		if (!get_str("密碼", t_pass, 4, MAX_PASS_LEN))
		{
			message(WARN, "用戶登錄失敗!", WC);

			return FAIL;
		}

		// 密碼出錯處理
		if (strcpy(t_pass, psngr_info_buf->password))
		{
			message(WARN, "您輸入的密碼有誤!", NULL);
			printf("【1】重新輸入密碼\n");
			printf("【2】重新換名登錄\n");
			printf("【3】退出\n\n");
			ch = get_choice("12");

			if ('2' == ch)
			{
				psngr_info_head = psngr_info_head_reset;
				goto check_name;
			}
			else if ('1' == ch)
			{
				goto check_pass;
			}
			else
			{
				message(WARN, "已放棄用戶登錄!", WC);

				return FAIL;
			}
		}
	}

	// 從文件讀取該用戶的其他信息
	if (!(load_booked_info_list(&psngr_info_buf->booked_links, psngr_info_buf->passenger_id,
		psngr_info_buf->total_booked_train)))		// 加載該用戶的訂票信息
	{
		message(ERROR, "讀取用戶訂票信息出錯!", NULL);
		message(WARN, "用戶登錄失?。?quot;, WC);

		return FAIL;
	}

	if (!(load_sysmsg_list(&psngr_info_buf->sysmsg_links, psngr_info_buf->passenger_id,
		psngr_info_buf->sysmsg_amount)))		// 加載該用戶的系統消息
	{
		message(ERROR, "讀取用戶系統消息出錯!", NULL);
		message(WARN, "用戶登錄失??!", WC);

		return FAIL;
	}

	printf("【信息】本站(%s)用戶(%s)已成功登錄訂票系統!\n",
		station_id, t_id);
	WAIT;
	CLS;

	return OK;
}



////////////////////////////////////////////////////////////////////////////
// 函數功能:	車站用戶登出
//
// 函數參數:	psngr_info_pt:指向前臺用戶信息結構的指針
//
////////////////////////////////////////////////////////////////////////////
status psngr_logout(passenger_info *psngr_info_pt)				
{
	passenger_info passenger_info_dump;

	if ((save_psngr_info(psngr_info_pt)) &&		// 保存前臺用戶信息
		(save_booked_info(&psngr_info_pt->booked_links, psngr_info_pt->passenger_id)) &&
												// 保存用戶訂票信息
		(save_sysmsg(&psngr_info_pt->sysmsg_links, psngr_info_pt->passenger_id)))
												// 保存用戶接收到的系統消息
												
	{
		printf("【信息】用戶(%s)已成功登出系統!\n", psngr_info_pt->passenger_id);

		*psngr_info_pt = passenger_info_dump;	// 填充垃圾數據

		WAIT;
		CLS;
	}
	else
	{
		printf("【信息】用戶(%s)登出系統時保存數據出錯!\n", psngr_info_pt->passenger_id);
		message(WARN, "本次不正常的用戶登出可能使您的數據發生異常!\n", WC);

		return FAIL;
	}
	
	return OK;
}
	


/////////////////////////////////////////////////////////////////////////////
// 函數功能:	乘客修改密碼
//
// 函數參數:	psngr_info_pt:乘客信息單元指針
//
/////////////////////////////////////////////////////////////////////////////	
status modify_psngr_pass(passenger_info *psngr_info_pt)
{
	char t_pass1[64], t_pass2[64];
	char ch;

	actitle("修改乘客密碼");

	// 校驗老密碼
	message(TIP, "更改密碼需要驗證原密碼!", NULL);
	if (!(get_str("原密碼", t_pass1, 1, MAX_PASS_LEN)))
	{
		message(ERROR, "修改密碼失?。?quot;, WC);
		
		return FAIL;
	}
	if (strcmp(t_pass1, psngr_info_pt->password))
	{
		message(ERROR, "您輸入的原密碼有誤,因此不能修改密碼!", NULL);
		message(WARN, "修改乘客密碼失??!", WC);

		return FAIL;
	}

	// 接收新密碼
get_new_pass:
	CLS;
	message(TIP, "現在輸入新密碼。", NULL);
	if (!(get_str("新密碼", t_pass1, 1, MAX_PASS_LEN)))
	{
		message(ERROR, "接收新密碼失敗!", NULL);
		message(WARN, "修改乘客密碼失??!", WC);

		return FAIL;
	}
	message(TIP, "需要再次輸入新密碼。", NULL);
	if (!(get_str("新密碼", t_pass2, 1, MAX_PASS_LEN)))
	{
		message(ERROR, "接收新密碼失敗!", NULL);
		message(WARN, "修改乘客密碼失??!", WC);

		return FAIL;
	}

	// 匹配校驗
	if (!(strcmp(t_pass1, t_pass2)))
	{
		message(ERROR, "輸入的兩次密碼不相同!要重新輸入嗎(Y/N)?", NULL);
		ch = getch();
		if (('y' == ch) || ('Y' == ch))
		{
			goto get_new_pass;
		}
		else
		{
			message(WARN, "修改乘客密碼失??!", WC);

			return FAIL;
		}
	}

	// 改動保存
	strcpy(psngr_info_pt->password, t_pass2);
	if (!(save_psngr_info(psngr_info_pt)))
	{
		message(ERROR, "修改乘客密碼保存文件時出錯!", NULL);
		message(WARN, "修改乘客密碼失敗!", WC); 

		return FAIL;
	}

	return OK;
}


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

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
高清在线观看日韩| 另类小说欧美激情| 麻豆一区二区三| 91丨porny丨蝌蚪视频| 91精品国产色综合久久久蜜香臀| 欧美精品一区二区三区在线| 亚洲精品国久久99热| 国产乱对白刺激视频不卡| 在线视频国内自拍亚洲视频| 久久久综合精品| 日韩不卡一二三区| 一区二区三区在线影院| 亚洲乱码中文字幕| 成人午夜视频网站| 日韩免费视频一区二区| 同产精品九九九| 色中色一区二区| 亚洲国产精品黑人久久久| 黄色精品一二区| 欧美一区二区啪啪| 石原莉奈在线亚洲二区| 色婷婷av一区二区三区gif| 国产精品乱码久久久久久| 久久精品国产99| 欧美吞精做爰啪啪高潮| 一区二区三区在线播放| av电影一区二区| 中文字幕永久在线不卡| 成人激情动漫在线观看| 欧美经典一区二区三区| 国产一区二区三区免费| 欧美精品一区二区三区蜜臀| 久久国产精品色| 日韩丝袜情趣美女图片| 蜜桃一区二区三区在线| 日韩精品一区二区三区在线播放| 亚洲一区二区三区激情| 在线亚洲+欧美+日本专区| 日韩伦理免费电影| 91热门视频在线观看| 亚洲天堂成人在线观看| 色综合天天在线| 伊人开心综合网| 欧美日韩成人综合天天影院 | 舔着乳尖日韩一区| 在线观看国产精品网站| 亚洲午夜久久久久中文字幕久| a级精品国产片在线观看| 欧美国产成人精品| 成人毛片在线观看| 一区二区三区丝袜| 亚洲精品视频免费观看| 在线看国产一区| 日韩精品一二三区| 精品福利视频一区二区三区| 福利一区二区在线| 尤物视频一区二区| 日韩一区二区三区视频| 国产成人在线影院 | 久久久噜噜噜久噜久久综合| 精品一区二区三区香蕉蜜桃 | 色婷婷久久久综合中文字幕| 亚洲一区影音先锋| 2020国产成人综合网| 国产成人免费视| 亚洲国产日韩a在线播放| 精品久久久久久无| 一本大道av伊人久久综合| 日韩中文字幕91| 久久精品综合网| 91免费看`日韩一区二区| 亚洲va欧美va天堂v国产综合| 精品久久99ma| 91小视频免费观看| 老司机精品视频导航| 亚洲视频网在线直播| 91精品国产一区二区| www.欧美亚洲| 久久国产人妖系列| 亚洲与欧洲av电影| 欧美激情在线观看视频免费| 欧美午夜精品一区二区三区| 国产麻豆精品久久一二三| 一区二区在线观看视频| 久久免费看少妇高潮| 欧美日韩精品高清| 91啪九色porn原创视频在线观看| 美女任你摸久久 | 欧美国产欧美亚州国产日韩mv天天看完整| 99精品欧美一区二区三区综合在线| 日本一区中文字幕| 一区二区三区蜜桃网| 久久久久国产成人精品亚洲午夜| 日本视频中文字幕一区二区三区| 亚洲欧洲国产日韩| 久久精品亚洲精品国产欧美kt∨| 91精品国产综合久久精品app| 97久久超碰精品国产| 国产老女人精品毛片久久| 奇米一区二区三区av| 夜夜亚洲天天久久| 中文字幕一区二区三中文字幕| 91精品国产色综合久久不卡电影| 在线观看av一区| 99精品欧美一区二区蜜桃免费| 国产一区在线不卡| 狠狠色丁香久久婷婷综| 婷婷久久综合九色综合伊人色| 亚洲丝袜另类动漫二区| 欧美国产欧美综合| 国产欧美日韩在线视频| 久久色视频免费观看| 亚洲精品在线免费观看视频| 制服丝袜激情欧洲亚洲| 欧美精品一二三| 欧美精品自拍偷拍| 在线不卡中文字幕| 精品视频在线免费看| 91一区一区三区| 91在线看国产| 一本色道久久综合亚洲aⅴ蜜桃| 国产成人一区在线| av一区二区三区| av电影在线观看一区| 在线亚洲精品福利网址导航| 欧美又粗又大又爽| 在线不卡a资源高清| 9191成人精品久久| 欧美日韩一级片在线观看| 欧美性猛交xxxx乱大交退制版| 欧美在线影院一区二区| 欧美日韩一区二区三区在线看| 精品视频在线看| 日韩一区二区三区在线观看| 欧美大尺度电影在线| 久久久影院官网| 亚洲欧美日韩国产成人精品影院| 亚洲精品国久久99热| 午夜a成v人精品| 久久se精品一区二区| 久久er精品视频| 豆国产96在线|亚洲| 高清国产一区二区| 国产福利一区二区三区视频在线| 日本视频中文字幕一区二区三区| 国产精品一线二线三线精华| 成人午夜在线视频| 久久久久综合网| 99久久精品久久久久久清纯| 97se亚洲国产综合自在线观| 欧洲一区二区三区在线| 日韩欧美亚洲国产另类| 国产精品三级av在线播放| 夜夜爽夜夜爽精品视频| 激情综合五月天| 91久久精品网| 久久影音资源网| 亚洲国产精品久久人人爱| 韩国v欧美v亚洲v日本v| 色婷婷av一区| 中文字幕高清不卡| 免费观看久久久4p| 色又黄又爽网站www久久| 欧美一区二区免费| 一区二区三区丝袜| 高清不卡在线观看| 日韩一级欧美一级| 亚洲免费伊人电影| 韩国女主播成人在线观看| 欧美剧情电影在线观看完整版免费励志电影| 精品剧情在线观看| 性欧美疯狂xxxxbbbb| 国产精品一卡二| 欧美一区二区日韩一区二区| 亚洲精品国产精品乱码不99| 青青草精品视频| 成人99免费视频| 精品国产三级电影在线观看| 亚洲精品中文字幕乱码三区| 国产一区二区不卡老阿姨| 欧美精品丝袜久久久中文字幕| 国产精品天干天干在观线| 久久99精品国产| 欧美一卡二卡在线观看| 亚洲女同一区二区| 成人开心网精品视频| 久久亚区不卡日本| 久久er精品视频| 日韩欧美一区二区久久婷婷| 亚洲国产精品久久久男人的天堂 | 国产成人一级电影| 日韩一区二区影院| 另类的小说在线视频另类成人小视频在线| 2欧美一区二区三区在线观看视频 337p粉嫩大胆噜噜噜噜噜91av | 亚洲高清在线精品| 91网站最新地址| √…a在线天堂一区| 成人av动漫网站| 国产精品久久久久三级| 国产不卡免费视频|