package obj;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import tools.MyScanner;
public class BookCity {
private List<Book> books;//书城中所存在的书
// private List<User> users;//使用本书城的用户
private Map<String,User> userMap;//使用Map来保存本书城的用户
private User user;//登录本书城的用户
public BookCity() {
super();
books = new ArrayList<>();
// users = new ArrayList<>();
userMap = new HashMap<>();
user = null;
}
public List<Book> getBooks() {
return books;
}
public void setBooks(List<Book> books) {
this.books = books;
}
// public List<User> getUsers() {
// return users;
// }
// public void setUsers(List<User> users) {
// this.users = users;
// }
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
public Map<String, User> getUserMap() {
return userMap;
}
public void setUserMap(Map<String, User> userMap) {
this.userMap = userMap;
}
//添加一本书到书城
private void addBook(Book book){
books.add(book);
}
//添加许多书到书城
private void addBooks(List<Book> books){
books.addAll(books);
}
//修改书籍
private void modifyBook(){
showBooks();
System.out.println("选择你要修改的书籍:");
int choose = MyScanner.getInt();
choose = getLegalChoose(0, books.size()-1, choose);
Book book = books.get(choose);
System.out.println("你选择了书籍:"+book.getName());
System.out.println("1.修改书名");
System.out.println("2.修改作者");
System.out.println("3.修改价格");
choose = MyScanner.getInt();
choose = getLegalChoose(1, 3, choose);
switch (choose) {
case 1:
System.out.println("请输入新的书名:");
String name = MyScanner.getStr();
book.setName(name);
break;
case 2:
System.out.println("请输入新的作者:");
String author = MyScanner.getStr();
book.setAuthor(author);
break;
case 3:
System.out.println("请输入新的价格:");
double price = MyScanner.getDouble();
book.setPrice(price);
break;
default:
break;
}
}
//删除书籍
private void removeBook(){
showBooks();
System.out.println("选择你要删除的书籍:");
int choose = MyScanner.getInt();
books.remove(getLegalChoose(0, books.size()-1, choose));
}
//添加一个用户到书城
public boolean addUser(User user){
// users.add(user);
if(!userMap.containsKey(user.getName())){
userMap.put(user.getName(), user);
return true;
}else{
return false;
}
}
//运行书城
public void run(){
int choose=0;
do {
choose = getChoose();
} while (!executeDefaultFunction(choose));
System.out.println("感谢使用本书城,再见");
}
private int getChoose(){
System.out.println("1.登录");
System.out.println("2.注册");
System.out.println("3.退出");
System.out.println("请选择:");
int choose = MyScanner.getInt();
return getLegalChoose(1, 3, choose);
}
private int getLegalChoose(int begin,int end,int choose){
while (choose>end||choose<begin){
System.out.println("超出范围");
System.out.println("请重新选择:");
choose = MyScanner.getInt();
}
return choose;
}
//执行用户未登录操作,返回ture时,程序终止执行。
private boolean executeDefaultFunction(int choose){
switch (choose) {
case 1:
if(!doLogin()){
System.out.println("登录失败,将回到主页面");
return false;
}else{
System.out.println("欢迎登录本书城");
//操作
while(!userOperation()){
//用户不退出登录操作将一直循环。
}
//
return false;
}
case 2:
doRegister();
return false;
case 3:
return true;
default:
break;
}
return false;
}
private void doRegister() {
String name,password;
System.out.println("输入用户名:");
name = MyScanner.getStr();
System.out.println("输入密码:");
password = MyScanner.getStr();
// addUser(new User(users.size(), name, password,Privileges.普通用户));
if(addUser(new User(userMap.size(), name, password,Privileges.普通用户))){
System.out.println("用户注册成功,将返回首页");
}else{
System.out.println("抱歉!该用户名已被注册");
}
}
private boolean doLogin() {
String name,password;
System.out.println("输入用户名:");
name = MyScanner.getStr();
System.out.println("输入密码:");
password = MyScanner.getStr();
// System.out.println("name:"+name+"password:"+password);
// for (User user : users) {
// if(user.getName().equals(name)&&
// user.getPassword().equals(password)){
// this.user = user;
// return true;
// }
// }
if(userMap.containsKey(name)){
User user = userMap.get(name);
if(password.equals(user.getPassword())){
this.user = user;
return true;
}else{
return false;
}
}
return false;
}
//登录用户可执行的操作
private boolean userOperation(){
System.out.println("1.查看本书城所有书籍");
System.out.println("2.在本书城中查找书籍");
System.out.println("3.从本书城中订阅书籍");
System.out.println("4.查看我已订阅的书籍");
System.out.println("5.取消我已订阅的书籍");
System.out.println("6.从本书城中删除书籍");
System.out.println("7.从本书城中修改书籍");
System.out.println("8.从本书城中添加书籍");
System.out.println("9.退出登录");
System.out.println("请选择功能:");
int choose = MyScanner.getInt();
return excuteUserOperation(getLegalChoose(0, 9, choose));
}
//查看商城中所有的书
public void showBooks(){
System.out.println(String.format("%-3s %-15s %-15s %-15s","编号","书名","作者名","订阅价格"));
for (int i = 0; i < books.size(); i++) {
System.out.print(String.format("%-3d", i));
books.get(i).show();
}
System.out.println("---------------------------------");
}
//用户订阅图书
private void orderBook(){
showBooks();
System.out.println("请选择你要订阅的书籍:");
int choose = MyScanner.getInt();
user.addBook(books.get(getLegalChoose(0, books.size()-1, choose)));
System.out.println("订阅成功");
}
//用户查看已经订阅的图书
private void showOrderBook(){
if(user==null){
System.out.println("用户没有登录");
}else{
user.showBookMarket();
}
}
//用户取消订阅
private void cancelBook(){
showOrderBook();
System.out.println("请选择你要取消订阅的书籍:");
int choose=0;
choose = MyScanner.getInt();
int size = user.getUserBookMarket().getBooks().size();
user.getUserBookMarket().getBooks().remove(getLegalChoose(0, size-1, choose));
System.out.println("取消订阅成功");
}
//查找书籍
private void findBook(){
System.out.println("请输入书名:");
String name = MyScanner.getStr();
List<Book> booksTemp = new ArrayList<>();
for (Book book : books) {
if(name.equals(book.getName())){
booksTemp.add(book);
}
}
if(booksTemp.size()==0){
System.out.println("书城中没有该书,联系管理员进行添加吧");
}else{
System.out.println("查询结果如下");
System.out.println(String.format("%-3s %-15s %-15s %-15s","编号","书名","作者名","订阅价格"));
for (int i = 0; i < booksTemp.size(); i++) {
System.out.print(String.format("%-3d", i));
booksTemp.get(i).show();
}
orderBook();
}
}
//执行用户登录后的操作,返回true时终止执行
private boolean excuteUserOperation(int choose){
if(choose==1){
showBooks();
return false;
}
if(choose==2){
findBook();
return false;
}
if(choose==3){
orderBook();
return false;
}
if(choose==4){
showOrderBook();
return false;
}
if(choose==5){
cancelBook();
return false;
}
if(choose==6){
if(user.getPrivileges()==Privileges.超级用户){
removeBook();
}else{
System.out.println("你的权限不够");
}
return false;
}
if(choose==7){
if(user.getPrivileges()==Privileges.超级用户){
modifyBook();
}else{
System.out.println("你的权限不够");
}
return false;
}