实训:银行系统(终结版)

#include <iostream>
#include <string.h>
#include <iomanip>
#include <stdio.h>
using namespace std;

#define MAXACCOUNTNUMBER 20000
//银行中初始卡号
#define INITNUMBER 10001

//定义开户系统结构体
struct Account
{
    long accNumber;             //卡号
    char accName[20];          //户名
    char accPwd[10];          //密码
    double balance;          //余额
    char flag[6];           //卡的状态
};//结构体结束符(切记,别漏掉!!!)
//欢迎函数
void Welcome();
//登陆函数
void Denglu();
//主界面
void Mainmenu();
//选择函数
void Chose();
//退出函数
void Exit();
//开户函数
void OpenAnAccount();
//进入开户
void GoOpenAnAccount();
//存款函数
void Deposit();
//进入存款
void GoDeposit();
//改密函数
void ChangeCipher();
//进入改密
void GoChangeCipher();
//查询函数
void Query();
//进入查询
void GoQuery();
//取款函数
void Withdraw();
//进入取款
void GoWithdraw();
//销户函数
void CloseAnAccount();
//进入销户
void GoCloseAnAccount();
//校验密码必须是6-8位,而且是纯数字
bool isPassLegal(char pass[]);
//输出指定卡的信息
void printAccount(Account acc);
//根据卡号查找卡在数组中的下标
int searchAccount(long accNumber);

//银行中所有卡
Account array[MAXACCOUNTNUMBER];
//银行中卡的数量(全局变量)
int size=0;
//生成银行中自增卡号
long autoCreament();
//定义全局变量用作密码、用户名
const char Mima[10]="admin";
const char Yonghuming[10]="admin";
int main()
{
    Welcome();
    Denglu();
    return 0;
}
//欢迎界面
void Welcome()
{
    cout<<"*********************************************"<<endl;
    cout<<"**                                         **"<<endl;
    cout<<"**       欢迎使用储蓄综合业务平台          **"<<endl;
    cout<<"**              V1.0版                     **"<<endl;
    cout<<"*********************************************"<<endl;
}
//登陆系统
void Denglu()
{
    int i;
    char str1[10],str2[10];//用于输入用户名和密码
    cout<<"请输入用户名:";
    cin>>str1;//输入用户名
    if(strcmp(str1,Yonghuming)==0)
    {
        cout<<endl;
        cout<<"请输入登陆密码:";
        cin>>str2;
        if(strcmp(str2,Mima)==0)//判断密码是否正确
        {
            cout<<"*********************************************"<<endl;
            cout<<"**         欢迎登陆储蓄综合业务平台        **"<<endl;
            cout<<"*********************************************"<<endl;
            Mainmenu();             //正确,进入系统
        }
        else
        {
            for(i=2;i>0;--i)
            {
                cout<<"密码错误,请重新输入:(您还有"<<i<<"次机会)";//密码不正确,三次输入机会,三次不正确,退出
                cin>>str2;
                cout<<endl;
                if(strcmp(str2,Mima)==0)
                {
                    cout<<"*********************************************"<<endl;
                    cout<<"**         欢迎登陆储蓄综合业务平台        **"<<endl;
                    cout<<"*********************************************"<<endl;
                    Mainmenu();
                    break;
                }
                if(i==1)//三次没输正确
                {
                    cout<<"您连续三次输错密码,请到前台找回密码,谢谢合作!";
                    break;
                }
            }
        }
    }
    else
    {
        cout<<"该用户名不存在."<<endl;   //用户名错误
        Denglu();//重新返回登陆界面
    }

}
//主菜单
void Mainmenu()
{
    cout<<"*********************************************"<<endl;
    cout<<"**      *1.开户    *4.改密     *0.退出     **"<<endl;
    cout<<"**      *2.存款    *5.查询                 **"<<endl;
    cout<<"**      *3.取款    *6.销户                 **"<<endl;
    cout<<"*********************************************"<<endl;
    Chose();
}
//选择进入其他业务
void Chose()
{
    int choice;
    cout<<"请输入您要进行的业务代号:";//输入选择
    cin>>choice;
    if(choice>=0&&choice<=6)
    {
        switch(choice)//分别进入不同业务
        {
            case 0:
                   Exit();
                   break;
            case 1:
                   OpenAnAccount();
                   break;
            case 2:
                   Deposit();
                   break;
            case 3:
                   Withdraw();
                   break;
            case 4:
                   ChangeCipher();
                   break;
            case 5:
                   Query();
                   break;
            case 6:
                  CloseAnAccount();
                  break;
        }
    }
    else
    {
        cout<<"输入有误,请核实后重新输入!"<<endl;//输入有误
        Mainmenu();
    }
}
//开户界面
void OpenAnAccount()
{
    cout<<"*********************************************"<<endl;
    cout<<"**           欢迎进入开户系统              **"<<endl;
    cout<<"*********************************************"<<endl;
    GoOpenAnAccount();
}
//存款界面
void Deposit()
{
    cout<<"*********************************************"<<endl;
    cout<<"**           欢迎进入存款系统              **"<<endl;
    cout<<"*********************************************"<<endl;
    GoDeposit();
}
//取款界面
void Withdraw()
{
    cout<<"*********************************************"<<endl;
    cout<<"**           欢迎进入取款系统              **"<<endl;
    cout<<"*********************************************"<<endl;
    GoWithdraw();
}
//改密界面
void ChangeCipher()
{
    cout<<"*********************************************"<<endl;
    cout<<"**           欢迎进入改密系统              **"<<endl;
    cout<<"*********************************************"<<endl;
    GoChangeCipher();
}
//销户界面
void CloseAnAccount()
{
    cout<<"*********************************************"<<endl;
    cout<<"**           欢迎进入销户系统              **"<<endl;
    cout<<"*********************************************"<<endl;
    GoCloseAnAccount();
}
//查询界面
void Query()
{
    cout<<"*********************************************"<<endl;
    cout<<"**           欢迎进入查询系统              **"<<endl;
    cout<<"*********************************************"<<endl;
    GoQuery();
}
//退出界面
void Exit()
{
    cout<<"*********************************************"<<endl;
    cout<<"**谢谢您使用储蓄综合业务平台,欢迎下次光临 **"<<endl;
    cout<<"*********************************************"<<endl;
}
//进入开户
void GoOpenAnAccount()
{
    char pwd1[10];
    char pwd2[10];
    int j;
    cout<<"请输入户名:";
    cin>>array[size].accName;
    cout<<"请输入密码:";        //输入并保存数据
    cin>>pwd1;
    cout<<"请再次输入密码:";
    cin>>pwd2;
    if(strcmp(pwd1,pwd2)==0)//strcmp的使用
    {
        if(isPassLegal(pwd1))//密码合法
        {
            strcpy(array[size].accPwd,pwd1);//strcpyd的使用
            cout<<"请输入金额:";
            cin>>array[size].balance;
            strcpy(array[size].flag,"正常");//*******记住
            array[size].accNumber=autoCreament();
            printAccount(array[size]);
            size++;
            cout<<"开户成功,按任意键返回...";
            fflush(stdin);
            getchar();
            Mainmenu();//返回主菜单
        }
        else
        {
            cout<<"密码必须是纯数字,并且是6-8位"<<endl;
            GoOpenAnAccount();
        }

    }
    else
    {
        cout<<"两次密码不一致!";
        cout<<"是否继续进行开户?"<<endl;
        cout<<"继续请按1...返回主菜单请按其他数字键";
        cin>>j;
        if(j==1)
           GoOpenAnAccount();//继续开户
        else
           Mainmenu();//返回主菜单
    }
}
//进入存款
void GoDeposit()
{
    int j;
    long accNum;//存款的卡号
    double money;//存款的金额
    int pos;
    cout<<"请输入存款的卡号:";
    cin>>accNum;
    pos=searchAccount(accNum);
    if(pos==-1)
    {
        //卡号有误
        cout<<"卡号不存在!"<<endl;
        Mainmenu();//返回主菜单
    }else
    {
        cout<<"请输入存款金额:";
        cin>>money;
        //展示下存款前卡的信息
        cout<<"存款前卡的信息:"<<endl;
        printAccount(array[pos]);
        //存款后的余额
        array[pos].balance+=money;
         //展示存款后卡的信息
        cout<<"存款后卡的信息:"<<endl;
        printAccount(array[pos]);
        cout<<"存款成功,按任意键返回...";
        fflush(stdin);
        getchar();
        Mainmenu();//返回主菜单
    }
}
//进入取款
void GoWithdraw()
{
    int j;
    long accNum;//取款的卡号
    char accnum[10];//密码一定要定义成char数组,注意!!!
    double money;//取款的金额
    int pos;
    cout<<"请输入取款的卡号:";
    cin>>accNum;
    pos=searchAccount(accNum);
    if(pos==-1)
    {
        //卡号有误
        cout<<"卡号不存在!"<<endl;
        Mainmenu();//返回主菜单
    }
    else//卡号正确,进入
    {
        cout<<"请输入密码:";
        cin>>accnum;//输入密码
        if(strcmp(array[pos].accPwd,accnum)==0)
        {
            cout<<"请输入取款金额:";
            cin>>money;
            if(array[pos].balance<money)
            {
                cout<<"您的余额不足,无法取出!!!"<<endl;
                GoWithdraw();
            }
            else
            {
                //展示下取款前卡的信息
                cout<<"取款前卡的信息:"<<endl;
                printAccount(array[pos]);
                //取款后的余额
                array[pos].balance-=money;
                //展示取款后卡的信息
                cout<<"取款后卡的信息:"<<endl;
                printAccount(array[pos]);
                cout<<"取款成功,按任意键返回...";
                fflush(stdin);
                getchar();
                Mainmenu();//返回主菜单
            }

        }
        else
        {
            cout<<"输入密码有误!"<<endl;
            cout<<"是否继续要进行取款?"<<endl;
            cout<<"继续请按1...返回主菜单请按其他数字键";
            cin>>j;
            if(j==1)
               GoWithdraw();//继续取款
            else
               Mainmenu();//返回主菜单
        }
    }
}
//进入改密
void GoChangeCipher()
{
    char pwd1[10];
    char pwd2[10];
    int j;
    long accNum;//要修改的账号
    char accnum[10];//密码一定要定义成char数组,注意!!!
    int pos;
    cout<<"请输入您要修改密码的卡号:";
    cin>>accNum;
    pos=searchAccount(accNum);
    if(pos==-1)
    {
        //卡号有误
        cout<<"该卡号不存在!"<<endl;
        Mainmenu();//返回主菜单
    }
    else//卡号正确,进入
    {
        cout<<"请输入密码:";
        cin>>accnum;    //输入密码
        if(strcmp(array[pos].accPwd,accnum)==0)
        {
            cout<<"请输入新密码:";        //输入并保存数据
            cin>>pwd1;
            cout<<"请再次输入新密码:";
            cin>>pwd2;
            if(strcmp(pwd1,pwd2)==0)//strcmp的使用
            {
                if(isPassLegal(pwd1))//密码合法
                {
                    strcpy(array[pos].accPwd,pwd1);//strcpyd的使用
                    printAccount(array[pos]);
                    cout<<"修改密码成功,按任意键返回...";
                    fflush(stdin);
                    getchar();
                    Mainmenu();//返回主菜单
                }
                else
                {
                    cout<<"密码必须是纯数字,并且是6-8位"<<endl;
                    GoChangeCipher();
                }
            }
            else
            {
                cout<<"两次密码不一致!";//两次密码不一致
                cout<<"是否继续进行改密?"<<endl;
                cout<<"继续请按1...返回主菜单请按其他数字键";
                cin>>j;
                if(j==1)
                    GoChangeCipher();//继续改密
                else
                    Mainmenu();//返回主菜单
            }
        }
        else
        {
            cout<<"输入密码有误!"<<endl;
            cout<<"是否继续要进行改密?"<<endl;
            cout<<"继续请按1...返回主菜单请按其他数字键";
            cin>>j;
            if(j==1)
               GoChangeCipher();//继续改密
            else
               Mainmenu();//返回主菜单
        }
    }
}
//进入销户
void GoCloseAnAccount()
{
    int j,i;
    int pos;
    long CloseAccount;//销户的卡号
    char accnum[10];//密码一定要定义成char数组,注意!!!
    cout<<"请输入您要销户的卡号:";
    cin>>CloseAccount;
    pos=searchAccount(CloseAccount);//查找卡号
    if(pos==-1)
    {
        //卡号有误
        cout<<"该卡号不存在!"<<endl;
        Mainmenu();//返回主菜单
    }
    else//卡号正确,进入
    {
        cout<<"请输入密码:";
        cin>>accnum;//输入密码
        if(strcmp(array[pos].accPwd,accnum)==0)
        {
            cout<<"是否确认要进行销户?"<<endl;
            cout<<"继续请按1...返回主菜单请按其他数字键";
            cin>>j;
            if(j==1)//确认销户
            {
                array[pos].balance=0;//余额为零
                strcpy(array[pos].flag,"销户");//状态为销户
                printAccount(array[pos]);//打印
                cout<<"销户成功,按任意键返回...";
                fflush(stdin);
                getchar();
                Mainmenu();//返回主菜单
            }
            else
            {
                Mainmenu();//返回主菜单
            }
        }
        else
        {
            cout<<"密码输入错误!";
            cout<<"是否继续要进行销户?"<<endl;
            cout<<"继续请按1...返回主菜单请按其他数字键";
            cin>>j;
            if(j==1)
               GoCloseAnAccount();//继续销户
            else
               Mainmenu();//返回主菜单

        }
    }
}
//进入查询
void GoQuery()
{
    int j;
    long accNum;//查询的账号
    char accnum[10];//密码一定要定义成char数组,注意!!!
    int pos;
    cout<<"请输入您要查询的卡号:";
    cin>>accNum;
    pos=searchAccount(accNum);
    if(pos==-1)
    {
        //卡号有误
        cout<<"该卡号不存在!"<<endl;
        Mainmenu();//返回主菜单
    }
    else//卡号正确,进入
    {
        cout<<"请输入密码:";
        cin>>accnum;//输入密码
        if(strcmp(array[pos].accPwd,accnum)==0)
        {
            cout<<"您的卡的信息为:"<<endl;
            printAccount(array[pos]);
            cout<<"查询成功,按任意键返回...";
            fflush(stdin);
            getchar();
            Mainmenu();//返回主菜单
        }
        else
        {
            cout<<"输入密码有误!"<<endl;
            cout<<"是否继续要进行查询?"<<endl;
            cout<<"继续请按1...返回主菜单请按其他数字键";
            cin>>j;
            if(j==1)
               GoQuery();//继续查询
            else
               Mainmenu();//返回主菜单
        }
    }
}
//判断密码是否规范
bool isPassLegal(char pass[])
{
    bool flag=true;
    int len=strlen(pass),i;
    if(len<9&&len>=6){
        //满足6-8位
        for(i=0;i<len;i++){
            if(pass[i]<48||pass[i]>57){
                flag=false;
                break;
            }
        }
    }else{
        //不满足6-8位
        flag=false;
    }
    return flag;
}

//生成银行中自增卡号
long autoCreament()
{
    if(size==0)
    {
        return INITNUMBER;
    }
    else
    {
        return array[size-1].accNumber+1;//以前前一位户主的卡号加1作为新户主的卡号
    }
}
//输出指定卡的信息
void printAccount(Account acc)
{
    cout<<"+--------------------------------------------+"<<endl;
    cout<<"|"<<setiosflags(ios::left)<<setw(8)<<"卡号"<<"|"<<setw(8)<<"户名"<<"|"<<setw(8)<<"密码"<<"|"<<setw(8)<<"金额"<<"|"<<setw(8)<<"状态"<<"|"<<endl;
    cout<<"+--------------------------------------------+"<<endl;
    cout<<"|"<<setiosflags(ios::left)<<setw(8)<<acc.accNumber<<"|"<<setw(8)<<acc.accName<<"|"<<setw(8)<<acc.accPwd<<"|"<<setw(8)<<acc.balance<<"|"<<setw(8)<<acc.flag<<"|"<<endl;
    cout<<"+--------------------------------------------+"<<endl;
}
/*根据卡号查找卡的下标
* 若返回值>=0,卡号是正确
* 若返回值=-1,卡号有误
*/
int searchAccount(long accNumber)
{
    int i,pos=-1;
    for(i=0;i<size;i++)
    {
        if(array[i].accNumber==accNumber&&strcmp(array[i].flag,"销户")!=0)
        {
            //找到了这张卡
            pos=i;
            break;
        }
    }
    return pos;
}



评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值