图书管理系统

在学习过程中尝试编写了一个图书管理系统,感觉挺有意思的,设计有图书管理员的注册和登录,其中注册需要有超级管理员的同意,只有成功登陆后才有对图书操作的权限,可以对图书进行增删改查。

package homework.demo03.day02.task2;

import java.util.ArrayList;

public class Main {
private static Views v = new Views();
private static UserDao userDao = new UserDao();
private static BookDao bookDao = new BookDao();

    public static void main(String[] args) {
        v.welcome();
        loop:while (true){
            switch (v.menu()){
                case 0:break loop;
                case 1:
                    register();
                    break;
                case 2:
                    login();
                    break;
            }
        }
        v.bye();
    }

    // 注册,需要超级管理员认证通过,不是随随便便谁都可以注册的
    // 不管有没有成功都会返回上级菜单
    private static void register(){
        User registerUser = v.register();
        boolean b = userDao.isRegisterSuccess(registerUser);
        if (b) {
            User u = v.superUser();
            b = userDao.isSuperUser(u);
            if (b){
                userDao.addUser(registerUser);
                v.success();
                return;
            }
        }
        v.fail();
    }

    // 和系统中管理员的信息进行比对
    private static void login() {
        User u = v.login();
        boolean b = userDao.isLoginSuccess(u);
        if(b){
            v.success();
            // 进入系统
            adminMenu();
        }else {
            v.fail();
        }
    }

    private static void adminMenu() {
    	// 弹出功能菜单
        loop:while(true){
            switch (v.adminMenu()){
                case 0:break loop;
                case 1:
                    addBook();
                    break;
                case 2:
                    alterBook();
                    break;
                case 3:
                    removeBook();
                    break;
                case 4:
                    findBook();
                    break;
                case 5:
                    showBook();
                    break;
            }
        }
    }

    // 添加图书
    private static void addBook() {
        Book book = v.addBook();
        bookDao.add(book);
        v.success();
    }

    // 修改图书
    private static void alterBook(){
        String bookName = v.getAlterBook();
        // 查找有没有这本书
        boolean b = bookDao.findBook(bookName);
        // 如果没有则返回
        if(!b){
            v.fail();
            return;
        }
        // 如果没有进行修改
        Book book = v.alterBook();
        b = bookDao.alter(bookName, book);
        if (b){
            v.success();
        }else{
            v.fail();
        }
    }

    // 删除图书
    private static void removeBook(){
        String bookName = v.remove();
        int i = v.isRemove();
        if (i == 0)bookDao.remove(bookName);
    }

    // 模糊查找图书
    private static void findBook(){
        String book = v.findBook();
        ArrayList<Book> books = bookDao.findAll(book);
        bookDao.printFind(books);
        v.success();
    }

    // 展示图书
    // 一般只会展示一次
    private static void showBook() {
        switch (v.showBook()){
            case  0:break;
            case 1:
                bookDao.printSortedBookPriceReverse();
                break;
            case 2:
                bookDao.printSortedBookPrice();
                break;
            case 3:
                bookDao.printSortedBookDate();
                break;

        }
        v.success();
    }
}

package homework.demo03.day02.task2;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Scanner;

public class Views {
    private Scanner sc = new Scanner(System.in);

    // 欢迎
    public void welcome(){
        System.out.println("欢迎来到XXX图书管理系统");
    }
	
	// 再见
    public void bye(){
        System.out.println("欢迎下次使用^_^");
    }

    // 注册或登录
    public int menu(){
        System.out.println("请根据提示输入信息:");
        System.out.println("0.退出");
        System.out.println("1.管理员注册");
        System.out.println("2.管理员登录");
        String s = sc.nextLine();

        int num = -1;
        try{
            num = Integer.parseInt(s);
        }catch (NumberFormatException e){
        }

        if(num < 0 || num > 2){
            System.out.println("输入有误,请重新输入!");
            return menu();
        }
        return num;
    }

    // 提供一个注册界面
    public User register(){
        System.out.println("下面开始注册:");
        System.out.print("请输入您的用户名:");
        String name = sc.nextLine();
        System.out.print("请输入您的密码:");
        String password = sc.nextLine();
        return new User(name, password);
    }

    // 验证超级管理员
    public User superUser(){
        System.out.println("开始验证超级管理员:");
        System.out.print("请输入管理员:");
        String name = sc.nextLine();
        System.out.print("请输入密码:");
        String password = sc.nextLine();
        return new User(name, password);
    }

    // 图书管理员登录
    public User login(){
        System.out.println("下面开始登录 :");
        System.out.print("请输入您的用户名:");
        String name = sc.nextLine();
        System.out.print("请输入您的密码:");
        String password = sc.nextLine();
        return new User(name, password);
    }

    // 成功登录后进入选择功能菜单,管理图书
    public int adminMenu(){
        System.out.println("请根据提示选择功能:");
        System.out.println("0.返回主菜单");
        System.out.println("1.图书新增");
        System.out.println("2.图书修改");
        System.out.println("3.图书删除");
        System.out.println("4.根据图书名模糊查找图书");
        System.out.println("5.查看所有图书");
        String s = sc.nextLine();

        int num = -1;
        try{
            num = Integer.parseInt(s);
        }catch (NumberFormatException e){}
        if (num<0 || num>5){
            System.out.println("您的输入有误T_T");
            return adminMenu();
        }
        return num;
    }

	// 添加图书
    public Book addBook(){
        System.out.println("请根据提示添加或修改图书:");
        System.out.print("请输入书名:");
        String name = sc.nextLine();
        System.out.print("请输入作者:");
        String author = sc.nextLine();
        System.out.print("请输入价格:");
        String str = sc.nextLine();
        System.out.print("请输入出版日期(yyyy-MM-dd):");
        String s = sc.nextLine();
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
        Date date = null;
        int price = -1;
        try {
            date = sdf.parse(s);
            price = Integer.parseInt(str);
        } catch (ParseException e) {
            System.out.println("请输入正确的日期");
            return addBook();
        }catch (NumberFormatException e){
        }

        if (price < 0){
            System.out.println("请输入正确的价格!!!");
            return addBook();
        }
        return new Book(name, author, price, date);
    }

    // 获得需要修改的图书的名字
    // 其实应该根据编号来获取的emmm
    public String getAlterBook(){
        System.out.println("开始进行图书的查找");
        System.out.print("请输入书名:");
        return sc.nextLine();
    }

    // 修改图书,复用了添加的方法
    public Book alterBook(){
        return addBook();
    }

    // 删除图书
    public String remove(){
        System.out.println("开始进行图书删除任务");
        System.out.println("请输入需要删除的书名:");
        return sc.nextLine();
    }

    // 确认删除
    public int isRemove(){
        System.out.println("请问是否确认删除?");
        System.out.println("0.确定");
        System.out.println("1.取消");
        String s = sc.nextLine();
        int num = -1;
        try {
            num = Integer.parseInt(s);
        }catch (NumberFormatException e){

        }

        if (num < 0 || num > 1){
            System.out.println("输入有误,重新输入");
            return isRemove();
        }
        return num;
    }

    // 模糊查找
    public String findBook(){
        return getAlterBook();
    }

    // 查看图书
    public int showBook(){
        System.out.println("请选择功能:");
        System.out.println("0.退出");
        System.out.println("1.价格从高到低排序");
        System.out.println("2.价格从低到高排序");
        System.out.println("3.出版日期排序");
        String s = sc.nextLine();
        int num = -1;
        try{
            num = Integer.parseInt(s);
        }catch (NumberFormatException e){}

        if (num<0 || num>3){
            System.out.println("输入有误,请重新输入!");
            return showBook();
        }
        return num;
    }

    // 提示操作成功
    public void success(){
        System.out.println("操作成功^_^");
    }
    // 提示操作失败
    public void fail(){
        System.out.println("操作失败!!!");
    }
}

package homework.demo03.day02.task2;

import java.util.Objects;

// 管理员
public class User {
    private String name;
    private String password;

    public User() {
    }

    public User(String name, String password) {
        this.name = name;
        this.password = password;
    }

    @Override
    public String toString() {
        return "User{" +
                "name='" + name + '\'' +
                ", password='" + password + '\'' +
                '}';
    }

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        User user = (User) o;
        return Objects.equals(name, user.name) &&
                Objects.equals(password, user.password);
    }

    @Override
    public int hashCode() {
        return Objects.hash(name, password);
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }
}

package homework.demo03.day02.task2;

import java.util.ArrayList;


public class UserDao {
    private ArrayList<User> data = new ArrayList<>();
    private String name = "admin123";
    private String password = "147852369.qwq";

    // 创建超级管理员
    {
        data.add(new User(name, password));
    }

    // 是否登录成功
    // 同样适用于超级管理员
    public boolean isLoginSuccess(User user){
        for (int i = 0; i < data.size(); i++) {
            User u = data.get(i);
            if(u.equals(user))return true;
        }
        return false;
    }

    // 注册
    // 已经存在的用户不能支持继续注册,但是密码可以相同
    public boolean isRegisterSuccess(User user){
        for (User u : data) {
            if (u.getName().equals(user.getName())) return false;
        }
        return true;
    }

    // 是否是超级管理员
    public boolean isSuperUser(User user){
        return (this.name.equals(user.getName()) && this.password.equals(user.getPassword()));
    }

    // 将用户加入系统
    public void addUser(User user){
        data.add(user);
    }
}

package homework.demo03.day02.task2;

import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Objects;

// 图书类
public class Book{
    private String name;
    private String author;
    private int price;
    private Date date;

    public Book() {
    }

    public Book(String name, String author, int price, Date date) {
        this.name = name;
        this.author = author;
        this.price = price;
        this.date = date;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getAuthor() {
        return author;
    }

    public void setAuthor(String author) {
        this.author = author;
    }

    public int getPrice() {
        return price;
    }

    public void setInfo(int price) {
        this.price = price;
    }

    public Date getDate() {
        return date;
    }

    public void setDate(Date date) {
        this.date = date;
    }

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        Book book = (Book) o;
        return Objects.equals(name, book.name) &&
                Objects.equals(author, book.author) &&
                Objects.equals(price, book.price);
    }

    @Override
    public int hashCode() {
        return Objects.hash(name, author, price);
    }

    @Override
    public String toString() {
        return "书名:" + name +
                ",作者:" + author +
                ",价格:" + price +
                ",出版日期:" + new SimpleDateFormat("yyyy-MM-dd").format(date);
    }
}
package homework.demo03.day02.task2;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Date;

public class BookDao {
    // 注意价格和日期不能一样
    private ArrayList<Book> data = new ArrayList<>();

    // 新增图书
    public boolean add(Book book){
        return data.add(book);
    }

    // 修改图书
    public boolean alter(String name, Book book){
        int index = findBookIndex(name);
        if (index == -1)return false;
        add(book);
        remove(name);
        return true;
    }

    // 删除图书
    public boolean remove(String name){
        int index = findBookIndex(name);
        if (index == -1)return false;
        data.remove(index);
        return true;
    }

    // 根据名字查找到图书的索引
    public int findBookIndex(String name){
        for (int i = 0; i < data.size(); i++) {
            if(data.get(i).getName().equals(name)) return i;
        }
        return -1;
    }

    // 根据价格查找到图书的索引
    public int findBookIndex(int price){
        for (int i = 0; i < data.size(); i++) {
            if(data.get(i).getPrice()== price) return i;
        }
        return -1;
    }

    // 根据日期查找到图书的索引
    public int findBookIndex(Date date){
        for (int i = 0; i < data.size(); i++) {
            if(data.get(i).getDate().equals(date)) return i;
        }
        return -1;
    }

    // 根据书名查找图书
    public boolean findBook(String name){
        for (Book book : data){
            if(book.getName().equals(name)) return true;
        }
        return false;
    }

    // 模糊查找
    // 根据书名或书名的一部分查找到所有这个书的索引
    public ArrayList<Book> findAll(String s){
        ArrayList<Book> books = new ArrayList<>();
        for (Book book : data){
            if(book.getName().contains(s)) books.add(book);
        }
        return books;
    }

    // 打印查找到的书
    public void printFind(ArrayList<Book> books){
        for (Book book : books) {
            System.out.println(book);
        }
    }

    // 获取价格升序排列数组
    private Date[] getBookDate(){
        Date[] arr = new Date[data.size()];
        for (int i = 0; i < data.size(); i++) {
            arr[i] = data.get(i).getDate();
        }
        // 将名称按照升序排列
        Arrays.sort(arr);
        return arr;
    }

    // 获取价格降序排列数组
    private int[] getBookPriceReverse(){
        int[] bookPrice = getBookPrice();
        int length = bookPrice.length;
        int[] arr = new int[length];
        for(int i=length-1; i>=0; i--){
            arr[length-(i+1)] = bookPrice[i];
        }
        return arr;
    }

    // 获取日期升序排列数组
    private int[] getBookPrice(){
        int[] arr = new int[data.size()];
        for (int i = 0; i < data.size(); i++) {
            arr[i] = data.get(i).getPrice();
        }
        // 将名称按照升序排列
        Arrays.sort(arr);
        return arr;
    }

    // 打印价格升序后的图书
    public void printSortedBookPrice(){
        for (int price : getBookPrice()) {
            Book book = data.get(findBookIndex(price));
            System.out.println(book);
        }
    }

    // 打印价格降序后的图书
    public void printSortedBookPriceReverse(){
        for (int price : getBookPriceReverse()) {
            Book book = data.get(findBookIndex(price));
            System.out.println(book);
        }
    }
	// 打印日期升序排列后的图书
    public void printSortedBookDate(){
        for (Date date : getBookDate()) {
            Book book = data.get(findBookIndex(date));
            System.out.println(book);
        }
    }
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值