手把手教你写代码——基于控制台的通讯录管理系统(单表)

news2024/9/25 3:18:47

栏目介绍

本栏目专为入门java学习者设计的一些简单的入门项目

功能介绍

本项目为简单的基于控制台的通讯录管理系统,所需要的环境仅仅为jdk以及mysql(版本不限)!只有一个简单的eclipse软件以及我们的mysql可视化工具(视频使用navicat)

本项目数据库表仅有一个,单表操作,方便学习!
本项目使用mvc设计模式,使用面向对象的开发思想
本项目使用最基础的jdbc的方式链接的数据库

本项目主要实现的功能有:

  • 系统运行成功后的欢迎及菜单页面
  • 添加联系人功能
  • 联系人查询功能(分名称和手机号查询)
  • 显示联系人列表
  • 根据编号删除指定编号的联系人
  • 修改指定编号的联系人
  • 退出登录

项目实现截图

项目结构:
在这里插入图片描述

数据表结构(单表user)
在这里插入图片描述

1.项目通过main方法运行后的页面
在这里插入图片描述

2.新增用户页面功能
在这里插入图片描述

3.联系人查询功能(按照姓名和手机号码)
在这里插入图片描述

4.显示联系人列表功能页面

在这里插入图片描述

5.根据编号删除指定编号的联系人
在这里插入图片描述

6.修改指定编号的联系人
在这里插入图片描述

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

项目部分代码

jdbc工具:

    public static String db_url = "jdbc:mysql://localhost:3306/addressbook?serverTimezone=Asia/Shanghai&useSSL=false&useUnicode=true&characterEncoding=utf-8";
    public static String db_user = "root";
    public static String db_pass = "123456";
    
    public static Connection getConn () {
        Connection conn = null;
        
        try {
            Class.forName("com.mysql.cj.jdbc.Driver");
            conn = DriverManager.getConnection(db_url, db_user, db_pass);
        } catch (Exception e) {
            e.printStackTrace();
        }
        
        return conn;
    }
    

主方法类:

package com.maker.address.web;

import java.util.ArrayList;
import java.util.Scanner;

import com.maker.address.entity.User;
import com.maker.address.service.UserService;

public class UserMain {
	static UserService user = new UserService();
	static Scanner sc = new Scanner(System.in);

	public static void start() {
		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("【0】退出");
		System.out.println("=============================");
		int i = sc.nextInt();
		switch (i) {
		case 1:
			add();
			start();
			break;
		case 2:
			System.out.println("【1】通过联系人姓名查询/【2】通过联系人电话查询");
			int a = sc.nextInt();
			findbyName(a);
			start();
			break;
		case 3:
			show();
			start();
			break;
		case 4:
			del();
			start();
			break;
		case 5:
			update();
			start();
			break;
		case 0:
			System.out.println("谢谢使用,再见!");
			System.exit(0);
			break;
		default:
			System.out.println("请输入正确的指令!");
			start();
			break;
		}
	}

	//修改用户
	private static void update() {
		// TODO Auto-generated method stub
		System.out.println("请输入要修改的联系人编号:");
		int a = sc.nextInt();
		System.out.println("请输入姓名:");
		String b = sc.next();
		System.out.println("请输入手机号:");
		String c = sc.next();
		judgePhone(c);
		System.out.println("请输入QQ:");
		String d = sc.next();
		System.out.println("请输入邮箱地址:");
		String e = sc.next();
		judgeEmail(e);
		User x = new User(a, b, c, d, e);
		if (user.updateUser(x)) {
			System.out.println("修改成功!");
		}
	}

	public static void add() {
		System.out.println("请输入联系人编号:");
		int a = sc.nextInt();
		System.out.println("请输入联系人姓名:");
		String b = sc.next();
		System.out.println("请输入联系人手机号:");
		String c = sc.next();
		judgePhone(c);
		System.out.println("请输入联系人QQ:");
		String d = sc.next();
		System.out.println("请输入联系人邮箱地址:");
		String e = sc.next();
		judgeEmail(e);
		User x = new User(a, b, c, d, e);
		if (user.addUser(x)) {
			System.out.println("添加成功!");
		}
	}

	public static void judgePhone(String phone) {

		if (phone.matches("1[34589][0-9]{9}")) {

		} else {
			System.out.println("手机号输入有误,请重新输入");
			String v = sc.next();
			judgePhone(v);
		}
	}

	public static void judgeEmail(String email) {

		if (email.matches("[A-Za-z0-9]+@[a-zA-Z0-9_-]+(\\.[a-zA-Z0-9_-]+)")) {

		} else {
			System.out.println("邮箱格式输入有误,请重新输入");
			String v = sc.next();
			judgeEmail(v);
		}
	}

	public static void findbyName(int a) {
		if (a == 1) {
			System.out.println("请输入联系人姓名");
		} else {
			System.out.println("请输入联系人电话");
		}
		String name = sc.next();
		User user = UserMain.user.searchByName(name);
		System.out.println(user);
	}

	public static void show() {
		ArrayList list = user.showInfo();
		for (Object o : list) {
			System.out.println(o);
		}
	}

	public static void del() {
		System.out.println("请输入编号");
		int no = sc.nextInt();
		if (user.delUser(no)) {
			System.out.println("删除成功");
		}
	}

	public static void main(String[] args) {
		start();
	}
}


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/796829.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

企业网关:打开商业大门的关键

企业网关:打开商业大门的关键 在当今数字化时代,企业网关的重要性变得越来越明显。作为连接企业内外的关键枢纽,企业网关不仅提供了安全可靠的网络连接,还为企业提供了更高效的业务运营和更好的客户体验。本文将深入探讨企业网关…

Vue-路由

一、目标 能够说出前端路由工作的过程能够知道如何在vue3中配置路由能够知道如何使用嵌套路由能够知道如何实现动态路由匹配能够知道如何使用编程式导航能够知道如何使用导航守卫 二、目录 前端路由的概念与原理vue-router的基本使用vue-router的高级用法后台管理案例 前端…

linux下的questasim安装和与vivado的关联

一、questasim安装 参考链接 IC验证工具:Ubuntu下Questasim10.7安装(64bit)全攻略 参考2 易特创芯 linux环境下questasim 10.7的安装总结_limanjihe的博客-CSDN博客 前面操作参照的第一个链接,后面激活文件参考的第二个 另外…

JavaScript 常用数组方法之数组扁平化「赶紧收藏」

一、什么是数组扁平化 数组扁平化,就是将一个复杂的嵌套多层的数组,一层一层的转化为层级较少或者只有一层的数组。 比如: // 多维数组 var arr [1,2,[3,4,5,[6,7,8],9],10,[11,12]]; // 数组扁平化 [1,2,3,4,5,6,7,8,9,10,11,12]二、实现…

关于在Python的for循环中改变列表的值问题探究

案例一: def test():a [1, 2]for i in a:print(i, id(a))if i 5:breaka [a[0]2, a[1]2] 输出: 1 4313456192 2 4313269056 解释: 在for循环语句中的变量a使用的内存地址为4313456192,这个地址以及存储的值不会因为a的重新赋…

ceph-mon运行原理分析

一、流程:ceph-deploy部署ceph-mon组建集群 1.ceph-deploy部署ceph-mon的工作流程及首次启动 1)通过命令创建ceph-mon,命令为:ceph-deploy create mon keyring def mon(args):if args.subcommand create:mon_create(args)elif…

【Jenkins系列】-Pipeline语法全集

Jenkins为您提供了两种开发Pipeline的方式:脚本式和声明式。 脚本式流水线(也称为“传统”流水线)基于Groovy作为其特定于域的语言。而声明式流水线提供了简化且更友好的语法,并带有用于定义它们的特定语句,而无需学习…

金融行业软件测试面试题及其答案

下面是一些常见的金融行业软件测试面试题及其答案: 1. 什么是金融行业软件测试? 金融行业软件测试是针对金融领域的软件系统进行验证和确认的过程,旨在确保软件在安全、稳定、可靠和符合法规要求的条件下运行。 2. 解释一下金融软件中的风险…

golang,gin框架的请求参数(一)--推荐

golang,gin框架的请求参数(一) gin框架的重要性不过多的强调,重点就gin使用中的参数传递,获取进行梳理文件,满足使用需求。 获取前端请求参数的几种方法: 一、获取参数【浏览器地址获取参数】…

linux的一些基本指令第二期

rm rm -r 你要删除的目录名 加了-r 之后表示递归删除你要删除的目录 使用这个命名之后,他会一边递归到叶子节点,一边询问你是否要删除,然后会递归回来,在回来的途中删除: rm -rf 你要删除的目录名 强制执行删除操作…

权威认证!伙伴云入选亿欧2023AIGC应用场景创新TOP50榜单

近日, 知名科技与产业创新服务平台【亿欧】发布2023年度AIGC应用场景创新TOP50榜单。 伙伴云作为行业领先的零代码应用搭建平台,率先推出AI智能搭建系统功能,并将Chat GPT应用嵌入伙伴云应用在解决方案层,最终凭借前沿的技术创新力和突出的数…

【NVMe2.0d 17 - 1】Reservation 核心命令

文章目录 Reservation RegisterReservation AcquireReservation ReportReservation Release Reservation Register Reservation Register命令用于注册、取消注册或替换reservation key。 该命令使用Command Dword 10和内存中的Reservation Register data structure 如果该命…

基于seaborn.countplot的柱状图显示Y值及填充形状

参考链接: seaborn 柱状图上显示y值的方法 python柱形图填充 figs,ax plt.subplots(figsize(10,4)) fig sns.countplot(x"状态",hue"等级", datadatas)// 不可通过设置hatch参数来设置 marks ["o","---","***&quo…

IDEA批量启动多个微服务

注:现在盛行微服务开发,通常需要通过idea启动多个项目,每次都一个一个的启动,太麻烦了,不过被担心idea帮我们考虑到这个了(不用安装插件哦) 配置步骤: 将需要一次性全部启动的微服务…

[STL]详解vector模拟实现

[STL]vector模拟实现 文章目录 [STL]vector模拟实现1. 整体结构总览2. 成员变量解析3. 默认成员函数构造函数1构造函数2构造函数3拷贝构造函数析构函数 4. 迭代器相关函数begin函数end函数begin函数const版本end函数const版本 5.容量相关函数size函数capacity函数reserve函数re…

【Nodejs】操作mongodb数据库

1.简介 Mongoose是一个让我们可以通过Node来操作MongoDB的模块。Mongoose是一个对象文档模型(ODM)库,它对Node原生的MongoDB模块进行了进一步的优化封装,并提供了更多的功能。在大多数情况下,它被用来把结构化的模式应用到一个MongoDB集合,并…

【每日一题】2500. 删除每行中的最大值

【每日一题】2500. 删除每行中的最大值 2500. 删除每行中的最大值题目描述解题思路 2500. 删除每行中的最大值 题目描述 给你一个 m x n 大小的矩阵 grid ,由若干正整数组成。 执行下述操作,直到 grid 变为空矩阵: 从每一行删除值最大的元…

阿里Java开发手册~建表规约

1. 【强制】表达是与否概念的字段,必须使用 is _ xxx 的方式命名,数据类型是 unsigned tinyint ( 1 表示是, 0 表示否 ) 。 说明: 任何字段如果为非负数,必须是 unsigned 。 正例&am…

Jenkins+Docker+Docker-Compose自动部署,SpringCloud架构公共包一个任务配置

前言 Jenkins和docker的安装,随便百度吧,实际场景中我们很多微服务的架构,都是有公共包,肯定是希望一个任务能够把公共包的配置加进去,一并构建,ok,直接上干货。 Jenkins 全局环境安装 pwd e…

建造者模式——复杂对象的组装与创建

1、简介 1.1、概述 建造者模式又称为生成器模式,它是一种较为复杂、使用频率也相对较低的创建型模式。建造者模式向客户端返回的不是一个简单的产品,而是一个由多个部件组成的复杂产品。 建造者模式是较为复杂的创建型模式,它将客户端与包…