##..C++程序设计项目实训——银行储蓄系统

本文档介绍了使用C++编程实现银行储蓄系统的项目实践,包括bank.h、bank.cpp、user.cpp和work.cpp四个关键文件的详细内容及运行结果的截图展示。
摘要由CSDN通过智能技术生成
main.cpp
/***********************************************************
* 版权所有(C)2015, 烟台大学计算机与控制工程学院
* All rights reserved.
*
* 文件名称:main.cpp
* 文件标识:无
* 内容摘要:该代码用于获取满足后缀要求的第一个文件
* 其它说明:无
* 当前版本:V1.0
* 作    者:吴胜男
* 完成日期:2015/7/16
*
* 修改记录:
* 修改日期:2015/7/16
* 版 本 号:V1.0
* 修 改 人:吴胜男
* 修改内容:创建
**********************************************************/
#include <iostream>
#include "bank.h"
using namespace std;
/*********************************************************
* 功能描述:主函数,显示进入页面
* 输入参数:无
* 输出参数:无
* 返回值:0-成功  其他-失败
* 其它说明:无
************************************************************/
int main()
{
    cout<<"+----------------------+\n";
    cout<<"+    欢迎光临CSDN银行  +\n";
    cout<<"+----------------------+\n";
    Bank b;
    if (pass())
    {
        b.work();
    }
    return 0;
}


bank.h

/***********************************************************
* 版权所有(C)2015, 烟台大学计算机与控制工程学院
* All rights reserved.
*
* 文件名称:bank.h
* 文件标识:无
* 内容摘要:该代码用于获取满足后缀要求的第一个文件
* 其它说明:无
* 当前版本:V1.0
* 作    者:吴胜男
* 完成日期:2015/7/16
*
* 修改记录:无
* 修改日期:2015/7/16
* 版 本 号:V1.0
* 修 改 人:吴胜男
* 修改内容:创建
**********************************************************/
#ifndef BANK_H_INCLUDED
#define BANK_H_INCLUDED
#include <cstring>
using namespace std;
const int upNum=2000; //系统最多容纳的用户数
class Bank;
class User
{
public:
    void setUser(int acc, char *nam, int pw, double bal,int sta,char *ID,char *add);
    void showName();
    void showIDaddress();
    void showBalance(string prompt); //显示余额,前面加上提示词prompt
    bool passwordIsRight();   //校验密码,输入的密码正确则返回true
    bool isNormalUser(); //存款、取款、转帐等功能,需要账户处于正常姿态,处于正常状态时返回true,其他情形返回false并提示
    friend class Bank;   //将Bank声明为友元类,方便其访问数据成员


private:
    int account; //账号
    int password;  //密码
    char name[15];   //用户名
    double balance;  //账户余额
    int status;  //状态 0-正常  1-挂失  2-销户
    char IDnum[19];//身份证号
    char address[15];//家庭住址
};

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();  //输入账号查询用户,返回用户在对象数组中的下标
	// fun: 	写二进制文件
	// param:	pFileName	- 文件名
	// ret: 	true		- 写成功,
	//			false		- 写失败
	bool  WriteBinFile(const char* pFileName);

	// fun: 	读二进制文件
	// param:	pFileName	- 文件名
	// ret: 	true		- 成功,
	//			false		- 失败
	bool  ReadBinFile(const char* pFileName);
private:
    int N;  //实际的用户数目
    User *users[upNum];  //User数组,耗空间啊!改进方案:1.对象指针数组;2. 动态数组;3. 链表
};

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

#endif // BANK_H_INCLUDED


bank.cpp

/***********************************************************
* 版权所有(C)2015, 烟台大学计算机与控制工程学院
* All rights reserved.
*
* 文件名称:bank.cpp
* 文件标识:无
* 内容摘要:该代码用于获取满足后缀要求的第一个文件
* 其它说明:无
* 当前版本:V1.0
* 作    者:吴胜男
* 完成日期:2015/7/16
*
* 修改记录:无
* 修改日期:2015/7/16
* 版 本 号:V1.0
* 修 改 人:吴胜男
* 修改内容:创建
**********************************************************/
#include <iostream>
#include <fstream>
#include <cstdlib>
#include "bank.h"
#include <ctype.h>
using namespace std;
//static int old_count=0;//保证每次调用构造函数时不再存入老用户数据
const static char* cs_FileName = "account_Bin.dat";
/*********************************************************
* 功能描述:用构造函数读取文件中保存的业务数据
* 输入参数:cs_FileName\pFileName
* 输出参数:无
* 返 回 值:无
* 其它说明:用二进制文件存入,读取时用ios::app输出方式打开文件
            每次循环读取的时候开辟新空间。
* 其他说明:使用eek()说明:eek()只是查看缓冲的下一个元素,并不读取(即文件内部的指针不会向后移动)
************************************************************/
Bank::Bank()
{
   ReadBinFile(cs_FileName);
  // ReadTxtFile("account.dat");
}
bool  Bank::ReadBinFile(const char* pFileName)
{// note: 读取顺序必须与写一致,参看 WriteBinFile
	 ifstream infile(pFileName,ios::app|ios::binary);//可使用ios::app以输出方式打开文件,写入的数据添加在文件尾!!!!!
    if(!infile)
    {
        cerr<<"open error!"<<endl;
        return false;
    }
    int i=0;
    while(infile.peek()!=EOF&&i<upNum)//当读到文件结尾或者用户数量达到上限的时候退出循环
    {
        User *tmp_user=new User();//开辟空间
        if(NULL==tmp_user)
        {
            cout<<"no enough momory\n"<<endl;
            exit(1);
        }
        infile.read((char*)tmp_user, sizeof(User));//长度为User类所有数据成员的总长度
        users[i]=tmp_user;
        cout<<users[i]->account<<" "<<users[i]->password<<" "<<users[i]->balance<<endl;
        i++;
    }
    N = i; //用静态数据成员
    //old_count=N;//老用户数目
    infile.close();
    return true;
}

/*********************************************************
* 功能描述:用析构函数,在退出系统时,将数据保存到文件中
* 输入参数:无
* 输出参数:无
* 返 回 值:无
* 其它说明:(1)用二进制存入
            (2)追加和覆盖见代码中
************************************************************/
Bank::~Bank()
{

    WriteBinFile(cs_FileName);
}

bool  Bank::WriteBinFile(const ch
  • 11
    点赞
  • 38
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值