采用C++面向对象的程序设计方法开发基于ATM的个人银行账户管理系统,根据大家的日常经验进行设计

本文介绍了一个基于C++实现的ATM模拟系统的设计与实现。系统包括账户管理、存款、取款、余额查询等功能,并支持储蓄卡和信用卡两种账户类型。文章详细展示了类的设计、账户操作流程及文件存储机制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

#include <bits/stdc++.h>
#include <iostream>
#include <cstring>
#include <cstdlib>
#include <sstream>
#include <fstream>
#include<ctime>
#include <conio.h>
#define account0  7116620100000254000    //第一个开户的卡号
#define random(a,b) (rand()%(b-a+1)+a)
using namespace std;
int number=0;
class ATM;
class depositcard;
class creditcard;
class account
{
public:
    account()
    {
        id="0",name="0",sex="0",address="0",tele="0",shenfen="0",password="0",money=0;   //默认构造函数
    }
    account(string i,string n,string se,string a,string t,string s,string p,double m)        //带参数构造函数
    {
        id=i,name=n,sex=se,address=a,tele=t,shenfen=s,password=p,money=m;
    }
    string getid()
    {
        return id;
    }
    void display();      //用户信息界面
    void querymoney();      //余额查询
protected:
    string id,name,address,tele,shenfen,password,sex;
    double money;
};
class ATM
{
public:
    void setdeposit();      //储存卡开户
    void setcredit();      //信用卡开户
    void enterdeposit();   //储存卡登录
    void entercredit();   //信用卡登录
    void delaccount();      //销户
    void exitatm();           //退出
    void dsave();           //储蓄卡类导入磁盘文件
    void csave();           //信用卡类导入磁盘文件
    void dread();      //储蓄卡信息从磁盘文件导出
    void cread();    //信用卡信息从磁盘文件导出
    string inputpassword();        //设置账户的密码
    bool checkshen(string str);    //检查身份证是否合格
    void menu();           //功能菜单
protected:
    depositcard  *deposit[50];    //定义多个储存卡对象
    creditcard *credit[50];     //定义多个信用卡对象
    static int depositcount,creditcount;
};
class depositcard:public account ,public ATM             //账户派生类:储蓄卡
{
public:
    friend class ATM;
    depositcard(string i,string n,string se,string a,string t,string s,string p,double m):account(i,n,se,a,t,s,p,m) {}
    void save();          //存钱功能
    void fetch();        //取钱功能
    void lixi();       //利息计算
    string getp()
    {
        return password;
    }
};
class creditcard:public account  ,public ATM            //账户派生类:信用卡
{
public:
    friend class ATM;
    creditcard(string i,string n,string se,string a,string t,string s,string p,double m,double tou,double tm):
        account(i,n,se,a,t,s,p,m),touzhi(tou),tmax(tm) {}
    void save();          //存钱功能
    void fetch();        //取钱功能
    void lixi();       //利息计算
    void toumoney();    //每月要透支的钱
    void show();
    string getp()
    {
        return password;
    }
    string getid()
    {
        return id;
    }
    double gettouzhi();
    double gettmax();
    void add(double x);
private:
    double touzhi;   //透支额度
    double tmax;
};
void creditcard::show()
{
    cout<<"透支余额:"<<touzhi<<endl;
    cout<<"请按任意键继续!"<<endl;
}
int ATM::depositcount=0;
int ATM::creditcount=0;
void ATM::dsave()            //储蓄卡类导入磁盘文件
{
    ofstream infile("deposit.txt",ios::out);//以输出方式打开文件
    ofstream outfile("deposit.txt",ios::out);//以输出方式打开文件,接收从内存输出的数据
    int n=0;
    outfile<<depositcount<<"  ";
    for(n=0; n<depositcount; n++)
    {
        outfile<<deposit[n]->id<<"  ";//把信息写入磁盘文件bankdat.dat
        outfile<<deposit[n]->money<<"  ";
        outfile<<deposit[n]->name<<"  ";
        outfile<<deposit[n]->password<<"  ";
        outfile<<deposit[n]->shenfen<<"  ";
        outfile<<deposit[n]->tele<<"  ";
        outfile<<deposit[n]->address<<"  ";
        outfile<<deposit[n]->sex<<"  ";
    }

    outfile.close();
}
void ATM::dread()
{
    int n;
    string id,sex;
    string nam,passw,tele;
    double money;
    string shenfen;
    string address;

    ifstream infile("deposit.txt",ios::in);       //以输入方式打开文件
    infile>>depositcount;
    if(!infile)
    {
        cerr<<"Error reading, no data!"<<endl;
        return;
    }

    for(n=0; n<depositcount; n++) //全部读入
    {
        infile>>id;
        infile>>money;
        infile>>nam;
        infile>>passw;
        infile>>shenfen;
        infile>>tele;
        infile>>address;
        infile>>sex;
        depositcard * acc = new depositcard(id,nam,sex,address,tele,shenfen,passw,money); //每读入一个n开辟一段内存
        deposit[n] = acc; //赋值首地址
    }
    infile.close();
    cout<<"Normal reading !"<<endl;
}
void ATM::csave()              //信用卡类导入磁盘文件
{
    ofstream infile("credit.txt",ios::out);//以输出方式打开文件
    ofstream outfile("credit.txt",ios::out);//以输出方式打开文件 bankdat.dat接收从内存输出的数据
    int n=0;
    outfile<<creditcount<<"  ";
    for(n=0; n<creditcount; n++)
    {
        outfile<<credit[n]->id<<"  ";//把信息写入磁盘文件bankdat.dat
        outfile<<credit[n]->money<<"  ";
        outfile<<credit[n]->name<<"  ";
        outfile<<credit[n]->password<<"  ";
        outfile<<credit[n]->shenfen<<"  ";
        outfile<<credit[n]->tele<<"  ";
        outfile<<credit[n]->address<<"  ";
        outfile<<credit[n]->sex<<"  ";
        outfile<<credit[n]->touzhi<<"  ";
        outfile<<credit[n]->tmax<<"  ";
    }
    outfile.close();
}
void ATM::cread()
{
    int n;
    string id,sex;
    string nam,passw,tele;
    double money,touzhi,tmax;
    string shenfen;
    string address;

    ifstream infile("deposit.txt",ios::in);       //以输入方式打开文件
    infile>>depositcount;
    if(!infile)
    {
        cerr<<"Error reading, no data!"<<endl;
        return;
    }

    for(n=0; n<depositcount; n++) //全部读入
    {
        infile>>id;
        infile>>money;
        infile>>nam;
        infile>>passw;
        infile>>shenfen;
        infile>>tele;
        infile>>address;
        infile>>sex;
        infile>>touzhi;
        infile>>tmax;
        creditcard * acc = new creditcard(id,nam,sex,address,tele,shenfen,passw,money,touzhi,tmax); //每读入一个n开辟一段内存
        credit[n] = acc; //赋值首地址
    }
    infile.close();
    cout<<"Normal reading !"<<endl;
}
string ATM::inputpassword()
{
    string s;
    char ch;
    while((ch=getch())!='\r')
    {
        s+=ch;
        cout<<"*";
    }
    return s;
}
void account::display()     //用户信息界面
{
    cin.get();
    system("cls");
    cout<<"**************************************************************"<<endl;
    cout<<"*                                                            "<<endl;
    cout<<"*                    姓名:"<<name<<"                        "<<endl;
    cout<<"*                    性别:"<<sex<<"                        "<<endl;
    cout<<"*                    地址:"<<address<<"                        "<<endl;
    cout<<"*                    手机:"<<tele<<"                        "<<endl;
    cout<<"*                    卡号:"<<id<<"                          "<<endl;
    cout<<"*                    余额: "<<money<<"                       "<<endl;
    cout<<"*                    按输入键回到上一菜单                    "<<endl;
    cout<<"*                                                            "<<endl;
    cout<<"**************************************************************"<<endl;
}
bool ATM::checkshen(string str)
{
    int len = str.length();
    if (len != 18)
    {
        return false;
    }
    else
    {
        int i;
        for (i = 0; i < 18; i++)
        {
            if (str[i] < '0' || str[i] > '9')
            {
                if (i == 17 && str[i] != 'x' && str[i] != 'X')
                {
                    return false;
                }
                else if (i != 17)
                {
                    return false;
                }
                else
                    return false;
            }
        }
    }
    return true;
}
void ATM::exitatm()
{
    cout<<"感谢您使用ATM存取一体机,欢迎再来!"<<endl;
    exit(0);
}
void ATM::menu()        //功能菜单函数
{

    int u;
    cout << endl << endl << endl << endl << endl;
    cout << "                                         *******************************" << endl;
    cout << "                                         *                             *" << endl;
    cout << "                                         *    欢迎使用ATM存取一体机!   *" << endl;
    cout << "                                         *                             *" << endl;
    cout << "                                         *******************************" << endl << endl;
    cout << "                                                    按任意键继续!" << endl;
    getch();
    do
    {
        system("cls");
        cout<<endl<<endl<<endl<<endl<<"                        请选择操作序号!(1~6)"<<endl;
        cout<<"                           **********************************************************"<<endl;
        cout<<"                           *                                                        *"<<endl;
        cout<<"                           *                    1.储蓄卡账户创建                    *"<<endl;
        cout<<"                           *                    2.储蓄卡账户登录                    *"<<endl;
        cout<<"                           *                    3.信用卡账户创建                    *"<<endl;
        cout<<"                           *                    4.信用卡账户登录                    *"<<endl;
        cout<<"                           *                    5.账户注销                          *"<<endl;
        cout<<"                           *                    6.退出                              *"<<endl;
        cout<<"                           *                                                        *"<<endl;
        cout<<"                           **********************************************************"<<endl;
        cin>>u;
        while(u<1||u>7)
        {
            cout<<"请合法输入!"<<endl;
            cin>>u;
        }
        system("cls");
        switch(u)
        {
        case 1:
            setdeposit();
            //创建储蓄卡账户
            break;
        case 2:
            enterdeposit();
            break;       //储蓄卡登录
        case 3:
            setcredit();
            break;       //创建信用卡账户
        case 4:
            entercredit();
            break;       //信用卡登录
        case 5:
            delaccount();
            break;        //账户注销*/
        case 6:
            exitatm();
            break;           //退出
        }
    }
    while(1);
    system("cls");
}
void ATM::setdeposit()     //创建账户
{
    srand((unsigned)time(NULL));
    string i,n,a,t,s,se,p;
    double m;
    int find=1;
    cin.get();
    cout<<"请输入姓名:"<<endl;
    getline(cin,n);
    cout<<"请输入性别:(男或女)"<<endl;
    cin>>se;
    cin.get();
    cout<<"请输入地址:"<<endl;
    getline(cin,a);
    cout<<"请输入手机号:(11位)"<<endl;
    cin>>t;
    while(1)
    {
        cout<<"请输入身份证号:"<<endl;
        cin>>s;
        if(!checkshen(s))
        {
            cout<<"不合法输入!"<<endl;
            continue;
        }
        else
            break;
    }
    while(1)
    {
        int x=2;
        cout<<"请输入6位纯数字密码:"<<endl;
        p=inputpassword();
        cout<<endl;
        string p1;
        cout<<"请在输入您设置的密码!"<<endl;
        p1=inputpassword();
        cout<<endl;
        while(p!=p1&&x!=0)
        {
            cout<<"输入错误,请重新输入!("<<x<<"次机会)"<<endl;
            p1=inputpassword();
            x--;
            cout<<endl;
        }
        if(p1==p)
            break;
        if(x==0)
        {
            find=0;
            break;
        }
    }
    if(find==0)
        return ;
    cout<<"请输入存入金额:"<<endl;
    cin>>m;
    while(m<=0)
    {
        cout<<"请合法输入金额:"<<endl;
        cin>>m;
    }
    cin.get();
    unsigned long long acc = account0 + random(1,100)+number;
    number++;
    cout<<"开户成功!"<<endl<<endl;
    cout << "您的银行卡号为:" << acc << "   请牢记! 卡号将用于您的账户登陆!" << endl;
    stringstream str;
    str << acc;
    str >> i;
    deposit[depositcount]=new depositcard(i,n,se,a,t,s,p,m);                     //把新建账户对象地址传过去
    ++depositcount;
    dsave();
    cout<<"请按任意键继续!"<<endl;
    cin.get();
    return;
}
void ATM::setcredit()     //创建信用卡账户
{
    srand((unsigned)time(NULL));
    string i,n,a,t,s,se,p;
    double m;
    double tou,tmax;
    int find=1;
    cin.get();
    cout<<"请输入姓名:"<<endl;
    getline(cin,n);
    cout<<"请输入性别:(男或女)"<<endl;
    cin>>se;
    cin.get();
    cout<<"请输入地址:"<<endl;
    getline(cin,a);
    cout<<"请输入手机号:(11位)"<<endl;
    cin>>t;
    while(1)
    {
        cout<<"请输入身份证号:"<<endl;
        cin>>s;
        if(!checkshen(s))
        {
            cout<<"不合法输入!"<<endl;
            continue;
        }
        else
            break;
    }
    while(1)
    {
        int x=2;
        cout<<"请输入6位纯数字密码:"<<endl;
        p=inputpassword();
        cout<<endl;
        string p1;
        cout<<"请在输入您设置的密码!"<<endl;
        p1=inputpassword();
        cout<<endl;
        while(p!=p1)
        {
            cout<<"输入错误,请重新输入!("<<x<<"次机会)"<<endl;
            p1=inputpassword();
            x--;
            cout<<endl;
        }
        if(p1==p)
            break;
        if(x==0)
        {
            find=0;
            break;
        }
    }
    if(find==0)
        return ;
    cout<<"请输入存入金额:"<<endl;
    cin>>m;
    while(m<=0)
    {
        cout<<"请合法输入金额:"<<endl;
        cin>>m;
    }
    cout<<"请输入透支金额!(大于2000,小于10000)"<<endl;
    cin>>tou;
    while(tou<=2000||tou>10000)
    {
        cout<<"请合法输入!"<<endl;
        cin>>tou;
    }
    tmax=tou;
    cin.get();
    unsigned long long acc = account0 + random(1,100)+number;
    number++;
    cout<<"开户成功!"<<endl<<endl;
    cout << "您的银行卡号为:" << acc << "   请牢记! 卡号将用于您的账户登陆!" << endl;
    stringstream str;
    str << acc;
    str >> i;
    creditcard * pt=new creditcard(i,n,se,a,t,s,p,m,tou,tmax);   //动态建立一个账户对象
    credit[creditcount]=pt;                      //把新建账户对象地址传过去
    creditcount++;
    csave();
    cout<<"请按任意键继续!"<<endl;
    cin.get();
}
void ATM::enterdeposit()   //储蓄卡登录
{
    dread();
    string id,p;
    int f1=1;
    int flag=1,j,i=0;int x=2,y=2;
    cout<<"请输入卡号:"<<endl;
    cin>>id;
    while(flag&&x!=0)
    {
        for(int i=0; i<depositcount; i++)
        {

            if(id==deposit[i]->getid())
            {
                flag=0;
                j=i;
                break;
            }
        }
        if(flag==1)
        {
            cout<<"账号不存在,请重新输入!("<<x<<"次机会)"<<endl;
            cin>>id;
            x--;
        }
        if(x==0)
            cout<<"返回上一界面!"<<endl;
    }
    if(x==0)
    {
        return;
    }
    while(1)
    {
        cout<<"请输入密码:"<<endl;
        p=inputpassword();
        if(p!=deposit[j]->getp())
        {
            cout<<endl<<"密码错误,请重新输入!("<<y<<"次机会)"<<endl;
            p=inputpassword();
            y--;
        }
        else
            break;
        if(y==0)
        {
            f1=0;
            cout<<"返回上一界面!"<<endl;
            break;
        }
    }
    if(f1==0)
        return;
    int n;
    do
    {
        system("cls");
        cout<<"请选择操作序号!"<<endl;
        cout<<"**********************************************************"<<endl;
        cout<<"*                                                        *"<<endl;
        cout<<"*                    1.用户信息                          *"<<endl;
        cout<<"*                    2.存款                              *"<<endl;
        cout<<"*                    3.取款                              *"<<endl;
        cout<<"*                    4.余额查询                          *"<<endl;
        cout<<"*                    5.利息计算                          *"<<endl;
        cout<<"*                    6.返回上一界面                      *"<<endl;
        cout<<"*                                                        *"<<endl;
        cout<<"**********************************************************"<<endl;
        cin>>n;
        while(n<1||n>6)
        {
            cout<<"请合法输入!"<<endl;
            cin>>n;
        }
        switch(n)
        {
        case 1:
            deposit[j]->display();    //用户信息界面
            break;
        case 2:
            deposit[j]->save();
            dsave();
            break;    //储蓄卡存钱
        case 3:
            deposit[j]->fetch();
            dsave();
            break;    //储蓄卡取钱
        case 4:
            deposit[j]->querymoney();
            dsave();
            break;   //储蓄卡余额查询
        case 5:
            deposit[j]->lixi();     //利息计算
            dsave();
            break;
        case 6:
            return ;
        }
        cin.get();
    }
    while(1);
}
void ATM::entercredit()   //信用卡登录
{
    cread();
    string id,p;
    int f1=1;
    int flag=1,j,i=0;int x=2,y=2;
    cout<<"请输入卡号:"<<endl;
    cin>>id;
    while(flag)
    {
        for(int i=0; i<creditcount; i++)
        {

            if(id==credit[i]->getid())
            {
                flag=0;
                j=i;
                break;
            }
        }
        if(flag==1)
        {
            cout<<"账号不存在,请重新输入!"<<endl;
            cin>>id;
        }
    }
    while(1)
    {
        cout<<"请输入密码:"<<endl;
        p=inputpassword();
        if(p!=credit[j]->getp())
        {
            cout<<endl<<"密码错误,请重新输入!("<<y-2<<"次机会!"<<endl;
            p=inputpassword();
            y--;
        }
        else
            break;
        if(y==0)
        {
            f1=0;
            break;
        }
    }
    if(f1==0)
        return ;
    int n;
    do
    {
        system("cls");
        cout<<"请选择操作序号!"<<endl;
        cout<<"**********************************************************"<<endl;
        cout<<"*                                                        *"<<endl;
        cout<<"*                    1.用户信息                          *"<<endl;
        cout<<"*                    2.存款或还款                        *"<<endl;
        cout<<"*                    3.取款                              *"<<endl;
        cout<<"*                    4.余额查询                          *"<<endl;
        cout<<"*                    5.返回上一界面                      *"<<endl;
        cout<<"*                                                        *"<<endl;
        cout<<"**********************************************************"<<endl;
        cin>>n;
        while(n<1||n>6)
        {
            cout<<"请合法输入!"<<endl;
            cin>>n;
        }
        switch(n)
        {
        case 1:
            credit[j]->display();    //用户信息界面
            credit[j]->show();
            break;
        case 2:
            credit[j]->save();
            csave();
            break;    //信用卡存钱
        case 3:
            credit[j]->fetch();
            csave();
            break;    //信用卡取钱
        case 4:
            credit[j]->querymoney();
            credit[j]->show();
            csave();
            break;   //信用卡余额查询
        case 5:
            return ;
        }
        cin.get();
    }
    while(1);
}
void creditcard::save()    //信用卡存钱或还钱
{
    double a;
    int find=1;
    if(touzhi<tmax)
    {
        find=0;
        cout<<"输入存放金钱,但请先还款透支金额!"<<endl;
        cin>>a;
        while(a<0)
        {
            cout<<"请合法输入!"<<endl;
            cin>>a;
        }
        if(a<tmax-touzhi)
        {
            touzhi+=a;
            cout<<"您当前只还款一部分!"<<endl;
        }
        else if(a>=tmax-touzhi)
        {
            a-=(tmax-touzhi);
            cout<<"您已经完成还款!"<<endl;
            money+=a;
            cout<<"当前余额为:"<<money<<endl;
            cout<<"透支余额为:"<<tmax<<endl;
        }
    }
    if(touzhi==tmax&&find==1)
    {
        cout<<"输入存放金钱!"<<endl;
        cin>>a;
        while(a<0)
        {
            cout<<"请合法输入!"<<endl;
            cin>>a;
        }
        money+=a;
        cout<<"当前余额为:"<<money<<endl;
    }
    cout<<"请按任意键继续!"<<endl;
    cin.get();
}
void creditcard::fetch()   //信用卡取钱
{
    double a,b;
    b=money+touzhi;
    system("cls");
    cout<<"当前余额:"<<money<<endl;
    cout<<"透支余额:"<<touzhi<<endl;
    cout<<"输入取款金额!"<<endl;
    cin>>a;
    while(a<0||a>b)
    {
        if(a<0)
        {
            cout<<"请合法输入!"<<endl;
            cin>>a;
        }
        else
        {
            cout<<"取款金额不足,请重新输入!"<<endl;
            cin>>a;
        }
    }
    if(a<=money)
    {
        money-=a;
        cout<<"取款成功,请按任意键继续!"<<endl;
    }
    else
    {
        touzhi-=(a-money);
        money=0;
        cout<<"取款成功,请按任意键继续!"<<endl;

    }
    cin.get();
}
void depositcard::save()     //储蓄卡存钱
{
    cin.get();
    system("cls");
    double a;
    cout<<"请输入存款金额!"<<endl;
    cin>>a;
    while(a<=0)
    {
        cout<<"请合法输入!"<<endl;
        cin>>a;
    }
    cout<<"存款成功!"<<endl;
    money+=a;
    cout<<"请按任意键继续!"<<endl;
    cin.get();
}
void account::querymoney()
{
    system("cls");
    cout<<"您账户当前余额为:"<<money<<endl;
    cin.get();
}
void depositcard::fetch()    //储蓄卡取钱
{
    system("cls");
    double a;
    int b;
    do
    {
        cout<<"请输入取款金额!"<<endl;
        cin>>a;
        while(a<0)
        {
            cout<<"请合法输入!"<<endl;
            cin>>a;
        }
        if(money<a)
        {
            cout<<"对不起,您的余额不足!"<<endl;
        }
        else
        {
            money=money-a;
            cout<<endl<<"取款成功!"<<endl;

        }
        cout<<"是否继续取款?是(0)/否(1) "<<endl;
        cin>>b;
        while(b!=0&&b!=1)//选择错误时判定
        {
            cout<<"请合法输入!"<<endl;
            cin>>b;
        }
    }
    while(b==0);
    cout<<"请按任意键继续!"<<endl;
    cin.get();
}
void depositcard::lixi()     //储蓄卡查利息
{
    system("cls");
    double month,lixi;
    cout<<"你打算把钱存几个月?"<<endl;
    cout<<"              利率表"<<endl;
    cout<<"(1~4月),利率:0.001"<<endl;
    cout<<"(5~8月),利率:0.0014"<<endl;
    cout<<"(9~12月),利率:0.0018"<<endl;
    cout<<"(大于12月),利率:0.002"<<endl;
    cin>>month;
    while(month<=0)
    {
        cout<<"请合法输入!"<<endl;
        cin>>month;
    }
    if(month<=4)
    {
        lixi=money*0.001*month;
    }
    else if(month<=8)
    {
        lixi=money*0.0014*month;
    }
    else if(month<=12)
    {
        lixi=money*0.0018*month;
    }
    else if(month>12)
    {
        lixi=money*0.002*month;
    }
    money+=lixi;
    cout<<"请按任意键继续!"<<endl;
    cin.get();
}
void ATM::delaccount()     //销户
{
    int n,i=0,j,k,flag=1;
    string id,p;
    cout<<"储蓄卡销户(0)/信用卡销户(1)"<<endl;
    cin>>n;
    while(n!=0&&n!=1)
    {
        cout<<"请合法输入!"<<endl;
        cin>>n;
    }
    if(n==0)
    {
        while(flag)
        {
            cout<<"请输入你要销户的卡号:"<<endl;
            cin>>id;
            for(i=0; i<depositcount; i++)
            {
                if(id==deposit[i]->getid())
                {
                    j=i;
                    flag=0;
                    break;
                }
            }
            if(flag==1)
            {
                cout<<"账号不存在,请重新输入!"<<endl;
                cin>>id;
            }
        }
        while(1)
        {
            cout<<"请输入密码:"<<endl;
            p=inputpassword();
            if(p!=deposit[j]->getp())
            {
                cout<<"密码错误,请重新输入!"<<endl;
                p=inputpassword();
            }
            else
                break;
        }
        delete deposit[j];
        for(k=j; k<depositcount; k++) //所有被删号后的数据重新存储
        {
            deposit[k] = deposit[k+1];
        }
        deposit[depositcount-1]=NULL;
        depositcount--; //账号总数自减一次
        cout<<"你的账户已经被注销!"<<endl<<endl;
        dsave();
        cin.get();
    }
    if(n==1)
    {
        double a;
        while(flag)
        {
            cout<<"请输入你要销户的卡号:"<<endl;
            cin>>id;
            for(i=0; i<creditcount; i++)
            {
                if(id==credit[i]->getid())
                {
                    j=i;
                    flag=0;
                    break;
                }
            }
            if(flag==1)
            {
                cout<<"账号不存在,请重新输入!"<<endl;
                cin>>id;
            }
        }
        while(1)
        {
            cout<<"请输入密码:"<<endl;
            p=inputpassword();
            if(p!=credit[j]->getp())
            {
                cout<<"密码错误,请重新输入!"<<endl;
                p=inputpassword();
            }
            else
                break;
        }
        while(credit[j]->gettouzhi()<credit[j]->gettmax())
        {
            cout<<"请先还款,您所欠透支金额为:"<<credit[j]->gettmax()-credit[j]->gettouzhi()<<endl;
            cin>>a;
            credit[j]->add(a);
        }
        delete credit[j];
        for(int j=i; j<creditcount; j++) //所有被删号后的数据重新存储
        {
            credit[j] = credit[j+1];
        }
        credit[creditcount-1]=NULL;
        creditcount--; //账号总数自减一次
        cout<<"你的账户已经被注销!"<<endl<<endl;
        csave();
        cin.get();
    }
    cout<<endl<<"请按任意键继续!"<<endl;
    cin.get();
}
double creditcard::gettouzhi()
{
    return touzhi;
}
double creditcard::gettmax()
{
    return tmax;
}
void creditcard::add(double x)
{
    touzhi+=x;
}
int main()
{
    ATM atm;
    atm.menu();
    return 0;
}

需要自己亲自动手敲一下,才能发现自己的问题,针对自己的问题再从百度上搜取,这样做一道大作业能收获很多。

简单介绍一下我写的程序

该程序的结构:account账户为基类,depositcard储蓄卡和creditcard信用卡为account的派生类,创建ATM类,在ATM的私有数据中创建储蓄卡类的对象数组和信用卡类的对象数组。
进入界面,有五项功能,1.储蓄卡账户创建,2.储蓄卡账户登录,3.信用卡账户创建,4.信用卡账户登录,5.账户注销 ,6.退出。
在储蓄卡账户创建时,输入姓名,性别,地址,手机号,身份证号,密码,初始存入金额,最后系统自动生成卡号,记得复制。
在信用卡账户创建时,输入姓名,性别,地址,手机号,身份证号,密码,初始存入金额,此卡能透支的金额,最后系统自动生成卡号,记得复制。
储蓄卡账户登录后,1.用户信息,2.存款,3.取款,4.余额查询,5.利息计算,6.返回上一界面。利息计算是死期的。
信用卡账户登录后,1.用户信息,2.存款或还款,3.取款,4.余额查询,5.返回上一界面。信用卡可以进行透支,也可以存钱,但是还款时需要先把透支的前还上。
账户卡注销时,分为储蓄卡注销和信用卡注销,但是在信用卡注销时需要把透支的金额先还上。

项目名称:Bank Account Management System 银行账户管理系统 简称BAM 项目描述:这是一个基于C/S结构的银行账户在线管理系统,用户可以通过ATM终端界面来操作自己的银行账户. 项目实施方式:这是一个同步练习,随着达内CoreJava课程的深入,这个项目将趋于完整,学员的任务是随着知识点的深入,完成每一个进阶的项目要求. 项目一 练习1:(面向对象基础语法) 写一个账户类(Account),属性: id:账户号码 长整数 password:账户密码 name:真实姓名 personId:身份证号码 字符串类型 email:客户的电子邮箱 balance:账户余额 方法: deposit: 存款方法,参数是double型的金额 withdraw:取款方法,参数是double型的金额 构造方法: 有参和无参,有参构造方法用于设置必要的属性 练习2:(封装) 将Account类作成完全封装,注意:要辨别每个属性的set/get方法是否需要公开 练习3:(继承,多态) 银行的客户分为两类,储蓄账户(SavingAccount)和信用账户(CreditAccount),区别在于储蓄账户不允许透支,而信用账户可以透支,并允许用户设置自己的透支额度. 注意:CreditAccount需要多一个属性 ceiling 透支额度 为这两种用户编写相关的类 同时要求编写Bank类,属性: 1.当前所有的账户对象的集合,存放在数组中 2.当前账户数量 方法: 1.用户开户,需要的参数:id,密码,密码确认,姓名,身份证号码,邮箱,账户类型(int),返回新创建的Account对象 2.用户登录,参数:id,密码 返回Account对象,提示 用s1.equals(s2)判断s1和s2两个字符串内容是否相等 3.用户存款,参数:id,存款数额,返回修改过的Account对象 4.用户取款,参数:id,取款数额,返回修改过的Account对象 5.设置透支额度 参数:id,新的额度 ,返回修改过的Account对象.这个方法需要验证账户是否是信用账户 用户会通过调用Bank对象以上的方法来操作自己的账户,请分析各个方法需要的参数 另外,请为Bank类添加几个统计方法 1.统计银行所有账户余额总数 2.统计所有信用账户透支额度总数 写个主方法测试你写的类 项目二 练习4:(语言高级特性,三个修饰符) 1.修改Account类,银行用户的账号(id)是自动生成的,初始值为100000,第一个开户的用户id为100001,第二个为100002,依此类推. 提示:构造对象的时候采用static属性为id赋值 2.对于Account类,有两个方法,存款方法和取款方法,请修改这两个方法. 存款方法改为不允许子类修改 取款方法根据不同的子类而不同,因此,改为抽象方法,在两个子类中分别实现 3.将Bank类作成单例 项目三 练习5:(接口) 为SavingAccount和CreditAccount各自添加一个子类 LoanSavingAccount类:用户可以贷款,不可以透支 LoanCreditAccount类:用户可以贷款,可以透支 说明:贷款和透支是不一样的,透支指的是账户余额小于0,而贷款用户需要一个贷款额的属性. 在ATM机上,用户可以选择贷款,也可以选择还贷款,而还贷款就是要把账户余额上的资金转到贷款额上 例如:用户余额10000元,贷款额100000元,用户可以选择还款5000元,则用户余额变为5000,贷款额变为95000元. 利用接口来抽象出LoanSavingAccount类和LoanCreditAccount类的共性 接口中的方法: requestLoan:贷款 payLoan:还贷 getLoan:获取用户贷款总额 为Bank类添加三个方法, 贷款:参数 id,贷款额,返回修改过的Account对象 还贷款:参数 id,还款额,返回修改过的Account对象 统计所有账户贷款的总数 练习6:(Object) 为Account类及其子类添加toString方法和equals方法 项目四 练习7:(Exception) 为BAM添加几个异常类 BalanceNotEnoughException :用于取钱的时候余额不足的情况(包括账户余额超过透支额的情况) RegisterException:用于开户异常的情况,例如密码两次输入不一致等情况 LoginException:用户登录异常的情况,例如id错误,密码错误 LoanException:贷款额不能为负数,如果用户试图将贷款额置为负数,则会抛出这个异常 以上四个异常类有一个共同的父类 BusinessException 并妥善的处理这些异常 项目五 练习8:(集合) 改写Bank类,采用集合的方式来管理多个Account对象 为Bank类添加一个方法 打印所有用户的总资产排名 说明:一个用户可能会有多个账号,以身份证号为准.总资产指多个账户余额的总和,不需要考虑贷款账户的贷款额 项目六 练习9:(GUI) 为BAM添加用户界面 需要以下几个类: BAMClient 其中会包含一个Frame,这是用户主界面 MainPanel:主界面,用户可以选择开户或者登录 RegisterPanel:用户开户具体用到的界面 LoginPanel:用户登录需要的界面 BusinessPanel:界面上会显示账户的功能 至少包括存款和取款,对于可透支的用户,还允许用户修改透支额度,对于贷款用户,还允许用户贷款和还贷款 注:本练习的界面布局不做要求,请阅读现有代码,添加事件处理代码 提示:在开户或者登录之后都会跳到BusinessPanel,而用户点击了交易之后,界面停留在BusinessPanel 要随时注意在BusinessPanel上根据数据的变化更新显示信息 项目七 在该加资源保护的地方加上,没有标准 项目八 练习10:(I/O) 修改Bank类,账户信息会采用对象序列化的方式存放在文件中.当Bank对象生成的时候会读取文件,设置账户集合.当账户信息改变的时候,会随时更新文件 设计一个FileDAO类(文件数据访问对象),负责对文件的访问,包括存放账户,提取账户等方法,在Bank类中,会通过FileDAO对象来访问文件 注意:如果已有的账户对象会存在文件中,那么为新的账户对象分配id的做法也应相应的改变,过去的用static属性的做法不再合适,应该改为,把下一个可用的id存放在一个文件中,每创建一个新对象的时候都会读取这个文件,获得新对象的id,并且修改文件中的id,使其加1.这个工作可以放在Account类的构造方法中 项目九 练习11:(网络) 在现有的BAM中,用户是通过界面直接访问Bank对象的,将其改为C/S结构,由界面充当客户端,通过TCP协议访问服务器端的Bank对象. 提示:客户端和服务器端需要通过对象来传递信息,这里会使用对象序列化技术.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值