拼电商客户管理系统

内容来自:尚硅谷

难度:easy

目 标

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

关键字的使用:this

 需求说明

模拟实现基于文本界面的拼电商客户管理系统

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

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

             -----------------拼电商客户管理系统-----------------

                                     1 添 加 客 户

                                     2 修 改 客 户

                                     3 删 除 客 户

                                     4 客 户 列 表

                                     5 退           出

                                     请选择(1-5)_

每个客户的信息被保存在 Customer 对象中。
以一个 Customer 类型的数组来记录当前所有的客户。
每次“添加客户”(菜单 1 )后,客户( Customer )对象被添加到数组中。
每次“修改客户”(菜单 2 )后,修改后的客户( Customer )对象替换数组中原对象。
每次“删除客户”(菜单 3 )后,客户( Customer )对象被从数组中清除。
执行“客户列表 ”(菜单 4 )时,将列出数组中所有客户的信息。

“添加客户”的界面及操作过程如下所示:

  ……

                   请选择(1-5)1

---------------------添加客户---------------------

姓名:佟刚

性别:男

年龄:35

电话:010-56253825

邮箱:tongtong@atguigu.com

---------------------添加完成---------------------

“修改客户”的界面及操作过程如下所示:

  ……

                   请选择(1-5)2

---------------------修改客户---------------------

请选择待修改客户编号(-1退出)1

姓名(佟刚)<直接回车表示不修改>

性别()

年龄(35)

电话(010-56253825)

邮箱(tongtong@atguigu.com)tongg@atguigu.com

---------------------修改完成---------------------

“删除客户”的界面及操作过程如下所示:

  ……

                   请选择(1-5)3

---------------------删除客户---------------------

请选择待删除客户编号(-1退出)1

确认是否删除(Y/N)y

---------------------删除完成---------------------

“客户列表”的界面及操作过程如下所示:

  ……

   请选择(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实现Customer

1. 按照设计要求编写 Customer 类,并编译
2. Customer 类中临时添加一个 main 方法中,作为单元测试方法。

  在方法中创建Customer对象,并调用对象的各个方法,以测试该类是否编写正确。

//package com.atguigu.p2;

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) {
        this(name, gender, age, "", "");
    }
//    public Customer(String name, char gender, int age) {
//        this(name, gender, age, "", "");
//    }
    public Customer(String name,  char gender, int age, String phone,
                    String email) {
        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;
    }

    public String getDetails() {
        return name + "\t" + gender + "\t\t" + age + "\t\t" + phone + "\t" + email;
    }
}

2CustomerList类的设计

l CustomerList Customer 对象的管理模块,内部使用数组管理一组 Customer 对象
l 本类封装以下信息:
Ø Customer[] customers :用来保存客户对象的数组
Ø int total = 0                 :记录已保存客户对象的数量
l 该类至少提供以下构造器和方法:
Ø 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 ()

l public CustomerList ( int totalCustomer )
Ø 用途:构造器,用来初始化 customers 数组
Ø 参数: totalCustomer :指定 customers 数组的最大空间
l public boolean addCustomer (Customer customer )
Ø 用途:将参数 customer 添加组中最后一个客户对象记录之后
Ø 参数: customer 指定要添加的客户对象
Ø 返回:添加成功返回 true false 表示数组已满,无法添加
l public boolean replaceCustomer ( int index, Customer cust )
Ø 用途:用参数 customer 替换数组中由 index 指定的对象
Ø 参数: customer 指定替换的新客户对象

             index指定所替换对象在数组中的位置,从0开始

Ø 返回:替换成功返回 true false 表示索引无效,无法替换
l public boolean deleteCustomer ( int index)
Ø 用途:从数组中删除参数 index 指定索引位置的客户对象记录
Ø 参数: index 指定所删除对象在数组中的索引位置,从 0 开始
Ø 返回:删除成功返回 true false 表示索引无效,无法删除
l public Customer[] getAllCustomers ()
Ø 用途:返回数组中记录的所有客户对象
Ø 返回: Customer[] 数组中包含了当前所有客户对象,该数组长度与对象个数相同。
l public Customer getCustomer ( int index)
Ø 用途:返回参数 index 指定索引位置的客户对象记录
Ø 参数: index 指定所要获取的客户在数组中的索引位置,从 0 开始
Ø 返回:封装了客户信息的 Customer 对象

1. 按照设计要求编写 CustomerList 类,并编译
2. CustomerList 类中临时添加一个 main 方法中,作为单元测试方法。
3. 在方法中创建 CustomerList 对象(最多存放 5 个客户对象),然后分别用模拟数据调用以下各个方法,以测试各方法是否编写正确:
addCustomer ()
replaceCustomer ()
deleteCustomer ()
getAllCustomers ()
getCustomer ()
getTotal ()
4. 进一步测试以下情况,以验证该类是否编写正确:
调用 addCustomer 方法,添加至少 5 个以上客户对象时
当数组中客户对象数量为 0 时,仍然调用 replaceCustomer 方法替换对象
当数组中客户对象数量为 0 时,仍然调用 deleteCustomer 方法删除对象
对于 replaceCustomer deleteCustomer getCustomer 的调用,当参数 index 的值无效时(例如 -1 6
getAllCustomers 方法返回的数组长度是否与实际的客户对象数量一致

public class CustomerList {
    private Customer[] customers;
    private int total = 0;

    public CustomerList(int totalCustomer) {
        customers = new Customer[totalCustomer];
    }
    public boolean addCustomer(Customer customer) {
        if (total >= customers.length) {
            return false;
        }
        customers[total++] = customer;
        return true;
    }

    public Customer getCustomer(int index) {
        if (index < 0 || index >= total) {
            return null;
        }
        return customers[index];
    }

    public boolean replaceCustomer(int index, Customer cust) {
        if (index < 0 || index >= total) {
            return false;
        }
        customers[index] = cust;
        return true;
    }
    public boolean deleteCustomer(int index) {
        if (index < 0 || index >= total) {
            return false;
        }
        for (int i = index; i < total - 1; i++) {
            customers[i] = customers[i + 1];
        }

        customers[--total] = null;

        return true;
    }

    public Customer[] getAllCustomers() {
        Customer[] custs = new Customer[total];
        for (int i = 0; i < total; i++) {
            custs[i] = customers[i];
        }
        return custs;
    }

}

3CustomerView类的设计

l CustomerView 为主模块,负责菜单的显示和处理用户操作
l 本类封装以下信息:
Ø CustomerList customerList = new CustomerList (10);

  创建最大包含10个客户对象的CustomerList 对象,供以下各成员方法使用。

l 该类至少提供以下方法:
Ø public void enterMainMenu ()
Ø private void addNewCustomer ()
Ø private void modifyCustomer ()
Ø private void deleteCustomer ()
Ø private void listAllCustomers ()

public static void main(String[] args)

l public void enterMainMenu ()
Ø 用途:显示主菜单,响应用户输入,根据用户操作分别调用其他相应的成员方法(如 addNewCustomer ),以完成客户信息处理。
l    private void addNewCustomer ()

  private void modifyCustomer()

  private void deleteCustomer()

  private void listAllCustomers()

Ø 用途:这四个方法分别完成“添加客户”、“修改客户”、“删除客户”和“客户列表”等各菜单功能。

  这四个方法仅供enterMainMenu()方法调用。

l public static void main(String[] args )
Ø 用途:创建 CustomerView 实例,并调用 enterMainMenu () 方法以执行程序。

1. 按照设计要求编写 CustomerView 类,逐一实现各个方法,并编译
2. 执行 main 方法中,测试以下功能:
主菜单显示及操作是否正确
“添加客户”操作是否正确,给用户的提示是否明确合理;测试当添加的客户总数超过 10 时,运行是否正确
“修改客户”操作是否正确,给用户的提示是否明确合理;
“删除客户”操作是否正确,给用户的提示是否明确合理;
“客户列表”操作是否正确,表格是否规整;
3. 思考以下问题:
当软件退出时,所有客户信息便丢失了!运用什么手段可以将这些信息长久保存,以便在下一次运行软件时继续使用?

 

import java.util.Scanner;
//package com.atguigu02.project;
public class CustomerView {
    private CustomerList customers=new CustomerList(10);

    public CustomerView() {
        Customer cust = new Customer("张三", '男', 30, "13843255423",
                "abc@126.com");
        customers.addCustomer(cust);
    }

    public void jianmie(){
        boolean flag = true;
        do {
            System.out.println("----------拼电商客户管理系统----------\n");
            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):_");
            Scanner sc = new Scanner(System.in);
            int choice = sc.nextInt();
            switch (choice) {
                case 1:
                    addcustomer();
                    break;
                case 2:
                    xiugaiCustomer();
                    break;
                case 3:
                    shanchuCustomer();
                    break;
                case 4:
                    customerlist();
                    break;
                case 5:
                    flag=false;


            }
        }while (flag);
    }

    private void addcustomer(){
        System.out.println("------------添加客户------------");
        System.out.print("姓名:");
        Scanner sc = new Scanner(System.in);
        String name = sc.nextLine();
        System.out.print("性别:");
        char gender = sc.next().charAt(0);
        System.out.print("年龄:");
        int age = sc.nextInt();
        sc.nextLine();
        System.out.print("电话:");
        String phone = sc.nextLine();
        System.out.print("邮箱:");
        String email = sc.nextLine();

        Customer cust = new Customer(name,gender,age,phone,email);
        boolean flag = customers.addCustomer(cust);;
        if(flag){
            System.out.println("----------添加完成-----------");
        }
        else{
            System.out.println("-----------记录已满,无法添加-------");
        }
    }

    public void xiugaiCustomer(){
        int index = 0;
        Customer cust = null;
        for(;;){
        System.out.println("---------修改客户----------");
        System.out.println("请选择待修改客户编号(-1退出):");
        Scanner sc = new Scanner(System.in);
        index = sc.nextInt();
            if (index == -1) {
                return;
            }
            cust = customers.getCustomer(index - 1);
            if (cust == null) {
                System.out.println("无法找到指定客户!");
            } else
                break;
        }
        System.out.print("姓名(" + cust.getName() + "):");
        Scanner sc = new Scanner(System.in);
        String name = sc.nextLine();
        String oldname=cust.getName();
        if(name!=oldname){
            oldname=name;
        }

        System.out.print("性别(" + cust.getGender() + "):");
        char gender = sc.next().charAt(0);
        char oldgender=cust.getGender();
        if(gender!=oldgender){
            oldgender=gender;
        }

        System.out.print("年龄(" + cust.getAge() + "):");
        int age =sc.nextInt();
        int oldage=cust.getAge();
        if(age!=oldage){
            oldage=age;
        }

        sc.nextLine();

        System.out.print("电话(" + cust.getPhone() + "):");
        String phone=sc.nextLine();
        String oldphone = cust.getPhone();
        if(phone!=oldphone) {
            oldphone = phone;
        }
        System.out.print("邮箱(" + cust.getEmail() + "):");
        String email=sc.nextLine();
        String oldemail = cust.getEmail();
        if(email!=oldemail){
            oldemail=email;
        }
        cust = new Customer(oldname, oldgender, oldage, oldphone, oldemail);

        boolean flag = customers.replaceCustomer(index-1, cust);
            if (flag) {
                System.out.println("---------------------修改完成---------------------");
            } else {
                System.out.println("----------无法找到指定客户,修改失败--------------");
            }
        }
        public void shanchuCustomer() {
            Customer cust = null;
            int num = 0;

            for (; ; ) {
                System.out.println("-------------删除客户-------------");
                System.out.println("请选择待删除客户编号(-1退出):");
                Scanner sc = new Scanner(System.in);
                num = sc.nextInt();
                if (num == -1) {
                    return;
                }
                cust = customers.getCustomer(num - 1);
                if (cust == null) {
                    System.out.println("未找到目标用户");
                } else
                    break;

            }
            System.out.println("确认是否删除(Y/N):");
            Scanner sc = new Scanner(System.in);
            String choice = sc.nextLine();
            if(choice=="N"){
                return;
            }
            boolean flag = customers.deleteCustomer(num - 1);
            if (flag) {
                System.out.println("-----------删除完成------------");
            }
            else {
                System.out.println("-------无法找到指定客户,删除失败------");
            }
        }
        public void customerlist(){
            System.out.println("---------------客户列表-----------------");
            Customer[] custs = customers.getAllCustomers();
            if(custs.length==0){
                System.out.println("目前列表中暂无客户");
            }
            else{
                System.out.println("编号\t姓名\t性别\t年龄\t电话\t\t\t邮箱");
                for (int i = 0; i < custs.length; i++) {
                    System.out.println((i+1) + "\t" + custs[i].getDetails());
//                    System.out.println(System.out.println(i+ 1 + "\t" + custs[i].getName() + "\t" + custs[i].getGender() + "\t" + custs[i].getAge() + "\t\t" + custs[i].getPhone() + "\t" + custs[i].getEmail());
                }
                System.out.println("-----------客户列表完成------------");
            }
        }
    public static void main(String[] args) {
        CustomerView cView = new CustomerView();
        cView.jianmie();
    }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/981266.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

day51 shell

在终端提示输入一个成绩&#xff0c;通过shell判断该成绩的等级 [90,100] : A [80, 90) : B [70, 80) : C [60, 70) : D [0, 60) : 不及格 提示并输入一个文件 判断文件是否存在 如果存在&#xff0c;判断文件是否为普通文件 如果是&#xff0c;则将 “hello world”写…

Docker 模拟 kubernetes 的 pod

1.安装Docker 环境 1.安装 epel 源 yum install -y epel-release 它是为了给我们的bridge utils 提供我们对应的 源支持 2.安装 bridge-utils yum install -y bridge-utils 3.加载 br_netfilter 模块 modprobe br_netfilter echo br_netfilter >> /etc/modules-l…

Hugging Face 推出 FastRTC:实时语音视频应用开发变得得心应手

估值超过 40 亿美元的 AI 初创公司 Hugging Face 推出了 FastRTC&#xff0c;这是一个开源 Python 库&#xff0c;旨在消除开发者在构建实时音频和视频 AI 应用时的主要障碍。 "在 Python 中正确构建实时 WebRTC 和 Websocket 应用一直都很困难&#xff0c;"FastRTC…

Spark核心之02:RDD、算子分类、常用算子

spark内存计算框架 一、目标 深入理解RDD弹性分布式数据集底层原理掌握RDD弹性分布式数据集的常用算子操作 二、要点 ⭐️1. RDD是什么 RDD&#xff08;Resilient Distributed Dataset&#xff09;叫做**弹性分布式数据集&#xff0c;是Spark中最基本的数据抽象&#xff0c…

Redis中常见的延迟问题

使用复杂度高的命令 Redis提供了慢日志命令的统计功能 首先设置Redis的慢日志阈值&#xff0c;只有超过阈值的命令才会被记录&#xff0c;这里的单位是微妙&#xff0c;例如设置慢日志的阈值为5毫秒&#xff0c;同时设置只保留最近1000条慢日志记录&#xff1a; # 命令执行超过…

LangGraph实战:构建智能文本分析流水线

LangGraph实战:构建智能文本分析流水线 1. 智能文本分析 LangGraph是基于图结构的工作流开发框架,通过节点函数和条件流转实现复杂业务逻辑。四大核心能力: 1.1 状态容器 统一管理流程执行上下文,支持JSON序列化存储 1.2 智能路由 基于条件判断实现动态分支跳转 1.3 可…

【北京迅为】itop-3568 开发板openharmony鸿蒙烧写及测试-第1章 体验OpenHarmony—烧写镜像

瑞芯微RK3568芯片是一款定位中高端的通用型SOC&#xff0c;采用22nm制程工艺&#xff0c;搭载一颗四核Cortex-A55处理器和Mali G52 2EE 图形处理器。RK3568 支持4K 解码和 1080P 编码&#xff0c;支持SATA/PCIE/USB3.0 外围接口。RK3568内置独立NPU&#xff0c;可用于轻量级人工…

MyBatis - 单元测试 参数传递 注解 CRUD

目录 1. MyBatis 简介 2. 简单使用 MyBatis 2.1 创建 MyBatis 项目 2.2 连接数据库 2.3 创建 Java 类 2.4 创建 Mapper 接口 2.5 在测试类中执行 3. 单元测试 3.1 Test 3.2 SpringBootTest 3.3 BeforeEach / AfterEach 4. MyBatis 基础操作 4.1 配置 MyBatis 打印日…

课程2. 机器学习方法论

课程2. 机器学习方法论 训练算法并评估其质量将样本分成训练和测试。分层 交叉验证方法sklearn 接口算法模型训练模型的应用质量评估 数据预处理标准缩放Violinplot 数据集使用模型Pipeline 在上一讲中&#xff0c;我们讨论了机器学习专家面临的挑战。无论解决的问题类型和解决…

CentOS 7使用RPM安装MySQL

MySQL是一个开源的关系型数据库管理系统&#xff08;RDBMS&#xff09;&#xff0c;允许用户高效地存储、管理和检索数据。它被广泛用于各种应用&#xff0c;从小型的web应用到大型企业解决方案。 MySQL提供了丰富的功能&#xff0c;包括支持多个存储引擎、事务能力、数据完整…

涂层,如同一道守护之光,有效遏制了QD(量子点)那如星辰般忽明忽暗的闪烁与如垂暮手电筒般黯淡无光的褪色现象。

涂层&#xff0c;如同一道守护之光&#xff0c;有效遏制了QD&#xff08;量子点&#xff09;那如星辰般忽明忽暗的闪烁与如垂暮手电筒般黯淡无光的褪色现象。俄克拉荷马大学&#xff08;University of Oklahoma&#xff09;的一项卓越研究&#xff0c;犹如破晓之光&#xff0c;…

C++第六节:stack和queue

本节目标&#xff1a; stack的介绍与使用queue的介绍与使用priority_queue的介绍与使用容器适配器模拟实现与结语 1 stack&#xff08;堆&#xff09;的介绍 stack是一种容器适配器&#xff0c;专门用在具有后进先出操作的上下文环境中&#xff0c;只能从容器的一端进行元素的插…

五分钟快速学习优秀网站的HTML骨架布局设计

一.编写多级过滤脚本&#xff0c;在控制台执行copy方法进行提取&#xff1a; 过滤脚本脚本 // 在浏览器F12的控制台里&#xff0c;直接执行以下脚本 copy(document.documentElement.outerHTML// 一级过滤&#xff1a;移除动态内容.replace(/<script\b[^>]*>[\s\S]*?…

硬件学习笔记--47 LDO相关基础知识介绍

目录 1.LDO主要功能介绍 2.LDO相关参数介绍 3.使用方法 4.优、缺点 1.LDO主要功能介绍 LDO&#xff08;Low Dropout Regulator&#xff09;是一种线性稳压器&#xff0c;用于将输入电压转换为稳定的输出电压。其主要功能包括&#xff1a; 1&#xff09;稳压功能&#xff1…

利用矩阵相乘手动实现卷积操作

卷积&#xff08;Convolution&#xff09; 是信号处理和图像处理中的一种重要操作&#xff0c;广泛应用于深度学习&#xff08;尤其是卷积神经网络&#xff0c;CNN&#xff09;中。它的核心思想是通过一个卷积核&#xff08;Kernel&#xff09; 或 滤波器&#xff08;Filter&am…

STM32-HAL库初始化时钟

使能和失能外设GPIOA 时钟信号初始化函数 HAL_RCC_OscConfig函数&#xff1a; HAL_StatusTypeDef是该函数的返回值类型,最顶上的那句话只是这个函数的原型 HAL_RCC_ClockConfig函数&#xff1a; 因为FLASH实际上只能支持24MHz的时钟信号所以如果用高于24MHz的信号输入则要用到等…

windows环境执行composer install出错

现在的项目环境都是要求比较新的版本&#xff0c;就比如今天部署测试一个新框架遇到了下面这些问题&#xff0c;报错原因有以下几点&#xff1a; PHP版本低了&#xff0c;现在的新项目都是要求PHP8以上版本&#xff1b;指令废弃&#xff0c;配置文件禁用即可&#xff1b;切换P…

Three.js 入门(光线投射实现3d场景交互事件)

本篇主要学习内容 : 光线投射器交互事件 点赞 关注 收藏 学会了 1.光线投射器 Raycaster 此类旨在协助光线投射。光线投射用于鼠标拾取&#xff08;确定鼠标在 3D 空间中的哪些对象上&#xff09;等。 Raycaster( origin : Vector3, direction : Vector3, near : Float,…

蓝桥杯web第三天

展开扇子题目&#xff0c; #box:hover #item1 { transform:rotate(-60deg); } 当悬浮在父盒子&#xff0c;子元素旋转 webkit display: -webkit-box&#xff1a;将元素设置为弹性伸缩盒子模型。-webkit-box-orient: vertical&#xff1a;设置伸缩盒子的子元素排列方…

Unity 使用NGUI制作无限滑动列表

原理&#xff1a; 复用几个子物体&#xff0c;通过子物体的循环移动实现&#xff0c;如下图 在第一个子物体滑动到超出一定数值时&#xff0c;使其放到最下方 --------------------------------------------------------------》 然后不停的循环往复&#xff0c;向下滑动也是这…