• 图书管理系统


    目录

    前言:

    需求分析

    核心分析

    包的设计

    代码实现 

    user包

    book包

    operation包

    小结:


    前言:

        面向对象编程,首先分析需求,抽象出来对象。对具体的对象在进行细分,比如对象之间的分类,用不同的包去维护不同类别的对象,具体类别的对象还可以进行共性的抽取,后期开发也好进行一些操作。

    需求分析

    🎈图书管理系统,有管理员和普通用户,书籍的信息,对书籍的查看,添加,修改等等一些操作。

    🎈首先把普通用户和管理员,和书抽象出来对象。前两者和书可以分为两个类别。普通用户和管理员都是对系统的使用者,可以进行共性的抽取。对于书来说,只是一个单纯的对象,而对于图书管理系统来说需要对大量书籍进行管理,因此可以用这个对象设置一个书架,也就是数组,我们只需要对这个数组进行操作。对于书籍的一些操作,可以认为是一些标准的行为,可以实现一个接口,让每一个操作去实现这些接口。

    核心分析

    🪖最后需要我们把,各种对象,各种操作整合起来。根据用户选择来实例化管理员对象或者普通用户对象,用它们的父类引用类型接收(向上提升)。根据用户选择进行相应操作,那么就需要调用各种操作类里面的方法,管理员或者普通用户实例化对象时,将各种操作的对象存储起来,我们只需要选择不同对象去调用不同操作方法即可。

    包的设计

    代码实现 

    user包

    AdminUser类

    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.iOperations = new IOperation[]{
    8. new ExitOperation(),
    9. new FindOperation(),
    10. new AddOperation(),
    11. new DelOperation(),
    12. new ShowOperation(),
    13. };
    14. }
    15. public int menu() {
    16. System.out.println("欢迎" + this.name + "来到图书小练习");
    17. System.out.println("1. 查找图书");
    18. System.out.println("2. 新增图书");
    19. System.out.println("3. 删除图书");
    20. System.out.println("4. 显示图书");
    21. System.out.println("0. 退出系统");
    22. System.out.println("请选择你的操作:");
    23. Scanner scan = new Scanner(System.in);
    24. int choose = scan.nextInt();
    25. return choose;
    26. }
    27. }

    NormalUser类

    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.iOperations = new IOperation[]{
    8. new ExitOperation(),
    9. new FindOperation(),
    10. new BorrowOperation(),
    11. new ReturnOperation()
    12. };
    13. }
    14. public int menu() {
    15. System.out.println("欢迎" + this.name + "来到图书小练习");
    16. System.out.println("1. 查找图书");
    17. System.out.println("2. 借阅图书");
    18. System.out.println("3. 归还图书");
    19. System.out.println("0. 退出系统");
    20. System.out.println("请选择你的操作:");
    21. Scanner scan = new Scanner(System.in);
    22. int choose = scan.nextInt();
    23. return choose;
    24. }
    25. }

    User抽象类

    1. package user;
    2. import book.BookList;
    3. import operation.IOperation;
    4. public abstract class User {
    5. protected String name;
    6. IOperation[] iOperations;
    7. public User(String name) {
    8. this.name = name;
    9. }
    10. public abstract int menu();
    11. public void doOpeation(int choose, BookList bookList) {
    12. iOperations[choose].work(bookList);
    13. }
    14. }

    Main类(主类)

    1. import book.BookList;
    2. import user.AdminUser;
    3. import user.NormalUser;
    4. import user.User;
    5. import java.util.Scanner;
    6. public class Main {
    7. private static User login() {
    8. System.out.println("请输入你的姓名:");
    9. Scanner scan = new Scanner(System.in);
    10. String name = scan.nextLine();
    11. System.out.println("请输入你的身份 1. 管理员 0. 普通用户");
    12. int choose = scan.nextInt();
    13. if(choose == 1){
    14. return new AdminUser(name);
    15. }else {
    16. return new NormalUser(name);
    17. }
    18. }
    19. public static void main(String[] args) {
    20. BookList bookList = new BookList();
    21. User user = login();
    22. while(true) {
    23. int choose = user.menu();
    24. user.doOpeation(choose,bookList);
    25. }
    26. }
    27. }

    book包

    Book类

    1. package book;
    2. public class Book {
    3. private String name;
    4. private String author;
    5. private int price;
    6. private String type;
    7. private boolean isBorrow;
    8. public Book(String name, String author, int price, String type) {
    9. this.name = name;
    10. this.author = author;
    11. this.price = price;
    12. this.type = type;
    13. }
    14. public String getName() {
    15. return name;
    16. }
    17. public void setName(String name) {
    18. this.name = name;
    19. }
    20. public String getAuthor() {
    21. return author;
    22. }
    23. public void setAuthor(String author) {
    24. this.author = author;
    25. }
    26. public int getPrice() {
    27. return price;
    28. }
    29. public void setPrice(int price) {
    30. this.price = price;
    31. }
    32. public String getType() {
    33. return type;
    34. }
    35. public void setType(String type) {
    36. this.type = type;
    37. }
    38. public Boolean getBorrow() {
    39. return isBorrow;
    40. }
    41. public void setBorrow(Boolean borrow) {
    42. isBorrow = borrow;
    43. }
    44. @Override
    45. public String toString() {
    46. return "Book{" +
    47. "name='" + name + '\'' +
    48. ", author='" + author + '\'' +
    49. ", price=" + price +
    50. ", type='" + type + '\'' +
    51. ", isBorrow=" + (isBorrow == true ? " 已借出" :" 未借出")+
    52. '}';
    53. }
    54. }

    BookList类

    1. package book;
    2. public class BookList {
    3. //引用数组
    4. private Book[] books = new Book[10];
    5. private int usedSize;
    6. public BookList() {
    7. books[0] = new Book("三国演义","罗贯中", 89,"小说");
    8. books[1] = new Book("红楼梦","曹雪芹",78,"小说");
    9. books[2] = new Book("西游记","吴承恩",99,"小说");
    10. this.usedSize = 3;
    11. }
    12. public int getUsedSize() {
    13. return usedSize;
    14. }
    15. public void setUsedSize(int usedSize) {
    16. this.usedSize = usedSize;
    17. }
    18. public Book getPos(int i){
    19. return books[i];
    20. }
    21. public void setBook(Book book, int pos) {
    22. books[pos] = book;
    23. }
    24. }

    operation包

    AddOperation类

    1. package operation;
    2. import book.Book;
    3. import book.BookList;
    4. import java.util.Scanner;
    5. public class AddOperation implements IOperation{
    6. public void work(BookList bookList) {
    7. System.out.println("请输入你要增加的书名:");
    8. Scanner scan = new Scanner(System.in);
    9. String bookName = scan.nextLine();
    10. System.out.println("请输入作者:");
    11. String author = scan.nextLine();
    12. System.out.println("请输入类型");
    13. String type = scan.nextLine();
    14. //防止nextInt读取回车
    15. System.out.println("请输入价格:");
    16. int price = scan.nextInt();
    17. Book book = new Book(bookName,author,price,type);
    18. bookList.setBook(book,bookList.getUsedSize());
    19. bookList.setUsedSize(bookList.getUsedSize() + 1);
    20. }
    21. }

    BorrowOperation类

    1. package operation;
    2. import book.BookList;
    3. import java.util.Scanner;
    4. public class BorrowOperation implements IOperation{
    5. public void work(BookList bookList) {
    6. System.out.println("借阅图书");
    7. System.out.println("请输入你要借阅的图书");
    8. Scanner scan = new Scanner(System.in);
    9. String name = scan.nextLine();
    10. for (int i = 0; i < bookList.getUsedSize(); i++) {
    11. if(name.equals(bookList.getPos(i).getName())) {
    12. if(bookList.getPos(i).getBorrow()) {
    13. System.out.println("抱歉你要借阅的图书以借出");
    14. return;
    15. } else {
    16. bookList.getPos(i).setBorrow(true);
    17. System.out.println("借阅成功");
    18. return;
    19. }
    20. }
    21. }
    22. System.out.println("抱歉,没有你要借阅的图书");
    23. }
    24. }

    DelOperation类

    1. package operation;
    2. import book.BookList;
    3. import java.util.Scanner;
    4. public class DelOperation implements IOperation{
    5. public void work(BookList bookList) {
    6. System.out.println("删除图书");
    7. System.out.println("请输入你要删除图书的名字:");
    8. Scanner scan = new Scanner(System.in);
    9. String name = scan.nextLine();
    10. for(int i = 0; i < bookList.getUsedSize(); i++) {
    11. if(name.equals(bookList.getPos(i).getName())){
    12. for(int j = i; j < bookList.getUsedSize() - 1; j++) {
    13. bookList.setBook(bookList.getPos(j + 1), j);
    14. }
    15. //防止内存泄漏,删除后数组最后一位数据还引用着对象
    16. bookList.setBook(null,bookList.getUsedSize() - 1);
    17. bookList.setUsedSize(bookList.getUsedSize() - 1);
    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 IOperation{
    4. public void work(BookList bookList) {
    5. System.out.println("退出系统");
    6. System.exit(0);
    7. }
    8. }

    FindOperation类

    1. package operation;
    2. import book.BookList;
    3. import java.util.Scanner;
    4. public class FindOperation implements IOperation{
    5. public void work(BookList bookList) {
    6. System.out.println("查找图书");
    7. System.out.println("请输入你要查找的书名");
    8. Scanner scan = new Scanner(System.in);
    9. String bookName = scan.nextLine();
    10. for(int i = 0; i < bookList.getUsedSize(); i++){
    11. if(bookName.equals(bookList.getPos(i).getName())){
    12. System.out.println("你要查找图书的信息");
    13. System.out.println(bookList.getPos(i));
    14. return;
    15. }
    16. }
    17. System.out.println("抱歉,没有你要查找的图书");
    18. }
    19. }

    ReturnOperation类

    1. package operation;
    2. import book.BookList;
    3. import java.util.Scanner;
    4. public class ReturnOperation implements IOperation{
    5. public void work(BookList bookList) {
    6. System.out.println("归还图书");
    7. System.out.println("请输入你要归还的书名:");
    8. Scanner scan = new Scanner(System.in);
    9. String name = scan.nextLine();
    10. for(int i = 0; i < bookList.getUsedSize(); i++) {
    11. if(name.equals(bookList.getPos(i).getName())) {
    12. if(bookList.getPos(i).getBorrow()) {
    13. bookList.getPos(i).setBorrow(false);
    14. System.out.println("归还成功");
    15. return;
    16. }else {
    17. System.out.println("你的书已经归还,无需再次归还");
    18. return;
    19. }
    20. }
    21. }
    22. System.out.println("没有你要归还的图书");
    23. }
    24. }

    ShowOperation类

    1. package operation;
    2. import book.BookList;
    3. public class ShowOperation implements IOperation{
    4. public void work(BookList bookList) {
    5. for(int i = 0; i < bookList.getUsedSize(); i++){
    6. System.out.println(bookList.getPos(i));
    7. }
    8. }
    9. }

    IOperation接口

    1. package operation;
    2. import book.BookList;
    3. public interface IOperation {
    4. void work(BookList bookList);
    5. }

    小结:

    🐵面向对象编程,需求分析,框架搭建,然后才是核心代码的编写,需要大量去思考,锻炼自己的这种思维。

  • 相关阅读:
    Linux常用命令
    【OpenVI】AIGC纪元,兔年AI绘画实践
    开源浏览器引擎对比与适用场景:WebKit、Chrome、Gecko
    Vue 官方文档2.x教程学习笔记 1 基础 1.5 计算属性和侦听器 1.5.2 侦听器
    快速熟悉Docker的一些基本操作流程
    阿里云10M公网收费价格表(一年和1个月报价)
    测试/开发程序员真的是青春饭吗?世界是公平的,咱们都凭实力说话......
    新零件编辑器发布(官方文档)
    C语言二维数组编程练习集
    数据结构第二课 -----线性表之顺序表
  • 原文地址:https://blog.csdn.net/weixin_62353436/article/details/126491174