增删改查+排序(2.0)

主要是把第一个版本里边的操作类功能纯化,把管理类增删改查+排序功能封装到一个仓库类,通过系统类调用仓库类来进行主播数组的增删改查+排序。

代码如下:

anchor.java(优化一下:构造方法链式,采用参数多的方法被其他方法调用)

package com.xuetang9.kenny.showerdemo;
/**
* 类说明:anchor 主播实体类,基本属性+打印格式toString
* 优化一下:构造方法链式,采用参数多的方法被其他方法调用
* @author: Yu
* @version: 2.0
* 创建时间:2021年2月2日 下午6:57:13 
*/

public class anchor {
    private long id;        //主播id
    private String name;    //主播姓名
    private String skill;    //主播技能
    private String intro;    //主播介绍
    private long fansCount; //主播粉丝数
    private double face;    //主播颜值
    private String imagePath;//主播头像路径
    public anchor() {
        this(0, "默认主播", "天生我才", "我就是彪悍");
    }
    public anchor(long id, String name, String skill, String intro) {
        this(id, name, skill, intro, 0, 0, "主播默认路径");
        this.fansCount = (int)(Math.random() * 10000)% 1001 + 1000; 
    }
    
    public anchor(long id, String name, String skill, String intro, long fansCount, double face, String imagePath) {
        this.id = id;
        this.name = name;
        this.skill = skill;
        this.intro = intro;
        this.fansCount = fansCount;
        this.face = face;
        this.imagePath = imagePath;
    }
    //用来控制主播的打印格式
    public String toString() {
        String str = String.format("%d\t%s\t%s\t%s\t%d", id, name, skill, intro, fansCount);
        return str;
    }
    public long getId() {
        return id;
    }
    public void setId(long id) {
        this.id = id;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getSkill() {
        return skill;
    }
    public void setSkill(String skill) {
        this.skill = skill;
    }
    public String getIntro() {
        return intro;
    }
    public void setIntro(String intro) {
        this.intro = intro;
    }
    public long getFansCount() {
        return fansCount;
    }
    public void setFansCount(long fansCount) {
        this.fansCount = fansCount;
    }
    public double getFace() {
        return face;
    }
    public void setFace(double face) {
        this.face = face;
    }
    public String getImagePath() {
        return imagePath;
    }
    public void setImagePath(String imagePath) {
        this.imagePath = imagePath;
    }
    
    
}

管理类优化为:封装一个仓库类对传入的对象进行数组对象的增删改查+排序,然后在系统类调用仓库类,并传入主播对象给仓库类进行增删改查+排序操作,在系统类通过框架:while+switch(循环+选择)---程序执行结构

anchorStore.java

package com.xuetang9.kenny.showerdemo;

import java.util.Arrays;

/**
 * 类说明: 主播仓库类anchorStore,用来对于传入的主播对象进行增删改查和排序操作
 * 
 * @author: Yu
 * @version: 2.0 创建时间:2021年2月9日 下午10:20:22
 */

public class anchorStore {
    /** 主播数组的最大容量 */
    private static final int Max_Capacity = Integer.MAX_VALUE - 8;
    /** 默认主播对象数组的容量 */
    private static final int Default_Capacity = 10;
    /** 主播仓库核心操作数组,保存主播仓库的操作数据 */
    private static anchor[] anchorArray = new anchor[Default_Capacity];
    // 静态块,用于测试
    static {
        for (int i = 0; i < 5; i++) {
            anchorArray[i] = new anchor(i, "test" + i, null, null);
        }
    }

    // 1.增加操作
    /**
     * 把传入的主播对象添加的主播数组中,添加成功返回新添加的主播对象下标,失败返回-1
     * 
     * @param anchor
     * @return
     */
    public int addAnchor(anchor anchor) {
        // 判断传入的主播是否为空
        if (null == anchor)
            return -1;
        // 判断主播数组容量是否足够(先获取当前主播数组的实际元素个数),如果不够,则扩容
        int size = ensureCapacity();
        // 添加主播对象到主播数组
        anchorArray[size] = anchor;
        return size;
    }

    // 2.查看当前主播数组中所有主播对象
    /**
     * 查看当前主播数组中所有主播对象
     */
    public void showAll() {
        System.out.println("主播编号\t姓名\t技能\t介绍\t粉丝数");
        int size = getSize();
        for (int i = 0; i < size; i++) {
            System.out.println(anchorArray[i]);
        }
    }

    // 3.删除:根据id删除主播,删除成功返回删除主播下标,删除失败返回-1
    /**
     * 根据id删除主播,删除成功返回删除主播下标,删除失败返回-1
     * 
     * @param id
     * @return
     */
    public int deleteById(long id) {
        // 判断传入id是否合法
        int size = getSize();
        if (id > size || id < 0)
            return -1;
        // 根据id 查找主播数组下标
        int deleteId = findIndex(id);
        // 执行删除操作
        System.arraycopy(anchorArray, deleteId + 1, anchorArray, deleteId, anchorArray.length - 1 - deleteId);
        // 把最后一个元素置空
        anchorArray[size] = null;
        return deleteId;
    }

    // 4.改:根据传入的主播对象更改对应主播数组的主播
    /**
     * 根据传入的主播对象更改对应主播数组的主播,更改成功返回true,失败返回false
     * 
     * @param anchor
     * @return
     */
    public boolean update(anchor anchor) {
        // 判断传入主播对象是否为空
        if (null == anchor)
            return false;
        // 根据id查找主播数组中的主播对象
        anchor updateAnchor = findById(anchor.getId());
        // 执行更新操作,除了id其余属性都更新
        updateAnchor.setName(anchor.getName());
        updateAnchor.setSkill(anchor.getSkill());
        updateAnchor.setIntro(anchor.getIntro());
//        int updateIndex = findIndex(anchor.getId());
//        anchorArray[updateIndex] = anchor;
        return true;
    }

    // 5.排序:
    // 根据指定成员进行升序或降序
    private static final int sortById = 1;
    private static final int sortByName = 2;
    private static final int sortByFansCount = 3;

    /**
     * 根据指定成员进行升序或降序
     * 
     * @param sortBy
     * @param isAsc
     */
    public void sort(int sortBy, boolean isAsc) {
        if (sortBy > 3 || sortBy < 1)
            return;
        int size = getSize();
        // 选择排序
        for (int i = 0; i < size; i++) {
            int minIndex = i;
            int maxIndex = i;
            anchor minAnchor = anchorArray[i];
            anchor maxAnchor = anchorArray[i];
            int j; // 循环变量
            boolean condition = false;
            for (j = i + 1; j < size; j++) {
                if (sortBy == sortById) { // 根据id排序
                    if (isAsc) { // 升序
                        condition = minAnchor.getId() > anchorArray[j].getId();
                    } else { // 降序
                        condition = maxAnchor.getId() < anchorArray[j].getId();
                    }
                } else if (sortBy == sortByName) { // 根据name排序
                    if (isAsc) { // 升序
                        condition = minAnchor.getName().compareToIgnoreCase(anchorArray[j].getName()) > 0;
                    } else { // 降序
                        condition = maxAnchor.getName().compareToIgnoreCase(anchorArray[j].getName()) < 0;
                    }
                } else if (sortBy == sortByFansCount) { // 根据FansCount排序
                    if (isAsc) {
                        condition = minAnchor.getFansCount() > anchorArray[j].getFansCount();
                    } else {
                        condition = maxAnchor.getFansCount() < anchorArray[j].getFansCount();
                    }
                }
                if (condition && isAsc) { // 升序
                    minIndex = j;
                    minAnchor = anchorArray[j];
                } else if (condition && !isAsc) { // 降序
                    maxIndex = j;
                    maxAnchor = anchorArray[j];
                }
            }
            // 升序交换
            if (minIndex > i  && isAsc) {
//                 swap(anchorArray[i], anchorArray[minIndex]);
                anchor tempAnchor = anchorArray[i];
                anchorArray[i] = anchorArray[minIndex];
                anchorArray[minIndex] = tempAnchor;
            }else if (maxIndex > i && !isAsc) {
//                swap(anchorArray[i], anchorArray[maxIndex]);
                anchor tempAnchor = anchorArray[i];
                anchorArray[i] = anchorArray[maxIndex];
                anchorArray[maxIndex] = tempAnchor;
            }
        }
    }

    /**
     * 主播对象交换,交换成功返回true,失败返回false
     * 
     * @param anchor1
     * @param anchor2
     * @return
     */
    private void swap(anchor anchor1, anchor anchor2) {
        anchor tempAnchor = anchor1;
        anchor1 = anchor2;
        anchor2 = tempAnchor;
    }

    /**
     * 根据id查找主播数组中的主播对象
     * 
     * @param id
     * @return
     */
    private anchor findById(long id) {
        int size = getSize();
        for (int i = 0; i < size; i++) {
            if (id == anchorArray[i].getId()) {
                return anchorArray[i];
            }
        }
        // 循环结束,没有找到,返回null
        return null;
    }

    /**
     * 根据传入的id查找主播数组下标
     * 
     * @return
     */
    private int findIndex(long id) {
        int size = getSize();
        for (int i = 0; i < size; i++) {
            if (id == anchorArray[i].getId())
                return i;
        }
        // 循环结束,找不到,返回-1
        return -1;
    }

    /**
     * 获取当前主播数组的非空元素个数
     * 
     * @return
     */
    private int getSize() {
        for (int i = 0; i < anchorArray.length; i++) {
            if (null == anchorArray[i]) {
                return i;
            }
        }
        // 循环结束,返回数组长度
        return anchorArray.length;
    }

    /**
     * 确保主播数组容量充足,并且返回当前主播数组的实际个数
     * 
     * @return
     */
    private int ensureCapacity() {
        int size = getSize();
        if (size < anchorArray.length) {
            return size;
        }
        // 扩容操作
        anchorArray = Arrays.copyOf(anchorArray, size * 2);
        return size;
    }
}

anchorSystem.java

package com.xuetang9.kenny.showerdemo;

import java.util.Scanner;

/**
* 类说明: 通过主播系统调用主播类
* @author: Yu
* @version: 1.0
* 创建时间:2021年2月9日 下午10:44:45 
*/

public class anchorSystem {
    Scanner scanner = new Scanner(System.in);
    anchorStore anchorStore = null;
    anchor anchor = null;
    public anchorSystem() {
        anchorStore = new anchorStore();    
        anchor = new anchor();
    }
    public void start() {
        System.out.println("1.添加主播:");
        System.out.println("2.查看所有主播:");
        System.out.println("3.删除主播");
        System.out.println("4.更改主播:");
        System.out.println("5.主播排序:");
        while(true) {
            System.out.println("请输入选择:");
            int choice = scanner.nextInt();
            switch(choice) {
            case 1:
                addAnchor();
                anchorShow();
                break;
            case 2:
                anchorShow();
                break;
            case 3:
                deleteAnchor();
                anchorShow();
                break;
            case 4:
                updateAnchor();
                anchorShow();
                break; 
            case 5:
                sort();
                anchorShow();
                break; 
                default:
                    break;
            }
            System.out.println("是否继续(y/n):");
            if(! "y".equalsIgnoreCase(scanner.next()))
                break;
        }
        System.out.println("已经退出系统!欢迎再次使用!");
    }
    /**
     * 添加主播,添加成功返回新添加的主播对象下标,失败返回-1
     */
    public int addAnchor() {
        System.out.println("添加主播信息:");
        System.out.println("主播编号:");
        anchor.setId(scanner.nextLong());
        System.out.println("主播姓名:");
        anchor.setName(scanner.next());
        System.out.println("主播技能:");
        anchor.setSkill(scanner.next());
        System.out.println("主播个人介绍:");
        anchor.setIntro(scanner.next());
        return anchorStore.addAnchor(anchor);
    }
    /**
     * 查看所有主播
     */
    public void anchorShow() {
        anchorStore.showAll();
    }
    /**
     * 更新主播对象
     * @return
     */
    public boolean updateAnchor() {
        System.out.println("更新主播信息:");
        System.out.println("主播编号:");
        anchor.setId(scanner.nextLong());
        System.out.println("主播姓名:");
        anchor.setName(scanner.next());
        System.out.println("主播技能:");
        anchor.setSkill(scanner.next());
        System.out.println("主播个人介绍:");
        anchor.setIntro(scanner.next());
        return anchorStore.update(anchor);
    }
    /**
     * 删除主播对象,删除成功返回删除主播下标,失败返回-1
     * @return
     */
    public int deleteAnchor() {
        System.out.println("删除主播信息:");
        System.out.println("主播编号:");
        int id = scanner.nextInt();
        return anchorStore.deleteById(id);
    }
    /**
     * 主播排序
     */
    public void sort() {
        System.out.println("1.根据id排序:");
        System.out.println("2.根据姓名排序:");
        System.out.println("3.根据粉丝数排序:");
        System.out.println("请输入排序条件:");
        int sortBy = scanner.nextInt();
        System.out.println("1.升序:");
        System.out.println("2.降序:");
        int isAsc = scanner.nextInt();
        boolean asc = false;
        if(isAsc == 1) {
            asc = true;
        }else {
            asc = false;
        }
        if(sortBy == 1) {
            if(asc) {
                System.out.println("根据id升序:");
            }else {
                System.out.println("根据id降序:");
            }
        }else if(sortBy == 2) {
            if(asc) {
                System.out.println("根据name升序:");
            }else {
                System.out.println("根据name降序:");
            }
        }else if(sortBy == 3) {
            if(asc) {
                System.out.println("根据FansCount升序:");
            }else {
                System.out.println("根据FansCount降序:");
            }
        }        
        anchorStore.sort(sortBy, asc);
        
    }

}

app.java

package com.xuetang9.kenny.showerdemo;
/**
* 类说明: 
* @author: Yu
* @version: 1.0
* 创建时间:2021年2月10日 下午4:05:41 
*/

public class app {
    public static void main(String[] args) {
        anchorSystem anchorSystem = new anchorSystem();
        anchorSystem.start();
    }

}

以上来自老九学堂课堂个人笔记~~

上一篇:PB打开ole控件IE浏览器版本问题_指定Webbrowser控件所用IE内核版本(转)


下一篇:RepPoints学习笔记