您的位置:首页 > 编程语言 > Java开发

迁徙6_IO流等问题_java_2016-9-4

2017-01-13 16:13 162 查看
   不好意思,时隔一个月零一天才更新。。

    菜鸟最近真的有些吃不消呢,但是求知、求职的路本来就该走的坎坷一些,这样才会印象深刻,才会更有意义一写哈。

一帆风顺的人生会有趣吗?反正我没有一帆风顺过,我没有发言权;但至少读完i哦这个坎坷的人生,我还是心怀感激的。

说点什么呢?这一个月左右的时间,我学了java基础,面向对象(OOP),还有java API 。目前在临近API末端了,菜鸟除了感觉累,另一个感觉就是真的没白来,真的没有白来!

    想想有什么可以记录的呢?
 要求:
1、
 * 使用异常捕获机制完成下述IO操作
 * 编写程序,要求下面的类实现功能:
 * 添加新员工
 * 要求用户输入一个员工信息,格式如下:
 * jackson,25,男,5000,2008-12-22
 * 用户输入后需要做下述验证:
 * 要求用户名长度在1-20个字符之间且必须是英文
 * 年龄在0-100之间的整数
 * 性别只能是:"男"或"女"
 * 当发现用户输入有不符合规定时,提醒用户
 * 相关内容输入不符合要求,并要求重新输入。
 * 都输入正确后,将该员工添加到emp.txt文件
 * 的最后一行。 

2、
 * 使用异常捕获机制完成下述读取操作
 * 读取emp.txt文件,并将每个员工信息读取出来,以一个Emp实例保存,然后将
 * 这些Emp实例存入到一个Map集合中。其中key为字符串,是该员工名字,而value
 * 是该Emp实例。
 * 存入后,要求用户输入一个员工的名字,如:张三
 * 若该员工存在则输出该员工所有信息(Emp的toString方法返回的字符串)
 * 输入的员工名若是英文,不要求区分大小写。
 * 若输入的员工名字不存在,则显示"查无此人"

 
Emp.java
public class Emp {
private String name;
private int age;
private String gender;
private int salary;
private Date hiredate;
public Emp(String name, int age, String gender, int salary, Date hiredate) {
super();
this.name = name;
this.age = age;
this.gender = gender;
this.salary = salary;
this.hiredate = hiredate;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getGender() {
return gender;
}
public void setGender(String gender) {
this.gender = gender;
}
public int getSalary() {
return salary;
}
public void setSalary(int salary) {
this.salary = salary;
}
public Date getHiredate() {
return hiredate;
}
public void setHiredate(Date hiredate) {
this.hiredate = hiredate;
}
public boolean equals(Object obj){
if(obj==null){
return false;
}
if(obj==this){
return true;
}
if(obj instanceof Emp){
Emp emp = (Emp)obj;
return emp.name.equals(this.name)&&emp.age==this.age&&emp.gender.equals(this.gender)&&emp.salary==this.salary;
}
return false;
}

public String toString(){
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
return name+","+age+","+gender+","+salary+","+sdf.format(hiredate);
}
}
Test1.java
public class Test1 {
public static void main(String[] args) {
try{
Scanner scanner = new Scanner(System.in);
while(true){
System.out.println("请输入员工信息:");
String info = scanner.nextLine();
String[] infos = info.split(",");
if(!checkName(infos[0])){
System.out.println("名字只能是1-20位的英文");
continue;
}
if(!checkGender(infos[2])){
System.out.println("性别只能是:<男/女>");
continue;
}
String name = infos[0];
int age = Integer.parseInt(infos[1]);
String gender = infos[2];
int salary = Integer.parseInt(infos[3]);
Date hiredate = parseDate(infos[4]);
Emp e = new Emp(name, age, gender, salary, hiredate);
saveEmp(e);
System.out.println("保存完毕!");
break;
}
}catch(Exception e){
e.printStackTrace();
}
}
public static void saveEmp(Emp e)throws IOException, URISyntaxException{
PrintWriter pw = null;
try{
File file = new File("src/main/java/day08/emp.txt");
System.out.println(file.getAbsolutePath());
pw = new PrintWriter(
new OutputStreamWriter(
new FileOutputStream(file,true)
)

);
pw.println(e);
}finally{
if(pw!=null){
pw.close();
}
}
}

public static Dat
d06f
e parseDate(String line) throws ParseException{
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
return sdf.parse(line);
}

public static boolean checkGender(String gender){
String genderRegex = "[男女]";
return gender.matches(genderRegex);

}

public static boolean checkName(String name){
String nameRegex = "[a-zA-Z]{1,20}";
return name.matches(nameRegex);
}


Test2.java
public class Test04 {
public static void main(String[] args) {
BufferedReader br = null;
try {
Map<String,Emp> map = new HashMap<String,Emp>();
br = new BufferedReader(
new InputStreamReader(
Test04.class.getClassLoader().getResourceAsStream("day08/emp.txt")
)

);
String line = null;
//读取文件每一行并解析为一个Emp对象存入Map集合
while((line = br.readLine())!=null){
Emp emp = parseEmp(line);
map.put(emp.getName().toLowerCase(), emp);
}

Scanner scanner = new Scanner(System.in);
System.out.println("请输入员工姓名:");
String name = scanner.nextLine().toLowerCase();
if(map.containsKey(name)){
Emp e = map.get(name);
System.out.println(e);
}else{
System.out.println("查无此人");
}
} catch (Exception e) {
e.printStackTrace();
} finally{
if(br != null){
try {
br.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}

public static Emp parseEmp(String info) throws ParseException{
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
String[] infos = info.split(",");
String name = infos[0];
int age = Integer.parseInt(infos[1]);
String gender = infos[2];
int salary = Integer.parseInt(infos[3]);
Date hiredate = sdf.parse(infos[4]);
Emp emp = new Emp(name, age, gender, salary, hiredate);
return emp;
}
}

以上代码不是我所写的,但是我的大致思路也就是这样的,个别有出入,我写的代码不在电脑中,等有空再修改。

之所以选择这道题目,因为觉得这两个还是比较有代表性的,值得记录 。

明天又是新的礼拜了,希望自己继续努力,再创佳绩。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: