Odi银行储蓄系统

问题及代码(多文件组织):

bank.h

/**********************************************
*版权所有 (C)2015,ChenQin
*文件名称:bank.h
*文件标识:无
*内容摘要:在此文件内定义一个Bank类和一个User类,同时定义业务员登录菜单显示和键盘输入密码等普通函数
*其他说明:无
*当前版本:v1.0
*作    者:陈琴
*完成日期:20150715
*
*修改记录1:
*修改日期:无
*版本号:v1.0
*修改人:Chen Qin
*修改内容:对象指针数组
************************************************/
#ifndef BANK_H_INCLUDED
#define BANK_H_INCLUDED
#include 
using namespace std;
const int upNum=2000; //系统最多容纳的用户数
class Bank;
class User
{
public:
    void setUser(int acc, string nam, string id,string add,int pw, double bal,int sta);  //设置用户信息
    void showName(); //显示用户姓名
    void showBalance();  //显示用户余额
    bool passwordIsRight();   //校验密码,输入的密码正确则返回true
    bool isNormalUser(); //存款、取款、转帐等功能,需要账户处于正常姿态,处于正常状态时返回true,其他情形返回false并提示
    friend class Bank;   //将Bank声明为友元类,方便其访问数据成员
private:
    int account; //账号
    int password;  //密码
    string name;   //用户名
    string ID;   //身份证号
    string address;   //家庭住址
    double balance;  //账户余额
    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();  //业务员登录
int chooseInMenu(); //显示菜单并由业务员选择
int inputPassword();   //返回键盘输入的密码

#endif // BANK_H_INCLUDED

work.cpp

/**********************************************
*版权所有 (C)2015,ChenQin
*文件名称:work.cpp
*文件标识:无
*内容摘要:业务员登录时从文件中读取其信息,登录后的菜单显示以及输入密码等
*其他说明:无
*当前版本:v1.0
*作    者:陈琴
*完成日期:20150715
*
*修改记录1:
*修改日期:无
*版本号:v1.0
*修改人:Chen Qin
*修改内容:无
************************************************/
#include 
#include   //输入输出文件流
#include   //使用getch()函数时所需加的头文件
#include   //常用数据库
#include 
#include   //在使用isdigit(ch),对字符串进行处理

#include "bank.h"
using namespace std;
/***********************************************
*功能描述:业务员登录并验证其密码
*输入参数:输入业务员姓名,密码
*输出参数:若输入密码正确将显示菜单,三次密码错误,不能通过密码验证,将退出系统。
*返回值:密码正确返回1,错误返回0
*其他说明:从文件中读取业务员信息,判断从文件中输出的业务员信息和输入的信息是否一致,一致才能进行接下来的业务。
***********************************************/
int pass()  //业务员登录
{
    char sNameInFile[20];   //由文件中读出的业务员用户名
    char sPassInFile[20];  //文件中保存的密码,这一版本中,用字符保存密码
    ifstream infile("password.txt",ios::in);  //读入文件
    if(!infile)
    {
        cout<<"password file cannot open!"<>sNameInFile>>sPassInFile;
    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<0)
                cout<<"超过3次将退出,你还可以尝试"<>i;
        if(i>=0 && i<=9)
            break;
        else
            cout<<"请重新选择功能"<

user.cpp

/**********************************************
*版权所有 (C)2015,ChenQin
*文件名称:user.cpp
*文件标识:无
*内容摘要:进行User类的成员函数的定义,主要有输入用户信息,显示姓名,显示余额,判断用户密码是否正确,判断用户状态是否正常
*其他说明:无
*当前版本:v1.0
*作    者:陈琴
*完成日期:20150715
*
*修改记录1:
*修改日期:无
*版本号:v1.0
*修改人:Chen Qin
*修改内容:无
************************************************/
#include 
#include "bank.h"
using namespace std;
/***********************************************
*功能描述:用户信息的设置
*输入参数:无
*输出参数:无
*返回值:无
*其他说明:无
***********************************************/
void User::setUser(int acc, string nam,string id,string add,int pw, double bal,int sta)  //增加了用户的身份证以及家庭住址的信息
{
    account=acc;
    password=pw;
    name=nam;
    ID=id;
    address=add;
    balance=bal;
    status=sta;
}
/***********************************************
*功能描述:显示姓名
*输入参数:无
*输出参数:输出用户姓名
*返回值:无
*其他说明:无
***********************************************/
void User::showName()
{
    cout<<"户主姓名:"<


bank.cpp

/**********************************************
*版权所有 (C)2015,ChenQin
*文件名称:bank.cpp
*文件标识:无
*内容摘要:对Bank类成员函数的定义,主要有文件的数据读取和保存,开户,销户,存款,取款,查询,转账,挂失,解挂,改密等
*其他说明:无
*当前版本:v1.0
*作    者:陈琴
*完成日期:20150715
*
*修改记录1:
*修改日期:20150715
*版本号:v1.0
*修改人:Chen Qin
*修改内容:对象指针数组
************************************************/
#include 
#include   //输入输出文件流
#include   //常用数据库
#include "bank.h"
#include 
using namespace std;
/***********************************************
*功能描述:Bank类的构造函数,用构造函数读取文件中保存的业务数据
*输入参数:文件读入
*输出参数:无
*返回值:无
*其他说明:用静态数据成员记录用户数目
***********************************************/
Bank::Bank()
{
    ifstream infile("account.txt",ios::in);//读入文件
    if(!infile)
    {
        cerr<<"open error!"<>acc>>nam>>id>>add>>pw>>bal>>sta)   //当读取成功……
    {
        users[i]=new User;
        users[i]->setUser(acc,nam,id,add,pw,bal,sta);
        i++;
    }
    N = i; //用静态数据成员
    infile.close();
}
/***********************************************
*功能描述:Bank类的析构函数,在退出系统时,将数据保存到文件中
*输入参数:无
*输出参数:无
*返回值:无
*其他说明:无
***********************************************/
Bank::~Bank()
{
    ofstream outfile("account.txt",ios::out);
    if(!outfile)    //测试文件打开操作是否成功,不成功则提示后退出。
    {
        cerr<<"open error!"<account<<" ";
        outfile<name<<" ";
        outfile<ID<<" ";
        outfile<address<<" ";
        outfile<password<<" ";
        outfile<balance<<" ";
        outfile<status<<" ";
        outfile<>nam;
    int iPass1, iPass2;
    cout<<"密码:";
    iPass1=inputPassword();  //输入密码1
    cout<<"确认密码:";
    iPass2=inputPassword();  //输入密码2
    if(iPass1==iPass2)
    {
        pw=iPass1;
        sta=0; //账户状态为“正常”
        cout<<"身份证号:";
        cin>>id;  //用户输入身份证号
        cout<<"家庭住址:";
        cin>>add;   //用户输入家庭住址
        cout<<"存入金额:";
        cin>>bal;   //用户输入所需存入金额
        users[N]=new User;
        users[N]->setUser(acc, nam,id,add, pw, bal, sta);
        N++; //正式用户数增加1,确认了新用户已经加入
        cout<<"成功开户!"<=0)   //说明id账户存在
    {
        users[who]->showName();
        if(users[who]->passwordIsRight())
        {
            cout<<"余额:";
            users[who]->showBalance();
            cout<balance=0;  //取款后余额变0
                users[who]->status=2;  //状态变为注销
            }
            else
            {
                cout<<"你取消了操作,销户失败!"<=0)   //说明id账户存在
    {
        if(users[who]->status==0)
        {
            users[who]->showName();
            cout<<"输入存款额:";
            cin>>money;
            users[who]->balance+=money;
            cout<<"现余额共计";
            users[who]->showBalance();
            cout<<"存款成功!"<status==1)
        {
            cout<<"该用户处于挂失状态,存款失败!"<=0)   //说明id账户存在
    {
        if(users[who]->isNormalUser())
        {
            users[who]->showName();
            if(users[who]->passwordIsRight())
            {
                cout<<"输入取款额:";
                cin>>money;
                if(money>users[who]->balance)  //判断所取金额是否超过用户余额
                {
                    cout<<"余额不足,取款失败!"<balance-=money;
                    cout<<"取款后余额为:";
                    users[who]->showBalance();
                    cout<=0)   //说明id账户存在
    {

        if(users[who]->passwordIsRight())
        {
            users[who]->showName();
            cout<<"余额:";
            users[who]->showBalance();
            cout<status]<ID<address<=0)   //说明id账户存在
    {
        if(users[whoout]->isNormalUser())
        {
            users[whoout]->showName();
            if(users[whoout]->passwordIsRight())
            {
                cout<<"输入转账金额:";
                cin>>money;
                if(money>users[whoout]->balance)  //判断所转账金额是否超过用户余额
                {
                    cout<<"余额不足,转账失败!"<=0)   //说明id账户存在
                    {
                        if(users[whoin]->isNormalUser())
                        {
                            users[whoout]->balance-=money;
                            users[whoin]->balance+=money;
                            cout<<"转账成功!余额";
                            users[whoout]->showBalance();
                            cout<=0)   //说明id账户存在
    {
        users[who]->showName();
        if(users[who]->passwordIsRight())
        {
            if(users[who]->status==0)
            {
                users[who]->status=1;
                cout<<"挂失成功!"<status==1)
            {
                cout<<"该账户已经处于挂失状态!"<=0)   //说明id账户存在
    {
        users[who]->showName();
        if(users[who]->passwordIsRight())
        {
            if(users[who]->status==0)
            {
                cout<<"该账户处于正常状态,不需要解除挂失!"<status==1)
            {
                users[who]->status=0;
                cout<<"解除挂失成功!"<=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<<"修改成功!"<>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<<"该用户不存在,本次操作失败!"<

main.cpp

/**********************************************
*版权所有 (C)2015,ChenQin
*文件名称:main.cpp
*文件标识:无
*内容摘要:主函数,进入银行主页面
*其他说明:无
*当前版本:v1.0
*作    者:陈琴
*完成日期:20150715
*
*修改记录1:
*修改日期:无
*版本号:v1.0
*修改人:Chen Qin
*修改内容:无
************************************************/
#include 
#include "bank.h"
using namespace std;
/***********************************************
*功能描述:主函数,进入OdiCSDN银行系统时的主页面,开始进行业务操作
*输入参数:无
*输出参数:无
*返回值:0
*其他说明:无
***********************************************/
int main()
{
    cout<<"+----------------------+"<


运行结果:






你可能感兴趣的:(Odi银行储蓄系统)