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

需求:

 

 

 代码一:

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Scanner;

/**
 * @author FREZXX
 * @create 2021-05-20 20:33
 */
public class Customer{



    String name = new String();
    String sex = new String();
    int age = 0;
    String phone = new String();
    String mail = new String();

    Scanner scanner = new Scanner(System.in);


    public Customer(){
        System.out.println("创建对象");
        System.out.println();
    }

    public void add(){
        System.out.println("---------------------添加客户---------------------");

        System.out.print("姓名:");
        this.name = scanner.next();

        System.out.print("性别:");
        this.sex = scanner.next();

        System.out.print("年龄:");
        this.age = scanner.nextInt();

        System.out.print("电话:");
        this.phone = scanner.next();

        System.out.print("邮箱:");
        this.mail = scanner.next();

    }

    public void modify(Customer customer[], int sum){
        System.out.println("---------------------修改客户---------------------");
        System.out.print("请选择待删除客户编号(-1退出):");
        int pos = scanner.nextInt();

        BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in));
        String string = "";

        try {
            if(pos != -1)
                System.out.print("姓名(" + this.name + "):");
            string = bufferedReader.readLine();
            if(string.length() != 0)
                this.name = string;

            System.out.print("性别(" + this.sex + "):");
            string = bufferedReader.readLine();
            if(string.length() != 0)
                this.sex = string;

            System.out.print("年龄(" + this.age + "):");
            string = bufferedReader.readLine();
            if(string.length() != 0)
                this.age = Integer.parseInt(string);;

            System.out.print("电话(" + this.phone + "):");
            string = bufferedReader.readLine();
            if(string.length() != 0)
                this.phone = string;

            System.out.print("邮箱(" + this.mail + "):");
            string = bufferedReader.readLine();
            if(string.length() != 0)
                this.mail = string;
        }catch (IOException e){
            System.out.println("IO异常");
        }

    }

    public void delete(Customer customer[], int sum){
        System.out.println("---------------------删除客户---------------------");
        System.out.print("请选择待删除客户编号(-1退出):");
        int pos = scanner.nextInt();
        if(pos != -1)
            for(int i = pos; i + 1 < sum; i++)
                customer[i] = customer[i+1];

    }

    public void list(Customer customer[], int sum){
        System.out.println("---------------------客户列表---------------------");
        System.out.println("编号\t\t姓名\t\t性别\t\t年龄\t\t电话\t\t邮箱");
        for(int i = 0; i < sum; i++)
            System.out.println((i+1) + "\t\t" + customer[i].name + "\t\t" + customer[i].sex + "\t\t" +
                    customer[i].age + "\t\t" + customer[i].phone + "\t\t" + customer[i].mail + "\t\t");

    }

}
Customer
import java.util.InputMismatchException;
import java.util.Scanner;

/**
 * @author FREZXX
 * @create 2021-05-20 20:31
 */
public class CustomerManage {
    public static void main(String[] args){
        Scanner scanner = new Scanner(System.in);

        Customer []customer = new Customer[20];
        for(int i = 0; i<20;i++)
            customer[i] = new Customer();

        boolean flag = true;
        int sum = 0;
        int pos;
        while(flag){

            System.out.println("-----------------客户信息管理软件-----------------");
            System.out.println();
            System.out.println("                   1.添加客户");
            System.out.println("                   2.修改客户");
            System.out.println("                   3.删除客户");
            System.out.println("                   4.客户列表");
            System.out.println("                   5.退出");
            System.out.println();
            System.out.println("                   请选择(1-5):_");

            try {
                switch (scanner.nextInt()){

                    case 1:
                        customer[sum].add();
                        sum += 1;
                        break;
                    case 2:
                        customer[0].modify(customer, sum);
                        break;
                    case 3:
                        customer[0].delete(customer, sum);
                        sum -= 1;
                        break;
                    case 4:
                        customer[0].list(customer, sum);
                        break;
                    case 5:
                        System.out.println("已退出");
                        flag = false;
                        break;
                    default:
                        System.out.println("输入不在范围内,请重新输入。");
                        break;

                }
            }catch (InputMismatchException e){
                System.out.println("输入格式错误,请重新输入。");
                scanner.next();
            }

        }
        scanner.close();

    }
}
CustomerManage

 

问题:

类数组初始化后,要新建对象实例,否则报空指针异常

Scanner无法识别回车

 

改进:

用MVC模式设计思想,将代码分为

模型层,数据库,存放单个对象属性,并只有获取和设置方法

控制层,处理业务逻辑,管理一组对象,提供相应的添加、修改、删除和遍历方法

视图层,显示数据,负责菜单的显示和处理用户操作

 

代码二:

/**
 * @author FREZXX
 * @create 2021-05-21 11:43
 */

//顾客对象,存放属性,并只有获取和设置方法。alt+shift+s
//MVC模式:模型层,主要处理数据,数据库
public class Customer_v2 {

    private String name;
    private char gender;
    private int age;
    private String phone;
    private String email;

    public Customer_v2() {
    }

    public Customer_v2(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" + age + "\t\t" + phone + "\t" + email;
    }
}
Customer_v2
/**
 * @author FREZXX
 * @create 2021-05-21 11:44
 */

//为Customer对象的管理模块,内部用数组管理一组Customer对象,
//并提供相应的添加、修改、删除和遍历方法,供CustomerView调用
//MVC模式:控制层,处理业务逻辑
public class CustomerList_v2 {
    private Customer_v2[] customers;
    private int total = 0;

    //用途:构造器,用来初始化customers数组
    //参数:totalCustomer:指定customers数组的最大空间
    public CustomerList_v2(int totalCustomer) {
        customers = new Customer_v2[totalCustomer];
    }

    //用途:将参数customer添加到数组中最后一个客户对象记录之后
    //参数:customer指定要添加的客户对象
    //返回:添加成功返回true;false表示数组已满,无法添加
    public boolean addCustomer(Customer_v2 customer) {
        if (total >= customers.length) return false;

        customers[total++] = customer;
        return true;
    }

    //用途:用参数customer替换数组中由index指定的对象
    //参数:customer指定替换的新客户对象
    //        index指定所替换对象在数组中的位置,从0开始
    //返回:替换成功返回true;false表示索引无效,无法替换
    public boolean replaceCustomer(int index, Customer_v2 cust) {
        if (index < 0 || index >= total) return false;

        customers[index] = cust;
        return true;
    }

    //用途:从数组中删除参数index指定索引位置的客户对象记录
    //参数: index指定所删除对象在数组中的索引位置,从0开始
    //返回:删除成功返回true;false表示索引无效,无法删除
    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;
    }

    //用途:返回数组中记录的所有客户对象
    //返回: Customer[] 数组中包含了当前所有客户对象,该数组长度与对象个数相同。
    public Customer_v2[] getAllCustomers() {
        Customer_v2[] custs = new Customer_v2[total];
        for (int i = 0; i < total; i++) {
            custs[i] = customers[i];
        }
        return custs;
    }

    //用途:返回参数index指定索引位置的客户对象记录
    //参数: index指定所要获取的客户在数组中的索引位置,从0开始
    //返回:封装了客户信息的Customer对象
    public Customer_v2 getCustomer(int index) {
        if (index < 0 || index >= total) return null;

        return customers[index];
    }

    public int getTotal() {
        return total;
    }

}
CustomerList_v2
/**
 * @author FREZXX
 * @create 2021-05-21 11:44
 */

//为主模块,负责菜单的显示和处理用户操作
//MVC模式:视图层,显示数据
public class CustomerView_v2 {
    private CustomerList_v2 customers = new CustomerList_v2(10);

    public void enterMainMenu() {
        boolean loopFlag = true;
        do {
            System.out
                    .println("\n-----------------客户信息管理软件-----------------\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):");

            char key = CMUtility.readMenuSelection();
            System.out.println();
            switch (key) {
                case '1':
                    addNewCustomer();
                    break;
                case '2':
                    modifyCustomer();
                    break;
                case '3':
                    deleteCustomer();
                    break;
                case '4':
                    listAllCustomers();
                    break;
                case '5':
                    System.out.print("确认是否退出(Y/N):");
                    char yn = CMUtility.readConfirmSelection();
                    if (yn == 'Y')
                        loopFlag = false;
                    break;
            }
        } while (loopFlag);
    }

    private void addNewCustomer() {
        System.out.println("---------------------添加客户---------------------");
        System.out.print("姓名:");
        String name = CMUtility.readString(4);
        System.out.print("性别:");
        char gender = CMUtility.readChar();
        System.out.print("年龄:");
        int age = CMUtility.readInt();
        System.out.print("电话:");
        String phone = CMUtility.readString(15);
        System.out.print("邮箱:");
        String email = CMUtility.readString(15);

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

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

        int index = 0;
        Customer_v2 cust = null;
        for (; ; ) {
            System.out.print("请选择待修改客户编号(-1退出):");
            index = CMUtility.readInt();
            if (index == -1) {
                return;//表示方法结束,返回主界面
            }

            cust = customers.getCustomer(index - 1);
            if (cust == null) {
                System.out.println("无法找到指定客户!");
            } else
                break;//表示for循环结束
        }

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

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

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

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

        System.out.print("邮箱(" + cust.getEmail() + "):");
        String email = CMUtility.readString(15, cust.getEmail());

        cust = new Customer_v2(name, gender, age, phone, email);

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

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

        int index = 0;
        Customer_v2 cust = null;
        for (; ; ) {
            System.out.print("请选择待删除客户编号(-1退出):");
            index = CMUtility.readInt();
            if (index == -1) {
                return;
            }

            cust = customers.getCustomer(index - 1);
            if (cust == null) {
                System.out.println("无法找到指定客户!");
            } else
                break;
        }

        System.out.print("确认是否删除(Y/N):");
        char yn = CMUtility.readConfirmSelection();
        if (yn == 'N')
            return;

        boolean flag = customers.deleteCustomer(index - 1);
        if (flag) {
            System.out.println("---------------------删除完成---------------------");
        } else {
            System.out.println("----------无法找到指定客户,删除失败--------------");
        }
    }

    private void listAllCustomers() {
        System.out.println("---------------------------客户列表---------------------------");
        Customer_v2[] 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].getName() + "\t" + custs[i].getGender() + "\t" + custs[i].getAge() + "\t\t" + custs[i].getPhone() + "\t" + custs[i].getEmail());
                System.out.println((i + 1) + "\t" + custs[i].getDetails());
            }
        }

        System.out.println("-------------------------客户列表完成-------------------------");
    }

    public static void main(String[] args) {
        CustomerView_v2 cView = new CustomerView_v2();
        cView.enterMainMenu();
    }

}
CustomerView_v2

 

 

 

 

 
posted @ 2021-05-21 15:47  FredMoMo  阅读(91)  评论(0)    收藏  举报