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


信息

时间: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++银行管理系统设计分析及程序设计介绍相关推荐

  1. java银行管理系统大作业_银行管理系统项目 《JAVA程序设计》课件.doc

    银行管理系统 第一部分 案例描述 案例目的 学习面向对象的主要特征和基本概念,包括类.对象.继承.接口.封装.继承.多态.方法的重载和重写.Java的访问修饰符与其它关键字等. 案例难度 ★★★★ 案 ...

  2. 银行管理系统(使用SQL Server)-Python快速编程入门(第2版)-人民邮电出版社-阶段案例

    阶段案例-银行管理系统 题目描述 银行管理系统是一个集开户.查询.取款.存款.转账.锁定.解锁.退出等一系列业务于一体的管理系统,随着计算机技术在金融行业的广泛应用,银行企业采用管理系统替代了传统手工 ...

  3. 用java实现简单的银行管理系统

    用java实现简单的银行管理系统 页面代码之一: mvc设计模式,分包 分包图片 简单效果演示: 登陆主页面 注册页面 登录: 功能页面! 存款 转账 查看近期流水账单! 页面代码之一: packag ...

  4. [附源码]Python计算机毕业设计Django小型银行管理系统

    项目运行 环境配置: Pychram社区版+ python3.7.7 + Mysql5.7 + HBuilderX+list pip+Navicat11+Django+nodejs. 项目技术: dj ...

  5. java银行管理系统源码

    目录 一.项目包含知识点 二.项目需求 三.系统模块设计 3. 1.模块介绍 3·2.银行管理系统技术分析如图 3.3银行管理系统界面展示 四.银行管理系统源码 4.1Account类 4.2ATMS ...

  6. Ubuntu下使用C语言和MySQL模拟一个银行管理系统

    首先MySQL基础语法就不说了就增删改查,网上一找一大堆.API函数在MySQL官网上面都有.下面会主要介绍几个常用的. MYSQL C语言API 1.云服务器选择 我选择的是腾讯云服务器,学生认证后 ...

  7. [附源码]计算机毕业设计Python小型银行管理系统(程序+源码+LW文档)

    该项目含有源码.文档.程序.数据库.配套开发软件.软件安装教程 项目运行 环境配置: Pychram社区版+ python3.7.7 + Mysql5.7 + HBuilderX+list pip+N ...

  8. c语言程序设计家庭收支类,家庭支出管理系统—c语言程序设计

    家庭支出管理系统-c语言程序设计 (38页) 本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦! 11.90 积分 程序设计报告( 2015 / 2016 学年 ...

  9. 使用类的银行管理系统的C ++程序

    In this program, we are using the concept of C++ class and object, following basic operations are be ...

  10. Python基础项目实践之:面向对象方法实现模拟银行管理系统

    Python课堂基础实践系列: Python基础项目实践之:学生信息管理系统 python基础项目实践之: 学生通讯录管理系统 Python基础项目实践之:面向对象方法模拟简单计算器 Python基础 ...

最新文章

  1. 转 ofbiz的webservice接口提供(2)-数据类型的局限性
  2. 【Java面试题】正整数A和正整数B 的最小公倍数是指 能被A和B整除的最小的正整数值,设计一个算法,求输入A和B的最小公倍数。
  3. 02-UILabel比例颜色填充之歌词效果实现
  4. linux cp 目录不存在自动创建,Linux运维知识之Linux:复制并创建目标目录,如果它不存在...
  5. uniapp 刷新后数据都没有了_环境温度传感器都没有连接,竟然还会有数据?
  6. Hive的数据模型-分区表
  7. JAVA中inputstring_java IO流 之 字节输入流 InputString()
  8. BP网络算法及其改进
  9. 【渝粤教育】广东开放大学 个人与团队管理 形成性考核 (47)
  10. Unity IOC简单认知
  11. Diamond types are not supported at language level ‘5‘ 解决方法
  12. APP自动化测试--IOS
  13. windows7安装ffmpeg教程
  14. HTML在列表中加图片,HTML + JS 列表显示图片
  15. JAVA关键字final修饰类,深入分析java中的关键字final
  16. android dlna uri,android DLNA投屏
  17. python爬虫 抓取豆瓣电影 电影分类排行榜的所有数据
  18. java井字游戏_java井字棋源代码(双人对战版)
  19. android wear tizen,三星tizen和谷歌android wear对比 android wear和三星tizen哪个好
  20. Python爬虫进阶必备 | X天下与XX二手房密码加密分析

热门文章

  1. 地图上如何量方位角_野外怎样确定方位 户外辨别方向和位置的方法有哪些?...
  2. itil v4和v3的区别_ITIL从v3到v4 - 这是新的ITIL
  3. 使用Foxit Reader实现批量打印以及一页多版设置技巧
  4. linux系统安装java环境_linux系统java环境配置
  5. Macromedia Flash 8 Video Encoder安装
  6. Linux环境安装ghostscript
  7. 解决 批处理 for 体内的字符串截取问题
  8. 深入浅出Word2Vec原理解析
  9. 联想ThinkPad SL410(28428KC)与2842-EWC区别
  10. 7z解压crc错误_7-Zip - 常见问题解答(FAQ)