【求助】关于java的代码以及思路

skw2757286 2017-02-10 02:29:37
某政府部门组织一场考试,全市有若干考生(大于5万),若干教室,一间教室30座位,随机抽取考生,并将其分配到各考室各座位,生成准考证号,并打印座次表。
如:
张XX 试室号:1 座位号:1 准考证号:0001
王XX 试室号:1 座位号:2 准考证号:0002
李XX 试室号:1 座位号:3 准考证号:0003
……………………………………
赵XX 试室号:2 座位号:1 准考证号:0031
……………………………………
要求:实现方法有多种多样,找出你认为最优的。综合考虑性能,说出按你目前设计的实现的优缺点。



求这个题目的java代码指教 以及设计思路
...全文
215 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
主类

package exam_distribution.main;

import java.io.FileWriter;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;

import org.apache.commons.lang.StringUtils;

import exam_distribution.model.Examinee;

public class DoMain {
	/**
	 * 考生个数
	 */
	private static int examineeCount=0;
	
	/**
	 * 基础考生数
	 */
	private static final int BASE_EXAMINEE_COUNT=50000;
	
	/**
	 * 教室个数
	 */
	@SuppressWarnings("unused")
	private static int classroomCount=0;
	/**
	 * 准考证号容器
	 */
	private static List<String> licenceNumberList=new ArrayList<String>();
	/**
	 * 考生名容器
	 */
	private static List<String> examineeNameList=new ArrayList<String>();
	/**
	 * 考生对象容器
	 */
	private static List<Examinee> examineeList=new ArrayList<Examinee>();
	/**
	 * 字母a
	 */
	private static  char A='a';
	/**
	 * 字母表元素个数
	 */
	private static final int   ALPHABET_COUNT=26;
	
	
	
	private static Random random=new Random();	
	
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		//初始化数据
		init();
		//打印考生信息
		 print();

	}
	
	/**
	 * 随机生成考生数
	 * @return
	 */
	public static int createExamineeCount(){
		return random.nextInt(10000)+BASE_EXAMINEE_COUNT;
	}
	

	/**
	 * 根据考生个数生成需要的教室数
	 * @return
	 */
	public static int createClassroomCount(){
		return (int) Math.ceil(examineeCount/30f);
	}
	/**
	 * 生成准考证号
	 */
	public static void createLicenceNumber(){
		for(int i=1;i<=examineeCount;i++){			
			licenceNumberList.add(StringUtils.leftPad(i+"", 5, '0'));
		}
	}
	
	/**
	 * 生成考生名
	 */
	public static void createExamineeName(){
		//生成字母表,并根据字母表生成名字
		char[] alphabet=new char[ALPHABET_COUNT];
		for(int k=0;k<ALPHABET_COUNT;k++){
			alphabet[k]=A++;
		}	
		int index=0;
		StringBuilder name=null;
		for(int j=1;j<=examineeCount;j++){
			name=new StringBuilder();			
			for(int n=0;n<6;n++){	
				index=random.nextInt(ALPHABET_COUNT);
				name.append((random.nextInt(2)==0)?alphabet[index]:(alphabet[index]+"").toUpperCase());
			}			
			examineeNameList.add(name.toString());
		}
	}
	/**
	 * 创建考生
	 */
	public static void createExaminee(){
		int classRoomNum=0;//考室号
		int seatNumber=1;//座位号
		Examinee examiee=null;//考生对象
		for(int i=0;i<examineeCount;i++){
			examiee=new Examinee();
			examiee.setExamineeName(examineeNameList.get(i));//考生名
			if(i%30==0){
				classRoomNum++;
				seatNumber=1;
			}
			examiee.setClassroomNo(classRoomNum+"");//教室编号
			examiee.setSeatNumber((seatNumber++)+"");//座位号
			examiee.setLicenceNumber(licenceNumberList.get(i));//准考证号						
			examineeList.add(examiee);
		}
		
	}
	/**
	 * 打印考生信息
	 */
	public static void print(){
		StringBuilder sb=new StringBuilder(100000);
		for(Examinee ele:examineeList){
			sb.append(ele.toString()).append("\r\n");
		}
		System.out.println(sb);
		writeText(sb.toString(), "E:\\examineeInfo.txt");
	}
	/**
	 * 记录信息到txt文件
	 * @param text
	 * @param path
	 */
	public static void writeText(String text, String path) {
		System.out.println("保存地址:"+path);
		FileWriter fileWrite = null;
		try {
			fileWrite = new FileWriter(path);
			fileWrite.write(text);
		} catch (IOException e) {
			e.printStackTrace();
		} finally {
			try {
				fileWrite.flush();
				fileWrite.close();
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
	}

	
	
	public static void init(){
		
		//随机生成考生数
		 examineeCount=createExamineeCount();
		//生成教室数
		 classroomCount=createClassroomCount();		
		//生成准考证号
		 createLicenceNumber();
		//生成考生名
		 createExamineeName();
		 //创建考生
		 createExaminee();		
		
	}
	
	

}

model

package exam_distribution.model;

public class Examinee {

	private String examineeName;//考生名
	private String classroomNo;//教室编号
	private String seatNumber;//座位号
	private String licenceNumber;//准考证号
	
	public String getExamineeName() {
		return examineeName;
	}
	public void setExamineeName(String examineeName) {
		this.examineeName = examineeName;
	}
	public String getClassroomNo() {
		return classroomNo;
	}
	public void setClassroomNo(String classroomNo) {
		this.classroomNo = classroomNo;
	}
	public String getSeatNumber() {
		return seatNumber;
	}
	public void setSeatNumber(String seatNumber) {
		this.seatNumber = seatNumber;
	}
	public String getLicenceNumber() {
		return licenceNumber;
	}
	public void setLicenceNumber(String licenceNumber) {
		this.licenceNumber = licenceNumber;
	}
	@Override
	public String toString() {
		String info="考生名:"+examineeName+"\t考室号:"+classroomNo+"\t座位号:"+seatNumber+"\t准考证号:"+licenceNumber+"\n";
		return info;
	}
	
	
	
	
}

X元素 2017-02-10
  • 打赏
  • 举报
回复
楼主我想问一下,求助的难点是哪?5万考生同一时间生成效率问题?还是如何排序?
shanyking 2017-02-10
  • 打赏
  • 举报
回复
题目保证考生是随机的。 那么把所有的考生加入无序队列中,然后随机弹出一个,顺序排入教室中,依次类推,直至队列全部弹出。

51,412

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧