目录

引言

一、案例需求

 二、思路

三、代码实现。

源码再此

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("客户信息未删除!");
                }
            }
        }
    }
}

       


         结束语

感谢大家的阅读,欢迎大家互赞互访,互相进步,接下来还会带来更多有趣的小东西哦,点关注不迷路!

这个题目还有一个问题就是如何保存他的数据,以供下次启动小程序时使用,知道的小伙伴欢迎评论区留言讨论哦!


源码再此

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("客户信息未删除!");
                }
            }
        }
    }
}


本文转载:CSDN博客