现在的位置: 首页 > 综合 > 正文

新手ATM(3)–文件版

2013年05月24日 ⁄ 综合 ⁄ 共 5565字 ⁄ 字号 评论关闭

建议用 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
【上篇】
【下篇】

抱歉!评论已关闭.