实训项目——银行储蓄系统

main.cpp

#include 
#include "bank.h"
using namespace std;
int main()
{
    cout<<"+----------------------+\n";
    cout<<"+ Welcome to CSDN Bank +\n";
    cout<<"+----------------------+\n";
    if (pass())
    {
        Bank b;
        b.work();
    }
    return 0;
}

bank.cpp

#include 
#include 
#include 
#include "bank.h"
#include 
using namespace std;
/*
通过构造函数读取文件中保存的业务数据
*/
Bank::Bank()
{
    ifstream infile("account.txt",ios::in);
    if(!infile)
    {
        cerr<<"open error!"<>ac>>n>>p>>b>>s>>Id>>adr)   //当读取成功……
    {
        users[i]=new User;
        users[i]->setUser(ac,n,p,b,s,Id,adr);
        i++;
    }
    N = i; //用静态数据成员
    infile.close();
}
/*
通过析构函数,在退出系统时,将数据保存到文件中
*/
Bank::~Bank()
{
    ofstream outfile("account.txt",ios::out);
    if(!outfile)    //测试文件打开操作是否成功,不成功则提示后退出。
    {
        cerr<<"open error!"<account<<" "<name<<" "<password<<" "<balance<<" "<status<<" "<ID<<" "<address<<" ";
    }
    outfile.close();
}
/*
办理业务
*/
void Bank::work()
{
    int choice;   //用于选择系统功能
    //办理业务
    do
    {
        choice = chooseInMenu();  //从菜单中获得功能代码
        switch(choice)
        {
        case 1:
            openaccount(); //开户
            break;
        case 2:
            cancelaccount();  //注销账户
            break;
        case 3:
            deposit();  //存款
            break;
        case 4:
            withdraw();   //取款
            break;
        case 5:
            showaccount(); //查询余额
            break;
        case 6:
            transferaccounts();  //转账
            break;
        case 7:
            reportloss();  //挂失
            break;
        case 8:
            cancelloss();  //解除挂失
            break;
        case 9:
            updatepassword();   //更改密码
            break;
        case 0:
            cout<<"欢迎您再来. "<>n;
    cout<<"身份证号:";
    cin>>Id;
    cout<<"家庭住址:";
    cin>>adr;
    int Pass1, Pass2;
    cout<<"密码:";
    Pass1=inputPassword();  //输入密码1
    cout<<"确认密码:";
    Pass2=inputPassword();  //输入密码2
    if(Pass1==Pass2)
    {
        p=Pass1;
        s=0; //账户状态为“正常”
        cout<<"存入金额:";
        cin>>b;
        users[N]=new User;
        users[N]->setUser(ac, n, p, b, s,Id,adr);
        N++; //正式用户数增加1,确认了新用户已经加入
        cout<<"成功开户!"<=0)   //说明id账户存在
    {
        users[who]->showName();
        if(users[who]->passwordIsRight())
        {
            users[who]->showBalance("余额");   //提示"余额"二字,显示金额
            cout<<"确认销户(y/n)?";
            if(tolower(getchar())=='y')
            {
                users[who]->showBalance("销户成功!本次取款金额为");
                users[who]->balance=0;  //取款后余额变0
                users[who]->status=2;  //状态变为注销
            }
            else
            {
                cout<<"你取消了操作,销户失败!"<=0)   //说明id账户存在
    {
        if(users[who]->status==0)
        {
            users[who]->showName();
            if(users[who]->passwordIsRight())
            {

                cout<<"输入存款额:";
                cin>>money;
                users[who]->balance+=money;
                users[who]->showBalance("存款后,您有");
            }
        }
        else if(users[who]->status==1)
        {
            cout<<"该用户处于挂失状态,存款失败!"<=0)   //说明id账户存在
    {
        if(users[who]->isNormalUser()) //users[who].isNormalUser() 查看账户状态
        {
            users[who]->showName();
            if(users[who]->passwordIsRight())
            {
                cout<<"输入取款额:";
                cin>>money;
                if(money>users[who]->balance)
                {
                    cout<<"余额不足,取款失败!"<balance-=money;
                    users[who]->showBalance("取款后,还有");
                }
            }
        }

    }
}
/*
功能:查询账户
说明:显示账户信息
*/
void Bank::showaccount()
{
    int who;
    string sta[3]= {"正常","挂失","已经销户"};    //枚举
    who = getUser();  //根据账号查询用户,返回用户的下标
    if(who>=0)   //说明id账户存在
    {
        users[who]->showName();
        if(users[who]->passwordIsRight())
        {
            users[who]->showBalance("余额");
            cout<<"状态:"<status]<=0)   //说明id账户存在
    {
        if(users[out]->isNormalUser())//查看转出账户状态
        {
            users[out]->showName();
            if(users[out]->passwordIsRight())
            {
                cout<<"输入转账金额:";
                cin>>money;
                if(money>users[out]->balance)
                {
                    cout<<"余额不足,转账失败!"<=0)   //说明id账户存在
                    {
                        if(users[in]->isNormalUser()) //查看转入账户状态
                        {
                            users[out]->balance-=money;
                            users[in]->balance+=money;
                            users[out]->showBalance("转账后,您还有");
                        }
                    }
                }
            }
        }
    }
}
/*
功能:挂失
*/
void Bank::reportloss()
{
    int who;
    who = getUser();  //根据账号查询用户,返回用户的下标
    if(who>=0)   //说明id账户存在
    {
        users[who]->showName();
        if(users[who]->passwordIsRight())
        {
            if(users[who]->status==0)
            {
                users[who]->status=1;
                cout<<"挂失成功"<status==1)
            {
                cout<<"该账户已经处于挂失状态"<=0)   //说明id账户存在
    {
        users[who]->showName();
        if(users[who]->passwordIsRight())
        {
            if(users[who]->status==0)
            {
                cout<<"该账户处于正常状态,不需要解除挂失"<status==1)
            {
                users[who]->status=0;
                cout<<"解除挂失成功"<=0)   //说明id账户存在
    {
        users[who]->showName();
        if(users[who]->passwordIsRight() && users[who]->isNormalUser())
        {
            cout<<"新密码:";
            Pass1=inputPassword();  //输入密码1
            cout<<"确认密码:";
            Pass2=inputPassword();  //输入密码2
            if(Pass1==Pass2)
            {
                users[who]->password=Pass1;
                cout<<"修改成功!"<>id;
    int index=-1;
    int low=0, high=N-1, mid;
    while(low<=high)
    {
        mid = (low+high)/2;
        if(users[mid]->account==id)
        {
            index=mid;
            break;   //找到了,立即退出循环
        }
        else if (users[mid]->account>id)
            high=mid-1;
        else
            low=mid+1;
    }
    if (index<0)
        cout<<"该用户不存在,本次操作失败!"<
#include "bank.h"
using namespace std;
void User::setUser(int ac, string n, int p, double b,int s,string Id,string adr)
{
    account=ac;
    password=p;
    name=n;
    balance=b;
    status=s;
    ID=Id;
    address=adr;
}
void User::showName()
{
    cout<<"户主姓名:"<
#include 
#include 
#include 
#include 
#include 
#include "bank.h"
using namespace std;
/*
功能:验证用户密码
返回值:密码正确,返回1;
        不能通过密码验证,返回0
*/
int pass()
{
    char nameInFile[20];   //由文件中读出的业务员用户名
    char passInFile[20];  //文件中保存的密码,这一版本中,用字符保存密码
    ifstream infile("password.txt",ios::in);
    if(!infile)
    {
        cout<<"password file cannot open!"<>nameInFile>>passInFile;
    infile.close();
    char name[20];   //业务员登录时输入的用户名
    char pass[20];  //业务员登录时输入的密码
    char ch;
    int Try=3;   //进入系统时尝试的次数
    int right = 0;  //要返回的结果:0-不正确 1-正确
    //进入系统,密码三次不对将退出
    do
    {
        cout<<"请输入业务员用户名:";
        cin>>name;
        cout<<"请输入密码:";
        int i=0;
        while((ch=getch())!='\r')  //getch在接受输入后,不在屏幕上显示
        {
            pass[i++]=ch;
            putchar('*');   //接受任何字符,屏幕上只显示*
        }
        pass[i]='\0';
        fflush(stdin);  //清除了getchar()时在键盘缓存中的遗留,以免影响后续操作
        cout<0)
                cout<<"超过3次将退出,你还可以尝试"<>i;
        if(i>=0 && i<=9)
            break;
        else
            cout<<"请重新选择功能"<
using namespace std;
const int upNum=2000; //系统最多容纳的用户数
class Bank;
class User
{
public:
    void setUser(int ac, string na, int p, double b,int s,string Id,string adr);
    void showName();
    void showBalance(string prompt); //显示余额,前面加上提示词prompt
    bool passwordIsRight();   //校验密码,输入的密码正确则返回true
    bool isNormalUser(); //存款、取款、转帐等功能,需要账户处于正常姿态,处于正常状态时返回true,其他情形返回false并提示
    friend class Bank;   //将Bank声明为友元类,方便其访问数据成员
private:
    int account; //账号
    int password;  //密码
    string name;   //用户名
    double balance;  //账户余额
    int status;  //状态 0-正常  1-挂失  2-销户
    string ID;//身份证号
    string address;//家庭住址
};
class Bank
{
public:
    Bank();  //开始前从文件中读数据,存在数组中
    ~Bank();   //程序结束前,将数组中的数据写入到文件中
    void work();  //业务驱动
    void openaccount(); //开户
    void cancelaccount();  //注销账户
    void deposit();   //存款
    void withdraw();   //取款
    void showaccount(); //查询余额
    void transferaccounts();  //转账
    void reportloss();  //挂失
    void cancelloss();  //解除挂失
    void updatepassword();   //更改密码
    int getUser();  //输入账号查询用户,返回用户在对象数组中的下标
private:
    int N;  //实际的用户数目
    User *users[upNum];  //
};

int pass();  //业务员登录
int chooseInMenu(); //显示菜单并由业务员选择
int inputPassword();   //返回键盘输入的密码
#endif // BANK_H_INCLUDED


运行结果:

实训项目——银行储蓄系统_第1张图片

实训项目——银行储蓄系统_第2张图片

你可能感兴趣的:(实训项目——银行储蓄系统)