小工具知识网

当前位置: 首页 > 行业知识 > java项目——图书管理系统

行业知识

java项目——图书管理系统

2026-11-11 04:48:09 来源:互联网转载

文章目录

  • 前言
  • 图书管理系统
    • 整体框架:
    • book包
    • user包
    • Main包:
    • iooperation包
    • 总结:

      前言

      针对这些天所学的javaSE的知识,用一个小项目来实践一下。


      图书管理系统

      整体框架:

      采取面向对象的思想实现此项目,首先分析出此项目中涉及的对象有哪些:

      有用户,书籍,业务操作!

      用户又分为普通用户与管理员。

      书籍相关的对象又分为书籍与书架。

      操作又分为七种不同的功能操作。

      book包

      有关书的类均创建在book包中,有书籍与书架两个类:

      书籍Book类:

      书籍类中有4种属性,均设置成private修饰,封装起来,用getter和setter方法进行获取与修改!

      package book;public class Book {     private   String name;  //书籍的名称     private  double price;  //书籍的价格     private   String author; //书籍的作者     private boolean state; //书籍当前的状态 -是否可借出    public Book(String name, double price, String author) {        this.name = name;        this.price = price;        this.author = author;        this.state = true;  //默认均为true,表示可借出    }    @Override    public String toString() {        return "Book{" +                "name='" + name + '\'' +                ", price=" + price +                ", author='" + author + '\'' +                ((state == true)?",状态:未借出":",状态:已借出")+                '}';    }    public String getName() {        return name;    }    public void setName(String name) {        this.name = name;    }    public double getPrice() {        return price;    }    public void setPrice(double price) {        this.price = price;    }    public String getAuthor() {        return author;    }    public void setAuthor(String author) {        this.author = author;    }    public boolean getState() {        return state;    }    public void setState(boolean state) {        this.state = state;    }}

      书架类BookList:

      在书架类中,有一个Book类型的数组,用于表示书架,书架的空间为5

      属性number表示当前书架上书的数目。

      用getter和setter来获取与设置number的信息。

      package book;public class BookList {    //书架的本质应该是一个数组   public   Book [] books = new Book[5];       private  int number = 3;  //初始化放入三本书 //通过构造方法,初始化放入三本书      public BookList() {                this.books[0] = new Book("红楼梦",10.5,"曹雪芹");         this.books[1] = new Book("西游记",15,"吴承恩");         this.books[2] = new Book("三国演义",15.2,"罗贯中");    }    public int getNumber() {        return number;    }    public void setNumber(int number) {        this.number = number;    }}

      user包

      user包中有user抽象类,有普通用户类NormalUser,有管理员类AdminUser.

      user抽象类:

      user抽象类中有属性,用户的名字

      有接口数组:即可以用于存放实现菜单中功能的业务实现类

      有一个menu抽象方法,对于管理员与普通用户进行不同的重写。

      选择操作的抽象方法,可以参考普通用户类与管理员类AdminUser理解!

      package user;import book.BookList;import iooperation.IOperation;public  abstract  class User {     protected   String name;   //用户的名字                                          !     IOperation [] iOperations;    //操作接口数组    //定义一个menu抽象方法    public  abstract int  menu();    //菜单的抽象方法    public User(String name) {        this.name = name;    }    public   abstract   void dooperation(int choice, BookList bookList);  //选择操作方法!}

      普通用户类NormalUser:

      在本类中,构造方法为iOperation数组进行了初始化,针对呈现给普通用户的菜单,赋值了对应的业务实现类对象。

      对于dooperation方法,在接收了用户输入的choice值后,便针对选定的书架,iOperations数组中相应的实现类对象!

      menu方法如代码中所示:

      package user;import book.BookList;import iooperation.*;import java.util.Scanner;public class NormalUser extends User {    public NormalUser(String name) {        super(name);       //创建一个接口数组:        this.iOperations = new IOperation[]{                new SearchOperation(),                   //搜寻功能的实现类——多写一行是为了菜单中选项与数组下标一致,                //便于调用相应的实现类对象。                new SearchOperation(),   //搜寻功能的实现类对象                new BorrowOperation(),   //借阅功能的实现类对象                new ReturnOperation(),   //归还功能的实现类对象                new ExitOperation()      //退出功能的实现类对象        };    }    public void dooperation(int choice, BookList bookList){        //根据choice,调用相应的业务类对象        this.iOperations[choice].work(bookList);    }    public int  menu(){        System.out.println("*****************************");        System.out.println("******普通用户菜单*******");        System.out.println("******1. 查找图书**********");        System.out.println("******2. 借阅图书***********");        System.out.println("******3. 归还图书**********");        System.out.println("******4. 退出系统**********");        System.out.println("*****************************");        System.out.println("请选择你要执行的操作!");        //用于接收从键盘上输入的数字,并返回!        return   new Scanner(System.in).nextInt();    }}

      管理员类AdminUser:

      本类中亦根据菜单中功能,为iOperations进行了相应的初始化。

      对于dooperation的实现与普通用户类相同,均用于接收相应的choice值,而调用

      iOperations中相应的实现类对象!

      package user;import book.BookList;import iooperation.*;import java.util.Scanner;public class AdminUser extends User {    public AdminUser(String name) {        super(name);        this.iOperations = new IOperation[]{                new SearchOperation(), //用于使数组的下标与菜单选项值一致                new SearchOperation(),  //搜寻功能实现类对象                new AddOpearation(),    //新增图书功能实现类对象                new DeleteOperation(),  //删除图书功能实现类对象                new ShowOperation(),    //展示图书功能实现类对象                new ExitOperation()     //退出系统功能实现类对象        };    }    @Override    public void dooperation(int choice, BookList bookList) {        this.iOperations[choice].work(bookList);    }    public int  menu() {        System.out.println("**欢迎" + super.name + "****");        System.out.println("******管理员菜单*******");        System.out.println("*****1. 查找图书**********");        System.out.println("*****2. 新增图书************");        System.out.println("*****3. 删除图书***********");        System.out.println("*****4. 显示图书***********");        System.out.println("*****5. 退出系统***********");        System.out.println("请选择你要执行的操作!");        return   new Scanner(System.in).nextInt();    }}

      Main包:

      Main包中用于放置测试类:

      下面中代码的内容体现了本项目大体框架的实现:

      首先:针对系统的登录,创建一个静态方法。

      其次:在main方法中,先实例一个书架对象,

      然后新建一个User 引用 接收从登录方法中传来的用户对象。

      然后用choice局部变量接收用户针对菜单 选择的功能选项。

      最后,调用dooperation方法,传入实参bookList1与choice,实现对应的功能!

      package Main;import book.BookList;import user.AdminUser;import user.NormalUser;import user.User;import java.util.Scanner;public class Test {    public static User Login() {        System.out.println("请输入你的名字:");        String name = new Scanner(System.in).next();        System.out.println("请输入你的身份:1. 管理员   2. 普通用户");        int choice = new Scanner(System.in).nextInt();        if (choice == 1) {            return new AdminUser(name);        } else {            return new NormalUser(name);        }    }    public static void main(String[] args) {        //先创建一个书架        BookList bookList1 = new BookList();        //接收登录后返回的对象值:        while (true) {            User user = Login();            int choice = user.menu();            //调用相应的业务类对象            user.dooperation(choice, bookList1);        }    }}

      iooperation包

      本包是业务功能实现包,具有一个操作接口与七个业务实现类。

      IOperation接口:

      本接口中只有一个抽象方法work,参数为书架对象,其余七个实现类均实现本接口。

      package iooperation;import book.BookList;public interface IOperation {    void work(BookList bookList);}

      AddOperation类:

      此类实现新增图书功能:

      package iooperation;import book.Book;import book.BookList;import java.util.Scanner;public class AddOpearation implements IOperation {    public void work(BookList bookList){        System.out.println("请输入您要添加的图书的信息");        System.out.println("请输入书籍的名字:");        String name  = new Scanner(System.in).next();        //先判断书架上是否已经有此书籍,如果有则拒绝添加!!!        for (int i = 0; i  

      BorrowOperation类:

      本类用于实现借阅功能:

      package iooperation;import book.BookList;import java.util.Scanner;public class BorrowOperation implements IOperation {    public void work(BookList bookList){       //借阅图书        System.out.println("请输入你要借阅的图书名称:");        String name = new Scanner(System.in).next();        for (int i = 0; i  

      DeleteOperation类:

      本类用于实现删除图书功能!

      package iooperation;import book.BookList;import java.util.Scanner;public class DeleteOperation implements IOperation {    //删除图书    //在顺序表中删除一条数据,在被删除的数据的位置之后的所有数据往后移动一位!!!    public void work(BookList bookList){        System.out.println("请输入你要删除的图书名字:");        String name = new Scanner(System.in).next();        //先查找这本书,看其是否存在在书架上!        for (int i = 0; i  

      ExitOperation类:

      本类用于实现退出系统功能!

      package iooperation;import book.BookList;public class ExitOperation implements IOperation {   public void work(BookList bookList){      //退出系统:status==0!!!      System.exit(0);   }}

      ReturnOperation 类:

      本类用于实现归还图书功能!

      package iooperation;import book.BookList;import java.util.Scanner;public class ReturnOperation implements IOperation {    public void work(BookList bookList) {        //归还图书        //首先搜索的书籍,判断要归还的书籍是否有存档!        System.out.println("请输入你要归还的图书名称:");        String name = new Scanner(System.in).next();        for (int i = 0; i  

      SearchOperation类:

      本类用于实现查找图书功能!

      package iooperation;import book.BookList;import java.util.Scanner;public class SearchOperation  implements IOperation  {    //进行查找    public void work(BookList bookList){        System.out.println("请输入您要查找的图书名称:");        String name = new Scanner(System.in).next();        for (int i = 0; i  

      ShowOperation类:

      本类用于展示书架上所有书籍的功能!

      package iooperation;import book.BookList;public class ShowOperation implements IOperation {    //显示书架上的所有图书:    public void work(BookList bookList){        // 将所有的书籍均遍历出来        for (int i = 0; i  

      总结:

      在最开始写此项目时,我是创建了两个类(普通用户类菜单相关一个,管理员相关一个)根据接受到的choice值,用switch语句来调用相应的实现类对象,

      但是这并不是面向对象的思想,是面向过程的思想,

      应该尽量的将属于一个对象的东西封装到一个类中去,比如专属于普通用户的菜单,专属于普通用户的业务实现类对象数组,用户对象可以调用自己的方法实现功能(如dooperation方法)等。

      在实现方法时,尽量的不要超出其应该的功能范围,比如在实现Login方法时,之前便添加了将登录后返回值加工的代码,这不利于代码的可读性与结构的梳理,应该遵循高内聚,低耦合的思想!

上一篇:TensorFlow 的基本概念和使用场景。

下一篇:怎么样样制作网站?