程序设计项目——银行储蓄系统

main.cpp

/***********************************************************
* 版权所有 (C)2015, xinbin。
* *
文件名称: main.cpp
* 文件标识:无
* 内容摘要:该代码用于获取满足后缀要求的第一个文件
* 其它说明:无
* 当前版本: V1.0
* 作 者:辛彬
* 完成日期: 20150717
* *
修改记录1:
* 修改日期: 20150717
* 版本号: V1.0
* 修改人: xinbin
* 修改内容:创建
**********************************************************/
#include <iostream>
#include "bank.h"
using namespace std;
/*主函数:*/
int main()
{
    cout<<"+----------------------+\n";
    cout<<"+    欢迎光临华夏银行  +\n";
    cout<<"+----------------------+\n";
    Bank b;
    if (pass())
    {
        b.work();
    }
    return 0;
}

bank.h

/***********************************************************
* 版权所有 (C)2015, xinbin。
* *
文件名称: bank.h
* 文件标识:无
* 内容摘要:该代码用于获取满足后缀要求的第一个文件
* 其它说明:无
* 当前版本: V1.0
* 作 者:辛彬
* 完成日期: 20150717
* *
修改记录1:
* 修改日期: 20150717
* 版本号: V1.0
* 修改人: xinbin
* 修改内容:创建
**********************************************************/
#ifndef BANK_H_INCLUDED
#define BANK_H_INCLUDED
#include <cstring>
using namespace std;
const int upNum=2000; //系统最多容纳的用户数
class Bank;
struct detail
{
    char first[10];
    double money;
    char second[10];
    double balance;
};
class User
{
public:
    User(){};
    void setUser(int acc, char nam[], int pw, double bal,int sta,char str[20], char add[]);
    void showName();
    void showBalance(string prompt); //显示余额,前面加上提示词prompt
    void showDetail();  //显示身份证号,业务明细等详细信息
    bool passwordIsRight();   //校验密码,输入的密码正确则返回true
    bool isNormalUser(); //存款、取款、转帐等功能,需要账户处于正常姿态,处于正常状态时返回true,其他情形返回false并提示
    friend class Bank;   //将Bank声明为友元类,方便其访问数据成员
private:
    int account; //账号
    int password;  //密码
    char name[10];   //用户名
    double balance;  //账户余额
    char identity[20];  //身份证号
    char address[20];  //家庭住址
    detail d[10];  //业务细节,每个账户最多显示十条,要显示更多请开通会员
    int n;  //业务细节个数
    int status;  //状态 0-正常  1-挂失  2-销户
};

class Bank
{
public:
    Bank();  //开始前从文件中读数据,存在数组中
    ~Bank();   //程序结束前,将数组中的数据写入到文件中
    void work();  //业务驱动
    void openAccount(); //开户
    void cancelAccount();  //注销账户
    void save();   //存款
    void withdraw();   //取款
    void showAccount(); //查询余额
    void transferAccounts();  //转账
    void reportLoss();  //挂失
    void cancelLoss();  //解除挂失
    void updatePassword();   //更改密码
    int getUser();  //输入账号查询用户,返回用户在对象数组中的下标
private:
    int N;
    User *users[upNum];  //使用对象指针数组
};

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

#endif // BANK_H_INCLUDED

bank.cpp

/***********************************************************
* 版权所有 (C)2015, xinbin。
* *
文件名称: bank.cpp
* 文件标识:无
* 内容摘要:该代码用于获取满足后缀要求的第一个文件
* 其它说明:无
* 当前版本: V1.0
* 作 者:辛彬
* 完成日期: 20150717
* *
修改记录1:
* 修改日期: 20150717
* 版本号: V1.0
* 修改人: xinbin
* 修改内容:创建
**********************************************************/
#include <iostream>
#include <fstream>
#include <cstdlib>
#include "bank.h"
#include <ctype.h>
#include <cstdio>
using namespace std;

/*********************************************************
* 功能描述:用构造函数读取文件中保存的业务数据
* 输入参数: 无
* 输出参数: 无
* 返回值: 无
************************************************************/
Bank::Bank()
{
    ifstream infile("account.dat",ios::in|ios::binary);  //用二进制方式打开文件
    if(!infile)
    {
        cerr<<"open error!"<<endl;
        exit(1);
    }
    int i=0;
    users[i]=new User;  //读入数据前先对对象分配空间
    infile.read((char*)&(*users[i]),sizeof(*users[i]));  //先读入文件中的第一个账户信息至数组
    while(!infile.eof())
    {
        ++i;
        users[i]=new User;
        infile.read((char*)&(*users[i]),sizeof(*users[i]));  //读入接下来的数据
    }
    N=i;
    infile.close();
}

/*********************************************************
* 功能描述:用析构函数,在退出系统时,将数据保存到文件中
* 输入参数:无
* 输出参数:无
* 返回值: 无
************************************************************/
Bank::~Bank()
{
    ofstream outfile("account.dat",ios::out|ios::binary);  //将数据保存至文件,用二进制方式存储
    if(!outfile)    //测试文件打开操作是否成功,不成功则提示后退出。
    {
        cerr<<"open error!"<<endl;
        exit(1);
    }
    int i;
    for(i=0; i<N; i++)
    {
        outfile.write((char*)&(*users[i]),sizeof(*users[i]));  //将数组中的数据保存至文件
    }
    outfile.close();
    for(i=0; i<N; i++)
    {
        delete users[i];  //释放对象数组的空间
    }
}

/*********************************************************
* 功能描述:办理业务
* 输入参数:无
* 输出参数:无
* 返回值: 无
************************************************************/
void Bank::work()
{
    char iChoice;   //用于选择系统功能
    //办理业务
    do
    {
        iChoice = chooseInMenu();  //从菜单中获得功能代码
        switch(iChoice)
        {
        case ‘1‘:
            openAccount(); //开户
            break;
        case ‘2‘:
            cancelAccount();  //注销账户
            break;
        case ‘3‘:
            save();  //存款
            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<<"欢迎您再来. "<<endl;
        }
    }
    while(iChoice!=‘0‘);
}

/*********************************************************
功能:开户
说明:在进入系统时,在读入数据过程中,已经记录了用户数为N,在数组中对应下标为0~N-1
  开户时要增加一个用户,只要为下标为N的数组元素置值,并在成功之后令N++即可。
  账号由系统自动生成(10001+序号),保证其连续,这样在顺序增加的时候,就保证了其有序。
************************************************************/
void Bank::openAccount()
{
    ofstream outfile("account.dat",ios::out|ios::binary);
    if(!outfile)    //测试文件打开操作是否成功,不成功则提示后退出。
    {
        cerr<<"open error!"<<endl;
        exit(1);
    }
    if(N==upNum)
    {
        cout<<"银行用户数已经达到上限,不能再开户";
        return;
    }
    //下面正常办理开户业务
    int acc;   //账号
    char nam[20];   //姓名
    int pw;   //密码
    double bal;   //金额
    char str[20];   //身份证号
    int sta;   //状态
    char add[20];  //地址
    cout<<"正在开户"<<endl;
    acc=10001+N;
    cout<<"账号:"<<acc<<endl;
    cout<<"户主姓名:";
    cin>>nam;
    int iPass1, iPass2;
    cout<<"密码:";
    iPass1=inputPassword();  //输入密码1
    cout<<"确认密码:";
    iPass2=inputPassword();  //输入密码2
    if(iPass1==iPass2)
    {
        pw=iPass1;
        sta=0; //账户状态为“正常”
        cout<<"存入金额:";
        scanf("%lf",&bal); //此处如果用cin>>bal,单步调试时会出错,应该是IDE的问题
        while(1)
        {
            cout<<"输入身份证号:";
            cin>>str;
            if(strlen(str)!=18)  //身份证号不足18位,重新输入
            {
                cout<<"身份证格式错误,请重新输入"<<endl;
                continue;
            }
            else
                break;
        }
        cout<<"输入地址:";
        cin>>add;
        users[N]=new User;
        (*(users[N])).setUser(acc, nam, pw, bal, sta, str, add); //向数组写入数据,用users[N]->setUser(acc, nam, pw, bal, sta, str)容易出错,我也不知道为什么
        (*(users[N])).n=0;  //开始记录业务
        N++; //正式用户数增加1,确认了新用户已经加入
        cout<<"成功开户!"<<endl;
    }
    else
    {
        cout<<"两次密码不一致,未成功开户!"<<endl; //没有N++,则读入的值无效
    }
}

/*********************************************************
功能:注销账户
说明:找到账户,并将其状态改为2-注销即可。
注销前应该检查余额,应该先取款再注销
************************************************************/
void Bank::cancelAccount()
{
    int who;  //查找到该账号在数组中对应的下标
    char ch;
    who = getUser();  //根据账号查询用户,返回用户的下标
    if(who>=0)   //说明id账户存在
    {
        if(users[who]->status==0)
        {
            while(1)
            {
                users[who]->showName();
                if(users[who]->passwordIsRight())
                {
                    users[who]->showBalance("余额");  //提示"余额"二字,显示金额
                    while(1)
                    {
                        cout<<"确认销户?(y/n)";
                        cin>>ch;
                        if(ch==‘y‘)
                        {
                            users[who]->status=2;  //状态变为注销
                            cout<<"取款"<<users[who]->balance<<"元,销户成功!"<<endl;
                            users[who]->balance=0;  //取款后余额变0
                            return;
                        }
                        else if(ch==‘n‘)
                        {
                            cout<<"销户失败!"<<endl;
                            return;
                        }
                        else
                        {
                            cout<<"输入错误!"<<endl;
                            continue;
                        }
                    }
                }
            }
        }
        else
        {
            cout<<"无法销户!该账户未开通或已挂失。"<<endl;
        }
    }
}

/*********************************************************
功能:存款
说明:需要保证账户存在,且处于正常状态
************************************************************/
void Bank::save()
{
    int who;
    double money;
    who = getUser();  //根据账号查询用户,返回用户的下标
    if(who>=0)   //说明id账户存在
    {
        if(users[who]->status==0)
        {
            users[who]->showName();
            cout<<"存款额:";
            scanf("%lf",&money);
            users[who]->balance+=money;
            users[who]->showBalance("存款后,您有");
            if(users[who]->n<10)
            {
                strcpy(users[who]->d[users[who]->n].first,"存款:");
                users[who]->d[users[who]->n].money=money;
                strcpy(users[who]->d[users[who]->n].second,"余额:");
                users[who]->d[users[who]->n].balance=users[who]->balance;
                users[who]->n++;
            }
        }
        else
        {
            cout<<"该账户不存在或已注销!"<<endl;
        }
    }
    return;
}

/*********************************************************
功能:取款
说明:需要保证账户存在,且处于正常状态,另外,余额要足够取
************************************************************/
void Bank::withdraw()
{
    int who;
    double money;
    who = getUser();  //根据账号查询用户,返回用户的下标
    if(who>=0)   //说明id账户存在
    {
        if(users[who]->isNormalUser())
        {
            users[who]->showName();
            if(users[who]->passwordIsRight())
            {
                while(1)
                {
                    cout<<"取款额:";
                    cin>>money;
                    if(money<=users[who]->balance)
                    {
                        users[who]->balance-=money;
                        cout<<"现余额共计"<<users[who]->balance<<"元,取款成功!"<<endl;
                        if(users[who]->n<10)
                        {
                            strcpy(users[who]->d[users[who]->n].first,"取款:");
                            users[who]->d[users[who]->n].money=money;
                            strcpy(users[who]->d[users[who]->n].second,"余额:");
                            users[who]->d[users[who]->n].balance=users[who]->balance;
                            users[who]->n++;
                        }
                        return;
                    }
                    else
                    {
                        cout<<"余额不足,取款失败!"<<endl;
                        continue;
                    }
                }
            }
        }
    }
    return;
}

/*********************************************************
功能:查询账户
说明:显示账户信息
************************************************************/
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<<"状态:"<<sta[users[who]->status]<<endl;
            users[who]->showDetail();
        }
    }
    return;
}

/*********************************************************
功能:转账
说明:需要保证两个账户都存在,且处于正常状态,另外,转出账户的余额要足够
************************************************************/
void Bank::transferAccounts()
{
    int whoout, whoin;
    double money;
    cout<<"转出自";
    whoout = getUser();  //根据账号查询用户,返回用户的下标
    if(whoout>=0)   //说明id账户存在
    {
        if(users[whoout]->isNormalUser())
        {
            users[whoout]->showName();
            if(users[whoout]->passwordIsRight())
            {
                while(1)
                {
                    cout<<"转账金额:";
                    cin>>money;
                    if(money<=users[whoout]->balance)
                    {
                        cout<<"转入账号:";
                        whoin = getUser();
                        if(whoin>=0)
                        {
                            if(users[whoin]->isNormalUser())
                            {
                                users[whoout]->balance-=money;
                                users[whoin]->balance+=money;
                                users[whoout]->showBalance("转账后,您还有");
                                if(users[whoout]->n<10)
                                {
                                    strcpy(users[whoout]->d[users[whoout]->n].first,"转出:");
                                    users[whoout]->d[users[whoout]->n].money=money;
                                    strcpy(users[whoout]->d[users[whoout]->n].second,"余额:");
                                    users[whoout]->d[users[whoout]->n].balance=users[whoout]->balance;
                                    users[whoout]->n++;
                                }
                                if(users[whoin]->n<10)
                                {
                                    strcpy(users[whoout]->d[users[whoout]->n].first,"转入:");
                                    users[whoin]->d[users[whoin]->n].money=money;
                                    strcpy(users[whoout]->d[users[whoout]->n].second,"余额:");
                                    users[whoin]->d[users[whoin]->n].balance=users[whoin]->balance;
                                    users[whoin]->n++;
                                }
                                return;
                            }
                        }
                    }
                    else
                    {
                        cout<<"余额不足,请重新输入转账金额!"<<endl;
                        continue;
                    }
                }
            }
        }
    }
    return;
}

/*********************************************************
功能:挂失账户
************************************************************/
void Bank::reportLoss()
{
    int who;
    who = getUser();  //根据账号查询用户,返回用户的下标
    if(who>=0)   //说明id账户存在
    {
        if(users[who]->isNormalUser())
        {
            users[who]->showName();
            if(users[who]->passwordIsRight())
            {
                users[who]->status=-1;
                cout<<"挂失成功!"<<endl;
                return;
            }
        }
    }
    return;
}

/*
功能:解除挂失
*/
void Bank::cancelLoss()
{
    int who;
    who = getUser();  //根据账号查询用户,返回用户的下标
    if(who>=0)   //说明id账户存在
    {
        if(users[who]->isNormalUser())
        {
            users[who]->showName();
            if(users[who]->passwordIsRight())
            {
                users[who]->status=0;
                cout<<"解挂成功!"<<endl;
                return;
            }
        }
    }
    return;
}

/*
功能:改密码
*/
void Bank::updatePassword()
{
    int who;
    int iPass1, iPass2;
    who = getUser();  //根据账号查询用户,返回用户的下标
    if(who>=0)   //说明id账户存在
    {
        users[who]->showName();
        if(users[who]->passwordIsRight())
        {
            cout<<"新密码:";
            iPass1=inputPassword();  //输入密码1
            cout<<"确认密码:";
            iPass2=inputPassword();  //输入密码2
            if(iPass1==iPass2)
            {
                users[who]->password=iPass1;
                cout<<"修改成功!"<<endl;
            }
            else
            {
                cout<<"两次输入不同,修改失败!"<<endl;
            }
        }
    }
    return;
}

/*********************************************************
功能:输入账号查询用户,返回用户在数组中的下标
入口参数:要查询用户的账号
返回值:如果该用户存在,返回该用户在数组中的下标,否则,返回一个负数(-1)
说明:
  由账号自动产生,使按账号有序,本模块采用二分查找
************************************************************/
int Bank::getUser()
{
    int id;
    cout<<"账号:";
    cin>>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<<"该用户不存在,本次操作失败!"<<endl;
    return index; //若找到,其值在0~N-1间,否则,保持-1
}

user.cpp

/***********************************************************
* 版权所有 (C)2015, xinbin。
* *
文件名称: user.cpp
* 文件标识:无
* 内容摘要:该代码用于获取满足后缀要求的第一个文件
* 其它说明:无
* 当前版本: V1.0
* 作 者:辛彬
* 完成日期: 20150717
* *
修改记录1:
* 修改日期: 20150717
* 版本号: V1.0
* 修改人: xinbin
* 修改内容:创建
**********************************************************/
#include <iostream>
#include "bank.h"
#include <cstring>
using namespace std;

void User::setUser(int acc, char nam[], int pw, double bal,int sta,char str[],char add[])
{
    account=acc;
    password=pw;
    strcpy(name,nam);
    balance=bal;
    status=sta;
    strcpy(identity,str);
    strcpy(address,add);
}
void User::showName()
{
    cout<<"户主姓名:"<<name<<endl;
}
void User::showBalance(string prompt)
{
    cout<<prompt<<" "<<balance<<" 元"<<endl;
}
void User::showDetail()
{
    cout<<"身份证号:";
    int i;
    for(i=0; i<17; ++i)
        cout<<identity[i];
    cout<<"X"<<endl;  //将最后一位设为X
    cout<<"家庭地址为:"<<address<<endl;
    if(n!=0)
    {
        cout<<"业务明细:"<<endl;
        for(i=0; i<n; i++)
        {
            cout<<d[i].first<<d[i].money<<‘\t‘<<d[i].second<<d[i].balance<<endl;
        }
    }
}
bool User::passwordIsRight()
{
    int iPass;
    bool right = true;
    cout<<"输入密码:";
    iPass=inputPassword();
    if(iPass!=password)
    {
        right = false;
        cout<<"输入密码错误,不能继续操作!"<<endl;
    }
    return right;
}

bool User::isNormalUser()
{
    bool normal = true;
    if(status!=0)
    {
        normal = false;
        cout<<"该账户处于"<<(status==1?"挂失":"销户")<<"状态,不能继续操作..."<<endl;
    }
    return normal;
}

work.cpp

/***********************************************************
* 版权所有 (C)2015, xinbin。
* *
文件名称: work.cpp
* 文件标识:无
* 内容摘要:该代码用于获取满足后缀要求的第一个文件
* 其它说明:无
* 当前版本: V1.0
* 作 者:辛彬
* 完成日期: 20150717
* *
修改记录1:
* 修改日期: 20150717
* 版本号: V1.0
* 修改人: xinbin
* 修改内容:创建
**********************************************************/
#include <iostream>
#include <fstream>
#include <conio.h>
#include <cstdlib>
#include <cstring>
#include <ctype.h>
#include <memory.h>

#include "bank.h"
using namespace std;
/*
功能:验证用户密码
返回值:密码正确,返回1;
        不能通过密码验证,返回0
*/
int pass()
{
    char sNameInFile[20];   //由文件中读出的业务员用户名
    char sPassInFile[20];  //文件中保存的密码,这一版本中,用字符保存密码
    ifstream infile("password.txt",ios::in|ios::binary);
    if(!infile)
    {
        cout<<"password file cannot open!"<<endl;
        exit(1);
    }
    memset(sNameInFile,0,20*sizeof(char));
    memset(sPassInFile,0,20*sizeof(char));
    infile.read((char*)&sNameInFile,6);
    infile.read((char*)&sPassInFile,6);
    infile.close();

    char sName[20];   //业务员登录时输入的用户名
    char sPass[20];  //业务员登录时输入的密码
    char ch;
    int iTry=3;   //进入系统时尝试的次数
    int right = 0;  //要返回的结果:0-不正确 1-正确

    //进入系统,密码三次不对将退出
    do
    {
        cout<<"请输入业务员用户名:";
        cin>>sName;
        cout<<"请输入密码:";
        int i=0;
        while((ch=getch())!=‘\r‘)  //getch在接受输入后,不在屏幕上显示
        {
            sPass[i++]=ch;
            putchar(‘*‘);   //接受任何字符,屏幕上只显示*
        }
        sPass[i]=‘\0‘;
        fflush(stdin);
        cout<<endl;;
        if(strcmp(sPass,sPassInFile)==0&&strcmp(sName,sNameInFile)==0)
        {
            right = 1;
            break;
        }
        else
        {
            iTry--;
            if(iTry>0)
                cout<<"超过3次将退出,你还可以尝试"<<iTry<<"次!"<<endl;
            else
            {
                cout<<"对不起,你不能进入系统"<<endl;;
            }
        }
    }
    while(iTry);
    return right;
}

/*
关于getch()的一点说明:
所在头文件:conio.h
函数用途:从控制台读取一个字符,但不显示在屏幕上
函数原型:int getch(void)
返回值:读取的字符
在不同平台,输入回车,getch()将返回不同数值,而getchar()统一返回10(即\n)
1)windows平台下ENTER键会产生两个转义字符 \r\n,因此getch返回13(\r)。
2)unix、 linux系统中ENTER键只产生 \n ,因此getch返回10(\n)。
3)MAC OS中ENTER键将产生 \r ,因此getch返回13(\r)。
为避免键盘缓存区中未读出的字符影响程序,用fflush(stdin);清除输入缓存区
*/

/*
功能:显示菜单并由业务员选择
返回值:用户选择的功能,范围0-9
*/
char chooseInMenu()
{
    char i;   //此处用int会出现bug,当输入字母时会发生错误,因此我做了点改动
    while(1)
    {
        cout<<endl;;
        cout<<"+----------------------------+"<<endl;
        cout<<"+ 1 开户    2 销户    3 存款 +"<<endl;
        cout<<"+ 4 取款    5 查询    6 转账 +"<<endl;
        cout<<"+ 7 挂失    8 解挂    9 改密 +"<<endl;
        cout<<"+                     0 退出 +"<<endl;
        cout<<"+----------------------------+"<<endl;
        cout<<"请输入操作指令:";
        cin>>i;
        if(i>=‘0‘ && i<=‘9‘)
            break;
        else
            cout<<"请重新选择功能"<<endl;
    }
    return i;
}

/*
功能:输入密码
返回值:整型的密码值
技术说明:
(1)此功能在多个模块中都要用到且功能单一,故分离出来,单独作业一个函数
(2)为了便于在输入中只显示*,接受输入时以字符形式输入,而后转为对应的整型数
(3)规定密码由不全为0的6位数字构成(当开头是‘0‘时,实际不足6位),一旦输入错误将重新输入
附:在实际的系统中,密码通常用字符串描述,即使只允许出现数字字符,本例仅作为参考
*/
int inputPassword()
{
    char ch;  //接收字符形式密码
    int iPass=0;   //要转换为数字
    int i;
    while(1)
    {
        for(i=0; i<6; i++)
        {
            ch=getch();  //输入但不显示
            putchar(‘*‘);   //输出*
            if(isdigit(ch))
                iPass=iPass*10+(ch-‘0‘);
            else
            {
                iPass=0;
                break;  //退出for循环后,再次接受
            }
        }
        fflush(stdin); //清除键盘缓存区中已经有的输入
        cout<<endl;;
        if(iPass==0)  //此条件成立可能由两种情况引起:输入了非数字字符被直接重置为0,或6位全0后正常退出for循环
        {
            cout<<"密码要求全为数字,且不能全0!"<<endl;;
            cout<<"请重新输入密码: ";
        }
        else
            break;
    }
    return iPass;
}

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-10-18 20:58:54

程序设计项目——银行储蓄系统的相关文章

c++课程实训 银行储蓄系统

基本要求:定义了用户类(User)和银行类(Bank),用成员函数实现各种功能,多文件组织程序.能用文本文件存取数据(如演示样例中给出的技术): 拓展方向: 序号 加分项目 细       则 1 改变Bank类中用户信息的存储方式 用对象的指针数组存储(User *user[upNum]) 或者用动态数组(User *users.空间用new分配) 2 功能扩充 按银行实际业务的要求,添加User类中的数据成员,可以记录身份证号.家庭住址等信息,并在相关业务中使用这些数据. 记录用户的每一笔业

银行储蓄系统的设计与实现

作者:夏晓林 地点:烟大计控 时间:2017.04.23 题目描述: 模拟银行柜台业务的要求,实现一个小型的银行储蓄系统软件的开发,其中包括开户.存款.取款.转账.改密.挂失.解挂.销户等功能. 在开发过程中,请按照问题求解过程的要求,体验开发过程中需要做的工作.除了下面的系统基本功能的描述外,鼓励开展调研,使开发的软件尽量符合实际的银行储蓄系统的实际业务内容.可以参考8.1节中关于选用合适的数据结构的讨论,确定数据存储方案. 要求在程序运行过程中或者程序结束运行之前,将业务发生的数据保存到文件

学术休假-银行储蓄系统

银行储蓄系统包括:支持多名储户开户.存款.取款.转帐.改密.挂失.解挂.销户等功能. 登录 输入业务员用户名和密码.3次输入不正确,强制退出程序. 基本要求 可以只设一名业务员,用全局变量表示其用户名和密码,写在程序中. 改进意见 可以用一个文本文件保存多名业务员的信息.定义结构体表示业务员,定义该种类型的结构体数据,在程序开始执行时,读入业务员信息,以支持多名业务员登录. 用文件保存密码时,一般不用"明文",而要加密处理. 系统菜单 当业务员信息验证后,进入到系统主控菜单,由业务员为

课程设计--银行储蓄系统

介绍: 银行储蓄系统包括:支持多名储户开户.存款.取款.转帐.改密.挂失.解挂.销户等功能. 登录 输入业务员用户名和密码.3次输入不正确,强制退出程序. 基本要求 可以只设一名业务员,用全局变量表示其用户名和密码,写在程序中. 系统菜单 当业务员信息验证后,进入到系统主控菜单,由业务员为储户办理各种业务,直到按0后退出. 基本要求 每次启动系统,都是从0用户开始办理业务 开户 账号由系统自动分配 确认密码和密码不同时要拒绝. 开户后,账号状态为0-正常 销户 输入账号,确认后,将余额全部取完,

C++课程设计-银行储蓄系统

*  课程设计概述 */ *  C++课程设计: *  银行储蓄系统 * *  功 能 介 绍: *  面向用户版的银行系统,模拟自己进入银行时相关的操作. *  首次进入银行时,需要办理相应的银行卡.    *  当用户有银行卡后,可以办理银行有的一般业务. *  业务包括:查询.存款.取款.转账.销户 *                 挂失.解挂.改密. *  同时设置了管理员的一个功能,查询银行所有账户的信息. * *  功能实现 :    *  文件保存与读取 *  为了更好的模拟真实

银行储蓄系统:问题定义及分析系统可行性

1.问题定义(系统目标及范围说明书): 项目名称:XX银行储蓄业务系统 问题描述:方便储蓄用户存取等业务.解决当前银行业务员处理储蓄业务时间消耗长.工作量大.效率低 项目目标:开发一个方便储蓄用户的银行计算机储蓄业务处理系统 项目范围:硬件主要是银行专用计算机以及ATM等,费用预计为XX元. 可行性研究:系统分析员与银行的相关人员进行研究讨论,研究讨论时长XX天,研究费用XX元. 2.系统可行性分析: 经济可行性:总费用<经济效益客观 可行   社会因素可行性:不存在违法违规.侵权等法律道德问题

程序设计项目实训——银行储蓄系统

注:本程序采用多文件组织的方法 Headers:bank.h ?/* *版权所有 (c) 2015, 烟台大学计算机与控制工程学院. *All rights reserved. *文件名称: main.cpp *作者:陆云杰 *完成日期:2015年7月15日 *版本号:v1.0 *内容摘要:对所有类,函数进行了定义 *修改内容:1.增加了一个Day类用于记录开户以及进行存取款转账等服务时的日期 2.增加计算两个时间之间的天数之差的函数 3.增加了根据业务发生的情况来计算活期利息的函数 4.运用动

黑马程序员——银行调度系统

题目需求: 1,银行内有6个业务窗口,1 - 4号窗口为普通窗口,5号窗口为快速窗口,6号窗口为VIP窗口. 2,有三种对应类型的客户:VIP客户,普通客户,快速客户(办理如交水电费.电话费之类业务的客户). 3,异步随机生成各种类型的客户,生成各类型用户的概率比例为: VIP客户:普通客户:快速客户  =  1 :6 :3. 4,客户办理业务所需时间有最大值和最小值,在该范围内随机设定每个VIP客户以及普通客户办理业务所需的时间,快速客户办理业务所需时间为最小值(提示:办理业务的过程可通过线程

C++应用实战项目:大并发高性能可伸缩服务器设计及开发(Http服务器、银行储蓄系统示例)

刚开始我也不信,可自己根据http://url.cn/TgrIZT注册一下,然后通过这个网站获取了学习卡的用户名和密码之后,真的有200元抵用券到了自己的账户中,所以,我就买了一些课程,自从在北风网学习了一些课程之后,我感觉自己对于提成技能特别高,可能和自己刚刚毕业有关系,在学校每天都是理论知识,没有过多的时间,但是自从在北风网上学习了一些项目的知识之后,尤其和老师们一起做项目,我起初以为只是简单的视频教程,谁知道和培训机构一样,老师还可以给你解答问题,费用只相当于培训机构的10%,后来自己又学