如何使用Java制作小型客户管理系统

用Java开发小型客户管理系统可掌握面向对象与CRUD操作,1. 设计Customer类封装客户信息,2. 通过CustomerService管理客户增删改查,3. 使用Scanner实现控制台交互界面,4. 主函数中循环显示菜单并调用对应方法,5. 后续可扩展文件存储或图形界面。

如何使用java制作小型客户管理系统

做一个小型客户管理系统用Java是很好的入门项目,既能练手又能理解基础的软件结构。核心思路是用面向对象的方式管理客户数据,搭配简单的界面或控制台交互。下面分几个部分说明怎么做。

1. 明确系统功能

小型客户管理系统一般包含以下基本功能:

添加客户:录入客户姓名、电话、邮箱、地址等信息 查看客户列表:显示所有客户信息 修改客户信息:根据ID或姓名更新数据 删除客户:按条件移除客户记录 查询客户:支持按姓名或电话搜索

功能不用多,先把增删改查(CRUD)做通。

2. 设计客户类(Customer)

用一个Java类来表示客户,封装属性和行为。

立即学习“Java免费学习笔记(深入)”;

public class Customer {    private int id;    private String name;    private String phone;    private String email;    private String address;    public Customer(int id, String name, String phone, String email, String address) {        this.id = id;        this.name = name;        this.phone = phone;        this.email = email;        this.address = address;    }    // getter 和 setter 方法    public int getId() { return id; }    public void setId(int id) { this.id = id; }    public String getName() { return name; }    public void setName(String name) { this.name = name; }    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 String getAddress() { return address; }    public void setAddress(String address) { this.address = address; }    @Override    public String toString() {        return "ID: " + id + ", 姓名: " + name + ", 电话: " + phone +                ", 邮箱: " + email + ", 地址: " + address;    }}

3. 管理客户数据(CustomerService)

写一个服务类来管理客户列表,使用ArrayList存储数据。

import java.util.ArrayList;import java.util.List;public class CustomerService {    private List customers;    private int nextId = 1;    public CustomerService() {        customers = new ArrayList();    }    public void addCustomer(String name, String phone, String email, String address) {        Customer customer = new Customer(nextId++, name, phone, email, address);        customers.add(customer);        System.out.println("客户添加成功:" + customer);    }    public void listCustomers() {        if (customers.isEmpty()) {            System.out.println("暂无客户信息。");        } else {            for (Customer c : customers) {                System.out.println(c);            }        }    }    public Customer findCustomerByName(String name) {        for (Customer c : customers) {            if (c.getName().equalsIgnoreCase(name)) {                return c;            }        }        return null;    }    public boolean updateCustomer(int id, String name, String phone, String email, String address) {        for (Customer c : customers) {            if (c.getId() == id) {                c.setName(name);                c.setPhone(phone);                c.setEmail(email);                c.setAddress(address);                System.out.println("客户信息已更新:" + c);                return true;            }        }        return false;    }    public boolean deleteCustomer(int id) {        Customer toRemove = null;        for (Customer c : customers) {            if (c.getId() == id) {                toRemove = c;                break;            }        }        if (toRemove != null) {            customers.remove(toRemove);            System.out.println("客户已删除,ID:" + id);            return true;        }        System.out.println("未找到ID为 " + id + " 的客户。");        return false;    }}

4. 控制台交互界面(Main类)

用Scanner接收用户输入,调用服务类的方法。

import java.util.Scanner;public class Main {    public static void main(String[] args) {        CustomerService service = new CustomerService();        Scanner scanner = new Scanner(System.in);        boolean running = true;        System.out.println("=== 小型客户管理系统 ===");        while (running) {            System.out.println("n1. 添加客户");            System.out.println("2. 查看所有客户");            System.out.println("3. 查询客户(按姓名)");            System.out.println("4. 修改客户");            System.out.println("5. 删除客户");            System.out.println("6. 退出");            System.out.print("请选择操作:");            int choice = scanner.nextInt();            scanner.nextLine(); // 消费换行符            switch (choice) {                case 1:                    System.out.print("姓名:"); String name = scanner.nextLine();                    System.out.print("电话:"); String phone = scanner.nextLine();                    System.out.print("邮箱:"); String email = scanner.nextLine();                    System.out.print("地址:"); String address = scanner.nextLine();                    service.addCustomer(name, phone, email, address);                    break;                case 2:                    service.listCustomers();                    break;                case 3:                    System.out.print("输入客户姓名:");                    String searchName = scanner.nextLine();                    Customer found = service.findCustomerByName(searchName);                    if (found != null) {                        System.out.println("找到客户:" + found);                    } else {                        System.out.println("未找到该客户。");                    }                    break;                case 4:                    System.out.print("输入要修改的客户ID:");                    int id = scanner.nextInt();                    scanner.nextLine();                    System.out.print("新姓名:"); String n = scanner.nextLine();                    System.out.print("新电话:"); String p = scanner.nextLine();                    System.out.print("新邮箱:"); String e = scanner.nextLine();                    System.out.print("新地址:"); String a = scanner.nextLine();                    service.updateCustomer(id, n, p, e, a);                    break;                case 5:                    System.out.print("输入要删除的客户ID:");                    int delId = scanner.nextInt();                    service.deleteCustomer(delId);                    break;                case 6:                    System.out.println("系统退出。");                    running = false;                    break;                default:                    System.out.println("无效选择,请重试。");            }        }        scanner.close();    }}

基本上就这些。运行程序后,你可以在控制台进行客户管理操作。

不复杂但容易忽略的是细节:比如ID自增、输入校验、空值处理。后续可以加文件保存(用ObjectOutputStream)、Swing图形界面,或者换成数据库(如SQLite)。

以上就是如何使用Java制作小型客户管理系统的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/35925.html

赞 (0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
Win10自带的SSH客户端
上一篇 2026年10月24日 12:37:59
PHP区块链开发:简易实现
下一篇 2025年12月10日 05:58:05

相关推荐

  • Win10自带的SSH客户端

    Win10自带的SSH客户端Win10自带的SSH客户端Win10自带的SSH客户端Win10自带的SSH客户端

    今天在尝试使用securecrt 8.5连接新服务器时,遇到了一个令人头疼的问题,显示如下错误: Key exchange failed.No compatible key-exchange method. The server supports these methods: curve25519-…

    2026年10月24日 • 用户投稿
    200
  • 递归实现冒泡排序:两种策略与核心原理深度解析

    递归实现冒泡排序:两种策略与核心原理深度解析递归实现冒泡排序:两种策略与核心原理深度解析递归实现冒泡排序:两种策略与核心原理深度解析递归实现冒泡排序:两种策略与核心原理深度解析

    本文深入探讨了递归实现冒泡排序的两种常见方法,重点分析了递归基的选择和递归参数的变化趋势。通过对比不同实现,阐明了尽管递归参数可能递增或递减,但核心在于每一步都有效缩小问题规模。文章旨在消除对递归理解的常见误区,并提供清晰的实现示例和注意事项。 递归冒泡排序概述 冒泡排序是一种基础的排序算法,其工作…

    2026年10月24日 • 用户投稿
    100
  • kms激活工具怎么激活win10?kms激活工具激活win10的步骤

    kms激活工具怎么激活win10?kms激活工具激活win10的步骤kms激活工具怎么激活win10?kms激活工具激活win10的步骤kms激活工具怎么激活win10?kms激活工具激活win10的步骤kms激活工具怎么激活win10?kms激活工具激活win10的步骤

    kms激活工具是一款小巧高效的本地kms服务器模拟软件,只需简单操作即可将未激活的windows 10系统快速转为永久正版状态。该工具无需输入产品密钥,全程离线运行,点击“activate windows”按钮即可全自动完成激活流程,并支持随时查看当前系统的激活信息。那么,如何使用kms激活工具来激…

    2026年10月24日 • 用户投稿
    100
  • 使用Java查找和检索带动态日期后缀的文件名

    使用Java查找和检索带动态日期后缀的文件名使用Java查找和检索带动态日期后缀的文件名使用Java查找和检索带动态日期后缀的文件名使用Java查找和检索带动态日期后缀的文件名

    本文详细介绍了如何利用java的`java.time` api和`filefilter`接口,高效地查找并检索带有动态日期时间后缀的文件。通过定义精确的日期时间格式化器,并结合自定义的文件过滤器,开发者可以轻松地在指定目录中定位到符合特定日期条件的文件,即使文件名中的日期部分不断变化。 在许多应用场…

    2026年10月24日 • 用户投稿
    100
  • 深入理解Java中BigDecimal的equals方法:精确比较与常见陷阱

    深入理解Java中BigDecimal的equals方法:精确比较与常见陷阱深入理解Java中BigDecimal的equals方法:精确比较与常见陷阱深入理解Java中BigDecimal的equals方法:精确比较与常见陷阱深入理解Java中BigDecimal的equals方法:精确比较与常见陷阱

    本文旨在深入探讨java中`bigdecimal`类的`equals`方法。我们将揭示其在比较数值时的精确性特点,并重点分析将`bigdecimal`对象与`string`类型进行比较时常见的陷阱,提供正确的比较方法,确保数值比较的准确性和代码的健壮性。 BigDecimal在Java中的重要性 在…

    2026年10月24日 • 用户投稿
    000
  • IMAX影院搬回家:关于100寸电视,只想给你这个推荐

    IMAX影院搬回家:关于100寸电视,只想给你这个推荐IMAX影院搬回家:关于100寸电视,只想给你这个推荐IMAX影院搬回家:关于100寸电视,只想给你这个推荐IMAX影院搬回家:关于100寸电视,只想给你这个推荐

    上周,朋友踏入我家门厅的瞬间便怔住了,目光直勾勾地盯着墙面:“你这墙……怎么在动?”我轻笑一声,顺手按下遥控器的播放键。刹那间,《阿凡达》中潘多拉星球的奇幻森林如潮水般蔓延至整面墙壁,光影流转,声效环绕,仿佛空间被彻底重构。朋友低声感叹:“这不是电视,分明是一扇通往异界的门。” 我们究竟为何执着于1…

    2026年10月24日 • 用户投稿
    200
  • VSCode搭建嵌入式C环境 专业VSCode配置单片机开发教程

    VSCode搭建嵌入式C环境 专业VSCode配置单片机开发教程VSCode搭建嵌入式C环境 专业VSCode配置单片机开发教程VSCode搭建嵌入式C环境 专业VSCode配置单片机开发教程VSCode搭建嵌入式C环境 专业VSCode配置单片机开发教程

    解决vscode嵌入式c代码补全不准确问题需检查c_cpp_properties.json中的includepath和compilerpath配置,确保头文件路径和编译器路径正确,手动添加宏定义,清理intellisense数据库,并确保代码无编译错误;2. gdb无法连接单片机时应检查openoc…

    2026年10月24日 • 用户投稿
    000
  • 一加Ace 6屏幕体验:同档最佳无疑了

    一加Ace 6屏幕体验:同档最佳无疑了一加Ace 6屏幕体验:同档最佳无疑了一加Ace 6屏幕体验:同档最佳无疑了一加Ace 6屏幕体验:同档最佳无疑了

    作为业内公认的“电竞标杆之作”,一加 ace系列凭借出色的性能表现与持久续航,早已实现累计销量突破千万的亮眼成绩。 如今,全新发布的一加 Ace 6 以“全维满配”姿态强势登场。不仅搭载口碑极佳的骁龙8至尊版处理器和专属优化的风驰游戏内核,更将屏幕体验作为核心升级点,带来了165Hz超高刷新率、超声…

    2026年10月24日 • 用户投稿
    200
  • 如何实现Linux网络接口L2转发 二层交换快速路径

    如何实现Linux网络接口L2转发 二层交换快速路径如何实现Linux网络接口L2转发 二层交换快速路径如何实现Linux网络接口L2转发 二层交换快速路径如何实现Linux网络接口L2转发 二层交换快速路径

    实现linux网络接口l2转发的快速路径,关键在于绕过内核协议栈,在数据链路层直接处理和转发数据包。1. 选择技术框架:xdp适用于简单场景,集成内核、易于部署,但功能有限;dpdk适合复杂高性能场景,运行于用户空间,性能更高但开发复杂度大。2. 硬件准备:需支持xdp或dpdk的网卡,并确保足够的…

    2026年10月24日 • 用户投稿
    000
  • Java中按日期模式查找带有动态后缀的文件

    Java中按日期模式查找带有动态后缀的文件Java中按日期模式查找带有动态后缀的文件Java中按日期模式查找带有动态后缀的文件Java中按日期模式查找带有动态后缀的文件

    本文详细介绍了如何在java中高效查找并检索具有固定前缀和动态日期时间后缀的文件。通过利用`java.time` api中的`datetimeformatter`解析文件名中的日期信息,并结合`java.io.filefilter`接口实现自定义文件过滤逻辑,可以精确地定位符合特定日期条件(如当天)…

    2026年10月24日 • 用户投稿
    400
  • 或构成侵权!SE等日本游戏公司要求OpenAI停止使用其作品训练AI

    或构成侵权!SE等日本游戏公司要求OpenAI停止使用其作品训练AI或构成侵权!SE等日本游戏公司要求OpenAI停止使用其作品训练AI或构成侵权!SE等日本游戏公司要求OpenAI停止使用其作品训练AI或构成侵权!SE等日本游戏公司要求OpenAI停止使用其作品训练AI

    日本内容海外流通协会(CODA)近日向OpenAI发出正式声明,要求其立即停止在未获授权的情况下,利用成员企业的原创内容用于训练其最新视频生成模型Sora 2。该协会汇聚了包括SE、万代南梦宫、角川集团(FromSoftware的母公司)以及Cygames在内的多家日本知名内容企业。 CODA在通知…

    2026年10月24日 • 用户投稿
    000
  • edge浏览器中保存的信用卡信息如何删除_Edge浏览器删除信用卡信息方法

    edge浏览器中保存的信用卡信息如何删除_Edge浏览器删除信用卡信息方法edge浏览器中保存的信用卡信息如何删除_Edge浏览器删除信用卡信息方法edge浏览器中保存的信用卡信息如何删除_Edge浏览器删除信用卡信息方法edge浏览器中保存的信用卡信息如何删除_Edge浏览器删除信用卡信息方法

    首先通过设置菜单可删除单条信用卡信息,进入Edge浏览器“设置→个人资料→支付信息”,在信用卡部分点击对应卡片右侧的“删除”图标即可移除;若需批量清除所有信用卡数据,可在“支付信息”页面点击“更多操作”按钮并选择“清除所有信用卡信息”完成全部删除;此外还可通过隐私清除工具,在“清除浏览数据”中勾选“…

    2026年10月24日 • 用户投稿
    200
  • windows10如何设置和使用动态锁_Windows蓝牙自动锁屏功能设置方法

    windows10如何设置和使用动态锁_Windows蓝牙自动锁屏功能设置方法windows10如何设置和使用动态锁_Windows蓝牙自动锁屏功能设置方法windows10如何设置和使用动态锁_Windows蓝牙自动锁屏功能设置方法windows10如何设置和使用动态锁_Windows蓝牙自动锁屏功能设置方法

    动态锁功能可让Windows 10在蓝牙设备离开时自动锁屏。首先通过Win+I进入账户→登录选项,启用动态锁并配对手机等蓝牙设备;企业环境可通过组策略编辑器在计算机配置中启用“配置动态锁定因素”策略,执行gpupdate /force更新策略生效。 如果您希望在离开电脑时,系统能自动锁定以保护隐私和…

    2026年10月24日 • 用户投稿
    100
  • 如何在mysql中使用NULL判断条件

    如何在mysql中使用NULL判断条件如何在mysql中使用NULL判断条件如何在mysql中使用NULL判断条件如何在mysql中使用NULL判断条件

    正确判断NULL需使用IS NULL或IS NOT NULL,不可用=或!=;查询时可用IFNULL或COALESCE将NULL转为默认值,确保结果准确。 在MySQL中处理NULL值时,不能使用普通的等于(=)或不等于()操作符来判断,因为NULL代表“未知值”,它不等于任何值,包括它自己。正确使…

    2026年10月24日 • 用户投稿
    100
  • VSCode 如何设置终端的默认 shell 类型 VSCode 终端默认 shell 类型的设置步骤​

    VSCode 如何设置终端的默认 shell 类型 VSCode 终端默认 shell 类型的设置步骤​VSCode 如何设置终端的默认 shell 类型 VSCode 终端默认 shell 类型的设置步骤​VSCode 如何设置终端的默认 shell 类型 VSCode 终端默认 shell 类型的设置步骤​VSCode 如何设置终端的默认 shell 类型 VSCode 终端默认 shell 类型的设置步骤​

    要设置 vscode 终端的默认 shell 类型,1. 打开设置界面(ctrl+, 或 cmd+,);2. 搜索 terminal.integrated.defaultprofile;3. 在对应操作系统的下拉菜单中选择目标 shell(如 powershell、git bash、zsh 等);4…

    2026年10月24日 • 用户投稿
    000
  • win11怎么设置动态刷新率(DRR)_Windows11显示器动态刷新率设置方法

    win11怎么设置动态刷新率(DRR)_Windows11显示器动态刷新率设置方法win11怎么设置动态刷新率(DRR)_Windows11显示器动态刷新率设置方法win11怎么设置动态刷新率(DRR)_Windows11显示器动态刷新率设置方法win11怎么设置动态刷新率(DRR)_Windows11显示器动态刷新率设置方法

    开启Windows 11动态刷新率可平衡性能与续航,通过系统设置进入显示选项启用DRR功能,若不可用需更新显卡驱动,专业版用户还可通过组策略编辑器强制启用该功能。 如果您希望在Windows 11中根据使用场景自动调节显示器刷新率以平衡性能与续航,可以启用动态刷新率(DRR)功能。该功能会根据当前操…

    2026年10月24日 • 用户投稿
    000
  • ROS教程(一):ROS安装教程(详细图文)

    ROS教程(一):ROS安装教程(详细图文)ROS教程(一):ROS安装教程(详细图文)ROS教程(一):ROS安装教程(详细图文)ROS教程(一):ROS安装教程(详细图文)

    大家好,又见面了,我是你们的朋友全栈君。 ROS教程:ROS详细安装步骤(添加源、下载ROS及环境配置) 文章目录 前言一、版本选择二、开始安装2.1 软件中心配置2.2 添加源(注)2.3 安装2.4 配置ROS环境到系统三、验证ROS 前言关于ROS(Robot OS 机器人操作系统),相信大家…

    2026年10月24日 • 用户投稿
    100
  • 文心一言官方网站主页直达 文心一言语言模型平台主页官方访问入口

    文心一言官方网站主页直达 文心一言语言模型平台主页官方访问入口文心一言官方网站主页直达 文心一言语言模型平台主页官方访问入口文心一言官方网站主页直达 文心一言语言模型平台主页官方访问入口文心一言官方网站主页直达 文心一言语言模型平台主页官方访问入口

    文心一言官网为https://yiyan.baidu.com,用户可在线使用其3.5免费版进行问答与创作,登录百度账号同步记录;会员升级至4.0以上版本可享更强多模态与商业功能,支持网页、客户端及API接入。 ☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 免费无限量使用 DeepSeek R…

    2026年10月24日 • 用户投稿
    200
  • 使用Gradle Shadow Jar插件构建包含所有依赖的可执行JAR包

    使用Gradle Shadow Jar插件构建包含所有依赖的可执行JAR包使用Gradle Shadow Jar插件构建包含所有依赖的可执行JAR包使用Gradle Shadow Jar插件构建包含所有依赖的可执行JAR包使用Gradle Shadow Jar插件构建包含所有依赖的可执行JAR包

    本文旨在解决gradle多模块项目中,如何将主模块及其所有依赖打包成一个可独立运行的“胖jar”(fat jar)文件的问题。通过引入`com.github.johnrengelman.shadow`插件,并配置主类信息,我们可以轻松生成一个包含所有运行时依赖的jar包,从而实现`java -jar…

    2026年10月24日 • 用户投稿
    400
  • 华为Mate 70 Air真机偷跑 侧边指纹、居中大圆后摄

    华为Mate 70 Air真机偷跑 侧边指纹、居中大圆后摄华为Mate 70 Air真机偷跑 侧边指纹、居中大圆后摄华为Mate 70 Air真机偷跑 侧边指纹、居中大圆后摄华为Mate 70 Air真机偷跑 侧边指纹、居中大圆后摄

    11月3日消息,华为史上最薄mate——华为mate 70 air预计本月发布,新机外观今日首次曝光。 针对网传的真机图,数码博主“数码闲聊站”表示,该机看起来采用6.9至7英寸左右的居中单孔等深四曲屏,配备昆仑玻璃。 该机中框未见注塑断点,支持侧边指纹识别,后置居中大圆镜头,整体是一款超大屏、超薄…

    2026年10月24日 • 用户投稿
    100

发表回复

登录后才能评论
关注微信