一、实现功能
能够实现对客户对象的添加、修改、删除和显示
每次功能执行完,自动进行到下次菜单选择
主菜单:
添加功能(1):
修改功能(2):
删除功能(3):
客户列表(4):
退出功能(5):
二、模块设计结构
- Customer 为实体对象,用来封装客户信息
- CustomerList 为 Customer 对象的管理模块,内部用数组管理一组 Customer 对象, 并提供相应的添加、修改、删除和遍历方法,供 CustomerView 调用
- CustomerView 为主模块,负责菜单的显示和处理用户操作
三、代码
Customer类
public class Customer {
String name ;//客户姓名
String gender;//性别
String age;//年龄
String phone;//电话号码
String email;//电子邮箱
boolean f = true;
public Customer() {//无参构造
}
public Customer(String name, String gender, String age, String phone, String email) {
//带参构造,在后面一个用到了,记住他
this.name = name;
this.gender = gender;
this.age = age;
this.phone = phone;
this.email = email;
}
//下面是所有变量的get,set方法
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getGender() {
return gender;
}
public void setGender(String gender) {
this.gender = gender;
}
public String getAge() {
return age;
}
public void setAge(String 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;
}
}
Customer类中就是成员变量、方法、无参和带参构造器的搭建
CustomerList类
在CustomerList类中,大部分方法都是boolean类型的返回值,不要觉得奇怪。返回一个值不代表我们一定要用这个返回值,实现了功能就会
public class CustomerList {
Customer customers[];//创建一个Customer类 用户信息存放的数组
int total = 0;//已经有的客户的数量
public CustomerList(int totalCustomer) {//构建totalCustomer长的数组
customers = new Customer [totalCustomer];
}
public boolean addCustomer(Customer customer){//add方法:添加用户>形参为Customer类的对象,返回一个boolean类型
if(total>=customers.length){
//这里可以加个数组的自动扩展,我没加就返回false
return false;
}else{
customers[total] = customer;//把这次的对象放在数组中,从索引值0开始放,total每用一次就加一,供下次使用
total++;
return true;
}
}
public boolean replaceCustomer(int index, Customer cust){//修改的方法>形参为客户数组的索引值,和要更新的内容
if(index>=0&&index<=total-1){//这里要判断一下,这个索引值是不是可以用的值,依然返回boolean类型
customers[index]=cust;
return true;
}else{
return false;
}
}
public boolean deleteCustomer(int index){//删除的方法>形参为索引值(要删第几个客户的信息)
if(index<0||index>=total){//依然判断这个索引值能不能用
return false;
}else {
for(int i = index+1;i<total;i++){
//删除原理为:不用“删”,而是把下一个数组(下一个客户的信息)直接把他替换了,前赴后继的替换
//解释一下为什么这么写循环
//比如我要删索引值为2(实际上是第三个客户)
//0 1 2 3 4 ——本来有的
//0 1 3 4 ——删完之后的
customers[i-1]=customers[i];
}
total--;
return true;
}
}
public Customer[] getAllCustomers(){//显示的方法>无参,返回所有客户的大数组
Customer[] arr = new Customer[total];
//这里新建了一个新的数组,因为原本存数据的数组中除了存有客户信息,还有没用上的null
//所以用于显示的,不是存数据的原来的数组,而是新数组把有用的信息接受过来,再显示。
for(int i = 0;i<total;i++){
arr[i] = customers[i];
}
return arr;//返回这个用于显示的专门建立的新数组
}
public Customer getCustomer(int index){//用于修改功能下的显示原有客户的信息
if(index<0||index>=total){//检查索引值能不能用
return null;
}else {
return customers[index];//能用就返回想查看的第几个客户
}
}
/*public int getTotal(){
return total;
}*/
}
。
CustomerView类
import java.util.Scanner;
public class CustView {
CustomerList customers = new CustomerList(10);
//建立一个CustomerList类数组,使每个对象都能使用CustomerList中的那些方法
public void enterMainMenu(){
boolean f = true;//用于实现死循环,通过改变f的值,跳出死循环
while (f){
System.out.println("-----------------------客户信息管理软件-----------------------");
System.out.println("1、添 加 客 户");
System.out.println("2、修 改 客 户");
System.out.println("3、删 除 客 户");
System.out.println("4、客 户 列 表");
System.out.println("5、退 出");
Scanner sc = new Scanner(System.in);
System.out.print("请选择(1-5):");
int a = sc.nextInt();
switch (a){//选择哪个模式
case 1 :
addNewCustomer();//具体实现添加的功能
break;
case 2 :
modifyCustomer();//具体实现修改的功能
break;
case 3 :
deleteCustomer();//具体实现删除的功能
break;
case 4 :
listAllCustomers();//具体实现显示的功能
break;
case 5 :
f = false;
break;
}
}
System.out.println("退出成功!");
}
private void addNewCustomer(){//具体实现添加的功能
System.out.println("-----------------------添加客户-----------------------");
Scanner sc = new Scanner(System.in);
System.out.print("姓名:");
String name = sc.next();
System.out.print("性别:");
String gender = sc.next();
System.out.print("年龄:");
String age = sc.next();
System.out.print("电话:");
String phone = sc.next();
System.out.print("邮箱:");
String email = sc.next();
Customer customer = new Customer(name,gender,age,phone,email);
//新建一个对象,能存五个信息是因为,在Customer类中写了构造方法
customers.addCustomer(customer);
//调用Customerlist类的添加方法,把刚刚的对象放进数组。而这个数组在这个class开头就new了
System.out.println("-----------------------添加成功-----------------------");
}
private void modifyCustomer(){//具体实现修改的功能
System.out.println("-----------------------修改客户-----------------------");
Scanner sc = new Scanner(System.in);
System.out.print("请选择待修改客户编号(-1 退出):");
int a = sc.nextInt();
if(a==-1){//判断一下是退出还是选择修改哪个客户
return;//其实什么也没返回
}else{
sc.nextLine();
Customer x = customers.getCustomer(a-1);
//显示要修改的客户原来的信息,用getCustomer方法得到customers数组中的第几个客户信息
System.out.print("姓名("+x.getName()+"):");
//用到Customer中的get方法,接下来五个信息都是用get方法来获取具体是什么信息
String name = sc.nextLine();
x.setName(method(x.getName(),name));
//method方法在下面,作用为对两个形参做一个判断,若是输出为回车就返回原值,否则返回修改值
//然后再用set方法重写这个客户的具体哪个信息
System.out.print("性别("+x.getGender()+"):");
String gender = sc.nextLine();
x.setGender(method(x.getGender(),gender));
System.out.print("年龄("+x.getAge()+"):");
String age = sc.nextLine();
x.setAge(method(x.getAge(),age));
System.out.print("电话("+x.getPhone()+"):");
String phone = sc.nextLine();
x.setPhone(method(x.getPhone(),phone));
System.out.print("邮箱("+x.getEmail()+"):");
String email = sc.nextLine();
x.setEmail(method(x.getEmail(),email));
}
}
private void deleteCustomer(){//具体实现删除功能的方法
System.out.println("-----------------------删除客户-----------------------");
Scanner sc = new Scanner(System.in);
System.out.print("请选择待修改客户编号(-1 退出):");
int a = sc.nextInt();
int b = a-1;//把a变成索引值
System.out.print("确认是否删除(Y/N):");
String s = sc.next();
if(a==-1){//判断一下是退出还是选择删除哪个客户
return;//其实什么也没返回
}else if (s.equals("Y")){
customers.deleteCustomer(b);
System.out.println("-----------------------删除完成-----------------------");
}
}
public String method(String s,String t){//形参:s为原来的值,t是键盘输入的修改值
//作用为对两个形参做一个判断,若是输出为回车就返回原值,否则返回修改值
if(t.equals("")){
return s;
}else
return t;
}
private void listAllCustomers(){//
System.out.println("-----------------------客户列表-----------------------");
System.out.println("编号\t姓名\t性别\t年龄\t电话\t邮箱");
Customer [] arr=customers.getAllCustomers();//用一个新数组来接收用于显示的有用信息的数组
for(int i = 0;i< arr.length;i++){
int b = i+1;
System.out.print(b+"\t"+arr[i].getName()+"\t");
System.out.print(arr[i].getGender()+"\t"+arr[i].getAge()+"\t");
System.out.println(arr[i].getPhone()+"\t"+arr[i].getEmail());
}
System.out.println("-----------------------客户列表完成-----------------------");
}
//main用于测试
public static void main(String[] args) {
CustView custView = new CustView();
custView.enterMainMenu();
}
}