目录

引言

一、案例需求

二、思路

三、代码实现。

源码再此

customer类

工具类

测试类



引言

各位小伙伴们,今天给大家分享一个经典初学者案例,希望对你有所帮助。

创作不易,求个免费的三连支持一下呀!


一、案例需求

l 模拟实现一个基于文本界面的 《 客户信息管理软件 》
l 进一步掌握编程技巧和调试技巧,熟悉面向对象编程
l 主要涉及以下知识点:
Ø 类结构的使用:属性、方法及构造器
Ø 对象的创建与使用
Ø 类的封装性
Ø 声明和使用数组
Ø 数组的插入、删除和替换
Ø 关键字的使用: this

二、思路

首先我们应确定案例所使用的方法,这里我们演示集合完成

第二步完成用户界面的编写,使用while循环加Switch语句即可,前面我们也写过一片家庭账户收支系统可以参考。

第三步完善小程序各个功能部分,第一个,添加客户界面以及如何操作,

请选择(1-5):1---------------------添加客户---------------------
姓名:佟刚
性别:男
年龄:35
电话:010-56253825
邮箱:tongtong@atguigu.com
---------------------添加完成---------------------
界面如上,要想实现界面不难,主要是功能,那么我们首先应该创建一个customer类,去用于我们对客户信息的管理以及修改。那么这个customer类应该包括成员变量name,age,gender,phone,email。构造方法和对应的set,get,方法。代码如下:
package com.Customer;/*** @author wang* @date 2021/8/23*/
public class Customer {//成员变量private String name;private char gender;private int age;private String phone;private String email;//空参构造public Customer() {}//有参构造public Customer(String name, char gender, int age, String phone, String email) {this.name = name;this.age = age;this.gender = gender;this.phone = phone;this.email = email;}//set,get方法public void setName(String name) {this.name = name;}public String getName() {return name;}public void setGender(char gender) {this.gender = gender;}public char getGender() {return gender;}public void setAge(int age) {this.age = age;}public int getAge() {return age;}public void setPhone(String phone) {this.phone = phone;}public String getPhone() {return phone;}public void setEmail(String email) {this.email = email;}public String getEmail() {return email;}
}

再来说回这个界面,添加客户我们应该创建一个集合对象,将我们需要录入的信息存入集合当中,

第四步,我们先实现一下客户列表,便于中途进行检验。
请选择(1-5):4---------------------------客户列表---------------------------
编号  姓名       性别    年龄   电话                   邮箱1    佟刚         男        45     010-56253825   tong@abc.com2    封捷         女        36     010-56253825   fengjie@ibm.com3    雷丰阳     男        32      010-56253825   leify@163.com
-------------------------客户列表完成-------------------------

这个界面就是直接遍历集合并依次输出即可,注意调节一下格式。

第五步,修改客户界面
请选择(1-5):2---------------------修改客户---------------------
请选择待修改客户编号(-1退出):1
姓名(佟刚):
性别(男):
年龄(35):
电话(010-56253825):
邮箱(tongtong@atguigu.com):tongg@atguigu.com
---------------------修改完成---------------------
这里我们可以用一个客户ID来作为依据去修改客户。
创建客户对象如第一步一样,修改属性,
调用array.set()方法去修改每一个指定的元素即可。
第六步、删除客户界面
                   请选择(1-5):3---------------------删除客户---------------------
请选择待删除客户编号(-1退出):1
确认是否删除(Y/N):y
---------------------删除完成---------------------

这里也是一样,通过ID去寻找客户,利用集合的array.remove()方法删除集合中的指定元素,并添加一个选择是否删除语句即可。

第七步,退出语句。

整个小程序的退出,直接写一个退出判断语句在主方法即可。

三、代码实现。

首先,这个代码会用到一个工具类,这个工具类我会放大末尾,供大家参考,该工具类会使我们的代码更整洁有效,减少漏洞的可能。仅供参考,也可以不使用工具类,但对于我们目前学习的知识来说,想要做到很困难,而且容易出漏洞。

第一步,主界面编写,这个相信我们都已经很熟悉,通过while循环达到目的。

public class CustomerView {public static void main(String[] args) {ArrayList<Customer> array = new ArrayList<Customer>();Scanner sc = new Scanner(System.in);/***              -----------------客户信息管理软件-----------------**                                      1 添 加 客 户*                                      2 修 改 客 户*                                      3 删 除 客 户*                                      4 客 户 列 表*                                      5 退           出**                                      请选择(1-5):_*/while (true) {System.out.println("-----------------客户信息管理软件-----------------");System.out.println();System.out.println("\t\t\t\t" + "1 添 加 客 户");System.out.println("\t\t\t\t" + "2 修 改 客 户");System.out.println("\t\t\t\t" + "3 删 除 客 户");System.out.println("\t\t\t\t" + "4 客 户 列 表");System.out.println("\t\t\t\t" + "5 退           出");System.out.print("请选择(1-5):");char choice = CMUtility.readMenuSelection();System.out.println();switch (choice) {case '1':addCustomer(array);break;case '2':updateCustomer(array);break;case '3':deleteCustomer(array);break;case '4':viewCustomer(array);break;case '5':System.out.print("5.退出(y/n):");char cho = CMUtility.readConfirmSelection();if (cho == 'y' || cho == 'Y') {System.out.println("退出成功!欢迎下次使用");System.exit(0);} else if (cho == 'n' || cho == 'N') {System.out.println("返回成功,欢迎继续使用!");break;}}}}

当我们的客户选择上述代码的指定功能键会进入对应的功能区,那她要是输入错误输了个9,怎么办呢?这里我们就调用了一个方法,char choice = CMUtility.readMenuSelection();,直接使用了工具类给我们提供好的方法,从而保证他能够准确识别客户的键入,当然也可以通过写一个判断语句去完成它,也不难。

当客户输入1就进入了添加客户页面,之前我们说过,通过将数据添加到集合当中,来完成需求,那么我们集合对象也创建好了,怎么实现呢?请看代码

public static void addCustomer(ArrayList<Customer> array) {System.out.println("---------------------添加客户---------------------");Scanner sc = new Scanner(System.in);//创建客户对象Customer c = new Customer();System.out.print("姓名:");String name = CMUtility.readString(11);System.out.print("性别:");char gender = CMUtility.readChar();System.out.print("年龄:");int age = CMUtility.readInt();System.out.print("电话:");String phone = CMUtility.readString(11);System.out.print("邮箱:");String email = CMUtility.readString(20);//将数据赋值给客户对象c.setName(name);c.setAge(age);c.setGender(gender);c.setPhone(phone);c.setEmail(email);//将客户对象添加到集合中array.add(c);//添加成功提示System.out.println("---------------------添加完成---------------------");}

接下来,录入好了客户,自然就要查看啊,不然录入了客户有什么用呢?

查看也很简单,那就是我们耳熟能详的遍历集合啦

 public static void viewCustomer(ArrayList<Customer> array) {System.out.println("---------------------------客户列表---------------------------");System.out.println("编号\t" + "姓名\t" + "性别\t" + "年龄\t" + "电话\t\t\t\t" + "邮箱");for (int i = 0; i < array.size(); i++) {Customer c = array.get(i);System.out.println((i + 1) + "\t" + c.getName() + "\t" + c.getGender() + "\t" + c.getAge()+ "\t" + c.getPhone() + "\t\t" + c.getEmail());}System.out.println("-------------------------客户列表完成-------------------------");}

当然这里大家为了美观,这个格式一定要注意哦,自己调到合适即可。这里说一下,java当中可以用\t 表示缩进,\n表示换行。

然后,客户发现自己信息录入有误,想要修改,怎么办呢?客户选择了摁2,很显然,当前你摁2不会有任何的反应滴!那么我们先放代码

public static void updateCustomer(ArrayList<Customer> array) {System.out.println("---------------------修改客户---------------------");System.out.print("请选择待修改客户编号(-1退出):");Scanner sc = new Scanner(System.in);int id = sc.nextInt();int key = -1;if (id == key) {return;} else {int index = -1;for (int i = 0; i < array.size(); i++) {Customer c = array.get(i);if (i == (id - 1)) {index = i;break;}}if (index == -1) {System.out.println("你输入的编号不存在,请重新输入!");} else {System.out.print("新姓名:");String name = CMUtility.readString(20);System.out.print("新性别:");char gender = CMUtility.readChar();System.out.print("新年龄:");int age = CMUtility.readInt();System.out.print("新电话:");String phone = CMUtility.readString(11);System.out.print("新邮箱:");String email = CMUtility.readString(20);Customer c = new Customer();c.setName(name);c.setGender(gender);c.setAge(age);c.setPhone(phone);c.setEmail(email);array.set(index, c);System.out.println("---------------------修改完成---------------------");}}}

其实思路跟第一部分的思路有些类似,但是这个就不是添加到集合中去,而是在集合中找出来,并且将它修改掉。怎么实现,当然首先我们这里使用的是一个判断语句,判断他下一步是进行修改,还是不进行修改。我们可以定义一个key值为-1,作为一个状态,如果用户输入-1,那么功能就将推出,不会进行任何修改,如果输入的不是-1,而是他想要修改的客户,我们便进入下一步。因为我们这里的编号不是我们自己输入的,而是我们在查看那个功能中我们给的,大家发现没有,这个编号其实就是我们的集合的索引位置+1,那么我们便可以直接通过索引去修改我们计划之中的元素,也就是我们所谓的编号,编号为1 ,那么我们这里要进行索引对应,就相应的给他减一,就能精准的找到我们需要修改的集合中的元素。最后,再通过index索引的位置,将我们修改好的元素添加到集合之中,就解决了问题。

如果编号是自己给的那就更简单了,直接使用String的equals 方法进行比对就可以了,或者是基本数据类型的话就采用 == 比对。

最后一步,删除客户。

这一步跟修改几乎可一说没有区别,第一、依据编号找到你要删除的客户,第二部,从集合当中删除他。

public static void deleteCustomer(ArrayList<Customer> array) {System.out.print("请选择待修改客户编号(-1退出):");Scanner sc = new Scanner(System.in);int id = sc.nextInt();int key = -1;if (id == key) {return;} else {int index = -1;for (int i = 0; i < array.size(); i++) {Customer c = array.get(i);if (i == (id - 1)) {index = i;break;}}if (index == -1) {System.out.println("你输入的编号不存在,请重新输入!");} else {System.out.println("确认是否删除(Y/N):");char choice = CMUtility.readConfirmSelection();if (choice == 'y' || choice == 'Y') {array.remove(index);System.out.println("删除客户成功!");} else if (choice == 'n' || choice == 'N') {System.out.println("客户信息未删除!");}}}}
}

结束语

感谢大家的阅读,欢迎大家互赞互访,互相进步,接下来还会带来更多有趣的小东西哦,点关注不迷路!

这个题目还有一个问题就是如何保存他的数据,以供下次启动小程序时使用,知道的小伙伴欢迎评论区留言讨论哦!


源码再此

customer类

package com.Customer;/*** @author wang* @date 2021/8/23*/
public class Customer {//成员变量private String name;private char gender;private int age;private String phone;private String email;//空参构造public Customer() {}//有参构造public Customer(String name, char gender, int age, String phone, String email) {this.name = name;this.age = age;this.gender = gender;this.phone = phone;this.email = email;}//set,get方法public void setName(String name) {this.name = name;}public String getName() {return name;}public void setGender(char gender) {this.gender = gender;}public char getGender() {return gender;}public void setAge(int age) {this.age = age;}public int getAge() {return age;}public void setPhone(String phone) {this.phone = phone;}public String getPhone() {return phone;}public void setEmail(String email) {this.email = email;}public String getEmail() {return email;}
}

工具类

package com.Customer;
import java.util.Scanner;/**CMUtility工具类:将不同的功能封装为方法,就是可以直接通过调用方法使用它的功能,而无需考虑具体的功能实现细节。*/
public class CMUtility {private static Scanner scanner = new Scanner(System.in);/**用于界面菜单的选择。该方法读取键盘,如果用户键入’1’-’5’中的任意字符,则方法返回。返回值为用户键入字符。*/public static char readMenuSelection() {char c;for (; ; ) {String str = readKeyBoard(1, false);c = str.charAt(0);if (c != '1' && c != '2' &&c != '3' && c != '4' && c != '5') {System.out.print("选择错误,请重新输入:");} else break;}return c;}/**从键盘读取一个字符,并将其作为方法的返回值。*/public static char readChar() {String str = readKeyBoard(1, false);return str.charAt(0);}/**从键盘读取一个字符,并将其作为方法的返回值。如果用户不输入字符而直接回车,方法将以defaultValue 作为返回值。*/public static char readChar(char defaultValue) {String str = readKeyBoard(1, true);return (str.length() == 0) ? defaultValue : str.charAt(0);}/**从键盘读取一个长度不超过2位的整数,并将其作为方法的返回值。*/public static int readInt() {int n;for (; ; ) {String str = readKeyBoard(2, false);try {n = Integer.parseInt(str);break;} catch (NumberFormatException e) {System.out.print("数字输入错误,请重新输入:");}}return n;}/**从键盘读取一个长度不超过2位的整数,并将其作为方法的返回值。如果用户不输入字符而直接回车,方法将以defaultValue 作为返回值。*/public static int readInt(int defaultValue) {int n;for (; ; ) {String str = readKeyBoard(2, true);if (str.equals("")) {return defaultValue;}try {n = Integer.parseInt(str);break;} catch (NumberFormatException e) {System.out.print("数字输入错误,请重新输入:");}}return n;}/**从键盘读取一个长度不超过limit的字符串,并将其作为方法的返回值。*/public static String readString(int limit) {return readKeyBoard(limit, false);}/**从键盘读取一个长度不超过limit的字符串,并将其作为方法的返回值。如果用户不输入字符而直接回车,方法将以defaultValue 作为返回值。*/public static String readString(int limit, String defaultValue) {String str = readKeyBoard(limit, true);return str.equals("")? defaultValue : str;}/**用于确认选择的输入。该方法从键盘读取‘Y’或’N’,并将其作为方法的返回值。*/public static char readConfirmSelection() {char c;for (; ; ) {String str = readKeyBoard(1, false).toUpperCase();c = str.charAt(0);if (c == 'Y' || c == 'N') {break;} else {System.out.print("选择错误,请重新输入:");}}return c;}private static String readKeyBoard(int limit, boolean blankReturn) {String line = "";while (scanner.hasNextLine()) {line = scanner.nextLine();if (line.length() == 0) {if (blankReturn) return line;else continue;}if (line.length() < 1 || line.length() > limit) {System.out.print("输入长度(不大于" + limit + ")错误,请重新输入:");continue;}break;}return line;}
}

测试类

package com.Customer;import java.util.ArrayList;
import java.util.Scanner;/*** @author wang* @date2021/8/23*/
public class CustomerView {public static void main(String[] args) {ArrayList<Customer> array = new ArrayList<Customer>();Scanner sc = new Scanner(System.in);/***              -----------------客户信息管理软件-----------------**                                      1 添 加 客 户*                                      2 修 改 客 户*                                      3 删 除 客 户*                                      4 客 户 列 表*                                      5 退           出**                                      请选择(1-5):_*/while (true) {System.out.println("-----------------客户信息管理软件-----------------");System.out.println();System.out.println("\t\t\t\t" + "1 添 加 客 户");System.out.println("\t\t\t\t" + "2 修 改 客 户");System.out.println("\t\t\t\t" + "3 删 除 客 户");System.out.println("\t\t\t\t" + "4 客 户 列 表");System.out.println("\t\t\t\t" + "5 退           出");System.out.print("请选择(1-5):");char choice = CMUtility.readMenuSelection();System.out.println();switch (choice) {case '1':addCustomer(array);break;case '2':updateCustomer(array);break;case '3':deleteCustomer(array);break;case '4':viewCustomer(array);break;case '5':System.out.print("5.退出(y/n):");char cho = CMUtility.readConfirmSelection();if (cho == 'y' || cho == 'Y') {System.out.println("退出成功!欢迎下次使用");System.exit(0);} else if (cho == 'n' || cho == 'N') {System.out.println("返回成功,欢迎继续使用!");break;}}}}/*** 添加客户界面* 请选择(1-5):1* <p>* ---------------------添加客户---------------------* 姓名:佟刚String* 性别:男Char* 年龄:35int* 电话:010-56253825* 邮箱:tongtong@atguigu.com* ---------------------添加完成---------------------*/public static void addCustomer(ArrayList<Customer> array) {System.out.println("---------------------添加客户---------------------");Scanner sc = new Scanner(System.in);//创建客户对象Customer c = new Customer();System.out.print("姓名:");String name = CMUtility.readString(11);System.out.print("性别:");char gender = CMUtility.readChar();System.out.print("年龄:");int age = CMUtility.readInt();System.out.print("电话:");String phone = CMUtility.readString(11);System.out.print("邮箱:");String email = CMUtility.readString(20);//将数据赋值给客户对象c.setName(name);c.setAge(age);c.setGender(gender);c.setPhone(phone);c.setEmail(email);//将客户对象添加到集合中array.add(c);//添加成功提示System.out.println("---------------------添加完成---------------------");}/*** ---------------------------客户列表---------------------------* 编号  姓名       性别    年龄   电话                   邮箱* 1    佟刚         男        45     010-56253825   tong@abc.com* 2    封捷         女        36     010-56253825   fengjie@ibm.com* 3    雷丰阳     男        32      010-56253825   leify@163.com* -------------------------客户列表完成-------------------------*/public static void viewCustomer(ArrayList<Customer> array) {System.out.println("---------------------------客户列表---------------------------");System.out.println("编号\t" + "姓名\t" + "性别\t" + "年龄\t" + "电话\t\t\t\t" + "邮箱");for (int i = 0; i < array.size(); i++) {Customer c = array.get(i);System.out.println((i + 1) + "\t" + c.getName() + "\t" + c.getGender() + "\t" + c.getAge()+ "\t" + c.getPhone() + "\t\t" + c.getEmail());}System.out.println("-------------------------客户列表完成-------------------------");}/*** ---------------------修改客户---------------------* 请选择待修改客户编号(-1退出):1* 姓名(佟刚):* 性别(男):* 年龄(35):* 电话(010-56253825):* 邮箱(tongtong@atguigu.com):tongg@atguigu.com* ---------------------修改完成---------------------*/public static void updateCustomer(ArrayList<Customer> array) {System.out.println("---------------------修改客户---------------------");System.out.print("请选择待修改客户编号(-1退出):");Scanner sc = new Scanner(System.in);int id = sc.nextInt();int key = -1;if (id == key) {return;} else {int index = -1;for (int i = 0; i < array.size(); i++) {Customer c = array.get(i);if (i == (id - 1)) {index = i;break;}}if (index == -1) {System.out.println("你输入的编号不存在,请重新输入!");} else {System.out.print("新姓名:");String name = CMUtility.readString(20);System.out.print("新性别:");char gender = CMUtility.readChar();System.out.print("新年龄:");int age = CMUtility.readInt();System.out.print("新电话:");String phone = CMUtility.readString(11);System.out.print("新邮箱:");String email = CMUtility.readString(20);Customer c = new Customer();c.setName(name);c.setGender(gender);c.setAge(age);c.setPhone(phone);c.setEmail(email);array.set(index, c);System.out.println("---------------------修改完成---------------------");}}}/*** 请选择(1-5):3* <p>* ---------------------删除客户---------------------* 请选择待删除客户编号(-1退出):1* 确认是否删除(Y/N):y* ---------------------删除完成---------------------*/public static void deleteCustomer(ArrayList<Customer> array) {System.out.print("请选择待修改客户编号(-1退出):");Scanner sc = new Scanner(System.in);int id = sc.nextInt();int key = -1;if (id == key) {return;} else {int index = -1;for (int i = 0; i < array.size(); i++) {Customer c = array.get(i);if (i == (id - 1)) {index = i;break;}}if (index == -1) {System.out.println("你输入的编号不存在,请重新输入!");} else {System.out.println("确认是否删除(Y/N):");char choice = CMUtility.readConfirmSelection();if (choice == 'y' || choice == 'Y') {array.remove(index);System.out.println("删除客户成功!");} else if (choice == 'n' || choice == 'N') {System.out.println("客户信息未删除!");}}}}
}

面向对象基础案例之客户管理小程序!相关推荐

  1. 小程序·云开发实战:SCRM社交化客户管理小程序

    点击观看大咖分享 随着微信小程序不断发展壮大,传统的 CRM 厂商也在不断向微信上迁移,毕竟微信的背后是巨大的用户和流量,还有极其方便的移动支付渠道.用微信小程序来做CRM,和以前的做法存在一些比较明 ...

  2. CRM客户关系管理系统源码跟单销售公司订单跟进客户公海合同管理办公erp客户管理(小程序+APP+H5)

    功能特性 客户管理 支持客户跟进.放进公海.公海领取等操作,支持管理联系人信息 商机需求 支持后台自由添加修改商机需求,支持关联客户.产品等信息 合同管理 支持后台添加编辑合同,支持设定合同的关联商机 ...

  3. 实验室预约管理小程序前后端完整,包括实验室动态,实验室规章制度,预约审批,用户管理,基础实验室预约,专业实验室预约等功能

    功能介绍 实验室预约管理小程序前后端完整,包括实验室动态,实验室规章制度,预约审批,用户管理,基础实验室预约,专业实验室预约等功能.目前部分高校实验室存在设备管理困难的问题,要使用设备可能需要在微信群 ...

  4. android小程序案例_这几个小程序案例告诉你,小程序该怎么做!

    很多新手想做小程序,但却不知道好的小程序应该做成什么样子.下面就跟大家分享几个做得比较好的微信小程序案例,你可以从这些案例中学习一下,然后再做自己的小程序. 1.商城小程序案例 商城小程序如今是比较常 ...

  5. 会员管理小程序实战开发01-总体介绍

    项目背景 日常作为消费者,我们总是需要购买形形色色的物品或者服务.在这些物品或者服务购买的过程中,我们也和各种商家打交道,商家为了营销获得稳定的客源,总是推荐店内的会员消费. 以前,在信息化不发达的时 ...

  6. (附源码)Node.js图书管理小程序的开发 毕业设计 250858

    Node.js图书管理小程序的开发 摘 要 大数据时代下,数据呈爆炸式地增长.为了迎合信息化时代的潮流和信息化安全的要求,利用互联网服务于其他行业,促进生产,已经是成为一种势不可挡的趋势.在图书馆管理 ...

  7. springboot+高校自习室座位管理小程序 毕业设计-附源码191028

    基于SpringBoot的高校自习室座位管理小程序 摘 要 21世纪时信息化的时代,几乎任何一个行业都离不开计算机,将计算机运用于学校的各种信息管理也是十分常见的.随着时代发展,越来越多小程序被普遍使 ...

  8. 基于SpringBoot的高校自习室座位管理小程序毕业设计源码191028

    摘 要 21世纪时信息化的时代,几乎任何一个行业都离不开计算机,将计算机运用于学校的各种信息管理也是十分常见的.随着时代发展,越来越多小程序被普遍使用,小程序的便捷,随时随地即可方便使用的特点,使得越 ...

  9. springboot日结工管理小程序毕业设计-附源码070940

    摘  要 信息化社会内需要与之针对性的信息获取途径,但是途径的扩展基本上为人们所努力的方向,由于站在的角度存在偏差,人们经常能够获得不同类型信息,这也是技术最为难以攻克的课题.针对日结工管理等问题,对 ...

最新文章

  1. Java封装OkHttp3工具类
  2. linux查进程ps和top,Linux中几个进程查看命令总结 ps, top, htop, vmstat
  3. numpy常用函数之random.normal函数
  4. 深入剖析全链路灰度技术
  5. linux 查找py文件命令_在 Linux 中如何从命令行查找 VirtualBox 版本
  6. centos6.5和centos7.5统一字符集为zh_CN.UTF-8解决系统和MySQL数据库乱码问题
  7. 16、Python与设计模式--模板模式
  8. C语言简单程序情话,给你一份程序员的“科技情话”,赶在双十一前脱单吧
  9. 使用VS Code开发.Net Core 2.0 MVC Web应用程序教程之一
  10. 随想录(jtag知识点小结)
  11. 在CentOS上安装Git(转)
  12. windows系统bat批处理 mysql 脚本启动关闭
  13. 使用电脑时,眼睛离电脑多远才合适
  14. python如何读取二进制文件为图片_关于Python获取图片文件二进制数据的问题(获取为空)...
  15. 打开IIS管理器的两种方式
  16. 获取openid失败怎么办_微信小程序openid怎么获取 获取微信openid失败解决方法
  17. PyTorch 报错:TypeError: Cannot handle this data type: (1, 1, 512), |u1 (已解决)
  18. owt-conference 视频会议流程
  19. Word文档如何设置成不可编辑的模式?
  20. 漫说Android 中SurfaceView蕴含的美

热门文章

  1. webpackjsonp 还原_夏宝玉Angew: 碳纳米棒封装氧化铋电还原CO2制甲酸
  2. 葛洲坝电力集团责任有限公司改变不一样的风格
  3. 通过jQuery实现淘宝搜索提示功能
  4. 学校网络问题和网址打不开解决
  5. 点云生成-PointFlow: 3D Point Cloud Generation with Continuous Normalizing Flows
  6. python书籍推荐
  7. Bluehost中国的主机产品和美国那边的主机有什么差别吗?
  8. matlab做概率论题,Matlab 概率论与数理统计.doc
  9. Appium中Desired Capabilities参数设置
  10. 仿腾讯新闻频道定制界面效果2