目录
引言
各位小伙伴们,今天给大家分享一个经典初学者案例,希望对你有所帮助。
创作不易,求个免费的三连支持一下呀!
一、案例需求
二、思路
首先我们应确定案例所使用的方法,这里我们演示集合完成
第二步完成用户界面的编写,使用while循环加Switch语句即可,前面我们也写过一片家庭账户收支系统可以参考。
第三步完善小程序各个功能部分,第一个,添加客户界面以及如何操作,
请选择(1-5):1
---------------------添加客户---------------------
姓名:佟刚
性别:男
年龄:35
电话:010-56253825
邮箱:tongtong@atguigu.com
---------------------添加完成---------------------
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.com
2 封捷 女 36 010-56253825 fengjie@ibm.com
3 雷丰阳 男 32 010-56253825 leify@163.com
-------------------------客户列表完成-------------------------
这个界面就是直接遍历集合并依次输出即可,注意调节一下格式。
请选择(1-5):2
---------------------修改客户---------------------
请选择待修改客户编号(-1退出):1
姓名(佟刚):
性别(男):
年龄(35):
电话(010-56253825):
邮箱(tongtong@atguigu.com):tongg@atguigu.com
---------------------修改完成---------------------
请选择(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("客户信息未删除!");
}
}
}
}
}