• JavaSE编写软件工程师管理系统


    大家好我是猫咪!!!
    工程师的资料主要包括:编号、姓名、性别、生日、籍贯、学历、地址、电话、工龄、基
    本薪水。
    要求:编号为数字,编号使用 4 位数字,格式为 0001 0002…. ,不能重复。
    姓名:为字符串,最长不超过 20 个字符。不能为空。
    性别:用布尔表示 true 表示女, false 表示男。不能为其它数值。
    生日:表示年、月、日。格式例如: 2000-01-01 年使用四位数字表示,月使用 1-12 表示,
    日使用 1-31 表示。
    籍贯:使用字符串表示,最长不超过 10 个字符。不能为空。
    学历:使用数字表示高中 0 、学士 1 、硕士 2 、博士 3 、其它为 4 。不能为其它数字。
    地址:使用字符串表示,最长不超过 30 个字符。不能为空。
    电话:使用字符串表示,最长不超过 15 个字符。不能为空。
    工龄:使用数字表示,工龄范围是 (0,50]
    基本薪水:使用数字表示,正整数。
    对这些输入的信息进行合法性检查。保证系统接收合法的输入。用户输入错误时具有提示
    功能和重新输入功能。
    删除指定工程师资料
    可根据两种方式删除指定工程师资料,一是工程师的编号,二是工程师的姓名。删除资料
    后,该工程师的信息则完全在系统中删除了。其它工程师编号不变。
    输 入 工 程 师 资 料
    删 除 指 定 工 程 师 资 料
    查 询 指 定 工 程 师 资 料
    修 改 指 定 工 程 师 资 料
    保 存 工 程 师 资 料
    对 工 程 师 资 料 进 行 排 序
    输 出 工 程 师 资 料
    清 空 所 有 工 程 师 资 料
    退 出 系 统
      从 文 件 重 新 取 工 程 师 信 息
    查询指定工程师资料
    可根据两种方式查询指定工程师资料,一是工程师的编号,二是工程师的姓名。查询后打
    印该工程师的信息,如果没有该工程师资料则给用户提示。
    修改指定工程师资料
    可根据两种方式找到要修改的工程师,一是工程师的编号,二是工程师的姓名。打印原来
    该工程师的信息,同时提示用户进行修改。
    保存工程师资料
    当用户输入工程师资料、修改、排序后需要用户决定是否保存工程师资料。如果用户不保
    存,则默认输入和修改等不做保存。
    排序工程师资料
    对工程师资料进行排序,排序使用三种方式:编号排序(升序)、姓名排序(升序)和工龄
    排序(降序)。采用哪种排序方式,由用户选择。
    输出工程师资料
    打印所有的工程师资料(不包括当月薪水)。
    清空所有工程师资料
    把所有的工程师资料删除,可以重新输入工程师资料。
    从文件重新得到工程师资料
    这项功能主要是为了用户进行某些操作后,没有保存到文件前,可以从文件重新得到这些
    数据信息,使用户的操作不起作用。
    退出系统
    当用户不再使用该系统后,可退出该系统。如果用户进行了影响工程师资料信息的操作,
    提示用户是否进行保存
    那么现在来看一下猫咪的代码:
    首先我们建一个包包叫manager,然后分别新建这三个类
    之后我们在Engineer类中
    定义所有需要的成员变量
    根据Java语言的封装性可以生成每个成员变量的get和set方法
    因为涉及到文件的保存所以要将类继承Serializable类
    之后为了方便输出打印工程师的信息资料
    我们要重写一下toString 方法
    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中

    其中各个方法的作用如下:

    1. inputNO方法:提示用户输入编号,然后使用Scanner类读取用户输入的内容,如果编号的长度不等于4,则提示用户重新输入,并通过递归调用该方法实现重新输入。接着,使用try-catch结构将用户输入的内容转换为整数类型,如果转换出现异常,则说明输入的编号不是纯数字,提示用户重新输入,也通过递归调用该方法实现重新输入。最后,如果输入的编号符合要求,则返回该编号。

    2. inputName方法:提示用户输入姓名,然后使用Scanner类读取用户输入的内容,如果姓名的长度小于等于0或大于20,则提示用户重新输入,并通过递归调用该方法实现重新输入。最后,如果输入的姓名符合要求,则返回该姓名。

    3. inputGender方法:提示用户输入性别,true表示女,false表示男,然后使用Scanner类读取用户输入的内容。使用try-catch结构将用户输入的内容转换为布尔类型,如果转换出现异常,则说明输入的格式错误,提示用户重新输入,并通过递归调用该方法实现重新输入。最后,如果输入的性别符合要求,则返回该性别。

    4. 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~~~

  • 相关阅读:
    洛谷P1939 矩阵快速幂模板
    windows消息机制
    linux服务器集群分发scp与rsync
    【MySQL数据库原理】MySQL Community 8.0界面工具汉化
    C++ PrimerPlus 复习 第七章 函数——C++的编程模块(上)
    unity 一键替换 UI上所有字体,批量替换字体(包括:Text和Text (TMP))
    Makefile(make)之(3)输出变量值
    k8s学习笔记一(搭建&部署helloworld应用)
    数据结构 3:链表
    测试管理三要素
  • 原文地址:https://blog.csdn.net/2302_80464795/article/details/141097643