现在的位置: 首页 > 综合 > 正文

银行系统(万里长征始于足下)

2014年02月04日 ⁄ 综合 ⁄ 共 9431字 ⁄ 字号 评论关闭
/*
 * Copyright (c) 2013, 烟台大学计算机学院
* All rights reserved.
* 作    者: 霍雨佳
* 完成日期:2013 年12月20日
* 版 本 号:v1.0
* 问题描述:银行系统。
* 样例输入:
* 样例输出:
* 问题分析:设计程序完成银行的各种基本功能。
*/
#include <iostream>
#include <cstdio>
#include <conio.h>   //getch头文件
#include <string.h>
#include <iomanip>  //setw头文件
#include <fstream>//操作文件必写
#include <cstdlib>//调用 exit(1)需要包含cstdlib
using namespace std;
#define MAXACCOUNTNUMBER 20000//银行中可开卡数量

struct Account //声明一个银行卡的类型(结构体)
{
    long accNumber;      //卡号
    char accName[20];    //户主
    char password[7];    //密码
    double balance;      //余额
    char identity[19];   //身份证号
    int state;           //状态 0:正常  -1:挂失 -2:冻结 -3:销户
};
//银行中所有卡
Account array[MAXACCOUNTNUMBER];
//表示银行中已开卡的数量
int size=0;
//银行卡的开号初始值
long initCardNum=100001;
void openAccount(); //开户
void save();         //存款
void mainFrame();    //主界面
void getpass(char password[7]);     //初始密码
void dlmima();       //客户登录密码
void take();         //取款
void search();        //查询
void cancel();        //销户
void denglu();        //工作人员登录密码
void gongzuoxm();      //工作人员登录姓名
void shenfen(char shenfen[19]);        //身份证确认
void khshenfen();        //开户身份证号
void lose();          //挂失
void jiegua();          //解挂
void dongjie();             //冻结
void jiedong();             //解冻
int searchAccount(long accNumber);//找卡
void duchu();       //读文件
void shuru();       //读入文件
int main()
{
    int name;
    cout<<"=================================="<<endl;
    cout<<"++                              ++"<<endl;
    cout<<"++ 欢迎使用储蓄业务综合使用平台 ++"<<endl;
    cout<<"++                              ++"<<endl;
    cout<<"=================================="<<endl;
    cout<<"请输入您的用户名";  //工作人员
    cin>>name;
    denglu() ;   //工作人员登录密码
    duchu();//读文件
    mainFrame(); //主界面
    return 0;
}

void mainFrame()//主界面
{
    int order;//order 操作指令
    cout<<"+----------------------------+"<<endl;
    cout<<"+ 开户 请按1 ++ 存款 请按2   +"<<endl;
    cout<<"+ 取款 请按3 ++ 查询 请按4   +"<<endl;
    cout<<"+ 销户 请按5 ++ 挂失 请按6   +"<<endl;
    cout<<"+ 冻结 请按7 ++ 解挂 请按8   +"<<endl;
    cout<<"+ 解冻 请按9 ++ 退出 请按10  +"<<endl;
    cout<<"+----------------------------+"<<endl;
    cout<<"请输入操作指令"<<endl;
    cin>>order;
    switch(order)
    {
    case 1:
        openAccount();
        break;
    case 2:
        save();
        break;
    case 3:
        take();
        break;
    case 4:
        search();
        break;
    case 5:
        cancel();
        break;
    case 6:
        lose();
        break;
    case 7:
        dongjie();
        break;
    case 8:
        jiegua();
        break;
    case 9:
        jiedong();
        break;
    case 10:
        cout<<"欢迎下次使用"<<endl;
        break;
    default:
        break;

    }
}

void openAccount()
{
    char password[7]="",password1[7]="";
    cout<<"请输入户主姓名:"<<endl;
    cin>>array[size].accName;
    array[size].accNumber=initCardNum++;
    getpass(password);   //密码*输入
    cout<<"请确认密码"<<endl;
    getpass(password1);
    if (strcmp(password,password1)==0 )
    {
        strcpy(array[size].password,password);
    }
    else
    {
        cout<<"两次输入密码不相同重新输入"<<endl;
        getpass(password);            //密码*输入
        cout<<"请确认密码"<<endl;
        getpass(password1);
    }
    khshenfen();  //身份证号*输入
    cout<<"请输入金额:"<<endl;
    cin>>array[size].balance;
    array[size].state=0;
    cout<<setiosflags(ios::right);
    cout<<"+---------------------------------------------------+"<<endl;
    cout<<"+"<<setw(10)<<"卡号"<<"||"<<setw(10)<<"户主"<<"||"<<setw(10)<<"金额"<<"||"<<endl;
    cout<<"+---------------------------------------------------+"<<endl;
    cout<<"+"<<setw(10)<<array[size].accNumber<<"||"<<setw(10)<<array[size].accName<<"||"<<setw(10)<<array[size].balance<<"||"<<endl;
    cout<<"+---------------------------------------------------+"<<endl;
    cout<<"状态:";
    switch(array[size].state)
    {
    case 0:
        cout<<"正常"<<endl;
        break;
    case -1:
        cout<<"挂失"<<endl;
        break;
    case -2:
        cout<<"冻结"<<endl;
        break;
    case -3:
        cout<<"销户"<<endl;
        break;
    default:
        break;
    }
    cout<<"+-------------------------------------------+"<<endl;
    cout<<"开户成功"<<endl;
    size++;
    shuru();
    cout<<"请输入任意键返回主菜单..."<<endl;
    fflush(stdin);     //清空缓存区
    getchar();   //使其在未输入前在该处暂时停留
    mainFrame();  //主界面
}
void getpass(char password[7])  //初始密码
{
    cout<<"请输入您的六位数密码"<<endl;//密码只能为数字
    char ch;
    int i=0;
    while(i<6)
    {
        ch=getch();
        if(ch>='0'&&ch<='9')
        {
            putch('*');
            password[i]=ch;
            i++;
        }
    }shuru();
    cout<<endl;
    return;
}
void khshenfen() //开户身份证号
{
    cout<<"请输入您的18位身份证号"<<endl;//密码只能为数字
    cin>>array[size].identity;
    shuru();
}
void dlmima(char pass[7])   //客户登陆密码
{
    int i=0;//num密码输入次数
    char ch;
    while(i<6)
        {
            ch=getch();
            if(ch>='0'&&ch<='9')
            {
                putch('*');
                pass[i]=ch;
                i++;
            }
        }
}
void save()         //存款
{
    int money,pos;   //存款金额
    long accNum;
    cout<<"请输入卡号"<<endl;
    cin>>accNum;
    pos=searchAccount(accNum);
    if(pos==-1)//确定卡的状态
    {
        cout<<"卡号不存在,请重新选择您要办理的业务!"<<endl;
        mainFrame();
    }
    else if(array[pos].state==0)
    {
        cout<<"请输入存款金额"<<endl;
        cin>>money;
        if(money>0)
        {
            array[pos].balance=array[pos].balance+money;
            shuru();
        }
        else
        {
            cout<<"存款金额不能为负数"<<endl;
            array[pos].balance=array[pos].balance;
        }
    }
    else
    {
        cout<<"请确认该卡状态是否正常"<<endl;
    }
    cout<<"你的账户余额为:"<<array[pos].balance<<endl;
    cout<<"请输入任意键返回主菜单..."<<endl;
    fflush(stdin);     //清空缓存区
    getchar(); //使其在未输入前在该处暂时停留
    mainFrame();//主界面
}
void take()         //取款
{
    int money,pos,n;   //取款金额  n为选择序号
    long accNum;
    char pass[7]=""; //密码
    cout<<"请输入卡号"<<endl;
    cin>>accNum;
    cout<<"请输入密码"<<endl;
    dlmima(pass);
    pos=searchAccount(accNum);
    if(pos==-1)//确定卡的状态
    {
        cout<<"卡号不存在,请重新选择您要办理的业务!"<<endl;
        mainFrame();
    }
    else if(array[pos].state==0)
    {
        if(strcmp(array[pos].password,pass)!=0)
        {
            cout<<"您输入的密码有误!"<<endl;
            cout<<"按3继续办理该业务,按其他数字键返回主界面!";
            cin>>n;
            if(n==3)
            {
                take();
            }
            else
            {
                mainFrame();
            }
        }
        else
        {
            cout<<"请输入取款金额"<<endl;
            cin>>money;
            if(money> array[size].balance)
            {
                cout<<"取款金额大于原有金额"<<endl;
            }
            else
            {
                cout<<"请取走您的金额"<<endl;
                array[size].balance=array[size].balance-money;
                shuru();
            }
        }
    }
    else
    {
        cout<<"请确认该卡状态是否正常"<<endl;
    }
    cout<<"请输入任意键返回主菜单..."<<endl;
    fflush(stdin);     //清空缓存区
    getchar(); //使其在未输入前在该处暂时停留
    mainFrame();//主界面
}
void search()        //查询
{
    int pos,n;   //  n为选择序号
    long accNum;
    char pass[7]=""; //密码
    cout<<"请输入卡号"<<endl;
    cin>>accNum;
    cout<<"请输入密码"<<endl;
    dlmima(pass);
    pos=searchAccount(accNum);
    if(pos==-1)//确定卡的状态
    {
        cout<<"卡号不存在,请重新选择您要办理的业务!"<<endl;
        mainFrame();
    }
    else if(array[pos].state==0)
    {
        if(strcmp(array[pos].password,pass)!=0)
        {
            cout<<"您输入的密码有误!"<<endl;
            cout<<"按4继续办理该业务,按其他数字键返回主界面!";
            cin>>n;
            if(n==4)
            {
                search();
            }
            else
            {
                mainFrame();
            }
        }
        else
        {
            cout<<"您的账号余额为:";
            cout<<array[pos].balance;
            cout<<endl;
        }
    }
    else
    {
        cout<<"请确认该卡状态是否正常"<<endl;
    }
    cout<<"请输入任意键返回主菜单..."<<endl;
    fflush(stdin);     //清空缓存区
    getchar(); //使其在未输入前在该处暂时停留
    mainFrame();//主界面
}
void cancel()        //销户
{
    int pos,n;   //  n为选择序号
    long accNum;
    char pass[7]=""; //密码
    cout<<"请输入卡号"<<endl;
    cin>>accNum;
    cout<<"请输入密码"<<endl;
    dlmima(pass);
    pos=searchAccount(accNum);
    if(pos==-1)//确定卡的状态
    {
        cout<<"卡号不存在,请重新选择您要办理的业务!"<<endl;
        mainFrame();
    }
    else if(array[pos].state==0)
    {
        if(strcmp(array[pos].password,pass)!=0)
        {
            cout<<"您输入的密码有误!"<<endl;
            cout<<"按5继续办理该业务,按其他数字键返回主界面!";
            cin>>n;
            if(n==5)
            {
                cancel();
            }
            else
            {
                mainFrame();
            }
        }
        else
        {
            array[pos].balance=0;
            array[pos].state=-3;
            shuru();
        }
    }
    else
    {
        cout<<"请确认该卡状态是否正常"<<endl;
    }
    cout<<"请输入任意键返回主菜单..."<<endl;
    fflush(stdin);     //清空缓存区
    getchar(); //使其在未输入前在该处暂时停留
    mainFrame();//主界面

}
void gongzuoxm()     //工作人员登录姓名
{
    string name1,name2="123";
    cout<<"请输入您的用户名";

    cin>>name1;//用string型时,直接输入即可

    if(name1!=name2)
    {
        cout<<"用户名输入有误"<<endl;
        gongzuoxm() ;
    }
}
void denglu()        //工作人员登录密码
{
    string pass1,pass="123456";
    cout<<"请输入您的六位数密码";

    cin>>pass1;//用string型时,直接输入即可

    if(pass!=pass1)
    {
        cout<<"密码输入有误"<<endl;
        denglu() ;
    }
}
void lose()          //挂失
{
    int pos,n;   //  n为选择序号
    long accNum;
    char pass[7]=""; //密码
    cout<<"请输入卡号"<<endl;
    cin>>accNum;
    cout<<"请输入密码"<<endl;
    dlmima(pass);
    pos=searchAccount(accNum);
    if(pos==-1)//确定卡的状态
    {
        cout<<"卡号不存在,请重新选择您要办理的业务!"<<endl;
        mainFrame();
    }
    else if(array[pos].state==0)
    {
        if(strcmp(array[pos].password,pass)!=0)
        {
            cout<<"您输入的密码有误!"<<endl;
            cout<<"按6继续办理该业务,按其他数字键返回主界面!";
            cin>>n;
            if(n==6)
            {
                lose();
            }
            else
            {
                mainFrame();
            }
        }
        else
        {
            array[pos].state=-1;//挂失
            shuru();
cout<<"挂失成功"<<endl;
        }
    }
    else
    {
        cout<<"请确认该卡状态是否正常"<<endl;
    }
    cout<<"请输入任意键返回主菜单..."<<endl;
    fflush(stdin);     //清空缓存区
    getchar(); //使其在未输入前在该处暂时停留
    mainFrame();//主界面
}
void dongjie()             //冻结
{
    int pos,n;   //  n为选择序号
    long accNum;
    char pass[7]=""; //密码
    cout<<"请输入卡号"<<endl;
    cin>>accNum;
    cout<<"请输入密码"<<endl;
    dlmima(pass);
    pos=searchAccount(accNum);
    if(pos==-1)//确定卡的状态
    {
        cout<<"卡号不存在,请重新选择您要办理的业务!"<<endl;
        mainFrame();
    }
    else if(array[pos].state==0)
    {
        if(strcmp(array[pos].password,pass)!=0)
        {
            cout<<"您输入的密码有误!"<<endl;
            cout<<"按6继续办理该业务,按其他数字键返回主界面!";
            cin>>n;
            if(n==6)
            {
                dongjie();
            }
            else
            {
                mainFrame();
            }
        }
        else
        {
            array[pos].state=-2;//冻结
            shuru();
            cout<<"冻结成功"<<endl;
        }
    }
    else
    {
        cout<<"请确认该卡状态是否正常"<<endl;
    }
    cout<<"请输入任意键返回主菜单..."<<endl;
    fflush(stdin);     //清空缓存区
    getchar(); //使其在未输入前在该处暂时停留
    mainFrame();//主界面
}
void jiedong()            //解冻
{
    int pos,n;   //  n为选择序号
    long accNum;
    char pass[7]=""; //密码
    cout<<"请输入卡号"<<endl;
    cin>>accNum;
    cout<<"请输入密码"<<endl;
    dlmima(pass);
    pos=searchAccount(accNum);
    if(pos==-1)//确定卡的状态
    {
        cout<<"卡号不存在,请重新选择您要办理的业务!"<<endl;
        mainFrame();
    }
    else if(array[pos].state==0)
    {
        if(strcmp(array[pos].password,pass)!=0)
        {
            cout<<"您输入的密码有误!"<<endl;
            cout<<"按9继续办理该业务,按其他数字键返回主界面!";
            cin>>n;
            if(n==9)
            {
                jiedong();
            }
            else
            {
                mainFrame();
            }
        }
        else
        {
            array[pos].state=0;
            shuru();
            cout<<"解冻成功"<<endl;
        }
    }
    else
    {
        cout<<"请确认该卡状态是否正常"<<endl;
    }
    cout<<"请输入任意键返回主菜单..."<<endl;
    fflush(stdin);     //清空缓存区
    getchar(); //使其在未输入前在该处暂时停留
    mainFrame();//主界面
}
void jiegua()          //解挂
{
    int pos,n;   //  n为选择序号
    long accNum;
    char pass[7]=""; //密码
    cout<<"请输入卡号"<<endl;
    cin>>accNum;
    cout<<"请输入密码"<<endl;
    dlmima(pass);
    pos=searchAccount(accNum);
    if(pos==-1)//确定卡的状态
    {
        cout<<"卡号不存在,请重新选择您要办理的业务!"<<endl;
        mainFrame();
    }
    else if(array[pos].state==0)
    {
        if(strcmp(array[pos].password,pass)!=0)
        {
            cout<<"您输入的密码有误!"<<endl;
            cout<<"按8继续办理该业务,按其他数字键返回主界面!";
            cin>>n;
            if(n==8)
            {
                jiegua();
            }
            else
            {
                mainFrame();
            }
        }
        else
        {
            array[pos].state=0;
            shuru();
            cout<<"解挂成功"<<endl;
        }
    }
    else
    {
        cout<<"请确认该卡状态是否正常"<<endl;
    }
    cout<<"请输入任意键返回主菜单..."<<endl;
    fflush(stdin);     //清空缓存区
    getchar(); //使其在未输入前在该处暂时停留
    mainFrame();//主界面
}
int searchAccount(long accNumber)//找卡
{
    int i,pos=-1;
    for(i=0; i<size; i++)
    {
        if(array[i].accNumber==accNumber&&array[i].state!=-2)
        {
            pos=i;//找到了这张卡
            break;
        }
    }
    return pos;  //返回下标
}
void duchu()       //读文件
{
    ifstream infile("f1.txt",ios::in);
    if(!infile)
    {
        cerr<<"open error!"<<endl;
        exit(1);
    }
    while(infile>>array[size].accNumber>>array[size].accName>>array[size].password>>array[size].balance>>array[size].identity>>array[size].state)
    {
        size++;
    }
    if(size==0)
    {
        initCardNum=100001;
    }else{
        initCardNum=array[size-1].accNumber+1;
    }

    infile.close();
}
void shuru()       //读入文件
{
    int i;
    ofstream outfile("f1.txt",ios::out);
    if(!outfile)
    {
        cerr<<"open error!"<<endl;
        exit(1);
    }
    else
    {
        for(i=0;i<size;i++)
        outfile<<array[i].accNumber<<"  "<<array[i]. accName<<"  "<<array[i].password<<"  "<<array[i].balance<<"  "<<array[i].identity<<"  "<<array[i].state<<endl;
    }
    outfile.close();
}

运行结果:

      (*^__^*) 嘻嘻……

       这是本学期做的最大的一个项目了,现在能发成博文,内心无比的激动以及兴奋~~~

       这个项目可真是历经波折才完成的啊!这是这学期心血的结晶了吧,好像学的知识都用上了,O(∩_∩)O哈哈~

       加油加油↖(^ω^)↗

抱歉!评论已关闭.