继承层次结构

Account作为基类,存储基本信息
Debit为储蓄卡账户
Credit为信用卡账户,结构体privilege将Credit分为common账户和vip账户
ATM管理这两类账户,同时将信息记录在文件

程序主要功能


注意:

  1. 姓名与地址没有使用按行输入,不允许出现空格
  2. 账户、密码以及银行管理员密码等数字,不允许以0开头
    其中账户、密码、银行管理员密码最多10位
    电话号固定11位,身份证号固定18位,且不能出现字母
  3. 个别设计较为繁琐,还有很多地方存在漏洞,只进行了简单的验证

程序存在的问题:

  1. 开始时思路并不是特别清晰,导致程序结构和设计上还存在些问题
  2. 为了代码重用,使用多层次的继承结构,但是在继承类中不可避免使用基类私有成员,这就不可避免使用友元,所以以牺牲了部分程序的封装性,以及模块化为代价,在程序设计时需要仔细斟酌。
/**
*
*@file     ATM.cpp
*@date     2020/5/5
**/#include<iostream>
#include<fstream>
#include<cstdlib>
#include<string>
#include<vector>
#include<iomanip>
#include<iterator>
using namespace std;const char *filename1 = "debitClient.txt";     //储蓄卡客户文件
const char *filename2 = "creditClient.txt";    //信用卡客户文件//个人账户基本信息
class Account
{private:friend class ATM;friend class Debit;friend class Credit;long acctnum, psword;                //账户、密码long long telnum;                    //电话long long idnum;                     //身份证string name, addr;                   //姓名、地址(....输入时不能有空格!)char sex;                            //性别(m-男,f-女)
protected:long retPsword() { return psword; }long retAccount() { return acctnum; }
public:Account(long acct, long ps, string n = "null", string a = "null", long long tel = 0, long long id = 0, char s = 'f') :acctnum(acct), psword(ps), name(n), addr(a), telnum(tel), idnum(id), sex(s) {}~Account();void createAcct();                                                                                  //账户创建void perfectInfo();                                                                                 //基本信息完善void showAccount() const;                                                                           //基本信息显示        bool Match();                                                                                       //判断密码是否匹配,用于账户登录 //用于文件I/O的友元函数friend ostream& operator<<(ostream& fout, const Debit& a);friend istream& operator>>(istream& fin, Debit& a);friend ostream& operator<<(ostream& fout, const Credit& a);friend istream& operator>>(istream& fin, Credit& a);
};//储蓄卡账户
class Debit :public Account
{private:friend class ATM;double balance;               //账户余额
public:Debit(long acct = 0, long ps = 0, double bal = 0, string n = "null", string a = "null", long tel = 0, long long id = 0, char s = 'f') :Account(acct, ps, n, a, tel, id, s), balance(bal) {}void Deposit();                                                                                               //存款void Withdraw();                                                                                              //取款     void queryBalance() const;                                                                                    //余额查询//用于文件I/O的友元函数friend ostream& operator<<(ostream& fout, const Debit& a);friend istream& operator >> (istream& fin, Debit& a);
};//用于限定信用卡等级及特权p1-common,p2-vip
struct privilege {string scale;              //账户等级double toploan;            //账户最大透支额double floorrate;          //账户最小透支利率bool queueRequired;        //是否需要排队
}p1{ "common",1000,0.2,true }, p2{ "vip",5000,0.1,false };//信用卡账户
class Credit :public Account
{private:friend class ATM;double balance;             //账户余额double maxLoan;             //透支额度double rate;                //透支利率double owes;                //现有透支privilege p;                //账户等级
public:Credit(long acct = 0, long ps = 0, privilege = p1, string n = "null", string a = "null", long long tel = 0, long long id = 0, char s = 'f', double bal = 0, double maxL = 500, double ra = 0.3, double owe = 0) :Account(acct, ps, n, a, tel, id, s), balance(bal), maxLoan(maxL), rate(ra), owes(owe), p(p1) {}void Deposit();                                                                     //存款void Withdraw();                                                                    //取款void Repay();                                                                       //偿还透支void queryBalance() const;                                                          //余额查询void showPrivilege() const;                                                         //等级和特权查询void setMAXLoan();                                                                  //设置透支额度void setRate();                                                                     //设置透支利率void upgrade();                                                                     //账户升级//用于文件I/O的友元函数friend ostream& operator<<(ostream& fout, const Credit& a);friend istream& operator >> (istream& fin, Credit& a);
};//ATM
class ATM
{private:static const int key;          //银行管理员密码vector<Credit> Credits;        //信用卡账户管理vector<Debit> Debits;          //储蓄卡账户管理
protected:void debitMenu();               //储蓄卡界面void debitOperate(Debit& d);    //储蓄卡操作集合void creditMenu();              //信用卡界面void creditOperate(Credit& c);  //信用卡操作集合bool bankAuthority();           //银行管理员授权void writeFile();               //文件写入void readFile();                //读取文件
public:~ATM();void createDebit();             //创建储蓄卡账户void createCredit();            //创建信用卡账户void queryCredit();             //储蓄卡信息查询void queryDebit();              //信用卡信息查询void deleteDebit();             //删除储蓄卡账户void deleteCredit();            //删除信用卡账户void collectInfo();             //账户信息汇总void loginAcct();               //账户登录void menu();                    //主界面void ATMfuncation();            //ATM功能void disp();                    //开始界面void exitdisp();                //结束界面
};const int ATM::key = 215000;     //银行管理员密码//*******************************方法实现*******************************//设置浮点数输出格式
void setFormat()
{cout << setiosflags(ios::fixed)<< setprecision(2);
}void Account::createAcct()
{cout << "新建账号:______\b\b\b\b\b\b";cin >> acctnum;cout << "密码:______\b\b\b\b\b\b";cin >> psword;
}void Account::perfectInfo()
{cout << "请完善账户信息:\n";cout << "请输入姓名:_____________\b\b\b\b\b\b\b\b\b";cin >> name;cout << "请输入电话号码:_____________\b\b\b\b\b\b\b\b\b";cin >> telnum;cout << "请输入身份证号:______________\b\b\b\b\b\b\b\b\b\b";cin >> idnum;cout << "请输入家庭住址:______\b\b\b\b\b\b";cin >> addr;cout << "请输入性别(m for man, f for female):___\b\b\b";cin >> sex;
}Account::~Account()
{name.clear();addr.clear();
}bool Account::Match()
{long pass;cout << "请输入密码:_________\b\b\b\b\b\b\b\b\b";cin >> pass;int cx = 4;while ((pass != psword) && cx) {printf("密码错误,您还剩余%d次机会。\n", cx);cout << "请重新输入:_______\b\b\b\b\b\b\b";cin >> pass;cx--;}if (cx == 0 && pass != psword) {cout << "登录失败。\n";return false;}cout << "登录成功。\n";return true;
}void Account::showAccount() const
{cout << "账户:" << acctnum<< "\n姓名:" << name<< "\n性别:" << sex<< "\n电话:" << telnum<< "\n身份证号:" << idnum<< "\n住址:" << addr << endl;
}istream& operator>>(istream& fin, Debit& a)
{fin >> a.acctnum >> a.psword >> a.name >> a.sex >> a.telnum >> a.idnum >> a.addr >> a.balance;return fin;
}ostream& operator<<(ostream& fout, const Debit& a)
{fout << setiosflags(ios::fixed) << setprecision(2);fout << a.acctnum << " "<< a.psword << " "<< a.name << " "<< a.sex << " "<< a.telnum << " "<< a.idnum << " "<< a.addr << " "<< a.balance << endl;return fout;
}void Debit::queryBalance() const
{cout << "账户余额:" << balance << endl;
}void Debit::Withdraw()
{double m;cout << "请输入取款金额:___\b\b\b";cin >> m;if (m < 0) {cout << "取款金额输入错误\n"<< "取款失败。\n";}else {if (m > balance) {cout << "取款金额超过账户所剩余额\n"<< "取款失败。\n";}else {balance -= m;cout << "取款成功。\n"<< "账户余额:" << balance << endl;}}
}void Debit::Deposit()
{double m;cout << "请输入存款金额:___\b\b\b";cin >> m;if (m < 0) {cout << "存款金额输入错误\n"<< "存款取消.\n";}else {cout << "1 for 1~2 month, rate 0.02\n"<< "2 for 3~5 month, rate 0.05\n"<< "3 for 6~12 month, rate 0.08\n"<< "请输入存款选择:_\b";//存款利率选择int ans;double rat;cin >> ans;if (ans < 1 && ans>3) {cout << "错误选择,存款取消!\n";return;}else if (ans == 1) rat = 0.02;else if (ans == 2) rat = 0.05;else if (ans == 3) rat = 0.08;m *= (1 + rat);balance += m;cout << "存款成功.\n"<< "账户余额:" << balance << endl;}
}ostream& operator<<(ostream & fout,const Credit & a)
{fout << setiosflags(ios::fixed) << setprecision(2);fout << a.acctnum << " "<< a.psword << " "<< a.name << " "<< a.sex << " "<< a.telnum << " "<< a.idnum << " "<< a.addr << " "<< a.balance << " "<< a.maxLoan << " "<< a.rate << " "<< a.owes << " "<< a.p.scale << " " << a.p.floorrate << " " << a.p.toploan << " " << a.p.queueRequired << endl;return fout;
}istream& operator>>(istream & fin, Credit& a)
{fin >> a.acctnum >> a.psword >> a.name >> a.sex >> a.telnum >> a.idnum >> a.addr >> a.balance>> a.maxLoan >> a.rate >> a.owes >> a.p.scale >> a.p.floorrate >> a.p.toploan >> a.p.queueRequired;return fin;
}void Credit::upgrade()
{if (p.scale == "vip") {cout << "账户已达最高等级,无法继续升级。\n";return;}p = p2;cout << "升级成功。\n";
}void Credit::queryBalance() const
{cout << "账户余额:" << balance<< "\t透支额度:" << maxLoan<< "\t利率:" << rate<< "\t透支金额:" << owes << endl;
}void Credit::Repay()
{double owe; //偿还金额cout << "透支金额:" << owes << "\t账户余额:" << balance << endl;cout << "请输入偿还金额:__\b\b";cin >> owe;if (owe > owes) {cout << "超过实际透支金额,偿还取消。\n";return;}cout << "是否使用账户余额偿还透支(1 for Yes, 2 for No):__\b\b";int ans;cin >> ans;if (ans != 1 && ans != 2) {cout << "选择错误,偿还取消。\n";return;}//使用账户余额还款else if (ans == 1) {//账户余额足够if (balance >= owe) {balance -= owe;owes -= owe;cout << "偿还成功。\n"<< "账户余额:" << balance<< "\t透支金额:" << owes << endl;}else {//账户余额不足cout << "账户余额不足,是否将剩余部分补齐(1 for Yes, 2 for No):__\b\b";cin >> ans;if (ans == 1) {balance = 0;owes -= owe;cout << "偿还成功。"<< "账户余额:" << balance<< "\t透支金额:" << owes << endl;}else {cout << "偿还失败。\n";}}}//不使用账户余额还款else {cout << "是否将相应数额存入账户(1 for Yes, 2 for No)__\b\b";cin >> ans;if (ans == 1) {cout << "偿还成功。"<< "账户余额:" << balance<< "\t透支金额:" << owes << endl;}else {cout << "偿还失败。\n";}}
}void Credit::Withdraw()
{double m;  //取款金额cout << "请输入取款金额:___\b\b\b";cin >> m;//取款金额小于账户余额if (m <= balance) {balance -= m;cout << "取款成功。\n"<< "账户余额:" << balance << endl;}//取款金额大于账户余额else {cout << "取款金额超过账户剩余,"<< "是否进行透支(1 for Yes, 2 for No):___\b\b\b";int ans;cin >> ans;if (ans == 1) {if (m > (balance + maxLoan - owes)) {cout << "超过透支上限,"<< "取款失败。\n";}else {double interest;   //透支利息m -= balance;interest = m*rate;owes += m + interest;balance = 0;cout << "取款成功。\n"<< "账户余额:" << balance<< "\t透支金额:" << owes << endl;}}elsecout << "取款失败。\n";}
}void Credit::Deposit()
{double m;  //存款金额cout << "请输入存款金额:___\b\b\b";cin >> m;if (m < 0) {cout << "存款金额输入错误\n"<< "存款取消。\n";}else {cout << "1 for 1~2 month, rate 0.02\n"<< "2 for 3~5 month, rate 0.05\n"<< "3 for 6~12 month, rate 0.08\n"<< "请输入存款选择:_\b";//存款利率选择int ans;double rat;cin >> ans;if (ans < 1 && ans>3) {cout << "错误选择,存款取消!\n";return;}else if (ans == 1) rat = 0.02;else if (ans == 2) rat = 0.05;else if (ans == 3) rat = 0.08;m *= (1 + rat);balance += m;cout << "存款成功.\n"<< "账户余额:" << balance << endl;}
}void Credit::showPrivilege() const
{cout << "等级:" << p.scale<< "\n最高透支金额:" << p.toploan<< "\n最低利率:" << p.floorrate<< "\n是否需要排队:";if (p.queueRequired == 0) cout << "false\n";else cout << "true\n";
}void Credit::setMAXLoan()
{double m;cout << "请设置透支金额:__\b\b";cin >> m;//账户等级限定最大额度if (m<0 || m > p.toploan)cout << "超限,设置失败。\n";else {maxLoan = m;cout << "设置成功。\n";}
}void Credit::setRate()
{double r;cout << "利率区间" << p.floorrate << "~0.3\n";cout << "设置利率:__\b\b";cin >> r;if (r > 0 && r < p.floorrate)cout << "设置超出等级限制,设置失败。\n";else if (r > 0.3 && r < 0)cout << "请输入合法数字。\n";else {rate = r;cout << "设置成功。\n";}
}void ATM::readFile()
{ifstream fin1("debitClient.txt");if (!fin1) {cout << "文件未打开!\n";exit(EXIT_FAILURE);}for (Debit d; fin1 >> d;)Debits.push_back(d);ifstream fin2("creditClient.txt");if (!fin2) {cout << "文件未打开!\n";exit(EXIT_FAILURE);}for (Credit d; fin2 >> d;)Credits.push_back(d);fin1.close();fin2.close();
}void ATM::writeFile()
{ofstream fout1;fout1.open("debitClient.txt");if (!fout1) {cout << "文件未打开!\n";exit(EXIT_FAILURE);}ostream_iterator<Debit> itrOut1(fout1);copy(Debits.begin(), Debits.end(), itrOut1);ofstream fout2;fout2.open("creditClient.txt");if (!fout2) {cout << "文件未打开!\n";exit(EXIT_FAILURE);}ostream_iterator<Credit> itrOut2(fout2);copy(Credits.begin(), Credits.end(), itrOut2);fout1.close();fout2.close();
}void ATM::disp()
{readFile();cout << endl << endl << endl << endl << endl;cout << "                                         *******************************" << endl;cout << "                                         *                             *" << endl;cout << "                                         *    欢迎使用ATM存取一体机!   *" << endl;cout << "                                         *                             *" << endl;cout << "                                         *******************************" << endl << endl;cout << "                                                    按Enter键继续!" << endl;getchar();
}void ATM::exitdisp()
{writeFile();system("cls");cout << endl << endl << endl << endl << endl;cout << "                                         *******************************" << endl;cout << "                                         *                             *" << endl;cout << "                                         *    感谢您的使用!            *" << endl;cout << "                                         *                             *" << endl;cout << "                                         *******************************" << endl << endl;
}bool ATM::bankAuthority()
{cout << "请输入银行管理员密码,获得授权:______\b\b\b\b\b\b";int k;cin >> k;int cx = 4;int flag = 1;while (flag&&cx) {if (k == key) {flag = 0;break;}printf("密码错误,您还剩余%d次机会。\n", cx);cout << "请重新输入:_______\b\b\b\b\b\b\b";cin >> k;cx--;}if (flag == 1) {cout << "授权失败,无法操作。\n";return false;}cout << "授权成功,请继续操作。\n";return true;
}void ATM::debitMenu()
{system("cls");cout << endl << endl << endl << endl << "                        请选择操作序号!(0~4)" << endl;cout << "                           **********************************************************" << endl;cout << "                           *                                                        *" << endl;cout << "                           *                    0.返回主界面                        *" << endl;cout << "                           *                    1.存款                              *" << endl;cout << "                           *                    2.取款                              *" << endl;cout << "                           *                    3.显示余额                          *" << endl;cout << "                           *                    4.显示账户信息                      *" << endl;cout << "                           *                                                        *" << endl;cout << "                           **********************************************************" << endl;
}void ATM::debitOperate(Debit& d)
{//进入用户界面debitMenu();int choice;cout << "              请输入您的选择:";cin >> choice;while (choice != 0) {cout << "*  *  *  *  *  *  *  *  *  *  *  *  *  *  *  *\n";switch (choice){case 1:d.Deposit();break;case 2:d.Withdraw();break;case 3:d.queryBalance();break;case 4:d.showAccount();break;default:cout << "输入错误!\n";}cout << "*  *  *  *  *  *  *  *  *  *  *  *  *  *  *  *\n\n";cout << "              请输入您的选择:";cin >> choice;}//返回主界面menu();
}void ATM::creditOperate(Credit& c)
{//进入用户界面creditMenu();int choice;cout << "              请输入您的选择:";cin >> choice;while (choice != 0) {cout << "*  *  *  *  *  *  *  *  *  *  *  *  *  *  *  *\n";switch (choice){case 1:c.Deposit();break;case 2:c.Withdraw();break;case 3:c.queryBalance();break;case 4:c.showAccount();break;case 5:c.Repay();break;case 6:c.showPrivilege();break;case 7:if (bankAuthority())c.setMAXLoan();break;case 8:if (bankAuthority())c.setRate();break;case 9:if (bankAuthority())c.upgrade();break;default:cout << "输入错误!\n";}cout << "*  *  *  *  *  *  *  *  *  *  *  *  *  *  *  *\n\n";cout << "              请输入您的选择:";cin >> choice;}//返回主界面menu();
}void ATM::creditMenu()
{system("cls");cout << endl << endl << endl << endl << "                        请选择操作序号!(0~8)" << endl;cout << "                           **********************************************************" << endl;cout << "                           *                                                        *" << endl;cout << "                           *                    0.返回主界面                        *" << endl;cout << "                           *                    1.存款                              *" << endl;cout << "                           *                    2.取款                              *" << endl;cout << "                           *                    3.显示余额                          *" << endl;cout << "                           *                    4.显示信息                          *" << endl;cout << "                           *                    5.偿还透支                          *" << endl;cout << "                           *                    6.显示信用卡等级                    *" << endl;cout << "                           *                    7.设置透支额度                      *" << endl;cout << "                           *                    8.设置利率                          *" << endl;cout << "                           *                    9.升级                              *" << endl;cout << "                           *                                                        *" << endl;cout << "                           **********************************************************" << endl;
}void ATM::queryDebit()
{cout << "输入查询账号:________\b\b\b\b\b\b\b";long acct;cin >> acct;vector<Debit>::iterator it;for (it = Debits.begin(); it != Debits.end(); it++){if ((*it).retAccount() == acct) break;}if (it == Debits.end()) {cout << "账号不存在。\n";return;}(*it).showAccount();(*it).queryBalance();
}void ATM::queryCredit()
{cout << "输入查询账号:________\b\b\b\b\b\b\b";long acct;cin >> acct;vector<Credit>::iterator it;for (it = Credits.begin(); it != Credits.end(); it++){if ((*it).retAccount() == acct) break;}if (it == Credits.end()) {cout << "账号不存在。\n";return;}(*it).showAccount();(*it).queryBalance();
}void ATM::collectInfo()
{cout << "\n***********************************账户基本信息表\n";cout << "储蓄卡汇总:" << "\t账户个数:" << Debits.size() << "                      *\n";for (auto it = Debits.begin(); it != Debits.end(); it++) {cout << "账户:" << (*it).acctnum<< "\t姓名:" << (*it).name << endl;}cout << endl;cout << "信用卡汇总:" << "\t账户个数:" << Credits.size() << "                      *\n";for (auto it = Credits.begin(); it != Credits.end(); it++) {cout << "账户:" << (*it).acctnum<< "\t姓名:" << (*it).name << endl;}cout << "*************************************************\n\n";
}void ATM::deleteDebit()
{long acct, ps;cout << "请输入账号:______\b\b\b\b\b\b\b";cin >> acct;vector<Debit>::iterator it;for (it = Debits.begin(); it != Debits.end(); it++){if ((*it).retAccount() == acct) break;}if (it == Debits.end()) {cout << "账号不存在。\n";return;}cout << "请输入密码:_______\b\b\b\b\b\b\b";cin >> ps;if (ps != (*it).retPsword()) {cout << "密码错误,删除失败。\n";return;}cout << "是否确认删除:___\b\b\b";char ans;cin >> ans;if (ans == '否') {cout << "取消删除。\n";return;}Debits.erase(it);cout << "删除成功。\n";
}void ATM::deleteCredit()
{long acct, ps;cout << "请输入账号:______\b\b\b\b\b\b\b";cin >> acct;vector<Credit>::iterator it;for (it = Credits.begin(); it != Credits.end(); it++){if ((*it).retAccount() == acct) break;}if (it == Credits.end()) {cout << "账号不存在。\n";return;}cout << "请输入密码:_______\b\b\b\b\b\b\b";cin >> ps;if (ps != (*it).retPsword()) {cout << "密码错误,删除失败。\n";return;}cout << "是否确认删除:___\b\b\b";char ans;cin >> ans;if (ans == '否') {cout << "取消删除。\n";return;}Credits.erase(it);cout << "删除成功。\n";
}void ATM::loginAcct()
{cout << "请输入账号类型(c for Credit, d for Debit):___\b\b\b";char t;cin >> t;cout << "请输入账号:_______\b\b\b\b\b\b\b\b";long acct;cin >> acct;if (t == 'd') {vector<Debit>::iterator it;for (it = Debits.begin(); it != Debits.end(); it++){if ((*it).retAccount() == acct) break;}if (it == Debits.end()) {cout << "您所输入的账号不存在。\n";return;}if ((*it).Account::Match())  debitOperate(*it);}else {vector<Credit>::iterator it;for (it = Credits.begin(); it != Credits.end(); it++){if ((*it).retAccount() == acct) break;}if (it == Credits.end()) {cout << "您所输入的账号不存在。\n";return;}if ((*it).Account::Match())  creditOperate(*it);}
}void ATM::menu()
{system("cls");cout << endl << endl << endl << endl << "                        请选择操作序号!(0~8)" << endl;cout << "                           **********************************************************" << endl;cout << "                           *                                                        *" << endl;cout << "                           *                    0.退出                              *" << endl;cout << "                           *                    1.创建储蓄账户                      *" << endl;cout << "                           *                    2.创建信用账户                      *" << endl;cout << "                           *                    3.删除储蓄账户                      *" << endl;cout << "                           *                    4.删除信用账户                      *" << endl;cout << "                           *                    5.查询储蓄账户                      *" << endl;cout << "                           *                    6.查询信用账户                      *" << endl;cout << "                           *                    7.账户登录                          *" << endl;cout << "                           *                    8.账户信息汇总                      *" << endl;cout << "                           *                                                        *" << endl;cout << "                           **********************************************************" << endl;
}void ATM::ATMfuncation()
{menu();int choice;cout << "              请输入您的选择:";cin >> choice;while (choice != 0) {cout << "*  *  *  *  *  *  *  *  *  *  *  *  *  *  *  *\n";switch (choice){case 1:createDebit();break;case 2:createCredit();break;case 3:deleteDebit();break;case 4:deleteCredit();break;case 5:if (bankAuthority())queryDebit();break;case 6:if (bankAuthority())queryCredit();break;case 7:loginAcct();break;case 8:if (bankAuthority())collectInfo();break;default:cout << "输入错误!\n";}cout << "*  *  *  *  *  *  *  *  *  *  *  *  *  *  *  *\n";cout << "              请输入您的选择:";cin >> choice;}
}void ATM::createDebit()
{if (Debits.size() == Debits.max_size()) {cout << "储蓄卡账户已达上限。";return;}Debit t;t.createAcct();vector<Debit>::iterator it;for (it = Debits.begin(); it != Debits.end(); it++){if ((*it).retAccount() == t.acctnum) {cout << "账户已存在,新建失败。\n";return;}}if (it == Debits.end())cout << "账户创建成功。\n";//基本信息完善t.perfectInfo();Debits.push_back(t);
}void ATM::createCredit()
{if (Credits.size() == Credits.max_size()) {cout << "信用卡账户已达上限。";return;}Credit t;t.createAcct();vector<Credit>::iterator it;for (it = Credits.begin(); it != Credits.end(); it++){if ((*it).retAccount() == t.acctnum) {cout << "账户已存在,新建失败。\n";return;}}if (it == Credits.end())cout << "账户创建成功。\n";cout << "请输入账号等级(1 for common,2 for vip):___\b\b\b";int scale;cin >> scale;if (scale == 1) t.p = p1;else t.p = p2;//基本信息完善t.perfectInfo();Credits.push_back(t);
}ATM::~ATM()
{Credits.clear();vector<Credit>().swap(Credits);Debits.clear();vector<Debit>().swap(Debits);
}
//******************************************************************int main() {setFormat();ATM atm;atm.disp();atm.ATMfuncation();atm.exitdisp();system("pause");
}

C++基于ATM的个人银行账户管理系统相关推荐

  1. 基于Java的银行账户管理系统

    一.项目介绍 基于Java GUI的银行账户信息管理系统,可直接启动演示.包含账户查询.开户.销户.存款.取款.账户统计等功能.适合作为课程设计.大作业.毕业设计项目. 二.技术介绍: Java;Sp ...

  2. 基于jsp+servlet的银行信贷管理系统。

    运行环境,jdk1.8或者jdk1.7.tomcat8或者tomcat8.5.mysql5.7.eclipse.myeclipse开发环境. 1.基于jsp+servlet的银行信贷管理系统,前台界面 ...

  3. 【MyBatis】第五课 银行账户管理系统网站开发

    概念 本文是根据Jsp以及Servlet课程,结合MyBatis框架的综合运用,开发一个小项目网站,使用MVC+三层架构的项目搭建方式来编写本文文章. 1.数据库的创建 本文使用MySQL数据搭建数据 ...

  4. 项目名称:Bank Account Management System 银行账户管理系统 简称BAM

    有兴趣的高手可以发表一下代码   供我们初级者借鉴借鉴 项目名称:Bank Account Management System 银行账户管理系统 简称BAM 项目描述:这是一个银行账户管理系统,用户可 ...

  5. 基于javaweb+jsp的银行信息管理系统(JavaWeb MySQL JSP Bootstrap Servlet SSM SpringBoot)

    基于javaweb+jsp的银行信息管理系统(JavaWeb MySQL JSP Bootstrap Servlet SSM SpringBoot) JavaWeb JavaBean JSP MVC ...

  6. 设计一个银行账户管理系统

    **欢迎使用小辉辉建设银行** 银行账户 注册账号 登录 请选择你要执行的银行业务 银行账户管理系统,使用HashMap函数做出来要比较容易一些,而我没有用到哈哈,这个系统开始搞的时候,还没有学到ha ...

  7. 银行账户管理系统c语言链表,课程设计银行储蓄管理系统Word版

    <课程设计银行储蓄管理系统Word版>由会员分享,可在线阅读,更多相关<课程设计银行储蓄管理系统Word版(22页珍藏版)>请在人人文库网上搜索. 1.传播优秀Word版文档 ...

  8. 个人银行账户管理系统

    #include <bits/stdc++.h> #include <iostream> #include <cstring> #include <cstdl ...

  9. 课程设计-银行账户管理系统

    编程实现:(仔细业务之间的包含关系,并完成以下编程需求,要适当提高代码的可复用性.) 用户:账号(int:系统随机产生8位数字).姓名(str).密码(int:6位数字).地址.存款余额(int).开 ...

  10. 基于JAVA+Servlet+JSP+MYSQL的银行账户管理系统

    开发环境: jdk1.7+eclipse+mysql5.5+tomcat7 涉及技术: 后台:servlet+jsp+jdbc+c3p0连接池+jstl(c标签)+el表达式 前端:jquery+aj ...

最新文章

  1. Response.Redirect、 Server.Transfer、Server.Execute三者区别
  2. Fedora13安装Gnome-shell
  3. Linux之nginx配置文件的分析整理
  4. deepin nginx连接php,利用docker运行nginx加上本机的php-fpm。访问html文件正常,但是访问php文件就报错404...
  5. 伪代码就是计算机语言 正确吗,伪代码实例绍.ppt
  6. 一个简单HTML标签marquee实现动态滚动条
  7. HandlerSocket安装
  8. BP神经网络(BPNN)——参数确定
  9. gcc 版本管理工具 scl
  10. 阿克曼前轮转向车gazebo模型
  11. android 10.0 wifi开关控制
  12. 换发型特效怎么制作?建议收藏这些方法
  13. b是python文件二进制打开,Python核心编程16 ----- 文件的打开(读取),修改,关闭,二进制...
  14. kali linux改root密码
  15. 博士毕业选择回老家县城大专任教!事业编、副教授待遇、外加几十万安家费......
  16. 你必须牢记的*.Config-配置文件
  17. 为什么那么多人去考公务员的分析
  18. ./ 执行命令没有权限
  19. 2020年,你应该知道 23 个非常实用的 NodeJs 库
  20. python的分支结构描述错误的是_关于Python的分支结构,以下选项中描述正确的是()。...

热门文章

  1. 运营面试问题和答案(一)
  2. android 动态毛玻璃,Android毛玻璃背景效果简单实现代码
  3. js实现进度条组件(Progress)
  4. 生僻字用计算机的歌词,生僻字歌词翻译成常用汉字 陈柯宇生僻字歌曲翻译谐音版...
  5. php 调用mp3,使用PHP合并MP3文件的类,兼容php4、php5(2)
  6. python 文件操作OS总结
  7. 集合全套以及知识点整合
  8. 玩世不恭----准备篇
  9. 视频教程-大数据与数据仓库入门到精通-Hadoop
  10. Unity ML-Agents release12 环境搭建