建议用 MyEclipse 练习演示。
适合人群:
1. 初学 java 的童鞋:必须已学会基本语法,以及常用IO流,要不会有点晕;
2. 教员:作为上课教材例子。
…………………………………………………………………………………………………………
工程结构图(左)和运行效果预览图(右):、
…………………………………………………………………………………………………………
完整代码如下(涉及的 路径 请自行修改):
1、AtmFile.java
package atm.file; // 在 开发工具中 运行本文件,需加上 上面的 包的路径,具体路径看你的包名 // 上面的 路径表示我这个java文件在: atm\file\AtmFile.java // 如果是在外面的 文件夹中运行这个 java 文件,上面这一行必须注释掉 import java.util.Scanner;//捕捉键盘输入的 类 import java.io.*; /** * <b> ATM 文件版,单账户</b> * <br /> 账户:String code * <br /> 密码:int password * <br /> 金额:double money * <br /> 尝试次数:int cs=3 * <br /> 作者:C_Dream */ public class AtmFile { String code; int password; double money; int cs=3; public static void main(String[] args){ AtmFile atmFile=new AtmFile(); atmFile.Welcome(); atmFile.Login(); } /** * <br /><b>欢迎界面</b> * <br />作者:C_Dream */ public void Welcome(){ System.out.println(""); System.out.println(" ********************"); System.out.println(" **欢迎登陆个人银行**"); System.out.println(" ********************"); System.out.println(""); } /** * <b>读取 账户信息 :账户信息文件(atmdb.txt)</b> * <br />账户信息:String account * <br />异常1(文件不存在异常):FileNotFoundException * <br />异常2(读写异常):IOException * <br />作者:C_Dream */ public void ReadFile(){ String account=""; try{ // 在工程环境下,存储账户信息 的文件 所在路径 必须用 绝对路径 // 如果是在外面直接编译的,那么 class 文件和java 以及 atmdb.txt 都在同一个文件夹,因此可以用相对路径 // 如果在IDE开发工具中编译 笨java文件,那么编译后的 绝对路径(对照修改成你自己的): // D:\javasoft\MyEclipse\Workspaces\demo_atm\bin\atm\file String fname="d://javasoft//MyEclipse//Workspaces//demo_atm//bin//atm//file//atmdb.txt"; FileInputStream fs=new FileInputStream(fname); InputStreamReader isr=new InputStreamReader(fs); BufferedReader br=new BufferedReader(isr); account=br.readLine(); //读取第一行 的文本,赋值给 一个字符串变量 account br.close(); // 关闭流,有先后顺序:先子类再父类 isr.close(); fs.close(); } catch(FileNotFoundException fe){ fe.printStackTrace(); } catch(IOException ie){ ie.printStackTrace(); } String accs[]=account.split(",");// 账户信息文件(atmdb.txt)中 分割账户信息 的符号 code=accs[0];// 分割后的 第一个账户信息,赋值给字符串code。 password= Integer.parseInt(accs[1]); // 分割后的 第二个 money = Double.parseDouble(accs[2]); // 分割后的 第三个 } /** * <b>将修改编辑后的 账户信息 保存进 账户信息文件(atmdb.txt)中</b> * <br />账户信息:String account * <br />异常1(文件不存在异常):FileNotFoundException * <br />异常2(读写异常):IOException * <br />作者:C_Dream */ public void WriteFile() { String account=code+","+password+","+money; try { String fname="d://javasoft//MyEclipse//Workspaces//demo_atm//bin//atm//file//atmdb.txt"; FileOutputStream fo=new FileOutputStream(fname); OutputStreamWriter ost=new OutputStreamWriter(fo); BufferedWriter bw=new BufferedWriter(ost); bw.write(account); bw.newLine(); bw.close(); ost.close(); fo.close(); } catch(FileNotFoundException fe){fe.printStackTrace();} catch(IOException ie){ie.printStackTrace();} } /** * <b>用户登陆</b> * <br />读取 账户信息:ReadFile(); * <br />登陆成功则进入 :LoadSys(); * <br />登陆失败则重载 :Login(); * <br />作者:C_Dream */ public void Login(){ ReadFile(); // 先读取已存在 的账户信息 System.out.println(""); System.out.print("请输入您的【卡号】,并按Enter键确认:"); Scanner scan1=new Scanner(System.in); String code1=scan1.nextLine(); if(code1.equals(code)) { System.out.println(""); System.out.print("请输入您的【密码】,并按Enter键确认:"); int psw1=scan1.nextInt(); if(psw1==password) { System.out.println(""); System.out.println(" ***登录成功***"); starsOut(); LoadSys(); } else { System.out.println("*********密码不正确,请重新登录*********"); if(cs<3) { cs++; Login(); } else { System.out.println("*********失败次数超过三次,系统退出*********"); } } } else { System.out.println("*********账号不正确,请重新登录*********"); starsOut(); LoadSys(); } } /** * <b>功能菜单 LoadSys()</b> * <br />捕捉用户输入: * <br /> 1 查询 :Chaxun(); * <br /> 2 取款 :Qukuan(); * <br /> 3 存款 :Cunkuan(); * <br /> 4 改密 :Gaimi(); * <br /> 5 退出 :Quit(); * <br />作者:C_Dream */ public void LoadSys(){ System.out.println(""); System.out.println(""); System.out.println(" 1:查询余额"); System.out.println(" 2:取款"); System.out.println(" 3:存款"); System.out.println(" 4:改密码"); System.out.println(" 5:退出"); System.out.println(""); System.out.print("请输入功能对应的数字,并按Enter键确认:"); Scanner scan2=new Scanner(System.in); int sys=scan2.nextInt(); switch(sys){ case 1:Chaxun(); break; case 2:Qukuan(); break; case 3:Cunkuan(); break; case 4:Gaimi(); break; case 5:Quit(); break; default:System.out.println("输入有误,请重新输入");LoadSys();break; } } /** * <b>查询余额</b> * <br />作者:C_Dream */ public void Chaxun(){ System.out.println(" 您的余额为:"+money); System.out.println(""); starsOut(); LoadSys(); } /** * <b>取款,并将余额写入文件</b> * <br />作者:C_Dream */ public void Qukuan(){ System.out.print(" 请输入你要取出的金额数目:"); Scanner scan3=new Scanner(System.in); double moneyqu=scan3.nextDouble(); if(money>moneyqu) { money=money-moneyqu; WriteFile();//将余额写入文件 System.out.println("******取款成功******"); System.out.println(""); System.out.println(" 余额为:"+money); System.out.println(""); starsOut(); LoadSys(); } else { System.out.println("余额不足,请重新输入金额:"); Qukuan(); } } /** * <b>存款,并将余额写入文件</b> * <br />作者:C_Dream */ public void Cunkuan(){ System.out.print(" 请输入你要存款的金额数目:"); Scanner scan4=new Scanner(System.in); double moneycun=scan4.nextDouble(); money=money+moneycun; WriteFile(); System.out.println(""); System.out.println(" 余额为:"+money); System.out.println(""); starsOut(); LoadSys(); } /** * <b>修改密码,并将新密码写入文件</b> * <br />作者:C_Dream */ public void Gaimi(){ System.out.print(" 请输入旧密码:"); Scanner scan5=new Scanner(System.in); int psw2=scan5.nextInt(); if(psw2==password) { System.out.print(" 请输入新密码:"); int psw3=scan5.nextInt(); System.out.print(" 请再次输入新密码:"); int psw4=scan5.nextInt(); if(psw3==psw4) { password=psw3; WriteFile(); System.out.println("*******密码修改成功*******"); starsOut(); LoadSys(); } else { System.out.println("*******两次输入的密码不同,修改失败*******"); starsOut(); LoadSys(); } } else { System.out.println("*****旧密码不正确,请重新输入*****"); System.out.println(""); Gaimi(); } } /** * <b>退出系统:System.exit(0)</b> * <br />作者:C_Dream */ public void Quit(){ starsOut(); System.out.println("感谢您使用本系统,欢迎下次在来,再见!"); System.exit(0); } public void starsOut(){ //减少代码量,所有共同的 星号 都写到这里 System.out.println(""); System.out.println("******************************************"); System.out.println("******************************************"); } }
2、atmdb.txt
1001,123,100000.99