信息管理系统

 

一、定义一个Solution类,用于创建对象

package com.javabase;
/*
    Alt + Insert 可以选择构造生成构造方法和get set方法
    ctrl alt v可以自动补齐返回值
 */
public class Solution{
    private String sid;
    private String name;
    private String age;
    private String add;

    public Solution() {}

    public String getSid() {
        return sid;
    }

    public void setSid(String sid) {
        this.sid = sid;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getAge() {
        return age;
    }

    public void setAge(String age) {
        this.age = age;
    }

    public String getAdd() {
        return add;
    }

    public void setAdd(String add) {
        this.add = add;
    }
}

 

二、创建增删改查

package com.javabase;

import java.util.ArrayList;
import java.util.Scanner;

/*
ArrayList常用方法:add(element), remove(element), remove(index), set(index, element), get(index), size()
    不支持链式add,java: 无法取消引用boolean。因为add实际上会隐式返回是否添加成功的boolean。index越界会报异常。
 */
public class Test{
    public static void main(String[] args) {
        ArrayList<Solution> array = new ArrayList<>();
        while (true) {
            System.out.println("---欢迎来到召唤师峡谷---");
            System.out.println("1 Add");
            System.out.println("2 Remove");
            System.out.println("3 Merge");
            System.out.println("4 Show");
            System.out.println("5 Exit");
            System.out.println("请输入:");
            Scanner sc = new Scanner(System.in);
            int num = sc.nextInt();
            switch (num) {
                case 1: {
                    add(array);
                    break;
                } case 2 : {
                    remove(array);
                    break;
                } case 3 : {
                    merge(array);
                    break;
                } case 4 : {
                    show(array);
                    break;
                } case 5 : {
                    System.exit(-1);
                } default:{
                    System.out.println("您的输入有误,请重新输入");
                }
            }
        }
    }
    public static void add(ArrayList<Solution> array) {
        System.out.println("请输入要添加的学生工号sid");
        Scanner sc = new Scanner(System.in);
        String sid = sc.nextLine();
        System.out.println("请输入要添加的学生姓名name");
        String name = sc.nextLine();
        System.out.println("请输入要添加的学生年龄age");
        String age = sc.nextLine();
        System.out.println("请输入要添加的学生地址add");
        String add = sc.nextLine();

        Solution student = new Solution();
        student.setSid(sid);
        student.setName(name);
        student.setAge(age);
        student.setAdd(add);

        if(array.size() == 0) {
            array.add(student);
            System.out.println("添加成功");
        }else {
            for(int i = 0; i < array.size(); i++){
                Solution solution = array.get(i);
                if(solution.getSid().equals(sid)){
                    System.out.println("您尝试新增的学号sid已存在,新输入其他学号sid,或" +
                            "使用Merge修改已有学号sid相关信息");
                }else{
                    array.add(student);
                    System.out.println("添加成功");
                }
            }
        }
    }
    public static void remove(ArrayList<Solution> array){
        System.out.println("请输入您要删除学生的学号sid:");
        Scanner sc = new Scanner(System.in);
        String sid = sc.nextLine();
        int index = -1;
        for(int i = 0; i < array.size(); i++) {
            Solution solution = array.get(i);
            if(solution.getSid().equals(sid)){
                index = i;
                break;
            }
        }
        if(-1 == index) {
            System.out.println("您输入的学号sid不存在,已退回主菜单,请重新操作");
        }else {
            array.remove(index);
            System.out.println("删除成功");
        }
    }
    public static void merge(ArrayList<Solution> array){

        System.out.println("请输入您要修改的学生学号sid:");
        Scanner sc = new Scanner(System.in);
        String sid = sc.nextLine();
        int index = -1;
        for(int i = 0; i < array.size(); i++) {
            Solution solution = array.get(i);
            if(solution.getSid().equals(sid)) {
                index = i;
                break;
            }
        }
        if(-1 == index) {
            System.out.println("您输入的学号sid不存在,已退回主菜单,请重新操作");
        }else{
            System.out.println("请输入您要修改该学生的姓名name为:");
            String name = sc.nextLine();
            System.out.println("请输入您要修改该学生的年龄age为:");
            String age = sc.nextLine();
            System.out.println("请输入您要修改该学生的地址add为:");
            String add = sc.nextLine();
            Solution newSolution = new Solution();
            newSolution.setSid(sid);
            newSolution.setName(name);
            newSolution.setAge(age);
            newSolution.setAdd(add);

            array.set(index, newSolution);
            System.out.println("修改成功");
        }
    }
    public static void show(ArrayList<Solution> array){
        if(array.size() == 0) {
            return;
        }else{
            System.out.println("Sid\t\tName\tAge\t\tAdd");
            for(int i = 0; i < array.size(); i++) {
                Solution solution = array.get(i);
                System.out.println(solution.getSid() + "\t\t" + solution.getName() +
                        "\t\t" + solution.getAge() + "\t\t" + solution.getAdd());
            }
        }
    }
}

 

三、其中add中学号sid实际上类似于索引列。

如果存在多条学号相同的信息,1、不符合常理;2、merge和delete操作只会删除最靠前的学号sid对象就break了。之后的无法删除。break的作用也是为了提高效率,既然找到要删除的sid,直接删除array内的对象就行了。

为了解决这个问题,在add中直接判重即可,sid重复的话加不进来。

但是在判重的时候需要遍历array中是否已存在现在正在输入的sid,要分情况,如下:

        array空? DO:( sid已存在?报Err :DO)

        或者等价于:array非空?(sid已存在?报Err:DO):DO。能想到只需判断if(array.size() != 0 && sid已存在){Err} else {DO}

                 但是sid是否已经存在,是for循环。array是否非空通过array.size()==0的if判断进行,这两部分无法取&&

这个问题暂时没解决,所以只能用if(for(if))else这种低效且代码冗余的方法。

后续有大佬看到 有更好的解法欢迎留言。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值