还差10分不能入学呀!之前参加新生报名系统活动写的代码,代码写的很糟糕。面向对象不太合理,方法写了太多行为,太乱。分享下代码希望哪位版主帅哥加点写代码的辛苦分,在此表示感谢!由于字节限制,我只贴了yi个类上去。
package com.itcast;
import java.util.HashMap;
import java.util.Map;
import java.util.Properties;
import java.util.Scanner;
import java.io.*;
public class Manager implements Person{
Form form;
private static int index=0;
public void newrun(Student student)
{
/*
* 第二步,选择是否缴费还是办理助学贷款
*/
System.out.println("选择缴费在下面键入y,选择助学贷款在下面键入n");
//在这里使用scanner接收键盘输入
Scanner scanner=new Scanner(System.in);
boolean b1=true;
while(b1)
{
String strValue1=scanner.next();
//选择缴费
if(strValue1.equals("y"))
{
//开始缴费
charge();
b1=false;
}
else if(strValue1.equals("n"))
{
//办理助学贷款
financeByTransact();
student.setRemark("助学贷款");
b1=false;
}
else
System.out.println("重新选择你的交费方式!");
}
//创建一个宿舍管理
ManageDorm md=new ManageDorm();
/*
* 第三步,是否需要购买床上用品
*/
System.out.println("选择购买床上用品在下面键入y,选择自带床上用品在下面键入n");
boolean b2=true;
while(b2)
{
String strValue2=scanner.next();
if(strValue2.equals("y"))
{
/*
* 第四步,领取床上用品
*/
ManageDorm.pullDownDedding();
//该名同学没有带被褥
student.setHavaQuilt(false);
b2=false;
}
else if(strValue2.equals("n"))
{
Manager.index++;
System.out.println("该生已经自带被褥!");
student.setHavaQuilt(true);
//在这里的代码不会被调用
if(index>=6)
{
md.joinQueue(form.toStudent());
md.joinQueue(form.toStudent().getParent());
md.validateRes();
try
{
Thread.sleep(100);
}
catch(Exception e)
{
e.printStackTrace();
}
}
b2=false;
}
else
System.out.println("重新选择!");
}
/*
* 第五步, 办理新生宿舍,绑定床位
*/
//给这名学生分配一个宿舍
student.setDormNum(md.getDormNum(student.isSex()));
//打印某男或女宿舍当前床位占用情况
md.printRemanentBed(form.isSex());
//获取输入的床位号
int bedNumber=scanner.nextInt();
//设置这名学生的床位号
student.setBedNum(bedNumber);
//更新info.ini表中床位信息
md.setBedNum(form.isSex(), bedNumber);
//scanner.close();
System.out.println("你选择的宿舍是"+student.getDormNum()+",床位号"+student.getBedNum());
System.out.println("*****************完成报名!********************");
}
//在这里还是不让我们的管理员先生走多线程路线了
public void run()
{
}
//不带参的构造方法
public Manager()
{
System.out.println("等待新生前来报道");
form=new Form();
}
//给每一位新生分配一个学号
public int admeasureNum()
{
try
{
FileInputStream fis=new FileInputStream("txt\\info.ini");
Properties ps=new Properties();
//加载信息文件,从中读取学号
ps.load(fis);
int value=Integer.valueOf(ps.getProperty("number"));
FileOutputStream fos=new FileOutputStream("txt\\info.ini");
//将学号+1保存到文件,给下一位学生使用
ps.setProperty("number", new Integer(value+1).toString());
ps.store(fos,"key=value");
fos.close();
fis.close();
return value;
}
catch(Exception e)
{
e.printStackTrace();
}
return 0;
}
//提供表格填写
public void affordForm()
{
System.out.println("领取报道表格");
}
//交费
public void charge()
{
System.out.println("交费完成!");
}
//办理助学贷款
public void financeByTransact()
{
System.out.println("已经办理助学贷款!");
}
public static void main(String[] args) {
/*因为没有使用数据库,所以使用2个Map作为临时存储学生信息的数据库
* map的key是报名的顺序号,map的value是字符数组,保存学生信息
* m1保存男同学信息
* m2保存女同学信息
*/
HashMap<Integer,String[]> m1=new HashMap<Integer, String[]>();
HashMap<Integer,String[]> m2=new HashMap<Integer, String[]>();
FileReader fr;
BufferedReader br;
Manager wang=new Manager();
try
{
fr=new FileReader("txt/studentInfo.txt");
//用于从文本文件中读取一行
br=new BufferedReader(fr);
String txtinfo=null;
txtinfo=br.readLine();
//用于保存学生信息的个部分
String[] strs=new String[5];
//counter循环计数器和2个map的key
int counter=1,k1=1,k2=1;
//读取的一行,且不为空
while(null!=(txtinfo=br.readLine()))
{
switch(counter)
{
case 3:
{
//因为没有break语句,所以执行case 10。它们的代码都是一样的,使用if..else..也是一样地
}
case 10:
{
/*下面代码的意思是,举个列子(*代表空格)
* 1.str=***a**b*c***d**
* 2.先去前后空白str=a**b*c***d
* 3.取出字符(第一个是a)保存到string[i],str=**b*c***d
* 4.第二步--第三步--第二步--第三步
* 最后str=***d,去空后直接保存
*/
for(int i=0;i<strs.length;i++)
{
String str=txtinfo.trim();
if(i==strs.length-1)
{
strs[i]=str;
System.out.println(i+","+strs[i]);
break;
}
int length=str.length();
int index=str.indexOf(" ");
strs[i]=str.substring(0,index);
txtinfo=str.substring(index, length);
System.out.println(i+","+strs[i]);
}
}break;
default:
{
//同上
for(int i=0;i<strs.length-1;i++)
{
String str=txtinfo.trim();
if(i==strs.length-2)
{
strs[i]=str;
System.out.println(i+","+strs[i]);
break;
}
int length=str.length();
int index=str.indexOf(" ");
strs[i]=str.substring(0,index);
txtinfo=str.substring(index, length);
System.out.println(i+","+strs[i]);
}
}break;
}
System.out.println("循环:"+counter);
//创建一个家长对象
StudentParent sp=new StudentParent();
//创建一个学生对象
Student stu=new Student(strs[1],strs[2].equals("男"),wang.admeasureNum(),sp);
//将学生对象添加到家长对象中
sp.addChild(stu);
//第一步,提供表格给新生
wang.affordForm();
//学生填写表格
stu.fillForm(wang.form);//填表为将学生信息添加到文件中
//开始走报名流程
wang.newrun(stu);
//用于保存学生信息的数组
String[] studentInfo=new String[6];
studentInfo=stu.getInfo();
//是男添加studentInfo到map1,是女添加studentInfo到map2
if(stu.isSex())
{
m1.put(k1, studentInfo.clone());
k1++;
}
else
{
m2.put(k2, studentInfo.clone());
k2++;
}
if(0==counter%5)
{
System.out.print("男生报道"+m1.size()+"人"+"\t\t");
System.out.println("女生报道"+m2.size()+"人\r\n");
System.out.println("男生报道情况\r\n");
System.out.println("学号\t\t"+"姓名\t\t"+"宿舍\t\t"+"床位\t\t"+"是否自带被褥\t\t"+"学费缴纳情况\r\n");
wang.printMap(m1);
System.out.println("\r\n");
System.out.println("女生报道情况\r\n");
System.out.println("学号\t\t"+"姓名\t\t"+"宿舍\t\t"+"床位\t\t"+"是否自带被褥\t\t"+"学费缴纳情况\r\n");
wang.printMap(m2);
}
counter++;
}
br.close();//上面提示为关闭,注意这时关闭会不会有问题
}
catch(Exception e)
{
e.printStackTrace();
}
}
@SuppressWarnings("null")
public void printMap(HashMap<Integer,String[]>m)
{
if(m!=null||!m.isEmpty())
{
for(int i=1;i<=m.size();i++)
{
String[] strs=m.get(i);
for(String str:strs)
{
if(str!=null)
System.out.print(str);
System.out.print("\t\t");
}
System.out.println();
}
}
}
}
|
|