BAM银行账户管理系统(java类).docx

上传人:scccc 文档编号:12145132 上传时间:2021-12-02 格式:DOCX 页数:26 大小:52.86KB
返回 下载 相关 举报
BAM银行账户管理系统(java类).docx_第1页
第1页 / 共26页
BAM银行账户管理系统(java类).docx_第2页
第2页 / 共26页
BAM银行账户管理系统(java类).docx_第3页
第3页 / 共26页
BAM银行账户管理系统(java类).docx_第4页
第4页 / 共26页
BAM银行账户管理系统(java类).docx_第5页
第5页 / 共26页
点击查看更多>>
资源描述

《BAM银行账户管理系统(java类).docx》由会员分享,可在线阅读,更多相关《BAM银行账户管理系统(java类).docx(26页珍藏版)》请在三一文库上搜索。

1、BAhM艮行账户管理系统(java类)个人收集整理,勿做商业用途作者:日期:AM银行账户管理系统(ATM管理系统)本系统采用JAVA语言并在eclipse环境下编写测试完成,涉及类的概念,以及面向对象 的几大特性(继承,封装,多态,抽象),也有异常处理机制,基本可以满足大多数BAM系统的相关实现,且代码内标注大量注释,读者可以很轻松地理解相关逻辑,大家可以开心参考。系统简介:1、JAVA类的面相对象的应用,拥有异常处理机制,不会因为输入错误而导致程序崩溃2、主要有5个类,即Account (账户类) SaveAccount (储蓄账户类):不能透支 CreditAccou nt (信用账户类)

2、:可以透支 Bank (银行类) ATM( ATM类)类的具体属性级行为见代码3、各个类之间的相互关系,涉及继承、封装、多态、抽象,在多态中又涉及重载和重写,请读者注意相关联系(关注注释)4、可以实现数据保存功能,数据将保存在文件中(即当你注册了一个账户,下次再陆系统时,可以实现与上次最后的操作相衔接)5、账户号自动生成,比较符合现实6、主要功能有:1.开户2. 查询账户余额3. 存款4. 取款5. 转账(一个账户到另一个账户)等7、运行时界面简示1. 初始界面(账户登录)吉 Java - Eclipse SDKFile Edit Navigate Search Pngjiert: Run W

3、indow H?lip3 0十电艷 Problems- ®avadoc 爲 DeclarationConsoleATM (2) Java Application C:Program FiIesJavajre7binXjavaw.exe C2O13-5-24 下午 卜次匚;土欢迎使用XXX银行模拟ATM系统,请按如下歩噪操彳尹牙k*!用已有账户登录寰2 没有账户,开户*3.退出谴选择:1请输入银行卡号:1C 31请输入银行密码:11|2账户登录后界面*欢迎使用XXX银行模Matm系统,请按如下步骤操作*1.查询账户余额*2.1?款丈3 取款* 4转账士5 退卡请选择:注意事项:1、 本

4、系统采用的编程环境是JDK1.7, jer7。所以,运行代码需要保持电脑上所装的 JDK为1.7以上版本,如有报错,只需换个高一点的版本即可。注意:第一次装JDK要配置环境变量(请查阅相关资料,比较简单)2、本系统代码涉及到包,所以如果报名不一致就会报错,解决方法:修改一下包名即 可3、 建议把各个类写在同一个包下面,且每一个类单独写一个java文件,如下图:个人收集整理,勿做商业用途寺 Java - Edipse SDKFile Edit Source Reiactor Navigate Search Project Run Window Help燐*0 绻审 湮flj & *含“”

5、谓 Package Explorer匸 口T 心 BAM2 BAM02J BAM03j TJ BAM 04$ 角 srcJ com.qxAccountjava.fi ATM.java2j Bankjava了C red itAcc u nt J a va jj SavingA匚匸酋h J RE System Library jre7为 accounttxt4、在运行程序前,需要在项目下面新建一个account.txt (用来保存数据)文件(如上图),并在其中写入至少一个账户信息,(如下图,其中每项代表的意思,请读者参照代码内的注释),否则在初始化的时候会因为找不到账户信息,从而产生异常。Java

6、 - BAM&4/a«-ountt5rt - Edipr SDKFile Edit Navigate Search Project Run Window Help当曲 O* 含 ¥ * n g* '* - *tS Package Explorer 貝 *£ accciunrLtctL001,1004 张可箜f 321323, 0, 510 * 00 8AM心 BAMD2& BAM03 胡 8AMQ4田 coffi.qjc詞 Accownitjarva目 ATM.java国 Barik.java31 CreditAccountJava 血 S

7、avi ngAccou ntjava RE Systtm Ubrary ”兰7j acccunrttxt系统源码:Account类个人收集整理,勿做商业用途package com.qx;/ 包名->1.储蓄账户2信用账户*账户类:包含两种账户类型*/public abstract classAcco unt /属性protectedlong id;protectedString password;protectedString n ame;protectedString pers onld;protectedint acco un tType;protecteddouble bala n

8、ee;/构造方法publicAcco un t()super ();publicAcco unt(long id, String password, String n ame. Stringpers onld,int accoutType, doublebala nee) 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

9、 方法public long getld() return id;public void setld( long id) this .id = id;public String getPassword() retur npassword;public void 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

10、 onl d() retur npers onld;public void setPers onl d(Stri ng pers onld) this .pers onld = pers onld;public intgetAcco un tType() retur nacco un tType;public void setAcco un tType(intacco un tType) this.acco un tType = acco un tType;public doublegetBala nce() retur nbala nee;public void setBala nce( d

11、ouble bala nee) this .bala nee = bala nee;*存款*/public void deposit( doublemon ey)bala nee += mon ey;/*取款(取款方式由账户类型决定,所以设为抽象方法,相应的 象类)*/Acco unt类应设为抽public abstractvoid withdraw( doublemon ey);SavingAccoun类package com.qx;/*储蓄账户类*/exte nds Acco unt public classSavin gAcco unt/构造函数publicSavin gAcco un

12、t() super ();publicSavin gAcco unt(long id, String password, String n ame,String pers onld.int acco un tType,doublebala nee) super (id, password, name, personld, accountType, balanee);/对父类的withdraw。 实现 public void withdraw( double mon ey)if (balanee < money) System. out .println(”对不起,账户余额不足!"

13、;);elsebala nee -= mon ey;CresitAccoun类packagecom.qx;/*信用账户类,增加一个信用额度ceili ng属性*/publicclassCreditAcco untexte ndsAcco untprivate int ceili ng;/构造函数publicCreditAccou nt()super ();public CreditAcco unt( long id, String password, String n ame,intString pers onld,int acco un tType,double bala nee,ceili

14、 ng)super (id, password, name, personld, accountType, balanee); this .ceili ng = ceili ng;getXxx,setXxx 方法 public intgetCeili ng() return ceili ng;public void setCeili ng( int ceili ng) this .ceili ng = ceili ng;/实现父类的 withdraw。public void withdraw( double if (balanee + ceiling) < money) System.

15、out .println("elsebala nee -= mon ey;mon ey)对不起,已超出您的信用额度!")Bank 类package com.qx;import java.io.BufferedReader;import java.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

16、java.util.Properties;/* Bank 类*编写Bank类,属性:1. 当前所有的账户对象的集合,存放在数组中2. 当前账户数量 方法:1用户开户,需要的参数:id,密码,密码确认,姓名,身份证号码,账户类型,返回新创建的Account对象的账号,提示:用s1.equals(s2)可以比较s1,s2两个字符串的值是否相等.账户类型是一个整数, 为0的时候表示储蓄账户,为1的时候表示信用账户2. 用户登录,参数:id,密码 返回登录账户的账号3. 用户存款,参数:id,存款数额,返回void4. 用户取款,参数:id,取款数额,返回void5. 查询余额,参数:id,返回该账户

17、的余额double用户会通过调用Bank对象以上的方法来操作自己的账户,请分析各个方法需要的参数*/public class Bank private Acco un t acco unts = new Acco un t20;private int number;/ 账户数目private int id = 1001;/确定银行账号从1001开始生成,即第一个账户的账号是1001/构造函数public Ban k()accounts=new Account20; 以后不足时扩容。nu mber = 0;BufferedReader bufReader = nu II;Properties p

18、rops=System.getProperties();String path=props.getProperty("user.dir");try bufReader =new BufferedReader( new FileReader( 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 s

19、av 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(str4), 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(), str

20、3.toStri ng(),I nteger.parseI nt(str4), Double.parseDouble(str5),5000);acco untsnu mber = creditAcc;nu mber +;id+;.s = bufReader.readL in e(); catch (NumberFormatExcepti on e) / TODO Auto-ge nerated catch blocke.pri ntStackTrace(); catch (FileNotF oun dExcepti on e) / TODO Auto-ge nerated catch bloc

21、ke.pri ntStackTrace(); catch (IOExcepti on e) / TODO Auto-ge nerated catch blocke.pri ntStackTrace();fin allytry if(bufReader != null)bufReader.close(); catch (IOExceptio n e) / TODO Auto-ge nerated catch block e.pri ntStackTrace();/getXxx,setXxxpublic Acco un t getAcco un ts() retur n acco un ts;pu

22、blic 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 nt nu mber) this .nu mber = nu mber;public in t getId() return id;public void setId(i nt id) this.id = id;*开户*/public Acco unt ope nAcco un t(Stri ng passwdl. Stri

23、ng passwd2. String n ame.String pers onld, int type)/创建一个新账户Acco unt acco unt = n ull;/判断两次密码是否一致if(passwd1.equals(passwd2)II若一致,再判断账户类型(根据 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, pa

24、sswdl, 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 Acco un taccou nts.le ngth*2;IIcopy原来的相关数据System.arraycopy(acco un ts, 0, n ewAcco un ts, 0, acco unts.len gth);II 将 newAccounts赋给 accountsacco unts = n ewAcco un

25、 ts;acco un ts nu mber = acco unt;elseacco un ts nu mber = acco unt;System.out.println("开户成功! !账户信息见下");System.out.println(” 您的卡号为:"+id+"n"+"您的密码为:"+passwd1+"n"+"您 的户名为:"+n ame+"n"+"您的身份证号为:"+personld+"in"+"您的账

26、户类型为:"+type+"n”);acco un t.acco un tType = type;nu mber+;id+;return account;此时开户成功elseSystem.out.println(”对不起!您两次密码输入不匹配,开户失败! !");return null;此时开户失败/*/保存数据public void saveAcco un tDate()BufferedWriter bufWriter= null;try Properties props=System.getProperties();String path=props.getPr

27、operty("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 tsi != n ull)/写入账户信息到account.txtbufWriter.write(accou ntsi.id+","); bufWriter.write(acco un tsi.getPassword()+"

28、,"); bufWriter.write(accou ntsi.getName()+",");bufWriter.write(acco un tsi.getPerso nld()+","); bufWriter.write(acco un tsi.getAcco un tType()+","); bufWriter.write(Double.toStri ng(acco un tsi.getBala nce(); bufWriter. newL in e();elsebreak;bufWriter.flush();/清空缓存

29、中的内容 catch (IOExcepti on e) / TODO Auto-ge nerated catch blocke.pri ntStackTrace();fin allytry if(bufWriter!=null)bufWriter.close(); catch (IOExceptio n e) / TODO Auto-ge nerated catch blocke.pri ntStackTrace();/* *登录验证*/public Acco unt verifyAcco un t(l ong id, String password)Acco unt acco unt = n

30、 ull;for(i nt i = 0;i < acco unts.len gth;i+)/若存在账户if(acco un tsi != nu II)/验证id号和passwordif(id = acco un tsi.getld() && password.equals(acco un tsi.getPassword() acco unt = acco un tsi; break;/* elsebreak;retur n acco unt;retur n acco unt; / ATM类,提供用户界面操作 */public class ATM /属性private Ba

31、nk bank;/构造函数*转账*/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 unt, doub

32、le 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;public ATM() bank = new Ban k();main方法public static void

33、 main( Stri ng 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.pri ntl n("System.out.pri ntl n("*1.用已有账户登录");*2.没有

34、账户,*3.退出");开户");Scanner sca nner = new Sca nn er(System.i n);System.out.print(” 请选择:”); 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.n ext In t();sca nner = new Sca nn er(Syst

35、em.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("*“、欢迎使用XXX银行模拟ATM系System.out.pri n

36、tln(”System.out.pri ntln(”System.out.pri ntln(”System.out.pri ntln(”System.out.pri ntln(”*1.查询账户余额");*2.存款");*3.取款");*4.转账");*5.退卡");sca nner = new Sca nn er(System.i n);System.out.print("请选择:");try int choice2 = sea nner.n extl nt();switch(choice2)case 1:System.ou

37、t.println(”您账户的当前余额为: "+acco un t.getBala nce();break;case 2:sca nner = new Sca nn er(System.i n);System.out.print(”请输入您的存款金额:”);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);System.out.print(”请输入您的取款金额:”);double mon e

38、y2 = sca nner.n extDouble();ban k.withdraw(acco unt, mon ey2);break;case 4:sca nner = new Sca nn er(System.i n);System.out.print(”请输入您要转入账户的卡号:");long id2 = sca nner.n extL on g();Acco unt acco unt2 = ban k.verifyAcco un t(id2);if(acco unt2 != nu II)sca nner = new Sca nn er(System.i n);System.o

39、ut.print("请输入您要转入账户的金 额:”);double money = sca nner.n extL on g();if(money <= acco un t.bala nee)ban k.tra nsferAcco un t(acco unt,acco unt2,mon ey);System.out.println(” 转账成功! ! !");elseSystem.out.println(”抱歉,您账户没有足 够的金额!请查看后重新选择输入!");elseSystem.out.println(”抱歉,没有找到您要转入的账户信息!请核对后重新选

40、择输入!”);break;case 5:sec on dFlag = false; break;default:System.out.println(”没有该选项,请重新选择!");break; catch (Excepti on e) System.out.println(”选择输入不合法,请重新选择! ");elseSystem.out.println(”没有此账户,请先开户!”);break;case 2:/账号id由银行自动提供(从 1001递增)sca nner = new Sca nn er(System.i n);System.out.print("

41、请输入账户密码:");String passwd1 = sca nner.n ext();sca nner = new Sca nn er(System.i n);System.out.print("请再输入账户密码:”);String passwd2 = sca nner.n ext();sca nner = new Sca nn er(System.i n);System.out.print("请输入户主姓名:”);String n ame = sca nner.n ext();sca nner = new Sca nn er(System.i n);Syst

42、em.out.print("请输入户主身份证号码:”);String pers onld = sca nner.n ext();sca nner = new Sca nn er(System.i n);System.out.print("请输入账户类型(0储蓄,1信用):”);int type = sca nner.n ext In t();ban k.ope nAcco un t(passwd1, passwd2, n ame, pers onld, type);break;case 3:ban k.saveAcco un tDate();firstFlag = fals

43、e;break;default :System.out.println(”没有该选项,请重新选择!”);break; catch (Exceptio n e) System.out.println(”选择输入不合法,请重新选择!");System.out.println("谢谢使用!");转账验证(方法的重载)*/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+)/若存在账户if(acco un tsi != n ull)/ 验证 id 号和 passwordif(id = acco un tsi.getld() acco unt = acco un tsi; break;elsebreak;

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 社会民生


经营许可证编号:宁ICP备18001539号-1