【Java】图书管理系统-控制台输出
项目原码压缩包在我主页的资源中免费领取。(在IDEA中运行,启动类在src -> Main 中运行)
图书管理系统
设计一个简单的控制台输出的图书管理系统,我们首先需要明确其基本功能、设计内容以及设计要求。这个系统可以包括以下几个核心模块:书籍管理、用户管理、借阅与归还管理。以下是一个基础的设计方案:
设计内容
数据模型设计
- Book 类:包含书的属性,如 name(书名)、author(作者)、price(价格)、type(类型)、borrowed(借出情况)等。
- User 类:包含用户属性,如 name(姓名)、Books(已借书籍列表,可以是Book对象的集合)。
功能模块设计
-
书籍管理
- 添加书籍
- 删除书籍
- 显示书籍信息
- 查询书籍(按书名查找)
-
用户管理
- 查找图书
- 借阅图书
- 归还图书
设计要求
用户交互友好性
- 系统应提供清晰的菜单选项,方便用户进行操作。
- 对于错误输入,系统应给出友好的提示信息,指导用户正确操作。
数据一致性与安全性
- 保证数据的一致性,例如在借书时检查书籍是否可借。
- 虽然是控制台应用,也应考虑简单安全措施,比如对用户密码进行基本的加密处理。
系统扩展性
- 设计时应考虑未来可能的功能扩展,如增加评论系统、推荐系统等,确保现有架构易于扩展。
在该项目中我们设计了两个菜单:
用来各执行不同的操作。
项目操作步骤
1、建立包:
在该项目中我们建立三个包:1、book 2、operation 3、user 分别用来存放与书籍相关的类、与操作相关的类、与用户相关的类。
编写与书籍相关的类:
Book类的代码:
package book; import java.util.Objects; /** * Created with IntelliJ IDEA. * Description:图书 * User: lenovo * Date: 2024-06-04 * Time: 20:13 */ public class Book { private String name;//书名 private String auther;//作者 private int price;//价格 private String type;//书的类型 private boolean isBorrowed;//书是否被借出 public Book(String name, String auther, int price, String type) { this.name = name; this.auther = auther; this.price = price; this.type = type; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getAuther() { return auther; } public void setAuther(String auther) { this.auther = auther; } public int getPrice() { return price; } public void setPrice(int price) { this.price = price; } public String getType() { return type; } public void setType(String type) { this.type = type; } public boolean isBorrowed() { return isBorrowed; } public void setBorrowed(boolean borrowed) { isBorrowed = borrowed; } @Override public String toString() { return "Book{" + "书名:'" + name + '\'' + ", 作者:'" + auther + '\'' + ", 价格:" + price + ", 类型:'" + type + '\'' + ((isBorrowed == true)?",借出情况:已借出":",借出情况:未借出") + '}'; } @Override public boolean equals(Object o) { if (this == o) return true; if (o == null || getClass() != o.getClass()) return false; Book book = (Book) o; return price == book.price && isBorrowed == book.isBorrowed && Objects.equals(name, book.name) && Objects.equals(auther, book.auther) && Objects.equals(type, book.type); } @Override public int hashCode() { return Objects.hash(name, auther, price, type, isBorrowed); } }BookList类的代码:
package book; /** * Created with IntelliJ IDEA. * Description:书架 * User: lenovo * Date: 2024-06-04 * Time: 20:29 */ public class BookList { private Book[] booklist = new Book[10];//用来存放书 private int usedSize;//计数器,用来记录当前书架有多少书 public BookList() { booklist[0] = new Book("三国演义","罗贯中",71,"小说"); booklist[1] = new Book("西游记","吴承恩",82,"小说"); booklist[2] = new Book("红楼梦","曹雪芹",79,"小说"); this.usedSize = 3; } public void setBooks(int pos, Book book){ booklist[pos] = book; } public Book getBook(int pos){ return booklist[pos]; } public int getUsedSize() { return usedSize; } public void setUsedSize(int usedSize) { this.usedSize = usedSize; } }编写与用户相关的类:
AdminUser 类的代码:
package user; import operation.*; import java.util.Scanner; /** * Created with IntelliJ IDEA. * Description: * User: lenovo * Date: 2024-06-04 * Time: 22:19 */ public class AdminUser extends Users{ public AdminUser(String name) { super(name); this.books = new IBooks[]{ new ExitOperation(), new FindBooks(), new AddBooks(), new DelBooks(), new ShowBooks() }; } @Override public int menu() { System.out.println("====================================="); System.out.println("hallo! "+this.name+" 欢迎来到管理员菜单"); System.out.println("1.查找图书"); System.out.println("2.新增图书"); System.out.println("3.删除图书"); System.out.println("4.显示图书"); System.out.println("0.退出系统"); System.out.println("请选择你要操作的序号:>"); System.out.println("====================================="); Scanner scanner = new Scanner(System.in); int choice = scanner.nextInt(); return choice; } }Normaluser 类的编写:
package user; import operation.*; import java.util.Scanner; /** * Created with IntelliJ IDEA. * Description: * User: lenovo * Date: 2024-06-04 * Time: 22:19 */ public class NormalUser extends Users{ public NormalUser(String name) { super(name); this.books = new IBooks[]{ new ExitOperation(), new FindBooks(), new BorrowBooks(), new ReturnBooks() }; } @Override public int menu() { System.out.println("========================================"); System.out.println("hallo! "+this.name+" 欢迎来到普通用户菜单菜单"); System.out.println("1.查找图书"); System.out.println("2.借阅图书"); System.out.println("3.归还图书"); System.out.println("0.退出系统"); System.out.println("请选择你要操作的序号:>"); System.out.println("======================================="); Scanner scanner = new Scanner(System.in); int choice = scanner.nextInt(); return choice; } }Users 类的代码:
package user; import book.BookList; import operation.IBooks; /** * Created with IntelliJ IDEA. * Description: * User: lenovo * Date: 2024-06-04 * Time: 22:13 */ public abstract class Users { protected String name; public IBooks[] books; public Users(String name) { this.name = name; } public abstract int menu(); public void doOperation(int choice,BookList booklist){ books[choice].work(booklist); } }编写与操作相关的类:
AddBooks 类代码的编写:
package operation; import book.Book; import book.BookList; import java.util.Scanner; /** * Created with IntelliJ IDEA. * Description: * User: lenovo * Date: 2024-06-04 * Time: 21:54 */ public class AddBooks implements IBooks{ @Override public void work(BookList booklist){ Scanner scanner = new Scanner(System.in); System.out.println("请输入书名"); String name = scanner.nextLine(); System.out.println("请输入作者"); String auther = scanner.nextLine(); System.out.println("请输入价格"); int price = scanner.nextInt(); scanner.nextLine(); System.out.println("请输入书的类型"); String type = scanner.nextLine(); Book book = new Book(name,auther,price,type); int count = booklist.getUsedSize(); for (int i = 0; iBorrowBooks 类的代码编写:
package operation; import book.Book; import book.BookList; import java.util.Scanner; /** * Created with IntelliJ IDEA. * Description: * User: lenovo * Date: 2024-06-04 * Time: 22:09 */ public class BorrowBooks implements IBooks{ @Override public void work(BookList booklist) { int count = booklist.getUsedSize(); if(count == 0){ System.out.println("图书馆没有图书!"); return; } Scanner scanner = new Scanner(System.in); System.out.println("请输入你要借阅的书籍的名字:>"); String name = scanner.nextLine(); int tmp = -1; for (int i = 0; iDelBooks 类的代码编写:
package operation; import book.Book; import book.BookList; import java.util.Scanner; /** * Created with IntelliJ IDEA. * Description: * User: lenovo * Date: 2024-06-04 * Time: 22:02 */ public class DelBooks implements IBooks{ @Override public void work(BookList booklist){ int count = booklist.getUsedSize(); if(count == 0){ System.out.println("图书馆没有图书!"); return; } Scanner scanner = new Scanner(System.in); System.out.println("请输入你要删除的图书的名字:>"); String name = scanner.nextLine(); int tmp = -1; for (int i = 0; iExitOperation 类的代码编写:
package operation; import book.BookList; /** * Created with IntelliJ IDEA. * Description: * User: lenovo * Date: 2024-06-04 * Time: 22:06 */ public class ExitOperation implements IBooks{ @Override public void work(BookList booklist) { int count = booklist.getUsedSize(); for (int i = 0; iFindBooks 类的代码:
package operation; import book.Book; import book.BookList; import java.util.Scanner; /** * Created with IntelliJ IDEA. * Description: * User: lenovo * Date: 2024-06-04 * Time: 21:57 */ public class FindBooks implements IBooks{ @Override public void work(BookList booklist){ Scanner scanner = new Scanner(System.in); System.out.println("请输入你要查找的书名"); String name = scanner.nextLine(); int count = booklist.getUsedSize(); for (int i = 0; iIBooks 类的代码:
package operation; import book.BookList; /** * Created with IntelliJ IDEA. * Description: * User: lenovo * Date: 2024-06-04 * Time: 22:00 */ public interface IBooks { void work(BookList booklist); }ReturnBooks 类的代码:
import book.BookList; import java.util.Scanner; /** * Created with IntelliJ IDEA. * Description: * User: lenovo * Date: 2024-06-04 * Time: 22:10 */ public class ReturnBooks implements IBooks{ @Override public void work(BookList booklist) { int count = booklist.getUsedSize(); Scanner scanner = new Scanner(System.in); System.out.println("请输入要归还书籍的名字::"); String name = scanner.nextLine(); int tmp = -1; for (int i = 0; iShowBooks 类的代码:
package operation; import book.Book; import book.BookList; /** * Created with IntelliJ IDEA. * Description: * User: lenovo * Date: 2024-06-04 * Time: 22:03 */ public class ShowBooks implements IBooks{ @Override public void work(BookList booklist) { int count = booklist.getUsedSize(); if(count == 0){ System.out.println("图书馆没有图书!"); return; } for (int i = 0; iMain 类的代码:
import book.BookList; import user.AdminUser; import user.NormalUser; import user.Users; import java.util.Scanner; /** * Created with IntelliJ IDEA. * Description: * User: lenovo * Date: 2024-06-04 * Time: 20:08 */ public class Main { public static Users login(){ System.out.println("请输入你的姓名:>"); Scanner scanner = new Scanner(System.in); String name = scanner.nextLine(); System.out.println("清选择你的身份:> 1-》管理员 0-》普通用户"); int choice = scanner.nextInt(); if(choice == 1){ return new AdminUser(name); }else{ return new NormalUser(name); } } public static void main(String[] args) { BookList booklist = new BookList(); Users users = login(); while(true){ int choice = users.menu(); users.doOperation(choice,booklist); } } }最后代码在Main类中启动。
运行结果如下图:
- 设计时应考虑未来可能的功能扩展,如增加评论系统、推荐系统等,确保现有架构易于扩展。
-
免责声明:我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理! 图片声明:本站部分配图来自人工智能系统AI生成,觅知网授权图片,PxHere摄影无版权图库和百度,360,搜狗等多加搜索引擎自动关键词搜索配图,如有侵权的图片,请第一时间联系我们,邮箱:ciyunidc@ciyunshuju.com。本站只作为美观性配图使用,无任何非法侵犯第三方意图,一切解释权归图片著作权方,本站不承担任何责任。如有恶意碰瓷者,必当奉陪到底严惩不贷!






