CustomerView类的设计
CustomerView为主模块,负责菜单的显示和处理用户操作。
本类封装以下信息: 创建最大包含10个客户对象的CustomerList对象,供以下各成员方法使用。 CustomerList customerList = new CustomerList(10); 该类至少提供以下方法: 用途:显示主菜单,响应用户输入,根据用户操作分别调用其他相应的成员方法(如addNewCustomer),以完成客户信息处理。 public void enterMainMenu() 用途:这四个方法分别完成"添加客户"、"修改客户"、"删除客户"和"客户列表"等各菜单功能。 这四个方法仅供enterMainMenu()方法调用。 private void addNewCustomer() private void modifyCustomer() private void deleteCustomer() private void listAllCustomers() 用途:创建CustomerView实例,并调用 enterMainMenu()方法以执行程序。 public static void main(String[] args)
代码实现:
main()方法、enterMainMenu()方法的实现:显示主菜单,响应用户输入。
//创建CustomerView类
public class CustomerView {
private static Scanner sc = new Scanner(System.in);
//创建最大包含10个客户对象的CustomerList对象,供以下各成员方法使用。
private static CustomerList clt = new CustomerList(10);
//在main方法中测试
public static void main(String[] args) {
//创建CustomerView类对象
CustomerView c = new CustomerView();
//调用显示主菜单的方法
c.enterMainMenu();
}
//显示主菜单
public void enterMainMenu(){
while (true){
//调用数组扩容的方法
expandArray(clt);
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 c = CMUtility.readMenuSelection();
switch (c){
case '1':
addNewCustomer();
break;
case '2':
modifyCustomer();
break;
case '3':
deleteCustomer();
break;
case '4':
listAllCustomers();
break;
case '5':
System.out.println("确认是否退出(Y/N):");
char c1 = CMUtility.readConfirmSelection();
if(c1=='Y'){
System.out.println("退出成功");
//JVM退出,程序结束运行
System.exit(0);
}else {
System.out.println("已取消退出");
System.out.println();
}
}
}
}
}
addNewCustomer()方法的实现:添加客户信息。
//添加客户
private void addNewCustomer(){
System.out.println("-----------------添加客户-----------------");
System.out.print("姓名:");
//调用工具类中的方法判断输入
String name = CMUtility.readString(4);
System.out.print("性别:");
char gender = CMUtility.readChar();
System.out.print("年龄:");
int age = CMUtility.readInt();
System.out.print("电话:");
String phone = CMUtility.readString(11);
System.out.print("邮箱:");
String email = sc.next();
//创建客户对象
Customer c = new Customer();
c.setName(name);
c.setGender(gender);
c.setAge(age);
c.setPhone(phone);
c.setEmail(email);
//调用CustomerList中的方法,添加客户对象到数组
boolean b = clt.addCustomer(c);
//判断添加的执行结果,并给出提示信息
if(b){
System.out.println("-----------------添加完成-----------------");
}else {
System.out.println("添加失败!");
}
System.out.println();
}
界面效果:
modifyCustomer()方法的实现:修改客户信息。
//修改客户
private void modifyCustomer(){
//判断客户信息是否为空
if(clt.getTotal()==0){
System.out.println("当前无客户信息,请添加客户信息后再进行此操作!");
System.out.println();
}else {
System.out.println("-----------------修改客户-----------------");
System.out.println("请选择待修改客户编号(-1退出):");
int index = sc.nextInt();
if(index==-1){
System.out.println("已退出修改操作");
System.out.println();
}else{
//将输入的值转化为索引值,执行减一操作
index--;
while (true){
if(index<clt.getTotal() && index>=0){
//格式化输出修改信息时的提示
System.out.print(String.format("姓名(%s):",clt.customers[index].getName()));
//调用工具类中的方法,用于限制姓名位数、按下回车默认返回给出的字符串
String xname = CMUtility.readString(4,clt.customers[index].getName());
System.out.print(String.format("性别(%c):",clt.customers[index].getGender()));
char xgender = CMUtility.readChar();
System.out.print(String.format("年龄(%d):",clt.customers[index].getAge()));
int xage = CMUtility.readInt();
System.out.print(String.format("电话(%s):",clt.customers[index].getPhone()));
String xphone = CMUtility.readString(11,clt.customers[index].getPhone());
System.out.print(String.format("邮箱(%s):",clt.customers[index].getEmail()));
String xemail = sc.next();
//创建修改后的客户对象
Customer c = new Customer();
c.setName(xname);
c.setGender(xgender);
c.setAge(xage);
c.setPhone(xphone);
c.setEmail(xemail);
//调用CustomerList中的方法,替换客户对象
boolean b = clt.replaceCustomer(index,c);
if(b){
System.out.println("-----------------修改完成-----------------");
}else {
System.out.println("修改失败!");
}
System.out.println();
break;
}else {
System.out.print("输入的编号有误,请你从新输入:");
int index1 = sc.nextInt();
//将输入的值减1,赋值后再进行判断
index = index1-1;
}
}
}
}
}
界面效果:
deleteCustomer()方法的实现:删除客户信息。
//删除客户
private void deleteCustomer(){
if(clt.getTotal()==0){
System.out.println("当前无客户信息,请添加客户信息后再进行此操作!");
System.out.println();
}else{
System.out.println("-----------------删除客户-----------------");
System.out.println("请选择待删除客户编号(-1退出):");
int index = sc.nextInt();
if(index==-1){
System.out.println("已退出删除操作");
System.out.println();
}else{
index--;
while (true){
if(index<clt.getTotal() && index>=0){
System.out.println("确认是否删除(Y/N):");
char c = CMUtility.readConfirmSelection();
if(c=='Y'){
//调用CustomerList中的方法,删除客户对象并返回结果值
boolean b = clt.deleteCustomer(index);
if (b){
System.out.println("-----------------删除完成-----------------");
}else {
System.out.println("删除失败!");
}
}else {
System.out.println("已取消删除");
}
System.out.println();
break;
}else {
System.out.print("输入的编号有误,请你从新输入:");
int index1 = sc.nextInt();
index = index1-1;
}
}
}
}
}
界面效果:
listAllCustomers()方法的实现:显示客户列表。
//客户列表
private void listAllCustomers(){
if(clt.getTotal()==0){
System.out.println("当前无客户信息,请添加客户信息后再进行此操作!");
System.out.println();
}else{
System.out.println("-----------------客户列表-----------------");
System.out.println("编号\t姓名\t\t性别\t年龄\t电话\t\t\t邮箱");
for(int i=0,k=1; i<clt.getTotal(); i++){
//格式化输出
System.out.println(String.format("%-3d %-6s %-2c %-3d %-12s %-12s",k++,clt.customers[i].getName(),
clt.customers[i].getGender(),clt.customers[i].getAge(), clt.customers[i].getPhone(),clt.customers[i].getEmail()));
}
System.out.println("---------------客户列表完成---------------");
}
System.out.println();
}
界面效果:
扩展
expandArray()方法的实现:数组的扩容。
数组扩容的设计目的和设计思路在之前的家庭记录收支程序中已经讲述了,这里就不在赘述,直接给出代码。
//数组扩容
public static void expandArray(CustomerList clt){
//创建一个在原数组基础上扩容后的新数组
Customer[] cr1 = new Customer[clt.customers.length+10];
//循环把原数组的元素赋值给新数组
for(int i=0; i<clt.customers.length; i++){
cr1[i]=clt.customers[i];
}
//当原数组的元素达到最大容量时,将新数组赋值给原数组
if(clt.customers.length == clt.getTotal()){
clt.customers = cr1;
}
}
该项目的实现到这里就已经介绍完了,通过本项目的代码编写与设计,能够让我们对类的创建和使用、方法的书写和调用、数组的一系列操作等更加熟练,可以当作一个不错的练手项目。对于该项目的代码编写有任何问题,或如果你有更好的想法敬请联系小编共同探讨学习~