核酸检测信息管理系统
目录
- 前言
- 一、功能与需求分析
- 二、详细设计与实现
- 1、data包
- (1)Data+DataBase
- (2)NaPa+NamePassword
- 2、operation包
- (1)操作接口
- (2)Resident用户功能
- (3)Simper用户功能
- (4)Checker用户功能
- 3、user包
- (1)User类
- (2)Resident类
- (3)Samper类
- (4)Checker类
- 4、Main-系统逻辑主体
- 三、系统测试
- 1、系统注册/登录测试
- 2、Resident-居民功能测试
- 3、Samper-采样人员功能测试
- 4、Checker-检测人员功能测试
- 总结
前言
学习了那么久的Java语法,总体感觉就是Java的语法知识更抽象,知识点也更琐碎。所以是时候来使用学过的知识做一个Java小项目了,一方面是对学过知识的总结,另一方面也可以通过项目来提示自己的编程能力。疫情发展到今天正在逐渐成为过去式,为纪念当年与疫情作斗争的日子,那么下面就以《核酸检测信息管理系统》为这次项目的主题。
一、功能与需求分析
核酸检测信息管理系统顾名思义就是对核酸检测中产生的各种信息进行管理,其中可能包括一些用户的个人信息,账户信息等,同时还应具有将数据进行分类管理能力,给使用者提供一些便捷的管理接口等,具体需求大致分为如下三个部分:
1、系统设计的初衷: 该系统的目的是为了更好地管理核酸检测信息,使得居民、采样人员和检测人员能够高效地使用系统。
2、系统的用户: 居民、采样人员和检测人员是该系统的三类用户,每类用户都有一些特定的功能。
(1)居民用户的功能:居民用户可以使用系统进行核酸预约登记、查询预约信息、修改预约信息、删除预约信息以及检测报告查询。
(2)采样人员用户功能:采样人员用户可以使用系统查询已预约人员名单、采样信息录入和查询采样记录。
(3)检测人员用户功能:检测人员在这个系统中可以查询已采样人员名单、检测结果录入和查询检测记录。
3、其他基本功能:
(1)该系统应分类管理不同用户的访问权限,以免发生访问冲突。
(2)该系统应具有数据存储的能力。需要支持用户数据的存储,以便对数据信息进行有效的检索和操作。
(3)该系统应具有最基本的登录验证功能,保护系统和用户信息的安全。
基于面向对象的设计思想,结合以上需求,我们可以画出如下具体业务流程图:

二、详细设计与实现
为了能够对系统内各部分信息,以及系统的各部分功能进行更好的分类管理,这里建了3个包和一个主函数:

1、data包
data包是系统的信息区,主要包含了用户核酸检测的个人信息、用户的账号和密码信息。这里面的信息也是之后operation包中各个功能类操作的信息来源,可以说是整个系统的基础核心。
(1)Data+DataBase
Data类中是系统中核酸检测所需的各种信息,这里对这些信息采用了private封装,仅提供对外的set和get方法便于之后对这些信息的处理。同时增加了一些基本信息的构造方法,方便对用户基本信息的初始化。最后便于信息的显示,重写了Data类下的toString方法。
package data;public class Data {private String name;//姓名private String id;//身份证号private String phone;//手机号private String type;//预约类型private boolean isOrdered;//是否已预约private boolean isSampled;//是否已采样private boolean isChecked;//是否已检测private boolean isNegative;//是否阴性public Data(String name, String id, String phone, String type) {this.name = name;this.id = id;this.phone = phone;this.type = type;}public String getName() {return name;}public void setName(String name) {this.name = name;}public String getId() {return id;}public void setId(String id) {this.id = id;}public String getPhone() {return phone;}public void setPhone(String phone) {this.phone = phone;}public String getType() {return type;}public void setType(String type) {this.type = type;}public boolean isOrdered() {return isOrdered;}public void setOrdered(boolean ordered) {isOrdered = ordered;}public boolean isSampled() {return isSampled;}public void setSampled(boolean sampled) {isSampled = sampled;}public boolean isChecked() {return isChecked;}public void setChecked(boolean checked) {isChecked = checked;}public boolean isNegative() {return isNegative;}public void setNegative(boolean negative) {isNegative = negative;}@Overridepublic String toString() {return "Resident{" +"name='" + name + '\'' +", id='" + id + '\'' +", phone='" + phone + '\'' +", type='" + type + '\'' +", isOrdered=" + (isOrdered==false?"未预约":"已预约") +", isSampled=" + (isSampled==false?"未采样":"已采样") +", isChecked=" + (isChecked==false?"未检测":"已检测") +'}';}
}
DataBase类是一个基于Data类的信息库,可以将Data类理解为一本书、那么DataBase就是相当于书架的存在。DataBase提供了一个容纳信息的容器Data[] datas = new Data[100],之后系统中的用户信息统一交给DataBase储存管理,之后对信息的各种操作也要通过DataBase进行。
package data;public class DataBase {Data[] datas = new Data[100];private String checkInstation;//private int containSize=0;//当前信息容量public DataBase() {datas[0]=new Data("张三","111111111111111111","11111119876","单采");datas[1]=new Data("李四","222222222222222222","11111118765","单采");datas[2]=new Data("王五","333333333333333333","11111117654","单采");datas[3]=new Data("赵六","444444444444444444","11111116543","混采");datas[4]=new Data("路人甲","555555555555555555","11111115432","混采");datas[5]=new Data("路人乙","666666666666666666","11111114321","混采");datas[0].setOrdered(true);datas[1].setOrdered(true);datas[2].setOrdered(true);datas[3].setOrdered(true);datas[4].setOrdered(true);datas[5].setOrdered(true);containSize=6;}public int getContainSize() {return containSize;}public void setContainSize(int containSize) {this.containSize = containSize;}public Data getData(int pos) {return datas[pos];}public void setData(Data data) {this.datas[containSize]=data;}public void setData(int pos,Data data) {this.datas[pos]=data;}public String getCheckInstation() {return checkInstation;}public void setCheckInstation(String checkInstation) {this.checkInstation = checkInstation;}
}
(2)NaPa+NamePassword
NaPa类定义了用户账号密码的基本信息,使用private修饰账户信息,并对外提供了一些get和set方法方便对账户信息进行必要更改。同时提供构造方法,方便信息初始化。
package data;public class NaPa {String name;String password;public NaPa(String name, String password) {this.name = name;this.password = password;}public String getName() {return name;}public void setName(String name) {this.name = name;}public String getPassword() {return password;}public void setPassword(String password) {this.password = password;}
}
NamePassword类是专门用来存储用户账号密码的信息库,其作用相当于上面的DataBase类。之后用户的登录/注册以及身份验证都需要通过访问NamePassword类进行。
package data;public class NamePassword {private NaPa[] naPas = new NaPa[100];private int NPnubmer;public NamePassword() {naPas[0]=new NaPa("张三","123456");naPas[1]=new NaPa("李四","666666");naPas[2]=new NaPa("王五","7777777");NPnubmer=3;}public int getNPnubmer() {return NPnubmer;}public void setNPnubmer(int NPnubmer) {this.NPnubmer = NPnubmer;}public void setNaPas(String name,String password) {NaPa naPa = new NaPa(name,password);naPas[NPnubmer]=naPa;}public NaPa getNapas(int pos) {return naPas[pos];}
}
2、operation包
operation包中的类是操作类,是对用户的在系统的的功能权限进行了具体的实现。为方便管理,这些类统一实现了IOperation接口,之后通过IOperation接口统一调用,这里也是使用到了多态的设计思想。这里的每个类都对应这系统流程中的一个功能,这些功能可以根据具体的业务需求进行实现,这里博主只是根据自己的理解进行实现,所以下面就给出各个类的代码,不再详细介绍每种实现方式,大家可以以此作为参考:
(1)操作接口
package operation;
import data.DataBase;
import java.util.Scanner;public interface IOperation {Scanner scanner = new Scanner(System.in);void work(DataBase dataBase);
}
(2)Resident用户功能
0.退出当前系统
package operation;import data.DataBase;public class ExitChild implements IOperation{@Overridepublic void work(DataBase dataBase) {System.out.println("已退出当前系统!");}
}
1.核酸预约登记
import data.Data;
import data.DataBase;public class Register implements IOperation {@Overridepublic void work(DataBase dataBase) {System.out.println("核酸预约登记!");System.out.print("请输入你的姓名:");String name = scanner.nextLine();System.out.print("请输入你的身份证号:");String id = scanner.nextLine();System.out.print("请输入你的手机号:");String phone = scanner.nextLine();System.out.print("请输入预约类型:(单采/混采):");String type = scanner.nextLine();//判断是否预约过-按id在DataBase查找int currentSize=dataBase.getContainSize();for (int i = 0; i < currentSize; i++) {if (dataBase.getData(i).getId().equals(id)) {System.out.println("已存在身份证号为:"+id+"的预约信息!");return;}}Data data = new Data(name,id,phone,type);dataBase.setData(data);data.setOrdered(true);dataBase.setContainSize(currentSize+1);//踩坑了System.out.println("预约成功!");}
}
2.预约信息查询
package operation;
import data.DataBase;
public class SearchRegister implements IOperation {@Overridepublic void work(DataBase dataBase) {System.out.println("预约信息查询!");System.out.print("请输入您的身份证号:");String id = scanner.nextLine();int currentSize=dataBase.getContainSize();for (int i = 0; i < currentSize; i++) {if (dataBase.getData(i).getId().equals(id)) {System.out.println("预约人:"+dataBase.getData(i).getName());System.out.println("身份证号:"+dataBase.getData(i).getId());System.out.println("手机号:"+dataBase.getData(i).getPhone());System.out.println("预约状态:已预约");return;}}System.out.println("不存在预约信息,请先预约!");}
}
3.预约信息修改
package operation;
import data.DataBase;
public class ModifyRegister implements IOperation {@Overridepublic void work(DataBase dataBase) {System.out.println("预约信息修改!");System.out.print("请输入您的身份证号:");String id = scanner.nextLine();int currentSize=dataBase.getContainSize();for (int i = 0; i < currentSize; i++) {if (dataBase.getData(i).getId().equals(id)) {System.out.println("找到预约信息,请修改:");System.out.print("请输入修改姓名:");String name = scanner.nextLine();System.out.print("请输入修改身份证号:");id = scanner.nextLine();System.out.print("请输入修改电话:");String phone = scanner.nextLine();System.out.print("请输入修改采样类型:(单采/混采):");String type = scanner.nextLine();dataBase.getData(i).setName(name);dataBase.getData(i).setId(id);dataBase.getData(i).setPhone(phone);dataBase.getData(i).setType(type);System.out.println("修改信息成功!");return;}}System.out.println("不存在预约信息,请先预约!");}
}
4.预约信息删除
package operation;
import data.Data;
import data.DataBase;
public class DelRegister implements IOperation {@Overridepublic void work(DataBase dataBase) {System.out.println("预约信息删除!");System.out.print("请输入需要删除人员的身份证号:");String id = scanner.nextLine();int currentSize=dataBase.getContainSize();for (int i = 0; i < currentSize; i++) {if (dataBase.getData(i).getId().equals(id)) {for (int j = i; j < currentSize-1; j++) {Data data = dataBase.getData(j+1);dataBase.setData(j,data);}dataBase.setData(currentSize-1,null);dataBase.setContainSize(currentSize-1);System.out.println("已删除id="+id+"的预约信息!");return;}}System.out.println("未找到预约信息,请先预约!");}
}
5.核酸报告查询
package operation;
import data.Data;
import data.DataBase;
public class SearchResult implements IOperation {@Overridepublic void work(DataBase dataBase) {System.out.println("检测报告查询!");System.out.print("请输入你的姓名:");String name = scanner.nextLine();System.out.print("请输入你的身份证号:");String id = scanner.nextLine();int currentSize=dataBase.getContainSize();for (int i = 0; i < currentSize; i++) {Data data = dataBase.getData(i);if (data.getId().equals(id)) {if (!data.isSampled()) {System.out.println("当前状态:未采样");return;}if (!data.isChecked()) {System.out.println("当前状态:未检测");return;}System.out.println("┌-----------------------------┐");System.out.println("你好 "+name+" 您的核酸检测信息如下:");System.out.println("身份证号:"+id);System.out.println("检测机构:"+dataBase.getCheckInstation());System.out.println("检测结果:"+(!data.isNegative()?"阴性":"阳性"));System.out.println("└-----------------------------┘");}}}}
(3)Simper用户功能
1.查询已预约人员名单
package operation;
import data.DataBase;
public class Registerlist implements IOperation {@Overridepublic void work(DataBase dataBase) {System.out.println("已预约人员名单!");int currentSize=dataBase.getContainSize();for (int i = 0; i < currentSize; i++) {System.out.println(dataBase.getData(i));}}
}
2.采样信息录入
package operation;
import data.DataBase;
public class SampleEnter implements IOperation {@Overridepublic void work(DataBase dataBase) {System.out.println("采样信息录入!");System.out.print("请输入手机尾号后四位:");String temPhone = scanner.nextLine();int currentSize=dataBase.getContainSize();for (int i = 0; i < currentSize; i++) {String splitPhone = dataBase.getData(i).getPhone().substring(dataBase.getData(i).getPhone().length()-4);if (temPhone.equals(splitPhone)) {dataBase.getData(i).setSampled(true);System.out.println("手机尾号为"+splitPhone+" 已采样完毕!");return;}}System.out.println("未找到尾号为"+temPhone+"的预约信息,采样失败!");}
}
3.查询采样记录
package operation;
import data.Data;
import data.DataBase;
public class SearchSampled implements IOperation{@Overridepublic void work(DataBase dataBase) {System.out.println("查询采样记录!");System.out.println("已采样人员:");int currentSize=dataBase.getContainSize();for (int i = 0; i < currentSize; i++) {Data data = dataBase.getData(i);if (data.isSampled()) {System.out.println(data.getName() + data.getPhone() + "已采样");}}System.out.println("未采样人员:");for (int i = 0; i < currentSize; i++) {Data data = dataBase.getData(i);if (!data.isSampled()) {System.out.println(data.getName() + data.getPhone() + "未采样");}}}
}
(4)Checker用户功能
1.查询已采样人员名单
package operation;
import data.Data;
import data.DataBase;
public class SampleList implements IOperation {@Overridepublic void work(DataBase dataBase) {System.out.println("已采样人员名单!");int currentSize=dataBase.getContainSize();for (int i = 0; i < currentSize; i++) {Data data = dataBase.getData(i);if (data.isSampled()) {System.out.println(data);}}}
}
2.样本检测结果输入
package operation;
import data.DataBase;
public class CheckEnter implements IOperation {@Overridepublic void work(DataBase dataBase) {System.out.println("样本检测结果录入!");System.out.print("请输入手机尾号后四位:");String temPhone = scanner.nextLine();int currentSize=dataBase.getContainSize();for (int i = 0; i < currentSize; i++) {String splitPhone = dataBase.getData(i).getPhone().substring(dataBase.getData(i).getPhone().length()-4);if (temPhone.equals(splitPhone)) {dataBase.getData(i).setChecked(true);System.out.println("请输入检测结果:(1.阴性 2.阳性)");int choice = scanner.nextInt();scanner.nextLine();//读取回车符号if(choice==2) {dataBase.getData(i).setNegative(true);}System.out.println("手机尾号为"+splitPhone+" 的居民检测结果录入完毕!");return;}}System.out.println("未找到尾号为"+temPhone+"的采样信息,检测失败!");}
}
3.查询检测记录
package operation;
import data.Data;
import data.DataBase;
public class SearchChecked implements IOperation {@Overridepublic void work(DataBase dataBase) {System.out.println("查询检测记录!");System.out.println("已检测人员:");int currentSize=dataBase.getContainSize();for (int i = 0; i < currentSize; i++) {Data data = dataBase.getData(i);if (data.isChecked()) {System.out.println(data.getName() + data.getPhone() + "已检测");}}System.out.println("未检测人员:");for (int i = 0; i < currentSize; i++) {Data data = dataBase.getData(i);if (!data.isChecked()) {System.out.println(data.getName() + data.getPhone() + "未检测");}}}
}
3、user包
user包下是本系统的三类用户Resident-居民、Samper-采样人员、Checker-检测人员。经分析,无论是居民、采样人员还是检测人员,在系统中它们都属于用户,所以在user包下可以将用户抽象成一个类User,将Resident、Samper、Checker看成User的子类,并且这样处理也是方便了对用户的统一管理,之后可以在Main中直接通过操控父类User,利用多态的思想就能实现对各用户的分类管理。
(1)User类
为了在使用User类时实现对三类不同用户的管理即多态,首先这里声明了一个抽象方法menu,在后续Resident、Samper、Checker中可以分别按需实现不同的菜单menu,另外在User中提供了IOperation接口数组、doWork方法,通过统一调用doWork方法再根据用户选择后菜单中的返回值choice,可以在接口数组中根据下标找到相应的功能,最后通过IOperation接口实现对业务的统一调用。当然至于IOperation数组的实现可以放到后续的Resident、Samper、Checker中分别进行具体的实现。用IOperation接口数组实现各个菜单下的多态,对于没有相关设计经验的小白来说,这也是本系统的难点,希望可以对这点多加体会。
package user;
import data.DataBase;
import operation.IOperation;public abstract class User {public abstract int menu();IOperation[] iOperation;public void doWork(int choice, DataBase dataBase) {iOperation[choice].work(dataBase);}
}
(2)Resident类
package user;
import operation.*;
import java.util.Scanner;
public class Resident extends User{public Resident() {super.iOperation=new IOperation[] {new ExitChild(),new Register(),new SearchRegister(),new ModifyRegister(),new DelRegister(),new SearchResult()};}@Overridepublic int menu() {Scanner scanner = new Scanner(System.in);System.out.println("************* 欢迎来到核酸信息管理系统! **************");System.out.println("1.核酸预约登记");System.out.println("2.预约信息查询");System.out.println("3.预约信息修改");System.out.println("4.预约信息删除");System.out.println("5.检测报告查询");System.out.println("0.退出当前系统");System.out.print("请选择你的操作:");int choice = scanner.nextInt();return choice;}
}
(3)Samper类
package user;
import operation.*;
import java.util.Scanner;
public class Samper extends User {public Samper() {super.iOperation=new IOperation[] {new ExitChild(),new Registerlist(),new SampleEnter(),new SearchSampled()};}@Overridepublic int menu() {Scanner scanner = new Scanner(System.in);System.out.println("************* 欢迎来到核酸信息管理系统! **************");System.out.println("1.查询已预约人员名单");System.out.println("2.采样信息录入");System.out.println("3.查询采样记录");System.out.println("0.退出当前系统");System.out.print("请选择你的操作:");int choice = scanner.nextInt();return choice;}
}
(4)Checker类
package user;
import operation.*;
import java.util.Scanner;
public class Checker extends User{public Checker() {super.iOperation=new IOperation[] {new ExitChild(),new SampleList(),new CheckEnter(),new SearchChecked()};}@Overridepublic int menu() {Scanner scanner = new Scanner(System.in);System.out.println("************* 欢迎来到核酸信息管理系统! **************");System.out.println("1.查询已采样人员名单");System.out.println("2.样本检测结果录入");System.out.println("3.查询检测记录");System.out.println("0.退出当前系统");System.out.print("请选择你的操作:");int choice = scanner.nextInt();return choice;}
}
4、Main-系统逻辑主体
Main类是整个系统的入口,同时起到了将上述内容合理串联起来的作用。其中包含了登录/注册、身份选择、异常处理。
import data.DataBase;
import data.NamePassword;
import user.*;import java.util.ArrayList;
import java.util.Scanner;class InvalidUsernameException extends RuntimeException {//帮助父类构造public InvalidUsernameException(String message) {super(message);}
}class InvalidPasswordException extends RuntimeException {//帮助父类构造public InvalidPasswordException(String message) {super(message);}
}public class Main {//登录注册函数:public static void sign(NamePassword namePassword) {Scanner scanner = new Scanner(System.in);while (true) {System.out.println("1.登录 2.注册");System.out.print("请输入你的选择:");int choice = scanner.nextInt();scanner.nextLine();//读取/nif (choice==1) {System.out.print("请输入你的用户名:");String name = scanner.nextLine();System.out.print("请输入你的密码:");String password = scanner.nextLine();int i=0;for (i = 0; i < namePassword.getNPnubmer(); i++) {if (name.equals(namePassword.getNapas(i).getName())) {break;}}if (i==namePassword.getNPnubmer()) {throw new InvalidUsernameException("用户名错误!");}int j=0;for (j = 0; j < namePassword.getNPnubmer(); j++) {if (password.equals(namePassword.getNapas(i).getPassword())) {return;}}if (j==namePassword.getNPnubmer()) {throw new InvalidPasswordException("密码错误!");}} else if (choice==2) {int currentNumber = namePassword.getNPnubmer();System.out.print("请输入你的用户名:");String name = scanner.nextLine();System.out.print("请输入你的密码:");String password = scanner.nextLine();namePassword.setNaPas(name,password);namePassword.setNPnubmer(currentNumber+1);System.out.println("注册成功!");} else {System.out.println("输入错误,请重新输入!");}}}//登录验证和身份选择public static User login(DataBase dataBase,NamePassword namePassword) {Scanner scanner = new Scanner(System.in);System.out.println("1.居民 2.采样人员 3.检测人员 0.退出系统");System.out.print("请输入你的身份:");int id=scanner.nextInt();scanner.nextLine();// 处理无效选择:if(id==0) {System.out.println("已退出核酸检测信息管理系统!");System.exit(0);return null;}if (id!=1 && id!=2 && id!=3) {System.out.println("无效选择,退出系统!");System.exit(1);}//处理登录异常异常try{sign(namePassword);System.out.println("登录成功!");} catch (InvalidUsernameException e) {System.out.println(e);System.out.println("登录异常,退出系统!");System.exit(1);} catch (InvalidPasswordException e) {System.out.println(e);System.out.println("登录异常,退出系统!");System.exit(1);}// 处理有效选择:if(id==1) {return new Resident();}if(id==2) {return new Samper();}if (id==3){System.out.print("请输入检测机构:");String station=scanner.nextLine();dataBase.setCheckInstation(station);return new Checker();}return null;}//系统的入口,对整体逻辑进行组织public static void main(String[] args) {NamePassword namePassword = new NamePassword();DataBase dataBase=new DataBase();while (true) {int choice=1;User user = login(dataBase,namePassword);while (choice!=0) {choice=user.menu();user.doWork(choice,dataBase);}}}
}
三、系统测试
1、系统注册/登录测试

2、Resident-居民功能测试

3、Samper-采样人员功能测试

4、Checker-检测人员功能测试

总结
以上就是《核酸检测信息管理系统》的全部设计与实现了,其实如果你仔细观察Main类的话,可以发现整个系统也就是通过User类和IOperation接口实现统领全局的,通过User类可以实现对三种用户的跳转,通过IOperation接口又可以实现各用户下的不同功能。可以说多态的思想在User类和IOperation接口中体现的淋漓尽致!
同时本系统设计的一个难点在于通过IOperation接口数组的下标,实现对不同用户菜单下的多态控制,这里希望大家能够多多体会,在实践中加深理解。最后希望通过对系统设计的阐述能够给你带来一些启发,如果想参考本章节系统的完整源码,大家可以在我的Gitee仓库获取:《核酸检测信息管理系统》
相关文章:
核酸检测信息管理系统
目录前言一、功能与需求分析二、详细设计与实现1、data包(1)DataDataBase(2)NaPaNamePassword2、operation包(1)操作接口(2)Resident用户功能(3)Simper用户功…...
典型回溯题目 - 全排列(一、二)
典型回溯题目 - 全排列(一、二) 46. 全排列 题目链接:46. 全排列状 题目大意: 给定一个不含重复数字的数组 nums ,返回其 所有可能的全排列 。你可以 按任意顺序 返回答案。 注意:(1…...
数据清洗和特征选择
数据清洗和特征选择 数据清洗和特征挖掘的工作是在灰色框中框出的部分,即“数据清洗>特征,标注数据生成>模型学习>模型应用”中的前两个步骤。 灰色框中蓝色箭头对应的是离线处理部分。主要工作是 从原始数据,如文本、图像或者应…...
java StringBuilder 和 StringBuffer 万字详解(深度讲解)
StringBuffer类介绍和溯源StringBuffer类常用构造器和常用方法StringBuffer类 VS String类(重要)二者的本质区别(含内存图解)二者的相互转化StringBuilder类介绍和溯源StringBuilder类常用构造器和常用方法String类,St…...
【Linux】帮助文档查看方法
目录1 Linux帮助文档查看方法1.1 man1.2 内建命令(help)1 Linux帮助文档查看方法 1.1 man man 是 Linux 提供的一个手册,包含了绝大部分的命令、函数使用说明。 该手册分成很多章节(section),使用 man 时可以指定不同的章节来浏…...
UEFI 实战(2) HelloWorld 之一 helloworld及.inf文件
初识UEFI 按惯例,首先让我们用HelloWorld跟UEFI打个招呼吧 标准application /*main.c */ #include <Uefi.h> EFI_STATUS UefiMain ( IN EFI_HANDLE ImageHandle, IN EFI_SYSTEM_TABLE *SystemTable ) { SystemTable -> ConOut-> OutputString(SystemTab…...
向2022年度商界木兰上榜女性致敬!
目录 信息来源: 2022年度商界木兰名单 简介 评选标准 动态 榜单 为你心中的2023商界女神投上一票 信息来源: 2022年度商界木兰榜公布 华为孟晚舟获商界木兰最高分 - 脉脉 【最具影响力女性】历届商界木兰榜单 中国最具影响力的30位商界女性名单…...
ChatGPT助力校招----面试问题分享(二)
1 ChatGPT每日一题:DC-DC与LDO的区别 问题:介绍一下DC-DC与LDO的区别 ChatGPT:DC-DC和LDO都是电源管理电路,它们的主要作用是将输入电压转换为所需的输出电压,以供电子设备使用。但是,它们之间存在一些重…...
JAVA架构与开发(JAVA架构是需要考虑的几个问题)
在企业中JAVA架构师主要负责企业项目技术架构,企业技术战略制定,技术框架搭建,技术培训和技术攻坚的工作。 在JAVA领域,比较多的都是web项目。用于解决企业的数字化转型。对于JAVA架构师而言,平时对项目的架构主要考虑…...
vue 中 v-for 的使用
v-for 获取列表的前 n 条、中间范围、末尾 n 条的数据 list: [{ img: /static/home/news1.png, title: 标题1 },{ img: /static/home/news2.png, title: 标题2 },{ img: /static/home/news1.png, title: 标题3 },{ img: /static/home/news2.png, title: 标题4 },{ img: /stati…...
项目--基于RTSP协议的简易服务器开发(2)
一、项目创立初衷: 由于之前学过计算机网络的相关知识,了解了计算机网络的基本工作原理,对于主流的协议有一定的了解。但对于应用层的协议还知之甚少,因此我去了解了下目前主要的应用层传输协议,发现RTSP(…...
ubus编译_环境搭建
文章目录一、环境搭建脚本toolChain_jsonc.cmaketoolChain_libubox.cmaketoolChain_ubus.cmakeinstall.sh二、测试出现问题:三、测试uloopmain.c 每5s打印信息一、环境搭建脚本 准备四个文件 install.sh,toolChain_jsonc.cmake,toolChain_libubox.cmake,toolChai…...
移动通信(16)信号检测
常见的信号检测算法一般包括以下几类检测算法:最优、线性和非线性。最优检测算法:最大似然算法线性检测算法:迫零检测算法和最小均方误差检测算法非线性检测算法:串行干扰消除检测算法球形译码检测算法属于一种次优检测算法&#…...
数据结构与算法之《顺序表》
目录 1.什么是顺序表 顺序表的优势和缺点 顺序表预备知识 顺序表的代码实现 顺序表头部插入 顺序表的销毁 顺序表的头删 顺序表的尾删 顺序表的尾插 顺序表的任意位置插入 顺序表的查找 顺序表的打印 1.什么是顺序表 这篇文章我们来讲一下基础数据结构的顺序表&…...
MySQL索引15连问,抗住!
1. 索引是什么?索引是一种能提高数据库查询效率的数据结构。它可以比作一本字典的目录,可以帮你快速找到对应的记录。索引一般存储在磁盘的文件中,它是占用物理空间的。正所谓水能载舟,也能覆舟。适当的索引能提高查询效率&#x…...
【服务器管理】手动部署LNMP环境(CentOS 8)(非阿里云版本)
简述 如果是你是阿里云的服务器,我推荐你看引用的文章,本文也是参考了很多这篇文章的内容。 https://help.aliyun.com/document_detail/173042.htm 系统版本: CentOS 8 其实CentOS 7的版本可能更好安装一点,但是我有个服务推荐使…...
论文笔记:Positive-incentive Noise
2022 TNNLS 中心思想是:噪声并不一定是有害的 1 CV问题中的噪声 以图像分类为例 对图像加入适量的噪声后再训练,识别准确率反而上升了 再以目标检测为例: 从遥感影像中做飞机检测,一般都是把飞机紧紧框住,然后做…...
340秒语音芯片,轻松实现语音交互,畅享智能生活WTV380语音ic方案
随着智能家居、安防报警、宠物用品 等,智能设备的普及,语音交互技术正在逐渐成为人机交互的主要方式之一。而如何实现稳定高效的语音交互,就需要借助先进的语音芯片技术。今天,我们介绍的是一款高性能的语音芯片——WTV380&#x…...
有java基础学习大数据该如何规划
大数据开发对于Java语言的依赖程度比较高,如果想尝试大数据开发,学习过Java语言就很容易上手 Java是目前使用广泛的编程语言之一,具有的众多特性,特别适合作为大数据应用的开发语言。 目前很多大数据开发团队都在使用Java语言&a…...
【Java基础】HashMap的底层数据结构是怎样的?
HashMap就是以Key-Value的方式进行数据存储的一种数据结构。 HashMap在jdk1.7之前和jdk1.8之后的底层数据结构是不一样的。 在jdk1.7之前是数组链表的形式,并通过entry节点保存key和value值;当Hash冲突比较严重的时候,在数组上形成的链表就会…...
设计模式和设计原则回顾
设计模式和设计原则回顾 23种设计模式是设计原则的完美体现,设计原则设计原则是设计模式的理论基石, 设计模式 在经典的设计模式分类中(如《设计模式:可复用面向对象软件的基础》一书中),总共有23种设计模式,分为三大类: 一、创建型模式(5种) 1. 单例模式(Sing…...
基于ASP.NET+ SQL Server实现(Web)医院信息管理系统
医院信息管理系统 1. 课程设计内容 在 visual studio 2017 平台上,开发一个“医院信息管理系统”Web 程序。 2. 课程设计目的 综合运用 c#.net 知识,在 vs 2017 平台上,进行 ASP.NET 应用程序和简易网站的开发;初步熟悉开发一…...
Python:操作 Excel 折叠
💖亲爱的技术爱好者们,热烈欢迎来到 Kant2048 的博客!我是 Thomas Kant,很开心能在CSDN上与你们相遇~💖 本博客的精华专栏: 【自动化测试】 【测试经验】 【人工智能】 【Python】 Python 操作 Excel 系列 读取单元格数据按行写入设置行高和列宽自动调整行高和列宽水平…...
线程同步:确保多线程程序的安全与高效!
全文目录: 开篇语前序前言第一部分:线程同步的概念与问题1.1 线程同步的概念1.2 线程同步的问题1.3 线程同步的解决方案 第二部分:synchronized关键字的使用2.1 使用 synchronized修饰方法2.2 使用 synchronized修饰代码块 第三部分ÿ…...
工程地质软件市场:发展现状、趋势与策略建议
一、引言 在工程建设领域,准确把握地质条件是确保项目顺利推进和安全运营的关键。工程地质软件作为处理、分析、模拟和展示工程地质数据的重要工具,正发挥着日益重要的作用。它凭借强大的数据处理能力、三维建模功能、空间分析工具和可视化展示手段&…...
Cinnamon修改面板小工具图标
Cinnamon开始菜单-CSDN博客 设置模块都是做好的,比GNOME简单得多! 在 applet.js 里增加 const Settings imports.ui.settings;this.settings new Settings.AppletSettings(this, HTYMenusonichy, instance_id); this.settings.bind(menu-icon, menu…...
什么是EULA和DPA
文章目录 EULA(End User License Agreement)DPA(Data Protection Agreement)一、定义与背景二、核心内容三、法律效力与责任四、实际应用与意义 EULA(End User License Agreement) 定义: EULA即…...
JDK 17 新特性
#JDK 17 新特性 /**************** 文本块 *****************/ python/scala中早就支持,不稀奇 String json “”" { “name”: “Java”, “version”: 17 } “”"; /**************** Switch 语句 -> 表达式 *****************/ 挺好的ÿ…...
【JavaSE】绘图与事件入门学习笔记
-Java绘图坐标体系 坐标体系-介绍 坐标原点位于左上角,以像素为单位。 在Java坐标系中,第一个是x坐标,表示当前位置为水平方向,距离坐标原点x个像素;第二个是y坐标,表示当前位置为垂直方向,距离坐标原点y个像素。 坐标体系-像素 …...
Linux 中如何提取压缩文件 ?
Linux 是一种流行的开源操作系统,它提供了许多工具来管理、压缩和解压缩文件。压缩文件有助于节省存储空间,使数据传输更快。本指南将向您展示如何在 Linux 中提取不同类型的压缩文件。 1. Unpacking ZIP Files ZIP 文件是非常常见的,要在 …...
