package com.ltb.entity;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.io.*;
import com.ltb.Utils.Config;
/**此类是考试系统的一个子模块。关于数据的交互。
*此模块实现了文件中的数据读取没有数据的操作
*/
public class EntityContext {
private Map<Integer,List<Question>> questions=new HashMap<Integer,List<Question>>();//试题库
private Map<Integer,User> users=new HashMap<Integer,User>();//用户集
private Config config;//文件的配置类
//构造器
public EntityContext(){}
//重写构造方法
public EntityContext(Config config){
this.config=config;
LoadUser();
LoadQuestion();
}
//对用户的写入
private void LoadUser(){
String filename=config.getString("UserFile");
try{
BufferedReader in=new BufferedReader(
new InputStreamReader(
new FileInputStream(filename),"gbk"));
String str;
while((str=in.readLine())!=null){
if(str.trim().equals("")||str.startsWith("#")){
continue;
}
User u=paserUser(str);
users.put(u.getId(), u);
}
}catch(IOException e){
e.printStackTrace();
}
}
//用户从文件中的读取
private User paserUser( String str){
String[]data=str.split(":");
User u=new User();
u.setId(Integer.parseInt(data[0]));
u.setName(data[1]);
u.setPwd(data[2]);
u.setTelephone(data[3]);
u.setEmail(data[4]);
return u;
}
//从题库集合中根据提的级别得到试题
public List<Question> getquestion(int key){
return new ArrayList<Question>(questions.get(key));
}
//加载试题
public void LoadQuestion(){
String filename=config.getString("QuestionFile");
try{
BufferedReader in=new BufferedReader(
new InputStreamReader(
new FileInputStream(filename),"gbk"));
String str;
while((str=in.readLine())!=null){
Question q;
if(str.startsWith("@")){
q=paresQuestion(str);
q.setTitle(in.readLine());
q.getOptions().add(in.readLine());
q.getOptions().add(in.readLine());
q.getOptions().add(in.readLine());
q.getOptions().add(in.readLine());
putQuestion(q);
}
}
}catch(IOException e){
e.printStackTrace();
}
}
private Question paresQuestion(String str) {
String[] data=str.split("[@,][a-z]+=");
Question q=new Question();
List<Integer> answer=getanswer(data[1]);
q.setAnswer(answer);
q.setScore(Integer.parseInt(data[2]));
q.setLevel(Integer.parseInt(data[3]));
return q;
}
private List<Integer> getanswer(String str){
List<Integer> answers=new ArrayList<Integer>();
String[]data=str.split("/");
for(String s:data){
answers.add(Integer.parseInt(s));
}
return answers;
}
//将读取的题存入题集合中
private void putQuestion(Question q){
List<Question> question=questions.get(q.getLevel());
if(question==null){
question=new ArrayList<Question>();
}
question.add(q);
questions.put(q.getLevel(), question);
}
public User getUser(int id){
if(users.get(id)==null){
return null;
}
return users.get(id);
}
}
此模块中还有用户类,试题类,考试信息类。题信息类。如有读者需要请给我留意我会发到你的邮箱里或者去CSDN下载。