一、具体程序

抽象Meeting类

public abstract class Meeting {
    //会议id
    private int id;
    //会议成员组别
    private int member;
    //会议开始时间戳
    private long time;
    //会议标题
    private String title;
    //会议备注
    private String remarks;
    //会议状态    -1:结束     0:待开始     1:进行中
    private int state;
    //会议类型    0:线下     1:线上
    private int attribute;

    public Meeting(int member,long time,String title,String remarks,int attribute) {
        this.member=member;
        this.time=time;
        this.title=title;
        this.remarks=remarks;
        this.attribute=attribute;
        this.state=0;
    }
    public int getid() {
        return id;
    }
    public int getmember() {
        return member;
    }
    public long gettime() {
        return time;
    }
    public String gettitle() {
        return title;
    }
    public String getremarks() {
        return remarks;
    }
    public int getstate() {
        return state;
    }
    public int getattribute() {
        return attribute;
    }
    public  void setId(int id) {
        this.id=id;
    }

        public abstract void getMeeting();
 
    public void setstate() {
        this.state=-1;
    }

}

线下会议类OfficialMeeting

public class OfficialMeeting extends Meeting {
    private int room;


    OfficialMeeting(int member,int room,int time,String title,String remarks){
        super(member,time,title,remarks,0);
        this.room=room;
    }

    public void getMeeting() {
        System.out.println("会议ID:"+getid());
        System.out.println("会议类型:"+getattribute());
        System.out.println("会议标题:"+gettitle());
        System.out.println("会议状态:"+getstate());
        System.out.println("会议地点:"+room);
        System.out.println("会议时间:"+gettime());
        System.out.println("会议备注:"+getremarks()+"\n");
    }

    public int getroom() {
        return room;
    }

}


线上会议类OnlineMeeting

public class OnlineMeeting extends Meeting{
    OnlineMeeting(int member,int time,String title,String remarks){
        super(member,time,title,remarks,1);
    }


    public void getMeeting() {
        System.out.println("会议ID:"+getid());
        System.out.println("会议类型:"+getattribute());
        System.out.println("会议标题:"+gettitle());
        System.out.println("会议状态:"+getstate());
        System.out.println("会议时间:"+gettime());
        System.out.println("会议备注:"+getremarks()+"\n");
    }
}


系统类Demo

public class Demo {
    //抽象会议,用以统一操作
    Meeting m;
    //会议数组
    Meeting[] arr = new Meeting[100];
    //房间数组
    final int[] roomarr = { 101, 102, 103, 104, 105 };

    // 新增会议
    public void newMeeting(Meeting m) {
        int i, idmax = -1;
        for (i = 0; i < arr.length; i++) {
            if (arr[i] == null) {
                if (i != 0)
                    idmax = arr[i - 1].getid();
                break;
            }
        }
        m.setId(idmax + 1);
        arr[i] = m;
    }

    // 查询所有会议
    public void showMeeting() {
        for (int i = 0; i < arr.length; i++) {
            if (arr[i] == null)
                break;
            arr[i].getMeeting();
        }
    }

    // 查询单独会议
    public void getMeeting(int id) {
        System.out.println();
        arr[id].getMeeting();
    }

    // 删除会议
    public void deleteMeeting(int id) {
        int j = 0;
                //寻找对应id的数组下标
        for (int i = j; i < arr.length; i++) {
            if (arr[i] == null||arr[i].getid()==id) {
                j=i;
                break;
            }
        }
                //判断改id是否为空
        if (arr[j] == null) {
            System.out.printf("\n未找到id为%d的会议,删除失败\n\n", id);
        }
                //利用覆盖,替换数组数据
        for (int i = j; i < arr.length; i++) {
            if (arr[i] == null) {
                break;
            }
            arr[i] = arr[i + 1];
        }
    }

    // 修改会议
    public void modifyMeeting(int id, Meeting m) {
        arr[id] = m;
        arr[id].setId(id);
    }

    // 结束会议
    public void setMeetingstate(int id) {
        for (int i = 0; i < arr.length; i++) {
            if (arr[i] == null) {
                System.out.printf("\n未找到id为%d的会议,结束失败\n\n", id);
                break;
            } else if (arr[i].getid() == id) {
                arr[i].setstate();
                break;
            }

        }

    }

    // 查询空余房间数组
    public int[] getroom() {
        // 已预约房间数组
        int[] reservedRoom = new int[roomarr.length];
        // 空余房间数组
        int[] assemble = new int[roomarr.length] ;
        for (int i=0;i<roomarr.length;i++) {
            assemble[i]=roomarr[i];
        }
        //定义中间变量,用以计算数组中非零数据
        int res=0;
        for (int i = 0; i < arr.length; i++) {
            if (arr[i] == null) {
                break;
            }
            //查询线下的房间
            if (arr[i].getattribute() == 0 && arr[i].getstate()!=-1) {
                OfficialMeeting official = (OfficialMeeting) arr[i];
                int j = 0;
                for (j = 0; j < reservedRoom.length; j++) {
                    if (reservedRoom[j] == 0)
                        break;
                }
                reservedRoom[j] = official.getroom();
            }
        }

        //对比重复房间
        for (int q = 0; q < reservedRoom.length; q++) {
            if (reservedRoom[q]==0)
                break;
            for (int qq = 0; qq < roomarr.length; qq++) {
                if (reservedRoom[q] == roomarr[qq])
                    assemble[qq] = 0;
            }
        }

        //去零重组数组
        for (int i = 0; i < assemble.length; i++) {
            if(assemble[i]!=0) {
                res++;
            }
        }

        //根据数组中非零元素新建空房间数组
        int freeRoom[]=new int [res];
        int j=0;
        for (int i = 0; i < assemble.length; i++) {
            if(assemble[i]!=0) {
                freeRoom[j]=assemble[i];
                j++;
            }
        }

        //返回一个数组数据
        return freeRoom;
    }
}


测试类Test

public class Test {
    public static void main(String[] args) {
        Demo d = new Demo();
 
        //新建会议                 成员组别 房间号 时间戳      标题         备注
        d.newMeeting(new OfficialMeeting(1, 101, 16549854, "部门会议1", "普通会议"));
        d.newMeeting(new OnlineMeeting(1, 16549854, "工作会议2", "普通会议"));
        d.newMeeting(new OfficialMeeting(1, 105, 16549854, "部门会议3", "普通会议"));
        d.newMeeting(new OnlineMeeting(1, 16549854, "工作会议4", "普通会议"));

        // 输出会议列表
        d.showMeeting();

        // 按id查会议
        // d.getMeeting(1);

        System.out.print("空余房间");
        for (int i = 0; i < d.getroom().length; i++) {
            System.out.print(d.getroom()[i]+"\t");
        }

        // 删除某会议
        d.deleteMeeting(0);

        // 结束会议
        d.setMeetingstate(0);
        d.setMeetingstate(1);

        // 输出会议列表
        d.showMeeting();


        System.out.print("空余房间");
        for (int i = 0; i < d.getroom().length; i++) {
            System.out.print(d.getroom()[i]+"\t");
        }

    }

}

二、复盘反思

题目:

运用所学知识编写一个“会议管理程序”

个人分析:

1.“会议管理程序”,其实就是管理会议的程序。“会议”作为程序的主体单位,编写一个对这个主体单位进行管理操作的程序。

2.作为主体的“会议”,不可能只有一种类型,其有着五花八门的类型。

3.“会议”是程序的主体单位,不是单独一个出现的,是拥有数量的,所以需要“管理”。

处理思路:

1.把“会议”与“管理”区分开来,分别进行编写。

2.“会议”是一个概念,那么我们可以用抽象类统筹这个概念,再分别对具体的分类进行编写,然后通过多态来实现我们需要的功能。

3.既然我们用类来描述“会议”,那么一个个实体的会议就是一个个对象,对 对象进行存储,我们可以使用我们的对象数组。

遇到的问题

1.对象数组的存储与读取,子类对象为什么可以存进父类对象数组里面?

2.对于方法重载与多态的一些思考。

最后修改:2022 年 03 月 28 日
如果觉得我的文章对你有用,请随意赞赏