用IO流操作txt文件作为数据库模拟实现一个ATM业务操作系统---->网上银行,实现登录,查询余额,存款,取款,转账,开户,销户等业务功能
看代码
1.用户类----->User:
package atm;
import java. io. Serializable;
public class User implements Serializable {
private static final long serialVersionUID = 1 L;
private String aName;
private String aPassword;
private Float aSalary;
public User ( ) { }
public User ( String aName, String aPassword, Float aSalary) {
this . aName = aName;
this . aPassword = aPassword;
this . aSalary = aSalary;
}
public String getaName ( ) {
return this . aName;
}
public void setaName ( String newName) {
this . aName = newName;
}
public String getaPassword ( ) {
return this . aPassword;
}
public void setaPassword ( String newPassword) {
this . aPassword = newPassword;
}
public Float getSalary ( ) {
return this . aSalary;
}
public void setSalary ( Float newSalary) {
this . aSalary = newSalary;
}
}
2.操作IO的类------>FileLoadAndCommit:
package atm;
import java. io. BufferedReader;
import java. io. BufferedWriter;
import java. io. File;
import java. io. FileNotFoundException;
import java. io. FileReader;
import java. io. FileWriter;
import java. io. IOException;
import java. util. HashMap;
import java. util. Iterator;
public class FileLoadAndCommit {
private String pathName = null;
public FileLoadAndCommit ( String pathName) {
this . pathName = pathName;
}
public HashMap< String, User> loadFile ( ) {
HashMap< String, User> userBox = new HashMap < String, User> ( ) ;
FileReader fr = null;
BufferedReader br = null;
try {
fr = new FileReader ( new File ( pathName) ) ;
br = new BufferedReader ( fr) ;
String code = br. readLine ( ) ;
while ( code != null) {
String[ ] value = code. split ( "-" ) ;
User user = new User ( value[ 0 ] , value[ 1 ] , Float. parseFloat ( value[ 2 ] ) ) ;
userBox. put ( user. getaName ( ) , user) ;
code = br. readLine ( ) ;
}
} catch ( IOException e) {
e. printStackTrace ( ) ;
} finally {
try {
if ( fr != null) {
fr. close ( ) ;
}
} catch ( IOException e) {
e. printStackTrace ( ) ;
}
try {
if ( br != null) {
br. close ( ) ;
}
} catch ( IOException e) {
e. printStackTrace ( ) ;
}
}
return userBox;
}
public void commit ( HashMap< String, User> userBox) {
FileWriter fw = null;
BufferedWriter bw = null;
try {
fw = new FileWriter ( new File ( pathName) ) ;
bw = new BufferedWriter ( fw) ;
Iterator< String> names = userBox. keySet ( ) . iterator ( ) ;
while ( names. hasNext ( ) ) {
String name = names. next ( ) ;
User user = userBox. get ( name) ;
StringBuilder sBuilder = new StringBuilder ( ) ;
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 ( IOException e) {
e. printStackTrace ( ) ;
} finally {
try {
if ( bw != null) {
bw. close ( ) ;
}
} catch ( IOException e) {
e. printStackTrace ( ) ;
}
try {
if ( fw != null) {
fw. close ( ) ;
}
} catch ( IOException e) {
e. printStackTrace ( ) ;
}
}
}
}
3.负责读写的类----->AtmDao:
package atm;
import java. util. HashMap;
public class AtmDao {
private FileLoadAndCommit flac = new FileLoadAndCommit ( "D:\\test\\ATM\\testATM.txt" ) ;
HashMap< String, User> userBox = flac. loadFile ( ) ;
public User selectOne ( String aName) {
return userBox. get ( aName) ;
}
public void update ( User user) {
userBox. put ( user. getaName ( ) , user) ;
flac. commit ( userBox) ;
}
public void delete ( User user) {
userBox. remove ( user. getaName ( ) , user) ;
flac. commit ( userBox) ;
}
}
4.负责业务逻辑的类------>ATMService:
package atm;
import java. util. HashMap;
public class ATMService {
private AtmDao dao = new AtmDao ( ) ;
public String login ( String aName, String aPassword) {
User user = dao. selectOne ( aName) ;
if ( user!= null) {
if ( aPassword. equals ( user. getaPassword ( ) ) ) {
return "登录成功" ;
}
}
return "用户名或密码错误" ;
}
public Float inquiry ( String aName) {
User user = dao. selectOne ( aName) ;
return user. getSalary ( ) ;
}
public void addMoney ( String aName, Float addMoney) {
User user = dao. selectOne ( aName) ;
user. setSalary ( user. getSalary ( ) + addMoney) ;
dao. update ( user) ;
System. out. println ( "存款成功\n" ) ;
}
public void getMoney ( String aName, Float getMoney) {
User user = dao. selectOne ( aName) ;
if ( getMoney <= user. getSalary ( ) ) {
user. setSalary ( user. getSalary ( ) - getMoney) ;
dao. update ( user) ;
System. out. println ( "取款成功\n" ) ;
} else {
System. out. println ( "对不起,您的余额不足\n" ) ;
}
}
public void transferMoney ( String outName, String inName, Float transferMoney) {
User outUser = dao. selectOne ( outName) ;
User inUser = 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" ) ;
}
}
public User creatUser ( String aName, String aPassword, Float aSalary) {
User user = new User ( aName, aPassword, aSalary) ;
dao. update ( user) ;
System. out. println ( "用户" + aName+ ",创建成功" ) ;
return user;
}
public void deleteUser ( String aName) {
User user = dao. selectOne ( aName) ;
if ( user != null) {
dao. delete ( user) ;
System. out. println ( "用户" + aName+ ",删除成功" ) ;
} else {
System. out. println ( "要销毁的账户不存在" ) ;
}
}
}
5.测试类----->TestMain:
package atm;
import java. util. Scanner;
public class TestMain {
public static void main ( String[ ] args) {
ATMService atmService = new ATMService ( ) ;
Scanner input = new Scanner ( System. in) ;
System. out. println ( "欢迎进入ATM机系统" ) ;
System. out. println ( "请选择要操作的业务:\n1.用户登录\n2.开户\n3.按任意键退出" ) ;
String choice = input. next ( ) ;
if ( choice. equals ( "1" ) ) {
System. out. println ( "请输入账户名" ) ;
String name = input. next ( ) ;
System. out. println ( "请输入密码" ) ;
String password = input. next ( ) ;
String afterLogin = atmService. login ( name, password) ;
if ( afterLogin. equals ( "登录成功" ) ) {
System. out. println ( "登录成功!\n" ) ;
while ( true ) {
System. out. println ( "请选择服务项目:" ) ;
System. out. println ( "1.查询\n2.存款\n3.取款\n4.转账\n5.销户\n(按q退出系统)" ) ;
String option = input. next ( ) ;
switch ( option) {
case "1" :
Float money = atmService. inquiry ( name) ;
System. out. println ( "尊敬的客户,您的余额为" + money+ "元\n" ) ;
break ;
case "2" :
System. out. println ( "请输入存款金额" ) ;
Float addMoney = input. nextFloat ( ) ;
atmService. addMoney ( name, addMoney) ;
break ;
case "3" :
System. out. println ( "请输入取款金额" ) ;
Float getMoney = input. nextFloat ( ) ;
atmService. getMoney ( name, getMoney) ;
break ;
case "4" :
System. out. println ( "请输入转账用户ID:" ) ;
String id = input. next ( ) ;
System. out. println ( "请输入转账金额:" ) ;
Float transferMoney = input. nextFloat ( ) ;
atmService. transferMoney ( name, id, transferMoney) ;
break ;
case "5" :
System. out. println ( "您确定要销毁当前账户吗?账户内所有余额都会消失\nYes/No\n" ) ;
String decision = input. next ( ) ;
if ( decision. equalsIgnoreCase ( "yes" ) ) {
atmService. deleteUser ( name) ;
} else if ( 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) ;
}
} else if ( choice. equals ( "2" ) ) {
System. out. println ( "请设置您的用户名" ) ;
String newUserName = input. next ( ) ;
System. out. println ( "请设置您的密码" ) ;
String newPassword = input. next ( ) ;
User newUser = atmService. creatUser ( newUserName, newPassword, 0.0F ) ;
System. out. println ( "\n初始余额为" + newUser. getSalary ( ) + "元" ) ;
} else {
System. out. println ( "已退出ATM机系统,感谢您的使用!!!" ) ;
}
}
}
部分运行结果:
1.账户登录
2.查询
3.存款
4.退出
作为数据库的txt文件: