C++银行管理系统设计分析及程序设计介绍
银行管理系统设计分析及程序设计介绍
信息
时间: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(); //获取resMYSQL_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); //注销账户 如果有金额必须要取出
};
(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;
};
(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); //查询用户流水
};
(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); //注销账户
};
(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;
}
(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;}
}
篇幅有限,不是核心代码就不通篇发了。
C++银行管理系统设计分析及程序设计介绍相关推荐
- java银行管理系统大作业_银行管理系统项目 《JAVA程序设计》课件.doc
银行管理系统 第一部分 案例描述 案例目的 学习面向对象的主要特征和基本概念,包括类.对象.继承.接口.封装.继承.多态.方法的重载和重写.Java的访问修饰符与其它关键字等. 案例难度 ★★★★ 案 ...
- 银行管理系统(使用SQL Server)-Python快速编程入门(第2版)-人民邮电出版社-阶段案例
阶段案例-银行管理系统 题目描述 银行管理系统是一个集开户.查询.取款.存款.转账.锁定.解锁.退出等一系列业务于一体的管理系统,随着计算机技术在金融行业的广泛应用,银行企业采用管理系统替代了传统手工 ...
- 用java实现简单的银行管理系统
用java实现简单的银行管理系统 页面代码之一: mvc设计模式,分包 分包图片 简单效果演示: 登陆主页面 注册页面 登录: 功能页面! 存款 转账 查看近期流水账单! 页面代码之一: packag ...
- [附源码]Python计算机毕业设计Django小型银行管理系统
项目运行 环境配置: Pychram社区版+ python3.7.7 + Mysql5.7 + HBuilderX+list pip+Navicat11+Django+nodejs. 项目技术: dj ...
- java银行管理系统源码
目录 一.项目包含知识点 二.项目需求 三.系统模块设计 3. 1.模块介绍 3·2.银行管理系统技术分析如图 3.3银行管理系统界面展示 四.银行管理系统源码 4.1Account类 4.2ATMS ...
- Ubuntu下使用C语言和MySQL模拟一个银行管理系统
首先MySQL基础语法就不说了就增删改查,网上一找一大堆.API函数在MySQL官网上面都有.下面会主要介绍几个常用的. MYSQL C语言API 1.云服务器选择 我选择的是腾讯云服务器,学生认证后 ...
- [附源码]计算机毕业设计Python小型银行管理系统(程序+源码+LW文档)
该项目含有源码.文档.程序.数据库.配套开发软件.软件安装教程 项目运行 环境配置: Pychram社区版+ python3.7.7 + Mysql5.7 + HBuilderX+list pip+N ...
- c语言程序设计家庭收支类,家庭支出管理系统—c语言程序设计
家庭支出管理系统-c语言程序设计 (38页) 本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦! 11.90 积分 程序设计报告( 2015 / 2016 学年 ...
- 使用类的银行管理系统的C ++程序
In this program, we are using the concept of C++ class and object, following basic operations are be ...
- Python基础项目实践之:面向对象方法实现模拟银行管理系统
Python课堂基础实践系列: Python基础项目实践之:学生信息管理系统 python基础项目实践之: 学生通讯录管理系统 Python基础项目实践之:面向对象方法模拟简单计算器 Python基础 ...
最新文章
- 转 ofbiz的webservice接口提供(2)-数据类型的局限性
- 【Java面试题】正整数A和正整数B 的最小公倍数是指 能被A和B整除的最小的正整数值,设计一个算法,求输入A和B的最小公倍数。
- 02-UILabel比例颜色填充之歌词效果实现
- linux cp 目录不存在自动创建,Linux运维知识之Linux:复制并创建目标目录,如果它不存在...
- uniapp 刷新后数据都没有了_环境温度传感器都没有连接,竟然还会有数据?
- Hive的数据模型-分区表
- JAVA中inputstring_java IO流 之 字节输入流 InputString()
- BP网络算法及其改进
- 【渝粤教育】广东开放大学 个人与团队管理 形成性考核 (47)
- Unity IOC简单认知
- Diamond types are not supported at language level ‘5‘ 解决方法
- APP自动化测试--IOS
- windows7安装ffmpeg教程
- HTML在列表中加图片,HTML + JS 列表显示图片
- JAVA关键字final修饰类,深入分析java中的关键字final
- android dlna uri,android DLNA投屏
- python爬虫 抓取豆瓣电影 电影分类排行榜的所有数据
- java井字游戏_java井字棋源代码(双人对战版)
- android wear tizen,三星tizen和谷歌android wear对比 android wear和三星tizen哪个好
- Python爬虫进阶必备 | X天下与XX二手房密码加密分析
热门文章
- 地图上如何量方位角_野外怎样确定方位 户外辨别方向和位置的方法有哪些?...
- itil v4和v3的区别_ITIL从v3到v4 - 这是新的ITIL
- 使用Foxit Reader实现批量打印以及一页多版设置技巧
- linux系统安装java环境_linux系统java环境配置
- Macromedia Flash 8 Video Encoder安装
- Linux环境安装ghostscript
- 解决 批处理 for 体内的字符串截取问题
- 深入浅出Word2Vec原理解析
- 联想ThinkPad SL410(28428KC)与2842-EWC区别
- 7z解压crc错误_7-Zip - 常见问题解答(FAQ)