Java(3)面向对象设计:图书管理系统

一、功能调查与系统功能框架图

1.功能调查:

图书管理系统分为普通用户与管理员两种登录方式,然后通过输入姓名、性别、年龄信息进入系统,普通用户可执行查询、借阅、归还图书以及退出系统四大功能,而管理员拥有更多特权能执行增加、查询、修改、删除、打印、整理图书以及退出功能。

2.系统功能框架图

二、类的设计 (UML图)

三、类说明

1.Test类:菜单栏、用户登录、输出操作

import java.util.Scanner;

public class Test {

    public void choose() {
        while (true) {
            System.out.println("------------图论科技图书管理系统------------\n");
            System.out.print("请登录:1:普通用户   2:管理员登录\n\n");
            Scanner in = new Scanner(System.in);

            int choose = in.nextInt();
            Scanner scan = new Scanner(System.in);
            User user = null;
            AdminPerson adminPerson = null;
            switch (choose) {
                case 1:
                    System.out.print("请输入:姓名 \n");
                    String userName = scan.next();
                    System.out.print("请输入:性别 \n");
                    String userSex = scan.next();
                    System.out.print("请输入:年龄 \n");
                    int userAge = scan.nextInt();
                    user = new User(userName, userSex, userAge);
                    System.out.println("当前用户:" + userName + " " + userSex + " " + userAge);
                    user.start();
                    break;
                case 2:
                    System.out.print("请输入:姓名 \n");
                    String adminName = scan.next();
                    System.out.print("请输入:性别 \n");
                    String adminSex = scan.next();
                    System.out.print("请输入:年龄 \n");
                    int adminAge = scan.nextInt();
                    System.out.println("当前管理员:" + adminName + " " + adminSex + " " + adminAge);
                    adminPerson = new AdminPerson(adminName, adminSex, adminAge);
                    adminPerson.start();
                    break;
            }
        }
    }
    public static void main(String[] args){
        Test test = new Test();
        test.choose();
    }

}

2.Person抽象类:为普通用户和管理员提供公有的查询图书操作并且包括getter/setter

类的属性:(static)

人名:name、性别:sex、age:年龄

类的方法:

getter/setter自动生成

selectBook(book):查找图书信息

import java.util.Scanner;

abstract class Person {
    protected static String name;
    protected static String sex;
    protected static int age;
    Scanner input = new Scanner(System.in);

    public static String getName() {
        return name;
    }

    public static String getSex() {
        return sex;
    }

    public static int getAge() {
        return age;
    }

    public static void setName(String name) {
        Person.name = name;
    }

    public static void setSex(String sex) {
        Person.sex = sex;
    }

    public static void setAge(int age) {
        Person.age = age;
    }

    /**
     * 查找图书信息
     * @param book
     */
    public void selectBook(String[][] book) {
        String m;
        System.out.println("请输入您要查找的图书名字:");
        m = input.next();
        if (Book.count == 0) {
            System.out.println("不好意思,无此书籍!");
        } else {
            boolean flag = true;
            while(flag){
            for (int i = 0; i < book.length; i++) {
                if (book[i][1].equals(m)) {
                    System.out.println("图书编号:" + book[i][0]);
                    System.out.println("图书名字:" + book[i][1]);
                    System.out.println("图书作者:" + book[i][2]);
                    System.out.println("图书数量:" + book[i][3]);
                    System.out.println("~~~~~~图书信息查找完毕~~~~~~");
                    flag = false;
                    break;
                }else{
                    System.out.println("不好意思,无此书籍!");
                    flag = false;
                    break;
                }
              }
            }
        }
    }
}

3.User类:普通用户可执行借阅、归还图书并且包括普通用户操作函数可显示菜单栏

类的属性:(private)

普通用户的userName:姓名、userSex:性别、userSex:年龄

类的方法:

borrowBook(book):借阅图书

returnBook(book1):归还图书

start():用户操作函数

import java.util.Scanner;

public class User extends Person {
    //用户姓名
    private static String userName;
    //用户性别
    private static String userSex;
    //用户年龄
    private static int userAge;
    //无参构造函数
    Book book = new Book();
    public User(){

    }
    //有参构造函数
    public User(String userName,String userSex,int userAge){

    }

    //借阅书籍
    public void borrowBook(String[][] book){
        System.out.println("请输入您要借阅的图书名字:");
        String m;
        int n = -1;
        m = input.next();
            for (int i = 0; i < book1.length; i++) {
                if (book1[i][1].equals(m)) {
                    n = i;
                    break;
                }
            }
            int p = Integer.parseInt(Book.book1[n][3]);
            if (p == 0) {
                System.out.println("不好意思,已经被借光了~");
            } else {
                Book.book1[n][3] = (p - 1) + "";
                System.out.println("借阅成功!");
            }
    }

    /**
     * 归还图书
     * @param book1
     */
    public void returnBook(String[][] book1){
        int BookId1,BookNum1;
        String BookName1,Author1;

        System.out.println("~~~~~~开始归还图书~~~~~~");
        System.out.println("请输入归还图书名字:");
        BookName1 = input.next();
        for (int i = 0; i < Book.count; i++) {
            if (book1[i][1].equals(BookName1)) {
                    int p = Integer.parseInt(book1[i][3]);
                    book1[i][3] = (p+1) + "";
                    break;
                }
            }
        System.out.println("~~~~~~归还成功~~~~~~");
    }

    /**
     * 用户操作函数
     */
    public void start(){
        Scanner input = new Scanner(System.in);

        boolean flag = true;
        int number;
        while(flag) {
            System.out.println("---------------------------------------------------");
            System.out.print("请选择:1:查询书籍  2:借阅书籍  3:归还书籍  4:退出\n\n");
            number = input.nextInt();
            switch (number) {
                case 1:
                    selectBook(Book.book1);
                    break;
                case 2:
                    borrowBook(Book.book1);
                    break;
                case 3:
                    returnBook(Book.book1);
                    break;
                case 4:
                    System.out.println("~~~~~~您已退出系统~~~~~~");
                    flag = false;
                    break;
                    default:
                    System.out.println("输入错误");
                    break;
            }
        }
    }
}

4.Operate 接口:DAO接口包括管理、打印、修改图书这些操作方法

public interface Operate {
    void arrangeBooks(String[][] book);//管理图书
    void printBooksList(String[][] book);//打印图书列表
    void alter_s(String[][] book1);//修改图书
}

5.AdminPerson 类:管理员可执行整理、打印、修改图书并且包括管理员操作函数可显示菜单栏

类的属性:(private)

管理员adminName:姓名、adminSex:性别、adminAge:年龄

类的方法:

arrangeBooks(book1):整理图书

printBooksList(book):打印图书列表

alter_s(book1):修改图书

import user.impl.Operate;
import java.util.Scanner;
public class AdminPerson extends Person implements Operate,Comparable<Book> {
    //用户姓名
    private static String adminName;
    //用户性别
    private static String adminSex;
    //用户年龄
    private static int adminAge;

    Scanner input = new Scanner(System.in);

    Book book = new Book();

    //无参构造函数
    public AdminPerson(){

    }
    //有参构造函数
    public AdminPerson(String adminName,String adminSex,int adminAge){

    }

    /**
     * 按图书编号整理书籍
     * @param book1
     */
    @Override
    public void arrangeBooks(String[][] book1) {
        String[] temp;
        for(int i = 0;i < Book.count-1;i++){
            for(int j=0;j < Book.count-1-i;j++) {
                if (book1[j][0].compareTo(book1[j + 1][0]) > 0) {
                    temp = book1[j];
                    book1[j] = book1[j + 1];
                    book1[j + 1] = temp;
                }
            }
        }
        System.out.println("整理完毕!");
    }

    /**
     * 打印图书列表
     * @param book
     */
    @Override
    public void printBooksList(String[][] book) {
        if(Book.count == 0){
            System.out.println("仓库书籍为空!");
        }else {
            System.out.println("所有图书信息如下:");
            for (int i = 0; i < Book.count; i++) {
                System.out.print("图书编号:" + book[i][0] + "\t\t");
                System.out.print("图书名字:" + book[i][1] + "\t\t");
                System.out.print("图书作者:" + book[i][2] + "\t\t");
                System.out.print("图书数量:" + book[i][3] + "\n");
            }
        }
    }

    /**
     * 修改图书
     * @param book1
     * @return
     */
    @Override
    public void alter_s(String[][] book1) {
        String m;
        int o;
        int n = -1;
        System.out.println("请输入您要修改的图书名字:");
        m = input.next();
        for(int  i = 0;i < Book.count;i++){
            if(book1[i][1].equals(m)){
                n = i;
                break;
            }
        }
        System.out.println("请选择您要修改的内容:1. 图书编号  2. 图书名字  3. 图书作者  4.图书数量");
        o = input.nextInt();
        System.out.println("请输入您要修改的内容:");
        book1[n][o-1] = input.next()+"";
        System.out.println("~~~~~~图书信息已修改~~~~~~");
    }

    /**
     * 管理员操作函数
     */
    public void start(){
        boolean flag = true;
        int number;
        while(flag){
            System.out.println("---------------------------------------------------------------------------");
            System.out.print("请选择:1:增加书籍  2:查询书籍  3:修改书籍  4:删除书籍  5:打印书籍列表 6:整理书籍  7: 退出\n\n");
            number = input.nextInt();
            switch (number) {
                case 1:
                    book.add(book);
                    break;
                case 2:
                    selectBook(Book.book1);
                    break;
                case 3:
                    alter_s(Book.book1);
                    break;
                case 4:
                    book.delete();
                    break;
                case 5:
                    printBooksList(Book.book1);
                    break;
                case 6:
                    arrangeBooks(Book.book1);
                    break;
                case 7:
                    System.out.println("~~~~~~您已退出系统~~~~~~");
                    flag = false;
                    break;
                default :
                    System.out.println("输入错误");
                    break;
            }
        }
    }

    @Override
    public int compareTo(Book o) {
        return book.getBookId()-o.getBookId();
    }
}

6.Book类:管理员可执行增加、删除图书操作

类的属性:(public)

BookId:书的ID、BookName:书名、Author:作者、BookNum:书的数量

类的方法:

getter/setter自动生成

add(book):增加图书

delete():删除图书

import java.util.Scanner;

public class Book {
    Scanner input = new Scanner(System.in);
    protected int BookId;//书的ID
    protected String BookName;//书的名字
    protected String Author;//书的作者
    protected int BookNum;//书的数量
    protected static int count;

    static String[][] book1 = new String[5][4];//存放图书信息的数组

    public Book(){


    }

    public Book(int BookId,String BookName,String Author,int BookNum){
        this.BookId = BookId;
        this.BookName = BookName;
        this.Author = Author;
        this.BookNum = BookNum;
    }

    public Scanner getInput() {
        return input;
    }

    public void setInput(Scanner input) {
        this.input = input;
    }

    public int getBookId() {
        return BookId;
    }

    public void setBookId(int bookId) { this.BookId = bookId; }

    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 int getBookNum() {
        return BookNum;
    }

    public void setBookNum(int bookNum) {
        this.BookNum = bookNum;
    }

    /**
     * 增加图书以及图书信息函数
     * @param book
     */
    public void add(Book book){
        int BookId1,BookNum1;
        String BookName1,Author1;
        System.out.println("~~~~~~开始添加图书信息~~~~~~");
        System.out.println("图书ID:");
        BookId1 = input.nextInt();
        book.setBookId(BookId1);
        System.out.println("图书名字:");
        BookName1 = input.next();
        book.setBookName(BookName1);
        System.out.println("图书作者:");
        Author1 = input.next();
        book.setAuthor(Author1);
        System.out.println("图书数量:");
        BookNum1 = input.nextInt();
        book.setBookNum(BookNum1);
        System.out.println("~~~~~~添加成功~~~~~~");

        book1[count][0] = book.BookId+"";
        book1[count][1] = book.BookName;
        book1[count][2] = book.Author;
        book1[count][3] = book.BookNum+"";
        System.out.println("图书编号:"+book1[count][0]);
        System.out.println("图书名字:"+book1[count][1]);
        System.out.println("图书作者:"+book1[count][2]);
        System.out.println("图书数量:"+book1[count][3]);

        count++;
    }

    /**
     * 用于删除图书信息
     */
    public void delete(){
        System.out.println("输入您要删除的图书名字:");
        String m;
        m = input.next();
        for(int i = 0; i < count;i++) {
            if(book1[i][1].equals(m)) {
                book1[i] = null;
                book1[i] = book1[i + 1];
                break;
            }
        }
        System.out.println("~~~~~~图书信息已被删除~~~~~~");
        count--;
    }
}

四、系统的包(package)的规划设计

1.package.user.action

包含:Test、Person、User、AdminPerson、Book类

2.package user.imp1

包含:Operate接口

posted @ 2020-12-09 19:47  Styoool(曾广芝)  阅读(560)  评论(0)    收藏  举报