[设计] C++课程设计-ATM (纪念大一)

来源:互联网 发布:重庆博拉网络董事长 编辑:程序博客网 时间:2024/05/17 22:57
#include <iostream>#include <fstream>#include <string>#include <cstring>#include <vector>#include <cstdlib>#include <cstdio>using namespace std;void shaohou() {    for(int i = 0; i < 6; i++) {        printf(".");        for(int j = 0; j < 40000000; j++) {            ;        }    }}class AccountItem {private:string account;      // 账号string passwd;       // 密码string name;         // 姓名    double pay;          // 存款余额public:    AccountItem() : account(""), passwd(""), name(""), pay(0) {}AccountItem(string m_account, string m_passwd, string m_name, const double m_pay) {        account = m_account;        passwd = m_passwd;        name = m_name;        pay = m_pay;}void display() {           // 显示对象        cout << "账号 :\n" << account << endl;        cout << "密码 :\n" << passwd << endl;        cout << "姓名 :\n" << name << endl;        cout << "余额 :\n" << pay << endl;}void write(ofstream& s);   // 修改账目void read(ifstream& s);    // 读入账目数据bool checkAccount(string m_account) {    // 检测信号        if(account == m_account) return true;        return false;    }string getAccount() { return account; }   // 取账号string getPasswd() { return passwd; }     // 取密码string getName() { return name; }         // 取帐号姓名double getPay() { return pay; }           // 得到余额void subPay(double m_pay) { pay -= m_pay; }  // 取款后-修改余额    void addPay(double m_pay) { pay += m_pay; }  // 存款后-修改存款余额    void modifyPasswd(string m_passwd) { passwd = m_passwd; }   // 修改密码    void saveNew();      // 开户用---存入新的数据成员    void addPerson();    // 此函数用于增加新的数据成员bool isNull() {    if(account == "") return true;    return false;    }};void AccountItem::write(ofstream& s) {    s << account << endl;    s << passwd << endl;    s << name << endl;    s << pay << endl;}void AccountItem::read(ifstream& s) {  //从输入流读入数据    s >> account;    s >> passwd;    s >> name;    s >> pay;};void AccountItem::saveNew() {             //--------往里面写用的函数,存入新的成员-----------    ofstream outputStream("Account.in", ios::app);    if (!outputStream) {        cout << "\n对不起!!!打开文件失败!!!!\n" << endl;        cout << "按 Enter 键继续" << endl;        cin.get();        return;    }    outputStream << account << "\n" << passwd << "\n" << name << "\n" << pay <<endl;    outputStream.close();}void AccountItem::addPerson() {    cout << "\n根据下面提示输入新开户人信息\n" << endl;    cout << "账号 :";    cin >> account; fflush(stdin); // stdin是默认的输入流文件,对应输入缓冲区,fflush(stdin)的作用就是清空输入缓冲区,避免缓冲区内残存读取函数无法取走的内容!    cout << "密码 :";    cin >> passwd; fflush(stdin);    cout << "姓名 :";    cin >> name; fflush(stdin);    cout << "开户金额 : ";    cin >> pay; fflush(stdin);    saveNew();    cout << "\n\n\t开户成功,您的账号是 : " << account;cout << "请牢记!" << endl;    cout << "\n\n\t您的可用余额为 : " << pay << endl;    cout << "\n\n新的账户信息已经保存好!!!!!\n" << endl;    cout << "按 Enter 键继续" << endl;    cin.get();   //直观的讲就是显示:”按任意键继续。。。“}///* 以下 Accountbook 为帐号表单类。*//////* 新增加一个新的Accountbook类    *//////* 把修改后的账目存储到文件        *///class Accountbook {private :    vector<AccountItem> v_Account;   // Account 对象数组    size_t accountCount;       // 数组中的对象个数public:Accountbook();       //构造函数size_t loadAccountbook(ifstream& inputStream);     // 读入账目本void storeAccountbook(ofstream& outputStream);     // 为修改账目本写文件AccountItem findItem(string m_account);       // 在账目本中一个一个查询,看参数(No-形参)是否与(类似李雷这种)对象的账号匹配bool updateItem(AccountItem item);     // 按所给对象修改对象内容,但是账号不能改哦! 修改账目中的一个记录};Accountbook::Accountbook() {v_Account = vector<AccountItem> (100);accountCount = 0;}size_t Accountbook::loadAccountbook(ifstream& inputStream) {size_t i = 0;           /// 从文件中读入i个对象while(true) {    v_Account[i].read(inputStream);    ++i;        if(inputStream.fail()) break;}inputStream.close();         // 关闭文件accountCount = i;return accountCount;         // 返回读入对象的个数}void Accountbook::storeAccountbook(ofstream& outputStream) {for(size_t i = 0; i < accountCount; ++i)   // 将对象组通过流输出到文件        v_Account[i].write(outputStream);outputStream.close();}// 按给定账号在账目本中查询AccountItem Accountbook::findItem(string m_account) {for(size_t i = 0; i < accountCount; ++i) {if(v_Account[i].getAccount() == m_account)            return v_Account[i];}return AccountItem();   // 若未查询到,返回一个空对象}//按所给对象修改对象内容,但是账号不能改哦bool Accountbook::updateItem(AccountItem item) {string number = item.getAccount();//按账号在账目本中查询账号与所给对象相同的对象for(size_t i = 0; i < accountCount; i++) {if(v_Account[i].getAccount() == number) {v_Account[i] = item;return true;}}return false;}void g_login() {ifstream inputStream("Account.in");string accNo;Accountbook myAccountbook;   // myAccountbook 为 Accountbook 的一个对象AccountItem myItem;          // myItem 为 AccountItem 的一个对象    myAccountbook.loadAccountbook(inputStream);   // 读入账目本cout << "  请插卡(即输入账号):"; cin >> accNo;myItem = myAccountbook.findItem(accNo);    // 在账目本中查询if(myItem.isNull()) {cout << " ★★  账号不存在!\n\n\n\t☆★\t立宾提醒您重新操作" << endl;return;}//读入密码cout << "  请输入您的个人密码:";    char *pw = new char[20];cin >> pw;//判断密码是否正确if(myItem.getPasswd() != pw) {cout<<"\t您输入的密码错误!\n\n\n\t☆★\t立宾提醒您重新操作"<<endl;return;}double oldPay = myItem.getPay(); //取原存款余额char w = '#';    do {        cout << "请选择交易密码 : " << endl;        cout << "\n\tG (取钱)" << endl;        cout << "\n\tE (存款)" << endl;        cout << "\n\tC (查询余额)" << endl;        cout << "\n\tX (修改密码)" << endl;        cout << "\n\tZ (转账)" << endl;        cout << "\n\tT (退卡)" << endl;        string sel;        cin >> sel; /// 判断用户需要做什么!        if(sel == "C" || sel == "c") { //查询存款余额            cout << "\n\n\t余额是 : " << myItem.getPay() << endl;            shaohou();        }        else if(sel == "X" || sel == "x") { //修改密码            cout<<"\t请输入原密码:";            string pwd;            cin >> pwd;            if(myItem.getPasswd() != pwd) {                cout << "您输入的密码错误!\n\n\n\t☆★\t立宾提醒您重新操作";            }            else {                cout << "\n\n\t请输入新密码:";                cin >> pwd;                string rpwd;                cout << "\n\n\t请再输入一次新密码:";                cin >> rpwd;                if(rpwd != pwd) {                    cout << "\n\n\t你输入的两次密码不相同, 请重新操作!" << endl;                }                else {                    myItem.modifyPasswd(rpwd);                    myAccountbook.updateItem(myItem);                    cout << "\n\n\t密码修改成功,请牢记!" << endl;                }                /// 修改后的密码写到文件中                ofstream outputStream("Account.in");                myAccountbook.storeAccountbook(outputStream);            }        }        else if(sel == "T"|| sel == "t") {//退卡            cout << " \n\n\n        ★-★-☆-☆-★-★-☆-☆-★-★-☆-☆-★-★" << endl;            cout << "\n\n\n\t  感谢你对本银行的支持,欢迎下次光临!"<< endl;            cout << "   \n\n       ★-★-☆-☆-★-★-☆-☆-★-★-☆-☆-★-★" << endl;            cout << "\n\n\t☆★ 请取卡 ......" << endl;            cout << "\n\n    ★-★-☆-☆-★-★-☆-☆-★-★-☆-☆-★-★\n";            exit(0);        }        else if(sel == "E" || sel == "e") { /// 存款            cout << "请选择存款的数量 : " << endl;            cout << "\n\t\t1 (存100)" << endl;            cout << "\n\t\t2 (存200)" << endl;            cout << "\n\t\t5 (存500)" << endl;            cout << "\n\t\tA (存1000)" << endl;            cout << "\n\t\tB (存2000)" << endl;            char count;            double ap;            cin >> count;            if(count == '1') ap = 100;            else if(count == '2') ap = 200;            else if(count == '5') ap = 500;            else if(count == 'A') ap = 1000;            else if(count == 'B') ap = 2000;            else { cout << "\t\t选择错误" << endl; return; }            cout<<"\n\n     ★☆★☆请按您选择的存款数量,塞入人民币☆★☆★ ";            for(size_t i = 0; i < 4; ++i) {                shaohou();                shaohou();            }            /// 修改对象的存款余额            myItem.addPay(ap);            myAccountbook.updateItem(myItem);            ofstream outputStream("Account.in");            myAccountbook.storeAccountbook(outputStream);            cout << "\n\n\n    ★☆★☆存款成功。您存入了" << ap << "元. ☆★☆★ ";            for(size_t i = 0; i < 5; ++i) {                shaohou();            }        }        else if(sel == "Z" || sel == "z") { // 转账            cout << "\t请输入要转到账户的账号:";            string otherAccount;            cin >> otherAccount;            AccountItem otherItem = myAccountbook.findItem(otherAccount);            if(otherItem.isNull()) {                cout << " ★★  账号不存在!\n\n\n\t☆★\t立宾提醒您重新操作" << endl;                return;            }            else {                cout << "\t请输入转账金额 : ";                double zhuane;                cin >> zhuane;                oldPay = myItem.getPay();                if(oldPay < zhuane) {                    cout << "\n\t存款余额不够!\n\n\n\t☆★\t立宾提醒您" << endl;                }                else { // 修改对象的存款余额                    myItem.subPay(zhuane);                    myAccountbook.updateItem(myItem); //将修改后的账目本写到文件中                    ofstream outputStream1("Account.in");                    myAccountbook.storeAccountbook(outputStream1);                    outputStream1.close();                    otherItem.addPay(zhuane);         /// 修改账目本                    myAccountbook.updateItem(otherItem); /// 将修改后的账目本写到文件中                    ofstream outputStream2("Account.in");                    myAccountbook.storeAccountbook(outputStream2);                    cout << "转账成功!\n\n\n\t☆★\t立宾提醒您" << endl;                    outputStream2.close();                    shaohou();                    shaohou();                    shaohou();                }            }        }        else if(sel == "G" || sel == "g") {// 取款            cout << "\t请选择取钱的数量:" << endl;            cout << "\n\t\t1 (取100)" << endl;            cout << "\n\t\t2 (取200)" << endl;            cout << "\n\t\t5 (取500)" << endl;            cout << "\n\t\tA (取1000)" << endl;            cout << "\n\t\tB (取2000)" << endl;            char count;            double ap;            cin >> count;            if(count == '1') ap = 100.;            else if(count == '2') ap = 200.;            else if(count == '5') ap = 500.;            else if(count == 'A') ap = 1000.;            else if(count == 'B') ap = 2000.;            else {                cout << "选择错误" << endl; return;            }            //判断存款余额是否够            if(oldPay < ap) {                cout << "\n\t存款余额不够!" << endl;            }            else { //修改对象的存款余额                myItem.subPay(ap);                //修改账目本                myAccountbook.updateItem(myItem);                cout << "\t请取钱!" << endl;                //将修改后的账目本写到文件中                ofstream outputStream("Account.in");                myAccountbook.storeAccountbook(outputStream);            }        }        shaohou();        shaohou();        cout << "\n\t你想继续进行其他操作吗?(y/n)" << endl;        cin >> w;    } while (w == 'y');}int main() {    AccountItem tempAccount;    while(true) {        char xz;        cout << "\n\n\t欢迎使用立宾国际ATM系统\n";        cout << "\n\n\t请选择您要执行的操作:\n";        cout << "\n\n\tA.开户服务\n";        cout << "\n\n\tB.登录服务\n";        cout << "\n\n\tC.退出。\n";        cout << "\n\n\t请选择:";        scanf("%c", &xz);        switch(xz) {            case 'a' :            case 'A' : {                cout << "\n\n\t【开户服务】"; ///                tempAccount.addPerson();   /// 添加新人                break;            }            case 'b' :            case 'B' : {                g_login();                break;            }            case 'c' :            case 'C' : {                cout << "   \n\n\n     ★-★-☆-☆-★-★-☆-☆-★-★-☆-☆-★-★" << endl;                cout << "\n\t★★☆ 感谢您对本本银行的支持,欢迎下次光临! ☆★★\n";                exit(0);            }            default : {                cout << "\n\t您的选择错误!\n\n\n\t☆★\t立宾提醒您重新选择!" << endl;            }        }        cout << "\n\n\t请选择您要执行的操作:\n";    }    return 0;}

--------- Account.in ----------

001lilei李雷1000002hanmei韩梅梅1000003wangwenhao王文豪3900004maoxu王冒旭4000005hongwu于洪武2000006xiaofei王小飞900007zhangli张丽丽1000

// ---------------其他美观--------------

void AccountItem::welcome() {    for(int i = 0; i < 2; i++) {             //可以改变i的值,以美观        cout << "\n\n\n\n\n\n\n\n";        cout << "\t\t\t ●☆★◇◆○●☆★◇◆○●☆★◇◆○\n";        cout << "\t\t\t◎        欢迎使用立宾国际ATM系统     ●\n";        cout << "\t\t\t ●☆★◇◆○●☆★◇◆○●☆★◇◆○\n";        cout << "\n\n\t\t      ★希望立宾国际ATM系统可以时刻给您带来方便!★";        cout << "\n\n\n\n\t\t\t\t  陈立宾将竭诚为您提供优质的服务";        shaohou();        system("cls");        cout << "\n\n\n\n\n\n\n\n";        cout << "\t\t\t ○★☆◆◇●○★☆◆◇●○★☆◆◇●\n";        cout << "\t\t\t●       欢迎使用立宾国际ATM系统      ◎\n";        cout << "\t\t\t ○★☆◆◇●○★☆◆◇●○★☆◆◇● \n";        cout << "\n\n\t\t      ☆希望立宾国际ATM系统可以时刻给您带来方便!☆";        cout << "\n\n\n\n\t\t\t\t 陈立宾将竭诚为您提供优质的服务";        shaohou();        system("cls");    }};
原创粉丝点击