客户信息管理系统

article/2025/10/22 20:37:39

客户信息管理系统

  • 课程设计的题目及简介
  • 设计说明
  • 程序流图
  • 程序清单
    • Customer 类
    • MainView类
    • Tools类
    • DataManager类
  • 调试结果
  • 课程设计体会
  • 视频教程

课程设计的题目及简介

客户信息管理系统,功能如下:
(1)添加客户信息
(2)修改客户信息
(3)删除客户数据
(4)查询客户列表
(5)所有数据通过JDBC保存到MySql数据库中
1,数据库名:cms_hisoft
2,表名:users
3,字段列表和类型:
id,int,主键,自动增长
name,varchar(20),姓名
gender,varchar(5),性别
age,int,年龄
phone…

设计说明

实现一个基于文本界面的《客户信息管理软件》
• 进一步掌握编程技巧和调试技巧,熟悉面向对象编

• 主要涉及以下知识点:
– 类和对象(属性、方法及构造器)
– 类的封装
– 数据库的基本操作
– 数据的插入、删除和替换
– 对象的聚集处理
– java通过jdbc链接数据库
• 实现基于文本界面的《客户信息管理软件》。
• 该软件能够实现对客户对象的插入、修改和删除(
用数组实现),并能够打印客户明细表。
• 项目采用分级菜单方式,主菜单如下:
在这里插入图片描述
“添加客户”的界面及操作过程如下所示:
在这里插入图片描述
“修改客户”的界面及操作过程如下所示:
在这里插入图片描述
“删除客户”的界面及操作过程如下所示:
在这里插入图片描述
“客户列表”的界面及操作过程如下所示:
在这里插入图片描述
客户应当包含的信息:
– String name : 客户姓名
– char gender : 性别
– int age : 年龄
– String phone: 电话号码
– String email : 电子邮箱

程序流图

在这里插入图片描述

程序清单

Customer 类

这是一个用来封装客户信息的类,这里面封装了客户的基本信息,并提供了各属性的 get / set 方法以及自编的构造器对属性进行初始化,下方代码省略了 get / set 方法

// Customer 实体类,用于封装客户信息
public class Customer {private int id;private String name;private String gender;private int age;private String phone;private String email;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 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;}
}

MainView类

主函数所在的类,其为主模块,负责菜单的显示和处理用户操作以及对数据库进行增删改查操作,其中该类下的成员方法仅供 MainView() 方法调用,该类中实现的主要有以下函数:

import java.sql.ResultSet;public class MainView {private DataManager dataManager;public static void main(String[] args) {new MainView();}public MainView() {try {//初始化dataManagerdataManager = new DataManager();//链接数据库dataManager.connetSql();while (true) {System.out.println("--客户信息管理软件--");System.out.println("\t1 添 加 客 户");System.out.println("\t2 修 改 客 户");System.out.println("\t3 删 除 客 户");System.out.println("\t4 客 户 列 表");System.out.println("\t5 退 出");System.out.println();System.out.print("\t请选择(1-5):");switch (Tools.getMenu()) {case 1:addCustomer();break;case 2:modifyCustomer();break;case 3:delCustomer();break;case 4://查询客户列表queryCustomerList();break;case 5:dataManager.closeSql();System.out.println("bye bye !");return;}}} catch (Exception e) {// TODO: handle exceptionSystem.out.println(e);}}/*** 修改客户信息*/
private void modifyCustomer() throws Exception {/*** ---------------------修改客户---------------------*  请选择待修改客户编号(-1退出):1 姓名(张三):<直接回车表示不修改> *  性别(男): 年龄(30): 电话(010-52776976): 		 		      	*  邮箱(zhang@abc.com):zsan@abc.com * ---------------------修改完成---------------------*/System.out.println("--修改客户--");System.out.print("请输入客户编号:");int id = Tools.getNum();if(id == -1) {System.out.println("--取消修改--");return;}//进入修改逻辑,ResultSet rs = dataManager.getCustomer(id);//保存数据条数int num=0;// 展开结果集数据库while(rs.next()){num++;Customer customer = new Customer();customer.setId(id);//修改值System.out.print("姓名("+rs.getString("name")+"):");customer.setName(Tools.getStr(rs.getString("name")));System.out.print("性别("+rs.getString("gender")+"):");customer.setGender(Tools.getStr(rs.getString("gender")));System.out.print("年龄("+rs.getInt("age")+"):");customer.setAge(Tools.getNum(rs.getInt("age")));System.out.print("电话("+rs.getString("phone")+"):");customer.setPhone(Tools.getStr(rs.getString("phone")));System.out.print("邮箱("+rs.getString("email")+"):");customer.setEmail(Tools.getStr(rs.getString("email")));    int num2=dataManager.modifyCustomer(customer);if(num2 == 1) {System.out.println("--修改完成--");return;}System.out.println("--修改失败--");}if(num==0) {System.out.println("没有查到数据!");return;}}/*** 删除客户信息*/
private void delCustomer() throws Exception {/*** -------------------- * 请选择待删除客户编号(-1退出):1 确认是否删除(Y/N):y * --------------------*/System.out.println("--删除客户--");System.out.print("请输入客户编号:");int id = Tools.getNum();if(id == -1) {System.out.println("--取消删除--");return;}System.out.print("确认是否删除(Y/N):");String ynStr = Tools.getYn();//取消删除if(ynStr.equals("N")) {System.out.println("--取消删除--");return;}//确定删除int num = dataManager.delCustomer(id);if(num==0) {System.out.println("--删除失败--");return;}System.out.println("--删除完成--");
}/*** 添加用户*/
private void addCustomer() throws Exception {System.out.println("--添加客户--");Customer customer = new Customer();	System.out.print("姓名:");customer.setName(Tools.getStr());System.out.print("性别:");customer.setGender(Tools.getStr());System.out.print("年龄:");customer.setAge(Tools.getNum());System.out.print("电话:");customer.setPhone(Tools.getStr());System.out.print("邮箱:");customer.setEmail(Tools.getStr());int num = dataManager.addCustomer(customer);//判断是否添加成功if(num==1) {System.out.println("--添加完成--");}else {System.out.println("--添加失败--");}
}
/*** 查询客户信息* @throws Exception*/
public void queryCustomerList()throws Exception {System.out.println("--客户列表--");ResultSet rs = dataManager.getCustomerList();System.out.println("编号\t姓名\t性别\t年龄\t电话\t邮箱");//保存数据条数int num=0;// 展开结果集数据库while(rs.next()){num++;// 输出数据System.out.print(rs.getInt("id")+"\t");System.out.print(rs.getString("name")+"\t");System.out.print(rs.getString("gender")+"\t");System.out.print(rs.getInt("age")+"\t");System.out.print(rs.getString("phone")+"\t");System.out.print(rs.getString("email"));System.out.print("\n");}if(num==0) {System.out.println("没有查到数据!");}// 完成后关闭rs.close();System.out.println("--客户列表完成--");}
}

Tools类

该类主要对用户进行的输入的不合法数据进行修改,让用户输入数据合法

import java.util.Scanner;public class Tools {private static Scanner sc = new Scanner(System.in);/*** 得到y/n* @return*/public static String getYn() {String ynStr;while (true) {ynStr = getStr().toUpperCase();if(ynStr.equals("Y") || ynStr.equals("N")) {return ynStr;}System.out.print("输入错误,请输入y/n:");}}/*** 获得用户输入菜单* @return 菜单*/public static int getMenu() {//菜单数字int menuNum;while (true) {menuNum = getNum();if(menuNum>=1 && menuNum<=5) {return menuNum;}System.out.print("输入错误,请输入(1-5):");}}/*** 获得数字* @return*/public static int getNum() {String numStr;int num;while (true) {numStr = getStr();try {num = Integer.parseInt(numStr);return num;} catch (Exception e) {System.out.print("输入错误,请输入数字:");continue;}}}/*** 获取数字,有默认值* @param num0* @return*/public static int getNum(int num0) {String numStr;int num;while (true) {numStr = getStr("");if(numStr.length() == 0) {//直接回车return num0;}try {num = Integer.parseInt(numStr);return num;} catch (Exception e) {System.out.print("输入错误,请输入数字:");continue;}}}/*** 接收非空字符串* @return*/public static String getStr() {String str;while (true) {str = sc.nextLine();//直接回车,得到空字符串if(str.length()==0) {System.out.print("内容不许为空,重新输入:");continue;}//字符串非空,返回return str;}}/*** 接收字符串,允许为空* @return*/public static String getStr(String str0) {String str = sc.nextLine();//直接回车,得到空字符串if(str.length()==0) {return str0;}//字符串非空,返回return str;}
}

DataManager类

import java.util.Scanner;public class Tools {private static Scanner sc = new Scanner(System.in);/*** 得到y/n* @return*/public static String getYn() {String ynStr;while (true) {ynStr = getStr().toUpperCase();if(ynStr.equals("Y") || ynStr.equals("N")) {return ynStr;}System.out.print("输入错误,请输入y/n:");}}/*** 获得用户输入菜单* @return 菜单*/public static int getMenu() {//菜单数字int menuNum;while (true) {menuNum = getNum();if(menuNum>=1 && menuNum<=5) {return menuNum;}System.out.print("输入错误,请输入(1-5):");}}/*** 获得数字* @return*/public static int getNum() {String numStr;int num;while (true) {numStr = getStr();try {num = Integer.parseInt(numStr);return num;} catch (Exception e) {System.out.print("输入错误,请输入数字:");continue;}}}/*** 获取数字,有默认值* @param num0* @return*/public static int getNum(int num0) {String numStr;int num;while (true) {numStr = getStr("");if(numStr.length() == 0) {//直接回车return num0;}try {num = Integer.parseInt(numStr);return num;} catch (Exception e) {System.out.print("输入错误,请输入数字:");continue;}}}/*** 接收非空字符串* @return*/public static String getStr() {String str;while (true) {str = sc.nextLine();//直接回车,得到空字符串if(str.length()==0) {System.out.print("内容不许为空,重新输入:");continue;}//字符串非空,返回return str;}}/*** 接收字符串,允许为空* @return*/public static String getStr(String str0) {String str = sc.nextLine();//直接回车,得到空字符串if(str.length()==0) {return str0;}//字符串非空,返回return str;}}

调试结果

  1. 添加用户
    在这里插入图片描述

  2. 修改用户
    在这里插入图片描述

  3. 删除用户
    在这里插入图片描述

  4. 客户列表
    在这里插入图片描述

  5. 退出
    在这里插入图片描述

课程设计体会

此次课程设计,从最初的环境安装开始,到开发工具的配置及使用,模拟真实的开发流程,使我初步认识到了软件工程项目开发的过程。在此之间又初步学习了mysql的使用,工具类的使用以及怎么控制用户输入等科目。在老师的带领下完成了使用 JDBC 连接 MySQL 数据库,为今后的项目开发积累了宝贵经验。
这次课程设计目标是制作一个与数据库连接的客户信息管理系统。采用MYSQL作为数据库进行持久化存储。在分析完项目需求后,便开始着手分析和搭建所需要的环境,学习框架和管理工具、开发工具的使用,之后便跟着老师一步步地进行代码的编写。
在开发过程中,我发现自己还有很多不足之处。本次开发所用到的技术基本上都是第一次上手,从技术到MySQL使用都是第一次使用。这是我充分体验到只有学校学的知识是远不够独立完成一个项目的。知识常学常新,也许到我们真正参加工作时这一套生产环境也已过时,这启发我要有足够的学习能力以应对时代的发展。
通过这次课程设计,使我灵活应用所学java知识,独立完成问题分析,结合java理论知识,编写程序求解指定问题。初步掌握软件开发过程的问题分析、系统设计、程序编码、测试等基本方法和技能;提高综合运用所学的理论知识和方法独立分析和解决问题的能力;并用系统的观点和软件开发一般规范进行软件开发,巩固、深化学生的理论知识,提高编程水平,在此过程中培养我们严谨的科学态度和良好的工作作风。熟练掌握数据的存储表示和基本操作的实现,能够利用MySQL高性能、动态扩缩容、高可用、易部署、易使用、海量数据存储、高压缩比的优势,并使用JDBC对数据库进行持久化访问。同时在这学期的’实验中,培养了独立思考、动手操作的能力,在各种其它能力上也都有了提高。
在实验课上,我学会了很多学习的方法。虽然这个项目还有一些bug,但是它的思路我都学会了,它让我学会了独立思考问题还有很多方法。在今后的学习中我们要面对社会的挑战,只有不断的学习、实践,再学习、再实践。这对于我的将来也有很大的帮助。以后,不管有多苦,我想我都能变苦为乐,找寻有趣的事情,发现其中珍贵的事情。就像中国提倡的艰苦奋斗一样,我都可以在实验结束之后变的更加成熟,会面对需要面对的事情,以及学会遇到问题,不急不慌,慢慢解决它。
这次实训为我提供了与众不同的学习方法和学习体会,从书本中面对现实,为我将来走上社会打下了扎实的基础。作为在校计算机专业的学生,现在我能做的就是吸取知识,提高自身的综合素质,提高自己的职业技能,自己有了能力,到时候才会是 “车到山前必有路”。我相信在不久的未来,会有属于我自己的一片天空。

视频教程

B站
https://www.bilibili.com/video/BV1mq4y117Ej/
百度网盘:
https://pan.baidu.com/s/1J-CNriCeoQaFSvgl0T_aQQ?pwd=9t9t
提取码: 9t9t


http://chatgpt.dhexx.cn/article/IdHXNlFH.shtml

相关文章

回访管理系统

背景 近年&#xff0c;国家在不断出台鼓励社会办医疗机构的一系列措施&#xff0c;积极推进社会办医&#xff0c;努力构建多元化医疗服务体系。但从去年下半年开始&#xff0c;相当比例的民营医院经营越来越困难&#xff0c;全国范围内很多民营医院的门诊量都在下降&#xff0c…

DNS解析域名解析过程

当我们在浏览器的地址栏输入网址的时候&#xff0c;其实输入的是一个URL的域名&#xff0c;而这个域名需要解析成为IP地址&#xff0c;才能让我们与远程的主机进行管理。而将URL解析成为IP&#xff0c;就变得至关重要&#xff0c;这一过程就是DNS解析的过程。如果没有DNS解析&a…

一张图看懂DNS域名解析全过程

DNS域名解析是互联网上非常重要的一项服务&#xff0c;上网冲浪&#xff08;还有人在用这个词吗&#xff1f;&#xff09;伴随着大量DNS服务来支撑&#xff0c;而对于网站运营来说&#xff0c;DNS域名解析的稳定可靠&#xff0c;意味着更多用户的喜欢&#xff0c;更好的SEO效果…

【计算机网络】DNS域名解析过程

关于DNS域名解析大致过程如图&#xff1a; 当一个用户在地址栏输入www.csdn.net时&#xff0c;DNS解析大致有如下十个过程&#xff1a; 浏览器先检查自身缓存中有没有被解析过的这个域名对应的ip地址&#xff0c;如果有&#xff0c;解析结束。同时域名被缓存的时间也可通过TTL属…

域名系统DNS及域名解析过程

域名系统DNS 域名系统DNS是互联网使用的命名系统&#xff0c;用来把便于人们使用的机器名字转换为IP地址。 在早期整个网络上只有数百台计算机&#xff0c;那时使用一个叫做hosts的文件&#xff0c;列出所有主机名字和相应的IP地址。只要用户输入一台主机名字&#xff0c;计算…

DNS与域名解析

文章目录 1、DNS 服务概述2、DNS服务基本概念4、DNS配置文件5、资源记录的类型6、DNS服务的配置方法&#xff08;1&#xff09;配置前的准备工作&#xff08;2&#xff09;安装bind软件&#xff08;3&#xff09;修改主配置文件/etc/named.conf两个地方为{any}&#xff08;全局…

计算机网络——一文读懂DNS域名解析过程

一、域名与IP地址 互联网的每一台主机都是由IP地址来标识位置的&#xff0c;IP地址要么是纯数字&#xff0c;要么就是数字加字母。要记下来实在是太痛苦了&#xff0c;于是就有了将IP地址就和域名关联起来&#xff0c;我们只需要记下域名就可以了。在浏览器里我们都是输入域名…

DNS域名解析过程(较详细版)

在互联网世界你要去访问其他主机时&#xff0c;你总得知道那台主机的地址吧&#xff1f;这时人们就发明了IP地址&#xff0c;每个IP地址与一台主机一一对应&#xff0c;通过IP地址就可以精确找到你需要访问的主机了&#xff0c;IP地址是使用4个0~255的数进行表示的&#xff0c;…

DNS(域名解析协议)详解

DNS协议 我们之前已经了解过ARP协议。 如果说ARP协议是用来将IP地址转换为MAC地址&#xff0c;那么DNS协议则是用来将域名转换为IP地址&#xff08;也可以将IP地址转换为相应的域名地址&#xff09;。 我们都知道&#xff0c;TCP/IP中使用的是IP地址和端口号来确定网络上某…

【网络】 DNS域名解析的基本流程

本篇博文主要就DNS协议做详细解析。我们都知道DNS可以将域名转换成具体的IP地址。DNS适用于IPv4,IPv6.那么关于DNS还有什么值得深挖的吗&#xff1f; 目录 1.为什么要有DNS域名&#xff1f; DNS的产生 2.域名和域名的构成 3.域名解析过程 4.本机如何干预域名解析 5.DNS…

浅谈DNS域名解析过程

互联网是通过URL来发布和请求资源的&#xff0c;而URL中的域名需要解析成IP地址才能与远程主机建立连接。当用户在浏览器中输入 www.baidu.com时&#xff0c;DNS会将域名解析成IP地址&#xff0c;然后再去匹配对应的IP地址。 步骤一&#xff1a;当在浏览器中输入域名按下回车键…

[计算机网络]DNS域名解析过程

DNS域名解析过程 dns 即是 domain name system 域名系统的缩写&#xff0c;将域名和 ip 的映射关系保存在一个分布式数据库中。 首先我们要明确一个观点。运行浏览器或者任何应用程序的主机和服务器之间&#xff0c;或者主机和主机之间&#xff0c;只能使用IP进行链接通讯&am…

DNS:DNS域名解析过程及原理

一、理解IP和域名 我们首先要了解域名和IP地址的区别。 IP地址是互联网上计算机唯一的逻辑地址。 通过IP地址实现不同计算机之间的相互通信&#xff0c;每台联网计算机都需要通过IP地址来互相联系和分别。 但由于IP地址是由一串容易混淆的数字串构成&#xff0c;人们很难记忆所…

DNS域名解析过程剖析

DNS域名解析过程 第一步&#xff1a;浏览器会检查缓存中有没有域名对应的ip地址&#xff0c;这个缓存是有过期时长的&#xff0c;一般是几分钟到几小时不等。 第二步&#xff1a;如果浏览器缓存没有&#xff0c;那么就检查操作系统的hosts文件&#xff0c;linux在/etc/hosts文…

dns域名解析原理及过程

文章目录 1.DNS协议2.域名的层次结构1.DNS域名解析 1.DNS协议 域名解析&#xff1a;就是域名到IP地址的转换过程。&#xff08;也可以将IP地址转换为相应的域名地址&#xff0c;叫做反向解析&#xff09; 人们通过注册的域名可以方便地访问到网站。IP地址是网络上标识站点的数…

DNS域名解析详细过程

一、DNS DNS&#xff08;Domain Name System&#xff09;是域名系统的英文缩写&#xff0c;是一种组织成域层次结构的计算机和网络服务命名系统&#xff0c;用于 TCP/IP 网络。 二、域名系统DNS的作用 通常我们有两种方式识别主机&#xff1a;通过主机名或者 IP 地址。人们喜…

域名(DNS)原理及解析过程详解

相信大家在平时工作中都离不开DNS解析&#xff0c;DNS解析是互联网访问的第一步&#xff0c;无论是使用笔记本浏览器访问网络还是打开手机APP的时候&#xff0c;访问网络资源的第一步必然要经过DNS解析流程。下面我们将详细的给大家讲解DNS的相关知识。 什么是DNS DNS就是域名系…

浅析DNS域名解析过程

转载自&#xff1a;https://blog.csdn.net/Lammonpeter/article/details/81358387 一、DNS域名解析步骤 下图是DNS域名解析的一个示例图&#xff0c;它涵盖了基本解析步骤和原理。 下面DNS解析步骤进行讲解&#xff0c;后面将采用命令行的形式来跟踪DNS解析过程。当用户在地址…

详解DNS域名解析全过程

关于dns域名解析的大致过程很多人都知道&#xff0c;但有些细枝末节的东西容易遗忘&#xff0c;今天有空整理一下&#xff0c;作为以后复习用&#xff0c;如有不对的地方&#xff0c;还望指正。解析大致过程如图&#xff08;不喜欢看图的可以直接跳过&#xff09;&#xff1a; …

DNS域名详细解析过程

最近需要搭建一个网站&#xff0c;需要域名解析和备案了&#xff0c;租了一个很便宜的服务器&#xff0c;而且服务超级好&#xff0c;有兴趣私聊我。 什么是DNS域名解析 我们首先要了解域名和IP地址的区别。IP地址是互联网上计算机唯一的逻辑地址&#xff0c;通过IP地址实现不…