基于Java客户信息管理程序

基于Java客户信息管理程序

1.软件设计

  1. 模块设计:

    1. CustomerView为主模块,负责菜单的显示和处理用户操作
    2. CustomerList为Customer对象的管理模块,内部用数组管理一组Customer对象,并提供相应的添加、修改、删除和遍历方法,供CustomerView调用 Customer为实体对象,用来封装客户信息。
  2. 类设计:

    1. Customer类的设计

      1. Customer为实体类,用来封装客户信息 该类封装客户的以下信息:

        • String name :客户姓名

        • char gender :性别

        • int age :年龄

        • String phone:电话号码

        • String email :电子邮箱

      2. 提供各属性的get/set方法。

      3. 提供所需的构造器。

    2. CustomerList类的设计

      1. 本类封装以下信息:

        • Customer[] customers:用来保存客户对象的数组

        • int total = 0 :记录已保存客户对象的数量

      2. 该类至少提供以下构造器和方法:

        • 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()

    3. CustomerView类的设计

      1. 本类封装以下信息:

        • CustomerList customerList = new CustomerList(10);

      2. 创建最大包含10个客户对象的CustomerList 对象,供以下各成员方法使用。 该类至少提供以下方法:

        • public void enterMainMenu()

        • private void addNewCustomer()

        • private void modifyCustomer()

        • private void deleteCustomer()

        • private void listAllCustomers()

        • public static void main(String[] args)

    4. CMUtility.java(工具包)

  3. 界面设计:

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

1 添 加 客 户
2 修 改 客 户
3 删 除 客 户
4 客 户 列 表
5 退 出
请选择(1-5):_

2.代码

Customer类

public class Customer {
    String name; //:客户姓名
    char gender;  //:性别
    int age   ;    //   :年龄
    String phone;//:电话号码
    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 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;
    }
}

CustomerList类

public class CustomerList {
    Customer[] arrCus;//用来保存客户对象的数组
    int total = 0;  //记录已保存客户对象的数量
    public CustomerList(int totalCustomer)
    {
       arrCus=new Customer[totalCustomer];
    }
    public CustomerList() {
    }
    public boolean addCustomer(Customer customer)
    {
        if (total>=arrCus.length)
        {
            System.out.println("容量已满");
            return false;
        }
        else {
            arrCus[total]=customer;
            total++;
            return true;
        }
    }
    public boolean isReplaceCustomer(int index) {
        if (index < 0 || index >=total)//存完数组的max,数组角标为数组.length-1.而totle的值为数组.length
        {
            System.out.println("修改失败CustomerList");
            return false;
        }
        return true;
    }
    public void replaceCustomer(int index, Customer cust)
    {
            arrCus[index] = cust;
        }
    public boolean isDeleteCustomer(int index){
        if (index<0||index>=total)
        {
            return true;
        }
        return false;
    }
    public void deleteCustomer(int index)
    {
            for (int i=index;i<total;i++)
            {
                arrCus[i] = arrCus[i + 1];
            }
        arrCus[total-1]=null;//最后一个元素的角标为totle-1
        total--;
    }
    public Customer[] getAllCustomers()
    {
        return arrCus;
    }
    public Customer getCustomer(int index)
    {
        if (index<0||index>=total)
        {//  System.out.println("输入值错误CustomerList");
            return null;
        }
        else
        {
            return arrCus[index];
        }
    }
    public int getTotal()
    {
        return total;
    }
    public void printArr(Customer cust)
    {
        String name = cust.getName();
        char gender = cust.getGender();
        int age = cust.getAge();
        String phone = cust.getPhone();
        String email = cust.getEmail();
        System.out.println("姓名:"+name+"\t\t性别:"+gender+"\t\t年龄:"+age+"\t\t电话:"+phone+"\t\t邮箱:"+email);
    }
    /**
     * Test to CustomerList
     */
//    public static void main(String[] args) {
//        CustomerList cusList=new CustomerList(10);
//        Customer cus1=new Customer("张三",'男',22,"12345678912","123456@qq.com");
//        Customer cus2=new Customer("李四",'女',32,"98765419812","987654@qq.com");
//        System.out.println("**********************添加客户测试*********************");
//        cusList.addCustomer(cus1);
//        cusList.addCustomer(cus2);
//        cusList.printArr(cus1);
//        cusList.printArr(cus2);
//        System.out.println("**********************打印所有客户*********************");
//        for (int i=0;i<cusList.total;i++)
//        {
//            cusList.printArr(cusList.arrCus[i]);
//        }
//        int total1 = cusList.getTotal();
//        System.out.println("客户个数:"+total1);
//        System.out.println("**********************删除测试*********************");
//        cusList.deleteCustomer(0);
//        for (int i=0;i<cusList.total;i++)
//        {
//          cusList.printArr(cusList.arrCus[i]);
//        }
//        int total2 = cusList.getTotal();
//        System.out.println("客户个数:"+total2);
//        System.out.println("**********************修改客户测试*********************");
//        System.out.println("说明:将李四修改成女性");
//        Customer cus3=new Customer("李四",'男',32,"98765419812","987654@qq.com");
//        cusList.replaceCustomer(0,cus3);
//        for (int i=0;i<cusList.total;i++)
//        {
//            cusList.printArr(cusList.arrCus[i]);
//        }
//        int total3 = cusList.getTotal();
//        System.out.println("客户个数:"+total3);
//    }

}

CustomerView类

public class CustomerView {
    CustomerList customerList=new CustomerList(10);
    public CustomerView() {
        Customer cus1=new Customer("张三",'男',22,"12345678912","123456@qq.com");
        Customer cus2=new Customer("李四",'男',54,"54321678912","432156@qq.com");
        Customer cus3=new Customer("王五",'男',54,"54321678912","432156@qq.com");
        customerList.addCustomer(cus1);
        customerList.addCustomer(cus2);
        customerList.addCustomer(cus3);
       //customerList.printArr(cus1);
    }
    public void enterMainMenu()
    {
     //System.out.println(customerList.total);
        CustomerView cV=new CustomerView();
        for (;;)
        {
            System.out.println("                    -----------------客户信息管理软件-----------------\n");
            System.out.print("                                     1 添 加 客 户\n");
            System.out.print("                                     2 修 改 客 户\n");
            System.out.print("                                     3 删 除 客 户\n");
            System.out.print("                                     4 客 户 列 表\n");
            System.out.print("                                     5 退      出\n");
            System.out.print("");
            System.out.print("                                     请选择(1-5):_\n");
            int getChoiceNum = CMUtility.readMenuSelection();
            switch (getChoiceNum)
            {
                case '1':
                    cV.addNewCustomer();
                    break;
                case '2':
                    cV.modifyCustomer();
                    break;
                case '3':
                    cV.deleteCustomer();
                    break;
                case '4':
                    cV.listAllCustomers();
                    break;
                case '5':
                    System.out.println("确定退出吗?(Y/N):");
                    char getYorN = CMUtility.readConfirmSelection();
                    if (getYorN=='Y')
                    {
                        return;
                    }
                    else
                    {
                       break;
                    }
            }
        }
    }
    private void addNewCustomer()
    {
        System.out.println("                   -------------------添加客户界面------------------");
            if (customerList.total>=customerList.arrCus.length)
            {
                System.out.println("容量已满");
                return;
            }
        else {
            Customer addCus = new Customer();
            System.out.print("请输入姓名:");
            String name = CMUtility.readString(10);
            addCus.setName(name);
            System.out.print("请输入性别:");
            char gender = CMUtility.readChar();
            addCus.setGender(gender);
            System.out.print("请输入年龄:");
            int age = CMUtility.readInt();
            addCus.setAge(age);
            System.out.print("请输入电话:");
            String phone = CMUtility.readString(11);
            addCus.setPhone(phone);
            System.out.print("请输入邮箱:");
            String email = CMUtility.readString(20);
            addCus.setEmail(email);
            customerList.addCustomer(addCus);
                customerList.printArr(addCus);

            System.out.println("                   -------------------添加成功面------------------");
        }
//        customerList.printArr(addCus);

    }
    private void modifyCustomer()
    {
        int getModNum;
        System.out.println("                   -------------------修改客户界面------------------");
        for (;;)
        {
            System.out.print("请输入需要修改的客户序号:");
            getModNum = CMUtility.readInt();
            boolean replaceCustomer = customerList.isReplaceCustomer(getModNum - 1);
            if (replaceCustomer==true) {
                break;
            }else
            {
                System.out.println("请重新输入");
            }
        }
        System.out.println(customerList.total);
//        System.out.print("请输入需要修改的客户序号:");
//            getModNum = CMUtility.readInt();
        Customer reCus = new Customer();
        Customer oldCus = customerList.getCustomer(getModNum-1);
        System.out.print("请输入姓名:(无需修改请回车)");
        String name = CMUtility.readString(10,oldCus.getName());
        reCus.setName(name);
        System.out.print("请输入性别:(无需修改请回车)");
        char gender = CMUtility.readChar(oldCus.getGender());
        reCus.setGender(gender);
        System.out.print("请输入年龄:(无需修改请回车)");
        int age = CMUtility.readInt(oldCus.getAge());
        reCus.setAge(age);
        System.out.print("请输入电话:(无需修改请回车)");
        String phone = CMUtility.readString(11,oldCus.getPhone());
        reCus.setPhone(phone);
        System.out.print("请输入邮箱:(无需修改请回车)");
        String email = CMUtility.readString(20,oldCus.getEmail());
        reCus.setEmail(email);
        customerList.arrCus[getModNum-1]=reCus;
        System.out.println("                   -------------------修改完成---------------");
 //       customerList.printArr(reCus);
    }
    private void deleteCustomer()
    {
        System.out.println("                   -------------------删除客户界面------------------");
        int getDelNum;
        for (;;)
        {
            System.out.print("请输入需要删除的客户序号:");
            getDelNum = CMUtility.readInt();
            boolean isdeleteCustomer = customerList.isDeleteCustomer(getDelNum - 1);
            if (isdeleteCustomer==false) {
                break;
            }else
            {
                System.out.println("请重新输入");
            }
        }
        System.out.println("确认删除(Y/N):");
        char delYorN = CMUtility.readConfirmSelection();
        if (delYorN=='Y'){
            customerList.deleteCustomer(getDelNum-1);
            int total = customerList.total;
            System.out.println(total);
        }else {
            return;
        }
        System.out.println("                   -------------------删除成功------------------");
    }
    private void listAllCustomers()
    {

        System.out.println("                   -------------------客户列表界面------------------");
        Customer[] allCustomers = customerList.getAllCustomers();
        for (int i=0;i<customerList.total;i++)
        {
            Customer getOneCus = customerList.getCustomer(i);
            System.out.print("编号"+(i+1)+"\t\t");
            customerList.printArr(getOneCus);
        }
    }
    public static void main(String[] args)
    {
        CustomerView customerView=new CustomerView();
         customerView.enterMainMenu();
    }

}

CMUtility类(工具包)

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;
    }
}

3.总结

  1. 在主界面方法中,需要创建一个CustomerView对象来调用其他方法,通过for循环持续运行程序,通过Switch-case来跳转到不同的方法中,同时完成退出程序功能。
  2. 在添加功能中,需要先判断数组是否满了,创建Customer对象将客户数据设置完成,再创建CustomerList对象将设置好的Customer存入CustomerList,总客户个数+。
  3. 在修改功能中,需要先判断是否存在这条客户信息,创建一个新的Customer对象,以及get原Customer的信息,不需要修改的返回原信息,将修改好的信息存入新的Customer然后赋给原Customer。
  4. 在删除功能中,需要先判断是否存在这条客户信息,然后将从这个数组中在这个客户信息后面的信息通过for循环赋给前一条信息,最后一个赋值null,总客户个数-1。
  5. 在打印客户信息功能中,先对CustomerList数组遍历,输出每一个Custome,然后通过printArr方法,通过传入一个Custome类型的数据,打印出Custome的每一条信息,从而实现打印全部客户信息。
  6. 其他方面:
    1. 在存入预先写好的客户信息时,需要将添加信息放入CustomeView的构造器中,如果放在其他地方,在主函数执行过程中可能不会执行到。
    2. 需要区分用于计数的total、getNum和数组中的角标、index等值的关系
posted @ 2021-03-19 21:41  CooperMiNi  阅读(155)  评论(0)    收藏  举报