C++银行管理系统设计分析及程序设计介绍

举报
花狗Fdog 发表于 2021/05/26 17:28:35 2021/05/26
【摘要】 银行管理系统设计分析及程序设计介绍 信息 时间:2020年7月12日 语言:C++ mysql 项目开发环境: (1操作系统:windows10 64位 (2编译环境:vs2015社区版 (3数据库: MySQL 8.0.19 设计分析介绍 一.管理员模式 1.登录页面 账号,密码,忘记密码 qt版本:账号和密码保存于后台数据...

在这里插入图片描述


银行管理系统设计分析及程序设计介绍

在这里插入图片描述


信息

时间:2020年7月12日

语言:C++ mysql

项目开发环境:

(1操作系统:windows10 64位

(2编译环境:vs2015社区版

(3数据库: MySQL 8.0.19


设计分析介绍

一.管理员模式

1.登录页面

账号,密码,忘记密码

qt版本:账号和密码保存于后台数据库,根据输入的账号和密码,查询如正确,则登录成功,若不正确,则提示账户或密码错误(为了安全起见,只有3次机会),并且设有找回密码。利用邮箱验证是否为管理员本人操作。


2.管理界面

(1用户注册信息

包括注册人数,相关信息,等等。

(2冻结账户

包括冻结账户,冻结账户余额,部分余额。

(3控制账户

控制当前账户交易,等等其他行为。

(4返回上一级

二.用户模式

1.登录页面

账户,密码,忘记密码

账号和密码保存于后台数据库,根据输入的账号和密码,查询如正确,则登录成功,若不正确,则提示账户或密码错误(为了安全起见,只有3次机会),并且设有找回密码。利用邮箱验证是否为管理员本人操作。


2.qt版本:开户页面

输入开户者相关信息,包括姓名 ,年龄,性别,住址,电话,以及邮箱绑定,为了找回密码。

系统自动生成16位卡号,并要求用户设置密码,若不设置密码,初始密码为00000。


3.业务办理页面

(qt版本:1选择语言

为了防止语言障碍,使用汉语和英语作为界面语言。

(2存款

从登录界面得到账号,密码,验证通过,出现输入页面,事先设置500,1000,3000,10000,50000额度,也可由用户自行输入存款额度。

选择存款期限(活期,死期),并且显示利率,期满后可得利息。

(3取款

从登录界面得到账户,密码,验证通过,出现卡内剩余金额,事先设置500,1000,3000,10000,50000额度,也可由用户自行输入取款额度。并验证取款额是否大于现有额,若大于则给出提示信息,若小于,则重写当前余额。

(4转账

输入转入账户,输入转入金额,并做出相应提示。

(5查询信息

账户流水,显示当前账户半年的资金流水,以及发票显示(没打印就显示在屏幕)。

(6更改密码

输入原密码,并通过注册邮箱验证,确认新密码,并完成修改。

(7注销

从数据库删除当前账户,并返回登录页面。

(8返回上一级

注:只写功能,不讲美观。


程序设计介绍

一.框架结构图

在这里插入图片描述


二.C++代码模块

(1数据类

1.能验证账户是否存在

2.能获得数据表数据

3.能获得数据表条数

4.能修改数据表内容(账号,密码,金额之类的数据)

5.能查询数据(包括流水,金额,密码之类的数据)

class Sql
{
	string host;
	string user;
	string passwd;
	string db;
	unsigned int port;
	MYSQL sqlcon;
	MYSQL_RES * result;
	MYSQL_ROW row;
public:
	Sql();
	Sql(string host, string user, string passwd, string db, unsigned int port);
	~Sql();
	MYSQL getSqlCon();			//获取连接
	MYSQL_RES * getResult();	//获取res
	MYSQL_ROW  getRow();
	boolean isAccount(string user,string passwd,int type);  //账户验证
	int getDataCount(); //获取数据(返回值为条数条数)
	void FrozenAccount(string username); //冻结账户
	int getFundCount(Person * person); //获取资金数量
	int getFundCount(string account); //获取资金数量
	int FrozenMoney(string name , int fund); //冻结提前判断不要超过全部
	string getPasswd(string username); //获取密码
	void RecordInfo(string username ,string event);			//记录流水
	int getMoneyInfo(); //账户流水
	void Save_DrawMoney(Person * person,int fund);			//存款/取款
	int TransferAccounts(Person * person,string account ,int fund);	//转账
	void AlterPassword(Person * person,string str); //修改密码
	int DeleteAccount(Person *person); //注销账户 如果有金额必须要取出
};

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31

(2抽象类

将用户类和管理员类的所共有的属性或行为进行提取,创建抽象类。

class Person
{
protected:
	std::string m_person;
	std::string m_passwd;
public:
	virtual std::string getM_Person() = 0;
	virtual std::string getM_Passwd() = 0;
	virtual void ShowBusiness(Sql * sqlcon) = 0;
};

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

(3管理员类

1.所有用户注册信息
2.冻结账户
3.冻结资金
4.查询用户密码
5.查询用户流水

class Administrator:public Person
{
public:
	Administrator();
	~Administrator();
	virtual std::string getM_Person();
	virtual std::string getM_Passwd();
	virtual void ShowBusiness(Sql * sqlcon);
	void getUserinfo(Sql * sqlcon);			//所有用户账户
	void BlockedAccount(Sql * sqlcon);		//冻结账户
	void FrozenCapital(Sql * sqlcon);		//冻结资金
	void getUserPasswd(Sql * sqlcon);		//查询用户密码
	void getUserStatement(Sql * sqlcon);	//查询用户流水
};

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

(4用户类

1.存款
2.取款
3.转账
4.查询用户流水
5.更改密码
6.注销账户

class User:public Person
{
public:
	User();
	~User();
	virtual std::string getM_Person();
	virtual std::string getM_Passwd();
	virtual void ShowBusiness(Sql *sqlcon);
	void Deposit(Sql * sqlcon);			//存款
	void Withdrawal(Sql * sqlcon);		//取款
	void TransferAccounts(Sql * sqlcon);//转账
	void getUserStatement(Sql * sqlcon);//查询用户流水
	void ChangePasswd(Sql * sqlcon);	//更改密码
	void LogoutUser(Sql * sqlcon);		//注销账户
};

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

(5数据类的实现
Sql::Sql()
	:host("127.0.0.1"),user("root"),passwd("3226960*"),db("db_banking_system"),port(3306)
{
	mysql_init(&(this->sqlcon));
	mysql_real_connect(&(this->sqlcon), this->host.c_str(), this->user.c_str(), this->passwd.c_str(), this->db.c_str(), this->port, NULL, 0);
}
Sql::Sql(string host, string user, string passwd, string db, unsigned int port)
{
	this->host = host;
	this->user = user;
	this->passwd = passwd;
	this->db = db;
	this->port = port;
	mysql_init(&(this->sqlcon));
	mysql_real_connect(&(this->sqlcon), this->host.c_str(), this->user.c_str(), this->passwd.c_str(), this->db.c_str(), this->port, NULL, 0);
}
Sql::~Sql()
{
	mysql_close(&(this->sqlcon));
}
MYSQL Sql::getSqlCon()
{
	return this->sqlcon;
}
MYSQL_RES * Sql::getResult()
{
	return this->result;
} 
MYSQL_ROW  Sql::getRow()
{
	return this->row;
}
boolean Sql::isAccount(string user,string passwd,int type)
{
	string str_a = "SELECT * FROM dt_administrator where user = '" + user + "' and passwd = '" + passwd + "'";
	string str_u = "SELECT * FROM dt_user where user = '" + user + "' and passwd = '" + passwd + "'";
	if (type == 0)
	{
		mysql_query(&(this->sqlcon), str_a.c_str());
		result = mysql_store_result(&(this->sqlcon));
		while ((row = mysql_fetch_row(result)))
		{ return true;
		}
	}
	if(type == 1)
	{
		mysql_query(&(this->sqlcon), str_u.c_str());
		result = mysql_store_result(&(this->sqlcon));
		while ((row = mysql_fetch_row(result))) { return true;
		}
	}
	return false;
}
int Sql::getDataCount()
{
	mysql_query(&(this->sqlcon),"select * from dt_user");
	this->result = mysql_store_result(&(this->sqlcon));
	return mysql_num_rows(this->result);//返回数据行数
}
void Sql::FrozenAccount(string username)
{
	string sqlstr = "update dt_user set isfrozen = 1 where user = '" + username + "'";
	mysql_query(&(this->sqlcon), sqlstr.c_str());
}
int Sql::getFundCount(Person * person) //获取资金量
{
	string sqlstr = "select * from dt_user where user = '"+person->getM_Person()+"'";
	mysql_query(&(this->sqlcon), sqlstr.c_str());
	this->result = mysql_store_result(&(this->sqlcon));
	this->row = mysql_fetch_row(result);
	stringstream ss;
	int fund_i = 0;
	string fun_s;
	fun_s = this->row[2];
	ss << fun_s;
	ss >> fund_i;
	return fund_i;
}
int Sql::getFundCount(string account) //获取资金量
{
	string strsql = "select * from dt_user where user = '" + account + "'";
	mysql_query(&(this->sqlcon), strsql.c_str());
	this->result = mysql_store_result(&(this->sqlcon));
	this->row = mysql_fetch_row(result);
	stringstream ss;
	int fund_i = 0;
	string fun_s;
	fun_s = this->row[2];
	ss << fun_s;
	ss >> fund_i;
	return fund_i;
}
int Sql::FrozenMoney(string account,int fund)
{
	//查现有余额
	int fund_now = getFundCount(account);
	if (fund_now >= fund)
	{
		int fund_i = fund_now - fund;
		string fund_s1;
		stringstream ss;
		ss << fund_i;
		ss >> fund_s1;
		stringstream s;
		string fund_s2;
		s << fund;
		s >> fund_s2;
		string str = "update dt_user set fund = " + fund_s1 + ",frozenfund = " + fund_s2 + " where user = '" + account + "'";
		cout << "sql:" << str << endl;
		mysql_query(&(this->sqlcon), str.c_str());
		system("pause");
		return 1;
	}
	else
	{
		return 0;
	}
}
string Sql::getPasswd(string username)
{
	string str = "select * from dt_user where user = '" + username + "'";
	mysql_query(&(this->sqlcon), str.c_str());
	this->result = mysql_store_result(&(this->sqlcon));
	this->row = mysql_fetch_row(result);
	return this->row[1];
}
void Sql::RecordInfo(string username,string event)
{
	//记录流水
	string strsql = "insert into dt_event(user,event) values('" + username + "','" + event + "')";
	mysql_query(&(this->sqlcon), "SET CHARACTER SET GBK");
	if (mysql_query(&(this->sqlcon), strsql.c_str()))
	{
		cout << "不成功";
	}
}
int Sql::getMoneyInfo()
{
	//流水
	string strsql = "select * from dt_event";
	mysql_query(&(this->sqlcon), strsql.c_str());
	this->result = mysql_store_result(&(this->sqlcon));
	return mysql_num_rows(this->result);
}
void Sql::Save_DrawMoney(Person * person,int fund)
{
	string fund_s;
	stringstream ss;
	ss << fund;
	ss >> fund_s;
	string str = "update dt_user set fund = " + fund_s + " where user = '" + person->getM_Person() + "'";
	mysql_query(&(this->sqlcon),str.c_str());
}
int Sql::TransferAccounts(Person * person, string account, int fund)
{
	//查账户
	string strsql = "select * from dt_user where user = '" + account + "'";
	mysql_query(&(this->sqlcon), strsql.c_str());
	result = mysql_store_result(&(this->sqlcon));
	while ((row = mysql_fetch_row(result)))
	{
		//查余额
		int fund_now = getFundCount(person);
		if (fund_now >= fund)
		{ cout << "现有金额:" << fund_now << "  转出金额:" << fund << endl; Save_DrawMoney(person, fund_now - fund); stringstream ss; int fund_i = 0; string fun_s; fun_s = this->row[2]; ss << fun_s; ss >> fund_i; stringstream ss_2; ss_2 << fund+fund_i; string fund_s2; ss_2 >> fund_s2; cout << "若确认转入"; system("pause"); strsql = "update dt_user set fund = " + fund_s2 + " where user = '" + account + "'"; mysql_query(&(this->sqlcon), strsql.c_str()); return 1;
		}
		else
		{ return 0;
		}
	}
	return 0;
}
void Sql::AlterPassword(Person * person,string str)
{
	string passwd = "update dt_user set passwd = " + str + " where user = '" + person->getM_Person() + "'";
	mysql_query(&(this->sqlcon), passwd.c_str());
}
int Sql::DeleteAccount(Person *person)
{
	int fund = getFundCount(person);
	if (fund == 0)
	{
		string str = "delete from dt_user where user = '" + person->getM_Person() + "'";
		mysql_query(&(this->sqlcon), str.c_str());
		return 0;
	}
	else
	{
		return fund;
	}
	return fund;
}

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85
  • 86
  • 87
  • 88
  • 89
  • 90
  • 91
  • 92
  • 93
  • 94
  • 95
  • 96
  • 97
  • 98
  • 99
  • 100
  • 101
  • 102
  • 103
  • 104
  • 105
  • 106
  • 107
  • 108
  • 109
  • 110
  • 111
  • 112
  • 113
  • 114
  • 115
  • 116
  • 117
  • 118
  • 119
  • 120
  • 121
  • 122
  • 123
  • 124
  • 125
  • 126
  • 127
  • 128
  • 129
  • 130
  • 131
  • 132
  • 133
  • 134
  • 135
  • 136
  • 137
  • 138
  • 139
  • 140
  • 141
  • 142
  • 143
  • 144
  • 145
  • 146
  • 147
  • 148
  • 149
  • 150
  • 151
  • 152
  • 153
  • 154
  • 155
  • 156
  • 157
  • 158
  • 159
  • 160
  • 161
  • 162
  • 163
  • 164
  • 165
  • 166
  • 167
  • 168
  • 169
  • 170
  • 171
  • 172
  • 173
  • 174
  • 175
  • 176
  • 177
  • 178
  • 179
  • 180
  • 181
  • 182
  • 183
  • 184
  • 185
  • 186
  • 187
  • 188
  • 189
  • 190
  • 191
  • 192
  • 193
  • 194
  • 195
  • 196
  • 197
  • 198
  • 199
  • 200
  • 201
  • 202
  • 203
  • 204
  • 205
  • 206
  • 207
  • 208
  • 209
  • 210
  • 211
  • 212
  • 213
  • 214
  • 215

(6主函数
int main()
{
	User * user = new User();
	int system_i = 0;
	Sql * sql = new Sql();
	while (true)
	{
		system("cls");
		cout << "\t\t================================================================" << endl;
		cout << "\t\t* 请选择进入的系统 *" << endl;
		cout << "\t\t* *" << endl;
		cout << "\t\t* 管理员 客户 *" << endl;
		cout << "\t\t* *" << endl;
		cout << "\t\t* 0 1 *" << endl;
		cout << "\t\t================================================================" << endl;
		cin >> system_i;
		cin.clear();
		cin.ignore(); //防止恶意输入导致死循环
		switch (system_i)
		{
		case 0: LoginIn(sql,system_i); break;
		case 1: LoginIn(sql,system_i); break;
		default: cout << "输入有误,请重新输入" << endl; system("pause"); break;
		}
	}
	return 0;
}
void LoginIn(Sql * sqlcon,int type)
{
	string name;
	string passwd;
	Person * person = NULL;
	if (type == 0)
	{
		cout << "请输入管理员账户:" << endl;
		cin >> name;
		cout << "请输入管理员密码:" << endl;
		cin >> passwd;
		if (sqlcon->isAccount(name, passwd, type))
		{ person = new Administrator(); person->ShowBusiness(sqlcon);
		}
		return;
	}
	else
	{
		cout << "请输入账户:" << endl;
		cin >> name;
		cout << "请输入密码:" << endl;
		cin >> passwd;
		if (sqlcon->isAccount(name, passwd, type))
		{ person = new User(); person->ShowBusiness(sqlcon);
		}
		return;
	}
}

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66

篇幅有限,不是核心代码就不通篇发了。


文章来源: zxfdog.blog.csdn.net,作者:Fdog_,版权归原作者所有,如需转载,请联系作者。

原文链接:zxfdog.blog.csdn.net/article/details/107477771

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。