当前位置: 首页 > news >正文

【JAVA】 图书管理系统(javaSE简易版 内含画图分析) | 期末大作业课程设计

作者主页:paper jie 的博客

本文作者:大家好,我是paper jie,感谢你阅读本文,欢迎一建三连哦。

本文录入于《JAVA》专栏,本专栏是针对于大学生,编程小白精心打造的。笔者用重金(时间和精力)打造,将javaSE基础知识一网打尽,希望可以帮到读者们哦。

其他专栏:《算法详解》《C语言》《javaSE》等

内容分享:本期将会使用javase来制作一个简易版本的图书管理系统

目录

设计需求

 设计思路

设计的具体过程及源码展示

book包 

Book类

Booklist类

user包

User类

AdminUser类

NormalUser类

operation包

IOoperation接口

Addoperation类

Deloperation类

Borrowoperation类

Exitoperation类

Findoperation类

Returnoperation类

Showoperation类

 Main类

效果展示 

图书管理系统的画图分析


设计需求

我们需要通过使用javase来实现一个简易版本的图书管理系统,它需要具备以下几个功能:

1 首先需要有两个模式,一个是管理员模式,一个是普通用户模式

2 需要具有 新增图书,删除图书,查找图书,显示图书,借阅图书,归还图书,退出系统这些功能

3.需要将上面的功能分成两部分,新增,删除,显示,查找,退出为管理员的权限,而查找,借阅,归还,退出为普通用户的权限

 设计思路

1 我们首先需要将我们的用户分为两个部分,一个为管理员,一个为普通用户,在使用的时候根据不同的需求展现不同的界面和功能,这里我们可以通过继承,多态,向上转型给他们一个父类来实现

2 我们需要实现多个类来实现删除图书,查找图书,显示图书,借阅图书,归还图书,退出系统这些功能

3 我们通过创建一个接口,让功能类来实现这个接口,再用一个类型为创建的接口类型的数组来存放功能类的new出的对象,这样子就可以进行统一管理了

4 我们还需要创建书和书架类,将书的属性封装,书架类存放的就是书,会用一个书架类型的数组来存放

设计的具体过程及源码展示

为了让程序去复杂化,易修改这里将用三个包和一个主类来搭建这个框架会有book包,里面存放书类和书架类。operation包存放各个功能类和接口。user包中放着父类User类和普通用户类,管理员类,最后还有一个主类Main

book包 

Book类

book类起到的作用就是将book类封装起来,后面容易放入书架中。 这里的构造方法,getandset方法以及toString方法可以通过编译器生成,速度很快的。在toString方法中我们需要改动一下编译器生成的,我们可以用三目操作符来确定是true还是false来打印是已借出还是未接出

package book;public class Book {private String name;private String author;private int price;private String type;//默认flose 未被借出private boolean isBorrowed;//get 和 set方法设置和返回成员变量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;}//打印@Overridepublic String toString() {return "Book{" +"name='" + name + '\'' +", author='" + author + '\'' +", price=" + price +", type='" + type + '\'' +", " + ((isBorrowed == true) ? "已经借出" : "未接出") +'}';}
}

Booklist类

这里也可以使用编译器生成需要的代码,这里要注意的是books数组,它是用来存放book书本的。在构造方法中要对它进行初始化,可以存放几本,已进放进去的书的内容。

package book;public class Booklist {//书架private Book[] books;//记录使用书的位置private int usedsize;private static final  int DEFAULT_CAPACITY = 10;public Booklist() {//对书架初始化this.books = new Book[DEFAULT_CAPACITY];//放书this.books[0] = new Book("三国演义", "罗贯中", 10, "小说");this.books[1] = new Book("西游记", "吴承恩", 20, "小说");this.books[2] = new Book("红楼梦", "曹雪芹", 30, "小说");this.usedsize = 3;}public int getUsedsize() {return usedsize;}public void setUsedsize(int usedsize) {this.usedsize = usedsize;}public Book getBook(int pos) {return books[pos];}public void setBook(int pos, Book book) {books[pos] = book;}public Book[] getBooks() {return books;}
}

user包

这个包里放的是一个父类和两个子类,企图通过继承和多态来实现管理员和普通用户的切换

User类

这里要注意的是IOoperation这个数组,它会在User类的子类中进行初始化,来存放需要功能类的对象。而dooperation方法则是通过IOoperations数组里的成员的work方法来实现需要的操作

package user;import book.Booklist;
import operation.IOoperation;public abstract class User {protected String name;protected IOoperation[] iOoperations;public User(String name) {this.name = name;}public abstract int menu();public void dooperation(int choise, Booklist booklist) {iOoperations[choise].work(booklist);}
}

AdminUser类

它和NormalUser都是User的子类,这里面的构造方法就对父类的成员进行了IOoperation初始化,且实现的菜单界面,menu方法的返回值就是你选择需要使用的功能

package user;import operation.*;import java.util.Scanner;public class AdminUser extends User{public AdminUser(String name) {super(name);this.iOoperations = new IOoperation[]{new Exitoperation(),new Addopertaion(),new Deloperation(), new Showoperation(),new Findoperation()};}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("************************************************************");System.out.println("请输入你的操作:");Scanner scanner = new Scanner(System.in);int choice = scanner.nextInt();return choice;}
}

NormalUser类

实现思路和AdminUser一样

package user;import operation.*;import java.util.Scanner;public class NormalUser extends User {public NormalUser(String name) {super(name);this.iOoperations = new IOoperation[]{new Exitoperation(),new Findoperation(),new Borrowoperation(), new Returnoperation()};}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("**************************************************************");System.out.println("请输入你的操作:");Scanner scanner = new Scanner(System.in);int choice = scanner.nextInt();return choice;}
}

operation包

这个包里需要实现需要的功能类和一个将他们都串起来的接口

IOoperation接口

所有的功能类都要实现这个接口,从而重写work方法,来统一使用work这个名字

package operation;import book.Booklist;public interface IOoperation {public void work(Booklist booklist);
}

Addoperation类

新增图书功能:

package operation;import book.Book;
import book.Booklist;import java.util.Scanner;/*** Created with IntelliJ IDEA.* Description:* User: sun杰* Date: 2023-08-25* Time: 10:43*/
public class Addopertaion implements IOoperation{@Overridepublic 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 pos = booklist.getUsedsize();for (int i = 0; i < pos; i++) {Book book1 = booklist.getBook(i);if(book1.getName().equals(name)) {System.out.println("已有这本书,不再存放");return;}}if(pos == booklist.getBooks().length) {System.out.println("书架满了");}else {booklist.setBook(pos, book);booklist.setUsedsize(pos + 1);}}
}

Deloperation类

删除图书功能:

import book.Booklist;import java.util.Scanner;public class Deloperation implements IOoperation{@Overridepublic void work(Booklist booklist) {System.out.println("删除图书:");Scanner scanner = new Scanner(System.in);String name = scanner.nextLine();int size = booklist.getUsedsize();for (int i = 0; i < size; i++) {Book book = booklist.getBook(i);if(book.getName().equals(name)) {int pos = i;int j = 0;for ( j = pos; j < size - 1; j++) {Book book1 = booklist.getBook(j+1);booklist.setBook(j, book1);}booklist.setBook(j, null);booklist.setUsedsize(size - 1);System.out.println("删除成功");return;}}System.out.println("不存在这本书");}
}

Borrowoperation类

借阅图书功能:

package operation;import book.Book;
import book.Booklist;import java.util.Scanner;public class Borrowoperation implements IOoperation {@Overridepublic void work(Booklist booklist) {System.out.println("借阅图书:");Scanner scanner = new Scanner(System.in);System.out.println("请输入你要借阅的图书:");String name = scanner.nextLine();int size = booklist.getUsedsize();for (int i = 0; i < size; i++) {Book book = booklist.getBook(i);if(book.getName().equals(name)) {book.setBorrowed(true);System.out.println(book);System.out.println("借阅成功");return;}}System.out.println("该书不存在");}
}

Exitoperation类

退出系统功能:

package operation;import book.Booklist;public class Exitoperation implements IOoperation{@Overridepublic void work(Booklist booklist) {System.out.println("退出系统");System.exit(0);}
}

Findoperation类

查找图书功能:

package operation;import book.Book;
import book.Booklist;
import com.sun.xml.internal.ws.policy.privateutil.PolicyUtils;import javax.imageio.metadata.IIOMetadataController;
import java.util.Scanner;public class Findoperation implements IOoperation{@Overridepublic void work(Booklist booklist) {System.out.println("查找图书:");Scanner scanner = new Scanner(System.in);String name = scanner.nextLine();int size = booklist.getUsedsize();for (int i = 0; i < size; i++) {Book book = booklist.getBook(i);if(book.getName().equals(name)) {System.out.println("找到了,信息如下:");System.out.println(book);return;}}System.out.println("上述不存在");}
}

Returnoperation类

归还图书功能:

package operation;import book.Book;
import book.Booklist;import java.util.Scanner;public class Returnoperation implements IOoperation{@Overridepublic void work(Booklist booklist) {System.out.println("归还图书:");Scanner scanner = new Scanner(System.in);System.out.println("请输入你要归还的图书:");String name = scanner.nextLine();int size = booklist.getUsedsize();for (int i = 0; i < size; i++) {Book book = booklist.getBook(i);if(book.getName().equals(name)) {book.setBorrowed(false);System.out.println(book);System.out.println("归还成功");return;}}System.out.println("该书不存在");}
}

Showoperation类

显示图书功能:

package operation;import book.Book;
import book.Booklist;public class Showoperation implements IOoperation {@Overridepublic void work(Booklist booklist) {System.out.println("显示图书:");int size = booklist.getUsedsize();for (int i = 0; i < size; i++) {Book book = booklist.getBook(i);System.out.println(book);}}
}

 Main类

通过Main类来组织程序执行:

import book.Book;
import book.Booklist;
import user.AdminUser;
import user.NormalUser;
import user.User;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();//choice来决定调用哪个方法类user.dooperation(choice, booklist);}}
}

效果展示 

图书管理系统的画图分析


相关文章:

【JAVA】 图书管理系统(javaSE简易版 内含画图分析) | 期末大作业课程设计

作者主页&#xff1a;paper jie 的博客 本文作者&#xff1a;大家好&#xff0c;我是paper jie&#xff0c;感谢你阅读本文&#xff0c;欢迎一建三连哦。 本文录入于《JAVA》专栏&#xff0c;本专栏是针对于大学生&#xff0c;编程小白精心打造的。笔者用重金(时间和精力)打造&…...

区块链技术与应用 - 学习笔记3【比特币数据结构】

大家好&#xff0c;我是比特桃。本系列笔记只专注于探讨研究区块链技术原理&#xff0c;不做其他违反相关规定的讨论。 区块链技术已被纳入国家十四五规划&#xff0c;在“加快数字发展 建设数字中国”篇章中&#xff0c;区块链被列为“十四五”七大数字经济重点产业之一&#…...

Ubuntu下高效Vim的搭建(离线版)

软件界面 可以看到界面下方有一些常用提示信息&#xff1a;文件路径、format、文件类型、光标所在的坐标(x,y)、进度条(百分比)、日期时间 会提示已定义的变量名词(快速补全) 搭建方法 下载资源文件 把Vim 和 .vimrc 拷贝到家目录下&#xff0c;并执行tar -xvf Vim 即可。 …...

阿里云和腾讯云2核2G服务器价格和性能对比

2核2G云服务器可以选择阿里云服务器或腾讯云服务器&#xff0c;腾讯云轻量2核2G3M带宽服务器95元一年&#xff0c;阿里云轻量2核2G3M带宽优惠价108元一年&#xff0c;不只是轻量应用服务器&#xff0c;阿里云还可以选择ECS云服务器u1&#xff0c;腾讯云也可以选择CVM标准型S5云…...

PYTHON(一)——认识python、基础知识

一、为什么要学习python&#xff1f; Python 被认为是人工智能、机器学习的首选语言&#xff0c;可以说是全世界最流行通用范围最广的语言&#xff0c;几乎可以完成所有的任务&#xff0c;像设计游戏、建网站、造机器人甚至人工智能等都广泛使用Python。 二、输出&#xff08;…...

Python 操作 Excel

之前看过一篇文章&#xff0c;说一个工作多年的老员工&#xff0c;处理数据时只会用复制粘贴到 Excel &#xff0c;天天加班工作还完不成&#xff0c;后来公司就招了一个会 Python 的新人&#xff0c;结果分分钟就处理完成。所以工作中大家经常会使用 Excel 去处理以及展示数据…...

21.添加websocket模块

这里默认读者了解websocket协议&#xff0c;若是还不了解可以看下这篇文章wesocket协议。 websocket主要有三个步骤&#xff0c;1通过HTTP进行握手连接&#xff0c;2进行双向通信&#xff0c;3.协商断开连接 第一步的握手连接需要HTTP&#xff0c;所以还需要使用到上一节讲解…...

Linux UDP编程流程

文章目录 UDP编程流程UDP协议无连接的特点UDP协议数据报的特点 UDP编程流程 UDP 提供的是无连接、不可靠的、数据报服务。服务器端和客户端没有什么本质上的区别。编程流程如下&#xff1a; socket()用来创建套接字&#xff0c;使用 udp 协议时&#xff0c;选择数据报服务 SOC…...

【opencv】多版本安装

安装opencv3.2.0以及对应的付费模块 一、安装多版本OpenCV如何切换 按照如下步骤安装的OpenCV&#xff0c;在CMakeLists.txt文件中&#xff0c;直接指定opencv的版本就可以找到相应版本的OpenCV&#xff0c;为了验证可以在CMakeLists.txt文件中使用如下指令输出版本验证&…...

webpack打包常用配置项

webpack打包配置项 参考链接 文件结构&#xff1a;最基础版 先安装 npm i webpack webpack-cli --dev 运行命令&#xff1a;npx webpack 进行打包 1. 配置webpack.config.js文件&#xff1a; const path require(path); module.exports {mode: development, // 开发环境 …...

回归预测 | MATLAB实现MPA-BiGRU海洋捕食者算法优化双向门控循环单元多输入单输出回归预测(多指标,多图)

回归预测 | MATLAB实现MPA-BiGRU海洋捕食者算法优化双向门控循环单元多输入单输出回归预测&#xff08;多指标&#xff0c;多图&#xff09; 目录 回归预测 | MATLAB实现MPA-BiGRU海洋捕食者算法优化双向门控循环单元多输入单输出回归预测&#xff08;多指标&#xff0c;多图&a…...

selenium_webdriver自动化测试指南

目录 1 引言 4 1.1 目的.. 4 1.2 背景.. 4 1.3 参考资料.. 4 2 安装并引用Selenium2. 5...

红米Note12Turbo解锁BL刷入PixelExperience原生ROM系统详细教程

红米Note12Turbo的兄弟是国外POCO F5 机型&#xff0c;并且该机性价比非常高&#xff0c;国内外销量也还可以&#xff0c;自然不缺第三方ROM适配。目前大家心心念念的原生PixelExperience已成功发布&#xff0c;并且相对来说&#xff0c;适配程度较高&#xff0c;已经达到日用的…...

NoSQL之Redis配置与优化(一)

关系数据库与非关系型数据库 &#xff1a; ●关系型数据库&#xff1a; 关系型数据库是一个结构化的数据库&#xff0c;创建在关系模型&#xff08;二维表格模型&#xff09;基础上&#xff0c;一般面向于记录。 SQL 语句&#xff08;标准数据查询语言&#xff09;就是一种基于…...

Boost搜索引擎

项目背景 先说一下什么是搜索引擎,很简单,就是我们平常使用的百度,我们把自己想要所有的内容输入进去,百度给我们返回相关的内容.百度一般给我们返回哪些内容呢?这里很简单,我们先来看一下. 搜索引擎基本原理 这里我们简单的说一下我们的搜索引擎的基本原理. 我们给服务器发…...

侧边栏的文章分类、热门文章和热门文章的展示(Go 搭建 qiucode.cn 之九)

早就有言,秋码记录 虽早已不是原来的面貌,但这终究是不防碍我们使用golang来搭建它。 而又为什么是使用golang呢?并非是其他编程语言呢?想必 时候回答【我为什么要学习 Go 语言(golang)】这个问题了 已经给出了答案! 当然,当初学习golang时,不单单是为了搭建一个博客应…...

LeetCode——贪心篇(二)

刷题顺序及思路来源于代码随想录&#xff0c;网站地址&#xff1a;https://programmercarl.com 134. 加油站 在一条环路上有 n 个加油站&#xff0c;其中第 i 个加油站有汽油 gas[i] 升。 你有一辆油箱容量无限的的汽车&#xff0c;从第 i 个加油站开往第 i1 个加油站需要消耗…...

Linux find

1.find介绍 linux查找命令find是linux运维中很重要、很常用的命令之一&#xff0c;find用于根据指定条件的匹配参数来搜索和查找文件和目录列表&#xff0c;我们可以通过权限、用户、用户组、文件类型、日期、大小等条件来查找文件。 2.find语法 find语法 find [查找路径] …...

UE4实现断线重连功能

断线重连的整体逻辑是 设备离线后&#xff0c;根据需要决定是否保留pawn&#xff0c;还是设备重连后再重新生成一个&#xff0c;然后是断线重连时的验证方式&#xff0c;最后是playerstate重连后的属性保留 重载Playercontroller的PawnLeavingGame,这里是设备断线后&#xff0…...

nginx笔记

1. nginx 简介 nginx性能比apache强&#xff0c;体现 在io模型方面 76 Pv&#xff1a; UV : 不同浏览器是不同的UV GET 获取 POST 上传 HEAT 只看头 访问网站的流程 1.dns解析 2.cdn 3.tcp 4.web服务器 处理 建立连接 接收请求 处理请求 GET POST等 获取资源 构…...

动态库的制作和使用

动态库和静态库的工作原理 配置环境变量 方式1&#xff1a; 坏处&#xff1a;环境变量是临时的 方式2&#xff1a; 1 用户级别的配置&#xff1a; 进入到/home&#xff0c;找到.bashrc&#xff0c;进入 先去找到库的路径 然后再到.bashrc最后一行输入路径 使其生效 2 系统…...

AWS Glue Pyspark+Athena基础学习汇总

Pyspark 基础学习汇总篇🍎 一、AWS 架构 ① AWS Glue:工作平台,包括脚本的编写以及管理脚本的运行状态以及调度等(主要:数据库配置、ETL和数据转换脚本编写、调度) ② Amazon S3 数据湖(数仓):数据的存储 ③ Athena:(雅典娜)SQL直接编写查询工作台(会产生费用) ④ Q…...

智能合约安全新范式,超越 `require`和`assert`

智能合约安全新范式&#xff0c;超越 require_assert 摘要 不要只为特定的函数写 require 语句&#xff1b;为你的协议写 require 语句。函数遵循检查(requirements)-生效(Effects)-交互(INteractions)协议不变性(Invariants)或 FREI-PI 模式可以帮助你的合约更加安全&#x…...

【ESP-S3-BOX-Lite花屏问题】:Github下载源码(出厂源码factory_demo)编译调试到ESP-S3-BOX-Lite中出现花屏现象

项目场景&#xff1a; 最近拿到了一块乐鑫的 ESP-S3-BOX-Lite &#xff08;esp-box: ESP-BOX 是乐鑫信息科技&#xff09; 详细资料&#xff08;esp32_s3_box_lite&#xff09; 版本信息 ESP-BOX依赖的 ESP-IDF分支信息支持状态master> release/v5.1 commit id: 22cfbf3…...

Redis集群3.2.11离线安装详细版本(使用Ruby)

1.安装软件准备 1.Redis版本下载 Index of /releases/http://download.redis.io/releases/ 1.2gcc环境准备 GCC(GNU Compiler Collection,GNU编译器套件)是一套用于编译程序代码的开源编译器工具集。它的主要用途是将高级编程语言(如C、C++、Fortran等)编写的源代码转换…...

Ansible自动化运维

目录 前言 一、概述 常见的开源自动化运维工具比较 二、ansible环境搭建 三、ansible模块 &#xff08;一&#xff09;、hostname模块 &#xff08;二&#xff09;、file模块 &#xff08;三&#xff09;、copy模块 &#xff08;四&#xff09;、fetch模块 &#xff…...

MSTP + Eth-Trunk配置实验 华为实验手册

1.1 实验介绍 1.1.1 关于本实验 以太网是当今现有局域网LAN&#xff08;Local Area Network&#xff09;采用的最通用的通信协议标准&#xff0c;以太网作为一种原理简单、便于实现同时又价格低廉的局域网技术已经成为业界的主流。 本实验主要介绍了LAN网络中的Eth-Trunk技术…...

滚动菜单 flutter

想实现这个功能&#xff1a; 下面的代码可以实现&#xff1a; import package:flutter/material.dart;void main() > runApp(MyApp());class MyApp extends StatelessWidget {static const String _title Flutter Code Sample;overrideWidget build(BuildContext context)…...

javaee springMVC数字类型转换之通过注解的方式

po 在属性上增加注解 NumberFormat(pattern “#,#.#”) package com.test.pojo;import org.springframework.format.annotation.DateTimeFormat; import org.springframework.format.annotation.NumberFormat;import java.util.Date;public class Users {private int uid;pr…...

SQL中CASE的用法

在SQL中&#xff0c;CASE语句是一种条件表达式&#xff0c;用于根据条件执行不同的操作。它有两种形式&#xff1a;简单CASE表达式和搜索CASE表达式。 简单CASE表达式的语法如下&#xff1a; CASE expressionWHEN value1 THEN result1WHEN value2 THEN result2...ELSE result …...

网站维护服务内容/汽油价格最新调整最新消息

如何构造预制体&#xff08;Prefab&#xff09;&#xff1f; 选择你需要作为预制体的物体 拖到Assets里面 如何去除物体挂载的脚本文件&#xff1f; 在组件栏操作 Alt鼠标左键、鼠标右键可以实现视角的转变 Box using System.Collections; using System.Collections.Generic…...

商业网站建设的方法/百度引流推广哪家好

摘要: css清除浮动float的三种方法总结&#xff0c;为什么清浮动&#xff1f;浮动会有那些影响&#xff1f;一、抛一块问题砖&#xff08;display&#xff1a; block&#xff09;先看现象&#xff1a; 分析HTML代码结构&#xff1a; <div class"outer"> &l…...

做资料网站违法/网站备案

lsof -i tcp:port eg: lsof -i tcp:8899 转载于:https://www.cnblogs.com/itdev/p/6379519.html...

汇编语言做网站/win7最好的优化软件

前些天摆弄java&#xff0c;参考一些资料写了个数据库连接池&#xff0c;对里面只产生一个实例的那种做法深表佩服&#xff0c;今天中午又听到别人在说设计模式&#xff0c;受不了了&#xff0c;就上网Down了点资料来。  一来就看到了Singleton模式&#xff0c;一看&#xff…...

专业响应式网站制作/百度的链接

1.ctrlaltt, 打开一个终端。 2.使用组合键 ctrlshiftt , 这时就在同一个窗口中打开了另一个终端&#xff0c;当然再按一次ctrlshiftt&#xff0c;会再生成一个&#xff0c;需要多少了大家可以自行决定。 3.按组合键Alt1&#xff0c;就会切换到第一个终端&#xff0c;按Alt2&a…...

注册网站会员需要填写信息/商丘搜索引擎优化

主要使用已经写好的JS插件&#xff0c;由于网上有很多&#xff0c;同时自己也可根据原理写出&#xff0c;但为了加快开发速度&#xff0c;我选择了能使用的&#xff0c;写得还不错的js http://pajhome.org.uk/crypt/md5/md5.html 然后可根据自己的需要去调用 欢迎大家阅览&…...