JAVA作业:数组模拟栈和酒店管理系统的模拟


数组模拟栈

题目要求:

编写程序,使用一维数组,模拟栈数据结构。
1、这个栈可以存储java中的任何引用类型的数据。
2、在栈中提供push方法模拟压栈。(栈满了,要有提示信息。)
3、在栈中提供pop方法模拟弹栈。(栈空了,也有有提示信息。)
4、编写测试程序,new栈对象,调用push pop方法来模拟压栈弹栈的动作。

首先是我的想法和思路:

既然是模拟栈,那么就要做到先进后出的功能。栈如何去定位当前元素呢?
通过栈帧index。
所以我需要一个index变量去定位每次栈顶的位置,从而去判断栈是否满了
而且还可以在对数组下标为index的变量操作时达到“先进后出”的目的
接着就是题目中要求的“这个栈可以存储java中的任何引用类型的数据。”
意味着我们这个数组要用的是Obeject类型。
至此大体已出

接下来是我的代码:

首先就是MyStack类,这个类是关于栈的模拟
public class MyStack {
    Object[] elements;
    int index = -1;
    public MyStack(Object[] elements) {
        this.elements = elements;
    }
    public void push(Object object){
    	if(index != elements.length - 1){
    		index++;
    		elements[index] = object;
    		System.out.println("压栈成功");
    	}else{
    		System.out.println("错误:栈满!无法压栈!");
    	}
    }

接下来就是关于测试程序了

测试程序MyStackTest
import java.util.Scanner;
public class MyStackTest {
    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        int length;
        System.out.println("请输入栈的大小:");
        length = input.nextInt(); 
        String[] a1 = new String[length];
        MyStack myStack1 = new MyStack(a1);
        int flag = 0;
        while(flag != 3){
        	    System.out.println("请输入您要进行的操作:1代表push(压栈),2代表pop(弹栈),3表示停止该操作");
        	    flag = input.nextInt();
        	    if(flag == 1){
        	    	String toInPut;
        	    	System.out.println("请输入您要压入栈的内容");
        	    	toInPut = input.next();
        	    	myStack1.push(toInPut);        	  
        	     }else if(flag == 2){
        	     	myStack1.pop();
        	     }else if(flag == 3){
        	     	break;
        	     }else{
        	        System.out.println("输入不合法!请输入您要进行的操作:1代表push(压栈),2代表pop(弹栈),3表示停止该操作");	    
        	     }
        	   }
        	}
        } 

这就是数组模拟栈。


酒店管理系统的模拟

题目要求

为某个酒店编写程序:酒店管理系统,模拟订房、退房、打印所有房间状态等功能。
1、该系统的用户是:酒店前台。
2、酒店使用一个二维数组来模拟。“Room[][] rooms;”
3、酒店中的每一个房间应该是一个java对象:Room
4、每一个房间Room应该有:房间编号、房间类型、房间是否空闲.
5、系统应该对外提供的功能:

可以预定房间:用户输入房间编号,订房。
可以退房:用户输入房间编号,退房。
可以查看房间的状态:用户输入某个指令应该可以查看所有房间状态。

想法和思路:

该题目较为简单,主要思想就是去实现每个功能
题目已经给了要求:用一个Room类和二维数组去实现。
Room类主要是存储每个房间的信息:例如门牌号,是否空闲等
而二维数组则是去存储每个房间。
接下来只需实现即可

我的代码:

首先是实现各个功能以及Room类
注意,这里最好是吧Room类和功能实现分开写,但是我合并了,以后不要这样
public class Room {
    static Room[][] rooms = new Room[3][10];
    int roomId;
    int floor =0,number = 0;
        boolean flag = false;
    String roomStyle;

    public static void Initialization(){
        int k,p;
        for(k = 0;k < 3;k++){
            for(p = 0;p < 10;p++){
                rooms[k][p] = new Room();
            }
        }
    }

    public void setRoomId(int roomId) {
        this.roomId = roomId;
    }

    public Room(){}


    public void reserveRoomId(){
        floor = (roomId/100) - 1;
        number = (roomId%100) - 1;
    }

    public void orderRoom(){
        if(rooms[floor][number].flag == true){
            System.out.println("该房间已满!请另换一间!");
        }else{
            rooms[floor][number].flag = true;
            System.out.println("预订成功!您预订的房间号为:" + roomId + "房间位于第" + (floor+1) + "层0" + (number+1) + "号房");
        }
    }

    public void Check_out(){
        if(rooms[floor][number].flag == false){
            System.out.println("该房间本就为空!无法退房!");
        }else{
            rooms[floor][number].flag = false;
            System.out.println("退房成功!" + roomId + "房间已成功退房" );
        }
    }

    public void View_information(){
        System.out.println("将为您打印全部房间信息:");
        int i,j,roomids;
        for(i = 0;i < 3;i++){
            System.out.println("房间号\t\t房间是否满员\t\t房间类型");
            for(j = 0;j < 10;j++){
                if(i == 0){
                    rooms[i][j].roomStyle = "普通房";
                }else if(i == 1){
                    rooms[i][j].roomStyle = "豪华房";
                }else{
                    rooms[i][j].roomStyle = "贵宾房";
                }
                roomids = ((i+1)*100)+(j+1);
                System.out.println(roomids + "\t\t\t" + rooms[i][j].flag + "\t\t\t" + rooms[i][j].roomStyle);
            }
        }
    }
}                

接下来就是测试程序

写到测试程序我就意识到得注意程序的用户交互性
用户可能会有各种输入,那么正确的输入我们得去执行功能
而错误的输入我们则得去提醒用户输入错误以及正确的输入方式
这样可以避免很多麻烦
import java.util.Scanner;
public class HotelTest {
    public static void main(String[] args) {
        int flag = 0;
        int roomId;
        Scanner input = new Scanner(System.in);
        Room.Initialization();
        Room room = new Room();
        System.out.println("欢迎来到why牌酒店管理系统!~");
        System.out.println("本酒店一共有3层楼,每层楼10间房间");
        System.out.println("下面请输入:1(预订房间);2(退房);3(查看所有房间信息);4(退出系统)");
        while(flag != 4){
            flag = input.nextInt();
            if(flag == 1){
                System.out.println("现在是订房界面:");
                System.out.println("请输入房间号:");
                System.out.println("注意:房间号每层尾号从1开始到9结束,例如1层3号房就是:103");
                roomId = input.nextInt();
                if(((roomId/100) >= 1 &&(roomId/100) <=3)&&((roomId%100) >=1&&(roomId%100) <=10)){
                    room.setRoomId(roomId);
                    room.reserveRoomId();
                    room.orderRoom();
                }else{
                    System.out.println("输入房间号错误!注意:房间号每层尾号从1开始到9结束,例如1层3号房就是:103");
                }     
            }else if(flag == 2){
                System.out.println("现在是退房界面:");
                System.out.println("请输入房间号:");
                System.out.println("注意:房间号每层尾号从1开始到9结束,例如1层3号房就是:103");
                roomId = input.nextInt();
                if(((roomId/100) >= 1 &&(roomId/100) <=3)&&((roomId%100) >=1&&(roomId%100) <=10)){
                    room.setRoomId(roomId);
                    room.reserveRoomId();
                    room.Check_out();
                }else{
                    System.out.println("输入房间号错误!注意:房间号每层尾号从1开始到9结束,例如1层3号房就是:103");
                }    
            }else if(flag == 3){
                room.View_information();
            }else if(flag == 4){
                System.out.println("感谢使用why牌酒店管理系统!已关机!");
                break;
            }else{
                System.out.println("输入错误!请输入:1(预订房间);2(退房);3(查看所有房间信息);4(退出系统)");
            }
        }
    }
}                               

入上便是我的程序,功能实现完全没问题,那么是不是就没问题了呢?
并不是。


我的程序的问题

在对比了老师写的程序后,我发现了我现在的问题:

虽然会封装,知道要重写方法(例如toString,equal方法)但是不会去用。
在老师的程序中,强调了无论如何,那怕用不上也要对程序封装
然后提供set和get方法,这点是我以后必须得记住的。

至于老师的代码不予提供,自行寻找。


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值