我在写一个关于ATM取款机的项目,由于没有数据库我就用了文件来代替数据库
但是我却出现了一个问题困扰了我一天。我发现我用存钱功能时它的HashMap集合里面的金钱数没有发生改变,而且我将他们写入文件后 看到金钱数没有改变 而且存入的格式和我想的不一样 如下
原来的格式:
小明-000-1233
小红-012-1235
存入后:
小明-000-1233.0
小明-000-1233.0小红-012-1235.0
不仅格式不一样 而且还多了个小明
代码如下:
public class AtmPoson {
private String name;
private String password;
private Float money;
public AtmPoson() {};
public AtmPoson(String name,String password, Float money) {
this.setName(name);
this.setPassword(password);
this.setMoney(money);
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public Float getMoney() {
return money;
}
public void setMoney(Float money) {
this.money = money;
}
}
package LEI;
////登录
////存钱
////取钱
////转账
////
public class ATM {
Shuju shuju=new Shuju();
//存钱
public String savaMoney(String name,Float savamoney) {
AtmPoson poson =shuju.transfer().get(name);
poson.setMoney(poson.getMoney()+savamoney);
shuju.setMap(poson.getName(), poson);
shuju.writeIn(shuju.transfer());
return "存钱成功,总金额为"+poson.getMoney();
}
package LEI;
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;
import java.util.Set;
public class Shuju {
//将文件信息转化为HashMap集合
public HashMap<String,AtmPoson> transfer(){
HashMap<String, AtmPoson>hm=new HashMap<String, AtmPoson>();
File file=null;
FileReader fd=null;
BufferedReader reader=null;
try {
file=new File("src\\LEI\\atmziliao.txt");
fd = new FileReader(file);
reader=new BufferedReader(fd);
String str;
StringBuffer sf=new StringBuffer();
while((str=reader.readLine())!=null) {
sf.append(str+'\n');
String[] value=str.split("-");
AtmPoson poson=new AtmPoson(value[0],value[1],Float.parseFloat(value[2]));
hm.put(value[0], poson);
}
//System.out.println(sf);
} catch (IOException e) {
// TODO 自动生成的 catch 块
e.printStackTrace();
}finally {
try {
reader.close();
} catch (IOException e) {
// TODO 自动生成的 catch 块
e.printStackTrace();
}
}
return hm;
}
//修改HashMap集合
public void setMap(String name,AtmPoson poson) {
this.transfer().put(name, poson);
}
//将Hashmap写入文件
public void writeIn(HashMap<String,AtmPoson> hm) {
File file=null;
FileWriter fw=null;
BufferedWriter bw=null;
try {
file=new File("src\\LEI\\atmziliao.txt");
fw=new FileWriter(file);
bw=new BufferedWriter(fw);
StringBuilder builder=new StringBuilder();
Set<String>keys=hm.keySet();
Iterator<String>it=keys.iterator();
while(it.hasNext()) {
String Key=it.next();
AtmPoson value =hm.get(Key);
builder.append(value.getName());
builder.append("-");
builder.append(value.getPassword());
builder.append("-");
builder.append(value.getMoney());
bw.write(builder.toString());
bw.newLine();
bw.flush();
}
} catch (IOException e) {
// TODO 自动生成的 catch 块
e.printStackTrace();
}finally {
try {
bw.close();
} catch (IOException e) {
// TODO 自动生成的 catch 块
e.printStackTrace();
}
}
}
}
public class Test1 {
public static void main(String[]args) {
ATM atm=new ATM();
System.out.println(atm.savaMoney("小明", (float) 1000.0));
}
}
这应该是跟数据库的事务回滚有关系把