基于Java基础的客户信息管理系统

前言


这是狗子我学习过一遍 Java基础 之后复习找到的 第二个练手案例,且两个项目都来自于 小破站 中尚硅谷的练手案例,我在写这两个项目的时候除了 尚硅谷 中提及到的部分也添加了一些自己的想法在里面,因此可能会有一些许不同,还请见谅。如果阅读过程中出现什么问题,欢迎评论留言。

第一个练手案例为 基于Java基础的家庭收支记账软件,大家伙有兴趣的话可以去瞄两眼 ᵎ(•̀㉨•́)و)

同时贴上尚硅谷Java基础教学视频的链接 – > 传送门

在这里插入图片描述

一、前期准备


在开始搞事情之前得先准备好下面这些东西,其中 JDKIDE 不一定需要统一,这只是狗子我使用的版本而已。准备好之后带上我们的脑子就可以开搞啦

  1. 编程语言 : Java
  2. 运行环境 : JDK1.8
  3. IDE : IDEA 2020
  4. 储备知识 : Java基础

二、整体结构介绍


在这次案例中第一次使用到了 MVC框架,将业务层和视图层进行分离,提高了程序的可维护性,降低了耦合性,这一框架模式也是从尚硅谷的教学中学习得来,‘真’ YYDS
介绍

三、工具类介绍


在尚硅谷的文件中提供了已经封装好的 CMUtility 工具类,方便我们实现键盘的访问。而由于狗子我是在复习,工具类中涉及到的基本上都已经接触过,因此这个工具类便自己进行了编写,如果是从视频那边过来的话也可以直接跳过工具类的编写,不过还是推荐自己尝试一下,我写的工具类名为 CustomerUtility

函数名功能介绍返回类型
readMenuSelection用于界面菜单的选择int
readChar从键盘中读取一个字符且存在方法重载char
readInt从键盘中读取一个不超过二位数的整数且存在方法重载int
readString从键盘中读取一个长度不超过 limit 的字符串且存在方法重载String
readConfirmSelection用于确认选择的输入,读取‘Y’或‘N’char
readKeyBoard用于记录用户从键盘中输入的数据String

在这里附上一小撮演示小截图
演示截图

四、功能浅谈

1、Customer 类


顾名思义(第一次看的时候还去翻译了),这是一个用来封装客户信息的类,这里面封装了客户的基本信息,并提供了各属性的 get / set 方法以及自编的构造器对属性进行初始化,下方代码省略了 get / set 方法

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.gender = gender;
        this.age = age;
        this.phone = phone;
        this.email = email;
    }

    //构造器重载
    public Customer(String name, char gender, int age) {
        this(name, gender, age, "null", "null");
    }
}

2、CustomerView 类


主函数所在的类,其为主模块,负责菜单的显示和处理用户操作,其中该类下的成员方法仅供 enterMainMenu() 方法调用,该类中实现的主要有以下函数:

2.1、 public void enterMainMenu()
用于显示主菜单,相应用户输入,根据用户操作分别调用其他相应的成员方法,从而完成客户信息处理

public void enterMainMenu() {
    boolean loopFlag = true;
    do {
        System.out.println("\n-----------------客户信息管理系统-----------------\n");
        System.out.println("\t\t1. 添 加 客 户\t\t\t2. 修 改 客 户");
        System.out.println("\t\t3. 删 除 客 户\t\t\t4. 客 户 列 表");
        System.out.println("\t\t5. 退       出");
        System.out.print("\t\t请选择(1-5):");
        int selection = CustomerUtility.readMenuSelection(5);
        switch(selection) {
            case 1: {
                addNewCustomer();   //添加客户信息
                break;
            }
            case 2: {
                modifyCustomer();   //修改客户信息
                break;
            }
            case 3: {
                deleteCustomer();   //删除客户信息
                break;
            }
            case 4: {
                listAllCustomers(); //遍历客户列表
                break;
            }
            case 5: {
                System.out.print("确认是否退出(Y / N): ");
                if(CustomerUtility.readConfirmSelection() == 'Y') {
                    loopFlag = false;
                }
                break;
            }
        }
    }while(loopFlag);
}

2.2、private void addNewCustomer()
用于添加新用户,且只允许 enterMainMenu 方法调用

private void addNewCustomer() {
    Customer customer = new Customer();
    System.out.println("---------------------添加客户---------------------");
    System.out.print("姓名:");
    customer.setName(CustomerUtility.readString(4));
    System.out.print("性别:");
    customer.setGender(CustomerUtility.readChar());
    System.out.print("年龄:");
    customer.setAge(CustomerUtility.readInt());
    System.out.print("电话:");
    customer.setPhone(CustomerUtility.readString(15));
    System.out.print("邮箱:");
    customer.setEmail(CustomerUtility.readString(20));

    if(customerList.addCustomer(customer)) {
        System.out.println("---------------------添加完成---------------------");
    } else {
        System.out.println("----------------记录已满,无法添加-----------------");
    }
}

2.3、 private void modifyCustomer()
实例化一个新的客户对象传递给 replaceCustomer 方法从而达到修改客户信息的作用

private void modifyCustomer(){
    System.out.println("---------------------修改客户---------------------");

    int index;
    Customer customer = null;
    while(true) {
        System.out.print("请选择待修改客户姓名(0退出):");
        String name = CustomerUtility.readString(4);
        if(name.equals("0")) {
            return;
        }
        index = customerList.searchCustomer(name);
        if(index == -1) {
            System.out.println("该客户不存在!");
            continue;
        }
        customer = customerList.getCustomer(index+1);
        if(customer == null) {
            System.out.println("该客户不存在!");
        } else {
            break;
        }
    }

    System.out.print("姓名(" + customer.getName() + "): ");
    String name = CustomerUtility.readString(4, customer.getName());

    System.out.print("性别(" + customer.getGender() + "): ");
    char gender = CustomerUtility.readChar(customer.getGender());

    System.out.print("年龄(" + customer.getAge() + "): ");
    int age = CustomerUtility.readInt(customer.getAge());

    System.out.print("电话(" + customer.getPhone() + "): ");
    String phone = CustomerUtility.readString(15, customer.getPhone());

    System.out.print("邮箱(" + customer.getEmail() + "): ");
    String email = CustomerUtility.readString(20, customer.getEmail());

    if(customerList.replaceCustomer(index+1, new Customer(name, gender, age, phone, email))) {
        System.out.println("---------------------修改完成---------------------");
    } else {
        System.out.println("----------无法找到指定客户,修改失败--------------");
    }

}

2.4、 private void deleteCustomer()
通过用户输入的下标 index 进行索引客户对象信息,从而对其进行删除

private void deleteCustomer() {
    System.out.println("---------------------删除客户---------------------");

    int index = 0;
    while(true) {
        System.out.print("请选择待删除客户编号(0退出):");
        index = CustomerUtility.readInt();
        if(index == 0) {
            return;
        }
        if(customerList.getCustomer(index) == null) {
            System.out.println("无法找到该用户!");
        } else {
            break;
        }
    }

    System.out.print("确认是否删除(Y / N):");
    if(CustomerUtility.readConfirmSelection() == 'N') {
        return;
    }
    if(customerList.deleteCustomer(index)) {
        System.out.println("---------------------删除完成---------------------");
    } else {
        System.out.println("----------无法找到指定客户,删除失败--------------");
    }
}

2.5、 private void listAllCustomers()
通过getCustomers() 方法获得客户对象列表后遍历已添加的客户信息

private void listAllCustomers() {
    System.out.println("---------------------------客户列表---------------------------");
    Customer[] customers = customerList.getCustomers(); //接收客户对象数组
    if(customers.length == 0) {
        System.out.println("没有客户记录!");
    } else {
        System.out.println("序号\t\t姓名\t\t性别\t\t年龄\t\t电话\t\t\t\t\t邮箱");
        for (int i = 0; i < customers.length; i++) {
            System.out.println("No." + (i+1) + "\t" + customers[i].getName() + "\t\t" + customers[i].getGender() + "\t\t" + customers[i].getAge() + "\t\t" + customers[i].getPhone() + "\t\t" + customers[i].getEmail());
        }
    }
    System.out.println("----------------------------------------------------------");
}

3、CustomerList 类


该类为 Customer对象 的管理模块,内部使用 数组 管理一组Customer对象。在本类中封装了实际用户个数属性 total 和存放客户对象的数组 customers ,默认可存放十个客户对象信息,可通过构造器进行自定义修改,以及具备对列表进行管理操作功能的方法:

3.1、 public boolean addCustomer(Customer customer)
将新的客户对象 customer 通过尾插法添加到客户对象数组中

public boolean addCustomer(Customer customer) {
    if(customers.length <= this.total) {
        return false;
    }
    customers[this.total++] = customer;
    return true;
}

3.2、 public boolean replaceCustomer(int index, Customer customer)
修改过的客户对象 customer 替换数组中由 index 指定的对象,其中 index 为用户指定伤处对像在数组中的索引位置,用户输入从 1 开始

public boolean replaceCustomer(int index, Customer customer) {
    if(--index < 0 || index > this.total) {
        return false;
    }
    customers[index] = customer;
    return true;
}

3.3、 public int searchCustomer(String name)
通过名字检索指定客户对象,这一方法为狗子我自己添加的,尚硅谷视频中使用的是 下标检索

public int searchCustomer(String name) {
    if(this.total == 0) {
        return -1;
    }
    for (int i = 0; i < this.total; i++) {
        if(customers[i].getName().equals(name)) {
            return i;
        }
    }
    return -1;
}

**3.4、public boolean deleteCustomer(int index) **
从数组中删除指定索引位置 index 的客户对象信息,其中为用户指定伤处对像在数组中的索引位置,用户输入从 1 开始

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

3.5、 public Customer[] getCustomers()
获取数组中记录的所有客户对象

public Customer[] getCustomers() {
    Customer[] customersList = new Customer[this.total];
    for (int i = 0; i < this.total; i++) {
        customersList[i] = customers[i];
    }
    return customersList;
}

3.6、 public Customer getCustomer(int index)
返回指定索引位置 index 的客户对象信息,其中 index 为用户指定伤处对像在数组中的索引位置,用户输入从 1 开始

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

五、收获

每次复习一部分知识之后都会有一定的新的收获,补充了很多细节,最重要的莫过于是在 Java 中最重要的面向对象的思想(此对象非你对象(๑•̌㉨•̑๑)੭ु⁾⁾ ༘ؓ ँั๊ྃ

  • 第一次接触到了 MVC框架 ,让自己的程序更加结构化,找到一个自己想要的函数真的很好找,改 bug 的时间缩短了
  • 对封装还是有了进一步的认识,函数的重用适当的变多,增加了程序的可维护性

六、总结

还是那句话:掉头发这件事情你得实践了才知道你掉的质量怎么样,在学习Java甚至是任何一门语言中,只学不敲,头发也就白掉了。这次相对于第一次的练手案例在结构上更加合理,动手真的是学习道路上必不可缺的一部分。

这里附上该案例中的全部代码 – >传送门

在这里插入图片描述

  • 10
    点赞
  • 95
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 6
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

陈宝子

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值