简易版 图书管理系统

2023-11-05

目录

1. Book包

1.1 Book类

1.2 BookList类

2. User包

2.1 User抽象类

2.2 AdminUser类

2.3  NormalUser类

3. Operate包

3.1 MyOperate接口

3.2  AddOperation类

3.3  DelOperation类

 3.4 ExitOperation

 3.5  FindOperation类

 3.6 ShowOperation类

 3.7 BorrowedOperation类

3.8 ReturnOperation类

4. Main类


本章作为一个练习,对于前面学过的那些语法进行一个整合运用。

语法方面主要包括:封装、继承、多态、抽象类和接口。

首先,我们将整个系统分为4个包,

分别是Book类用于封装书和书架的具体信息。

Main包也就是封装主类,用于对整个系统的具体操作。

Operate包用于封装具体的操作。

User包用于管理用户信息。

我们一个包一个包来讲解。

1. Book包

Book包分为两类,分别是书和书架。

1.1 Book类

该类主要是对书的一些基本信息进行封装,并且提供Getting和Setting方法。

package Book;

public class Book {
    private String name;//书名
    private String author;//作者
    private int price;//价格
    private String type;//类型
    private boolean isBorrowed;//是否被借出

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

    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;
    }

    public int getPrice() {
        return price;
    }

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

    public String getType() {
        return type;
    }

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

    public boolean isBorrowed() {
        return isBorrowed;
    }

    public void setBorrowed(boolean borrowed) {
        isBorrowed = borrowed;
    }

    @Override
    public String toString() {
        return "Book.Book{" +
                "name='" + name + '\'' +
                ", author='" + author + '\'' +
                ", price=" + price +
                ", type='" + type + '\'' +
                ", isBorrowed=" + isBorrowed +
                //", isBorrowed=" + isBorrowed +
                (isBorrowed  ? "  已经被借出" : "  未被借出") +
                '}';
    }
}

1.2 BookList类

书架的创建:

包括了初始化,以及对一些书籍的基本操作。

package Book;

public class BookList {
    private Book[] books = new Book[10];//创建书架
    private int usedSize;//记录书架上书的数量
    public BookList() {//初始化3本书
        books[0] = new Book("我们仨","杨绛",89,"文学");
        books[1] = new Book("明朝那些事","当年明月",78,"历史");
        books[2] = new Book("红楼梦","曹雪芹",49,"小说");
        this.usedSize = 3;
    }

    public Book[] getBooks() {
        return books;
    }

    public void setBooks(int pos,Book book) {
        books[pos] = book;
    }

    public int getUsedSize() {
        return usedSize;
    }

    public void setUsedSize(int usedSize) {
        this.usedSize = usedSize;
    }

    public Book getBook(int pos) {
        return this.books[pos];
    }

    //重写setBook方法作用于设置图书(增删)
    public void setBook(Book book) {
        this.books[usedSize] = book;
    }
    public void setBook(int pos,Book book) {
        this.books[pos] = book;
    }
}

2. User包

User包被分为三类,其中User类是抽象类,用于管理人员类和普通用户类继承。

AdminUser是管理类,NormalUser类是普通用户类。

2.1 User抽象类

因为对于不同的用户而言,他们的访问权限是不同的,所以需要将菜单抽象出来以示区分。

另外就是基本信息。

package User;

import Book.BookList;
import Operate.MyOperate;

//抽象出menu()菜单方法
public abstract class User {
    //protected是访问权限,改为更大的也可以
    protected String name;
    protected MyOperate[] myOperate;//等会到Operate包再讲
    //用户信息
    public User(String name) {
        this.name = name;
    }
    public abstract int menu();
    //作用于main方法中对不同的用户进行区分
    public void doWork(int choice, BookList bookList) {
        this.myOperate[choice].work(bookList);
    }
}

2.2 AdminUser类

这里开辟的MyOperate数组是对管理人员的访问权限开辟空间,其中功能包括 退出,查找,增加,删除,显示

package User;

import Operate.*;

import java.util.Scanner;

public class AdminUser extends User {
    //管理人员所拥有的访问权限
    public AdminUser(String name) {
        super(name);
        this.myOperate = new MyOperate[]{
                new ExitOperation(),
                new FindOperation(),
                new AddOperation(),
                new DelOperation(),
                new ShowOperation(),
        };
    }
    //管理人员拥有的权限
    public int menu() {
        System.out.println("*****************************************");
        System.out.println("hello"+ name +"欢迎来到图书小小练习");
        System.out.println("1:查找图书");
        System.out.println("2:新增图书");
        System.out.println("3:删除图书");
        System.out.println("4:显示图书");
        System.out.println("0:退出系统");
        Scanner scanner = new Scanner(System.in);
        int choice  = scanner.nextInt();
        return choice;
    }
}

2.3  NormalUser类

这里开辟的MyOperate数组是对普通用户的访问权限开辟空间,其中功能包括 退出,查找,借书,还书

package User;

import Operate.*;

import java.util.Scanner;

public class NormalUser extends User {
    //普通用户所拥有的访问权限
    public NormalUser(String name) {
        super(name);
        this.myOperate = new MyOperate[]{
                new ExitOperation(),
                new FindOperation(),
                new BorrowedOperate(),
                new ReturnOperation(),
        };
    }
    //普通用户拥有的权限
    @Override
    public int menu() {
        System.out.println("****************************");
        System.out.println("hello "+name+" 欢迎来到图书小练习");
        System.out.println("1.查找图书!");
        System.out.println("2.借阅图书!");
        System.out.println("3.归还图书!");
        System.out.println("0.退出系统!");
        System.out.println("****************************");
        System.out.println("请输入你的操作:");
        Scanner scanner = new Scanner(System.in);
        int choice = scanner.nextInt();
        return choice;
    }
}

3. Operate包

Operate的各个操作,增、删、查、借书、还书、退出。

我们 Operate包 将普通用户和管理员用户的具体实现操作类全写在Operate包 中。

3.1 MyOperate接口

MyOperate接口只设计好了各个Operation规范(方法)

package Operate;

import Book.BookList;

public interface MyOperate {
    public void work(BookList bookList);
}

3.2  AddOperation类

本类用于添加书籍得基本信息,并且做了基本的判断。

package Operate;

import Book.Book;
import Book.BookList;

import java.util.Scanner;

public class AddOperation implements MyOperate {

    @Override
    public void work(BookList bookList) {
        System.out.println("新增图书");
        Scanner scanner = new Scanner(System.in);
        System.out.println("输入书名");
        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, price, type);
        //得到此时书架上书的数量
        int currentSize = bookList.getUsedSize();
        //遍历,查找是否想添加的书已经存在了
        //默认添加在最后面
        for (int i = 0; i < currentSize; i++) {
            Book tmp = bookList.getBook(i);
            if(tmp.getName().equals(name)) {
                System.out.println("已经存在这本书了,不能再放入了!");
                return;//如果存在即退出
            }
        }
        //如果不存在即添加
        bookList.setBook(book);
        //每添加一本书下表向后移
        bookList.setUsedSize(currentSize + 1);

    }
}

3.3  DelOperation类

先上代码:

package Operate;

import Book.Book;
import Book.BookList;

import java.util.Scanner;

public class DelOperation implements MyOperate {
    @Override
    public void work(BookList bookList) {
        System.out.println("删除图书!");
        System.out.println("请输入你要删除图书的名字:");
        Scanner scanner = new Scanner(System.in);
        String name = scanner.nextLine();
        //得到当前下标
        int currentSize = bookList.getUsedSize();
        int index = -1;
        //遍历,tmp.getName().equals(name)为真即表示书架存在该书
        //否则则该书不存在
        for (int i = 0; i < currentSize; i++) {
            Book tmp = bookList.getBook(i);
            if (tmp.getName().equals(name)) {
                index = i;
                break;
            }
        }
        //图示说明
        for (int j = index; j < currentSize - 1; j++) {
            Book book = bookList.getBook(j+1);
            bookList.setBook(j,book);
        }

        bookList.setUsedSize(currentSize - 1);
        //删除对象,把最后一个设置为bull
        bookList.setBook(currentSize - 1, null);
    }
}

图示:

 假设currentSize 在这里,我们想要删掉该书,那么我们就将currentSize + 1 赋值给currentSize;

接着currentSize向后走:

 重复上述操作:

知道最后一个:

直接将最后一个删除,毕竟每删除一个都需要将 书架上的书减少一本:

这样也解释了为什么之前需要重写setBook()方法。

 3.4 ExitOperation

该类就只提供一个方法:exit()

import Book.BookList;

public class ExitOperation implements MyOperate {
    @Override
    public void work(BookList bookList) {
        System.out.println("退出系统!");
        System.exit(0);
    }
}

 为什么exit()方法中的参数是0,因为我们正常退出是就是0:

 3.5  FindOperation类

FindOperation类实现很简单,只需要提供书名再进行遍历,当然也可以根据价格、作者进行遍历。

package Operate;

import Book.Book;
import Book.BookList;

import java.util.Scanner;

public class FindOperation implements MyOperate{
    @Override
    public void work(BookList bookList) {
        System.out.println("查找图书!");
        System.out.println("请输入书名!");
        Scanner scanner = new Scanner(System.in);
        String name = scanner.nextLine();
        //获取当前图书在书架得下标
        int currentSize = bookList.getUsedSize();
        //遍历
        for (int i = 0; i < currentSize; i++) {
            //System.out.println(bookList[i]);
            Book book = bookList.getBook(i);
            if (book.getName().equals(name)) {
                System.out.println("找到了这本书");
                System.out.println(book.toString());
                return;
            }
        }
        System.out.println("没有找到"+name);
    }
}

 3.6 ShowOperation类

遍历获取通过Getting方法打印即可。

package Operate;

import Book.Book;
import Book.BookList;

public class ShowOperation implements MyOperate {
    @Override
    public void work(BookList bookList) {
        System.out.println("打印所有图书!");
        int currentSize = bookList.getUsedSize();
        for (int i = 0; i < currentSize; i++) {
            Book book = bookList.getBook(i);
            System.out.println(book);
        }
    }
}

以上便是管理员访问得全部权限,当然有需要还可以自己添加所需要的方法。

后面得便是普通用户特有的权限,普通用户也有FindOperation、ShowOperation。

 3.7 BorrowedOperation类

方法的逻辑很简单,只需稍加注意

package Operate;

import Book.Book;
import Book.BookList;

import java.util.Scanner;

public class BorrowedOperate implements MyOperate {
    @Override
    public void work(BookList bookList) {
        System.out.println("借阅图书!");
        System.out.println("请输入你要借阅的图书:");
        Scanner scanner = new Scanner(System.in);
        String name = scanner.nextLine();
        //获取
        int currentSize = bookList.getUsedSize();
        //遍历
        for (int i = 0; i < currentSize; i++) {
            Book book = bookList.getBook(i);
            //不仅需要判断书是否存在书架上,并且还需要判断是否已经借出
            if (book.getName().equals(name) &&
            book.isBorrowed() == false) {
                book.setBorrowed(true);
                System.out.println("借阅成功");
                return;
            }
        }
    }
}

3.8 ReturnOperation类

逻辑于BorrowedOperation类相似

package Operate;

import Book.Book;
import Book.BookList;

import java.util.Scanner;

public class ReturnOperation implements MyOperate {

    @Override
    public void work(BookList bookList) {
        System.out.println("归还图书!");
        System.out.println("请输入你要归还的图书:");
        Scanner scanner = new Scanner(System.in);
        String name = scanner.nextLine();
        int currentSize = bookList.getUsedSize();
        for (int i = 0; i < currentSize; i++) {
            Book book = bookList.getBook(i);
            if (book.getName().equals(name) &&
                    book.isBorrowed()) {
                book.setBorrowed(false);
                System.out.println("归还成功");
                return;
            }
        }
    }
}

4. Main类

 Main类中只有一个类,主类,整个程序的入口。

上代码:

package Main;

import Book.BookList;
import User.AdminUser;
import User.User;
import User.NormalUser;
import java.util.Scanner;

public class Main {
    //提供一个静态方法用于创建身份,是判断管理员还是普通用户
    public static User login() {
        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 AdminUser(name);
        } else {
            return new NormalUser(name);
        }
    }
    public static void main(String[] args) {
        BookList bookList = new BookList();
        User user = login();
        while (true) {
            int choice = user.menu();
            user.doWork(choice,bookList);
        }
    }
}

这里发生了一个向上转型:

 主方法的内容非常简单:

1. 创建一个书架;

2.通过登录方法确认用户信息;

3.一个死循环,不停的使用“权限”,知道用户输入0退出。

这里就体现了面向对象的思想,所有的过程全部封装完成,只对外提供了公开的方法。

本章的思路都非常简单,只是有些地方需要稍加注意,本章的目的便是体验面向对象的思想。

案例演示:

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

简易版 图书管理系统 的相关文章

  • 如何自定义BlockingQueue的阻塞行为

    我想创建一个阻塞队列 它根据自定义规则而不是队列中的项目数量来阻止生产者 例如 生产者生成一些文件并放入队列中 消费者经过一番分析后将它们转移到特定位置 对于上述场景 如果队列中的总文件大小达到某个阈值 我希望生产者等待生成新文件 如果总大
  • Hibernate OneToMany 关系是 PersistentBag 而不是 List

    我正在 javafx 中开发一个应用程序 它通过 RMI 与 EAR 连接 该 EAR 连接到 SQLServer DB 并使用 hibernate 映射 POJOS 这些 POJOS 包含双向 OneToMany 和 ManyToOne
  • 以编程方式将 PEM 证书导入 Java KeyStore

    我有一个由两个文件 crt 和 key 组成的客户端证书 我希望将其导入到 java KeyStore 中 然后在 SSLContext 中使用 以通过 Apache 的 HTTPClient 发送 HTTP 请求 但是 我似乎找不到一种以
  • .java 和 .scala 类之间是否可能存在循环依赖?

    假设我在 java 文件中定义了类 A 在 scala 文件中定义了类 B A 类使用 B 类 B 类使用 A 类 如果我使用 java 编译器 则会出现编译错误 因为 B 类尚未编译 如果我使用scala编译器A类将找不到 有没有可以同时
  • 使用多个构造函数创建不可变类

    我正在阅读这一页 https docs oracle com javase tutorial essential concurrency imstrat html关于在 Java 中创建不可变类 并决定根据页面上概述的规范修改我正在编写的类
  • 有效地查找正则表达式的所有重叠匹配项

    这是后续与 java 正则表达式匹配的所有重叠子字符串 https stackoverflow com q 11303309 244526 有没有办法让这段代码更快 public static void allMatches String
  • JUnit 使用 Mockito 测试异步方法

    我已经使用 Spring Framework 版本 5 0 5 RELEASE 在 Java 1 8 类中实现了异步方法 public class ClassToBeTested Autowired private MyComponent
  • Maven + Cobertura:无法找到[您的班级]。你指定了源目录吗?

    我有 MyMath 类 有两个简单的方法 multi 和 add 和测试类只会测试多种方法 public class MainTest Test public void testMultiply MyMath tester new MyMa
  • 业务代表与服务定位器

    Business Delegate 和 Service Locator 之间有什么区别 两者都负责封装查找和创建机制 如果 Business Delegate 使用 Service Locator 来隐藏查找和创建机制 那么 Busines
  • Vertx HttpClient getNow 不工作

    我的 vertx HttpClient 有问题 下面的代码显示使用 vertx 和纯 java 测试 GET Vertx vertx Vertx vertx HttpClientOptions options new HttpClientO
  • 在 Mac 上使用 JRE 打开 jar 文件

    我有一个 jar 文件 旨在通过命令行运行 我不打算在运行应用程序的机器上进行任何java开发 我的思考过程是 因此我应该只需要JRE而不是JDK 此外 JDK 大约是 JRE 的 4 倍 我不想下载它 在 Mac 上安装 JRE 时 它不
  • java 属性文件作为枚举

    是否可以将属性文件转换为枚举 我有一个包含很多设置的属性文件 例如 equipment height equipment widht equipment depth and many more like this and not all a
  • 是什么原因导致“对象不是声明类的实例”? [复制]

    这个问题在这里已经有答案了 可能的重复 使用反射调用方法时 为什么会出现 对象不是声明类的实例 https stackoverflow com questions 7202988 why do i get object is not an
  • RMI 服务器:rmiregistry 或 LocateRegistry.createRegistry

    对于服务器端的RMI 我们需要启动吗rmiregistry程序 或者只是调用LocateRegistry createRegistry 如果两者都可以的话 各有什么优点和缺点 他们是同一件事 rmiregistry是一个单独的程序 您可以从
  • 使用 Maven 3 时 Cobertura 代码覆盖率为 0%

    读完这篇文章后 将 Cobertura 与 Maven 3 0 2 一起使用的正确方法是什么 https stackoverflow com questions 6931360 what is the proper way to use c
  • Android 中的字符串加密

    我正在使用代码进行加密和加密 它没有给出字符串结果 字节数组未转换为字符串 我几乎尝试了所有方法将字节数组转换为字符 但没有给出结果 public class EncryptionTest extends Activity EditText
  • Java SE + Spring Data + Hibernate

    我正在尝试使用 Spring Data Hibernate 启动 Java SE 应用程序 并且到目前为止已经完成了以下操作 配置文件 Configuration PropertySource classpath hibernate pro
  • Java的hashCode可以为不同的字符串产生相同的值吗?

    使用java的哈希码函数是否可以为不同的字符串提供相同的哈希码 或者如果可能的话 其可能性的 是多少 Java 哈希码是 32 位 它散列的可能字符串的数量是无限的 所以是的 会发生冲突 百分比是没有意义的 项目 字符串 的数量是无限的 而
  • 日期时间解析异常

    解析日期时 我的代码中不断出现异常错误 日期看起来像这样 Wed May 21 00 00 00 EDT 2008 这是尝试读取它的代码 DateTimeFormatter formatter DateTimeFormatter ofPat
  • 如何在Java中跨类共享变量,我尝试了静态不起作用

    类 Testclass1 有一个变量 有一些执行会改变变量的值 现在在同一个包中有类 Testclass2 我将如何访问 Testclass2 中变量的更新值 由 Testclass1 更新 试过这个没用 注意 Testclass1和Tes

随机推荐

  • 数据结构算法设计——深搜DFS(走迷宫)

    一 什么是深搜 深搜就是 深度搜索 也就是 深度优先的搜索 那什么是 深度优先 呢 我们拿最常见的迷宫问题举例 深度优先就是你照着一条路死命的走 有个形象的说法叫 不撞南墙不回头 一直到这条路走不通了 再返回上一步选择其他的方向 在算法中我
  • Java8 Streams用法总结大全 之 Collector用法详解

    1 前言 在 Java8 Streams用法总结大全 之 Stream中的常见操作 中 我们已经学习了Stream中的常用操作 其中也提到了collect 的用法 当时只是通过入参Collectors toList 实现了把Stream转为
  • [SQL]postgreSQL中如何查找无主键的sql语句

    查找postgreSQL数据库中 查找无主键的表 可以通下面语句查找 select from pg tables where hasindexes is false and schemaname public
  • 新编法学概论--吴祖谋

    新编法学概论 吴祖谋 2007 pdf 介绍法学概论的书籍 但是写的太官僚了 什么阶级论 之类的开头 让我读着那样的不理解 能不能有本写的比较通俗易懂的法学概论 这样的书籍 真心的不喜欢看 但是没办法 还是看一看吧 1 宪法 三次完全的更新
  • 什么是代码区、常量区、静态区(全局区)、堆区、栈区?

    前言 和作者有同样的感觉 对代码区 常量区 静态区 全局区 堆区 栈区没有较深刻的认识 通过查找网络找到本篇比较优秀的文章 特此转发 摘自CSDN https blog csdn net u014470361 article details
  • oracle中translate与replace的使用

    1 translate 语法 TRANSLATE char from to 用法 返回将出现在from中的每个字符替换为to中的相应字符以后的字符串 若from比to字符串长 那么在from中比to中多出的字符将会被删除 三个参数中有一个是
  • OpenCV中的图像腐蚀和膨胀操作有哪些?

    在OpenCV中 图像腐蚀 Erosion 和膨胀 Dilation 是常用的图像形态学操作 它们可以用于去除噪声 填充空洞 提取图像中的结构等 下面是几种常见的腐蚀和膨胀操作 腐蚀操作 图像腐蚀可以通过函数cv2 erode 来实现 腐蚀
  • [Linux Audio Driver] 音频POP音问题归纳总结

    1 板级电容 电感发声 情况就是你设备开机之后 啥也没干 然后听到呲啦刺啦的声音 这种情况我遇到过一次 这个是 不合理的结构设计或者走线导致的 硬件实力挖坑 需要改版解决 2 播放声音长时间有杂音 这个锅我们送给硬件 这个是芯片之间有干扰
  • SVN 启动模式

    首先 在服务端进行SVN版本库的相关配置 手动新建版本库目录 mkdir opt svn 利用svn命令创建版本库 svnadmin create opt svn runoob 使用命令svnserve启动服务 svnserve d r 目
  • java tomcat远程调试端口_tomcat开发远程调试端口以及利用eclipse进行远程调试

    一 tomcat开发远程调试端口 方法1 WIN系统 在catalina bat里 SET CATALINA OPTS server Xdebug Xnoagent Djava compiler NONE Xrunjdwp transpor
  • LeetCode2.两数相加

    给你两个 非空 的链表 表示两个非负的整数 它们每位数字都是按照 逆序 的方式存储的 并且每个节点只能存储 一位 数字 请你将两个数相加 并以相同形式返回一个表示和的链表 你可以假设除了数字 0 之外 这两个数都不会以 0 开头 示例 1
  • 了解VGG网络结构特点,利用VGG完成图像分类

    学习目标 知道VGG网络结构的特点 能够利用VGG完成图像分类 2014年 牛津大学计算机视觉组 Visual Geometry Group 和Google DeepMind公司的研究员一起研发出了新的深度卷积神经网络 VGGNet 并取得
  • 为什么同样是软件测试员,别人拿3万月薪,你却只能拿3千?你反思了没有?

    有人说软件测试入门门槛低 但是为什么同样是软件测试员 别人拿3万元的月薪 你却只能拿3千月薪 有的人只会抱怨 别人运气好 经验足等等 但是有没有去发现一些根本性的东西 最近我就看到一个有意思的视频 我觉得最能体现出软件测试员薪酬为什么区别这
  • 【机器学习】之Anaconda中使用的命令

    操作之前 点击上图入口 进入Prompt 示例是在base环境下 cls清屏 base C Users bubusa gt cls 1 base环境下的操作 1 列出所有虚拟环境 base C Users bubusa gt conda e
  • 浅拷贝&深拷贝

    什么是深 浅拷贝 他们跟赋值有什么关系 浅拷贝 浅拷贝是创建一个新对象 这个对象有着原始对象属性值的一份精确拷贝 如果属性是基本类型 拷贝的就是基本类型的值 如果属性是引用类型 拷贝的就是内存地址 所以如果其中一个对象改变了这个地址 就会影
  • 算法 堆排序 heapSort

    堆排序 heapSort 堆是一种数据结构 一种叫做完全二叉树的数据结构 堆排序是利用堆数据结构而设计的一种排序算法 堆排序是一种选择排序 其最坏 最好 平均时间复杂度均为O nlogn 同时也是不稳定排序 堆的性质 这里我们用到两种堆 其
  • Error 12154 received logging on to the standby

    环境为 操作系统 AIX 6 1 oracle版本 11 2 0 3 psu5 本编记录了本人一次DG搭建失败的经历 只是一个小的错误 但却导致我排查了半天 记录本次经历用来警醒自己 作为一名dba任何时候我们都要万分仔细 认真 DG搭建的
  • Codeforces 102263C-Check The Text【模拟】 难度:*

    题意 Roze has a special keyboard which consists only of 29 keys 26 alphabetic a z keys which prints the 26 lowercase Latin
  • buck电路_基本斩波电路---BUCK电路

    BUCK电路又称降压斩波电路 其工作原理图如图1所示 该电路有输入直流电源Vin 一个全控器件M1 续流二极管D1 电感L1 负载R1 其主要用于电路的供电电源及带蓄电池负载 拖动直流电机等 在拖动直流电机及蓄电池负载时会出现反电动势 如图
  • 简易版 图书管理系统

    目录 1 Book包 1 1 Book类 1 2 BookList类 2 User包 2 1 User抽象类 2 2 AdminUser类 2 3 NormalUser类 3 Operate包 3 1 MyOperate接口 3 2 Add