版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、AM银行账户管理系统(ATM管理系统)本系统采用JAVA语言并在eclipse环境下编写测试完成,涉及类的概念,以及面向对象 的几大特性(继承,封装,多态,抽象),也有异常处理机制,基本可以满足大多数BAM系统的相关实现,且代码内标注大量注释,读者可以很轻松地理解相关逻辑,大家可以开心参考。系统简介:1、JAVA类的面相对象的应用,拥有异常处理机制,不会因为输入错误而导致程序崩溃2、主要有5个类,即Account (账户类) SaveAccount (储蓄账户类):不能透支 CreditAccou nt (信用账户类):可以透支 Bank (银行类) ATM( ATM类)类的具体属性级行为见代
2、码3、各个类之间的相互关系,涉及继承、封装、多态、抽象,在多态中又涉及重载和重 写,请读者注意相关联系(关注注释)4、可以实现数据保存功能,数据将保存在文件中(即当你注册了一个账户,下次再登 陆系统时,可以实现与上次最后的操作相衔接)5、账户号自动生成,比较符合现实6、主要功能有:1.开户2. 查询账户余额3. 存款4. 取款5. 转账(一个账户到另一个账户)等7、运行时界面简示1. 初始界面(账户登录)言 Java - Eclipse SDKFfle Edit Navigate Search Project Run Window Mflp片Declaration拒 Problems Java
3、dloonsoleATM J a Via Appli catron C:Program FilesVaviajre7binjavaw,exe (2013-5-24 下午 7:吕&06)*迎使用XXX银行摸拟ATM系统,请按如下步瘵操作玄*士:L用已有账户登录寰2 .没有账户,幵户退出请选择:请输入银行卡号:1 : 请输入银行密码:2账户登录后界面*欢迎使用XXX银行模拟AT何系统,请按如下步礫操作*1.查询账户余额*2.1?款丈3 .馭款* 4转账玄5 退卡请选择:注意事项:1、本系统采用的编程环境是JDK1.7, jer7。所以,运行代码需要保持电脑上所装的JDK为1.7以上版本,如
4、有报错,只需换个高一点的版本即可。注意:第一次装JDK要配置环境变量(请查阅相关资料,比较简单)2、本系统代码涉及到包,所以如果报名不一致就会报错,解决方法:修改一下包名即 可3、建议把各个类写在同一个包下面,且每一个类单独写一个java文件,如下图:导 Java -氐lips日 SDKFile Edit Source Refactor Navigate Search Project Run Window HelpPackage Explorer誇BAMQ BAM027 BAM03* BAM04J 魯 arcd it? com.qx:Jj Accountjava.£ ATM.java
5、7| Bankjava2j C red itAcc o u nt J a vaJj Saving Account,java h J RE System Library jre7 _ account.txt4、在运行程序前,需要在项目下面新建一个account.txt (用来保存数据)文件(如上图),并在其中写入至少一个账户信息,(如下图,其中每项代表的意思,请读者参照代码内的注释),否则在初始化的时候会因为找不到账户信息,从而产生异常。File Edit Navigate Search Prcyect Run Window Help;r3 * Hj ®* q -i 酉田®亏
6、mm * v-J *打灵LT 100'舐可箜f 321323,0, 510.0K Package Explorer 貝IB才 Q BAM& BAM02心 BAM03G BAM04田 com.qxAccountjavaQ ATM,javaJ Bankjava31 CreditAcccuntjava7| Savi ngAccou nt.java tRE System Libi,iairy jjs 7-accouinrttxt系统源码:Account类package com.qx;/ 包名/*账户类:包含两种账户类型->1.储蓄账户2.信用账户*/public abstract
7、 class Acco unt /属性 protected protected protected protected protectedlong id;String password;String n ame;String pers onld;int acco un tType;protecteddouble bala nee;/构造方法publicAcco un t()super ();publicAcco unt(long id, String password, String n ame. Stringpers onld,int accoutType, doublebala nee)
8、super ();this .id = id;this .password = password;this .n ame = n ame;this .pers onld = pers onld;this .acco un tType = acco un tType;this .bala nee = bala nee;/getXxx,setXxx 方法public long getld() return id;public void setId( long id) this .id = id;public String getPassword() retur npassword;public v
9、oid setPassword(Stri ng password) this .password = password;public String getName() return n ame;public void setName(Stri ng n ame) this .n ame = n ame;public String getPers onl d() retur npers onld;public voidsetPers onl d(Stri ng pers onld) this .pers onld = pers onld;public int getAcco un tType()
10、 retur nacco un tType;public voidsetAcco un tType(intacco un tType) this .acco un tType = acco un tType;public double getBala nce() retur nbala nee;public void setBala nce( double bala nee) this .bala nee = bala nee;*存款*/public void deposit( double mon ey)bala nee += money;/*取款(取款方式由账户类型决定,所以设为抽象方法,
11、相应的Aeeou nt类应设为抽*/publieabstraetvoid withdraw(double mon ey);象类)SavingAccoun类package eom.qx;/*储蓄账户类*/public class Savin gAeeo unt/构造函数publieSavin gAeeo un t() super ();exte nds Aeeo unt publieSavin gAeeo unt(long id, String password, String n ame,String pers aeeo un tType,doublebala nee) su
12、per (id, password, name, personld, aeeountType, balanee);/对父类的withdraw。 实现 publie void withdraw( double mon ey)if (balanee < money) System. out .println(”对不起,账户余额不足!");elsebala nee -= mon ey;CresitAccoun类packagecom.qx;/*ceili ng属性exte ndsAcco unt*信用账户类,增加一个信用额度*/public class CreditAcco unt p
13、rivate int ceili ng;/构造函数publicCreditAccou nt()super ();public CreditAcco unt(long id, String password, String n ame,String pers acco un tType,doublebala nee,intceili ng)super (id, password, name, personld, accountType, balanee); this .ceili ng = ceili ng;/getXxx,setXxx 方法public intgetCeili
14、 ng() returnceili ng;public voidsetCeili ng(int ceili ng) this .ceili ng = ceili ng;/实现父类的 withdraw。public void withdraw( double mon ey)if (balanee + ceiling) < money)System. out .println(”对不起,已超出您的信用额度!"); elsebala nee -= mon ey;Bank 类package com.qx;import java.io.BufferedReader;import java
15、.io.BufferedWriter;import java.io.File;import java.io.FileNotF oun dExcepti on;import java.io.FileReader;import java.io.FileWriter;import java.i o.I OExcepti on;import java.util.Properties;* Bank 类*编写Bank类,属性:1. 当前所有的账户对象的集合,存放在数组中2. 当前账户数量方法:1. 用户开户,需要的参数:id,密码,密码确认,姓名,身份证号码,账户类型,返回新创建的Account 对象的账
16、号,提示:用s1.equals(s2)可以比较s1,s2两个字符串的值是否相等.账户类型是一个整数, 为0的时候表示储蓄账户,为1的时候表示信用账户2. 用户登录,参数:id,密码 返回登录账户的账号3. 用户存款,参数:id,存款数额,返回void4. 用户取款,参数:id,取款数额,返回void5. 查询余额,参数:id,返回该账户的余额double用户会通过调用Bank对象以上的方法来操作自己的账户,请分析各个方法需要的参数*/public class Bank private Acco un t acco unts = new Acco un t20;private int numbe
17、r;/ 账户数目private int id = 1001;/确定银行账号从1001开始生成,即第一个账户的账号是1001/构造函数public Ban k()accounts=new Account20; 以后不足时扩容。nu mber = 0;BufferedReader bufReader = nu II;Properties props=System.getProperties();String path=props.getProperty("user.dir");try bufReader =new BufferedReader( new FileReader(
18、new File(path,"acco un t.txt");String s = bufReader.readL in e();while(s != n ull)Strin g str = s.split(",");if(str4.equals("0")Acco unt sav in gAcc = new Savi ngAcco un t(L on g.parseL on g(str0), str1.toString(), str2.toString(),str3.toStri ng(),I nteger.parseI nt(str
19、4), Double.parseDouble(str5);acco untsnu mber = savi ngAcc;elseAcco unt creditAcc = new CreditAcco un t(L on g.parseL on g(str0), str1.toString(), str2.toString(),str3.toStri ng(),I nteger.parseI nt(str4),Double.parseDouble(str5),5000);acco untsnu mber = creditAcc;nu mber +;id+;s = bufReader.readL i
20、n e(); catch (NumberFormatExcepti on e) / TODO Auto-ge nerated catch blocke.pri ntStackTrace(); catch (FileNotF oun dExcepti on e) / TODO Auto-ge nerated catch blocke.pri ntStackTrace(); catch (IOExcepti on e) / TODO Auto-ge nerated catch blocke.pri ntStackTrace();fin allytry if(bufReader != null)bu
21、fReader.close(); catch (IOExceptio n e) / TODO Auto-ge nerated catch blocke.pri ntStackTrace();/getXxx,setXxxpublic Acco un t getAcco un ts() retur n acco un ts;public void setAcco un ts(Acco un t acco un ts) this.acco unts = acco un ts;public int getNumber() retur n nu mber;public void setNumber(i
22、nt nu mber) this .nu mber = nu mber;public in t getId() return id;public void setld(i nt id) this.id = id;*开户*/public Acco unt ope nAcco un t(Stri ng passwd1. String passwd2. String n ame,String pers onld, int type)/创建一个新账户Acco unt acco unt = n ull;/判断两次密码是否一致if(passwd1.equals(passwd2)II若一致,再判断账户类型(
23、根据 type的值)if(type = 1)II可令开始余额为10,信用额度为5000acco unt = new CreditAcco un t(id, passwdl, n ame, pers onld, type, 10, 5000);elseacco unt = new Savin gAcco un t(id, passwdl, n ame, pers onld, type, 10);II将账户存入账户数组accou nts中II判断是否超出存储空间if(nu mber >= acco unts.len gth) II扩容Acco un t n ewAcco unts = new
24、 Acco un taccou nts.le ngth*2;IIcopy原来的相关数据System.arraycopy(acco un ts, 0, n ewAcco un ts, 0, acco unts.len gth);/ 将 newAccounts赋给 accounts acco unts = n ewAcco un ts;acco un ts nu mber = acco unt;elseacco un ts nu mber = acco unt;System.out.println("开户成功! !账户信息见下");(” 您的卡号为:"+id+&quo
25、t;n"+"您的密码为:"+passwd1+"n"+"您 的户名为:"+n ame+"n"+"您的身份证号为:"+personld+"n"+"您的账户类型为:"+type+"n”);acco un t.acco un tType = type;nu mber+;id+;return account;此时开户成功else(”对不起!您两次密码输入不匹配,开户失败! !");return null;此时开户失败*保存数据*/pub
26、lic void saveAcco un tDate() BufferedWriter bufWriter= null;try Properties props=System.getProperties();String path=props.getProperty("user.dir");bufWriter= new BufferedWriter(new FileWriter(new File(path,"account.txt"); for(i nt i = 0;i < acco unts.len gth;i+)/若存在账户if(acco un
27、 tsi != n ull)/写入账户信息到 account.txt bufWriter.write(accou ntsi.id+",");bufWriter.write(acco un tsi.getPassword()+","); bufWriter.write(accou ntsi.getName()+",");bufWriter.write(acco un tsi.getPerso nId()+","); bufWriter.write(acco un tsi.getAcco un tType()+&quo
28、t;,"); bufWriter.write(Double.toStri ng(acco un tsi.getBala nce();bufWriter. newLi ne();elsebreak;bufWriter.flush(); 清空缓存中的内容 catch (lOExcepti on e) / TODO Auto-ge nerated catch blocke.pri ntStackTrace();fin allytry if(bufWriter!=null) bufWriter.close(); catch (IOExceptio n e) / TODO Auto-ge ne
29、rated catch block e.pri ntStackTrace();*登录验证*/public Acco unt verifyAcco un t(l ong id, String password)Acco unt acco unt = n ull;for(i nt i = 0;i < acco unts.len gth;i+)/若存在账户if(acco un tsi != n ull)/ 验证 id 号和 passwordif(id = acco un tsi.getld() && password.equals(acco un tsi.getPassword
30、() acco unt = acco un tsi;break;else break;retur n acco unt;/*转账验证(方法的重载)*/public Acco unt verifyAcco un t(l ong id) Acco unt acco unt = n ull;for(i nt i = 0;i < acco unts.len gth;i+) /若存在账户/验证id号和password if(id = acco un tsi.getld() acco unt = acco un tsi; break;if(acco un tsi != n ull) elsebrea
31、k;retur n acco unt;/*转账*/public void tran sferAcco un t(Acco unt acco un t1, Acco unt acco un t2, double mon ey) acco un t1.withdraw(m on ey);acco un t2.deposit(m on ey);/*存款*/public void deposit(Acco unt acco unt, double mon ey) acco un t.deposit(m on ey);/*取款*/public void withdraw(Acco unt acco un
32、t, double mon ey) acco un t.withdraw(m on ey);ATM类package com.qx;import java.io.BufferedReader;import java.io.BufferedWriter;import java.io.File;import java.io.FileReader;import java.io.FileWriter;import java.util.Properties;import java.util.Sca nner;* ATM类,提供用户界面操作*/ public class ATM /属性private Ban
33、k bank;/构造函数public ATM() bank = new Ban k();main方法public static void main(String args) ATM atm = new ATM(); 实例化 Bank bank = atm.ba nk;/标号,判断是否退出一级菜单 boolea n firstFlag = true;while(firstFlag)ATM/ 一级菜单System.out.pri ntln("*欢迎使用XXX银行模拟ATM系统,请按如下步骤操作 *");System.out.pri ntl n("System.out.
34、pri ntl n("System.out.pri ntl n("*1.用已有账户登录”);*2.没有账户,开户");*3.退出");Scanner sca nner = new Sca nn er(System.i n);(” 请选择:”);try int choice1 = sca nner.n ext In t();switch(choice1)case 1:sca nner = new Sca nn er(System.i n); System.out.print("请输入银行卡号:");long id = sca nner.
35、n ext In t();sca nner = new Sca nn er(System.i n); System.out.print("请输入银行密码:"); String password = sca nner.n ext();Acco unt acco unt = ban k.verifyAcco un t(id, password);统,请按如下步骤操作if(acco unt != n ull)/标号,判断是否退出二级菜单boolea n sec on dFlag = true;while(sec on dFlag)/二级菜单System.out.pri ntln(
36、"*“、.System.out.pri ntl n(" System.out.pri ntl n("System.out.pri ntl n(" System.out.pri ntl n("System.out.pri ntl n("欢迎使用XXX银行模拟ATM系*1.查询账户余额");*2.存款");*3.取款");*4.转账");*5.退卡");System.out.print("请选择: try scanner = new Scann er(System.i n);&q
37、uot;);int choice2 = scanner.nextInt();switch(choice2)case 1:(”您账户的当前余额为:"+acco un t.getBala nce();break;case 2:sca nner = new Sca nn er(System.i n);(”请输入您的存款金额:”);double mon ey1 = sca nner.n extDouble();ban k.deposit(acco unt, mon ey1);break;case 3:sca nner = new Sca nn er(System.i n);(”请输入您的取款金额:”);double mon ey2 = sca nner.n extDouble();ban k.withdraw(acco unt, mon ey2);break;case 4:sca nner = new Sca nn er(System.i n);(”请输入您要转入账户的卡号:");long id2 = sca nner.n extL on g();Acco unt acco unt2 = ban k.verifyAcco un t(id2);if(acco unt2 != nu II)sca nne
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024至2030年中国离子烟雾探测器行业投资前景及策略咨询研究报告
- 2024至2030年重瓶下线机项目投资价值分析报告
- 《宣传与推广》课件
- 2024至2030年插入自锁式接头芯项目投资价值分析报告
- 2024至2030年漂白立衬羽绒被项目投资价值分析报告
- 2024至2030年中国半自动硫化机行业投资前景及策略咨询研究报告
- 2024年中国酒店皂市场调查研究报告
- 2024年中国脱落截断器市场调查研究报告
- 2024年中国精轴不锈钢丝市场调查研究报告
- 《交际中的语言运用》课件
- 人人爱设计学习通超星期末考试答案章节答案2024年
- 5.2解一元一次方程(第5课时 综合应用)(教学课件)
- 2024-2030年中国竹业行业市场深度调研及发展趋势与投资前景研究报告
- 电梯维保服务投标方案
- 01685《动漫艺术概论》历年考试真题试题库(含答案)
- 精神科病房安全管理护理管理培训课件
- 2024年特种作业人员(高压电工)证复审考试题库及答案
- WAT电性参数介绍-2022年学习资料
- 07FJ01~03 防空地下室建筑设计(2007年合订本)
- DL∕T 1052-2016 电力节能技术监督导则
- 2024年山东客运驾驶员培训试题及答案详解
评论
0/150
提交评论