📄 main.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 + -