首页 > 其他分享 >图书系统的创建(三)——日记

图书系统的创建(三)——日记

时间:2024-09-01 11:50:03浏览次数:10  
标签:创建 System User println new 日记 图书 out

在写完操作后,我们可以创建User用户包,在这个包内我们要建立管理员(librarian)和普通成员(normal)两个类,对于用户的创建我认为有几个值得注意的点:

1.菜单框架

同样的,我们可以创建一个共同特征user父类,我们可以在里面定义name变量和构造方法。在两个子类中,我们肯定一个菜单menu去给出操作选项,例如:

System.out.println("1.借阅图书");
System.out.println("2.归还图书");
System.out.println("3.查找图书");
System.out.println("4.显示图书");
System.out.println("0.退出系统");

我们要输入选项,那我们肯定要去返回一个int类型的值,所以我们可以将menu()写成这样public  int menu().

注意: menu此时在两个子类当中,如果程序运行,此时会报错,因为我们在user父类当中还没有menu()这个方法,构成不了重写!!!所以我们必须在user中写menu(),我们可以不写里面的内容,只表示这个方法,我们可以用“抽象类”,

public abstract class User {
    public abstract int menu();
}

 2.返回值的向上转型

在Main{}中,我们同样要写租借菜单login(),我们这里需要选择是管理员还是普通用户,去将User与Main里面的操作联系起来。

System.out.println("请选择身份: 1—管理员   2——普通用户");

通过选择我们可以进入对应的界面内, 所以我们需要一个返回值去返回是librarion类型还是normal类型,注意:由于这两个类都是User的子类,我们可以利用“向上转型”,用User定义这两个变量,这样无论是librarion还是normal返回的都是User类型数据。

public static User login() {
        System.out.println("欢迎来到图书系统!");
        System.out.println("请输入你的姓名:");
        Scanner scanner = new Scanner(System.in);
        String name = scanner.nextLine();
        System.out.println("请选择身份: 1—管理员   2——普通用户");
        int choice = scanner.nextInt();
        if (choice == 1){
            return new librarian(name);
        }
        else {
            return new normal(name);
        }
    }

 3.菜单选项的联系

在不同用户中我们有不同选项,对于这些选项我们可以用数组来存储!!

System.out.println("欢迎" + this.name + "来到普通成员菜单!!请输入你的操作:");
System.out.println("1.借阅图书");
System.out.println("2.归还图书");
System.out.println("3.查找图书");
System.out.println("4.显示图书");
System.out.println("0.退出系统");

我们可以利用返回值去找到对应数组下标去操作对应选项,这个我们可以很简单的写出,但是如何去启动选项的具体操作,假如数组中下标为1的是借阅图书,我们输入了1,只代表我们进入了借阅图书这个选项里,但是还没有开始具体的Operation中!!那如何联系呢?

我们知道在Operation中的所以操作都有work()方法,我们可以去调用work方法就行,那我们需要在菜单中new这些操作。

这是我们在User中定义的数组;public IoOperation [] ioOperations;

public normal(String name) {
        super(name);
        this.ioOperations = new IoOperation[] {
                new exit(),
                new lend(),
                new restore(),
                new search(),
                new displaytion()
        };
    }

 最后我们需要在创建一个方法去组合这些操作, ioOperations[choice]是对应的操作选项,即借阅图书,后面的  .work(bookshelf);就是进入到借阅图书的work方法中!

public void DoOperation(int choice, Bookshelf bookshelf){
        ioOperations[choice].work(bookshelf);
    }

总的来说,我们就是 先通过选择身份——>进入对于的menu()——>通过数组启动对应的work()。

附总代码如下:

import Operation.IoOperation;
import book.Bookshelf;
import user.User;
import user.librarian;
import user.normal;

import java.util.Arrays;
import java.util.Scanner;

public class Main {
    public static User login() {
        System.out.println("欢迎来到图书系统!");
        System.out.println("请输入你的姓名:");
        Scanner scanner = new Scanner(System.in);
        String name = scanner.nextLine();
        System.out.println("请选择身份: 1—管理员   2——普通用户");
        int choice = scanner.nextInt();
        if (choice == 1){
            return new librarian(name);
        }
        else {
            return new normal(name);
        }
    }

    public static void main(String[] args) {
        System.out.println("Halle!!");
        User user = login();
        Bookshelf bookshelf = new Bookshelf();

        while (true){
            int choice = user.menu();
            user.DoOperation(choice,bookshelf);
        }

    }
}

标签:创建,System,User,println,new,日记,图书,out
From: https://blog.csdn.net/okokxxajj/article/details/141781178

相关文章

  • 【项目日记】高并发内存池---实现中心缓存
    年少的梦啊,有些很幸运地实现了,有些被遗忘在了风中---董卿---高并发内存池---实现中心缓存1整体理念2SpanList的实现3CentralCache的实现4请求内存联动1整体理念实现中心缓存之前,我们先理解中心缓存需要做那些事情,具有哪些特性?我们把中心缓存的功能......
  • 创建实体类Employee
    8.1.1、创建实体类Employeeimagepackageorg.rain.pojo;importjava.io.Serializable;/**@authorliaojy@date2023/10/19-21:31*/publicclassEmployeeimplementsSerializable{privateIntegerid;privateStringlastName;privateStringemail;//1male,......
  • layui - - - 批量删除图书、Iframe 弹出层(图书管理系统)
    1.头部工具栏事件在“组件”中,选择“表格”,然后选择“事件”,在“事件”中找toolbar头部工具栏事件。头部工具栏“批量删除”和“添加”按钮添加lay-event="xx"属性,点击“批量删除”和“添加”按钮就会触发toolbar事件。代码中编写toolbar事件,打印回调函数的参数。to......
  • 20240904_080346 mysql 存储过程 创建与使用存储过程
    存储过程的使用修改结束符号将默认的句子结束符号由;改为$号的写法创建存储过程调用存储过程......
  • 2024.9 训练日记
    我们将难度分为\(5\)个等级:\(\color{grey}\bigstar\)简单题,根本不配进入NOI的考场,做着玩玩。或者为模板题。\(\color{green}\bigstar\)签到题,在NOI赛场上强银选手几乎人人都会,如果赛场上不会的话对冲银的影响是非常大的,要避免。\(\color{blue}\bigstar\)中等题,在NOI......
  • uniapp创建组件与vue官方文档的差异
    uniapp创建组件形式相对于官方文档的形式话要简单一点uniapp创建组件:另外,有一个注意点,如果你项目特别多的情况下,要先展开,选中这个文件夹,然后找到里面具体要运行的页面来运行,不然的话它是有可能启动不了的,因为它不知道你到底要启动那一个具体页面选中整体项目名,......
  • 手把手教你创建Shopify开发合作者账号
    如果你现在不了解Shopify开发,建议可以先了解一下,或者在评论区留言,我看看是否有必要写篇博文给大家介绍一下,好了,进入今天的主题,手把手来教大家创建一个shopify开发合作者账号。如何创建shopify开发合作者账号:第1步:打开shopify开发者网站,点击如下图的位置:第2步:点击下面这个卡......
  • (附论文)基于Springboot和Vue的图书管理系统(532)
    获取源码请滑到最底部访问官网项目配套调试视频和相对应的软件安装包1、项目描述具体请看视频演示2、项目开发工具开发工具:Idea或Eclipse数据库:MysqlJar包仓库:Maven前端框架:Vue2后端框架:Springboot3、项目图片4、演示视频(附论文)基于Springboot和Vue的图书管理......
  • 【保姆级VSCode 插件开发之创建第一个插件项目】
    保姆级VSCode插件开发第一章VSCode插件开发入门之创建第一个插件项目文章目录保姆级VSCode插件开发前言一、创建HelloWorld插件项目1.创建项目2.VSCode打开项目2.1项目目录结构:总结前言本篇文章主要介绍如何创建你的第一个VSCode插件项目"HelloWorld",来......
  • C++创建GUI按钮\文本框(Windows)不用QT!!!
    一定要的:#include<windows.h>剩下的: 过程:LRESULTCALLBACKWndProc(HWNDhwnd,UINTMessage,WPARAMwParam,LPARAMlParam){switch(Message){ caseWM_CREATE:{ /*略*///HWND名称=CreateWindow(类型,显示的字,WS_CHILD|WS_VISIBLE,x,y,宽,......