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