UVA 230 Borrowers(图书管理系统)

题意:模拟图书管理系统,首先输入若干图书的标题和作者(标题各不相同,以END结束),然后是若干指令:borrow指令表示借书,return指令表示还书,shelve指令表示把所以已归还但还没有上架的图书排序后插入书架并输入图书标题和插入位置(可能是第一本书或者某本书的后面),图书排序的方法是先按作者从小到大排序,再按标题从小到大排序。在处理第一条指令前,你应当先将所有图书按照这种方式排序。

思路:直接模拟,建立Book{书名,作者},用Vector存下,然后按照规则排序,同时用map记下每本书的作者,shelve的时候吧前面return的书按照上面规则排序,然后存起来到Vector类型的returnBook中,每输出一条,就把第一个数据从returnbook中移除.知道returnbook为空。

import java.util.Collections;
import java.util.Comparator;
import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;
import java.util.Vector;

public class Main {
	public static void main(String[] args) {
		Scanner scan = new Scanner(System.in);
		Vector<Book> v = new Vector<>();
		Vector<Book> returnbook = new Vector<>();
		Map<String,String> map = new HashMap<>();
		while(true){
			String str = scan.nextLine();
			if("END".equals(str))break;
			int index = str.indexOf('"', 1);
			String bookname = str.substring(1,index);
			String author = str.substring(index+5);
			v.add(new Book(bookname,author));
			map.put(bookname, author);
		}
		Collections.sort(v, new Cmp());
		while(true){
			String str = scan.nextLine();
			if("END".equals(str))break;
			if("SHELVE".equals(str)){
				if(!returnbook.isEmpty()){
					Collections.sort(returnbook,new Cmp());
					Collections.sort(v,new Cmp());
					for(int i=0;i<v.size()&&!returnbook.isEmpty();i++){
						if(v.get(i).bookname.equals(returnbook.get(0).bookname)){
							if(i!=0){
								System.out.printf("Put \"%s\" after \"%s\"\n",v.get(i).bookname,v.get(i-1).bookname);
							}else{
								System.out.printf("Put \"%s\" first\n",v.get(i).bookname);
							}
							returnbook.remove(0);
						}
					}
				}
				System.out.println("END");
			}else{
				String bookname = str.substring(8,str.length()-1);
				String author = map.get(bookname);
				if(str.charAt(0)=='B'){
					remove(v,bookname);
				}
				if(str.charAt(0)=='R'){
					returnbook.add(new Book(bookname,author));
					v.add(new Book(bookname,author));
				}
			}
		}
	}
	
	public static void remove(Vector<Book> v,String book){
		for(int i=0;i<v.size();i++){
			if(v.get(i).bookname.equals(book)){
				v.remove(i);
				return;
			}
		}
	}
	static class Cmp implements Comparator<Book>{

		@Override
		public int compare(Book o1, Book o2) {
			// TODO Auto-generated method stub
			if(o1.author.compareToIgnoreCase(o2.author)!=0)
				return o1.author.compareToIgnoreCase(o2.author);
			else
				return o1.bookname.compareToIgnoreCase(o2.bookname);
		}
		
	}
	static class Book{
		String bookname;
		String author;
		public Book(String bookname,String author){
			this.bookname = bookname;
			this.author = author;
		}
	}
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值