一、软件设计结构
- 对于初学者来说,弄清框架显得尤为重要
- 首先该软件有以下三种模块组成
二、MVC设计模式
模型层:Customer处理数据
控制层:CustomerList处理业务逻辑
视图层:CustomerView显示数据
以下三点建议结合代码理解
1.Customer为实体对象,用于封装客户信息
2.CustomerList为Customer对象的管理模块,内部用数组管理一组Customer对象,并提供相应的添加、修改、删除和遍历的方法,供CustomerView调用
3.CustomerView为主模块,负责菜单的显示和处理用户操作
四个类都在同一包下
三、Customer
package org.atjinzhao.customer; 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.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
package org.atjinzhao.customer; public class CustomerList { private Customer[] customers;//客户列表 private int total = 0;//记录已保存顾客数量 //构造器 public CustomerList(int totalCustomer) { customers = new Customer[totalCustomer]; } //方法 /** * 添加客户 * return:true添加成功,false:添加失败 */ public boolean addCustomer(Customer customer){ if (total < customers.length) { customers[total] = customer; total++; return true; }else return false; } /** * 修改指定索引位置上的客户信息 * @param index * @param cust * @return true:修改成功 false修改失败 */ public boolean replaceCustomer(int index,Customer cust){ if (index < 0 || index >= total) { return false; }else{ customers[index] = cust; return true; } } /** * 删除指定索引位置上的客户 * @param index * @return true删除成功 false删除失败 */ public boolean deleteCustomer(int index){ if (index >= 0 && index < total) { for (int i = index; i < total - 1; i++) { customers[i] = customers[i+1]; } customers[--total] = null; return true; } return false; } /** * 获取所有客户信息 * @return 数组 */ public Customer[] getAllCustomers(){ //null的部分不返回 Customer[] custs = new Customer[total]; for (int i = 0; i < total; i++) { custs[i] = customers[i]; } return custs; } /** * 获取指定索引位置上的客户 */ public Customer getCustomer(int index){ if (index >= 0 && index < total) { return customers[index]; }else return null; } /** * 获取存储客户的数量 */ public int getTotal() { return total; } /** * 获取最大能储存客户的数量 */ public int getCustomer(){ return customers.length; } }
五、CustomerView
package org.atjinzhao.customer; public class CustomerView { private CustomerList customerList = new CustomerList(10); public CustomerView() { Customer cust = new Customer("李明",'男',19,"12349982563","[email protected]"); customerList.addCustomer(cust); } public void enterMainMenu(){ //显示主页面 boolean isFlag = true; while(isFlag){ 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(" 请选择(1-5): "); char selection = CMUtility.readMenuSelection(); switch (selection) { case '1': addNewCustomer(); break; case '2': modifyCustomer(); break; case '3': deleteCustomer(); break; case '4': listAllCustomers(); break; case '5': System.out.print("是否确认退出(Y/N):"); char isExit = CMUtility.readConfirmSelection(); if (isExit == 'Y') { isFlag = false; } } } } /** * 添加客户 */ public void addNewCustomer(){ System.out.println("-----------------添加客户-----------------"); System.out.print("姓名:"); String name = CMUtility.readString(10); System.out.print("性别:"); char gender = CMUtility.readChar(); System.out.print("年龄:"); int age = CMUtility.readInt(); System.out.print("电话:"); String phone = CMUtility.readString(13); System.out.print("邮箱:"); String email = CMUtility.readString(30); Customer customer = new Customer(name,gender,age,phone,email); boolean isSuccess = customerList.addCustomer(customer); if(isSuccess){ System.out.println("-----------------添加成功-----------------"); }else{ System.out.println("---------------目录已满,添加失败---------------"); } } /** * 修改客户 */ public void modifyCustomer(){ System.out.println("-----------------修改客户-----------------"); Customer cust; int num; for (;;) { System.out.print("请输入要修改的客户序号(输入-1退出):"); num = CMUtility.readInt(); if (num == -1) { return; } cust = customerList.getCustomer(num - 1); if (cust == null) { System.out.println("无法找到指定客户!"); } else { break; } } System.out.println("姓名("+cust.getName()+"):"); String name = CMUtility.readString(10, cust.getName()); System.out.println("性别("+cust.getGender()+"):"); char gender = CMUtility.readChar( cust.getGender()); System.out.println("年龄("+cust.getAge()+"):"); int age = CMUtility.readInt(cust.getAge()); System.out.println("电话("+cust.getPhone()+"):"); String tel = CMUtility.readString(11, cust.getPhone()); System.out.println("邮箱("+cust.getEmail()+"):"); String email = CMUtility.readString(15, cust.getEmail()); Customer newCust = new Customer(name,gender,age,tel,email); boolean isReplaced = customerList.replaceCustomer(num - 1, newCust); if (isReplaced) { System.out.println("-----------------修 改 成 功-----------------\t"); } else { System.out.println("-----------------修 改 失 败-----------------\t"); } } /** * 删除客户 */ public void deleteCustomer(){ System.out.println("-----------------删除客户-----------------"); Customer cust; int index; for (;;) { System.out.print("请输入要删除的客户序号(输入-1退出):"); index = CMUtility.readInt(); if (index == -1) { return; } cust = customerList.getCustomer(index - 1); if (cust == null) { System.out.println("无法找到客户!"); } else { break; } } System.out.print("是否确认删除(Y/N):"); char isDelete = CMUtility.readConfirmSelection(); if (isDelete == 'Y') { boolean deleteSuccess = customerList.deleteCustomer(index - 1); if (deleteSuccess) { System.out.println("-----------------删除成功-----------------"); } else { System.out.println("-----------------删除失败-----------------"); } }else{ return; } } /** * 显示客户列表的操作 */ public void listAllCustomers(){ System.out.println("-------------------客 户 列 表------------------\n"); int total = customerList.getTotal(); if (total == 0) { System.out.println("没有客户记录!"); }else { System.out.println("编号\t姓名\t性别\t年龄\t电话\t\t邮箱"); Customer[] custList = customerList.getAllCustomers(); for (int i = 0; i < total; i++) { System.out.println(i+1 + "\t" + custList[i].getName()+ "\t" + custList[i].getGender()+"\t" + custList[i].getAge()+ "\t" + custList[i].getPhone()+"\t" + custList[i].getEmail()+"\t"); } } System.out.println("-----------------客户列表完成-----------------\n"); } public static void main(String[] args) { CustomerView view = new CustomerView(); view.enterMainMenu(); } }
六、CMUtility
package org.atjinzhao.customer; import java.util.*; public class CMUtility { public static void main(String[] args) { //System.out.println(readMenuSelection()); } 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.println("选择错误,请重新输入:"); } 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; } /** *从键盘读取一个字符,并将其作为方法的返回值。 *如果用户不输入字符而回车,方法将以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的字符串,并将其作为方法的返回值。 * 如果用户不输入字符而直接回车,方法将以defaultVaue作为返回值。 */ 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.println("输入长度(不大于" + limit + ")错误,请重新输入“"); continue; } break; } return line; } }
到此这篇关于Java实战之客户信息管理系统的文章就介绍到这了,更多相关Java客户信息管理系统内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!