目标:
模拟实现一个基于文本界面的《客户信息管理软件》 进一步掌握编程技巧和调试技巧,熟悉面向对象编程 主要涉及以下知识点:
- 类结构的使用:属性、方法及构造器
- 对象的创建与使用
- 类的封装性
- 声明和使用数组
- 数组的插入、删除和替换
- 关键字的使用:this
需求说明:
模拟实现基于文本界面的《客户信息管理软件》。 该软件能够实现对客户对象的插入、修改和删除(用数组实现),并能够打印客户明细表。 项目采用分级菜单方式。每个客户的信息被保存在Customer对象中。 以一个Customer类型的数组来记录当前所有的客户。 每次“添加客户”(菜单1)后,客户(Customer)对象被添加到数组中。 每次“修改客户”(菜单2)后,修改后的客户(Customer)对象替换数组中原对象。 每次“删除客户”(菜单3)后,客户(Customer)对象被从数组中清除。 执行“客户列表 ”(菜单4)时,将列出数组中所有客户的信息 。
代码:
有三个模块组成,分别是数据对象封装(.bean)、服务相关的(.service)、自定义View。
.bean:
public class Customer {
private String name,phone,email;
private int age;
private char gender; //基本属性
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 void setName(String name){
this.name=name;
}
public void setAge(int age) {
this.age = age;
}
public void setGender(char gender){
this.gender=gender;
}
public void setPhone(String phone){
this.phone=phone;
}
public void setEmail(String email) {
this.email = email;
} // 属性赋值
public String getName() {
return name;
}
public char getGender() {
return gender;
}
public int getAge() {
return age;
}
public String getPhone() {
return phone;
}
public String getEmail() {
return email;
} //获得属性的数据
}
.Service:
package BankService;
import Bankbean.Customer;
public class CustomerList {
Customer[] customers; //用来保存客户对象的数组
int total = 0; //记录已保存客户对象的数量
public CustomerList(int totalCustomer){
customers= new Customer[totalCustomer];
}
public boolean addCustomer(Customer customer){
if (total>=customers.length){ return false; }
customers[total++]=customer;
return true;
}
public boolean replaceCustomer(int index, Customer cust){
if (index<0 || index>=total){return false;}
customers[index]=cust;
return true;
}
public boolean deleteCustomer(int index){
if (index<0 || index>=total){return false;}
for (int i = index; i <total-1; i++) {
customers[i]=customers[i+1];
}
customers[--total]=null;
return true;
}
public Customer[] getAllCustomers(){
Customer[] custs = new Customer[total];
for (int i = 0; i < total; i++) {
custs[i] = customers[i];
}
return custs; //注意边界。直接返回customers的地址会空指。
}
public Customer getCustomer(int index){
if (index < 0 || index >= total) return null;
return customers[index];
}
public int getTotal(){return total;}
}
.View:
package BankUi;
import BankService.CustomerList;
import Bankbean.Customer;
import javafx.scene.control.CustomMenuItem;
import java.util.Scanner;
public class CustomerView {
Scanner sr = new Scanner(System.in);
CustomerList customerList = new CustomerList(10); //设定数组的长度
public void enterMainMenu(){
OUT:
while (true){
System.out
.println("\n-----------------客户信息管理软件-----------------\n");
System.out.println(" 1 添 加 客 户");
System.out.println(" 2 修 改 客 户");
System.out.println(" 3 删 除 客 户");
System.out.println(" 4 客 户 列 表");
System.out.println(" 5 退 出\n");
System.out.print(" 请选择(1-5):");
switch (sr.nextInt()){
case 1:
addNewCustomer();
break;
case 2:
modifyCustomer();
break;
case 3:
deleteCustomer();
break;
case 4:
listAllCustomers();
break;
case 5:
break OUT;
default:
System.out.println("请输入正确的数字(1-5)!");
}
}
}
private void addNewCustomer(){
Customer customer = new Customer();
System.out.println("---------------------添加客户---------------------");
System.out.print("姓名:");
customer.setName(sr.next());
System.out.print("性别:");
customer.setGender(sr.next().charAt(0));
System.out.print("年龄:");
customer.setAge(sr.nextInt());
System.out.print("手机:");
customer.setPhone(sr.next());
System.out.print("邮箱:");
customer.setEmail(sr.next());
boolean flag = customerList.addCustomer(customer);
if (flag){
System.out.println("添加成功!");
}else
System.out.println("----------------记录已满,无法添加-----------------");
}
private void modifyCustomer(){
Customer customer = new Customer();
int index;
System.out.println("---------------------修改客户---------------------");
while (true){
System.out.println("请输入要修改的客户的序号(-1退出)");
index=sr.nextInt();
if (index == -1){
return;
}
customer = customerList.getCustomer(index-1);
if (customer==null){
System.out.println("无法找到指定客户!");
}else
break;
}
System.out.print("姓名:");
customer.setName(sr.next());
System.out.print("性别:");
customer.setGender(sr.next().charAt(0));
System.out.print("年龄:");
customer.setAge(sr.nextInt());
System.out.print("手机:");
customer.setPhone(sr.next());
System.out.print("邮箱:");
customer.setEmail(sr.next());
boolean flag =customerList.replaceCustomer(index-1,customer);
if (flag){
System.out.println("修改成功!");
}else System.out.println("----------无法找到指定客户,修改失败--------------");
}
private void deleteCustomer(){
Customer customer = new Customer();
int index;
System.out.println("---------------------删除客户---------------------");
while (true){
System.out.println("请输入要修改的客户的序号(-1退出)");
index=sr.nextInt();
if (index == -1){
return;
}
customer = customerList.getCustomer(index-1);
if (customer==null){
System.out.println("无法找到指定客户!");
}else
break;
}
boolean flag =customerList.deleteCustomer(index-1);
if (flag){
System.out.println("修改成功!");
}else System.out.println("----------无法找到指定客户,修改失败--------------");
}
private void listAllCustomers(){
System.out.println("---------------------------客户列表---------------------------");
Customer[] cust= customerList.getAllCustomers();
if (cust.length == 0) {
System.out.println("没有客户记录!");
} else {
System.out.println("编号 姓名 性别 年龄 电话 邮箱");
for (int i = 0; i < cust.length; i++) {
System.out.println(i + 1 + "\t" + cust[i].getName() + "\t" + cust[i].getGender() + "\t" + cust[i].getAge() + "\t\t" + cust[i].getPhone() + "\t\t" + cust[i].getEmail());
}
} System.out.println("-------------------------客户列表完成-------------------------");
}
public static void main(String[] args){
CustomerView cView = new CustomerView();
cView.enterMainMenu();
}
}