基于Java客户信息管理程序
基于Java客户信息管理程序
1.软件设计
-
模块设计:
- CustomerView为主模块,负责菜单的显示和处理用户操作
- CustomerList为Customer对象的管理模块,内部用数组管理一组Customer对象,并提供相应的添加、修改、删除和遍历方法,供CustomerView调用 Customer为实体对象,用来封装客户信息。
-
类设计:
-
Customer类的设计
-
Customer为实体类,用来封装客户信息 该类封装客户的以下信息:
-
String name :客户姓名
-
char gender :性别
-
int age :年龄
-
String phone:电话号码
-
String email :电子邮箱
-
-
提供各属性的get/set方法。
-
提供所需的构造器。
-
-
CustomerList类的设计
-
本类封装以下信息:
-
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()
-
-
-
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)
-
-
-
CMUtility.java(工具包)
-
-
界面设计:
-----------------客户信息管理软件-----------------
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.总结
- 在主界面方法中,需要创建一个CustomerView对象来调用其他方法,通过for循环持续运行程序,通过Switch-case来跳转到不同的方法中,同时完成退出程序功能。
- 在添加功能中,需要先判断数组是否满了,创建Customer对象将客户数据设置完成,再创建CustomerList对象将设置好的Customer存入CustomerList,总客户个数+。
- 在修改功能中,需要先判断是否存在这条客户信息,创建一个新的Customer对象,以及get原Customer的信息,不需要修改的返回原信息,将修改好的信息存入新的Customer然后赋给原Customer。
- 在删除功能中,需要先判断是否存在这条客户信息,然后将从这个数组中在这个客户信息后面的信息通过for循环赋给前一条信息,最后一个赋值null,总客户个数-1。
- 在打印客户信息功能中,先对CustomerList数组遍历,输出每一个Custome,然后通过printArr方法,通过传入一个Custome类型的数据,打印出Custome的每一条信息,从而实现打印全部客户信息。
- 其他方面:
- 在存入预先写好的客户信息时,需要将添加信息放入CustomeView的构造器中,如果放在其他地方,在主函数执行过程中可能不会执行到。
- 需要区分用于计数的total、getNum和数组中的角标、index等值的关系

浙公网安备 33010602011771号