import java.io.*;
import java.util.*;
import java.lang.*;
import java.util.Scanner;
class Test{
private List<String> name;
private Map<String,Double> balance;
private Map<String,Double> consume;
private Map<String,Double> count;
public List getEmployeeFromBalance(){ //也可以从余额表中获得员工姓名列表
List<String> name=new ArrayList<String>();
Set set=balance.keySet();
Object[] list=set.toArray();
for(int i=0;i<list.length;i++)
name.add((String)list[i]);
this.name=name;
return name;
}
public List readEmployee(String filename)throws Exception{ //读取员工文件
List<String> name=new ArrayList<String>();
File file=new File(filename);
InputStream in=new FileInputStream(file);
Scanner read=new Scanner(in);
String line="";
for(int i=0;;i++){
if(!read.hasNextLine()) break;
line=read.next();
//if(line==null || line.equals("")) break;
name.add(line);
}
in.close();
this.name=name;
return name;
}
public Map readBalanceFile(String filename)throws Exception{ //读取余额文件
Map<String,Double> map=new HashMap<String,Double>();
File file=new File(filename);
InputStream in=new FileInputStream(file);
Scanner read=new Scanner(in);
String line="";
String[] sp=null;
Double balance=null;
for(;;){
if(!read.hasNextLine()) break;
line=read.next();
if(line==null || line=="") break;
sp=line.split(",");
balance=Double.valueOf(sp[1]);
map.put(sp[0],balance);
}
in.close();
this.balance=map;
return map;
}
public Map readConsumeFile(String filename)throws Exception{ //读取消费文件
Map<String,Double> map=new HashMap<String,Double>();
File file=new File(filename);
InputStream in=new FileInputStream(file);
Scanner read=new Scanner(in);
String line="";
String[] sp=null;
Double balance=null;
double temp=0;
for(;;){
if(!read.hasNextLine()) break;
line=read.next();
if(line==null || line.equals("") || line.equals("\n")) break;
sp=line.split(",");
if(map.get(sp[0])!=null){ //解决一人多次消费时Map--key有重复
temp=(Double)(map.get(sp[0])).doubleValue();
temp=temp+Double.valueOf(sp[2]);
balance=Double.valueOf(temp);
temp=0;
}
else balance=Double.valueOf(sp[2]);
map.put(sp[0],balance);
}
in.close();
this.consume=map;
return map;
}
public Map countConsume()throws Exception{ //计算余额
Map<String,Double> count=new HashMap<String,Double>();
double formerly=0,user=0;
for(int i=0;i<name.size();i++){
formerly=Double.parseDouble(balance.get(name.get(i)).toString());
user=Double.parseDouble(consume.get(name.get(i)).toString());
count.put((String)name.get(i),Double.valueOf(formerly-user));
}
this.count=count;
return count;
}
public void writeCountFile(String filename)throws Exception{ //打印结果
File file=new File(filename);
PrintWriter print=new PrintWriter(file);
for(int i=0;i<name.size();i++){
print.print(name.get(i)+",");
print.print(Double.parseDouble(count.get(name.get(i)).toString()));
print.println();
}
print.close();
}
public void writeBalanceZero(String filename)throws Exception{ //将余额为0就打印出来
File file=new File(filename);
PrintWriter print=new PrintWriter(file);
int p=0;
for(int i=0;i<name.size();i++){
if(Double.parseDouble(count.get(name.get(i)).toString())==0){
p++;
print.print(name.get(i)+",");
print.print(Double.parseDouble(count.get(name.get(i)).toString()));
print.println();
}
}
if(p==0) print.println("没有人余额为0");
print.close();
}
static public void main(String[] str)throws Exception{
Test t=new Test();
t.readBalanceFile("1.txt");
t.getEmployeeFromBalance();
t.readConsumeFile("2.txt");
t.countConsume();
t.writeBalanceZero("c.txt");
for(int i=0;i<t.count.size();i++){
System.out.print(t.name.get(i)+",");
System.out.print(t.count.get(t.name.get(i))+"\n");
}
System.out.println("获得结束,结果保存在c.txt");
}
}
///////////////////////////////////
/*
1.txt
王五,1000
李四,2000
张三,3000
2.txt
张三,牛肉面,500
张三,鸡蛋,400
王五,牛肉面,300
张三,牛肉面,400
李四,冷面,600
王五,水煮肉片,100
*/
/////////////////////////////////////
温馨提示:答案为网友推荐,仅供参考