目录
引言
一、案例需求
二、思路
三、代码实现。
源码再此
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.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 ---------------------修改完成---------------------这里我们可以用一个客户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("客户信息未删除!"); } } } } }
结束语
感谢大家的阅读,欢迎大家互赞互访,互相进步,接下来还会带来更多有趣的小东西哦,点关注不迷路!
这个题目还有一个问题就是如何保存他的数据,以供下次启动小程序时使用,知道的小伙伴欢迎评论区留言讨论哦!
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("客户信息未删除!"); } } } } }