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