Java实现图书管理系统-1

目录

前言

一、创作思路

二、搭建整体逻辑框架

2.1用户类的定义

2.2书籍类和书架的定义

2.3主函数的编写

2.4功能界面实现

2.5功能界面的调用

总结


扫描二维码关注公众号,回复: 16750380 查看本文章

前言

本文是在Java学习的过程中一次实战的过程,充分的体现了Java中类和对象的关系以及运用继承和多态来解决问题!这篇文章完全可以作为一个小课设,有需要的同学可以自取!文末放上源码!!


一、创作思路

对于一个刚刚开始的项目,肯定要有明确的思路才能够写出这个项目!接下来分析一下我的思路:

1.对于一个图书管理系统,分别会有管理员和用户(这里并未实现数据库,只是对JavaSE做一个小总结)这里就会产生用户类

2.确定使用的人,接下来就是图书的问题,首先需要有一个书籍类来描述一本图书,然后还需要有一个书架类来存放图书

3.上述两个问题都确定好了以后,就差图书管理的问题了,需要定义各种图书管理的类(增加类、删除类、借阅类、归还类等)

这里完全就是以我第一视角写的文章:所有的过程清清楚楚!!!

二、搭建整体逻辑框架

2.1用户类的定义

首先先定义一个用户类

public abstract class User {
    protected String username;
    public User(String username) {
        this.username = username;
    }
}

然后分别定义一个管理员类和普通用户类继承用户类(至于为什么要继承后面会说)

普通用户类:

public class NormalUser extends User{
    public NormalUser(String username) {
        super(username);
    }
}

管理员类: 

public class AdminUser extends User{
    public AdminUser(String username) {
        super(username);
    }
}

用户类定义好了之后我们开始定义书籍类

2.2书籍类和书架的定义

这里我只定义了书名、作者、价格、类型、是否借出。根据实际的需要可以添加其他的。然后再去生成对应的set和get方法以及toString方法

public class Book {
    private String bookName;
    private String author;
    private double price;
    private String type;
    private boolean isBorrow;
    
    //boolean初始值是false这里就不将其加入构造方法了
    public Book(String bookName, String author, double price, String type) {
        this.bookName = bookName;
        this.author = author;
        this.price = price;
        this.type = type;
    }

    public String getBookName() {
        return bookName;
    }

    public void setBookName(String bookName) {
        this.bookName = bookName;
    }

    public String getAuthor() {
        return author;
    }

    public void setAuthor(String author) {
        this.author = author;
    }

    public double getPrice() {
        return price;
    }

    public void setPrice(double price) {
        this.price = price;
    }

    public String getType() {
        return type;
    }

    public void setType(String type) {
        this.type = type;
    }

    public boolean isBorrow() {
        return isBorrow;
    }

    public void setBorrow(boolean borrow) {
        isBorrow = borrow;
    }

    @Override
    public String toString() {
        return "Book{" +
                "bookName='" + bookName + '\'' +
                ", author='" + author + '\'' +
                ", price=" + price +
                ", type='" + type + '\'' +","+
                ((isBorrow==true)?"已借出":"未借出") +
                '}';
    }
}

 书有了之后,接下来就是放书的书架

public class BookRack {
    private Book[] books = new Book[10];//书架最多存放的书,根据实际需求来
    private int bookCount;//目前书架的书的数量
    //初始化的时候书架就有三本书,根据自己的需求来
    public BookRack(){
        books[0] = new Book("三国演义","罗贯中",29.9,"小说");
        books[1] = new Book("西游记","吴承恩",39.9,"小说");
        books[2] = new Book("水浒传","施耐庵",19.9,"小说");
        this.bookCount = 3;//将书架的书变为三
    }
}

好的写到这里,基本就可以开始写主要的内容了

2.3主函数的编写

写完了大体的框架,接下来就是程序的入口了,首先需要一个登录的方法

public class Main {

    public static void login(){
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入姓名:");
        String name = sc.nextLine();
        System.out.println("请输入登录身份:1->管理员登录   0->用户登录");
        int choice = sc.nextInt();
        if(choice == 1){
            System.out.println(name + " 管理员,欢迎您登录图书管理系统!");
        }else{
            System.out.println(name + " 用户,欢迎您登录图书管理系统!");
        }
    }

    public static void main(String[] args) {
        login();
    }
}

好的写到这里我发现了一个问题,我压根就不知道到底是管理员还是用户登录!!!这里重点来了!!!那是不是我可以用一个对象接收一下?好,问题又来了,我这里会返回两个不同的对象,一个用户的一个管理员的那我到底返回谁呢?当然是返回父类对象了(这就是为什么要继承)!!!用一个向上提升就能完美解决这个问题,说干就干!马上对上面的代码进行修改

public class Main {

    public static User login(){
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入姓名:");
        String name = sc.nextLine();
        System.out.println("请输入登录身份:1->管理员登录   0->用户登录");
        int choice = sc.nextInt();
        if(choice == 1){
            System.out.println(name + " 管理员,欢迎您登录图书管理系统!");
            //选管理员我就返回管理员对象
            return new AdminUser(name);
        }else{
            System.out.println(name + " 用户,欢迎您登录图书管理系统!");
            //选用户我就返回用户对象
            return new NormalUser(name);
        }
    }

    public static void main(String[] args) {
        User user = login();
    }
}

 通过对代码的修改,现在知道是哪个对象进行登录了,那接下来就是功能界面的实现

2.4功能界面实现

对于不同的用户应该有不同的功能界面这里不多说,根据实际需求来

管理员功能界面:

public class AdminUser extends User{

    public AdminUser(String username) {
        super(username);
    }

    @Override
    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("***           0.退出系统            ***");
        System.out.println("**************************************");
        Scanner sc = new Scanner(System.in);
        //我后面选了什么是不是要做一个记录?这样才能知道我选了哪个操作
        int choice = sc.nextInt();
        return choice;
    }
}

 用户功能界面:

public class NormalUser extends User{
    public NormalUser(String username) {
        super(username);
    }

    @Override
    public int menu() {
        System.out.println("**************************************");
        System.out.println("***           请输入您的操作:        ***");
        System.out.println("***           1.查找图书             ***");
        System.out.println("***           2.借阅图书             ***");
        System.out.println("***           3.归还图书             ***");
        System.out.println("***           0.退出系统             ***");
        System.out.println("**************************************");
        Scanner sc = new Scanner(System.in);
        int choice = sc.nextInt();
        return choice;
    }
}

 然后就需要通过对象对功能界面的方法进行调用

2.5功能界面的调用

这里通过父类对象去调用子类方法,是不是就是多态的思想!!!

 public static void main(String[] args) {
        User user = login();
        //只要我还没有退出程序我就需要进行操作选择,所以这里需要写一个循环
        while (true) {
            int choice = user.menu();
        }
    }

好了写到这里出现问题了(当时我也一脸懵)?猛然发现!woc子类不重写父类方法根本就没法实现多态的条件,我父类竟然没有这个方法(这里不懂的,奖励看一下我主页的多态文章)!!!赶紧加上

public abstract class User {
    protected String username;
    IOperation[] iOperations;
    public User(String username) {
        this.username = username;
    }
    //因为这个方法不需要实现什么内容,直接给他抽象了
    public abstract int menu();
}

 好的写到这里可算是将整体的框架搭建完了!但是问题又来了!我选择了对应操作的数字,我怎么去调用对应的方法呢(大家可以积极思考一下)?那就涉及到了具体的操作内容了,一篇文章太长肯定是不想看的!欲知后事如何,请听下回分解!!!或者直接链接跳转http://t.csdn.cn/lf0Ij


总结

本文主要介绍了图书管理系统的前半部分(整体逻辑框架的搭建),以我第一视角来展示整个编程过程,你肯定可以看懂!看不懂你给我来两巴掌!!!

猜你喜欢

转载自blog.csdn.net/x2656271356/article/details/129865031