IO+集合简易快递管理与图书管理
一.IO快递管理
任务需求
这里我们采用Map集合的方式来实现(数据存储)
首先定义一个储存类,实现快递的存储,此类要使用Serializable接口类用以标识,我们把描述对象状态的数值写入字节流的过程称为对象序列化。对象序列化就是把一个对象的状态即成员变量记录下来。
用户自己定义的类需要序列化时,必须实现Serializable接口。这个接口不包含任何需要实现的方法。Serializable接口包含在java.io包中。
序列化是将对象的状态写入到特定的流中的过程。而反序列化则是从特定的流中获取数据重新构建对象的过程。
/*** 序列化IO存储* @author 26591*/
public class Express implements Serializable {private String number;private String company;private int code;private int x;private int y;public int getX() {return x;}public void setX(int x) {this.x = x;}public int getY() {return y;}public void setY(int y) {this.y = y;}public Express(String number, String company, int code, int x, int y) {this.number = number;this.company = company;this.code = code;this.x = x;this.y = y;}public Express() {//}public String getNumber() {return number;}public void setNumber(String number) {this.number = number;}public String getCompany() {return company;}public void setCompany(String company) {this.company = company;}public int getCode() {return code;}public void setCode(int code) {this.code = code;}@Overridepublic boolean equals(Object o) {if (this == o) return true;if (o == null || getClass() != o.getClass()) return false;Express express = (Express) o;return code == express.code &&x == express.x &&y == express.y &&Objects.equals(number, express.number) &&Objects.equals(company, express.company);}@Overridepublic int hashCode() {return Objects.hash(number, company, code, x, y);}@Overridepublic String toString() {return "Express{" +"number='" + number + '\'' +", company='" + company + '\'' +", code=" + code +", x=" + x +", y=" + y +'}';}
}
视图展示(View)
public class View {private Scanner input = new Scanner(System.in);/*** 欢迎*/public void welconme() {System.out.println("欢迎使用XXX快递管理系统");}/*** 再见*/public void bye() {System.out.println("欢迎下次使用");}/*** 选择身份的菜单** @return*/public int menu() {System.out.println("请根据提示,选择身份序号");System.out.println("请输入您的身份:1-快递员 2-用户 0-退出");/*这里的代码逻辑相较于.nextInt的优点在哪?从全局代码来看使用nextLine,不会因为输入产生冲突,还可以更好的接收各种类型的数据*/String text = input.nextLine();int num = -1;try {num = Integer.parseInt(text);//将字符串转换为数字} catch (NumberFormatException e) {}if (num < 0 || num > 2) {System.out.println("输入有误,请重新输入");return menu();}return num;}/*** 快递员菜单** @return*/public int cmenu() {System.out.println("请根据提示,输入功能序号");System.out.println("1.快递录入");System.out.println("2.快递修改");System.out.println("3.快递删除");System.out.println("4.查看所有快递");System.out.println("0.返回上级目录");String text = input.nextLine();int num = -1;try {num = Integer.parseInt(text);//将字符串转换为数字} catch (NumberFormatException e) {}if (num < 0 || num > 4) {//输入有误return menu();}return num;}/*** 快递员录入快递** @return 包含了快递单号和快递公司的快递对象*/public Express insert() {System.out.println("请根据提示,输入快递信息");System.out.println("请输入快递单号");String number = input.nextLine();//单号System.out.println("请输入快递公司");String company = input.nextLine();//公司Express e = new Express();e.setCompany(company);e.setNumber(number);return e;}/*** 提示用户输入快递单号** @return*/public String findbyNumber() {//查询快递数据,并取出System.out.println("请根据提示,输入快递信息");System.out.println("请输入要操作快递单号");String number = input.nextLine();return number;}/*** 显示快递信息** @param e*/public void printExpress(Express e) {//打印查到的快递信息System.out.println("快递信息如下:");System.out.println("快递公司:" + e.getCompany() + ",快递单号:" + e.getNumber() + "取件码:" + e.getCode());}public void printnull() {System.out.println("查询不到该快递,请检查您的输入");}/*** 修改快递信息** @param e*/public void update(Express e) {System.out.println("请根据提示,输入新的快递单号");String number = input.nextLine();System.out.println("请输入新的快递公司");String company = input.nextLine();e.setNumber(number);e.setCompany(company);}/*** 询问是否确认删除** @return 1表示确认,2表示取消操作*/public int delete() {System.out.println("是否确认删除?");System.out.println("1确认删除-2取消操作-0退出");String text = input.nextLine();int num = -1;try {num = Integer.parseInt(text);//将字符串转换为数字} catch (NumberFormatException e) {//不是数字不做处理}if (num < 0 || num > 2) {System.out.println("输入有误,请重新输入");return delete();}return num;}/*** 将给定数组的快递信息 遍历显示** @param es*/public void printAll(Express[][] es) {int count = 0;for (int i = 0; i < 10; i++) {for (int j = 0; j < 10; j++) {if (es[i][j] != null) {count++;System.out.print("第" + (i + 1) + "排 " + (j + 1) + "列快递 ,");printExpress(es[i][j]);}}}if (count == 0) {System.out.println("暂无快递信息");}}/*** 用户菜单** @return*/public int user() {System.out.println("请根据提示,进行取件:");System.out.println("请输入您的取件码:");String code = input.nextLine();int num = -1;try {num = Integer.parseInt(code);//将字符串转换为数字} catch (NumberFormatException e) {}if (num < 100000 || num > 999999) {//输入的取件码有误return menu();}return num;}public void expressExist() {System.out.println("此单号在快递柜中已存在,请勿重复存储");}public void succeed() {System.out.println("操作成功");}
}
逻辑调度(Main)
一开始Io文件读取时应为此时还没有文件被创建所以会抛出异常我们可以使用if语句进行长度处理判别或直接去掉异常提示输出也就是e.printStackTrace();此处我采用的是去掉异常提示输出;
public class Mainalter2 {private static View v = new View();private static Map<String, Express> expressMap = new HashMap<>();private static Scanner input = new Scanner(System.in);private static Random random = new Random();private static int count;public static void main(String[] args) throws IOException {//IO文件读取try (FileInputStream fis = new FileInputStream("SerializedData.txt")) {ObjectInputStream ois = new ObjectInputStream(fis);expressMap = (Map<String, Express>) ois.readObject();} catch (FileNotFoundException e) {} catch (IOException | ClassNotFoundException e) {e.printStackTrace();expressMap = new HashMap<>();}//1. 欢迎v.welconme();//2 .弹出身份选择菜单m:while (true) {//方法设置为mint menu = v.menu();switch (menu) {case 0:break m;case 1:cClient();break;case 2:uClient();break;default:}}FileOutputStream fos = new FileOutputStream("SerializedData.txt");ObjectOutputStream oos = new ObjectOutputStream(fos);oos.writeObject(expressMap);oos.close();v.bye();}/*** 管理员*/private static void cClient() {while (true) {int menu = v.cmenu();switch (menu) {case 0:return;case 1: { // 快递录入System.out.println("请根据提示,输入快递信息:");System.out.println("请输入快递公司:");String company = input.nextLine();System.out.println("请输入快递单号:");String number = input.nextLine();if (expressMap.get(number) != null) {v.expressExist();} else {//生成不重复 的六位数取货码int code = 0;do {code = random.nextInt(900000) + 100000;} while (expressMap.get(code) != null);//生产不重复的快递位置int x = -1;int y = -1;do {x = random.nextInt(10);y = random.nextInt(10);} while (expressMap.get(x) != null && expressMap.get(y) != null);Express e = new Express(number, company, code, x, y);expressMap.put(number, e);System.out.println("快递存储成功!");System.out.println("快递存放在第【" + (e.getX() + 1) + "】排第【" + (e.getY() + 1) + "】列。快递信息: " +"快递公司为【" + e.getCompany() + "】,快递号单号为【" + e.getNumber() + "】," +"取件码为【" + e.getCode() + "】。");count++;// System.out.println("当前快递存储数为:"+count);}}break;case 2: {// 快递修改System.out.println("请输入要修改的快递单号:");String oldExpressNumber = input.nextLine();if (expressMap.get(oldExpressNumber) == null) {v.printnull();} else {System.out.println("请输入新的快递信息:");System.out.println("请输入快递公司:");String company = input.nextLine();System.out.print("请输入新的快递单号:");String newExpressNumber = input.nextLine();int code = expressMap.get(oldExpressNumber).getCode();int x = expressMap.get(oldExpressNumber).getX();int y = expressMap.get(oldExpressNumber).getY();Express e = new Express(newExpressNumber, company, code, x, y);expressMap.remove(oldExpressNumber);expressMap.put(newExpressNumber, e);System.out.println("快递信息修改成功!");System.out.println("第【" + (e.getX() + 1) + "】排第【" + (e.getY() + 1) + "】列的快递 快递信息: " +"快递公司为【" + e.getCompany() + "】,快递号单号为【" + e.getNumber() + "】," +"取件码为【" + e.getCode() + "】。");}}break;case 3: {// 快递删除System.out.print("请输入要删除的快递单号:");String delExpressNumber = input.nextLine();if (expressMap.get(delExpressNumber) == null) {v.printnull();} else {int type = v.delete();if (type == 1) {// 取货码 存储位置 快递 信息清空expressMap.remove(expressMap.get(delExpressNumber).getCode());expressMap.remove(expressMap.get(delExpressNumber).getX());expressMap.remove(expressMap.get(delExpressNumber).getY());expressMap.remove(delExpressNumber);System.out.println("快递删除成功!");count--;}}}break;case 4: {for (String number : expressMap.keySet()) {Express e = expressMap.get(number);System.out.println("第【" + (e.getX() + 1) + "】排第【" + (e.getY() + 1) + "】列的快递 快递信息: " +"快递公司为【" + e.getCompany() + "】,快递号单号为【" + e.getNumber() + "】," +"取件码为【" + e.getCode() + "】。");}}break;}}}private static void uClient() {int code = v.user();int temp = 0;//根据code找快递单号for (String number : expressMap.keySet()) {temp++;//单号存在if (expressMap.get(number).getCode() == code) {String s = number;Express e = expressMap.get(s);System.out.println("快递在第【" + (e.getX() + 1) + "】排第【" + (e.getY() + 1) + "】列 快递信息: " +"快递公司为【" + e.getCompany() + "】,快递号单号为【" + e.getNumber() + "】。");// 用户取件后System.out.println("取货成功!");expressMap.remove(e.getCode());expressMap.remove(e.getX());expressMap.remove(e.getY());expressMap.remove(e.getNumber());count--;break;} else if (count == temp) {v.printnull();}}}
}
二.IO图书管理
与上快递管理系统类似但要对集合进行更深一步的理解,这里的第一次IO读取文件异常我采用了上述的另一种方法方便进行对比。
任务需求
数据存储(Express)
同样要实现Serializable接口
/*** @author 26591*/
public class Express implements Serializable {/*** 图书名称*/private String name;//作者private String author;//价格private int price;//出版时间private String date;//存放位置private int X;private int Y;public Express(String name, String author, int price, String date, int x, int y) {this.name = name;this.author = author;this.price = price;this.date = date;X = x;Y = y;}public Express() {}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 int getX() {return X;}public void setX(int x) {X = x;}public int getY() {return Y;}public void setY(int y) {Y = y;}public String getDate() {return date;}public void setDate(String date) {this.date = date;}@Overridepublic boolean equals(Object o) {if (this == o) return true;if (o == null || getClass() != o.getClass()) return false;Express express = (Express) o;return Objects.equals(name, express.name) && Objects.equals(author, express.author);}@Overridepublic int hashCode() {return Objects.hash(name, author);}@Overridepublic String toString() {return "Express{" +"name='" + name + '\'' +", author='" + author + '\'' +", price=" + price +", date='" + date + '\'' +", X=" + X +", Y=" + Y +'}';}
}
调度逻辑(Main)
public class Main {private static View v=new View();public static void main(String[] args) throws ClassNotFoundException, IOException {//欢迎v.welconme();//加载文件v.Read();m:while (true){int menu=v.account();switch (menu){case 0:break m;case 1:cClient();break;}}v.Writer();}private static void cClient(){while (true){int cmnu=v.cmenu();switch (cmnu){case 0:return;case 1:v.insert();break;case 2:v.update();break;case 3:v.delete();break;case 4:v.find();break;case 5:v.lookingfor();break;}}}
}
图书视图展示(View)
难点1.模糊查询
需要使用匹配器pattern进行筛选,以及使用集合arrayList便于数据有序存储。
难点2.查询排序
价格排序
这 个里面就涉及到了Comparator这个接口,位于位于java.util包下,排序是comparator能实现的功能之一,该接口代表一个比较器,比较器具有可比性!
这里要重写Collections.sort()方法自定义排序
例如按价格从高到底排序,同理价格从底到高只需要调换减数与被减数即可
两个对象比较的结果有三种:大于,等于,小于。
如果要按照升序排序,则o1 小于o2,返回(负数),相 等返回0,01大于02返回(正数) 如果要按照降序排序 则o1 小于o2,返回(正数),相等返回0,01大于02返回(负数)
日期排序
此处需要去API中学习Date包中的时间日期的方法和作用。
public class View {private Scanner input = new Scanner(System.in);private static Map<String, Express> expressMap = new HashMap<>();private static Random random = new Random();private SimpleDateFormat time = new SimpleDateFormat("yyyy-MM-dd HH:mm");//封装密码protected int password(){int PassWord=123456;return PassWord;}/*** IO文件存储*/public void Writer() throws IOException {FileOutputStream fos= new FileOutputStream("deat.txt");ObjectOutputStream oos=new ObjectOutputStream(fos);oos.writeObject(expressMap);oos.close();bye();}/*** IO文件读取*/public void Read() throws ClassNotFoundException, IOException {File fe=new File("deat.txt");if (fe.exists()&&fe.length()>0){try (FileInputStream fis=new FileInputStream("deat.txt")){ObjectInputStream ois=new ObjectInputStream(fis);expressMap= (Map<String, Express>) ois.readObject();} catch (FileNotFoundException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();expressMap=new HashMap<>();}}else {fe.createNewFile();}}/*** 欢迎*/public void welconme() {System.out.println("欢迎使用天天图书管理系统");}/*** 再见*/public void bye() {System.out.println("欢迎下次使用");}/*** 账户登录*/public int account() {System.out.println("请根据提示,选择功能");System.out.println("请输入您管理员密码或按0退出");String text = input.nextLine();int num = -1;try {num = Integer.parseInt(text);} catch (NumberFormatException e) {e.printStackTrace();}if(num==0){return num;}if (num != password()) {System.out.println("输入有误,请重新输入");return account();}return 1;}/*** 管理员菜单*/public int cmenu() {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.返回上一级");String text = input.nextLine();int num = -1;try {num = Integer.parseInt(text);} catch (NumberFormatException e) {}if (num < 0 || num > 5) {return cmenu();}return num;}/*** 管理员录入图书*/public void insert() {System.out.println("请根据提示,输入图书信息");System.out.println("请输入图书名称");String name = input.nextLine();System.out.println("请输入图书作者");String autor = input.nextLine();System.out.println("请输入图书价格");String text = input.nextLine();if (expressMap.get(name) != null) {expressExist();}int price = -1;try {price = Integer.parseInt(text);} catch (NumberFormatException e) {}//根据当前时间设置存储时间String date=time.format(new Date());//产生不重复的存储位置int x = -1;int y = -1;do {x = random.nextInt(10);y = random.nextInt(10);} while (expressMap.get(x) != null && expressMap.get(y) != null);Express e = new Express(name, autor, price, date, x, y);expressMap.put(name, e);System.out.println("图书存储成功");System.out.println("图书存放在第【" + (e.getX() + 1) + "】排第【" + (e.getY() + 1) + "】列。图书信息: " +"图书名称为【" + e.getName() + "】,图书作者为【" + e.getAuthor() + "】," +"图书价格为【" + e.getPrice() + "】+\"存储时间为【" + e.getDate() + "】。");}private void expressExist() {System.out.println("此图书在书柜中已存在,请勿重复存储");}/***图书修改*/public void update(){System.out.println("请输入要修改的图书名称:");String oldExpressName=input.nextLine();if (expressMap.get(oldExpressName)==null){printnull();}else {System.out.println("请输入新的图书信息:");System.out.println("请输入新的图书名称");String NewExpressName=input.nextLine();System.out.println("请输入新的作者名称");String autor=input.nextLine();System.out.println("请输入新的价格");int price= Integer.parseInt(input.nextLine());String date=time.format(new Date());int x=expressMap.get(oldExpressName).getX();int y=expressMap.get(oldExpressName).getY();Express e=new Express(NewExpressName,autor,price,date,x,y);expressMap.remove(oldExpressName);expressMap.put(NewExpressName,e);System.out.println("图书信息修改成功!");System.out.println("图书存放在第【" + (e.getX() + 1) + "】排第【" + (e.getY() + 1) + "】列。图书信息: " +"图书名称为【" + e.getName() + "】,图书作者为【" + e.getAuthor() + "】," +"图书价格为【" + e.getPrice() + "】+\"存储时间为【" + e.getDate() + "】。");}}/*** 删除*/public void delete(){System.out.println("请输入要删除的图书名称:");String delExpressName = input.nextLine();if (expressMap.get(delExpressName)==null){printnull();}else {int type=cancel();if (type==1){expressMap.remove(expressMap.get(delExpressName).getX());expressMap.remove(expressMap.get(delExpressName).getY());expressMap.remove(delExpressName);System.out.println("快递删除成功");}}}/*** 模糊查询某图书*/public void find( ){ArrayList<Express> Search = new ArrayList<>();System.out.println("请输入您需要查找的图书名称:");String lookbook=input.nextLine();Pattern pattern=Pattern.compile(lookbook,Pattern.CASE_INSENSITIVE);for (String name: expressMap.keySet()){Express e=expressMap.get(name);Matcher matcher=pattern.matcher(e.getName());if (matcher.find()){//把找到的图书存放在arraySearch集Search.add(e);}}if (Search.size()==0){System.out.println("未找到相关图书,请重新操作");}else {Express e=new Express();System.out.println("name=图书名称,author=作者,price=价格,x=列,y=排");System.out.println("查找到的图书有:");for (int i=0;i<Search.size();i++){e=Search.get(i);System.out.println((1+i)+".\t"+e);}//输出以后清空存储模糊查找图书的集合Search.clear();}}/*** 所有图书查询*/public void lookingfor(){ArrayList<Express> list=new ArrayList<Express>();for (String name: expressMap.keySet()){Express e=expressMap.get(name);list.add(e);}switch (LookAsk()){case 1:System.out.println("name=图书名称,author=作者,price=价格,x=列,y=排");Collections.sort(list, new Comparator<Express>() {@Overridepublic int compare(Express o1, Express o2) {return o2.getPrice() - o1.getPrice();}});for (int i=0;i<list.size();i++){System.out.println(list.get(i));}break;case 2:System.out.println("name=图书名称,author=作者,price=价格,x=列,y=排");Collections.sort(list, new Comparator<Express>() {@Overridepublic int compare(Express o1, Express o2) {return o1.getPrice() - o2.getPrice();}});for (int i=0;i<list.size();i++){System.out.println(list.get(i));}break;case 3:System.out.println("name=图书名称,author=作者,price=价格,x=列,y=排");/*** 法二集合排序*/Collections.sort(list, new Comparator<Express>() {@Overridepublic int compare(Express o1, Express o2) {String map1value=(String) o1.getDate();String map2value=(String) o2.getDate();//利用compareTo方法从字典中比较两日期的大小return map1value.compareTo(map2value);}});for (int i=0;i<list.size();i++){System.out.println(list.get(i));}break;}System.out.println("当前图书共储存图书:"+expressMap.size()+" 本。");}/*** 查询提示* @return*/public int LookAsk(){System.out.println("请选择查询方式");System.out.println("1.价格从高到低-2.价格从底到高-3.新旧排序");String text=input.nextLine();int num=-1;try {num=Integer.parseInt(text);}catch (NumberFormatException e){}if (num<0 || num>3){System.out.println("您的输入数字的有误,请重新输入");return LookAsk();}return num;}public void printnull(){System.out.println("查询不到该图书,请检查您的输入");}/*** 询问是否确认删除* @return 1表示确认,2表示取消操作*/public int cancel(){System.out.println("是否确认删除?");System.out.println("1确认删除-2取消操作-0退出");String text = input.nextLine();int num = -1;try {num=Integer.parseInt(text);//将字符串转换为数字}catch (NumberFormatException e){//不是数字不做处理}if (num<0 || num>2){System.out.println("输入有误,请重新输入");return cancel();}return num;}
}
ps:这里偷了懒把很多方法全部写在了视图当中,尽量别这么做,养成良好习惯。
IO+集合简易快递管理与图书管理相关推荐
- java代码实现图书管理_Java图书管理系统(用Java常用集合实现)(示例代码)
图书管理系统 一.需求说明 1.功能:登录,注册,忘记密码,管理员管理,图书管理. 2.管理员管理:管理员的增删改查. 3.图书管理:图书的增删改查. 4.管理员属性包括:id,姓名,性别,年龄,家庭 ...
- Java全栈(四)web网页技术:15.书城项目实战四:管理端图书的增删改查(后台)
1.需求澄清 管理端图书管理页面[book_manager.jsp]页面原型如下: 需要实现图书的添加.删除.修改.分页显示等操作 2.前期准备 2.1 创建数据表books create TABLE ...
- 图书管理系统需求规格说明书
图书管理系统需求规格说明书 何海军.熊跃华 摘要 介绍了信息中心图书管理系统数据库的设计.该系统是运行在学校内的图书管理系统,实现了图书资料的计算机管理和图书查询功能. 关键词 图书 网络 管理系 ...
- (附源码)Node.js图书管理小程序的开发 毕业设计 250858
Node.js图书管理小程序的开发 摘 要 大数据时代下,数据呈爆炸式地增长.为了迎合信息化时代的潮流和信息化安全的要求,利用互联网服务于其他行业,促进生产,已经是成为一种势不可挡的趋势.在图书馆管理 ...
- java输入输出图书管理系统设计_基于JAVA的图书管理系统设计(含源文件).doc
PAGE 本科毕业设计(论文) 题 目:基于Java的图书管理信息系统的设计和实现 院 系: 计 算 机 科 学 系 专 业: 计 算 机 科 学 与 技 术 姓 名: 陈 平 指导教师: 周 亚 凤 ...
- SSM 图书管理在线销售系统
SSM 图书管理在线销售系统 SSM 图书管理在线销售系统功能介绍 首页 图书展示 按类型展示图书 关键字搜索图书 图书详情 图书评论 中英文切换 会员注册登录 购买图书 购物车 收藏图书 我的收藏 ...
- 冒着开除的风险,让我们解密图书管理之校长看完直夸好IO流下篇
图书管理系统IO流版之下集 1.前言 2.结构设计 3.信息管理 3.1用户信息管理 3.2读者信息管理 3.3图书信息管理 4.基础信息维护 5. 总结 1.前言 鹏之徙于南冥也,水击三千里,抟 ...
- 迷你图书管理器1.2 - 面向对象+集合
迷你图书管理器 author:luckyboy! version:1.2 知识储备:变量.数据类型.选择结构.循环结构.数组 .面向对象.集合 系统概述:为某图书馆开发一个迷你图书管理系统,实现图书的 ...
- 基于RFID的简易图书管理系统设计与实现
本次开发主要做了从串口分别获取读者卡号和图书卡号,实现图书管理,图书借阅,读者管理等功能.开发语言是C#,开发环境使用Visual Studio 2015.数据库采用sql Server. RFID选 ...
最新文章
- Vysor_v1.6.9
- android--系统jar包引用
- pandas之数据结构
- 汇编语言学习——第四章 第一个汇编程序
- Hibernate Session merge,update,save,saveOrUpdate,persist
- Angular JS(二) 指令部分
- 针对笔记本电源已接通未充电的提示怎么办
- Atitit it领域知识点 划分 acm18知识树 目录 1. Acm总结的18个计算机科学关键领域 ACM知识树	1 1.1. 大学级别的计算机科学知识可以归纳成14个知识领域:	3 2. U
- java入门简单小项目_JAVA入门_java项目接入Mysql8.0
- BMFont制作字体图集
- 完全卸载Oracle方法(超详细)
- LED发光原理(笔记)
- Android9.0系统源码_编译刷机——从下载到编译
- python计算单词长度_python – 返回字符串中的单词长度
- 行逻辑链接的顺序表(压缩存储稀疏矩阵)详解
- Android系统中的Binder通信机制分析(7)- Java 层的 Binder 机制
- qt通过websocket和html通信,QT Websocket实现服务器客户端通讯(服务端部分)
- 提取图像感兴趣区域_从图像中提取感兴趣区域
- 新用户购买阿里云服务器 阿里云搭建Csapp Lab环境
- 5v继电器模块实物接线_高手教你玩传感器系列之继电器的使用