【华为上机】 实现一个简易的银行排号叫号系统(代码欠妥,求修改)

排号机
描述:

实现一个简易的银行排号叫号系统

 

get    取号                     示例:"get"或"get vip"
call   叫号                     示例:"call"
delete 删除号码                 示例:"delete 5"
count  获取当前排队总人数       示例:"count"
countN 获取号码N以前的排队人数  示例:"countN"
reset  重置排号机               示例:"reset"

quit   退出排号机               示例:"quit"

运行时间限制:无限制
内存限制:无限制
输入:

每行只会有一条输入(比如:C语言可使用gets函数获取一行输入命令的字符串)。
1、若输入不符合要求(如:命令字非法,或其他认为输入的错误)均需输出"error"
2、每条输出后使用换行符隔开(如后面示例)

输出:

1)取号。可获取普通号和vip号码。如初始状态,输入"get",则获取普通号码,执行结果为"1",如再次输入"get vip",则获取VIP号码,执行结果为"vip 2"。如果末尾的2号被删除,则再次调用"get"时应输出"2"
         VIP号码有绝对的优先级。普通号和vip号码统一编号,取号均为连续号码。号码从1开始编号,最大为100000.


2)叫号。获取当前应该处理用户的号码。例如当前排队号码为1 2 3 4 5 7,当输入"call",执行结果为"1",如1为vip号码,则为"vip 1".如果再连续调用6次,第六次执行结果应为"error"


3)删除号码。客户不想办理时可删除号码,叫号时则跳过此号码。例如当前排队号码为1 2 3 4 5,输入"delete 5",执行结果为"5",如果5为vip则显示"vip 5"。再次输出"delete 5",执行结果为"error"


4)获取当前排队总人数。获取当前排队人数。例如当前排队号码为1 2 3 4 5 6,执行结果为"6"


5)获取在某个号码之前排队的总人数。例如当前排队号码为1 2 3 4 5 7,输入"countN 7",执行结果为"5"


6、重置排号机。例如输入"reset",则重置排号机,进入初始状态,无需输出。

7、退出排号机。例如输入"quit",则退出排号机,无需输出。

样例输入:
get
get
get
get vip
count
countN 1
call
quit
样例输出:
1
2
3
vip 4
4
1
vip 4

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Scanner;
import java.util.Stack;


public class Main12 {

	enum Cmd {get,call,delete,count,countN,reset,quit};
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Scanner cin = new Scanner(System.in);
		String line;
		int count=1;
		List<Integer> nums = new ArrayList<Integer>();
		List<Integer> vipnums = new ArrayList<Integer>();
		int cnum=0;
		while (cin.hasNext()){
			line = cin.nextLine();
			String[] strs = line.split(" ");
			String mycmd = strs[0];

			switch (mycmd) {
			case "get":
				cnum=0;
				if(count>100000){
					System.out.println("error");
				}else{					
					int c1=0,c2=0;
					if(nums.size()>0)
						c1 = Collections.max(nums);
					if(vipnums.size()>0)
						c2 = Collections.max(vipnums);
					count = c1>c2?c1+1:c2+1;
					
					if(strs.length==1){
						System.out.println(count);
						nums.add(count);
					}else if(strs[1].equals("vip")){
						System.out.println("vip "+count);
						vipnums.add(count);
					}
					else
						System.out.println("error");
				}
				break;
			case "call":
				cnum++;
				if(cnum==6)
					System.out.println("error");

				int num;
				if(vipnums.size()>0){
					Collections.sort(vipnums);
					num = vipnums.get(0);
					System.out.println("vip "+num);
					vipnums.remove(0);
				}else if(nums.size()>0){
					Collections.sort(nums);
					num = nums.get(0);
					System.out.println(num);
					nums.remove(0);
				}else
					System.out.println("error");
				break;
			case "delete":
				cnum=0;
				int delnum;
				if(strs.length!=2){
					System.out.println("error");
				}else{					
					try{					
						delnum = Integer.parseInt(strs[1]);
					}catch (Exception e) {
						System.out.println("error");
						break;
					}
					if(nums.contains(delnum)){
						System.out.println(delnum);
						nums.remove(nums.indexOf(delnum));
					}else if(vipnums.contains(delnum)){
						System.out.println("vip "+delnum);
						vipnums.remove(vipnums.indexOf(delnum));
					}else{
						System.out.println("error");
						break;
					}
				}
				break;
			case "count":
				cnum=0;
				System.out.println(nums.size()+vipnums.size());
				break;
			case "countN":
				cnum=0;
				if(strs.length!=2){
					System.out.println("error");
					break;
				}
				int curnum;
				try{					
					curnum = Integer.parseInt(strs[1]);
				}catch (Exception e) {
					System.out.println("error");
					break;
				}
				if(nums.contains(curnum)){
					Collections.sort(nums);
					System.out.println(nums.indexOf(curnum)+vipnums.size());
				}else if(vipnums.contains(curnum)){
					Collections.sort(vipnums);
					System.out.println(vipnums.indexOf(curnum));
				}else{
					System.out.println("error");
				}
				break;
			case "reset":
				cnum=0;
				nums.clear();
				vipnums.clear();
				count=1;
				break;
			case "quit":
				return;
			default:
				System.out.println("error");
				break;
			}
			
		}
	}

}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值