银行储蓄系统...

问题及代码:

/*
* Copyright (c++) 2015, 烟台大学计算机学院
* All rights reserved.
* 文件名称:Bank.cpp
* 作    者:李楠
* 完成日期:2015年2月27日
* 版 本 号:v1.0
*
* 问题描述: 银行储蓄系统
* 输入描述: 略
* 程序输出: 略
*/
#include <iostream>
#include <string.h>
#include <conio.h> //putch的头文件
#include <stdlib.h> //system的头文件
#define MNUM 2000 //银行中最大开户数
using namespace std;
//定义卡的类型
struct Account
{
    long accNumber;//银行卡的卡号
    char name[20];//开户人
    char password[7];//密码
    char IDcard[19];//身份证号
    double balance;//金额
    int state;//状态 0-正常 -1-挂失 -2-销户
};

Account array[MNUM];//银行中现已开户的数量
int size=0;
long Number=10001;//第一个卡的卡号
//查询ID号码
int findCardbyID(long cardID);
//银行工作人员界面
void clerkwork();
//开户操作
void openAccount();
//存款操作
void depositmoney();
//销户操作
void cancelAccount();
//取款操作
void drawmoney();
//查询操作
void checkAccount();
//转账操作
void zhuanzhang();
//挂失操作
void lossAccount();
//改密
void changepassword();
//解挂操作
void jiegua();
//公共函数

int pass()
{
    int ipass=0;
    string name;
    char pass[10];
    int count=0;
    do
    {
        cout<<"请输入业务员用户名:";
        cin>>name;
        cout<<"请输入密码:";
        int i=0;//输出星号操作
    while((pass[i]=getch())!=13)
    {
        if(pass[i]==8)
        {
            cout<<"\b";
            i--;
        }
        else
        {
            putch('*');// int putch(char ch) 在当前光标处向屏幕输出字符ch,然后光标自动右移一个字符位置
                      //putch()向屏幕输出字符的函数 使用方式:
                      //① putch('转义字符');
                      //② putch('单个字符');
                      //③ putch(字符变量);
                      //注:③需先定义 char 字符变量='单个字符';
                      //头文件:conio.h
            i++;
        }
    }
    pass[i]='\0';
    cout<<endl;
    count++;
        if((name=="hejia")&&strcmp(pass,"123456")==0)
            ipass=1;
        if(ipass!=1)
            cout<<"用户名或密码输入错误。"<<endl;
    }
    while(ipass!=1&&count<3);
    return ipass;
}
int main()
{
    cout<<"+----------------------+"<<endl;
    cout<<"+    欢迎光临he银行    +"<<endl;
    cout<<"+----------------------+"<<endl;
    if(pass()==1)
        clerkwork();
    else
        cout<<"请到柜台办理密码查询后再来。"<<endl;
    return 0;
}


void clerkwork()//银行工作人员的界面
{
    int order;
    cout<<"+----------------------------+"<<endl;
    cout<<"+ 1 开户    2 销户    3 存款 +"<<endl;
    cout<<"+ 4 取款    5 查询    6 转账 +"<<endl;
    cout<<"+ 7 挂失    8 解挂    9 改密 +"<<endl;
    cout<<"+                     0 退出 +"<<endl;
    cout<<"+----------------------------+"<<endl;
    cout<<"请输入操作指令:";
    cin>>order;
    switch(order)
    {
    case 1:
        openAccount();
        break;
    case 2:
        cancelAccount();
        break;
    case 3:
        depositmoney();
        break;
    case 4:
        drawmoney();
        break;
    case 5:
        checkAccount();
        break;
    case 6:
        zhuanzhang();
        break;
    case 7:
        lossAccount();
        break;
    case 8:
        jiegua();
        break;
    case 9:
        changepassword();
        break;
    case 0:
        cout<<"谢谢,欢迎再来!"<<endl;
        break;
    default :
        cout<<endl;
    }
}


int findCardbyID(long cardID)//查找卡号操作
{
    int position=-1;
    for(int i=0; i<size; i++)
    {
        if(array[i].accNumber==cardID)
        {
            position=i;
            break;
        }
    }
    return position;
}


void openAccount()//开户操作
{
    char idcard[14];
    char name[9],pass1[7],pass2[7];
    double balance;
    cout<<"正在开户"<<endl;
    cout<<"账号:"<<Number<<endl;
    cout<<"户主姓名:";
    cin>>name;
    cout<<"密码:";
    int i=0;//输出星号操作
    while((pass1[i]=getch())!=13)
    {
        if(pass1[i]==8)
        {
            cout<<"\b";
            i--;
        }
        else
        {
            putch('*');
            i++;
        }
    }
    pass1[i]='\0';
    cout<<endl;
    cout<<"确认密码:";
    int j=0;//输出星号操作
    while((pass2[j]=getch())!=13)
    {
        if(pass2[j]==8)
        {
            cout<<"\b";
            j--;
        }
        else
        {
            putch('*');
            j++;
        }
    }
    pass2[j]='\0';
    cout<<endl;
    if(strcmp(pass1,pass2)==0)//两次输入的密码是一样
    {
        cout<<"存入金额:";
        cin>>balance;
        cout<<"身份证号:";
        cin>>idcard;
        int a;
        array[size].accNumber=Number;
        strcpy(array[size].name,name);//字符型记住名字
        strcpy(array[size].password,pass1);//字符型记住密码
        strcpy(array[size].IDcard,idcard);
        array[size].balance=balance;
        array[size].state=0;
        Number++;//账户数量+1
        size++;
        cout<<"开户成功!"<<endl;
        cout<<"返回主页面请按“0”";
        if(cin>>a&&a==0)
        {
            clerkwork();
        }
    }
    else
    {
        //两次输入的密码不一样
        cout<<"两次输入的密码不一致,请重新操作"<<endl;
        openAccount();
    }
}


void cancelAccount()//销户操作
{

    long accID;//输入的卡号
    int position;
    cout<<"待销户账号:";
    cin>>accID;
    position=findCardbyID(accID);//根据卡的位置寻找该卡
    if(position==-1)//提示卡号信息有误
    {
        cout<<"请检查输入的卡号是否有误,重新输入"<<endl;
        cancelAccount();
    }
    else if(array[position].state!=0)//卡号状态不正常
    {
        cout<<"该卡状态非正常,请检查该卡状态是否有误"<<endl;
        clerkwork();
    }
    else//卡号正确
    {
    char str[10];
    cout<<"姓名:"<<array[position].name<<endl;
    cout<<"密码:";
    int j=0;//输出星号操作
    while((str[j]=getch())!=13)
    {
        if(str[j]==8)
        {
            cout<<"\b";
            j--;
        }
        else
        {
            putch('*');
            j++;
        }
    }
    str[j]='\0';
    cout<<endl;
    if(strcmp(str,array[position].password)!=0)//密码不正确
        {
            cout<<"密码输入错误;请重新输入操作:"<<endl;
            cancelAccount();
        }
    else//密码正确
        {
            char a;
            int c;
            cout<<"确认销户(y/n)?";
            cin>>a;
            if(a=='y'||a=='Y') //确认销户操作
            {
                cout<<"取款"<<array[position].balance<<"元"<<",销户成功!"<<endl;
                array[position].balance=0;
                array[position].state=-2;
                cout<<"返回主页面请按“0”"<<endl;
                if(cin>>c&&c==0)
                {
                    clerkwork();
                }
            }

            if(a=='n'||a=='N')//取消销户操作
            {
                cout<<"您已取消销户操作"<<endl;
                cout<<"返回主页面请按“0”";
                if(cin>>c&&c==0)
                {
                    clerkwork();
                }
            }
         }
     }
}


void depositmoney()//存款操作,不需要密码
{
    long accID;//卡号
    int position;
    double number;
    cout<<"账号:";
    cin>>accID;
    position=findCardbyID(accID);//根据卡号查找该卡
    if(position==-1)//提示卡号信息有误 不存在卡号
    {
        cout<<"该卡不存在,请重新操作"<<endl;
        depositmoney();
    }
    else if(array[position].state!=0)//卡号状态不正常
    {
        cout<<"该卡状态非正常"<<endl;
    }
    else
    {
        cout<<"姓名:"<<array[position].name<<endl;
        cout<<"存款额:";
        cin>>number;
        if(number<0)//存款金额的格式不正确
        {
            cout<<"金额输入有误,请重新操作:"<<endl;
            depositmoney();
        }
        else//存款金额格式正确
        {
            int c;
            array[position].balance=array[position].balance+number;
            cout<<"现余额共计"<<array[position].balance<<"元"<<",存款成功!"<<endl;
            cout<<"返回主页面请按“0”";
            if(cin>>c&&c==0)
            {
                clerkwork();
            }
        }
    }
}


void drawmoney()//取款操作
{
    char str[10];
    int c;
    long accID;//输入的卡号
    int position;
    double number;
    cout<<"账号:";
    cin>>accID;
    position=findCardbyID(accID);//根据卡的位置寻找该卡
    if(position==-1)//提示卡号信息有误
    {
        cout<<"该卡号不存在,请重新输入"<<endl;
        drawmoney();
    }
    else if(array[position].state!=0)//卡号状态不正常
    {
        cout<<"该卡状态非正常,无法取款"<<endl;
    }
    else//卡号正确
    {
        cout<<"姓名:"<<array[position].name<<endl;
        cout<<"密码:";
        int j=0;//输出星号操作
        while((str[j]=getch())!=13)
        {
            if(str[j]==8)
            {
                cout<<"\b";
                j--;
            }
            else
            {
                putch('*');
                j++;
            }
        }
        str[j]='\0';
        cout<<endl;
        if(strcmp(str,array[position].password)==0)//密码正确
        {
            cout<<"取款额:";
            cin>>number;
            if (number<0)//金额格式不正确
            {
                cout<<"输入金额格式不正确,请重新操作"<<endl;
                drawmoney();

            }
            else//金额格式正确
                if(number>array[position].balance)//取款数目大于卡内余额
                {
                    cout<<"余额不足,取款失败!请重新操作:"<<endl;
                    drawmoney();

                }
                else//取款数目小于等于卡内余额
                {
                    array[position].balance=array[position].balance-number;
                    cout<<"现余额共计"<<array[position].balance<<"元"<<",取款成功!"<<endl;
                    cout<<"返回主页面请按“0”";
                    if(cin>>c&&c==0)
                    {
                        clerkwork();
                    }
                }
        }
        else//密码不正确
        {
            for(int i=1; i<=3; i++)
            {
                cout<<"密码输入错误(一共两次机会),请重新输入:"<<endl;
                int j=0;//输出星号操作
                while((str[j]=getch())!=13)
                {
                    if(str[j]==8)
                    {
                        cout<<"\b";
                        j--;
                    }
                    else
                    {
                        putch('*');
                        j++;
                    }
                }
                str[j]='\0';
                cout<<endl;
                if(strcmp(str,array[position].password)==0)//密码再次输入正确
                {
                    cout<<"请输入取款金额:"<<endl;
                    cin>>number;
                    if (number<0)//金额格式不正确
                    {
                        cout<<"输入金额格式不正确,请重新操作"<<endl;
                        drawmoney();

                    }
                    else//金额格式正确
                    {
                        if(number>array[position].balance)//取款数目大于卡内余额
                        {
                            cout<<"取款金额高于银行卡卡内余额,取款失败!请重新操作:"<<endl;
                            drawmoney();
                        }
                        if(number<=array[position].balance)//取款数目小于等于卡内余额
                        {
                            cout<<"取款成功!"<<endl;
                            array[position].balance=array[position].balance-number;
                            cout<<"返回主页面请按“0”"<<endl;
                            if(cin>>c&&c==0)
                            {
                                clerkwork();
                            }
                        }
                    }
                }
            }

        }
    }
}


void checkAccount()//查询操作
{
    int c;
    char str[10];
    long accID;//卡号
    int position;
    cout<<"账号:";
    cin>>accID;
    position=findCardbyID(accID);//根据卡号查找该卡
    if(position==-1)//提示卡号信息有误
    {
        cout<<"卡号有误,请重新输入"<<endl;
        checkAccount();
    }
        cout<<"姓名:"<<array[position].name<<endl;
        cout<<"密码:";
        int j=0;//输出星号操作
        while((str[j]=getch())!=13)
       {
           if(str[j]==8)
           {
               cout<<"\b";
               j--;
           }
           else
           {
               putch('*');
               j++;
           }
       }
       str[j]='\0';
        cout<<endl;
       if(strcmp(str,array[position].password)!=0)//密码不正确
        {
            cout<<"密码不正确,请重新操作"<<endl;
            checkAccount();

        }
        else//密码正确
        {
        cout<<"余额:"<<array[position].balance<<"元"<<endl;
        cout<<"当前状态:";
        if(array[position].state==0)
            cout<<"正常"<<endl;
        else  if(array[position].state==-1)
            cout<<"挂失"<<endl;
        else
            cout<<"销户"<<endl;
        cout<<"身份证号:"<<array[position].IDcard<<endl;
        cout<<"查询完毕!"<<endl;
        }
    cout<<"返回主页面请按“0”";
    if(cin>>c&&c==0)
    {
        clerkwork();
    }
}


void zhuanzhang()//转账操作
{
    long accID1;//输入的卡号
    long accID2;//输入的卡号1
    char str[10];
    long position;
    cout<<"转出账号:";
    cin>>accID1;
    position=findCardbyID(accID1);//根据卡的位置寻找该卡
    if(position==-1)//提示卡号信息有误
    {
        cout<<"请检查输入的卡号是否有误,重新输入"<<endl;
        zhuanzhang();
    }
    else if(array[position].state!=0)//存在该卡但卡号状态不正常
    {
        cout<<"该卡状态非正常,请检查该卡状态"<<endl;
        clerkwork();
    }
    else//卡号正确
    {
        cout<<"姓名:"<<array[position].name<<endl;
        cout<<"密码:";
        int j=0;//输出星号操作
        while((str[j]=getch())!=13)
       {
           if(str[j]==8)
           {
               cout<<"\b";
               j--;
           }
           else
           {
               putch('*');
               j++;
           }
       }
       str[j]='\0';
        cout<<endl;
       if(strcmp(str,array[position].password)!=0)//密码不正确
        {
            cout<<"密码不正确,请重新操作"<<endl;
            zhuanzhang();

        }
        else//密码正确
        {
            long position1;
            cout<<"转入账号:";
            cin>>accID2;
            position1=findCardbyID(accID2);//根据卡的位置寻找该卡
            if(position1==-1)//提示卡号信息有误
            {
                cout<<"该卡号不存在,请检查输入的卡号是否有误"<<endl;
                zhuanzhang();
            }
            else if(array[position1].state!=0)//卡号状态不正常
            {
                cout<<"该卡状态非正常,请检查该卡状态"<<endl;
                clerkwork();
            }
            else//卡号正确
            {
                long number;
                cout<<"转账金额:";
                cin>>number;
                if(number<0)//存款金额的格式不正确
                {
                    cout<<"金额输入有误,请重新操作:"<<endl;
                    zhuanzhang();
                }
                else//存款金额格式正确
                {
                    int c;
                    array[position1].balance=array[position1].balance+number;
                    array[position].balance=array[position].balance-number;
                    cout<<"转账成功!"<<"余额"<<array[position].balance<<"元."<<endl;
                    cout<<"返回主页面请按“0”";
                   if(cin>>c&&c==0)
                   {
                       clerkwork();
                   }
                }
            }
        }
    }
}


void lossAccount()//挂失操作
{
    char str[10];
    int c;
    long accID;//输入的卡号
    int position;
    cout<<"账号:";
    cin>>accID;
    position=findCardbyID(accID);//根据卡的位置寻找该卡
    if(position==-1)//提示卡号信息有误
    {
        cout<<"请检查输入的卡号是否有误"<<endl;
        lossAccount();
    }
    else if(array[position].state!=0)//卡号状态不正常
    {
        cout<<"该卡状态非正常,请检查该卡状态是否有误"<<endl;
        clerkwork();
    }
    else//卡号正确
    {
        cout<<"姓名:"<<array[position].name<<endl;
        cout<<"密码:";
        int j=0;//输出星号操作
        while((str[j]=getch())!=13)
       {
           if(str[j]==8)
           {
               cout<<"\b";
               j--;
           }
           else
           {
               putch('*');
               j++;
           }
       }
       str[j]='\0';
       cout<<endl;
       if(strcmp(str,array[position].password)!=0)//密码不正确
        {
            cout<<"密码不正确,重新进行挂失操作"<<endl;
            lossAccount();
        }
       else//密码正确
        {
            cout<<"挂失成功!"<<endl;
            array[position].state=-1;
            cout<<"返回主页面请按“0”";
            if(cin>>c&&c==0)
            {
                clerkwork();
            }
        }
    }
}


void jiegua()//解挂操作
{
    char str[10];
    int c;
    long accID;//输入的卡号
    int position;
    cout<<"账号:";
    cin>>accID;
    position=findCardbyID(accID);//根据卡的位置寻找该卡
    if(position==-1)//提示卡号信息有误
    {
        cout<<"请检查输入的卡号是否有误并重新操作"<<endl;
        jiegua();
    }
    else if(array[position].state==-1)//卡号状态为挂失
    {
        cout<<"姓名:"<<array[position].name<<endl;
        cout<<"密码:";
        int j=0;//输出星号操作
        while((str[j]=getch())!=13)
       {
           if(str[j]==8)
           {
               cout<<"\b";
               j--;
           }
           else
           {
               putch('*');
               j++;
           }
       }
       str[j]='\0';
       cout<<endl;
       if(strcmp(str,array[position].password)!=0)//密码不正确
        {
            cout<<"密码不正确,重新进行解挂操作"<<endl;
            jiegua();
        }
       else//密码正确
        {
                cout<<"解挂成功!"<<endl;
                array[position].state=0;
                cout<<"返回主页面请按“0”"<<endl;
                if(cin>>c&&c==0)
                {
                    clerkwork();
                }
        }
    }
    else//卡号正确
    {
        cout<<"该卡状态非解挂,请检查该卡状态是否有误"<<endl;
        clerkwork();
    }
}


void changepassword()//改密操作
{
    char b[10],c[10];
    char str[10];
    int p;
    long accID;//输入的卡号
    int position;
    cout<<"账号:";
    cin>>accID;
    position=findCardbyID(accID);//根据卡的位置寻找该卡
    if(position==-1)//提示卡号信息有误
    {
        cout<<"请检查输入的卡号是否有误"<<endl;
        lossAccount();
    }
    else if(array[position].state!=0)//卡号状态不正常
    {
        cout<<"该卡状态非正常,请检查该卡状态是否有误"<<endl;
        clerkwork();
    }
    else//卡号正确
    {
        cout<<"姓名:"<<array[position].name<<endl;
        cout<<"密码:";
        int j=0;//输出星号操作
        while((str[j]=getch())!=13)
       {
           if(str[j]==8)
           {
               cout<<"\b";
               j--;
           }
           else
           {
               putch('*');
               j++;
           }
       }
       str[j]='\0';
       cout<<endl;
       if(strcmp(str,array[position].password)!=0)//密码不正确
        {
            cout<<"密码不正确,重新进行改密操作"<<endl;
            changepassword();
        }
       else//密码正确
     {
        cout<<"新密码:";
        int i=0;//输出星号操作
        while((b[i]=getch())!=13)
       {
           if(b[i]==8)
           {
               cout<<"\b";
               i--;
           }
           else
           {
               putch('*');
               i++;
           }
       }
       b[i]='\0';
        cout<<endl<<"确认密码:";
        int k=0;//输出星号操作
        while((c[k]=getch())!=13)
       {
           if(c[k]==8)
           {
               cout<<"\b";
               k--;
           }
           else
           {
               putch('*');
               k++;
           }
       }
       c[k]='\0';
        if(strcmp(b,c)==0)
        {
            strcpy(array[position].password,b);//字符型换密码
            cout<<endl<<"修改成功!"<<endl;
            cout<<"返回主页面请按“0”";
            if(cin>>p&&p==0)
            {
                clerkwork();
            }
        }
        else
        {
            cout<<"两次密码不同,请重新操作!"<<endl;
            changepassword();
        }
    }
    }
}


运行结果:

    

   


知识点总结:

查找了好多知识,也学习了很多~

学习心得:

原本以为800行很夸张,原来是我想多了,duang~duang~duang~,真真的费脑筋啊

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值