学术休假之银行储蓄系统

来源:互联网 发布:淘宝梦幻挤线器 编辑:程序博客网 时间:2024/04/24 16:43

银行储蓄系统指导

  该银行储蓄系统的目标,将是设计一个可以支持多名储户开户、存款、取款、转帐、改密、挂失、解挂、销户等功能的系统,以此初步体会完整系统开发,综合运用已经学过的知识。
  以下提示中,给出了多个层次的需要,可以先保证最基本、最简单功能的实现,迭代式地完善,实现“改进意见”中的要求。
  按照模块化程序设计要求,充分利用函数实现功能。不赞成写很长的函数,提倡用多文件组织。

功能

图       示

说明和提示

登录

  输入业务员用户名和密码。3次输入不正确,强制退出程序。

基本要求

  可以只设一名业务员,用全局变量表示其用户名和密码,写在程序中。

改进意见

  可以用一个文本文件保存多名业务员的信息。定义结构体表示业务员,定义该种类型的结构体数据,在程序开始执行时,读入业务员信息,以支持多名业务员登录。

  用文件保存密码时,一般不用“明文”,而要加密处理。

系统菜单

  当业务员信息验证后,进入到系统主控菜单,由业务员为储户办理各种业务,直到按0后退出。

基本要求

  每次启动系统,都是从0用户开始办理业务

改进意见

  储户的信息都保存在文件中,在处理业务前需要将信息读入。

开户


账号由系统自动分配

确认密码和密码不同时要拒绝。

开户后,账号状态为0-正常

  增加一个银行账户(银行卡)

  银行账户如下定义:

struct Account

{

    long accNumber;//卡号

    string accName;//户主

    string password;//密码

    double balance;//余额

    string identity;//身份证号

    int state;//状态 0:正常 -1:挂失 2:销户

};

  设全局变量Number,表示第一张卡号

long Number=10001;

  在开户时,新增账户的卡号,即为Number,并更改该值,以使下一个账户获得连续值。

基本要求

  设银行只支持2000个账户,用下面的数组存储用户的信息

Account array[2000];

改进意见

1、要求密码是6位数字字符,身份证号由18位数字字符构成,身份证号最后一位可以是x

2、用静态数组太浪费空间,改用动态数组

3、将用户信息改为链表,是更合适的做法

4、关闭程序前,将数据写入文件,银行的业务信息得以保存。开始运行程序时,再将文件中的数据读入。保存密码时,可以考虑加密。

5、新增账户的卡号,也可以保存在专门文件中。

6、账户状态state可以定义为枚举型。

销户

  输入账号,确认后,将余额全部取完,并将状态state置为2-销户。

  办理销户的账号,其状态必须为“0-正常”(下同)。

存款

  输入账号、金额,记录存款后的余额。

取款

  输入账号、金额,记录取款后的余额。

  取款额不能超过余额。

查询

  输入账号,显示账户信息。

转账

  输入转出账号、金额、转入账户,记录转账后的余额。

  账户必须存在,扣除转出账户的金额,要与转入账户增加的金额相同。

挂失

  输入账号,将状态改变为 1-挂失

解挂

  输入账号,将状态为 1-挂失 的账户状态改为 0-正常

改密

  用新密码替代旧密码。

  新密码必须与确认密码相同。

计算利息

(这属于银行后台管理的功能,不体现在界面上,以上的设计尚不能支持真实系统中的计息功能,故将此作为选做功能。)

  现行银行计息的规则是,每半年计算一次利息,并将利息加到账号余额中。

  如果要计算利息,需要将每一笔存、取、转的信息记录下来,以获得各个时间段内的金额,完成利息计算。

  请自行设计有关的数据结构完成设计

 


代码如下:

#include <fstream>#include <iostream>#include <string>#include <cstdio>#include <cstdlib>using namespace std;struct SalesData{    string Name;                     //业务员用户名    string word;                     //业务员密码};SalesData Salesman[10];              //业务员信息,最大允许十名业务员操作。struct Account{    long accNumber;                  //卡号    string accName;                  //户主    string password;                 //密码    double balance;                  //余额    string identity;                 //身份证号    int state;                       //状态 0:正常 -1:挂失 2:销户};Account array[2000];                 //银行用户信息,最大支持2000名用户。bool Home( );                        //主页void Menu( );int salesman( );                     //打开业务员数据文件int OpenData( );                     //打开银行用户数据文件int Checksalesman(string );          //检查业务员是否存在并读取业务员信息bool CheckPassword(string ,int );    //判断密码是否正确void SaveData(int );                 //保存信息至银行数据文件void Menu( );                        //菜单void OpenAccount(int );              //开户void DeleteAccount( );               //销户void SaveMoney( );                   //存款void DepositMoney( );                //取款void SearchMessage( );               //查询void TransferAccount( );             //转账void LossReport( );                  //挂失void HangingSolutions( );            //解挂void ChangePassword( );              //改密int main( ){    int num,count;    if (Home( ))    {        count=OpenData( );        do        {            Menu( );            cout<<"请输入操作指令:";            cin>>num;            if (num==0)                break;            else if (num==1)                OpenAccount(count);            else if(num==2)                DeleteAccount( );            else if(num==3)                SaveMoney();            else if(num==4)                DepositMoney( );            else if(num==5)                SearchMessage( );            else if(num==6)                TransferAccount( );            else if(num==7)                LossReport( );            else if(num==8)                HangingSolutions( );            else if(num==9)                ChangePassword( );            SaveData(count);        }        while(1);    }    cout<<"谢谢您的光临,欢迎下次再来。"<<endl;    return 0;}bool Home(){    int Num=1;    string salesname;    string password;    int number;    cout<<"+ - - - - - - - - - - +"<<endl;    cout<<"欢 迎 光 临 刘 氏 银 行"<<endl;    cout<<"+ - - - - - - - - - - +"<<endl;    do    {        cout<<"请输入业务员用户名:";        cin>>salesname;        number=Checksalesman(salesname);        cout<<"请输密码:";        cin>>password;        if (CheckPassword(password,number))        {            cout<<"密码输入正确,正在进入..."<<endl;            return true;        }        else        {            if (Num>3)            {                cout<<"密码输入错误超过3次,正在退出系统;"<<endl;                return false;            }            cout<<"用户名或密码输入错误,请重新输入."<<endl;            Num++;            continue;        }    }    while (1);}void Menu( ){    cout<<"+--------------------------+"<<endl;    cout<<"+ 1 开户   2 销户   3 存款 +"<<endl;    cout<<"+ 4 取款   5 查询   6 转账 +"<<endl;    cout<<"+ 7 挂失   8 解挂   9 改密 +"<<endl;    cout<<"+                   0 退出 +"<<endl;    cout<<"+--------------------------+"<<endl;}int salesman( ){    int num=0;    ifstream infile("BankSalesman.txt",ios::in);    if (!infile)    {        cout<<"open error!";        exit(1);    }    while (infile>>Salesman[num].Name>>Salesman[num].word)        num++;    infile.close();//;    return num;}int OpenData( ){    int num=0;    ifstream infile("BankData.txt",ios::in);    if (!infile)    {        cout<<"open error!";        exit(1);    }    while (infile>>array[num].accNumber)    {        infile>>array[num].accName;        infile>>array[num].password;        infile>>array[num].balance;        infile>>array[num].identity;        infile>>array[num].state;        num++;    }    infile.close();//读入完毕要关闭文件    return num;}void SaveData(int num){    ofstream outfile("BankData.txt",ios::out);    if (!outfile)    {        cout<<"open error!";        exit(1);    }    int i;    for (i=0; i<num; i++)    {        outfile<<array[i].accNumber<<" "<<array[i].accName<<" "<<array[i].password<<" "<<array[i].balance<<" "<<array[i].identity<<" "<<array[i].state<<endl;    }    outfile.close();//用完了必须关闭}int Checksalesman(string name){    int i,num;    num=salesman();    for(i=0; i<num; i++)    {        if (Salesman[i].Name==name)            return i;    }    return -1;}bool CheckPassword(string words,int num){    if (words==Salesman[num].word)        return true;    else        return false;}void OpenAccount(int num){    string pass1,pass2,name;    double money;    int i;    long account;    i=num;    account=10001+num;    do    {        cout<<"正在开户"<<endl;        cout<<"帐号:"<<account<<endl;        cout<<"户主姓名:";        cin>>name;        cout<<"密码:";        cin>>pass1;        cout<<"确认密码:";        cin>>pass2;        if (pass1==pass2)        {            cout<<"存入金额:";            cin>>money;            cout<<"身份证号:";            cin>>array[i].identity;            array[i].accName=name;            array[i].accNumber=account;            array[i].password=pass1;            array[i].balance=money;            array[i].state=0;            ofstream outfile("BankData.txt",ios::out);            if (!outfile)            {                cout<<"open error!";                exit(1);            }            outfile<<array[i].accNumber<<" "<<array[i].accName<<" "<<array[i].password<<" "<<array[i].balance<<" "<<array[i].identity<<" "<<array[i].state<<endl;            outfile.close();            cout<<"开户成功!"<<endl;            break;        }        else        {            cout<<"两次密码输入不一致,请重新输入。"<<endl;            continue;        }    }    while(1);}void DeleteAccount( ){    string pass;    int i,account,Num=1;    char opt;    cout<<"待销户帐号:";    cin>>account;    i=account-10001;    cout<<"姓名:";    cout<<array[i].accName<<endl;    do    {        cout<<"密码:";        cin>>pass;        if (pass==array[i].password)        {            cout<<"余额:"<<array[i].balance<<endl;            cout<<"确认销户 (y/n) ?";            cin>>opt;            if (array[i].state==0)            {                if (opt=='Y' || opt=='y')                {                    array[i].state=2;                    cout<<"取款"<<array[i].balance<<"元,销户成功!"<<endl;                    break;                }                else if (opt=='N'||opt=='n' )                {                    cout<<"取消操作成功!"<<endl;                    break;                }            }            else            {                cout<<"该账户已经销户或挂失!如有疑问,请到柜台咨询!"<<endl;                break;            }        }        else        {            if (Num>3)            {                cout<<"密码输入错误超过3次,即将退出系统。"<<endl;                break;            }            cout<<"密码输入有误,请重新输入!"<<endl;            Num++;            continue;        }    }    while (1);}void SaveMoney( ){    int account,i;    double money;    cout<<"账号:";    cin>>account;    i=account-10001;    if (array[i].state==0)    {        cout<<"姓名:";        cout<<array[i].accName<<endl;        cout<<"存款额:";        cin>>money;        array[i].balance+=money;        cout<<"现余额共计"<<array[i].balance<<"元,存款成功!";    }    else    {        cout<<"该账户不存在或已挂失!如有疑问,请到柜台咨询!";    }}void DepositMoney( ){    int account,i,Num=1;    double money;    string pass;    cout<<"账号:";    cin>>account;    i=account-10001;    if (array[i].state==0)    {        cout<<"姓名:";        cout<<array[i].accName<<endl;        do        {            cout<<"密码:";            cin>>pass;            if (pass==array[i].password)            {                cout<<"取款额:";                cin>>money;                if (money<=array[i].balance)                {                    array[i].balance-=money;                    cout<<"现余额共计"<<array[i].balance<<"元,取款成功!";                    break;                }                else                {                    cout<<"余额不足,取款失败!"<<endl;                    continue;                }            }            else            {                if (Num>3)                {                    cout<<"密码输入错误超过3次,即将退出系统。"<<endl;                    break;                }                cout<<"密码输入有误,请重新输入!"<<endl;                Num++;                continue;            }        }        while(1);    }    else    {        cout<<"该账户已销户或已挂失!如有疑问,请到柜台咨询!";    }}void SearchMessage( ){    int account,i,Num=1;    string pass;    cout<<"账号:";    cin>>account;    i=account-10001;    cout<<"姓名: ";    cout<<array[i].accName<<endl;    do    {        cout<<"密码:";        cin>>pass;        if (pass==array[i].password)        {            cout<<"余额:"<<array[i].balance<<endl;            cout<<"当前状态:";            if (array[i].state==0)                cout<<"正常"<<endl;            else if(array[i].state==1)                cout<<"挂失"<<endl;            else if(array[i].state==2)                cout<<"销户"<<endl;            cout<<"身份证号:"<<array[i].identity<<endl;            cout<<"查询完毕!"<<endl;            break;        }        else        {            if (Num>3)            {                cout<<"密码输入错误超过3次,即将退出系统。"<<endl;                break;            }            cout<<"密码输入有误,请重新输入!"<<endl;            Num++;            continue;        }    }    while(1);}void TransferAccount( ){    int account1,account2,i,j,Num=1;    double money;    string pass;    cout<<"转出账号:";    cin>>account1;    i=account1-10001;    if (array[i].state==0)    {        do        {            cout<<"密码:";            cin>>pass;            if (pass==array[i].password)            {                cout<<"转账金额:";                cin>>money;                if (money>=array[i].balance)                {                    cout<<"转入账号:";                    cin>>account2;                    j=account2-10001;                    if (array[j].state==0)                    {                        array[j].balance+=money;                        array[i].balance-=money;                        cout<<"转账成功!余额"<<array[i].balance<<"元。"<<endl;                        break;                    }                    else                    {                        cout<<"您所转入的账号已销户或挂失!"<<endl;                        break;                    }                }                else                {                    cout<<"余额不足!转账失败。"<<endl;                    continue;                }            }            else            {                if (Num>3)                {                    cout<<"密码输入错误超过3次,即将退出系统。"<<endl;                    break;                }                cout<<"密码输入有误,请重新输入!"<<endl;                Num++;                continue;            }        }        while(1);    }    else    {        cout<<"您的账户已注销或挂失!如有疑问,请到柜台查询!"<<endl;    }}void LossReport( ){    int account,i,Num=1;    string pass;    cout<<"账号:";    cin>>account;    i=account-10001;    cout<<"姓名:"<<array[i].accName<<endl;    do    {        cout<<"密码:";        cin>>pass;        if (pass==array[i].password)        {            if (array[i].state==0)            {                array[i].state=1;                cout<<"挂失成功。"<<endl;                break;            }            else            {                cout<<"该用户已经挂失或已经销户,无法挂失。"<<endl;                break;            }        }        else        {            if (Num>3)            {                cout<<"密码输入错误超过3次,即将退出系统。"<<endl;                break;            }            cout<<"密码输入有误,请重新输入!"<<endl;            Num++;            continue;        }    }    while(1);}void HangingSolutions( ){    int account,i,Num=1;    string pass;    cout<<"账号:";    cin>>account;    i=account-10001;    cout<<"姓名:"<<array[i].accName<<endl;    do    {        cout<<"密码:";        cin>>pass;        if (pass==array[i].password)        {            if (array[i].state==1)            {                array[i].state=0;                cout<<"解挂成功。"<<endl;                break;            }            else            {                cout<<"该用户为正常状态或已经销户,无需解挂。"<<endl;                break;            }        }        else        {            if (Num>3)            {                cout<<"密码输入错误超过3次,即将退出系统。"<<endl;                break;            }            cout<<"密码输入有误,请重新输入!"<<endl;            Num++;            continue;        }    }    while(1);}void ChangePassword( ){    int account,i,Num=1;    string pass,pass1,pass2;    cout<<"账号:";    cin>>account;    i=account-10001;    cout<<"姓名:"<<array[i].accName<<endl;    do    {        cout<<"密码:";        cin>>pass;        if (pass==array[i].password)        {            cout<<"新密码: ";            cin>>pass1;            cout<<"确认密码:";            cin>>pass2;            if (pass1==pass2)            {                array[i].password=pass1;                cout<<"修改成功!"<<endl;                break;            }            else            {                cout<<"前后密码输入不一致,请重新输入。"<<endl;                break;            }        }        else        {            if (Num>3)            {                cout<<"密码输入错误超过3次,即将退出系统。"<<endl;                break;            }            cout<<"密码输入有误,请重新输入!"<<endl;            Num++;            continue;        }    }    while(1);}



图就不发了,网络不是很好,上传不了。

程序能成功运行,但不是要求的每种功能一个界面,所以可能在运行界面中也有我没发现的问题,为了编这个程序,当初用了我快一下午的时间,不过编完后有些问题然后因为一些事就没有去修改,刚刚饭后开始修改,中间除了去HDU上做了一道题外,一直修改到现在,总算是解决了。


0 0
原创粉丝点击