package manager;
import java.io.Serializable;
public class Engineer implements Serializable {
private String no;
private String name;
private boolean gender;
private String birthday;
private int degree;
private String nation;
private String address;
private String phone;
private int workYear;
private int salary;
@Override
public String toString() {
return "Engineer{" +
"地址='" + address + '\'' +
", 编号='" + no + '\'' +
", 姓名='" + name + '\'' +
", 性别=" + gender +
", 出生日期='" + birthday + '\'' +
", 学历=" + degree +
", nation='" + nation + '\'' +
", 电话号码='" + phone + '\'' +
", 工龄=" + workYear +
", 基本工资=" + salary +
'}';
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
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 boolean isGender() {
return gender;
}
public void setGender(boolean gender) {
this.gender = gender;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getNation() {
return nation;
}
public void setNation(String nation) {
this.nation = nation;
}
public String getNo() {
return no;
}
public void setNo(String no) {
this.no = no;
}
public String getPhone() {
return phone;
}
public void setPhone(String phone) {
this.phone = phone;
}
public int getSalary() {
return salary;
}
public void setSalary(int salary) {
this.salary = salary;
}
public int getWorkYear() {
return workYear;
}
public void setWorkYear(int workYear) {
this.workYear = workYear;
}
}
由于在写功能的时候代码太多惹我们需要把各种功能的核心代码封装在一个类中InputService中
其中各个方法的作用如下:
inputNO方法:提示用户输入编号,然后使用Scanner类读取用户输入的内容,如果编号的长度不等于4,则提示用户重新输入,并通过递归调用该方法实现重新输入。接着,使用try-catch结构将用户输入的内容转换为整数类型,如果转换出现异常,则说明输入的编号不是纯数字,提示用户重新输入,也通过递归调用该方法实现重新输入。最后,如果输入的编号符合要求,则返回该编号。
inputName方法:提示用户输入姓名,然后使用Scanner类读取用户输入的内容,如果姓名的长度小于等于0或大于20,则提示用户重新输入,并通过递归调用该方法实现重新输入。最后,如果输入的姓名符合要求,则返回该姓名。
inputGender方法:提示用户输入性别,true表示女,false表示男,然后使用Scanner类读取用户输入的内容。使用try-catch结构将用户输入的内容转换为布尔类型,如果转换出现异常,则说明输入的格式错误,提示用户重新输入,并通过递归调用该方法实现重新输入。最后,如果输入的性别符合要求,则返回该性别。
inputBirthday方法:提示用户输入出生日期,格式必须是yyyy-MM-dd。使用Scanner类读取用户输入的内容,并使用"-"分隔字符串。如果分隔后的数组长度不等于3,则说明日期格式不正确,提示用户重新输入,并通过递归调用该方法实现重新输入。接着,使用try-catch结构将分隔后的字符串转换为整数类型。首先判断年份是否在1900-2004之间,如果不是,则提示用户重新输入,并通过递归调用该方法实现重新输入。然后判断月份是否在1-12之间,如果不是,则提示用户重新输入,并通过递归调用该方法实现重新输入。最后判断日期是否在1-31之间,如果不是,则提示用户重新输入,并通过递归调用该方法实现重新输入。如果输入的日期符合要求,则返回该日期。
package manager;
import java.util.Scanner;
//负责处理用户输入及格式校验的类
public class InputService {
public String inputNO(){
System.out.println("请输入编号:");
Scanner sc=new Scanner(System.in);
String no=sc.nextLine();
if (no.length()!=4){
System.out.println("编号长度必须是4");
return inputNO();
}
try{
Integer.parseInt(no);
}catch (Exception e){
System.out.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;
}
}
在这个类中主要功能包括添加工程师、删除工程师、查询工程师、修改工程师信息、保存工程师信息、排序工程师、输出所有工程师、清空工程师、重新拉取工程师信息等。系统通过控制台菜单和用户的输入来实现这些功能。
其中,工程师信息以对象的形式存储在一个List集合中,通过输入信息和操作集合来实现对工程师信息的增删改查等操作。保存工程师信息和重新拉取工程师信息的功能是通过将集合对象序列化到文件中和从文件中反序列化集合对象来实现的。
另外,还实现了对工程师信息的排序功能,可以根据工程师的编号或姓名进行升序排序。
在主函数中,通过一个循环不断显示菜单和接收用户的选择,实现了系统的可持续运行。用户可以根据菜单选择对应的功能,进行工程师信息的管理操作。
package manager;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.util.*;
public class EngineerManager {
private InputService is=new InputService();
List list=new ArrayList<>();
public EngineerManager(){
reload();
}
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();
}
}
public void sort(){
System.out.println("1.编号升序 2.姓名升序");
Scanner sc=new Scanner(System.in);
int type=sc.nextInt();
switch (type){
case 1:
Comparator c=new Comparator() {
@Override
public int compare(Engineer o1, Engineer o2) {
return o1.getNo().compareTo(o2.getNo());
}
};
Collections.sort(list,c);
break;
case 2:
Comparator c1=new Comparator() {
@Override
public int compare(Engineer o1, Engineer o2) {
return o1.getName().compareTo(o2.getName());
}
};
Collections.sort(list,c1);
break;
default:
System.out.println("输入错误,重新输入");
sort();
}
}
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:
break;
case 7:
print();
break;
case 8:
break;
case 9:
reload();
break;
case 0:
System.exit(0);
}
}
public static void main(String[] args) {
EngineerManager em=new EngineerManager();
while (true){
em.menu();
em.function();
}
}
}
这是最终输出的成果:

让我们验证一下成果:

这是添加的功能保存到文件中之后通过编号查询到

剩下的功能猫咪就不演示了大家感兴趣可以自行操作
猫咪写的代码仅仅就只是用来练习
没有多高的效率最后大家参考即可
到这里就结束了感谢大家的观看!!!
最后祝大家天天开♥,每天都挣大钱!!!
byebye~~~