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

📄 main.cpp

📁 这是一个银行系统的管理软件
💻 CPP
字号:
/**********************************************************************************
*                                                                                 *
*  Henry Banking System ATM Module                                                *
*  Copyright (c) 2004 by Henry. All rights reserved.                              *
*                                                                                 *
*  Permission to use, copy, modify, and distribute this software for any purpose  *
*  is hereby granted without fee, provided that this copyright and permissions    *
*  notice appear in all copies and derivatives, and that no charge may be made    *
*  for the software and its documentation except to cover cost of distribution.   *
*                                                                                 *
*  This software is provided "as is" without express or implied warranty.         *
*                                                                                 *
**********************************************************************************/

/*
*  Description:
*
*    This is the startup module of Henry Banking System ATM Module.
*
*  Notes:
*
*    This code has been written to conform to standard C++ and STL. It has been
*    compiled successfully using Visual C++ 7.0.
*/

#include <iostream>
#include <string>
#include "cui.h"
#include "banking.h"
#include "common.h"
#include "delimited_file.h"

using namespace std;
using namespace cui;
using namespace banking;
using namespace dragon;

//Variables
Menu lanMenu, topMenu, AtmMenu, manageMenu;
Account account;
Dealing dealing;
string inputCardNo, inputPassword;

//Methods & Functions
void initialize();
void generateMenus();
bool do_InsertCard();
bool do_Login();
bool do_CreateAccount();
bool do_Deposit();
bool do_Draw();
bool do_SurplusCheck();
bool do_ChangePassword();

//Events
void lanMenu_onSelect(size_t);
void topMenu_onSelect(size_t);
void AtmMenu_onSelect(size_t);
void manageMenu_onSelect(size_t);

size_t Menu::language;

size_t main()
{
	initialize();
	Menu::showWelcome();
	lanMenu.show();
}

void initialize()
{
	inputCardNo = "";
	inputPassword = "";
	generateMenus();
}


void generateMenus()
{
	//Language Menu
	lanMenu.clear();
	lanMenu.add("Please select your native language (请选择用户语言)", "");
	lanMenu.add("English", "");
	lanMenu.add("中文", "");
	lanMenu.add("Exit (退出系统)", "");
	lanMenu.onSelect = lanMenu_onSelect;

	//Top Menu
	topMenu.clear();
	topMenu.add("Please select your mode", "请选择您的模式");
	topMenu.add("ATM Mode", "ATM柜员机");
	topMenu.add("Manage Mode", "银行业务管理");
	topMenu.onSelect = topMenu_onSelect;

	//Manage Menu
	manageMenu.clear();
	manageMenu.add("Please select the folowing functions", "请选择业务功能");
	manageMenu.add("Open a New Account", "银行卡开户业务");
	manageMenu.add("Return", "返回");
	manageMenu.onSelect = manageMenu_onSelect;

	//ATM Menu
	AtmMenu.clear();
	AtmMenu.add("Please select the folowing functions", "请选择业务功能");
	AtmMenu.add("Deposit Transaction of RMB", "人民币存款业务");
	AtmMenu.add("Drawing Transaction of RMB", "人民币取款业务");
	AtmMenu.add("Surplus Check", "余额查询");
	AtmMenu.add("Change Password", "修改密码");
	AtmMenu.add("Return", "返回");
	AtmMenu.onSelect = AtmMenu_onSelect;
}

//Events

void lanMenu_onSelect(size_t index)
{
	switch(index)
	{
	case 1:
		Menu::language = 0;
		break;
	case 2:
		Menu::language = 1;
		break;
	case 3:		exit(0);
	}
	topMenu.show();
}

void topMenu_onSelect(size_t index)
{
	switch(index)
	{
	case 1:
		if(!do_InsertCard())
		{
			topMenu.show();
			return;
		}
		AtmMenu.show();
		break;
	case 2:
		manageMenu.show();
		break;
	}
}

void AtmMenu_onSelect(size_t index)
{
	switch(index)
	{
	case 1:
		do_Deposit();
		break;
	case 2:
		do_Draw();
		break;
	case 3:
		do_SurplusCheck();
		break;
	case 4:
		do_ChangePassword();
		break;
	case 5:
		inputCardNo = "";
		inputPassword = "";
		topMenu.show();
		return;
	}
	AtmMenu.show();
}

void manageMenu_onSelect(size_t index)
{
	switch(index)
	{
	case 1:
		do_CreateAccount();
		break;
	case 2:
		topMenu.show();
		return;
	}
	topMenu.show();
}



/************************************/
/*       To Do : Behaviors          */
/************************************/

bool do_InsertCard()
{
	if(inputCardNo != "") return true;
INPUT_CARD_NO:
	string cardNo = Input<string>::show("Please insert your card (0 = cancel): ", "请插入银行卡(0 = 取消):");
	if(account.searchByCardNo(cardNo))
	{
		inputCardNo = cardNo;
	}
	else if(cardNo == "0")
	{
		return false;
	}
	else
	{
		Alert::show("Sorry, your card was not accepted!", "对不起,本ATM机不接受您的银行卡!");
		goto INPUT_CARD_NO;
	}
	return true;
}

bool do_Login()
{
	if(inputPassword != "") return true;
INPUT_PASSWORD:
	string password = Input<string>::show("Please input your password (0 = cancel): ", "请输入密码(0 = 取消):");
	if(account.login(inputCardNo, password))
	{
		inputPassword = password;
	}
	else if(password == "0")
	{
		return false;
	}
	else
	{
		Alert::show("Sorry, password was not right!", "对不起,密码不正确!");
		goto INPUT_PASSWORD;
	}
	return true;
}

bool do_CreateAccount()
{
	string name, password;

	name = Input<string>::show("Please input your name: ", "请输入您的姓名:");
	while(!Input<string>::validateString(password, 6, 6))
	{
		password = Input<string>::show("Please input your password (must be 6 charactors): ", "请输入您的密码(必须6位):");
	}
	account.createAccount(name, password);
	dealing.appendDealing(account.getCardNo(), 0, "1");
	dealing.printBill();
	return true;
}

bool do_Deposit()
{
	double amount = Input<double>::show("Please insert your cash: ", "请将现金送入指定入口:");
	account.setAmount(account.getAmount() + amount);
	account.update();
	string strAmount = double2string(amount);
	Alert::show("Your have deposited " + strAmount, "您已存入" + strAmount);
	dealing.appendDealing(account.getCardNo(), amount, "3");
	dealing.printBill();
	return true;
}

bool do_Draw()
{
	if(!do_Login()) return false;
INPUT_AMOUNT:
	size_t amount = Input<size_t>::show("Please input the amount fo draw: ", "请输入取款金额:");
	if(amount % 50 != 0)
	{
		Alert::show("Please input an amount that times 50 or 100!", "本取款机只接受50或100倍数的取款额!");
		goto INPUT_AMOUNT;
	}
	if(amount > account.getAmount())
	{	
		Alert::show("Overdraw!", "取款额已超出!");
		goto INPUT_AMOUNT;
	}
	account.setAmount(account.getAmount() - amount);
	account.update();
	Alert::show("Please receive your cash.", "请取出现钞.");
	dealing.appendDealing(account.getCardNo(), amount, "2");
	dealing.printBill();
	return true;
}

bool do_SurplusCheck()
{
	if(!do_Login()) return false;
	string strAmount = double2string(account.getAmount());
	Alert::show("Your current surplus: " + strAmount, "您的银行卡上当前余额为:" + strAmount);
	return true;
}

bool do_ChangePassword()
{
	if(!do_Login()) return false;
	string password;
	while(!Input<string>::validateString(password, 6, 6) && password != "0")
	{
		password = Input<string>::show("Please input your new password (must be 6 charactors, 0 = cancel)", "请输入新的密码(必须6位, 0 = 取消):");
	}
	if(password == "0")
		return false;
	account.setPassword(password);
	account.update();
	inputPassword = password;
	Alert::show("Your password has been changed to " + password, "你的密码已经更改为" + password);
	dealing.appendDealing(account.getCardNo(), 0, "4");
	return true;
}

⌨️ 快捷键说明

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