#客户信息管理系统功能和代码
##系统所要实现的功能
该项目要求实现客户信息的增删改查,程序功能所呈现的界面如下图所示:
##项目代码
Customer部分
package sb.llq.bean;
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 sb.llq.service;
import sb.llq.bean.Customer;
public class CustomerList {
private Customer[] customers;
private int total;
public CustomerList(int totalCustomer){
customers = new Customer[totalCustomer];
// Customer[] customers = new Customer[totalCustomer]; //会出现空指针异常,因为后面的getCustomer(index)
}
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;
}else{
for(int i = index;i < total;i++){
customers[i] = customers[i + 1];
}
total--;
return true;
}
}
public Customer[] getAllCustomer(){
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 null;
}
return customers[index];
}
public int getTotal() {
return total;
}
}
CustomerView部分
package sb.llq.ui;
import sb.llq.bean.Customer;
import sb.llq.service.CustomerList;
import sb.llq.util.CMUtility;
public class CustomerView {
boolean isFlag = true;
private CustomerList customerList = new CustomerList(10);// 数组动态初始化看看
public CustomerView(){
// Customer customer = new Customer(llq, 男, 23, 1222, 1999922); 这是错的,因为名字是字符串没加双引号的
Customer customer = new Customer("李", '男', 22, "18573442239", "l19980219@163.com");
customerList.addCustomer(customer);
}
public void enterMainMenu() {
while (isFlag) {
System.out.println("-----------------客户信息管理软件-----------------\n");
System.out.println("\t\t 1 添 加 客 户");
System.out.println("\t\t 2 修 改 客 户");
System.out.println("\t\t 3 删 除 客 户");
System.out.println("\t\t 4 客 户 列 表");
System.out.println("\t\t 5 退 出");
System.out.print(" \t请选择(1-5):");
// char select = new CMUtility().readMenuSelection(); 这样也是可行的,只是有个疑问为什么工具包可以不需要造对象或者用匿名对象来调用其中的方法。
char select = CMUtility.readMenuSelection();
switch(select){
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;
}
}
}
}
private void addNewCustomer(){
System.out.println("---------------------添加客户---------------------");
System.out.print("姓名:");
String name = CMUtility.readString(5);
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(20);
Customer customer = new Customer(name, gender, age, phone, email);
boolean isSuccess = customerList.addCustomer(customer);
if(isSuccess){
System.out.println("---------------------添加完成---------------------");
}else{
System.out.println("---------------------添加失败---------------------");
}
}
private void modifyCustomer(){
System.out.println("---------------------修改客户---------------------");
int number;// number如果定义在for循环里面,当循环结束的时候就会失效。
Customer cust;
for(;;){
System.out.print("请选择待修改客户编号(-1退出):");
number = CMUtility.readInt();
if(number == -1){
return;
}else{
cust = customerList.getCustomer(number - 1);
if(cust == null){
System.out.println("无法找到指定客户");
}else{
break;
}
}
}
System.out.println("姓名("+cust.getName()+"):");
String name = CMUtility.readString(5,cust.getName() );
System.out.print("性别(" + cust.getGender() + "):");
char gender = CMUtility.readChar(cust.getGender());
System.out.print("年龄(" + cust.getAge() + "):");
int age = CMUtility.readInt(cust.getAge());
System.out.print("电话(" + cust.getPhone() + "):");
String phone = CMUtility.readString(13, cust.getPhone());
System.out.print("邮箱(" + cust.getEmail()+ "):");
String email = CMUtility.readString(30, cust.getEmail());
Customer newCust = new Customer(name, gender, age, phone, email);
boolean isModify = customerList.replaceCustomer(number - 1,newCust);
if(isModify){
System.out.println("---------------------修改完成---------------------");
}{
System.out.println("---------------------修改失败---------------------");
}
}
private void deleteCustomer(){
System.out.println("---------------------删除客户---------------------");
int number;
for(;;){
System.out.println("请选择待删除客户编号(-1退出):");
number = CMUtility.readInt();
// int number = CMUtility.readInt();Duplicate local variable numbe 会出现这个错误
if(number == -1){
return;
}else{
Customer cust = customerList.getCustomer(number - 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(number - 1);
if(deleteSuccess){
System.out.println("---------------------删除完成---------------------");
}else{
System.out.println("---------------------删除失败---------------------");
}
}else{
return;
}
}
private 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[] custs = customerList.getAllCustomer();
for(int i = 0;i < custs.length;i++){
Customer cust = custs[i];
System.out.println((i + 1) + "\t" + cust.getName() +
"\t" + cust.getGender() + "\t" + cust.getAge() +
"\t" + cust.getPhone() + "\t" + cust.getEmail());
}
}
System.out.println("-------------------------客户列表完成-------------------------\n");
}
public static void main(String[] args) {
CustomerView view = new CustomerView();
view.enterMainMenu();
}
}
#项目过程中所出现的问题
一、如下图①是类的属性即成员变量定义在堆中,②相当于又实例化了一个Customer对象此时的customers与①中的customers不是指的的同一个,在调用构造器的时候也没有给①中的customers数组动态初始化,所以在后期调用的时候会出现空指针异常。
二、在构造器中传递参数的时候要注意数据的类型一致,特别是字符串类型。
三、for循环中定义的变量在循环结束之后会失效。
四、为什么工具包可以不用实例化,就可以实现直接调用。这个应该是跟static有关目前还没学
#总结
写的磕磕绊绊,可以多练习一下项目一和项目二防止忘记。