课程设计-银行储蓄系统

这是一个使用面向对象编程重新设计的银行储蓄系统,具备开户、存款、取款、转账、改密、挂失、解挂及销户等功能。系统支持业务员登录,3次登录失败会强制退出。用户可进行存款、取款等操作,挂失账户无法取款,销户前需先清空余额。系统记录用户操作日志,并提供了相应的操作界面。

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

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


介绍:

银行储蓄系统包括:支持多名储户开户、存款、取款、转帐、改密、挂失、解挂、销户等功能。
登录
输入业务员用户名和密码。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的默认构造函数
 * 输入参数:无
 * 输
XXXXXXXXXXXXX 软件工程课程设计报告 学生姓名: xxx 学 号: xxxxxxxxxxxxxx 专 业: xxxxxx 班 级: xxxxx 设计题目: 银行计算机储蓄系统结构化设计 成 绩: 所 在 系: 信息工程 2012 年 3 月 27 日 银行计算机储蓄系统 主文件记录修改系统 结构化设计报告 一、 题目 银行计算机储蓄系统的工作过程大致如下: 储户填写的存款单或取款单由业 务员键入系统,如果是存款则系统记录存款人姓名、住址(或电话号码) 、身份 证号码、存款类型、存款日期、到期日期、利率、密码(可选)等信息,并印出 存款单给储户;如果是取款而且存款时留有密码,则系统首先核对储户密码,若 密码正确或存款未留密码,则系统计算利息并印出利息清单给储户。 二、 结构化分析 数据流图: 储户 1 记录存款信息 2 打印存款存单 3 核对密码 4 计算利息 5 打印利息清单 储户 取款单 存款单 存款信息 D1 存款信息 存款信息 取款信息 存款信息 利息值 利息清单 存款存单 三、 数据设计 E-R 图: 储户 银行 存取款 姓名 住址 电话号码 身份证号码 数额 类型 到期日期 密码 利率 名称 地址 电话号码 M N 储户(身份证号码,姓名,电话号码,住址) 银行(名称,电话号码,地址) 存取款(类型,数额,利率,密码,到期日期) 四、 体系结构设计 设计阶段: 顶层数据流图: 储户 银行储蓄系统 储户 存款单 取款单 存款单 利息清单 银行模拟储蓄系统 用户管理 帐户管理 利息管理 修 改 用 户 添 加 用 户 删 除 用 户 用 户 登 陆 存 款 开 户 修 改 密 码 销 户 挂 失 查 询 取 款 修 改 利 息 计 算 利 息 五、 接口设计 程序之间的接口: 各模块之间采用函数调用、参数传递、返回值的方式进行信息传递。具体参 数的结构将在下面数据结构设计的内容中说明。 接口传递的信息将是以数据结构 封装了的数据,以参数传递或返回值的形式在各模块间传输。 人机界面: 取款信息 卡号 密码 取款人 取款金额 取款类型 利率 取款日期 余额 利息 存款信息 卡号 存款人 储户姓名 存款金额 存款日期 存款类型 利率 存款期限 余额 身份证 接受储户存/取款时填写的单据后,产生相应的存/取款信息写入数据库收/付款信息 卡号 储户姓名 业务员编号 收/付款金额 收/付款日期 储户信息 卡号 储户姓名 联系电话 身份证 地址 备注 六、过程设计 开始 密码是否正 确? 输入密码 是否存款 存储选择类 型 记录存款信 息 打印清单 计算利息 结束 Y N Y N
项目名称:Bank Account Management System 银行账户管理系统 简称BAM 项目描述:这是一个基于C/S结构的银行账户在线管理系统,用户可以通过ATM终端界面来操作自己的银行账户. 项目实施方式:这是一个同步练习,随着达内CoreJava课程的深入,这个项目将趋于完整,学员的任务是随着知识点的深入,完成每一个进阶的项目要求. 项目一 练习1:(面向对象基础语法) 写一个账户类(Account),属性: id:账户号码 长整数 password:账户密码 name:真实姓名 personId:身份证号码 字符串类型 email:客户的电子邮箱 balance:账户余额 方法: deposit: 存款方法,参数是double型的金额 withdraw:取款方法,参数是double型的金额 构造方法: 有参和无参,有参构造方法用于设置必要的属性 练习2:(封装) 将Account类作成完全封装,注意:要辨别每个属性的set/get方法是否需要公开 练习3:(继承,多态) 银行的客户分为两类,储蓄账户(SavingAccount)和信用账户(CreditAccount),区别在于储蓄账户不允许透支,而信用账户可以透支,并允许用户设置自己的透支额度. 注意:CreditAccount需要多一个属性 ceiling 透支额度 为这两种用户编写相关的类 同时要求编写Bank类,属性: 1.当前所有的账户对象的集合,存放在数组中 2.当前账户数量 方法: 1.用户开户,需要的参数:id,密码,密码确认,姓名,身份证号码,邮箱,账户类型(int),返回新创建的Account对象 2.用户登录,参数:id,密码 返回Account对象,提示 用s1.equals(s2)判断s1和s2两个字符串内容是否相等 3.用户存款,参数:id,存款数额,返回修改过的Account对象 4.用户取款,参数:id,取款数额,返回修改过的Account对象 5.设置透支额度 参数:id,新的额度 ,返回修改过的Account对象.这个方法需要验证账户是否是信用账户 用户会通过调用Bank对象以上的方法来操作自己的账户,请分析各个方法需要的参数 另外,请为Bank类添加几个统计方法 1.统计银行所有账户余额总数 2.统计所有信用账户透支额度总数 写个主方法测试你写的类 项目二 练习4:(语言高级特性,三个修饰符) 1.修改Account类,银行用户的账号(id)是自动生成的,初始值为100000,第一个开户的用户id为100001,第二个为100002,依此类推. 提示:构造对象的时候采用static属性为id赋值 2.对于Account类,有两个方法,存款方法和取款方法,请修改这两个方法. 存款方法改为不允许子类修改 取款方法根据不同的子类而不同,因此,改为抽象方法,在两个子类中分别实现 3.将Bank类作成单例 项目三 练习5:(接口) 为SavingAccount和CreditAccount各自添加一个子类 LoanSavingAccount类:用户可以贷款,不可以透支 LoanCreditAccount类:用户可以贷款,可以透支 说明:贷款和透支是不一样的,透支指的是账户余额小于0,而贷款用户需要一个贷款额的属性. 在ATM机上,用户可以选择贷款,也可以选择还贷款,而还贷款就是要把账户余额上的资金转到贷款额上 例如:用户余额10000元,贷款额100000元,用户可以选择还款5000元,则用户余额变为5000,贷款额变为95000元. 利用接口来抽象出LoanSavingAccount类和LoanCreditAccount类的共性 接口中的方法: requestLoan:贷款 payLoan:还贷 getLoan:获取用户贷款总额 为Bank类添加三个方法, 贷款:参数 id,贷款额,返回修改过的Account对象 还贷款:参数 id,还款额,返回修改过的Account对象 统计所有账户贷款的总数 练习6:(Object) 为Account类及其子类添加toString方法和equals方法 项目四 练习7:(Exception) 为BAM添加几个异常类 BalanceNotEnoughException :用于取钱的时候余额不足的情况(包括账户余额超过透支额的情况) RegisterException:用于开户异常的情况,例如密码两次输入不一致等情况 LoginException:用户登录异常的情况,例如id错误,密码错误 LoanException:贷款额不能为负数,如果用户试图将贷款额置为负数,则会抛出这个异常 以上四个异常类有一个共同的父类 BusinessException 并妥善的处理这些异常 项目五 练习8:(集合) 改写Bank类,采用集合的方式来管理多个Account对象 为Bank类添加一个方法 打印所有用户的总资产排名 说明:一个用户可能会有多个账号,以身份证号为准.总资产指多个账户余额的总和,不需要考虑贷款账户的贷款额 项目六 练习9:(GUI) 为BAM添加用户界面 需要以下几个类: BAMClient 其中会包含一个Frame,这是用户主界面 MainPanel:主界面,用户可以选择开户或者登录 RegisterPanel:用户开户具体用到的界面 LoginPanel:用户登录需要的界面 BusinessPanel:界面上会显示账户的功能 至少包括存款和取款,对于可透支的用户,还允许用户修改透支额度,对于贷款用户,还允许用户贷款和还贷款 注:本练习的界面布局不做要求,请阅读现有代码,添加事件处理代码 提示:在开户或者登录之后都会跳到BusinessPanel,而用户点击了交易之后,界面停留在BusinessPanel 要随时注意在BusinessPanel上根据数据的变化更新显示信息 项目七 在该加资源保护的地方加上,没有标准 项目八 练习10:(I/O) 修改Bank类,账户信息会采用对象序列化的方式存放在文件中.当Bank对象生成的时候会读取文件,设置账户集合.当账户信息改变的时候,会随时更新文件 设计一个FileDAO类(文件数据访问对象),负责对文件的访问,包括存放账户,提取账户等方法,在Bank类中,会通过FileDAO对象来访问文件 注意:如果已有的账户对象会存在文件中,那么为新的账户对象分配id的做法也应相应的改变,过去的用static属性的做法不再合适,应该改为,把下一个可用的id存放在一个文件中,每创建一个新对象的时候都会读取这个文件,获得新对象的id,并且修改文件中的id,使其加1.这个工作可以放在Account类的构造方法中 项目九 练习11:(网络) 在现有的BAM中,用户是通过界面直接访问Bank对象的,将其改为C/S结构,由界面充当客户端,通过TCP协议访问服务器端的Bank对象. 提示:客户端和服务器端需要通过对象来传递信息,这里会使用对象序列化技术.
一、系统设计的成果 系统设计阶段的成果归纳起来一般有 (点击这里观看“各开发环节之间的关系”动画演示): 1.系统总体结构图(包括总体结构图,子系统结构图,计算机流程图等)。 2.系统设备配置图(系统设备配置图: 主要是计算机系统图,设备在各生产岗位的分布图,主机、网络、终端联系图等)。 3.系统分布编码方案(分类方案、编码系统)。 4.数据库结构图(DB的结构,主要指表与表之间的结构,表内部结构(字段、域、数据字典等)。 5.HIPO图(层次化模块控制图、IPO图等等)。 6.系统详细设计方案说明书。 二、系统设计说明书的组成 1.引言 (1) 摘要 系统的目标名称和功能等的说明 (2) 背景 l 项目开发者 l 用户 l 本项目和其它系统或机构的关系和联系 (3) 系统环境与限制 l硬件、软件和运行环境方面的限制 l保密和安全的限制 l有关系统软件文本 l有关网络协议标准文本 (4) 参考资料和专门术语说明 2.系统设计方案 (1) 模块设计 l系统的模块结构图 l各个模块的IPO图(包括各模块的名称、功能、调用关系、局部数据项和详细的算法说明等) (2) 代码设计 l各类代码的类型、名称、功能、使用范围和使用要求等的设计说明书 (3) 输入设计 l输入项目 输入人员(指出所要求的输入操作人员的水平与技术专长,说明与输入数据有关的接口软件及其来源) l主要功能要求(从满足正确、迅速、简单、经济、方便使用者等方面达到要求的说明) l输入校验(关于各类输入数据的校验方法的说明) (4) 输出设计 l输出项目 l输出接受者 l输出要求(所用设备介质、输出格式、数值范围和精度要求等) (5) 文件(数据库)设计说明 l概述(目标、主要功能) l需求规定(精度、有效性、时间要求及其它专门要求) l运行环境要求(设备支撑软件,安全保密等要求) l逻辑结构设计(有关文件及其记录、数据项的标识、定义、长度和它们之间的关系) l物理结构设计(有关文件的存贮要求、访问方法、存贮单位、设计考虑和保密处理等) (6) 模型库和方法库设计(本系统所选用的数学模型和方法以及简要说明) (7) 安全保密设计 (8) 物理系统配置方案报告 l硬件配置设计 l通信与网络配置设计 l软件配置设计 l机房配置设计 (9) 系统实施方案及说明 l实施方案 l实施计划(包括工作任务的分解、进度安排和经费预算) l实施方案的审批(说明经过审批的实施方案概况和审批人员的姓名)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值