Java如何实现ATM机操作系统(java,开发技术)

时间:2024-05-02 15:30:06 作者 : 石家庄SEO 分类 : 开发技术
  • TAG :

用IO流操作txt文件作为数据库模拟实现一个ATM业务操作系统---->网上银行,实现登录,查询余额,存款,取款,转账,开户,销户等业务功能

1.用户类----->User:

packageatm;importjava.io.Serializable;publicclassUserimplementsSerializable{//建议除了私有属性无参数有参数构造方法属性对应的get、set方法//建议类实现一个序列化接口添加一个序列化版本号privatestaticfinallongserialVersionUID=1L;//只是为了记录数据库中的一行信息账号密码余额privateStringaName;privateStringaPassword;privateFloataSalary;publicUser(){}publicUser(StringaName,StringaPassword,FloataSalary){this.aName=aName;this.aPassword=aPassword;this.aSalary=aSalary;}publicStringgetaName(){returnthis.aName;}publicvoidsetaName(StringnewName){this.aName=newName;}publicStringgetaPassword(){returnthis.aPassword;}publicvoidsetaPassword(StringnewPassword){this.aPassword=newPassword;}publicFloatgetSalary(){returnthis.aSalary;}publicvoidsetSalary(FloatnewSalary){this.aSalary=newSalary;}}

2.操作IO的类------>FileLoadAndCommit:

packageatm;importjava.io.BufferedReader;importjava.io.BufferedWriter;importjava.io.File;importjava.io.FileNotFoundException;importjava.io.FileReader;importjava.io.FileWriter;importjava.io.IOException;importjava.util.HashMap;importjava.util.Iterator;//操作文件publicclassFileLoadAndCommit{//文件路径privateStringpathName=null;publicFileLoadAndCommit(StringpathName){this.pathName=pathName;}//读取文件装入集合publicHashMap<String,User>loadFile(){//临时的存储空间,将文件中读取的数据存储以便于修改HashMap<String,User>userBox=newHashMap<String,User>();//IO流读取FileReaderfr=null;BufferedReaderbr=null;try{fr=newFileReader(newFile(pathName));br=newBufferedReader(fr);Stringcode=br.readLine();//读取一行//循环遍历所有行按"-"拆分一行的数据,作为User存入集合while(code!=null){String[]value=code.split("-");Useruser=newUser(value[0],value[1],Float.parseFloat(value[2]));userBox.put(user.getaName(),user);code=br.readLine();}}catch(IOExceptione){//TODOAuto-generatedcatchblocke.printStackTrace();}finally{try{//如果流管道存在,才关闭if(fr!=null){fr.close();}}catch(IOExceptione){//TODOAuto-generatedcatchblocke.printStackTrace();}try{if(br!=null){br.close();}}catch(IOExceptione){//TODOAuto-generatedcatchblocke.printStackTrace();}}returnuserBox;}//将集合更新入文件publicvoidcommit(HashMap<String,User>userBox){//IO流写入FileWriterfw=null;BufferedWriterbw=null;try{fw=newFileWriter(newFile(pathName));bw=newBufferedWriter(fw);//迭代集合内所有账户名按账户名找到对应的User对象Iterator<String>names=userBox.keySet().iterator();while(names.hasNext()){Stringname=names.next();Useruser=userBox.get(name);//用StringBuilder拼接字符串StringBuildersBuilder=newStringBuilder();sBuilder.append(user.getaName());sBuilder.append("-");sBuilder.append(user.getaPassword());sBuilder.append("-");sBuilder.append(user.getSalary());bw.write(sBuilder.toString());//将拼好的一行数据写入文件bw.flush();//刷新bw.newLine();//换行}}catch(IOExceptione){//TODOAuto-generatedcatchblocke.printStackTrace();}finally{//必须先关闭BufferedWriter再关闭FileWrite,否贼会抛异常java.io.IOException:Streamclosedtry{if(bw!=null){bw.close();}}catch(IOExceptione){//TODOAuto-generatedcatchblocke.printStackTrace();}try{if(fw!=null){fw.close();}}catch(IOExceptione){//TODOAuto-generatedcatchblocke.printStackTrace();}}}}

3.负责读写的类----->AtmDao:

packageatm;importjava.util.HashMap;//持久化,负责读写数据,缓存publicclassAtmDao{privateFileLoadAndCommitflac=newFileLoadAndCommit("D:\\test\\ATM\\testATM.txt");HashMap<String,User>userBox=flac.loadFile();//获取一个User对象publicUserselectOne(StringaName){returnuserBox.get(aName);}//更新文件数据publicvoidupdate(Useruser){userBox.put(user.getaName(),user);flac.commit(userBox);}//删除文件数据publicvoiddelete(Useruser){userBox.remove(user.getaName(),user);flac.commit(userBox);}}

4.负责业务逻辑的类------>ATMService:

packageatm;importjava.util.HashMap;//负责业务逻辑判断比较计算publicclassATMService{//登录privateAtmDaodao=newAtmDao();publicStringlogin(StringaName,StringaPassword){Useruser=dao.selectOne(aName);if(user!=null){if(aPassword.equals(user.getaPassword())){return"登录成功";}}return"用户名或密码错误";}//查询余额publicFloatinquiry(StringaName){Useruser=dao.selectOne(aName);returnuser.getSalary();}//存款publicvoidaddMoney(StringaName,FloataddMoney){Useruser=dao.selectOne(aName);//获取该用户对象user.setSalary(user.getSalary()+addMoney);//用User的set方法修改用户金额dao.update(user);//更新文件数据System.out.println("存款成功\n");}//取款publicvoidgetMoney(StringaName,FloatgetMoney){Useruser=dao.selectOne(aName);//获取该用户对象if(getMoney<=user.getSalary()){//如果要取出的钱大于余额就不能取了user.setSalary(user.getSalary()-getMoney);dao.update(user);System.out.println("取款成功\n");}else{System.out.println("对不起,您的余额不足\n");}}//转账publicvoidtransferMoney(StringoutName,StringinName,FloattransferMoney){UseroutUser=dao.selectOne(outName);//转出用户UserinUser=dao.selectOne(inName);//转入用户if(inUser!=null){//转入用户存在if(outUser!=inUser){//转出和转入用户不能是同一个用户if(transferMoney<=outUser.getSalary()){//转出金额大于余额就不能转了outUser.setSalary(outUser.getSalary()-transferMoney);//修改转出用户余额inUser.setSalary(inUser.getSalary()+transferMoney);//修改转入用户余额//更新文件数据dao.update(outUser);dao.update(inUser);System.out.println("转账成功\n");}else{System.out.println("对不起"+outName+",您的余额不足\n");}}else{System.out.println("对不起,不能给自己转账,您可以试试使用存款业务\n");}}else{System.out.println("对不起,您输入的用户不存在\n");}}//开户publicUsercreatUser(StringaName,StringaPassword,FloataSalary){Useruser=newUser(aName,aPassword,aSalary);dao.update(user);//更新文件数据System.out.println("用户"+aName+",创建成功");returnuser;}//销户publicvoiddeleteUser(StringaName){Useruser=dao.selectOne(aName);//获取名为aName的用户if(user!=null){//判断该用户是否在文件数据内存在dao.delete(user);System.out.println("用户"+aName+",删除成功");}else{System.out.println("要销毁的账户不存在");}}}

5.测试类----->TestMain:

packageatm;importjava.util.Scanner;publicclassTestMain{publicstaticvoidmain(String[]args){ATMServiceatmService=newATMService();//获取执行业务的方法Scannerinput=newScanner(System.in);System.out.println("欢迎进入ATM机系统");System.out.println("请选择要操作的业务:\n1.用户登录\n2.开户\n3.按任意键退出");Stringchoice=input.next();if(choice.equals("1")){System.out.println("请输入账户名");Stringname=input.next();System.out.println("请输入密码");Stringpassword=input.next();StringafterLogin=atmService.login(name,password);//判断输入的账户名密码是否正确if(afterLogin.equals("登录成功")){//if正确则登录成功System.out.println("登录成功!\n");//使用while循环反复进行switch执行操作业务while(true){System.out.println("请选择服务项目:");System.out.println("1.查询\n2.存款\n3.取款\n4.转账\n5.销户\n(按q退出系统)");Stringoption=input.next();switch(option){case"1"://查询Floatmoney=atmService.inquiry(name);System.out.println("尊敬的客户,您的余额为"+money+"元\n");break;case"2"://存款System.out.println("请输入存款金额");FloataddMoney=input.nextFloat();atmService.addMoney(name,addMoney);break;case"3"://取款System.out.println("请输入取款金额");FloatgetMoney=input.nextFloat();atmService.getMoney(name,getMoney);break;case"4"://转账System.out.println("请输入转账用户ID:");Stringid=input.next();System.out.println("请输入转账金额:");FloattransferMoney=input.nextFloat();atmService.transferMoney(name,id,transferMoney);break;case"5"://销户System.out.println("您确定要销毁当前账户吗?账户内所有余额都会消失\nYes/No\n");Stringdecision=input.next();if(decision.equalsIgnoreCase("yes")){atmService.deleteUser(name);//删除当前user数据}elseif(decision.equalsIgnoreCase("no")){break;}break;case"q":System.out.println("已退出ATM机系统,感谢您的使用!!!");System.exit(0);//退出程序break;default:System.out.println("请输入正确的指令\n");break;}}}else{System.out.println(afterLogin);}}elseif(choice.equals("2")){//开户System.out.println("请设置您的用户名");StringnewUserName=input.next();System.out.println("请设置您的密码");StringnewPassword=input.next();UsernewUser=atmService.creatUser(newUserName,newPassword,0.0F);System.out.println("\n初始余额为"+newUser.getSalary()+"元");}else{System.out.println("已退出ATM机系统,感谢您的使用!!!");}}}

部分运行结果:

1.账户登录

Java如何实现ATM机操作系统

2.查询

Java如何实现ATM机操作系统

3.存款

Java如何实现ATM机操作系统

4.退出

Java如何实现ATM机操作系统

作为数据库的txt文件:

Java如何实现ATM机操作系统

 </div> <div class="zixun-tj-product adv-bottom"></div> </div> </div> <div class="prve-next-news">
本文:Java如何实现ATM机操作系统的详细内容,希望对您有所帮助,信息来源于网络。
上一篇:Java如何实现获取Excel中的表单控件下一篇:

42 人围观 / 0 条评论 ↓快速评论↓

(必须)

(必须,保密)

阿狸1 阿狸2 阿狸3 阿狸4 阿狸5 阿狸6 阿狸7 阿狸8 阿狸9 阿狸10 阿狸11 阿狸12 阿狸13 阿狸14 阿狸15 阿狸16 阿狸17 阿狸18