Java实现图书管理系统-1

目录

前言

一、创作思路

二、搭建整体逻辑框架

2.1用户类的定义

2.2书籍类和书架的定义

2.3主函数的编写

2.4功能界面实现

2.5功能界面的调用

总结



前言

本文是在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


总结

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

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
山东大学数据库课程的课设是开发一个图书管理系统,使用Java语言作为主要开发工具。图书管理系统是一个非常实用的应用软件,它可以帮助图书馆或图书管理单位进行图书的录入、借阅、归还、查询等管理工作。 从数据库角度来看,图书管理系统需要设计合理的数据库结构,包括书目信息、借阅信息、读者信息等,要保证数据的完整性和一致性。同时,需要考虑数据库的性能优化和安全保护,确保系统在高并发情况下能够稳定运行,并且对数据进行有效的备份和恢复。 在Java编程方面,需要使用面向对象的思想进行系统的设计和实现,包括图书类、读者类、借阅记录类等的设计。在开发过程中,需要充分利用Java的特性,如多线程、异常处理、网络编程等,实现系统的各项功能,并且保证系统的稳定性和安全性。 此外,还需要考虑系统的用户界面设计和交互体验,确保用户能够方便地进行图书的借阅和归还操作,以及查询图书信息。同时也要考虑系统的可扩展性和易维护性,使得系统能够满足未来的需求,并且方便进行后续的更新和维护工作。 综上所述,山东大学数据库课程的图书管理系统课设涉及到数据库设计、Java编程以及用户界面设计等多个方面,要求学生在课设中能够综合运用所学知识,设计并实现一个功能完善的图书管理系统

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值