Surpass Day15——Java 数组模拟栈数据结构、酒店管理系统

Surpass Day15——Java 数组模拟栈数据结构、酒店管理系统,第1张

Surpass Day15——Java 数组模拟栈数据结构、酒店管理系统

目录

1、数组模拟栈数据结构

1.1 题目要求

1.2 代码呈现

1.3 问题展现

2、酒店管理系统

2.1 题目要求

2.2  代码呈现

2.3 问题展现


1、数组模拟栈数据结构 1.1 题目要求

1)这个栈可以存储java中的任何引用类型的数据;

2)在栈中提供push方法模拟压栈;(栈满了,要有提示信息)

3)在栈中提供pop方法模拟压栈;(栈空了,要有提示信息)

4)编写测试程序,new栈对象,调用push pop方法来模拟压栈d栈 *** 作;

5)假设栈的默认初始化容量是10;

1.2 代码呈现
public class Text {
    public static void main(String[] args) {
        //创建一个栈对象,初始化容量是10个
        Stack s = new Stack();
        s.push("12345ty");
        s.push(new Object());
        s.push(new Object());
        s.push(new Object());
        s.push(new Object());
        s.pop();
        s.pop();
        s.pop();
        s.pop();
        s.pop();
        s.pop();
        //可以使用for循环进行压栈和d栈
    }
}
class Stack{
    //存储任何引用类型数据的数组
    private Object[] elements;
    //有参构造方法
    public Stack(Object[] elements) {
        this.elements = elements;
    }
    //无参构造方法
    public Stack() {
        //一维数组动态初始化
        //默认初始化容量为10
        this.elements = new Object[10];
    }
    //栈帧(永远指向栈顶元素)
    private int index=-1;
​
    //压栈方法
    public void push(Object obj){
        if(this.index >= this.elements.length-1){
            System.out.println("栈内存已满,压栈失败");
            return;
        }
        index++;
        elements[index] = obj;
        System.out.println(obj + "元素,压栈成功,栈帧指向" + index);
    }
​
    //d栈方法
    public void pop(){
        if(this.index <= -1) {
            System.out.println("栈内存已空,弹栈栈失败");
        }
        else
            System.out.println(elements[index] + "元素,弹栈成功,栈帧指向" + --index);
    }
​
    //static实例变量的get方法
    public Object[] getElements() {
        return elements;
    }
    //static实例变量的set方法
    public void setElements(Object[] elements) {
        this.elements = elements;
    }
    //实例变量栈帧的get方法
    public int getIndex() {
        return index;
    }
    //实例变量栈帧的set方法
    public void setIndex(int index) {
        this.index = index;
    }
}
1.3 问题展现

1)为什么选择Object类型数组?

因为这个栈可以存储java中任何引用类型的数据

new Animal( )对象和new Peaple( )对象包括字符串都可以放进去,因为Animal和Peaple的超级费雷都是Object;

Object [ ] 是一个万能的口袋,这个口袋可以装任何引用数据类型的数据

2)关于字符串

字符串其实是一个字符串对象,但在java中字符串有优待,不需要new也是一个对象

String s = "asdfghj";
​
String s = new String("asdfghj");

3)关于set和get方法

在类中,大多采用封装机制,所以set和get方法有时候虽然用不到,但也需要写上

4)数组的初始化

数组的初始化可以在定义时直接初始化

this.elements = new Object [10];//赋值也是在构造方法调用的时候初始化

也可以在构造方法中初始化

 public Stack() {
        this.elements = new Object[10];
    }

5)关于System.out.println()方法

所有的System.out.println()方法在执行时,如果输出引用,自动调用引用的toString()方法

e.g.:System.out.println(obj + "元素,压栈成功");这里的obj其实调用了toString()方法


2、酒店管理系统 2.1 题目要求

为某酒店编写程序:酒店管理程序,模拟订房、退房、打印所有房间状态等功能

1)该系统的用户是:酒店前台

2)酒店使用一个二维数组来模拟"Room[ ] [ ] rooms;"

3)酒店中的每一个房间应该是一个java对象:Room;

4)每一个房间Room应该有:房间编号、房间类型属性、房间是否为空;

5)系统对外提供的功能:

可以预定房间:用户输入房间编号,订房

可以退房:用户输入房间编号,退房;

可以查看所有房间的状态:用户输入某个指令应该可以查看所有房间的状态

2.2  代码呈现
import java.util.Scanner;
​
public class HotelSystem {
    public static void main(String[] args) {
        //创建酒店对象
        Hotel hotel = new Hotel();
        Scanner s = new Scanner(System.in);
        Scanner roomNo = new Scanner(System.in);
        meau();
        while(true){
            int i = s.nextInt();
            switch (i){
                case 1:
                    hotel.print();break;
                case 2:
                    System.out.println("请输入预定的房间号");
                    hotel.order(roomNo.nextInt());break;
                case 3:
                    System.out.println("请输入退订的房间号");
                    hotel.exit(roomNo.nextInt());break;
                case 0:
                    return;
            }
        }
    }
    public static void meau(){
        //欢迎页面
        System.out.println("_____________________________________________________________________ ");
        System.out.println("**********************┍------------------------┑ *******************");
        System.out.println("**********************   欢迎使用酒店管理系统     ********************");
        System.out.println("**********************┕------------------------┙ *******************");
        System.out.println("xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx菜单xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx");
        System.out.println("====================================================================");
        System.out.println(".......      1.查看房间         ......         2.表示订房      .......");
        System.out.println(".......      3.表示退房         ......         0.退出系统      .......");
        System.out.println("____________________________________________________________________");
        System.out.println("请输入功能编号:");
    }
}
class Room{
    //房间号
    private int no;
    //房间类型
    private String type;
    //房间状态
    private boolean status;
    //重写Object中的toString方法,返回一个含有三个信息的字符串
    public String toString() {
        return "["+no+","+type+","+(status ? "空闲":"占用")+"]";
    }
    //重写Object中的equals方法,若房间号相同则两个对象相同
    public boolean equals(Object obj){
        if(obj == null||!(obj instanceof Room)) return false;
        if(this == obj) return true;
        Room room = (Room)obj;
        return room.getNo()==this.no;
    }
​
    public Room(int no, String type, boolean status) {
        this.no = no;
        this.type = type;
        this.status = status;
    }
​
    public Room() {
    }
​
    public int getNo() {
        return no;
    }
​
    public String getType() {
        return type;
    }
​
    public boolean isStatus() {
        return status;
    }
​
    public void setNo(int no) {
        this.no = no;
    }
​
    public void setType(String type) {
        this.type = type;
    }
​
    public void setStatus(boolean status) {
        this.status = status;
    }
}
class Hotel {
    //二维数组模拟酒店房间
    private Room[][] rooms;
​
    //通过构造方法来盖楼
    public Hotel(){
    //房间编号,房间类型,房间状态
        rooms = new Room[3][10];
        //创建30个对象,放到数组中
        for (int i = 0;i < rooms.length;i++){
            for (int j = 0;j < rooms[i].length;j++){
                if(i==0){
                    rooms[i][j] = new Room((i+1)*100+j+1,"单人间",true);
                }
                else if(i==1){
                    rooms[i][j] = new Room((i+1)*100+j+1,"标准间",true);
                }
                else if(i==2){
                    rooms[i][j] = new Room((i+1)*100+j+1,"豪华间",true);
                }
            }
        }
    }
    //在酒店对象上提供一个打印房间列表的方法
    public void print(){
        for (int i = 0;i < rooms.length;i++){
            for (int j = 0;j < rooms[i].length;j++) {
                System.out.print(rooms[i][j]);
            }
            System.out.println();
        }
    }
    //在酒店对象上提供一个订房的方法
    public void order(int roomNo){
        //最主要的是将房间状态修改为false
        Room room = rooms[roomNo / 100 -1][roomNo % 100-1];
        if(room.isStatus()==false){
            System.out.println("该房已被预定!请重新选择!");
            return;
        }
        room.setStatus(false);
        System.out.println(roomNo + "已定房!");
    }
    //在酒店对象上提供一个退房的方法
    public void exit(int roomNo){
        //最主要的是将房间状态修改为true
        Room room = rooms[roomNo / 100 -1][roomNo % 100-1];
        if(room.isStatus()==true){
            System.out.println("该房已被退订!");
            return;
        }
        room.setStatus(true);
        System.out.println(roomNo + "已退房!");
    }
}
2.3 问题展现

1)equals方法重写

equals是用来比较两个字符串对象是否相等的,至于怎么比较程序员自己决定;

你认为两个房间的编号相等就表示同一个房间,那么你写代码标记房间编号就行

2)toString方法重写

toString方法的目的是将java对象转换成字符串形式,怎么转,转成什么形式程序员自己定,可以重写后不转成内存地址

public String toString(){
    //return "[101,单人间,占用]"
    //动态
    return "["+no+","+type+","+(status ? "空闲":"占用")+"]"
}

3)如何把一个变量塞到一个字符串当中,口诀:加一个双引号,双引号中间加两个加号,两个加号中间加变量名

"["+no+","+type+","+(status ? "空闲":"占用")+"]"
					
										


					

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zaji/5703493.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-17
下一篇 2022-12-17

发表评论

登录后才能评论

评论列表(0条)

保存