1.输入工程师资料工程师的资料主要包括:
编号、姓名、性别、生日、籍贯、学历、地址、电话、工龄、基本薪水。
要求:编号为数字,编号使用4位数字,格式为0001、0002....,不能重复。
姓名:为字符串,最长不超过20个字符。不能为空。
性别:用布尔表示true表示女,false表示男。不能为其它数值。
生日:表示年、月、日。
籍贯:使用字符串表示,最长不超过10个字符。不能为空。学历:使用数字表示高中0、学士1、硕士2、博士3、其它为4。不能为其它数字。
地址:使用字符串表示,最长不超过30个字符。不能为空。
电话:使用字符串表示,最长不超过15个字符。不能为空。
工龄:使用数字表示,工龄范围是(0,50]。
基本薪水:使用数字表示,正整数。对这些输入的信息进行合法性检查。保证系统接收合法的输入。用户输入错误时具有提示功能和重新输入功能
2.定义工程师的基本属性
生成其get,set,tostring方法
public class Engineer implements Serializable {
private String no;
private String name;
private boolean gender;
private String birthday;
private int degree;
private String address;
private String phone;
private int workYear;
private int salary;
@Override
public String toString() {
return "Engineer{" +
"no='" + no + '\'' +
", name='" + name + '\'' +
", gender=" + gender +
", birthday='" + birthday + '\'' +
", degree=" + degree +
", address='" + address + '\'' +
", phone='" + phone + '\'' +
", workYear=" + workYear +
", salary=" + salary +
'}';
}
public String getNo() {
return no;
}
public void setNo(String no) {
this.no = no;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public boolean isGender() {
return gender;
}
public void setGender(boolean gender) {
this.gender = gender;
}
public String getBirthday() {
return birthday;
}
public void setBirthday(String birthday) {
this.birthday = birthday;
}
public int getDegree() {
return degree;
}
public void setDegree(int degree) {
this.degree = degree;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
public String getPhone() {
return phone;
}
public void setPhone(String phone) {
this.phone = phone;
}
public int getWorkYear() {
return workYear;
}
public void setWorkYear(int workYear) {
this.workYear = workYear;
}
public int getSalary() {
return salary;
}
public void setSalary(int salary) {
this.salary = salary;
}
}
3.编写它需要完成的功能
//工程师数据管理类
public class EngineerManager {
List<Engineer> list=new ArrayList<>();
private InputService is=new InputService();
public EngineerManager(){
try {
FileInputStream in = new FileInputStream("engineer.txt");
ObjectInputStream ois=new ObjectInputStream(in);
list=(List)ois.readObject();
}catch (Exception e){
list=new ArrayList<>();
}
}
public static void main(String[] args) {
EngineerManager em=new EngineerManager();
while(true){
em.menu();
em.function();
}
}
public void add(){
System.out.println("你选择了添加工程师的功能");
Engineer en=new Engineer();
String no=is.inputNo();
String name=is.inputName();
boolean gender=is.inputGender();
String date=is.inputBirthday();
en.setNo(no);
en.setName(name);
en.setGender(gender);
en.setBirthday(date);
list.add(en);
System.out.println("添加成功");
}
public void delete(){
System.out.println("1.根据编号删除,2.根据姓名删除");
Scanner sc=new Scanner(System.in);
int type=sc.nextInt();
switch(type){
case 1:
deleteByNo();
break;
case 2:
deleteByName();
break;
default:
System.out.println("输入错误,请重新选择");
delete();
break;
}
}
public void deleteByNo(){
String no=is.inputNo();
for(int i=0;i<list.size();i++){
Engineer en=list.get(i);
//判断工程师对象的编号与用户输入的编号是否一致,如果一致则删除该工程师
if(en.getNo().equals(no)){
list.remove(en);
System.out.println("删除成功");
return;
}
}
System.out.println("删除失败,没有该工程师");
}
public void deleteByName(){
String name=is.inputName();
boolean flag=true;
for(int i=0;i<list.size();i++){
Engineer en=list.get(i);
if(en.getName().equals(name)){
list.remove(en);
i--;
flag=false;
System.out.println(name+en.getNo()+"删除成功");
}
}
if(flag)
System.out.println("删除失败,没有该员工");
}
public void query(){
}
public void update(){
String no=is.inputNo();
for (Engineer en:list){
if (en.getNo().equals(no)){
String name=is.inputName();
boolean gender=is.inputGender();
String birthday=is.inputBirthday();
en.setName(name);
en.setGender(gender);
en.setBirthday(birthday);
System.out.println("修改成功");
return;
}
}
System.out.println("没有该员工");
}
public void save(){
try {
FileOutputStream out = new FileOutputStream("engineer.txt");
ObjectOutputStream oos=new ObjectOutputStream(out);
//直接把集合对象写到文件里,保证文件中只有一个集合对象
//这样做的目的时间少多对象读取时的错误问题
oos.writeObject(list);
oos.close();
out.close();
}catch(Exception e){
e.printStackTrace();
}
}
public void sort(){
System.out.println("1.编号升序,2.姓名升序");
Scanner sc=new Scanner(System.in);
int type =sc.nextInt();
switch(type){
case 1:
Comparator<Engineer> c=new Comparator<Engineer>() {
@Override
public int compare(Engineer o1, Engineer o2) {
return o1.getNo().compareTo(o2.getNo());
}
};
//使用比较器对集合进行排序
Collections.sort(list,c);
// Comparator c=new Comparator() {
// @Override
// public int compare(Object o1, Object o2) {
// Engineer e1=(Engineer)o1;
// Engineer e2=(Engineer)o2;
// return 0;
// }
// };
break;
case 2:
Comparator<Engineer> d=new Comparator<Engineer>() {
@Override
public int compare(Engineer o1, Engineer o2) {
return o1.getName().compareTo(o2.getName());
}
};
Collections.sort(list,d);
break;
default:
System.out.println("输入错误,重新输入");
sort();
}
}
public void print(){
for(Engineer en:list){
System.out.println(en);
}
}
public void empty(){
}
public void reload(){
}
public void exit(){
}
public void menu(){
System.out.println("----欢迎使用软件工程师管理系统----");
System.out.println("----1.添加工程师----");
System.out.println("----2.删除工程师----");
System.out.println("----3.查询工程师----");
System.out.println("----4.修改工程师----");
System.out.println("----5.保存工程师----");
System.out.println("----6.排序----");
System.out.println("----7.输出所有工程师----");
System.out.println("----8.清空工程师----");
System.out.println("----9.重新拉取工程师信息----");
System.out.println("----0.退出系统----");
}
//用力啊获取用户的输入,选择对应的功能
public void function(){
Scanner sc=new Scanner(System.in);
System.out.println("请输入对应的编号,选择功能:");
int n=sc.nextInt();
switch (n){
case 1:
add();
break;
case 2:
delete();
break;
case 3:
query();
break;
case 4:
update();
break;
case 5:
save();
break;
case 6:
sort();
break;
case 7:
print();
break;
case 8:
empty();
break;
case 9:
reload();
break;
case 0:
System.exit(0);
}
}
}
4.通过一些限制条件完成他的最终功能
//负责处理用户输入以及格式校验的类
public class InputService {
public String inputNo() {
System.out.println("请输入编号");
Scanner sc=new Scanner(System.in);
String no=sc.nextLine();
if(no.length()!=4){
System.err.println("编号长度必须是4位");
return inputNo();
}
try{
//尝试把字符串转换成整数,主要是为了验证它是不是纯数字
Integer.parseInt(no);
}catch(Exception e){
System.err.println("编号必须是纯数字");
return inputNo();
}
return no;
}
public String inputName(){
System.out.println("请输入姓名");
Scanner sc=new Scanner(System.in);
String name= sc.nextLine();
if(name.length()<=0 || name.length()>20) {
System.out.println("姓名长度必须小于20");
return inputName();
}
return name;
}
public boolean inputGender(){
System.out.println("请输入性别,true表示女,false表示男");
Scanner sc=new Scanner(System.in);
try {
boolean g = sc.nextBoolean();
return g;
}catch ( Exception e){
System.out.println("性别格式错误");
return inputGender();
}
}
public String inputBirthday(){
System.out.println("请输入出生日期:格式必须是:yyyy-MM-dd");
Scanner sc=new Scanner(System.in);
String date=sc.nextLine();
//使用-分割字符串
String[] arr =date.split("-");
if(arr.length != 3){
System.out.println("日期格式不对,重新输入");
return inputBirthday();
}
try{
int year=Integer.parseInt(arr[0]);
int month=Integer.parseInt(arr[1]);
int day=Integer.parseInt(arr[2]);
if(year<1900 || year>2004){
System.out.println("年份必须在1900~2004之间");
return inputBirthday();
}
if(month<1 || month>12){
System.out.println("月份必须在1-12之间");
return inputBirthday();
}
if(day<1||day>31){
System.out.println("日必须在1-31之间");
return inputBirthday();
}
}catch (Exception e){
System.out.println("年月日必须是数字");
return inputBirthday();
}
return date;
}
}