Java—Shang Silicon Valley Customer Information Management System [Project 2] (Familiar with the framework, familiar with the design structure!!!!)

Software design structure:

  • For beginners, it is particularly important to understand the framework
  • First of all, the software consists of the following three modules:
MVC design pattern

Model layer: Customer processes data
Control layer: CustomerList processes business logic
View layer: CustomerView displays data

CustomerView
CustomerList
Customer

The following three suggestions combined with code understanding

  1. Customer is an entity object used to encapsulate customer information
  2. CustomerList is the management module of Customer objects, internally uses arrays to manage a group of Customer objects, and provides corresponding methods of adding, modifying, deleting and traversing for CustomerView to call
  3. CustomerView is the main module, responsible for menu display and user operation processing

code block:

All four classes are under the same package

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

}

Guess you like

Origin blog.csdn.net/weixin_49900849/article/details/116098071