一.需求说明

模拟实现基于文本界面的《客户信息管理软件》。

该软件能够实现对客户对象的插入、修改和删除(用数组实现),并能够打印客户明细表。

项目采用分级菜单方式。主菜单如下:

-----------------客户信息管理软件-----------------

1 添 加 客 户

2 修 改 客 户

3 删 除 客 户

4 客 户 列 表

5 退 出

请选择(1-5):_

每个客户的信息被保存在Customer对象中。

以一个Customer类型的数组来记录当前所有的客户。

每次“添加客户”(菜单1)后,客户(Customer)对象被添加到数组中。

每次“修改客户”(菜单2)后,修改后的客户(Customer)对象替换数组中原对象。

每次“删除客户”(菜单3)后,客户(Customer)对象被从数组中清除。

执行“客户列表 ”(菜单4)时,将列出数组中所有客户的信息。

二.软件设计结构

该软件由以下三个模块组成:

CustomerView为主模块,负责菜单的显示和处理用户操作

CustomerList为Customer对象的管理模块,内部用数组管理一组Customer对象,并提供相应的添加、修改、删除和遍历方法,供CustomerView调用

Customer为实体对象,用来封装客户信息

三.代码实现

第1步 — Customer类的设计

package com.zslstart.p2.bean;
/** Customer为实体类,用来封装客户信息*  String name :客户姓名char gender  :性别int age      :年龄String phone:电话号码String email :电子邮箱*/
/*** * @ClassName: Customer* @Description: Customer为实体类,用来封装客户信息* @author zslstart* @date 2023-01-18 04:32:56*/
public class Customer {private String name;private char gender;private int age;private String phone;private String email;public Customer(String name, char gender, int age, String phone,String email) {super();this.name = name;this.gender = gender;this.age = age;this.phone = phone;this.email = email;}public String getName() {return name;}public void setName(String name) {this.name = name;}public char getGender() {return gender;}public void setGender(char gender) {this.gender = gender;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}public String getPhone() {return phone;}public void setPhone(String phone) {this.phone = phone;}public String getEmail() {return email;}public void setEmail(String email) {this.email = email;}}

第2步 — CustomerList类的设计

package com.zslstart.p2.service;import com.zslstart.p2.bean.Customer;/** CustomerList为Customer对象的管理模块,内部使用数组管理一组Customer对象* 本类封装以下信息:Customer[] customers:用来保存客户对象的数组int total = 0                 :记录已保存客户对象的数量该类至少提供以下构造器和方法:public CustomerList(int totalCustomer) public boolean addCustomer(Customer customer) public boolean replaceCustomer(int index, Customer cust)public boolean deleteCustomer(int index)public Customer[] getAllCustomers() public Customer getCustomer(int index) public int getTotal()*/
/*** * @ClassName: CustomerList* @Description: CustomerList为Customer对象的管理模块,内部使用数组管理一组Customer对象* @author zslstart* @date 2023-01-18 03:48:23*/
public class CustomerList {private Customer[] customers;//定义一个Customer类型的变量,用来保存客户对象的数组private int total = 0;  //记录已保存客户对象的数量/*** @Descriotion 构造器,用来初始化customers数组* @param totalCustomer*/public CustomerList(int totalCustomer) {customers = new Customer[totalCustomer] ;}/*** * @MethodName: addCustomer* @Description: 将参数customer添加到数组中最后一个客户对象记录之后* @author zslstart* @return boolean* @date 2023-01-18 04:26:26*/public boolean addCustomer(Customer customer) {if(total >= customers.length) {return false;}customers[total] = customer;total++;return true;}/*** * @MethodName: replaceCustomer* @Description: 修改指定索引位置客户的信息* @author zslstart* @return boolean* @date 2023-01-18 04:23:56*/public boolean replaceCustomer(int index, Customer cust) {if(index < 0 || index >= total) {return false;}customers[index] = cust;return true;}/*** * @MethodName: deleteCustomer* @Description: 删除指定索引的客户的信息* @author zslstart* @return boolean* @date 2023-01-18 04:19:49*/public boolean deleteCustomer(int index) {if(index < 0 || index >= total) {return false;}for(int i = index;i < total -1;i++) {customers[index] = customers[index - 1];}//最后有数据的元素要置空 nullcustomers[total - 1] = null;total--;return true;}/*** * @MethodName: getAllCustomers* @Description: 获取所有的客户信息* @author zslstart* @return Customer[]* @date 2023-01-18 04:15:45*/public Customer[] getAllCustomers() {Customer[] custs = new Customer[total];for(int i = 0;i < total;i++) {custs[i] = customers[i];}return custs;}/*** * @MethodName: getCustomer* @Description: 获取指定索引位置上的客户* @author zslstart* @return Customer* @date 2023-01-18 04:13:49*/public Customer getCustomer(int index) {if(index < 0 || index >= total) {return null;}return customers[index];}/*** * @MethodName: getTotal* @Description: 返回存储的客户的数量* @author zslstart* @return int* @date 2023-01-18 04:12:46*/public int getTotal() {return total;}
}

第3步 — CustomerView类的设计

package com.zslstart.p2.ui;import com.zslstart.p2.bean.Customer;
import com.zslstart.p2.service.CustomerList;
import com.zslstart.p2.util.CMUtility;/*** * @ClassName: CustomerView* @Description: CustomerView为主模块,负责菜单的显示和处理用户操作* @author zslstart* @date 2023-01-18 04:34:55*/
public class CustomerView {private CustomerList customerList = new CustomerList(10);/*** * @MethodName: enterMainMenu* @Description: 显示主菜单,响应用户输入,根据用户操作分别调用其他相应的成员方法(如addNewCustomer),以完成客户信息处理。* @author zslstart* @return void* @date 2023-01-18 04:51:39*/public void enterMainMenu() {boolean isFlag = true;while(isFlag) {System.out.println("-----------------客户信息管理软件---------------------");System.out.println("                 1.添加客户信息");System.out.println("                 2.修改客户信息");System.out.println("                 3.删除客户信息");System.out.println("                 4.显示客户信息");System.out.println("                 5.退    出\n");System.out.print("                  请选择(1-5):");char menu = CMUtility.readMenuSelection();switch(menu) {case '1':addNewCustomer();break;case '2':modifyCustomer();break;case '3':deleteCustomer();break;case '4':listAllCustomers();break;case '5':System.out.println("确认是否退出:(Y/N)");char isExit = CMUtility.readConfirmSelection();if(isExit == 'Y') {isFlag = false;}}}}/*** * @MethodName: addNewCustomer* @Description: 添加客户的操作* @author zslstart* @return void* @date 2023-01-18 04:39:25*/private void addNewCustomer() {System.out.println("--------------------添加客户--------------------");System.out.println("姓名:");String name = CMUtility.readString(30);System.out.println("性别:");char gender = CMUtility.readChar();System.out.println("年龄:");int age = CMUtility.readInt();System.out.println("电话:");String phone = CMUtility.readString(30);System.out.println("邮箱:");String email = CMUtility.readString(30);//将上述信息封装到对象中Customer customer = new Customer(name, gender, age, phone, email);boolean issuccess = customerList.addCustomer(customer);if(issuccess == true) {System.out.println("--------------------添加成功--------------------");}else {System.out.println("--------------------添加失败--------------------");}}/*** * @MethodName: modifyCustomer* @Description: 修改客户的操作* @author zslstart* @return void* @date 2023-01-18 04:40:36*/private void modifyCustomer() {System.out.println("--------------------修改客户--------------------");Customer cust;int number;for(;;) {System.out.println("请选择待修改客户的编号(-1退出):");number = CMUtility.readInt();if(number == -1) {return;}//number-1,因为用户只会将数组索引为0的数据,看作编号为1的数据,即用户没有从0开始的概念。cust = customerList.getCustomer(number - 1);if(cust == null) {System.out.println("无法找到指定客户!!");}else {break;}}//修改客户信息System.out.println("姓名("+cust.getName()+"):");String name = CMUtility.readString(number, cust.getName());System.out.println("性别("+cust.getGender()+"):");char gender = CMUtility.readChar(cust.getGender());System.out.println("年龄("+cust.getAge()+"):");int age = CMUtility.readInt(cust.getAge());System.out.println("电话("+cust.getPhone()+"):");String phone = CMUtility.readString(13, cust.getPhone());System.out.println("邮箱("+cust.getEmail()+"):");String email = CMUtility.readString(20, cust.getEmail());Customer customer = new Customer(name, gender, age, phone, email);customerList.replaceCustomer(number-1, customer);System.out.println("--------------------修改成功--------------------");}/*** * @MethodName: deleteCustomer* @Description: 删除客户的操作* @author zslstart* @return void* @date 2023-01-18 04:40:53*/private void deleteCustomer() {System.out.println("--------------------删除客户--------------------");int number;for(;;) {System.out.println("请选择待修改客户的编号(-1退出):");number = CMUtility.readInt();if(number == -1) {return;}Customer customer = customerList.getCustomer(number - 1);if(customer == null) {System.out.println("未找到客户信息!!!");}else {break;//找到了就结束循环,接着执行下面的删除操作}            }System.out.println("是否确认删除(Y/N)");char issuccess = CMUtility.readChar();if(issuccess == 'Y') {customerList.deleteCustomer(number - 1);}else {return ;}System.out.println("--------------------删除成功--------------------");}/*** * @MethodName: listAllCustomers* @Description: 查询客户列表的操作* @author zslstart* @return void* @date 2023-01-18 04:41:14*/private void listAllCustomers() {System.out.println("--------------------客户列表--------------------");int total = customerList.getTotal();if(total == 0) {System.out.println("没有客户信息!!!");}else {System.out.println("编号\t姓名\t性别\t年龄\t电话\t\t邮箱");Customer[] cust = customerList.getAllCustomers();for(int i = 0;i < cust.length;i++) {Customer custs = cust[i];System.out.println((i+1)+"\t"+custs.getName()+"\t"+custs.getGender()+"\t"+custs.getAge()+"\t"+custs.getPhone()+"\t"+custs.getEmail());}}System.out.println("--------------------客户列表--------------------");}public static void main(String[] args) {CustomerView view = new CustomerView();view.enterMainMenu();}}

第4步 — CMUtility工具类的导入

package com.zslstart.p2.util;import java.util.*;
/**
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;}
}

代码运行效果如下:

java se 学习之项目二:客户信息管理软件相关推荐

  1. Java项目二——客户信息管理软件

    目录 1.CMUtility工具类 2.客户类:Customer 3.客户信息管理类:CustomerList 4.CustomerView为主模块 二.程序的运行结果展示 1.添加客户 2.修改客户 ...

  2. Java 简单控制台项目之客户信息管理软件 --- 凌宸1642

    项目二:客户信息管理软件 模拟实现一个基于文本界面的<客户信息管理软件> 进一步掌握编程技巧和调试技巧,熟悉面向对象编程 主要涉及以下知识点: 类结构的使用:属性.方法及构造器 对象的创建 ...

  3. Java学习路线:day11 客户信息管理软件

    文章目录 转载自atguigu.com视频 客户信息管理软件 需求说明书 软件设计结构 第1步:封装CMUtility工具类 第2步:Customer类的设计 第3步:CustomerList类的设计 ...

  4. Java小项目—客户信息管理软件(二)

    CustomerView类的设计 CustomerView为主模块,负责菜单的显示和处理用户操作. 本类封装以下信息: 创建最大包含10个客户对象的CustomerList对象,供以下各成员方法使用. ...

  5. 零基础Java学习之初级项目实践(客户信息管理软件-附源码)

    项目涉及知识点 基础的面向对象编程项目. 类和对象(属性.方法及构造器) 类的封装 引用数组 数组的插入.删除和替换 对象的聚集处理 多对象协同工作 需求说明 总体说明 模拟实现基于文本界面的< ...

  6. Java基础项目——客户信息管理软件

    目录 前言 本项目目标 一.需求及软件设计结构说明 1.需求说明 1)主菜单 2)添加客户 3)修改客户 4)删除客户 5)客户列表 2.软件设计结构 1)Customer类的设计 2)Custome ...

  7. Java实现客户信息管理软件

    资源分享: 尚硅谷 链接:https://pan.baidu.com/s/1B_liAbYxos9voDuFLx-Ldg  提取码:1if5  --来自百度网盘超级会员V6的分享 「Project2( ...

  8. 尚硅谷 java基础第二个项目之客户关系管理系统

    尚硅谷 java基础第二个项目之客户关系管理系统. 做了一些完善,增加性别,电话,邮箱有效性验证.其中电话和邮箱验证直接"饮用"了网友的果汁. 在此感谢各位原著大佬们的分享. 具体 ...

  9. Java后端学习日记(二):POJO的基本概念,编写,转化和简化

    专栏目录 Java后端学习日记(一):第一个Springboot应用--Hello World! Java后端学习日记(二):POJO的基本概念,编写,转化和简化 Java后端学习日记(三):Spri ...

最新文章

  1. Oracle中的字符处理方法
  2. HtmlUnit自动填写表单并提交
  3. boost::mp11::mp_from_sequence相关用法的测试程序
  4. MySQL高级 - 案例 - 系统性能优化 - 索引优化
  5. 【C语言】输入5个整数并按输入顺序逆序输出
  6. 阿里摩酷实验室计算机视觉团队校园招聘
  7. 55种数据可视化开源工具_6种用于撰写书籍的开源工具
  8. composer的使用
  9. CCAI 2017 | 日本理化学研究所杉山将:弱监督机器学习的研究进展
  10. Django访问静态资源
  11. 数字电视厂商及解决方案全景大扫描
  12. oracle实现批量drop表,ORACLE下批量DROP表格
  13. DDD案例(2):从领域分析到代码实现
  14. 多方位玩转“地平线新发布AIoT开发板——旭日X3派(Sunrise x3 Pi)” 插电!开机!轻松秒杀!
  15. 穷人python入门教程视频_穷的解释|穷的意思|汉典“穷”字的基本解释
  16. 初看SOA:SOA是什么?
  17. visitor模式入门
  18. linux学习 - 如何确定是否是 Centos 系统
  19. 最新版网页浏览器Flash插件离线版安装程序下载
  20. 收支科目不为零_管理费用,收入,成本,为什么期末余额为零?

热门文章

  1. Photoshop CC2018(矩形选框工具简单教程)
  2. 刷题107:举证中的路径
  3. 打造朋友圈,自动驾驶公司如何走向产业化?
  4. php imagick 滤镜,PHP中imagick函数的中文解释
  5. 浅析恒流源与恒压源及其应用
  6. 合工大JAVA实验四web_合工大JAVA实验报告.doc
  7. 传感器输出数据速率与带宽的理解
  8. 是离开大啊啊啊啊啊啊啊啊
  9. Android S系统启动流程
  10. 太强了!GitHub上白嫖的SpringCloud微服务进阶宝典,啃完感觉能吊锤面试官!