Customer information management software Java project

Text-based interface to achieve the simulation of customer information management software that enables customers to insert an object,

Modify, and delete (using arrays to achieve), and the ability to print customer list.

Project hierarchical menu mode. Main Menu as follows:

"Add Customer" interface and the operation is as follows:

 

"Edit Customer" interface and the operation is as follows:

  "Delete client" interface and operation are as follows:

 "Customer List" interface and the operation is as follows:

 

Step 1 - Design Customer class

Customer categories for the entity, customer information used to encapsulate

 This class encapsulates the customer the following information:

String name: Customer name

char gender: sex

int age: Age

String phone: Phone number

String email: E-mail

Providing each attribute get / set methods

To provide the desired constructor

Customer class writing in accordance with the design requirements, and compile

In Customer class temporarily add a main method, the test method section.

Customer object is created in the process, and calls each object's methods to test whether the class to write correctly. 

 1 public class Customer {
 2 
 3     private String name;
 4     private char gender;
 5     private int age;
 6     private String phone;
 7     private String email;
 8 
 9     public Customer(String name, char gender, int age) {
10         this(name, gender, age, "", "");
11     }
12 
13     public Customer(String name, char gender, int age, String phone,
14                     String email) {
15         this.name = name;
16         this.gender = gender;
17         this.age = age;
18         this.phone = phone;
19         this.email = email;
20     }
21 
22     public String getName() {
23         return name;
24     }
25 
26     public void setName(String name) {
27         this.name = name;
28     }
29 
30     public char getGender() {
31         return gender;
32     }
33 
34     public void setGender(char gender) {
35         this.gender = gender;
36     }
37 
38     public int getAge() {
39         return age;
40     }
41 
42     public void setAge(int age) {
43         this.age = age;
44     }
45 
46     public String getPhone() {
47         return phone;
48     }
49 
50     public void setPhone(String phone) {
51         this.phone = phone;
52     }
53 
54     public String getEmail() {
55         return email;
56     }
57 
58     public void setEmail(String email) {
59         this.email = email;
60     }
61 
62     public String getDetails() {
63         return name + "\t" + gender + "\t" + age + "\t\t" + phone + "\t" + email;
64     }
65 }

第2步 — CustomerList类的设计 

CustomerList为Customer对象的管理模块,内部使用数组管理一组Customer对象

本类封装以下信息:

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

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

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

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

public CustomerList(int totalCustomer)

用途:构造器,用来初始化customers数组

参数:totalCustomer:指定customers数组的最大空间

public boolean addCustomer(Customer customer)

用途:将参数customer添加到数组中最后一个客户对象记录之后

参数:customer指定要添加的客户对象

返回:添加成功返回true;false表示数组已满,无法添加

public boolean replaceCustomer(int index, Customer cust)

用途:用参数customer替换数组中由index指定的对象

参数:customer指定替换的新客户对象

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

返回:替换成功返回true;false表示索引无效,无法替换

public boolean deleteCustomer(int index)

用途:从数组中删除参数index指定索引位置的客户对象记录

参数: index指定所删除对象在数组中的索引位置,从0开始

返回:删除成功返回true;false表示索引无效,无法删除

public Customer[] getAllCustomers()

用途:返回数组中记录的所有客户对象

返回: Customer[] 数组中包含了当前所有客户对象,该数组长度与对象个数相同。

public Customer getCustomer(int index)

用途:返回参数index指定索引位置的客户对象记录

参数: index指定所要获取的客户在数组中的索引位置,从0开始

返回:封装了客户信息的Customer对象 

 1 public class CustomerList {
 2 
 3     private Customer[] customers;
 4     private int total = 0;
 5 
 6     public CustomerList(int totalCustomer) {
 7         customers = new Customer[totalCustomer];
 8     }
 9 
10     public boolean addCustomer(Customer customer) {
11         if (total >= customers.length) return false;
12 
13         customers[total++] = customer;
14         return true;
15     }
16 
17     public boolean replaceCustomer(int index, Customer cust) {
18         if (index < 0 || index >= total) return false;
19 
20         customers[index] = cust;
21         return true;
22     }
23 
24     public boolean deleteCustomer(int index) {
25         if (index < 0 || index >= total) return false;
26 
27         for (int i = index; i < total - 1; i++) {
28             customers[i] = customers[i + 1];
29         }
30 
31         customers[--total] = null;
32 
33         return true;
34     }
35 
36     public Customer[] getAllCustomers() {
37         Customer[] custs = new Customer[total];
38         for (int i = 0; i < total; i++) {
39             custs[i] = customers[i];
40         }
41         return custs;
42     }
43 
44     public int getTotal() {
45         return total;
46     }
47 
48     public Customer getCustomer(int index) {
49         if (index < 0 || index >= total) return null;
50 
51         return customers[index];
52     }
53 }

第3步 — CustomerView类的设计

CustomerView为主模块,负责菜单的显示和处理用户操作

本类封装以下信息:

CustomerList customerList = new CustomerList(10);

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

该类至少提供以下方法:

public void enterMainMenu()

private void addNewCustomer()

private void modifyCustomer()

private void deleteCustomer()

private void listAllCustomers()

public static void main(String[] args) 

public void enterMainMenu()

用途:显示主菜单,响应用户输入,根据用户操作分别调用其他相应的成员方法,

(如addNewCustomer),以完成客户信息处理。

private void addNewCustomer()

private void modifyCustomer()

private void deleteCustomer()

private void listAllCustomers()

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

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

public static void main(String[] args)

用途:创建CustomerView实例,并调用 enterMainMenu()方法以执行程序。

public void enterMainMenu()

用途:显示主菜单,响应用户输入,根据用户操作分别调用其他相应的成员方法,

(如addNewCustomer)以完成客户信息处理。

private void addNewCustomer()

private void modifyCustomer()

private void deleteCustomer()

private void listAllCustomers()

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

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

public static void main(String[] args)

用途:创建CustomerView实例,并调用 enterMainMenu()方法以执行程序。 

按照设计要求编写CustomerView类,逐一实现各个方法,并编译

执行main方法中,测试以下功能:

主菜单显示及操作是否正确

“添加客户”操作是否正确,给用户的提示是否明确合理;

测试当添加的客户总数超过10时,运行是否正确。

“修改客户”操作是否正确,给用户的提示是否明确合理;

“删除客户”操作是否正确,给用户的提示是否明确合理;

“客户列表”操作是否正确,表格是否规整; 

  1 public class CustomerView {
  2 
  3     private CustomerList customers = new CustomerList(10);
  4 
  5     public CustomerView() {
  6         Customer cust = new Customer("张三", '男', 30, "010-56253825",
  7                 "[email protected]");
  8         customers.addCustomer(cust);
  9     }
 10 
 11     public void enterMainMenu() {
 12         boolean loopFlag = true;
 13         do {
 14             System.out
 15                     .println("\n-----------------客户信息管理软件-----------------\n");
 16             System.out.println("                   1 添 加 客 户");
 17             System.out.println("                   2 修 改 客 户");
 18             System.out.println("                   3 删 除 客 户");
 19             System.out.println("                   4 客 户 列 表");
 20             System.out.println("                   5 退       出\n");
 21             System.out.print("                   请选择(1-5):");
 22 
 23             char key = CMUtility.readMenuSelection();
 24             System.out.println();
 25             switch (key) {
 26                 case '1':
 27                     addNewCustomer();
 28                     break;
 29                 case '2':
 30                     modifyCustomer();
 31                     break;
 32                 case '3':
 33                     deleteCustomer();
 34                     break;
 35                 case '4':
 36                     listAllCustomers();
 37                     break;
 38                 case '5':
 39                     System.out.print("确认是否退出(Y/N):");
 40                     char yn = CMUtility.readConfirmSelection();
 41                     if (yn == 'Y')
 42                         loopFlag = false;
 43                     break;
 44             }
 45         } while (loopFlag);
 46     }
 47 
 48     private void addNewCustomer() {
 49         System.out.println("---------------------添加客户---------------------");
 50         System.out.print("姓名:");
 51         String name = CMUtility.readString(4);
 52         System.out.print("性别:");
 53         char gender = CMUtility.readChar();
 54         System.out.print("年龄:");
 55         int age = CMUtility.readInt();
 56         System.out.print("电话:");
 57         String phone = CMUtility.readString(15);
 58         System.out.print("邮箱:");
 59         String email = CMUtility.readString(15);
 60 
 61         Customer cust = new Customer(name, gender, age, phone, email);
 62         boolean flag = customers.addCustomer(cust);
 63         if (flag) {
 64             System.out
 65                     .println("---------------------添加完成---------------------");
 66         } else {
 67             System.out.println("----------------记录已满,无法添加-----------------");
 68         }
 69     }
 70 
 71     private void modifyCustomer() {
 72         System.out.println("---------------------修改客户---------------------");
 73 
 74         int index = 0;
 75         Customer cust = null;
 76         for (;;) {
 77             System.out.print("请选择待修改客户编号(-1退出):");
 78             index = CMUtility.readInt();
 79             if (index == -1) {
 80                 return;
 81             }
 82 
 83             cust = customers.getCustomer(index - 1);
 84             if (cust == null) {
 85                 System.out.println("无法找到指定客户!");
 86             } else
 87                 break;
 88         }
 89 
 90         System.out.print("姓名(" + cust.getName() + "):");
 91         String name = CMUtility.readString(4, cust.getName());
 92 
 93         System.out.print("性别(" + cust.getGender() + "):");
 94         char gender = CMUtility.readChar(cust.getGender());
 95 
 96         System.out.print("年龄(" + cust.getAge() + "):");
 97         int age = CMUtility.readInt(cust.getAge());
 98 
 99         System.out.print("电话(" + cust.getPhone() + "):");
100         String phone = CMUtility.readString(15, cust.getPhone());
101 
102         System.out.print("邮箱(" + cust.getEmail() + "):");
103         String email = CMUtility.readString(15, cust.getEmail());
104 
105         cust = new Customer(name, gender, age, phone, email);
106 
107         boolean flag = customers.replaceCustomer(index - 1, cust);
108         if (flag) {
109             System.out
110                     .println("---------------------修改完成---------------------");
111         } else {
112             System.out.println("----------无法找到指定客户,修改失败--------------");
113         }
114     }
115 
116     private void deleteCustomer() {
117         System.out.println("---------------------删除客户---------------------");
118 
119         int index = 0;
120         Customer cust = null;
121         for (;;) {
122             System.out.print("请选择待删除客户编号(-1退出):");
123             index = CMUtility.readInt();
124             if (index == -1) {
125                 return;
126             }
127 
128             cust = customers.getCustomer(index - 1);
129             if (cust == null) {
130                 System.out.println("无法找到指定客户!");
131             } else
132                 break;
133         }
134 
135         System.out.print("确认是否删除(Y/N):");
136         char yn = CMUtility.readConfirmSelection();
137         if (yn == 'N')
138             return;
139 
140         boolean flag = customers.deleteCustomer(index - 1);
141         if (flag) {
142             System.out
143                     .println("---------------------删除完成---------------------");
144         } else {
145             System.out.println("----------无法找到指定客户,删除失败--------------");
146         }
147     }
148 
149     private void listAllCustomers() {
150         System.out.println("---------------------------客户列表---------------------------");
151         Customer[] custs = customers.getAllCustomers();
152         if (custs.length == 0) {
153             System.out.println("没有客户记录!");
154         } else {
155             System.out.println("编号\t姓名\t性别\t年龄\t\t电话\t\t邮箱");
156             for (int i = 0; i < custs.length; i++) {
157                 System.out.println((i+1) + "\t" + custs[i].getDetails());
158             }
159         }
160 
161         System.out.println("-------------------------客户列表完成-------------------------");
162     }
163 
164     public static void main(String[] args) {
165         CustomerView cView = new CustomerView();
166         cView.enterMainMenu();
167     }
168 }
  1 import java.util.Scanner;
  2 
  3 public class CMUtility {
  4     private static Scanner scanner = new Scanner(System.in);
  5     /**
  6      用于界面菜单的选择。如果用户键入’1’-’5’中的任意字符,则方法返回。返回值为用户键入字符。
  7      */
  8     public static char readMenuSelection() {
  9         char c;
 10         for (; ; ) {
 11             String str = readKeyBoard(1, false);
 12             c = str.charAt(0);
 13             if (c != '1' && c != '2' &&
 14                     c != '3' && c != '4' && c != '5') {
 15                 System.out.print("选择错误,请重新输入:");
 16             } else break;
 17         }
 18         return c;
 19     }
 20     /**
 21      从键盘读取一个字符,并将其作为方法的返回值。
 22      */
 23     public static char readChar() {
 24         String str = readKeyBoard(1, false);
 25         return str.charAt(0);
 26     }
 27     /**
 28      从键盘读取一个字符,并将其作为方法的返回值。
 29      如果用户不输入字符而直接回车,方法将以defaultValue 作为返回值。
 30      */
 31     public static char readChar(char defaultValue) {
 32         String str = readKeyBoard(1, true);
 33         return (str.length() == 0) ? defaultValue : str.charAt(0);
 34     }
 35     /**
 36      从键盘读取一个长度不超过2位的整数,并将其作为方法的返回值。
 37      */
 38     public static int readInt() {
 39         int n;
 40         for (; ; ) {
 41             String str = readKeyBoard(2, false);
 42             try {
 43                 n = Integer.parseInt(str);
 44                 break;
 45             } catch (NumberFormatException e) {
 46                 System.out.print("数字输入错误,请重新输入:");
 47             }
 48         }
 49         return n;
 50     }
 51     /**
 52      从键盘读取一个长度不超过2位的整数,并将其作为方法的返回值。
 53      如果用户不输入字符而直接回车,方法将以defaultValue 作为返回值。
 54      */
 55     public static int readInt(int defaultValue) {
 56         int n;
 57         for (; ; ) {
 58             String str = readKeyBoard(2, true);
 59             if (str.equals("")) {
 60                 return defaultValue;
 61             }
 62 
 63             try {
 64                 n = Integer.parseInt(str);
 65                 break;
 66             } catch (NumberFormatException e) {
 67                 System.out.print("数字输入错误,请重新输入:");
 68             }
 69         }
 70         return n;
 71     }
 72     /**
 73      从键盘读取一个长度不超过limit的字符串,并将其作为方法的返回值。
 74      */
 75     public static String readString(int limit) {
 76         return readKeyBoard(limit, false);
 77     }
 78     /**
 79      从键盘读取一个长度不超过limit的字符串,并将其作为方法的返回值。
 80      如果用户不输入字符而直接回车,方法将以defaultValue 作为返回值。
 81      */
 82     public static String readString(int limit, String defaultValue) {
 83         String str = readKeyBoard(limit, true);
 84         return str.equals("")? defaultValue : str;
 85     }
 86     /**
 87      用于确认选择的输入。该方法从键盘读取‘Y’或’N’,并将其作为方法的返回值。
 88      */
 89     public static char readConfirmSelection() {
 90         char c;
 91         for (; ; ) {
 92             String str = readKeyBoard(1, false).toUpperCase();
 93             c = str.charAt(0);
 94             if (c == 'Y' || c == 'N') {
 95                 break;
 96             } else {
 97                 System.out.print("选择错误,请重新输入:");
 98             }
 99         }
100         return c;
101     }
102 
103     private static String readKeyBoard(int limit, boolean blankReturn) {
104         String line = "";
105 
106         while (scanner.hasNextLine()) {
107             line = scanner.nextLine();
108             if (line.length() == 0) {
109                 if (blankReturn) return line;
110                 else continue;
111             }
112 
113             if (line.length() < 1 || line.length() > limit) {
114                 System.out.print("输入长度(不大于" + limit + ")错误,请重新输入:");
115                 continue;
116             }
117             break;
118         }
119 
120         return line;
121     }
122 }

Guess you like

Origin www.cnblogs.com/ZengBlogs/p/12169696.html
Recommended