您的位置:首页 > 其它

课程设计-银行储蓄系统

2015-07-16 23:15 281 查看
银行储蓄系统这个项目在寒假的时候使用结构体的类型写了一份,贺老要求作为实训的项目,所以重新用面向对象的程序设计重新写了一份。

结构体方式——》银行储蓄系统结构体版

介绍:

银行储蓄系统包括:支持多名储户开户、存款、取款、转帐、改密、挂失、解挂、销户等功能。

登录

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

基本要求

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

系统菜单

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

基本要求

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

开户

账号由系统自动分配

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

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

销户

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

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

存款

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

取款

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

取款额不能超过余额。

查询

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

转账

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

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

挂失

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

解挂

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

改密

用新密码替代旧密码。

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

源代码:

下面是源代码:

userdata.h

/***********************************************************
* 版权所有 (C)2015,shao shuai.
*
* 文件名称:bankdata.cpp
* 文件标识:无
* 内容摘要:该代码为UserData类的声明和Admin结构体的声明
* 其它说明:无
* 当前版本: V1.0
* 作   者:邵帅
* 完成日期: 20150715
*
* 修改记录1:
* 修改日期: 20150715
* 版本号: V1.0
* 修改人: shao shuai
* 修改内容:创建
**********************************************************/
#ifndef USERDATA_H_INCLUDED
#define USERDATA_H_INCLUDED
#include <iostream>
#include <string>
using namespace std;
class UserData//用户类
{
private:
	long accNumber;//卡号
	string accName;//户主
	string password;//密码
	double balance;//余额
	string identity;//***号
	string homeads;//家庭住址
	int state;//状态 0:正常 -1:挂失 2:销户
public:
	void SetUser(long a, string n, string p, double b, string i, string h, int s);
	long get_accNumber(){ return accNumber; }
	string get_accName(){ return accName; }
	string get_password(){ return password; }
	double get_balance(){ return balance; }
	string get_id(){ return identity; }
	string get_homeads(){ return homeads; }
	int get_state(){ return state; }
	void set_accNumber(long num){ accNumber = num; }
	void set_accName(string n){ accName = n; }
	void set_password(string p){ password = p; }
	void set_balance(double b){ balance = b; }
	void set_id(string id){ identity = id; }
	void set_homeads(string h){ homeads=h; }
	void set_state(int s){ state = s; }
	bool CheckUserPass();
};
struct Admin//业务员结构体
{
	string name;
	string password;
};
#endif // USERDATA_H_INCLUDED


bankdata.h
/***********************************************************
* 版权所有 (C)2015,shao shuai.
*
* 文件名称:bankdata.cpp
* 文件标识:无
* 内容摘要:该代码为BankData类的声明
* 其它说明:无
* 当前版本: V1.0
* 作   者:邵帅
* 完成日期: 20150715
*
* 修改记录1:
* 修改日期: 20150715
* 版本号: V1.0
* 修改人: shao shuai
* 修改内容:创建
**********************************************************/
#ifndef BANKDATA_H_INCLUDED
#define BANKDATA_H_INCLUDED
#include <iostream>
#include "userdata.h"
using namespace std;
class BankData//银行数据类
{
public:
	BankData();
	~BankData();
	Admin admin[10];
    UserData *user=new UserData[2000];
	int UserNum;
	bool HomePage();//主页
	int OpenAdmin();//读取Admin的信息
	int SearchAdmin(string, int);//查找Admin
	bool CheckAdminPass(int);//检验用户名是否正确
	void MenuShow();//显示User办理菜单
	bool CheckUser(long acc);//查找User用户名
	//User业务办理
	void OpenUserData();//读取User信息
	void SaveUserData();//保存User信息
	void AddNumber(int);//开户
	void DelNumber(void);//销户
	void AddMoney(void);//存款
	void DelMoney(void);//取款
	void ShowInfo(void);//查询
	void TransferMoney(void);//转账
	void LossReport(void);//挂失
	void SolutionLinked(void);//解挂
	void ChangePass(void);//改密
	//扩展类
	string int2str(int num);//将int型转换成string型
	string gettime();//获取当前系统时间
	void SaveUserLog(int,int);//记录用户日志
	void about();//扩展的关于界面
};
#endif // BANKDATA_H_INCLUDED


userdata.cpp

/***********************************************************
* 版权所有 (C)2015,shao shuai.
*
* 文件名称:bankdata.cpp
* 文件标识:无
* 内容摘要:该代码为UserData类的定义
* 其它说明:无
* 当前版本: V1.0
* 作   者:邵帅
* 完成日期: 20150715
*
* 修改记录1:
* 修改日期: 20150715
* 版本号: V1.0
* 修改人: shao shuai
* 修改内容:创建
**********************************************************/
#include <iostream>
#include "userdata.h"
#include <cstring>
#include <cstdlib>
using namespace std;
/*********************************************************
 * 功能描述:建立user的信息
 * 输入参数:无
 * 输出参数:无
 * 返回值:无
 * 其它说明:从指定文件读取
 ************************************************************/
void UserData::SetUser(long a, string n, string p, double b, string i, string h, int s)
{
	accNumber = a;
	accName = n;
	password = p;
	balance = b;
	identity = i;
	homeads = h;
	state = s;
}
/*********************************************************
 * 功能描述:检验输入user的密码是否正确
 * 输入参数:无
 * 输出参数:无
 * 返回值:无
 * 其它说明:无
 ************************************************************/
bool UserData::CheckUserPass()
{
	string pass;
	int wrong = 0;
	while (1)
	{
		cout << "请输入密码:";
		cin >> pass;
		if (pass == password)
			return true;
		else
		{
			cerr << "密码输入错误,请重新输入。" << endl;
			wrong++;
			if (wrong > 2)
			{
				cout << "User密码输入错误超过3次,即将退出系统..." << endl;
				system("PAUSE");
				return false;
			}
			continue;
		}
	}
}


bankdata.cpp

/***********************************************************
* 版权所有 (C)2015,shao shuai.
*
* 文件名称:bankdata.cpp
* 文件标识:无
* 内容摘要:该代码为BankData类的定义
* 其它说明:无
* 当前版本: V1.0
* 作   者:邵帅
* 完成日期: 20150715
*
* 修改记录1:
* 修改日期: 20150715
* 版本号: V1.0
* 修改人: shao shuai
* 修改内容:创建
**********************************************************/
#include <iostream>
#include "bankdata.h"
#include <cstring>
#include <cstdlib>
#include <fstream>
#include <ctime>
#include <cmath>
using namespace std;
/*********************************************************
 * 功能描述:BankData的默认构造函数
 * 输入参数:无
 * 输出参数:无
 * 返回值:无
 * 其它说明:无
 ************************************************************/
BankData::BankData()//构造函数
{
	long number;
	string name, pass, id, h;
	double balance;
	int state;
	UserNum = 0;
	//开始读取User的信息
	ifstream infile("BankUser.dat", ios::in);
	if (!infile)
	{
		cerr << "打开数据库(BankUser.dat)文件失败!";
		exit(1);
	}
	while (infile >> number >> name >> pass >> balance >> id >> h >> state)
	{
		user[UserNum].SetUser(number, name, pass, balance, id, h, state);
		UserNum++;
	}
	infile.close();
	//User信息读取完毕,总数存入UserNum
}
/*********************************************************
 * 功能描述:BankData的析构函数
 * 输入参数:无
 * 输出参数:无
 * 返回值:无
 * 其它说明:删除动态数组创建的user
 ************************************************************/
BankData::~BankData()//析构函数
{
    delete []user;
}
/*********************************************************
 * 功能描述:BankData的默认构造函数
 * 输入参数:num-将要转换的int型数值
 * 输出参数:无
 * 返回值:string类型的int数值
 * 其它说明:无
 ************************************************************/
string BankData::int2str(int num)//int 2 str
{
    if (num==0)
    return "0" ;
    string str="";
    int num_=num>0?num:-1*num;
    while (num_)
    {
        str=(char)(num_%10+48)+str;
        num_/=10 ;
    }
    if (num<0)
        str="-"+str;
    return str;
}
/*********************************************************
 * 功能描述:获取系统时间
 * 输入参数:无
 * 输出参数:无
 * 返回值:系统时间
 * 其它说明:无
 ************************************************************/
string BankData::gettime()//获取系统时间
{
    time_t curtime=time(0);
    tm tim =*localtime(&curtime);
    int day,mon,year;
    int hour,min,sec;
    string time;
    hour=tim.tm_hour;//时
    min=tim.tm_min;//分
    sec=tim.tm_sec;//秒
    day=tim.tm_mday;//日
    mon=tim.tm_mon;//月
    year=tim.tm_year;//年
    time=int2str(year+1900)+"-"+int2str(mon+1)+"-"+int2str(day)+"_"+int2str(hour)+":"+int2str(min)+":"+int2str(sec);
    return time;
}
/*********************************************************
 * 功能描述:关于界面
 * 输入参数:无
 * 输出参数:无
 * 返回值:无
 * 其它说明:无
 ************************************************************/
void BankData::about()//关于
{
    double x,y;
    int H=3;
    for(y=-4;y<=0;y+=0.3)
    {
        for(x=-4;x<=4;x+=0.2)
            if(fabs(sqrt(x*x+y*y)-H*sin(2*atan(y/x)))<=1 || fabs(sqrt(x*x+y*y)-H*sin(2*atan(-y/x)))<=1)
                cout<<"*";
            else
                cout<<" ";
        cout<<endl;
    }
    for(y=-1;y<=0;y+=0.2)
    {
        for(x=-4;x<=4;x+=0.2)
            if(fabs(y)-0.65*x*x>=0.2)
                cout<<"*";
            else
                cout<<" ";
        cout<<endl;
    };
    cout<<"             银行储蓄系统"<<endl<<"             版本:3.0"<<endl<<endl;;
    system("PAUSE");
}
/*********************************************************
 * 功能描述:打开user的数据库
 * 输入参数:无
 * 输出参数:无
 * 返回值:无
 * 其它说明:通过文件读取打开
 ************************************************************/
void BankData::OpenUserData()
{
    long number;
	string name, pass, id, h;
	double balance;
	int state;
	UserNum = 0;
	//开始读取User的信息
	ifstream infile("BankUser.dat", ios::in);
	if (!infile)
	{
		cerr << "打开数据库(BankUser.dat)文件失败!";
		exit(1);
	}
	while (infile >> number >> name >> pass >> balance >> id >> h>> state)
	{
		user[UserNum].SetUser(number, name, pass, balance, id, h, state);
		UserNum++;
	}
	infile.close();
	//User信息读取完毕,总数存入UserNum
}
/*********************************************************
 * 功能描述:查找用户名
 * 输入参数:acc-输入的用户名
 * 输出参数:无
 * 返回值:ture 或者 false
 * 其它说明:无
 ************************************************************/
bool BankData::CheckUser(long acc)
{
	for (int i = 0; i < UserNum;)
	{
		if (user[i].get_accNumber() == acc)
			return true;
		else
		{
			i++;
		}
	}
	cout << "没有找到此账户。" << endl;
	system("PAUSE");
	return false;
}
/*********************************************************
 * 功能描述:记录用户的操作日志
 * 输入参数:i-操作状态 acc-用户帐号
 * 输出参数:无
 * 返回值:无
 * 其它说明:写入到指定文件中
 ************************************************************/
void BankData::SaveUserLog(int i,int acc)//记录用户日志
{
    string type,time,state;
    switch(i)
    {
        case 1:state="开户";break;
        case 2:state="销户";break;
        case 3:state="存款";break;
        case 4:state="取款";break;
        case 6:state="转账";break;
        case 7:state="挂失";break;
        case 8:state="解挂";break;
        case 9:state="改密";break;
    }
    time=gettime();
    type=int2str(acc+10001);
    //strcpy(p,type.data());类型转换:string 2 char*
    char ch1[25]="BankUser";
    char ch2[8]=".log";
    char ch[8];
    strcpy(ch,type.c_str());
    char *typen=new char[50];
    typen=strcat(strcat(ch1,ch),ch2);
    ofstream outfile(typen,ios::app);
	if (!outfile)
	{
		cerr << "打开用户名数据库文件失败!";
		exit(1);
	}
	outfile<<user[acc].get_accName()<<" "<<time<<" "<<state<<endl;
    outfile.close();
    delete typen;
}
/*********************************************************
 * 功能描述:保存用户数据
 * 输入参数:无
 * 输出参数:无
 * 返回值:无
 * 其它说明:写入到指定文件中
 ************************************************************/
void BankData::SaveUserData()
{
	ofstream outfile("BankUser.dat", ios::out);
	if (!outfile)
	{
		cerr << "打开数据库(BankUser.dat)文件失败!";
		exit(1);
	}
	int i;
	for (i = 0; i<UserNum; i++)
	{
		outfile << user[i].get_accNumber() << " " << user[i].get_accName() << " " << user[i].get_password() << " " << user[i].get_balance() << " " << user[i].get_id() << " " << user[i].get_homeads() << " " << user[i].get_state() << endl;
	}
	outfile.close();

}
/*********************************************************
 * 功能描述:主页显示
 * 输入参数:无
 * 输出参数:无
 * 返回值:ture 或者 false
 * 其它说明:验证管理员用户名和密码
 ************************************************************/
bool BankData::HomePage()//主页
{
	//return true;//调试语句
	string name;
	int i;
	cout << "+-----------------------+" << endl;
	cout << "   欢迎光临Mayuko银行" << endl;
	cout << "+-----------------------+" << endl;
	cout << "请输入业务员用户名:";
	cin >> name;
	i = SearchAdmin(name, OpenAdmin());
	while (1)
	{
		if (i >= 0)
		{
			if (CheckAdminPass(i))
			{
				cerr << "欢迎进入!" << endl;
				system("PAUSE");
				return true;
			}
		}
		else
		{
			cerr << "没有找到此管理员!" << endl;
			return false;
		}
	}
}
/*********************************************************
 * 功能描述:读取Admin的信息
 * 输入参数:无
 * 输出参数:无
 * 返回值:Admin的个数
 * 其它说明:通过文件读取
 ************************************************************/
int BankData::OpenAdmin()//读取Admin的信息
{
	int anum;
	//开始读取Admin信息到admin数组中
	ifstream infile("BankAdmin.dat", ios::in);
	anum = 0;
	if (!infile)
	{
		cerr << "打开管理员(BankAdmin.dat)文件失败!" << endl;
		exit(1);
	}
	while (!infile.eof())
	{
		infile >> admin[anum].name >> admin[anum].password;
		anum++;
	}
	infile.close();
	//信息读取完毕,admin数组中已存入Admin信息
	return anum;//返回一共读取到多少Admin条信息
}
/*********************************************************
 * 功能描述:查找Admin
 * 输入参数:anum-Admin的个数 n-输入的用户名
 * 输出参数:无
 * 返回值:无
 * 其它说明:通过文件查找
 ************************************************************/
int BankData::SearchAdmin(string n, int anum)//查找Admin
{
	for (int i = 0; i<anum; i++)
	{
		if (n == admin[i].name)
			return i;
	}
	return -1;
}
/*********************************************************
 * 功能描述:检验Admin密码是否正确
 * 输入参数:无
 * 输出参数:无
 * 返回值:ture 或者 false
 * 其它说明:
 ************************************************************/
bool BankData::CheckAdminPass(int i)
{
	int wrong = 0;
	string pass;
	while (1)
	{
		cout << "请输入密码:";
		cin >> pass;
		if (pass == admin[i].password)
			return true;
		else//密码输入错误触发
		{
			cerr << "密码输入有误,请重新输入!" << endl;
			wrong++;
			if (wrong > 2)
			{
				cerr << "Admin密码输入错误超过3次,即将退出系统..." << endl;
			}
			return false;
		}
	}
}
/*********************************************************
 * 功能描述:菜单显示
 * 输入参数:无
 * 输出参数:无
 * 返回值:无
 * 其它说明:通过一个函数来显示可选择的菜单
 ************************************************************/
void BankData::MenuShow()//菜单显示函数
{
	cout << "+--------------------------+" << endl;
	cout << "+ 1 开户   2 销户   3 存款 +" << endl;
	cout << "+ 4 取款   5 查询   6 转账 +" << endl;
	cout << "+ 7 挂失   8 解挂   9 改密 +" << endl;
	cout << "+          i 关于   0 退出 +" << endl;
	cout << "+--------------------------+" << endl;
}
/*********************************************************
 * 功能描述:增加一个user
 * 输入参数:无
 * 输出参数:无
 * 返回值:无
 * 其它说明:无
 ************************************************************/
void BankData::AddNumber(int n)
{
	string pass1, pass2, name, id ,h;
	double money;
	long acc;
	acc = 10001 + n;
    cout << "正在开户" << endl;
	while (1)
	{
		cout << "帐号:" << acc << endl;
		cout << "户主姓名:";
		cin >> name;
		cout << "密码:";
		cin >> pass1;
		cout << "确认密码:";
		cin >> pass2;
		//将开户的信息加入到User文件的末尾
		if (pass1 == pass2)
		{
		    cout << "存入金额:";
	    	cin >> money;
		    cout << "***号:";
		    cin >> id;
		    cout << "家庭住址:";
		    cin  >> h;
			ofstream outfile("BankUser.dat", ios::app);
			if (!outfile)
			{
				cerr << "打开数据库(BankUser.dat)文件失败!";
				exit(1);
			}
			outfile << acc << " " << name << " " << pass1 << " " << money << " " << id << " " << h << " " << 0 << endl;
			outfile.close();
			cout << "开户成功!" << endl;
			user[UserNum].SetUser(acc,name,pass1,money,id,h,0);
			SaveUserLog(1,n);
			UserNum++;
			system("PAUSE ");
			//文件写入结束
			break;
		}
		else
		{
			cout << "两次密码输入不一致,请重新输入。" << endl;
			continue;
		}
		//信息更新完毕
	}
}
/*********************************************************
 * 功能描述:删除一个user
 * 输入参数:无
 * 输出参数:无
 * 返回值:无
 * 其它说明:无
 ************************************************************/
void BankData::DelNumber()
{
	long acc;
	string pass;
	char check;
	cout << "销户" << endl;
	cout << "待销户帐号:";
	cin >> acc;
	if (CheckUser(acc))
	{
		acc -= 10001;
        cout << "姓名:" << user[acc].get_accName() << endl;
		while (1)
		{
			if (user[acc].CheckUserPass())
			{
				if (user[acc].get_state() == 0)
				{
					cout << "余额:" << user[acc].get_balance() << endl;
					cout << "确认销户(y/Y)?";
					cin >> check;
					if (check == 'y' || check == 'Y')
					{
						cout << "取款" << user[acc].get_balance() << "元,销户成功!" << endl;
						user[acc].set_balance(0);
						user[acc].set_state(2);
						SaveUserLog(2,acc);
						system("PAUSE ");
						break;
					}
					else
					{
						cout << "销户程序已取消。" << endl;
						system("PAUSE");
						break;
					}
				}
				else
				{
					cout << "该账户为挂失或已经销户,无法进行销户操作。" << endl;
					system("PAUSE");
					break;
				}
			}
		}
	}
}
/*********************************************************
 * 功能描述:给指定user存款
 * 输入参数:无
 * 输出参数:无
 * 返回值:无
 * 其它说明:无
 ************************************************************/
void BankData::AddMoney()
{
	long acc;
	double addmoney;
	cout << "存款" << endl;
	cout << "帐号:";
	cin >> acc;
	if (CheckUser(acc))
	{
		acc -= 10001;
		if (user[acc].get_state()==0)
        {
		    cout << "姓名:" << user[acc].get_accName() << endl;
		    cout << "存款额:";
		    cin >> addmoney;
		    user[acc].set_balance(user[acc].get_balance() + addmoney);//将addmoney钱存入User的信息中
		    cout << "现余额共计" << user[acc].get_balance() << "元,存款成功!" << endl;
		    SaveUserLog(3,acc);
		    system("PAUSE ");
        }
        else if(user[acc].get_state()==2)
        {
            cout<<"该账户目前已经销户."<<endl;
            system("PAUSE ");
        }
        else
        {
             cout<<"该账户目前已经挂失."<<endl;
             system("PAUSE ");
        }
	}
}
/*********************************************************
 * 功能描述:user取款
 * 输入参数:无
 * 输出参数:无
 * 返回值:无
 * 其它说明:无
 ************************************************************/
void BankData::DelMoney()
{
	long acc;
	double money;
	cout << "取款" << endl;
	cout << "帐号:";
	cin >> acc;
	if (CheckUser(acc))
	{
		acc -= 10001;
		cout << "姓名:" << user[acc].get_accName() << endl;
		if (user[acc].CheckUserPass())
		{
			if (user[acc].get_state() == 0)
			{
				cout << "余额:" << user[acc].get_balance() << endl;
				while (1)
				{
					cout << "取款额:";
					cin >> money;
					if (money > user[acc].get_balance())
					{
						cout << "余额不足,取款失败!" << endl;
						continue;
					}
					else
					{
						user[acc].set_balance(user[acc].get_balance() - money);
						cout << "取出" << money << "元,现余额" << user[acc].get_balance() << "元。" << endl;
						SaveUserLog(4,acc);
						system("PAUSE ");
						break;
					}
				}
			}
			else
			{
				cout << "该账户挂失或者销户,无法进行取款操作。" << endl;
				system("PAUSE ");
			}
		}
	}

}
/*********************************************************
 * 功能描述:显示user的信息和日志记录
 * 输入参数:无
 * 输出参数:无
 * 返回值:无
 * 其它说明:无
 ************************************************************/
void BankData::ShowInfo()
{
	long acc;
	string logname,logtime,logstate;
	int lognum=0;
	cout << "查询" << endl;
	cout << "帐号:";
	cin >> acc;
	if (CheckUser(acc))
	{
		acc -= 10001;
		cout << "姓名:" << user[acc].get_accName() << endl;
		if (user[acc].CheckUserPass())
		{
			cout << "余额:" << user[acc].get_balance() << endl;
			cout << "***号:" << user[acc].get_id() << endl;
			cout << "家庭住址:" << user[acc].get_homeads() << endl;
			cout << "当前状态:";
			switch (user[acc].get_state())//判断User的状态
			{
			case 0:cout << "正常" << endl; break;
			case 1:cout << "挂失" << endl; break;
			case 2:cout << "销户" << endl; break;
			}
			//开始进行日志读取
			string type;
			//生成将要读取的文件名
			type=int2str(acc+10001);
            char ch1[25]="BankUser";
            char ch2[8]=".log";
            char ch[8];
            strcpy(ch,type.c_str());
            char *typen=new char[50];
            typen=strcat(strcat(ch1,ch),ch2);
			ifstream infile(typen,ios::in);
			if (!infile)
	        {
		        cerr << "打开用户日志文件失败!" << endl;
		        exit(1);
	        }
	        cout<<"---------------------------"<<endl;
	        cout<<"日志记录:"<<endl;
	        while (infile >> logname >> logtime >> logstate)
	        {
                cout<< logname <<" "<< logtime <<" "<< logstate << endl;
                lognum++;
	        }
	        infile.close();
	        delete typen;
	        cout<<"查询完毕,共"<<lognum<<"条记录。"<<endl;
	        cout<<"---------------------------"<<endl;
			system("PAUSE ");
		}
	}
}
/*********************************************************
 * 功能描述:转账到其他user
 * 输入参数:无
 * 输出参数:无
 * 返回值:无
 * 其它说明:无
 ************************************************************/
void BankData::TransferMoney()
{
	long acc, acc2;
	double money;
	cout << "转账" << endl;
	cout << "帐号:";
	cin >> acc;
	if (CheckUser(acc))
	{
		acc -= 10001;
		cout << "姓名:" << user[acc].get_accName() << endl;
		if (user[acc].CheckUserPass())
		{
			if (user[acc].get_state() == 0)
			{
				cout << "余额:" << user[acc].get_balance() << endl;
				while (1)
				{
					cout << "转账帐号:";
					cin >> acc2;
                    cout << "转账金额:";
				    cin >> money;
					if (CheckUser(acc2))
					{
						acc2 -= 10001;
						if (user[acc].get_balance() >= money)
						{
							user[acc].set_balance(user[acc].get_balance() - money);
							user[acc2].set_balance(user[acc2].get_balance() + money);
							cout << "转账成功!本账户余额" << user[acc].get_balance() << "元。" << endl;
							SaveUserLog(6,acc);
							system("PAUSE ");
							break;
						}
						else
						{
							cout << "余额不足,转账失败!" << endl;
							system("PAUSE");
							continue;
						}
					}
				}
			}
			else
			{
				cout << "该账户挂失或者销户,无法进行转账操作。" << endl;
				system("PAUSE ");
			}
		}
	}
}
/*********************************************************
 * 功能描述:挂失user
 * 输入参数:无
 * 输出参数:无
 * 返回值:无
 * 其它说明:状态-1
 ************************************************************/
void BankData::LossReport()
{
	long acc;
	cout << "挂失" << endl;
	cout << "帐号:";
	cin >> acc;
	if (CheckUser(acc))
	{
		acc -= 10001;
		cout << "姓名:" << user[acc].get_accName() << endl;
		if (user[acc].CheckUserPass())
		{
			if (user[acc].get_state() == 0)
			{
				user[acc].set_state(1);
				cout << "挂失成功!"<<endl;
				SaveUserLog(7,acc);
				system("PAUSE ");
			}
			else
			{
				cout << "该账户已经销户或挂失!" << endl;
				system("PAUSE ");
			}
		}
	}
}
/*********************************************************
 * 功能描述:解挂user
 * 输入参数:无
 * 输出参数:无
 * 返回值:无
 * 其它说明:状态-0
 ************************************************************/
void BankData::SolutionLinked()
{
	long acc;
	cout << "解挂" << endl;
	cout << "帐号:";
	cin >> acc;
	if (CheckUser(acc))
	{
		acc -= 10001;
		cout << "姓名:" << user[acc].get_accName() << endl;
		if (user[acc].CheckUserPass())
		{
			if (user[acc].get_state() == 1)
			{
				user[acc].set_state(0);
				cout << "解挂成功" << endl;
				SaveUserLog(8,acc);
			}
			else if (user[acc].get_state() == 0)
			{
				cout << "该账户状态正常,无需解挂。" << endl;
			}
			else if (user[acc].get_state() == 2)
			{
				cout << "该账户已经销户,无法解挂。" << endl;
			}
			system("PAUSE ");
		}
	}
}
/*********************************************************
 * 功能描述:更改user的密码
 * 输入参数:无
 * 输出参数:无
 * 返回值:无
 * 其它说明:无
 ************************************************************/
void BankData::ChangePass()
{
	long acc;
	string pass1, pass2;
	cout << "改密" << endl;
	cout << "帐号:";
	cin >> acc;
	if (CheckUser(acc))
	{
		acc -= 10001;
		cout << "姓名:" << user[acc].get_accName() << endl;
		if (user[acc].CheckUserPass())
		{
			if (user[acc].get_state() == 0)
			{
				while (1)
				{
					cout << "请输入新密码:";
					cin >> pass1;
					cout << "确认密码:";
					cin >> pass2;
					if (pass1 == pass2)
					{
						user[acc].set_password(pass1);
						cout << "更改密码成功!" << endl;
						SaveUserLog(9,acc);
						system("PAUSE ");
						break;
					}
					else
					{
						cout << "两次密码输入不一致,请重新输入。" << endl;
						continue;
					}

				}
			}
			else
			{
				cout << "该账户挂失或者销户,无法进行改密操作。" << endl;
				system("PAUSE");
			}
		}
	}
}


main.cpp

/***********************************************************
* 版权所有 (C)2015,shao shuai.
*
* 文件名称:bankdata.cpp
* 文件标识:无
* 内容摘要:该代码为main主函数
* 其它说明:无
* 当前版本: V1.0
* 作   者:邵帅
* 完成日期: 20150715
*
* 修改记录1:
* 修改日期: 20150715
* 版本号: V1.0
* 修改人: shao shuai
* 修改内容:创建
**********************************************************/
#include <iostream>
#include "userdata.h"
#include "bankdata.h"
#include <cstdlib>
using namespace std;
/*********************************************************
 * 功能描述:主函数main
 * 输入参数:无
 * 输出参数:无
 * 返回值:0
 * 其它说明:无
 ************************************************************/
int main()
{
	BankData bank;
	if (bank.HomePage())
	{
		char choice;
		while (1)
		{
			system("cls");
			bank.MenuShow();
			cout << "请输入操作指令:";
			cin >> choice;
			switch (choice)
			{
			case '0':exit(1);
			case '1':bank.AddNumber(bank.UserNum); break;
			case '2':bank.DelNumber(); bank.SaveUserData(); break;
			case '3':bank.AddMoney(); bank.SaveUserData(); break;
			case '4':bank.DelMoney(); bank.SaveUserData(); break;
			case '5':bank.ShowInfo(); break;
			case '6':bank.TransferMoney(); bank.SaveUserData(); break;
			case '7':bank.LossReport(); bank.SaveUserData(); break;
			case '8':bank.SolutionLinked(); bank.SaveUserData(); break;
			case '9':bank.ChangePass(); bank.SaveUserData(); break;
			case 'i':bank.about();break;
			default:
				cerr << "输入错误,请重新输入."<<endl;
				system("PAUSE");
				continue;
			}
		}
	}
	return 0;
}


运行截图:

下面是软件运行截图:

管理员进入界面:



管理菜单:



开户:



销户:



存款:



取款:



查询:



转账:



挂失:



解挂:(账户10007当前状态正常)



改密:



彩蛋~关于界面:



下面是用户指令输入错误的运行截图:

密码输入错误三次退出系统:



挂失状态下无法取款:



销户状态下不能任何操作(除了查询):



密码两次不一致系统拒绝:



还有一些文件的截图:

用户的操作将以log的形式记录下来:



BankUser.dat(用户数据库):



BankAdmin.dat(管理员数据库):



课程报告将以图片的形式上传本文中。

麻鱼同步了本文章——》mayuko.cn

@ Mayuko
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: