原创,申请前不得转载。
整个项目的作用是:
实现了能根据操作人员的权限不同,ATM系统前后台操作权限不同,前台的操作有开户、存取款、转账和销户,后台的操作有对客户、账户、操作人员的增删改查和账户异动,还能切换操作人员;
项目的整体结构:
一、对包的整理总结:
1、放入口方法的类单独放一个包;
2、后台操作放一类包:
(1)、xxxmgr.business.ebo的包用来放 xxxEbo 类,具体作用还不明白
(2)、xxxmgr.ui的包用来放 对应对象的增删改查(在控制台中让人员自己操作) 类
(3)、xxxmgr.vo的包用来放 这个类的属性、对应的get、set方法、改写的hashcode、equals、toString 方法 类
3、前台操作放另外两个包:
(1)、.customeruse.depositmgr 存取款
(2)、.customeruse.accountmgr 开户、销户
(3)、.util存放引用类型MySet、创建日期的类
二、放主方法的App类的思维结构
1、主方法
(1)、启动服务
(2)、显示登录页面
2、登录方法showLogin()
(1)、监听;
(2)、判断登录的账号密码是否输入正确,如果正确,根据权限显示菜单,否则重复输入账号密码;
3、显示主菜单信息方法showMainMenuInfo(OperModel om)
根据权限判断对一些信息的输出
4、显示主菜单方法showMainMenu(OperModel om)
(1)、调用showMainMenuInfo(OperModel om)方法
(2)、监听switch判断输入走哪一个功能
(3)、如果输入的是切换操作人员,清空原来登录人员并登录判断
5、显示前台目录信息方法showFrontMenuInfo()
显示前台有的所有操作的文字输出
6、显示前台目录方法showFrontMenu(String operId)
(1)、调用showFrontMenuInfo()方法
(2)、监听,switch判断输入走哪一个功能
7、显示后台目录信息方法showBankMenuInfo()
显示后台有的所有操作的文字输出
8、显示前台目录方法showBankMenu(String operId)
(1)、调用showBankMenuInfo()方法
(2)、监听,switch判断输入走哪一个功能
9、后面账户、客户、操作员都是一样的模式
操作员的类分析,账户、客户
三、放OperEbo类的方法和为什么设置这么一个类
登录、增加、查询、修改的实际方法
四、放Add类的方法和为什么设置这么一个类
增加操作员的类,addOper()方法用来输出提示文字,创建对象,调用OperEbo()类的add()方法实际操作增加成员并判断是否增加成功
五、放Delete类的方法和为什么设置这么一个类
增加操作员的类,deleteOperr()方法用来输出提示文字,创建对象,调用OperEbo()类的delete()方法实际操作增加成员并判断是否删除成功
六、放OperListo类的方法和为什么设置这么一个类
4个方法,放输出表头表尾分别是什么,显示所有元素和根据ID查找元素
分别使用OperEbo()类中的getAll()方法和getById()方法;
七、放Update类的方法和为什么设置这么一个类
输出文字,创建对象,调用OperEbo()类中的update()方法;
八、放OperModel类的方法和为什么设置这么一个类
属性、对应的get、set方法、改写的hashcode、equals、toString 方法
九、是如何划分类的
对象属性、get、set方法、重写的equals、toString方法划分一个类
实际的操作方法写一个类存起来
操作时需要用到的输出、创建的对象、调用到实际方法的写成一个类,类似的方法放到一个包里
细化的对每个类的具体理解:
1、OperEbo类
login方法:
输入:用户名和密码
输入:比较是否符合,符合登录成功;否则登陆失败
具体:如果MySet 类集合set中有OperModel类的元素的Id和Psw和传进来的用户名密码相等,则返回true,否则返回false
set是得到所有的工作人员中心信息,
学习:for-each循环遍历集合的时候,每个元素的位置写的是Object
getById方法:
输入:id号
输入:一个人员OperModel类
功能:判断输入的id在operDB这个MySet中,则把这个成员返回,否则返回空
2、MySet类
其实是一个Object数组
里面有方法:包含方法、增加、删除方法,得到长度,得到所有元素
3、OperModel类
作用:代表了一个人的基本信息
重写了equals、hashcode、toString 方法
重写的equals方法:比较id,工作人员的id是唯一的
重写的hashcode方法返回1:
重写的toString方法:把id、name、等基本内容打印出来
4、ServiceEbo类
作用:一开始启动服务,给工作人员赋初始值,外部不能修改这个类
5、主方法:
先启动服务,为工作人员赋初始值
然后要求登录,输入错误的用户名和密码登录失败,否则登录成功,
登录成功后,把用户名赋值给NowOperId
展示:有什么功能
用type用户属性来区分人员可以操作前台或者后台数据
flag判断输入的是什么操作
changeOper 判断是否要切换操作人员,但是不懂NowOperId这个字段设置的意义
后台操作:
(1):客户资料维护
客户的行为写在
cn.banksystem.bankuse.customermgr.ui 这个包里
(1):新增客户
CustomerModel 是客户类,包含了客户的姓名、id、生成日期这些信息
Add类包括一个增加方法,让用户输入用户名和密码,系统自动生成日期,如果客户MySet中没有这个Id,就新增客户
DateHelper类中的getNowDate()方法用来得到当前日期,返回的是String类型
java.text 包中有一个SimpleDateFormat 类,
类CustomerEbo,有个add方法
(2):修改客户
修改客户原来是修改客户姓名
(3):删除客户
(4):查询全部客户
(5):按ID查询客户
(6):返回上一级
(2):帐户资料维护
(1):新增帐户
(2):修改帐户
修改账户原来是修改账户的余额
(3):删除帐户
(4):查询全部帐户
(5):按ID查询帐户
(6):按客户的ID查询帐户
(7):返回上一级
(3):帐户异动检查
输出字样,并停留监听下一次输入
(4):操作人员维护
(1):新增操作人员
操作人员的type:1:前后台、切换、退出,相当于最大权限
2:后台、切换、退出,相当于dr那样后台数据库操作人员
3:前台、切换、退出,相当于xx婷的前台操作人员
default:只能切换和退出,相当于登录错误了
(2):修改操作人员
修改操作人员,操作人员的姓名、密码、类型都会被修改
(3):删除操作人员
(4):查询全部操作人员
(5):按ID查询操作人员
(6):返回上一级
(5):返回上一级
前台操作:
(1):开户
开户 会开 客户、账户
(2):存款
存款是找到账户就能存款(不需要填写密码?)
(3):取款
取款只需要填写账户(不需要密码就能取款?)
(4):转帐
(5):销户
(6):返回上一级
可以改进的地方:
对客户的增删改查:
1、修改客户时,如果输入的id是不存在的没有做处理
2、选择功能的时候,如果不在被选择的选项中的时候没有提示报错
3、如果删除的客户编号不存在,也提示删除成功,没有正确提示
4、如果查询的客户编号不存在,没有提示报错,而是返回空的展示信息
对账户的增删改查:
1、账户所属客户需要核实吗?需要客户DB中有这个客户才能增加进去吗?还是说这里的所属客户是独立的,如果是独立的,容易引起歧义,如果不是独立的,客户的DB中没有这个客户也能增加账户,说明有错。
2、删除账户DB中没有的账户时也提示删除成功
3、如果查询的客户编号不存在,没有提示报错,而是返回空的展示信息
账户移动检查
1、账户移动检查的时候输出账户异动检查这个字样,但是没有再次输出让用户再次输入选择的序号
操作人员的增删改查
1、修改操作人员时输入不正确的操作人员编号会造成溢出
2、新增的操作人员所有数值为空的时候也能新增成功(尝试后台操作的时候,姓名编号为空的操作员能有什么权限)
3、操作人员的数据库中有编号和姓名都为空的操作人员,但是按照ID查询的时候没有把空行显示出来
4、按照ID查询的时候,输入不存在的id,也展示信息
前台操作
1、转账功能的时候转入账户如果不存在,没有报错,而是在输入转入金额了以后才出现溢出,转出同理
2、前台的开户操作,会把客户和账户开好了以后存储到customerDB和账户DB中,然后后台操作的时候查询客户和账户是能查询得到
3、销户的操作很有问题:如果销去的是系统中原来并没有的账户,没有报错处理,而是直接溢出
如果销去的是系统中原来存在的账户,没有任何操作提示,最后我并不知道我是否销户成功了;
4、前台存款的时候,输入不存在的账户,没有提示报错,而是直接溢出;
问题:
1、setNowOperId的作用是什么?开始以为在showMainMenuInfo(OperModel om)判断的时候会用到,但是发现并没有用到
总结:
接触一个新的项目时,先运行玩两三遍,先有一个整体而感性的认识,知道这个程序是干什么的,遇到的bug可以记录下来,方便后续再次阅读时维护;
然后看整体的代码框架,都是怎么封装的,主函数中在做什么,每一个类在做什么,每一个方法在做什么,这样清晰很多。