• 【JAVA】 图书管理系统(javaSE简易版 内含画图分析) | 期末大作业&课程设计


    作者主页:paper jie 的博客

    本文作者:大家好,我是paper jie,感谢你阅读本文,欢迎一建三连哦。

    本文录入于《JAVA》专栏,本专栏是针对于大学生,编程小白精心打造的。笔者用重金(时间和精力)打造,将javaSE基础知识一网打尽,希望可以帮到读者们哦。

    其他专栏:《算法详解》《C语言》《javaSE》等

    内容分享:本期将会使用javase来制作一个简易版本的图书管理系统

    目录

    设计需求

     设计思路

    设计的具体过程及源码展示

    book包 

    Book类

    Booklist类

    user包

    User类

    AdminUser类

    NormalUser类

    operation包

    IOoperation接口

    Addoperation类

    Deloperation类

    Borrowoperation类

    Exitoperation类

    Findoperation类

    Returnoperation类

    Showoperation类

     Main类

    效果展示 

    图书管理系统的画图分析


    设计需求

    我们需要通过使用javase来实现一个简易版本的图书管理系统,它需要具备以下几个功能:

    1 首先需要有两个模式,一个是管理员模式,一个是普通用户模式

    2 需要具有 新增图书,删除图书,查找图书,显示图书,借阅图书,归还图书,退出系统这些功能

    3.需要将上面的功能分成两部分,新增,删除,显示,查找,退出为管理员的权限,而查找,借阅,归还,退出为普通用户的权限

     设计思路

    1 我们首先需要将我们的用户分为两个部分,一个为管理员,一个为普通用户,在使用的时候根据不同的需求展现不同的界面和功能,这里我们可以通过继承,多态,向上转型给他们一个父类来实现

    2 我们需要实现多个类来实现删除图书,查找图书,显示图书,借阅图书,归还图书,退出系统这些功能

    3 我们通过创建一个接口,让功能类来实现这个接口,再用一个类型为创建的接口类型的数组来存放功能类的new出的对象,这样子就可以进行统一管理了

    4 我们还需要创建书和书架类,将书的属性封装,书架类存放的就是书,会用一个书架类型的数组来存放

    设计的具体过程及源码展示

    为了让程序去复杂化,易修改这里将用三个包和一个主类来搭建这个框架会有book包,里面存放书类和书架类。operation包存放各个功能类和接口。user包中放着父类User类和普通用户类,管理员类,最后还有一个主类Main

    book包 

    Book类

    book类起到的作用就是将book类封装起来,后面容易放入书架中。 这里的构造方法,getandset方法以及toString方法可以通过编译器生成,速度很快的。在toString方法中我们需要改动一下编译器生成的,我们可以用三目操作符来确定是true还是false来打印是已借出还是未接出

    1. package book;
    2. public class Book {
    3. private String name;
    4. private String author;
    5. private int price;
    6. private String type;
    7. //默认flose 未被借出
    8. private boolean isBorrowed;
    9. //get 和 set方法设置和返回成员变量
    10. public Book(String name, String author, int price, String type) {
    11. this.name = name;
    12. this.author = author;
    13. this.price = price;
    14. this.type = type;
    15. }
    16. public String getName() {
    17. return name;
    18. }
    19. public void setName(String name) {
    20. this.name = name;
    21. }
    22. public String getAuthor() {
    23. return author;
    24. }
    25. public void setAuthor(String author) {
    26. this.author = author;
    27. }
    28. public int getPrice() {
    29. return price;
    30. }
    31. public void setPrice(int price) {
    32. this.price = price;
    33. }
    34. public String getType() {
    35. return type;
    36. }
    37. public void setType(String type) {
    38. this.type = type;
    39. }
    40. public boolean isBorrowed() {
    41. return isBorrowed;
    42. }
    43. public void setBorrowed(boolean borrowed) {
    44. isBorrowed = borrowed;
    45. }
    46. //打印
    47. @Override
    48. public String toString() {
    49. return "Book{" +
    50. "name='" + name + '\'' +
    51. ", author='" + author + '\'' +
    52. ", price=" + price +
    53. ", type='" + type + '\'' +
    54. ", " + ((isBorrowed == true) ? "已经借出" : "未接出") +
    55. '}';
    56. }
    57. }

    Booklist类

    这里也可以使用编译器生成需要的代码,这里要注意的是books数组,它是用来存放book书本的。在构造方法中要对它进行初始化,可以存放几本,已进放进去的书的内容。

    1. package book;
    2. public class Booklist {
    3. //书架
    4. private Book[] books;
    5. //记录使用书的位置
    6. private int usedsize;
    7. private static final int DEFAULT_CAPACITY = 10;
    8. public Booklist() {
    9. //对书架初始化
    10. this.books = new Book[DEFAULT_CAPACITY];
    11. //放书
    12. this.books[0] = new Book("三国演义", "罗贯中", 10, "小说");
    13. this.books[1] = new Book("西游记", "吴承恩", 20, "小说");
    14. this.books[2] = new Book("红楼梦", "曹雪芹", 30, "小说");
    15. this.usedsize = 3;
    16. }
    17. public int getUsedsize() {
    18. return usedsize;
    19. }
    20. public void setUsedsize(int usedsize) {
    21. this.usedsize = usedsize;
    22. }
    23. public Book getBook(int pos) {
    24. return books[pos];
    25. }
    26. public void setBook(int pos, Book book) {
    27. books[pos] = book;
    28. }
    29. public Book[] getBooks() {
    30. return books;
    31. }
    32. }

    user包

    这个包里放的是一个父类和两个子类,企图通过继承和多态来实现管理员和普通用户的切换

    User类

    这里要注意的是IOoperation这个数组,它会在User类的子类中进行初始化,来存放需要功能类的对象。而dooperation方法则是通过IOoperations数组里的成员的work方法来实现需要的操作

    1. package user;
    2. import book.Booklist;
    3. import operation.IOoperation;
    4. public abstract class User {
    5. protected String name;
    6. protected IOoperation[] iOoperations;
    7. public User(String name) {
    8. this.name = name;
    9. }
    10. public abstract int menu();
    11. public void dooperation(int choise, Booklist booklist) {
    12. iOoperations[choise].work(booklist);
    13. }
    14. }

    AdminUser类

    它和NormalUser都是User的子类,这里面的构造方法就对父类的成员进行了IOoperation初始化,且实现的菜单界面,menu方法的返回值就是你选择需要使用的功能

    1. package user;
    2. import operation.*;
    3. import java.util.Scanner;
    4. public class AdminUser extends User{
    5. public AdminUser(String name) {
    6. super(name);
    7. this.iOoperations = new IOoperation[]{new Exitoperation(),new Addopertaion(),
    8. new Deloperation(), new Showoperation(),new Findoperation()};
    9. }
    10. public int menu() {
    11. System.out.println("*********************** 管理员用户 ***************************");
    12. System.out.println("1. 新增图书");
    13. System.out.println("2. 删除图书");
    14. System.out.println("3. 显示图书");
    15. System.out.println("4. 查找图书");
    16. System.out.println("0. 退出系统");
    17. System.out.println("************************************************************");
    18. System.out.println("请输入你的操作:");
    19. Scanner scanner = new Scanner(System.in);
    20. int choice = scanner.nextInt();
    21. return choice;
    22. }
    23. }

    NormalUser类

    实现思路和AdminUser一样

    1. package user;
    2. import operation.*;
    3. import java.util.Scanner;
    4. public class NormalUser extends User {
    5. public NormalUser(String name) {
    6. super(name);
    7. this.iOoperations = new IOoperation[]{new Exitoperation(),new Findoperation(),
    8. new Borrowoperation(), new Returnoperation()};
    9. }
    10. public int menu() {
    11. System.out.println("*************************** 普通用户 ****************************");
    12. System.out.println("1. 查找图书");
    13. System.out.println("2. 借阅图书");
    14. System.out.println("3. 归还图书");
    15. System.out.println("0. 退出系统");
    16. System.out.println("**************************************************************");
    17. System.out.println("请输入你的操作:");
    18. Scanner scanner = new Scanner(System.in);
    19. int choice = scanner.nextInt();
    20. return choice;
    21. }
    22. }

    operation包

    这个包里需要实现需要的功能类和一个将他们都串起来的接口

    IOoperation接口

    所有的功能类都要实现这个接口,从而重写work方法,来统一使用work这个名字

    1. package operation;
    2. import book.Booklist;
    3. public interface IOoperation {
    4. public void work(Booklist booklist);
    5. }

    Addoperation类

    新增图书功能:

    1. package operation;
    2. import book.Book;
    3. import book.Booklist;
    4. import java.util.Scanner;
    5. /**
    6. * Created with IntelliJ IDEA.
    7. * Description:
    8. * User: sun杰
    9. * Date: 2023-08-25
    10. * Time: 10:43
    11. */
    12. public class Addopertaion implements IOoperation{
    13. @Override
    14. public void work(Booklist booklist) {
    15. System.out.println("新增图书:");
    16. Scanner scanner = new Scanner(System.in);
    17. System.out.println("请输入名字:");
    18. String name = scanner.nextLine();
    19. System.out.println("请输入作者:");
    20. String author = scanner.nextLine();
    21. System.out.println("请输入类型:");
    22. String type = scanner.nextLine();
    23. System.out.println("请输入价格:");
    24. int price = scanner.nextInt();
    25. Book book = new Book(name, author, price, type);
    26. int pos = booklist.getUsedsize();
    27. for (int i = 0; i < pos; i++) {
    28. Book book1 = booklist.getBook(i);
    29. if(book1.getName().equals(name)) {
    30. System.out.println("已有这本书,不再存放");
    31. return;
    32. }
    33. }
    34. if(pos == booklist.getBooks().length) {
    35. System.out.println("书架满了");
    36. }else {
    37. booklist.setBook(pos, book);
    38. booklist.setUsedsize(pos + 1);
    39. }
    40. }
    41. }

    Deloperation类

    删除图书功能:

    1. import book.Booklist;
    2. import java.util.Scanner;
    3. public class Deloperation implements IOoperation{
    4. @Override
    5. public void work(Booklist booklist) {
    6. System.out.println("删除图书:");
    7. Scanner scanner = new Scanner(System.in);
    8. String name = scanner.nextLine();
    9. int size = booklist.getUsedsize();
    10. for (int i = 0; i < size; i++) {
    11. Book book = booklist.getBook(i);
    12. if(book.getName().equals(name)) {
    13. int pos = i;
    14. int j = 0;
    15. for ( j = pos; j < size - 1; j++) {
    16. Book book1 = booklist.getBook(j+1);
    17. booklist.setBook(j, book1);
    18. }
    19. booklist.setBook(j, null);
    20. booklist.setUsedsize(size - 1);
    21. System.out.println("删除成功");
    22. return;
    23. }
    24. }
    25. System.out.println("不存在这本书");
    26. }
    27. }

    Borrowoperation类

    借阅图书功能:

    1. package operation;
    2. import book.Book;
    3. import book.Booklist;
    4. import java.util.Scanner;
    5. public class Borrowoperation implements IOoperation {
    6. @Override
    7. public void work(Booklist booklist) {
    8. System.out.println("借阅图书:");
    9. Scanner scanner = new Scanner(System.in);
    10. System.out.println("请输入你要借阅的图书:");
    11. String name = scanner.nextLine();
    12. int size = booklist.getUsedsize();
    13. for (int i = 0; i < size; i++) {
    14. Book book = booklist.getBook(i);
    15. if(book.getName().equals(name)) {
    16. book.setBorrowed(true);
    17. System.out.println(book);
    18. System.out.println("借阅成功");
    19. return;
    20. }
    21. }
    22. System.out.println("该书不存在");
    23. }
    24. }

    Exitoperation类

    退出系统功能:

    1. package operation;
    2. import book.Booklist;
    3. public class Exitoperation implements IOoperation{
    4. @Override
    5. public void work(Booklist booklist) {
    6. System.out.println("退出系统");
    7. System.exit(0);
    8. }
    9. }

    Findoperation类

    查找图书功能:

    1. package operation;
    2. import book.Book;
    3. import book.Booklist;
    4. import com.sun.xml.internal.ws.policy.privateutil.PolicyUtils;
    5. import javax.imageio.metadata.IIOMetadataController;
    6. import java.util.Scanner;
    7. public class Findoperation implements IOoperation{
    8. @Override
    9. public void work(Booklist booklist) {
    10. System.out.println("查找图书:");
    11. Scanner scanner = new Scanner(System.in);
    12. String name = scanner.nextLine();
    13. int size = booklist.getUsedsize();
    14. for (int i = 0; i < size; i++) {
    15. Book book = booklist.getBook(i);
    16. if(book.getName().equals(name)) {
    17. System.out.println("找到了,信息如下:");
    18. System.out.println(book);
    19. return;
    20. }
    21. }
    22. System.out.println("上述不存在");
    23. }
    24. }

    Returnoperation类

    归还图书功能:

    1. package operation;
    2. import book.Book;
    3. import book.Booklist;
    4. import java.util.Scanner;
    5. public class Returnoperation implements IOoperation{
    6. @Override
    7. public void work(Booklist booklist) {
    8. System.out.println("归还图书:");
    9. Scanner scanner = new Scanner(System.in);
    10. System.out.println("请输入你要归还的图书:");
    11. String name = scanner.nextLine();
    12. int size = booklist.getUsedsize();
    13. for (int i = 0; i < size; i++) {
    14. Book book = booklist.getBook(i);
    15. if(book.getName().equals(name)) {
    16. book.setBorrowed(false);
    17. System.out.println(book);
    18. System.out.println("归还成功");
    19. return;
    20. }
    21. }
    22. System.out.println("该书不存在");
    23. }
    24. }

    Showoperation类

    显示图书功能:

    1. package operation;
    2. import book.Book;
    3. import book.Booklist;
    4. public class Showoperation implements IOoperation {
    5. @Override
    6. public void work(Booklist booklist) {
    7. System.out.println("显示图书:");
    8. int size = booklist.getUsedsize();
    9. for (int i = 0; i < size; i++) {
    10. Book book = booklist.getBook(i);
    11. System.out.println(book);
    12. }
    13. }
    14. }

     Main类

    通过Main类来组织程序执行:

    1. import book.Book;
    2. import book.Booklist;
    3. import user.AdminUser;
    4. import user.NormalUser;
    5. import user.User;
    6. import java.util.Scanner;
    7. public class Main {
    8. public static User login() {
    9. System.out.println("请输入你的姓名:");
    10. Scanner scanner = new Scanner(System.in);
    11. String name = scanner.nextLine();
    12. System.out.println("请输入你的身份:1.管理员 2.普通用户");
    13. int choice = scanner.nextInt();
    14. if(choice == 1) {
    15. //管理员
    16. return new AdminUser(name);
    17. }else {
    18. //普通用户
    19. return new NormalUser(name);
    20. }
    21. }
    22. public static void main(String[] args) {
    23. Booklist booklist = new Booklist();
    24. //这里发生了向上转型
    25. User user = login();
    26. while(true) {
    27. int choice = user.menu();
    28. //choice来决定调用哪个方法类
    29. user.dooperation(choice, booklist);
    30. }
    31. }
    32. }

    效果展示 

    图书管理系统的画图分析


  • 相关阅读:
    嵌入式裸机架构的探索与崩塌
    webpack分环境打包(生产/开发两套打包)
    vue3 - vue3中的watch监听讲解
    yolo-pose环境搭建及训练和测试
    京东产品上架如何批量上传商品素材?
    springboot集成canal实现同步双写
    phpstudy开机自启
    ts3.接口和对象类型
    高校教学教务管理系统文档
    Android Selinux详解[一]---整体介绍
  • 原文地址:https://blog.csdn.net/paperjie/article/details/132565428