软件设计分析

  该软件有三个模块组成:Customer  CustomerList  CustomerView

  Customer 为实体对象,用来封装客户信息;

  CustomerList 为 Customer 对象的管理模块,内部用数组管理一组Customer 对象,并提供相应的增加,删除,修改和遍历方法,功CustomerView 调用;

  CustomerView 为主模块,负责菜单的显示和处理用户操作;

一、Customer 类的设计

  1、该类封装客户的信息

    String name ; 客户姓名

    String gender ; 性别

    ing age ; 年龄

    String phone ; 电话号码

    String email ; 电子邮箱

  2、提供个属性的get\set 方法

  3、提供所需要的构造器

  4、代码

package com.xuanxiao.customer;

/**
* @see Customer为实体类,用来封装客户信息
* @author mn Email:1494349721@qq.com
* @version
* @data 2020年11月11日
*/ public class Customer { private String name; //客户姓名
private String gender; //性别
private int age; //年龄
private String phone; //电话号码
private String email; //电子邮箱
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 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;
}
public Customer() {
} public Customer(String name, String gender, int age, String phone, String email) {
this.name = name;
this.gender = gender;
this.age = age;
this.phone = phone;
this.email = email;
} }

二、CustomerList 类的设计

  1、本类封装以下信息

    Customer[] customers; 用来保存客户对象的数组

    int total ; 记录已保存客户对象的数量

  2、提供以下构造器和方法

    public CustomerList(int totalCustomer)  ;用来初始化customers数组的构造器

    public boolean addCustomer(Customer customer)  ;将指定的客户添加到数组中

    public boolean replaceCustomer(int index,Customer cust)  ;修改指定索引位置的客户信息

    public boolean deleteCustomer(int index)  ;删除指定位置的客户

    public Customer[] getAllCustomers()  ;获取所有的客户信息

    public Customer getCustomer(int index)  ;获取指定索引位置上的客户

    public int getTotal()  ;获取存储的客户的数量

  3、代码

package com.xuanxiao.server;

import com.xuanxiao.customer.Customer;

/**
* @see CustomerList是Customer對象的管理模塊,内部使用Customer數組,並提供相應的添加,刪除,修改和遍歷操作。
* @author mn Email:1494349721@qq.com
* @version
* @data 2020年11月11日
*
*/ public class CustomerList { private Customer[] customers; //用来保存客户对象的数组
private int total; //记录已保存客户对象的数量 /**
* @see 用来初始化customers数组的构造器
* @param totleCoustmer:制定数组的长度的参数
*/
public CustomerList(int totalCustomer) {
customers = new Customer[totalCustomer];
}
/**
* @see 将指定的客户添加到数组中
* @author mn
* @param customer
* @return true:添加成功 false:添加失败
*/
public boolean addCustomer(Customer customer) { if(total >= customers.length) {
return false;
}
customers[total] = customer;
total ++; //或者 customers[total++] = customer;
return true;
} /**
* @see 修改指定索引位置的客户信息
* @author mn
* @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;
}
} /**
* @see 删除指定位置的客户
* @author mn
* @param index
* @return true:删除成功 false:删除失败
*/
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-1] = null;
total --;
//或者 customers[--total] = null;
return true;
} /**
* @see 获取所有的客户信息
* @author mn
* @return
*/
public Customer[] getAllCustomers() { Customer[] custs = new Customer[total];
for(int i = 0;i < total;i++) {
custs[i] = customers[i];
}
return custs;
} /**
* @see 获取指定索引位置上的客户
* @author mn
* @param index
* @return 找到元素返回;未找到返回null
*/
public Customer getCustomer(int index) { if(index < 0 || index >= total) {
return null;
}
return customers[index]; } /**
* @see 获取存储的客户的数量
* @author mn
* @return
*/
public int getTotal() {
return total;
}
}

三、CustomerView 类的设计

  1、本类封装以下的信息

    CustomerList customerList = new CustomerList[10] ;

  2、提供以下的方法和构造器

    public void enterMainView()  ;显示菜单

    public void addNewCustomer()  ;增加客户信息

    public void modifyCustomer()  ;修改客户信息

    public void deleteCustomer()  ;删除客户信息

    public void listAllCustomers()  ;遍历客户信息

    public static void main(String[] args)  ;主函数

  3、代码

package com.xuanxiao.view;

import java.util.Scanner;

import com.xuanxiao.customer.Customer;
import com.xuanxiao.server.CustomerList; /**
* @see CustomerView为主模块,负责菜单的显示和处理用户操作
* @author mn Email:1494349721@qq.com
* @version
* @data 2020年11月11日
*/
public class CustomerView { private CustomerList customerList = new CustomerList(10); public CustomerView() {
//Customer customer = new Customer("马成功", '男', 21, "17345625812", "466962353@qq.com");
//customerList.addCustomer(customer);
} /**
* @see 显示菜单
*/
public void enterMainView() { 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("-----------------------------------");
System.out.println();
System.out.print(" 请选择(1-5):"); Scanner input = new Scanner(System.in);
int choose;
choose = input.nextInt();
if (choose != 1 && choose != 2 && choose != 3 && choose != 4 && choose != 5) {
System.out.println("输入信息有误,请重新输入!");
}
switch (choose) {
case 1:
addNewCustomer();
break;
case 2:
modifyCustomer();
break;
case 3:
deleteCustomer();
break;
case 4:
listAllCustomers();
break;
case 5:
System.out.print("确定是否退出(退出11/不退00):");
Scanner input1 = new Scanner(System.in);
int exit;
exit = input1.nextInt();
if (exit == 11) {
isFlag = false;
}
} } } /**
* @see 添加客户的操作
*/
public void addNewCustomer() {
// System.out.println("添加客户的操作");
System.out.println("-----------------客户列表------------------");
Scanner scanner = new Scanner(System.in);
System.out.print("姓名:");
String name;
name = scanner.nextLine();
System.out.print("性别:");
String gender;
gender = scanner.nextLine();
System.out.print("年龄:");
Scanner scanner1 = new Scanner(System.in);
int age;
age = scanner1.nextInt();
System.out.print("电话号码:");
String phone;
phone = scanner.nextLine();
System.out.print("邮箱:");
String email;
email = scanner.nextLine(); //将上面的数据封装到对象中
Customer customer = new Customer(name,gender,age,phone,email);
boolean isSuccess = customerList.addCustomer(customer);
if(isSuccess) {
System.out.println("-----------------添加完成------------------");
}else {
System.out.println("-----------------目录已满,添加失败--- -----");
}
} /**
* @see 修改客户的操作
*/
public void modifyCustomer() {
// System.out.println("修改客户的操作");
System.out.println("-----------------添加完成------------------");
Customer cust;
int number;
for (;;) {
System.out.println("请选择待修改的客户编号(-1退出):");
Scanner input = new Scanner(System.in); number = input.nextInt();
if (number == -1) {
return;
}
cust = customerList.getCustomer(number-1);
if(cust == null) {
System.out.println("无法找到指定的客户!");
}else {
break;
}
}
//找到了指定的客户,修改客户信息
Scanner input = new Scanner(System.in);
Scanner input1 = new Scanner(System.in);
System.out.println("姓名(" + cust.getName() + "):");
String name;
name = input.nextLine();
System.out.println("性别(" + cust.getGender() + "):");
String gender;
gender = input.nextLine();
System.out.println("年龄(" + cust.getAge() + "):");
int age;
age = input1.nextInt();
System.out.println("电话号码(" + cust.getPhone() + "):");
String phone;
phone = input.nextLine();
System.out.println("邮箱(" + cust.getEmail() + "):");
String email;
email = input.nextLine(); Customer newcust = new Customer(name, gender, age, phone, email);
boolean isReplace = customerList.replaceCustomer(number-1, newcust);
if(isReplace) {
System.out.println("-----------------修改完成------------------");
}else {
System.out.println("-----------------修改失败------------------");
} } /**
* @see 删除客户的操作
*/
public void deleteCustomer() {
// System.out.println("删除客户的操作");
System.out.println("-----------------删除客户------------------");
Scanner input = new Scanner(System.in);
int number;
for (;;) {
System.out.println("请选择待修改的客户编号(-1退出):");
number = input.nextInt();
if (number == -1) {
return;
}
Customer cust = customerList.getCustomer(number-1);
if(cust == null) {
System.out.println("无法找到指定的客户!");
}else {
break;
}
}
//找到指定的客户,删除操作
System.out.println("是否确认删除(删除11/不删00):");
int number1;
number1 = input.nextInt();
if(number1 == 00) {
return;
}else {
boolean isDelete = customerList.deleteCustomer(number - 1);
if(isDelete) {
System.out.println("-----------------删除成功------------------");
}else {
System.out.println("-----------------删除失败------------------");
}
} } /**
* @see 显示客户的列表
*/
public void listAllCustomers() {
//System.out.println("显示客户的列表");
System.out.println("-----------------客户列表------------------"); int total = customerList.getTotal();
if(total == 0) {
System.out.println("没有客户记录!!");
}else {
System.out.println("编号\t姓名\t性别\t年龄\t电话\t\t邮箱");
Customer[] custs = customerList.getAllCustomers();
for(int i = 0;i < total;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("---------------客户列表完成----------------");
} public static void main(String[] args) { CustomerView view = new CustomerView();
view.enterMainView(); }
}

四、总结

  1、代码有冗余

  2、可添加一个工具类对输入进行约束

  3、增加用户体验

  4、链接数据库,对数据进行持久化保存

五、快捷键

  注释:本人使用的是eclipse,   可使用里面的快捷键加快开发效率

  1、补全代码的声明:alt + /

  2、快速修复:ctrl + 1

  3、批量导包:crat + shift + o

  4、使用单行注释:ctrl + /

  5、使用多行注释:crtl + shift + /

  6、取消多行注释:ctrl + shift + \

  7、复制指定行的代码:ctrl + alt + down 或者 ctrl + alt + up

  8、删除指定行的代码:ctrl + d

  9、上下移动代码:alt + up 或者  alt + down

  10、切换到下一行代码空位:shift + enter

  11、切换到上一行代码空位:ctrl + shift + enter

  12、查看源代码:ctrl + 选中指定的结构  或者  ctrl + shift + t

  13、退回到前一个编辑页面:alt + left

  14、进入到下一个编辑页面:alt + right

  15、选中指定的类,查看继承树结构:ctrl + t

  16、复制代码:ctrl + c

  17、撤销:ctrl + z

  18、反撤销:ctrl + y

  19、剪切:ctrl + x

  20、粘贴:ctrl + v

  21、保存:ctrl + s

  22、全选:ctrl + a

  23、格式化代码:ctrl + shift + f

  24、选中数行,整体向后移动:tab

  25、选中数行,整体向前移动:shift + tab

  26、在当前类中,显示类结构,并支持搜索指定的方法、属性等:ctrl + o

  27、批量修改指定的方法名、变量名、类名等:alt + shift + r

  28、选中的结构大小写切换,变成大写:ctrl + shift + x

  29、选中的结构大小写切换,变成小写:ctrl + shift + y

  30、调出getter/setter构造器等结构:alt + shift + s

  31、显示当前选择资源(工程 or 文件)的属性:alt + enter

  32、快速查找,参照选中的word快速定位到下一个:ctrl + k

  33、关闭当前窗口:ctrl + w

  34、关闭所有窗口:ctrl + shift + w

  35、查看指定的结构使用过的地方:ctrl + alt + g

  36、查找与替换:ctrl + f

  37、最大化当前的View:ctrl + m

  38、直接定位到当前行的首行:home

  39、直接定位到当前行的末行:end

project--客户信息管理系统的更多相关文章

  1. golang实战--客户信息管理系统

    总计架构图: model/customer.go package model import ( "fmt" ) type Customer struct { Id int Name ...

  2. JavaWeb 简单实现客户信息管理系统

    项目介绍 本项目使用Jsp+Servlet+MySQL实现 功能介绍 查询客户信息:查询数据库中所有客户信息,分页展示 添加客户信息:创建新客户并添加到数据库中 搜索客户信息:根据用户的输入查询客户信 ...

  3. CRM 客户关系管理系统

    CRM(Customer Relationship Manager)客户关系管理系统 企业为提高核心竞争力,利用相应的信息技术以及互联网技术协调企业与顾客间在销售.营销和服务上的交互,从而提升其管理方 ...

  4. java web 之客户关系管理系统

    这个周末真的是觉得自己学会了一个比较高大上的本领,为什么这么觉得呢?那是因为星期六的时候觉得自己可以看看源码能做出来,可是让我头疼的是花费了一上午的时间还是没有弄出来,还好上天给了我机会,要是没有老师 ...

  5. Winform开发框架之客户关系管理系统(CRM)的报价单和销售单的处理

    在前面介绍了很多CRM相关的界面和实现思路的随笔文章,本篇继续介绍一下系统中用到的一些经验和技巧片段.本篇随笔主要介绍客户关系管理系统(CRM)的报价单和销售单的处理界面效果,使用列表内置的选择代替弹 ...

  6. Winform开发框架之客户关系管理系统(CRM)的开发总结系列4-Tab控件页面的动态加载

    在前面介绍的几篇关于CRM系统的开发随笔中,里面都整合了多个页面的功能,包括多文档界面,以及客户相关信息的页面展示,这个模块就是利用DevExpress控件的XtraTabPage控件的动态加载实现的 ...

  7. Winform开发框架之客户关系管理系统(CRM)的开发总结系列3-客户分类和配置管理实现

    我在本系列随笔的开始,介绍了CRM系统一个重要的客户分类的展示界面,其中包含了从字典中加载分类.从已有数据中加载分类.以及分组列表中加载分类等方式的实现,以及可以动态对这些节点进行配置,实现客户分类的 ...

  8. Winform开发框架之客户关系管理系统(CRM)的开发总结系列2-基于框架的开发过程

    在上篇随笔<Winform开发框架之客户关系管理系统(CRM)的开发总结系列1-界面功能展示>中介绍了我的整个CRM系统的概貌,本篇继续本系列的文章,介绍如何基于我的<winform ...

  9. Winform开发框架之客户关系管理系统(CRM)的开发总结系列1-界面功能展示

    一直以来,都希望整合一个以客户为中心的平台,有两个方面的考虑:一是实现客户数据.客户关系.客户管理等方面的整合,以便更好利用好客户的相关资源,发挥最大的营销效益:二是整合目前我的开发框架的所有模块和技 ...

  10. Redis 笔记与总结7 PHP + Redis 信息管理系统(用户信息的增删改查)

    1. PHP 连接 Redis 访问 redis 官方网站的 client 栏目:http://www.redis.io/clients#php,可以获取 redis 的 php 扩展. 其中 php ...

随机推荐

  1. spring-boot-route(十一)数据库配置信息加密

    Spring Boot最大的特点就是自动配置了,大大的减少了传统Spring框架的繁琐配置,通过几行简单的配置就可以完成其他组件的接入.比如你想要连接mysql数据库,只需要的配置文件里面加入mysq ...

  2. 同一台电脑同时使用gitHub和gitLab

    工作中我们有时可能会在同一台电脑上使用多个git账号,例如:公司的gitLab账号,个人的gitHub账号.怎样才能在使用gitlab与github时,切换成对应的账号,并且免密?这时我们需要使用ss ...

  3. Android开发教程之密码框右侧显示小眼睛

    现在都说互联网寒冬,其实只要自身技术能力够强,咱们就不怕!我这边专门针对Android开发工程师整理了一套[Android进阶学习视频].[全套Android面试秘籍].[Android知识点PDF] ...

  4. 10年经验17张图带你进入gitflow企业项目代码版本管理的最佳实践

    前言 对于项目版本管理,你是否存在这样的痛点:项目分支多而杂不好管理,git log界面commit信息错乱复杂无规范,版本回退不知道选择什么版本合适--. 项目版本管理的最佳实践系列,笔者将以两篇文 ...

  5. 解了这14道C语言谜题后,所有人都失声了!我来带你深入了解C!

    本文展示了14个C语言的迷题以及答案,代码应该是足够清楚的,而且有相当的一些例子可能是我们日常工作可能会见得到的.通过这些迷题,希望你能更了解C语言. 如果你不看答案,不知道是否有把握回答各个谜题?让 ...

  6. 学习ing

    1.从硬件和逻辑两个角度探讨什么是内存?硬件上看,内存就是电脑上的硬件--内存条.内存通过内存条不同的实现原谅分为DRAM(DRAM已经发展出好多代)和SRAM.从逻辑的角度来说,内存就是一个可以随机 ...

  7. centos8平台使用rz/sz上传下载文件

    一,rz/sz的用途 1,rz,sz是Linux/Unix服务器同客户端通过ZModem进行文件传输的命令行工具 说明:客户端需要使用支持ZModem的telnet/ssh客户端(比如windows平 ...

  8. tamcat7.0(安装文件下载)

    安装包:http://files.cnblogs.com/files/chenghu/apache-tomcat-7.0.27.rar http://files.cnblogs.com/files/c ...

  9. 【Azure Redis 缓存 Azure Cache For Redis】如何设置让Azure Redis中的RDB文件暂留更久(如7天)

    问题描述 Azure Redis和所有的Redis服务一样,可以让你保留存储在Redis中的数据.以防万一在Redis服务器出现故障的时候能尽可能小的减少数据的损失.在Azure Redis服务中,默 ...

  10. Pytest之使用断言指定异常

    官网的翻译是使用断言抛出指定异常,当我觉得他这里更应该指的是 Pytest 断言错误类型# 使用raise在测试方法中指定异常的类型,这点和java还是蛮像的呢,具体示例如下: import pyte ...