Maison  >  Article  >  Java  >  Comment écrire du code de fonction de base pour la gestion de livres Java

Comment écrire du code de fonction de base pour la gestion de livres Java

PHPz
PHPzavant
2023-05-23 15:49:061024parcourir

Tout d'abord, jetons un coup d'œil à l'effet de course

Comment écrire du code de fonction de base pour la gestion de livres Java

Comment écrire du code de fonction de base pour la gestion de livres Java

Analysons-le :

Les choses sont résolues en Java grâce à l'interaction entre les objets, alors jetons un coup d'œil à quels objets il existe

Tout d'abord, c'est évident Deux objets : user et book, donc créez deux packages book et user

Comme vous pouvez le voir sur l'image ci-dessus : il y a les mêmes opérations entre différents utilisateurs, et il y a aussi des opérations différentes, donc vous pourriez ainsi que de mettre toutes les opérations en un seul Dans le package, vous pouvez l'appeler directement si vous avez besoin d'une opération. J'ai nommé ce package opera

1.book package

Tout d'abord, il doit y avoir une classe Book dans le package, qui enregistre diverses informations, notamment le titre du livre, l'auteur, le type de livre, le prix et l'état de l'emprunt, j'utilise des modifications privées pour les variables membres dans toutes les classes de tous les packages, en fournissant uniquement des méthodes externes, qui ne seront pas répétées plus tard. (seule une partie du code est affichée) :

package book;
public class Book {
    private String name;
    private String author;
    private String type;
    private int price;
    private boolean borrow;
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getAuthor() {
        return author;
    }
    public void setAuthor(String author) {
        this.author = author;
    }
}

Comme il y a des livres, une étagère est nécessaire pour stocker les livres, donc une autre classe est définie comme BookShelf dans le package de livres pour stocker les livres et enregistrer le nombre de livres stockés. peut être implémenté à l'aide du tableau de classe Book

public class BookShelf {
    private Book[] books=new Book[1000];
    private int count; //记录书的数量
}

Étant donné que le tableau n'est pas accessible directement, ajoutez donc une méthode pour obtenir l'indice du tableau dans la classe, et la méthode d'accès au tableau fonctionne généralement sur le livre, donc la méthode setBook est également modifié

package book;
public class BookShelf {
    private Book[] books=new Book[1000];
    private int count; //记录书的数量
    public void setBooks(int pos,Book book) {
        books[pos] = book;
    }
    public int getCount() {
        return count;
    }
    public void setCount(int count) {
        this.count = count;
    }
    public BookShelf() {
        books[0]=new Book("呐喊","鲁迅","小说集",30); //默认初始有一本书,写不写随你
        this.count=1;
    }
    //获取下标对应的书
    public Book pos(int i) {
        return books[i];
    }
}

Le code préliminaire du package du livre est ici, passez au package suivant

2. Le package utilisateur

aura certainement deux classes : utilisateur normal (NormalUser) et administrateur (AdminUser), mais l'accent est mis sur la façon d'implémenter différentes opérations pour différents utilisateurs dans l'image

Ensuite, écrivons d'abord la méthode de connexion, puis analysons : La méthode

 public static void login() {
        System.out.println("输入姓名:");
        Scanner scanner=new Scanner(System.in);
        String name=scanner.nextLine();
        System.out.println("输入你身份:1.管理员  2.普通用户");
        int i=scanner.nextInt();
        if(i==1) {
            //管理员
        } else {
            //普通用户
        }
    }

détermine à quel type d'utilisateur elle est basée sur différents nombres, donc la valeur de retour doit être pour renvoyer une classe, mais il y a deux classes ici. Pour résoudre ce problème, nous pouvons laisser NormalUser et AdminUser hériter de la même classe Parent, la méthode n'a besoin que de renvoyer la classe parent

Le code de la classe parent est le suivant :

public abstract class User { 
    private String name;
     public User(String name) {
        this.name = name;
    }
    public abstract void menu(); //菜单抽象方法,子类实现
}

Le code de la sous-classe :

public class AdminUser extends User{
    public AdminUser(String name) {
        super(name);
    }
     @Override
    public void menu() {
        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("选择操作");
    }
}
public class NormalUser extends User{
    public NormalUser(String name) {
        super(name);
    }
    @Override
    public void menu() {
        System.out.println("欢迎使用");
        System.out.println("1.查找图书");
        System.out.println("2.借阅图书");
        System.out.println("3.归还图书");
        System.out.println("0.退出系统");
        System.out.println("选择操作");
    }
}

Différents utilisateurs correspondent à des opérations différentes, mais ont les mêmes opérandes, donc les deux classes doivent avoir un tableau pour stocker leurs méthodes respectives afin d'éviter les erreurs, et ce tableau doit être préparé avant que l'utilisateur ne sélectionne il, donc le tableau doit être dans la méthode de construction. La classe modifiée est la suivante :

public abstract class User {
    private String name;
    public IOperate[] ioperate;
    public void chooseOperate(int choice,BookShelf bookShelf) {
        ioperate[choice].work(bookShelf);
    }
    public User(String name) {
        this.name = name;
    }
    public abstract int menu();
}
public class AdminUser extends User{
    public AdminUser(String name) {
        super(name);
        this.ioperate=new IOperate[] {
                new Exit(),
                new FindBook(),
                new AddBook(),
                new DelBook(),
                new DisplayBook(),
        };
    }
    @Override
    public int menu() {
        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 scanner=new Scanner(System.in);
        int choice=scanner.nextInt();
        return choice;
    }
}
public class NormalUser extends User{
    public NormalUser(String name) {
        super(name);
        this.ioperate=new IOperate[] {
                new Exit(),
                new FindBook(),
                new BorrowBook(),
                new ReturnBook(),
        };
    }
    @Override
    public int menu() {
        System.out.println("欢迎使用");
        System.out.println("1.查找图书");
        System.out.println("2.借阅图书");
        System.out.println("3.归还图书");
        System.out.println("0.退出系统");
        System.out.println("选择操作");
        Scanner scanner=new Scanner(System.in);
        int choice=scanner.nextInt();
        return choice;
    }
}

3.operate package

Ajout, suppression et modification de livres La recherche et d'autres opérations opèrent en fait sur le tableau Book, donc les paramètres de ces méthodes sont toutes des classes BookShelf, alors on peut définir une interface, définir cette méthode dans l'interface, et ensuite d'autres classes peuvent implémenter cette interface

Code d'interface :

package operate;
import book.BookShelf;
public interface IOperate {
    public void work (BookShelf bookShelf);
}

Quant au fonctionnement des livres, voici l'exemple d'ajout books

Nous devons connaître les informations du livre, puis avoir une classe Book pour les recevoir, et enfin les mettre dans le tableau

Selon cette logique, la classe Book précédente est à modifier : ajouter une méthode constructeur à la classe Book pour recevoir les informations du livre. Notez que la position de la méthode dans le tableau doit correspondre à la position dans le menu que vous avez écrit

public Book(String name, String author, String type, int price) {
        this.name = name;
        this.author = author;
        this.type = type;
        this.price = price;
    }

Ajoutez le code de la méthode book :

public class AddBook implements IOperate {
    @Override
    public void work(BookShelf bookShelf) {
        System.out.println("请输入图书的名字:");
        Scanner scanner = new Scanner(System.in);
        String name = scanner.nextLine();
        System.out.println("请输入图书的作者:");
        String author = scanner.nextLine();
        System.out.println("请输入图书的类型:");
        String type = scanner.nextLine();
        System.out.println("请输入图书的价格:");
        int price = scanner.nextInt();
        Book book = new Book(name,author,type,price);
        int count=bookShelf.getCount();
        bookShelf.setBooks(count,book);
        bookShelf.setCount(count+1);
        System.out.println("新增成功");
    }
}

Remarque :

1. La variable de référence affiche l'adresse modifiée par défaut, si vous souhaitez imprimer le contenu du livre, vous devez réécrire la méthode toString dans la classe Book

2. Avant de quitter, la méthode de sortie doit parcourir le tableau et tout modifier. les objets vers lesquels il pointe sont nuls. C'est pratique pour le recyclage. Bien que le système le recycle également une fois le programme terminé, il faut savoir qu'il n'est pas si facile d'arrêter certains programmes dans de grands projets une fois qu'ils commencent à s'exécuter

.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer