javaWeb学生信息管理

news2025/2/25 11:22:48

一、引言

学生信息管理系统是基于Java Web技术开发的一个全栈应用,用于管理学生的基本信息。本系统采用Eclipse作为开发工具,Navicat用于MySQL数据库管理,运行在JDK1.8、Tomcat9.0、MySQL8.0环境下。前端采用JavaScript、jQuery、Bootstrap4、particles.js,后端使用Maven构建,SpringMVC和MyBatis框架实现,同时利用Ajax实现异步数据交互,支持MySQL读写分离和MyBatis分页。
2. 系统架构

二、系统架构

1.前端框架

使用JavaScript和jQuery处理页面逻辑
基于Bootstrap4构建响应式界面
利用particles.js创建炫酷的背景效果

2.后端架构

Maven用于项目构建和依赖管理
SpringMVC作为Web框架,实现MVC架构
MyBatis用于数据库交互,实现数据持久化
Ajax用于实现异步请求,提升用户体验
支持MySQL读写分离,提高数据库性能
使用MyBatis分页插件实现分页功能

四、 开发环境搭建

下载并安装Eclipse、Navicat
安装JDK1.8、Tomcat9.0
配置MySQL8.0数据库

五、数据库

  • admin: 存储管理员信息,包括管理员名称和密码。
  • course: 课程信息表,包含课程编号、课程名称、课程介绍、类型、所属学院和专业。
  • courseplan: 课程安排表,记录了课程班级、上课时间、上课周数、课程编号、教师编号、教室、学分、课时、总人数等信息。
  • grade: 成绩表,包含学生成绩、学分等信息。
  • sc: 学生选课表,记录学生选择的课程。
  • student: 学生信息表,包含学生学号、姓名、身份证号、性别、密码、年龄、班级、专业和学院等信息。
  • teacher: 教师信息表,包含教师编号、姓名、密码、性别和简介等信息。
  • wang: 示例表,包含一个字段 id

六、主要功能说明

  • 管理员功能:

    • 登录验证:使用管理员用户名和密码登录系统。
    • 课程管理:添加、删除和修改课程信息。
    • 学生管理:添加、删除和修改学生信息。
    • 教师管理:添加、删除和修改教师信息。
  • 学生功能:

    • 登录验证:使用学生学号和密码登录系统。
    • 查看个人信息:查看自己的基本信息。
    • 选课:选择感兴趣的课程。
    • 查看成绩:查看已修课程的成绩。
  • 教师功能:

    • 登录验证:使用教师编号和密码登录系统。
    • 查看个人信息:查看自己的基本信息。
    • 课程管理:添加、删除和修改自己教授的课程信息。
    • 成绩录入:录入学生成绩信息。
  • 外键关系:

    • courseplan 表中的 cidtid 分别与 course 表和 teacher 表的主键关联。
    • sc 表中的 cidsid 分别与 course 表和 student 表的主键关联。
    • grade 表中的 sidcid 分别与 student 表和 course 表的主键关联。
  • 示例数据:

    • admin 表中有一个管理员账户,用户名为 ‘admin’,密码为 ‘admin’。
    • teacher 表中有教师的相关信息。
    • student 表中有学生的相关信息。
    • course 表中有多个课程的信息。
    • courseplan 表中有多个课程的安排信息。
    • sc 表中有学生选课的记录。
    • grade 表中有学生成绩的记录。

七、项目截图

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

八、代码

fail.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head><script type="text/javascript" src="/StudentInfo/utils/scripts/flat-ui.js"></script><meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no"><link rel="shortcut icon" href="/StudentInfo/utils/image/favicon.ico" type="image/x-icon" />
<meta charset="UTF-8">
<title>操作失败</title>
<!-- Loading Bootstrap -->
<link href="/StudentInfo/utils/css/vendor/bootstrap.min.css" rel="stylesheet">
<!-- Loading Flat UI Pro -->
<link href="/StudentInfo/utils/css/flat-ui.css" rel="stylesheet">
<!-- Loading Flat UI JS -->
<script type="text/javascript" src="/StudentInfo/utils/scripts/flat-ui.min.js"></script>
<script type='text/javascript' src='/StudentInfo/utils/scripts/particles.js'></script><link href="/StudentInfo/utils/css/animate.css" rel="stylesheet"></head>
<body><div id="particles-js"><canvas class="particles-js-canvas-el" width="1322" height="774" style="width: 100%; height: 100%;"></canvas></div>
	<br>
	<div class="container">
		<div class="row">
			<div class="col-md-12">
				<div class="alert alert-danger">
					<h3>操作失败!</h3>
					<h5>${requestScope.msg}</h5>
				</div>
				
				请联系管理员 <a class="btn btn-default" href="javascript:history.go(-1)">点击返回</a>
			</div>
		</div>
	</div>
<script type="text/javascript" src="/StudentInfo/utils/scripts/flat-ui.js"></script><script src="/StudentInfo/utils/scripts/bganimation.js"></script></body>
</html>

index.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta name="viewport"
	content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no">
<link rel="shortcut icon" href="/StudentInfo/utils/image/favicon.ico"
	type="utils/image/x-icon" />
<meta charset="UTF-8">
<title>学生信息管理系统</title>

<script type="text/javascript" src="utils/js/jquery-3.3.1.min.js"></script>

<!-- Loading Bootstrap -->
<link href="utils/css/vendor/bootstrap.min.css" rel="stylesheet">

<!-- Loading Flat UI Pro -->
<link href="utils/css/flat-ui.css" rel="stylesheet">

<!-- Loading Flat UI Pro -->
<link href="utils/css/animate.css" rel="stylesheet">

<link href='http://fonts.googleapis.com/css?family=Montserrat:400,700'
	rel='stylesheet' type='text/css'>
<script type='text/javascript' src='utils/scripts/particles.js'></script>
<!--<script type='text/javascript' src='scripts/jquery.particleground.js'></script>-->
<script src="utils/js/bootstrap.min.js"></script>
<style>
.login-plane {
	padding: 2rem;
	margin-top: 3rem;
}

.center-block {
	display: block;
	margin-left: auto;
	margin-right: auto;
}

.center-carousel {
	width: 33%;
	margin-left: auto;
	margin-right: auto;
}

.login-btn {
	width: 100%;
	margin-top: 1rem;
}

.container {
	padding-top: 4rem;
}

body {
	/*background: url(image/bj.jpg)*/
	
}
</style>

<link href="/StudentInfo/utils/css/animate.css" rel="stylesheet">
</head>
<body style="display: flex;">











	<div id="particles-js">
		<canvas class="particles-js-canvas-el" width="1322" height="774"
			style="width: 100%; height: 100%;">
    </canvas>
	</div>
	<div class="container" id="particles"
		style="position: relative; top: -4rem; margin: auto;">
		<div class="row">
			<div class="col-md-12">
				<h4 class="text-center animated bounceInDown">学生信息管理系统</h4>







				<!-- 轮播图部分-->

				<div class="wwze">
					<!-- 模态框 -->
					<div class="modal fade" id="myModal">
						<div class="modal-dialog modal-lg">
							<div class="modal-content">

								<!-- 模态框头部 -->
								<div class="modal-header">
									<h4 class="modal-title">项目必读:相关技术、技术、测试数据、版本更新</h4>
									<button type="button" class="close" data-dismiss="modal">&times;</button>
								</div>

								<!-- 模态框主体 -->
								<div class="modal-body">

									<jsp:include page="Introduction.jsp" />
								</div>

								<!-- 模态框底部 -->
								<div class="modal-footer">
									<button type="button" class="btn btn-secondary"
										data-dismiss="modal">关闭</button>
								</div>

							</div>
						</div>
					</div>
				</div>


				<div class="center-carousel">
					<div id="demo" class="carousel slide" data-ride="carousel">

						<!-- 指示符 -->
						<ul class="carousel-indicators">
							<li data-target="#demo" data-slide-to="0" class="active"></li>
							<li data-target="#demo" data-slide-to="1"></li>
							<li data-target="#demo" data-slide-to="2"></li>
							<li data-target="#demo" data-slide-to="4"></li>
						</ul>

						<!-- 轮播图片 -->
						<div class="carousel-inner">
							<div class="carousel-item active">
								<a data-toggle="modal" data-target="#myModal" href=""><img
									src="https://fuzui.oss-cn-shenzhen.aliyuncs.com/img/img001.png"></a>
							</div>
							<div class="carousel-item">
								<a href="https://github.com/fuzui/" target="_blank"><img
									src="https://fuzui.oss-cn-shenzhen.aliyuncs.com/img/github.jpg"></a>
							</div>
							<div class="carousel-item">
								<a href="https://fuzui.net" target="_blank"><img
									src="https://fuzui.oss-cn-shenzhen.aliyuncs.com/img/myblog.jpg"></a>
							</div>
							<div class="carousel-item">
								<a href="https://blog.csdn.net/qq_39329616" target="_blank"><img
									src="https://fuzui.oss-cn-shenzhen.aliyuncs.com/img/myinfo.jpg"></a>
							</div>
						</div>

						<!-- 左右切换按钮 -->
						<a class="carousel-control-prev" href="#demo" data-slide="prev">
							<span class="carousel-control-prev-icon"></span>
						</a> <a class="carousel-control-next" href="#demo" data-slide="next">
							<span class="carousel-control-next-icon"></span>
						</a>

					</div>
				</div>


				<!-- 轮播图部分结束-->







			</div>
			<div class="col-md-12">
				<div class="row login-plane animated fadeIn">
					<div class="col-md-4 center-block">
						<form method="post" name="login" id="login" action=""
							onsubmit="return submitHandler()">
							<strong>账号信息</strong>
							<div class="form-group has-feedback">
								<input name="" type="text" id="userid" value=""
									placeholder="userid" class="form-control" m="userid"
									onkeyup="value=value.replace(/[\u4e00-\u9fa5]|(^\s+)|(\s+$)/ig,'')"
									maxlength="12" /> <span class="form-control-feedback fui-user"></span>
							</div>
							<div class="form-group has-feedback">
								<input name="" type="password" value="" id="password"
									placeholder="password" class="form-control" m="password"
									onkeyup="this.value=this.value.replace(/(^\s+)|(\s+$)/g,'');"
									maxlength="16" /> <span class="form-control-feedback fui-lock"></span>
							</div>

							<div class="row">
								<div class="col-md-12">
									<strong>角色信息</strong>
								</div>
								<div class="col-md-4">
									<label class="radio" for="radio1"> <input type="radio"
										name="optionsRadios1" value="student" checked="checked"
										id="radio1" data-toggle="radio" class="custom-radio">
										<span class="icons"> <span class="icon-unchecked"></span>
											<span class="icon-checked"></span>
									</span> <font style="vertical-align: inherit;"> <font
											style="vertical-align: inherit;"> 学生 </font>
									</font>
									</label>
								</div>
								<div class="col-md-4">
									<label class="radio" for="radio2"> <input type="radio"
										name="optionsRadios1" value="teacher" id="radio2"
										data-toggle="radio" class="custom-radio"> <span
										class="icons"> <span class="icon-unchecked"></span> <span
											class="icon-checked"></span>
									</span> <font style="vertical-align: inherit;"> <font
											style="vertical-align: inherit;"> 老师 </font>
									</font>
									</label>
								</div>
								<div class="col-md-4">
									<label class="radio" for="radio3"> <input type="radio"
										name="optionsRadios1" value="admin" id="radio3"
										data-toggle="radio" class="custom-radio"> <span
										class="icons"> <span class="icon-unchecked"></span> <span
											class="icon-checked"></span>
									</span> <font style="vertical-align: inherit;"> <font
											style="vertical-align: inherit;"> 管理员 </font>
									</font>
									</label>
								</div>
							</div>

							<input class="btn btn-primary btn-wide login-btn" value="LOGIN"
								type="submit" />
						</form>
					</div>
				</div>
			</div>
		</div>
	</div>

	<script>
		var useridEle = document.getElementById("userid");
		var passwordEle = document.getElementById("password");
		var roleRadio = document.getElementsByName("optionsRadios1");

		/*
		 * 点击登录执行的逻辑
		 */
		function submitHandler() {

			if (!vali()) {
				return false;
			}

			var role = 'student';

			for (var i = 0; i < roleRadio.length; i++) {
				if (roleRadio[i].checked) {
					role = roleRadio[i].value;
				}
			}

			var action = null;
			if (role == 'student') {
				action = "/StudentInfo/LoginHandler/studentlogin";
				useridEle.name = "sid";
				passwordEle.name = "spassword";
			} else if (role == 'teacher') {
				action = "/StudentInfo/LoginHandler/teacherlogin";
				useridEle.name = "tid";
				passwordEle.name = "tpassword";
			} else {
				action = "/StudentInfo/LoginHandler/adminlogin";
				useridEle.name = "aname";
				passwordEle.name = "apassword";
			}
			document.getElementById("login").action = action;

			return true;
		}

		function vali() {
			var valiObjs = createInputMsgObj([ 'userid', 'password' ])

			for (var i = 0; i < valiObjs.length; i++) {
				console.log(valiObjs[i].el.val())
				if (valiObjs[i].el.val() == null || valiObjs[i].el.val() == '') {
					valiObjs[i].el.css({
						"border-color" : "red"
					})
					console.log(valiObjs[i].el)
					var alertEl = $("<div style=\"position:fixed;top:1rem;right:1rem;\" class=\"alert alert-warning\">"
							+ valiObjs[i].msg + "没有填写!" + "</h5></div>")
					$("body").append(alertEl);
					setTimeout(function() {
						alertEl.remove();
					}, 1000)
					return false;
				}
			}
			return true;
		}

		function createInputMsgObj(ids) {
			var objs = [];

			for (var i = 0; i < ids.length; i++) {

				var obj = {
					el : $("#" + ids[i]),
					msg : $("#" + ids[i]).attr('m')
				}
				objs.push(obj);
			}

			return objs;
		}
	</script>
	<script src="utils/scripts/bganimation.js"></script>
</body>
</html>

introduction.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head><script type="text/javascript" src="/StudentInfo/utils/scripts/flat-ui.js"></script><meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no"><link rel="shortcut icon" href="/StudentInfo/utils/image/favicon.ico" type="image/x-icon" />
<meta charset="UTF-8">
<title>项目必读</title>
<!-- Loading Bootstrap -->
<link href="/StudentInfo/utils/css/vendor/bootstrap.min.css" rel="stylesheet">
<!-- Loading Flat UI Pro -->
<link href="/StudentInfo/utils/css/flat-ui.css" rel="stylesheet">
<!-- Loading Flat UI JS -->
<script type="text/javascript" src="/StudentInfo/utils/scripts/flat-ui.min.js"></script>
<script type='text/javascript' src='/StudentInfo/utils/scripts/particles.js'></script><link href="/StudentInfo/utils/css/animate.css" rel="stylesheet"></head>
<body>
	
	
	<div class="jumbotron text-center">
  <h1>学生信息管理系统</h1>
  <p>V1.0</p> 
</div>
	<div class="container">
  <div class="row">
      <font color="red">因为mysql连接失效问题,有时候登录会出现异常,返回再次登录即可!(待修复)</font>
      <br>
      <h5>应用技术</h5>
      <br>
      
        <ul class="list-group">
          <li class="list-group-item">工具:eclipse、navicat</li>
          <li class="list-group-item">环境:JDK1.8、tomcat9.0、mysql8.0</li>
          <li class="list-group-item">前端:JavaScript、jQuery、bootstrap4、particles.js</li>
          <li class="list-group-item">后端:maven、SpringMVC、MyBatis、ajax、mysql读写分离、mybatis分页</li>
        </ul>
        
        <br>
        <h5>简介</h5>
      
        由SpringMVC+MyBatis为主要框架,mysql8.0配置主从复制实现读写分离,主机丛机分别为腾讯云的服务器,而项目部署在阿里云上。前端主要由bootstrap完成,背景用particles.js插件。数据库交互查询用到pagehelper分页。在添加修改相关功能时通过ajax来验证其主键是否存在可用。代码层次清晰,输入框约束较高,已配置登录拦截。
    
    <br>
    <h5>主要功能模块图</h5>
    <img src="https://fuzui.oss-cn-shenzhen.aliyuncs.com/img/20190414000551.png"/>
    其中查询拥有多种查询方式,功能持续更新中······
    <br>
    <h5>部分测试数据</h5>
    <div class="alert alert-danger">提示:除管理员外其他测试数据均可能被修改,介意登录管理员查看其他角色账号密码测试</div>
   <table class="table table-hover">
    <thead>
      <tr>
        <th>角色</th>
        <th>账号</th>
        <th>密码</th>
      </tr>
    </thead>
    <tbody>
      <tr>
        <td>管理员</td>
        <td>admin</td>
        <td>admin</td>
      </tr>
      <tr>
        <td>教师</td>
        <td>0002</td>
        <td>111111</td>
      </tr>
      <tr>
        <td>教师</td>
        <td>1003</td>
        <td>123456</td>
      </tr>
      <tr>
        <td>学生</td>
        <td>201107024126</td>
        <td>000000</td>
      </tr>
      <tr>
        <td>学生</td>
        <td>201220122016</td>
        <td>111111</td>
      </tr>
    </tbody>
  </table>
  </div>
</div>

<h5>更新日志</h5>


<ul class="list-group">
          <li class="list-group-item">
              <p>2019.4.14:发布第一个版本</p>
              <p>预计下一版本于4.25,将会新增排课查重、选课限制、学分统计、教师系别等功能</p>
              <p>2019.6.19:新增结课、学分统计、成绩录入功能/p>
              <p>鉴于这是一个简单的学习项目,因为时间问题暂停更新,会陆续解决已有bug</p>
          </li>
          <li class="list-group-item">······</li>
        </ul>
 <br>
 <br>       
 <center><font face="华文行楷" size=6 color="blue">
当你的才华还撑不起你的野心的时候,<br>你就应该静下心来学习。</font>
</center>
	
<script type="text/javascript" src="/StudentInfo/utils/scripts/flat-ui.js"></script><script src="/StudentInfo/utils/scripts/bganimation.js"></script></body>
</html>

success.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8"%>
<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<!DOCTYPE html>
<html>
<head><script type="text/javascript" src="/StudentInfo/utils/scripts/flat-ui.js"></script><meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no"><link rel="shortcut icon" href="/StudentInfo/utils/image/favicon.ico" type="image/x-icon" />
<meta charset="UTF-8">
<title>操作成功</title>
<!-- Loading Bootstrap -->
<link href="/StudentInfo/utils/css/vendor/bootstrap.min.css" rel="stylesheet">
<!-- Loading Flat UI Pro -->
<link href="/StudentInfo/utils/css/flat-ui.css" rel="stylesheet">
<!-- Loading Flat UI JS -->
<script type="text/javascript" src="/online/scripts/flat-ui.min.js"></script>
<script type='text/javascript' src='/online/scripts/particles.js'></script><link href="/online/css/animate.css" rel="stylesheet"></head>
<body><div id="particles-js"><canvas class="particles-js-canvas-el" width="1322" height="774" style="width: 100%; height: 100%;"></canvas></div>
	<div class="container">
		<div class="row">
			<div class="col-md-12">
				<h1 class="alert alert-info">操作成功!</h1>

				<a class="btn btn-default" href="javascript:" onclick="self.location=document.referrer;">点击返回</a>
			</div>
		</div>
	</div>
<script type="text/javascript" src="/StudentInfo/utils/scripts/flat-ui.js"></script><script src="/StudentInfo/utils/scripts/bganimation.js"></script></body>
</html>

九、交流与联系

q:969060742 文档、代码、sql、程序

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

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

相关文章

大语言模型之十四-PEFT的LoRA

在《大语言模型之七- Llama-2单GPU微调SFT》和《大语言模型之十三 LLama2中文推理》中我们都提到了LoRA&#xff08;低秩分解&#xff09;方法&#xff0c;之所以用低秩分解进行参数的优化的原因是为了减少计算资源。 我们以《大语言模型之四-LlaMA-2从模型到应用》一文中的图…

14:00面试,14:06就出来了,这问的过于变态了。。。

前言 刚从小厂出来&#xff0c;没想到在另一家公司我又寄了。 在这家公司上班&#xff0c;每天都要加班&#xff0c;但看在钱给的比较多的份上&#xff0c;也就不太计较了。但万万没想到5月一纸通知&#xff0c;所有人不准加班了&#xff0c;不仅加班费没有了&#xff0c;薪资…

Linux: 进程(控制)

目录 1.进程的创建 1.1fork函数 1.2fork创建子进程,OS做了什么&#xff1f; 1.3为什么要写实拷贝&#xff1f; 2.进程的终止 2.1进程终止&#xff0c;操作系统做了什么&#xff1f; 2.2进程常见的退出方式 2.3进程常见的退出方法 3.进程的等待 3.1为什么进行进程等待…

SpringCloud Alibaba - Seata 部署 TC 服务,并集成微服务

目录 一、Seata 架构 1.1、Seata 架构重要角色 1.2、部署 TC 服务 1.2.1、前言 1.2.2、下载 seata-server 包&#xff0c;解压 1.2.3、修改配置 1.2.4、在 nacos 中添加配置 1.2.5、创建数据库表 1.2.6、启动 TC 服务 1.3、微服务集成 Seata 1.3.1、引入依赖 1.3.2、…

面试题:熟悉设计模式吗?谈谈简单工厂模式和策略模式的区别

刚刚接触设计模式的时候&#xff0c;我相信单例模式和工厂模式应该是用的最多的&#xff0c;毕竟很多的底层代码几乎都用了这些模式。自从接触了一次阿里的公众号发的一次文章关于 DDD的使用 以后&#xff0c;就逐渐接触了策略模式。现在在项目中运用最多的也是这几种设计模式了…

使用mysql的cmd窗口,运行项目中的mapper层xml里的sql语句,查看运行结果

使用mysql的cmd窗口&#xff0c;运行项目中的mapper层xml里的sql语句&#xff0c;查看运行结果 项目代码或者从控制台复制sql语句从控制台搜索方式 运行效果或者使用idea的console窗口运行查看结果点击进入&#xff0c;查看表结构与字段 其他技巧根据from 表名寻找对应的sql代码…

Linux系统编程系列之线程属性

一、什么是线程属性 线程属性就是线程的属性&#xff0c;是一个用于控制线程行为和功能的参数集合。它可以影响线程的优先级、调度、同步行为和资源管理等方面。线程有许多属性&#xff0c;如分离属性&#xff0c;继承策略&#xff0c;调度策略等。看图 二、线程属性的特性 1、…

ctfshow 命令执行(40-50)

web40 题目过滤了很多 if(isset($_GET[c])){$c $_GET[c];if(!preg_match("/[0-9]|\~|\|\|\#|\\$|\%|\^|\&|\*|\&#xff08;|\&#xff09;|\-|\|\|\{|\[|\]|\}|\:|\|\"|\,|\<|\.|\>|\/|\?|\\\\/i", $c)){eval($c);}}else{highlight_file(__FILE_…

pycharm 中的一个非常好使用的智能提示tabnine(大大提高代码的书写效率)

一. pycharm 中的代码智能提示插件 有时候,我们总是在写代码的时候,敲全部的代码,太过于麻烦了,如果有一个软件可以预知你的后续的操作,提前将代码给你写出来,你只需要检查对错,就可以了,这样就大大提高了工作的效率. 上面的一个插件是汉化pycharm的软件包,也是非常好用的一款…

小谈设计模式(14)—建造者模式

小谈设计模式&#xff08;14&#xff09;—建造者模式 专栏介绍专栏地址专栏介绍 建造者模式角色分类产品&#xff08;Product&#xff09;抽象建造者&#xff08;Builder&#xff09;具体建造者&#xff08;Concrete Builder&#xff09;指挥者&#xff08;Director&#xff0…

分享一款开源的QT的串口示波器

分享一款开源的QT的串口示波器&#xff0c;完全开源&#xff0c;支持串口、TCP、波形显示、通信协议。 Sailor Project功能说明 串口调试助手功能 支持传统的串口调试助手的基本收发功能&#xff0c;同时可以刷新大量的数据而不卡顿 支持保存接收的数据 支持最大200条可编辑…

cadence SPB17.4 S032 - Update Symbols失败的问题

文章目录 cadence SPB17.4 S032 - Update Symbols失败的问题概述笔记END cadence SPB17.4 S032 - Update Symbols失败的问题 概述 铺铜后, 进行DRC, 发现安装孔不太合适, 有DRC警告. 安装孔是一大孔, 上面打了一圈小孔. 这些小孔有警告, 说孔和孔之间不能干涉. 开始将这些DRC…

vue3+ts创建前端blog项目

vue3创建blog项目 cmd创建Manually select featuresChoose Vue versionUse class-style component syntax? (Y/n)Use Babel alongside TypeScript (required for modern mode, auto-detected polyfills, transpiling JSX)? (Y/n)Use history mode for router?Pick a CSS pre…

基于SpringBoot的科研工作量获奖项目管理平台设计与实现(源码+lw+部署文档+讲解等)

文章目录 前言具体实现截图论文参考详细视频演示为什么选择我自己的网站自己的小程序&#xff08;小蔡coding&#xff09;有保障的售后福利 代码参考源码获取 前言 &#x1f497;博主介绍&#xff1a;✌全网粉丝10W,CSDN特邀作者、博客专家、CSDN新星计划导师、全栈领域优质创作…

TinyWebServer学习笔记-MySQL数据库连接

为什么要用数据库连接池&#xff1f; 我们的网站允许用户注册&#xff0c;在没有池的情况下&#xff0c;假设只有一个人&#xff0c;那么流程就是&#xff0c;用户点击注册&#xff0c;通过socket将用户的账号和密码发送到服务器&#xff0c;然后就需要创建MySQL数据库连接&am…

C#制做一个 winform下的表情选择窗口

能力有限&#xff0c;别人可能都是通过其他方式实现的&#xff0c;我这里简单粗暴一些&#xff0c;直接通过点击按钮后弹出个新窗体来实现。 1、先在form1上增加一个toolstrip控件&#xff0c;再增加个toolstripbutton按钮&#xff0c;用来点击后弹出新窗体&#xff0c;如图&a…

【Linux】文件权限详解

&#x1f341; 博主 "开着拖拉机回家"带您 Go to New World.✨&#x1f341; &#x1f984; 个人主页——&#x1f390;开着拖拉机回家_Linux,Java基础学习,大数据运维-CSDN博客 &#x1f390;✨&#x1f341; &#x1fa81;&#x1f341; 希望本文能够给您带来一定的…

【C++】可变参数模板使用,在emplace中应用

&#x1f30f;博客主页&#xff1a; 主页 &#x1f516;系列专栏&#xff1a; C ❤️感谢大家点赞&#x1f44d;收藏⭐评论✍️ &#x1f60d;期待与大家一起进步&#xff01; 文章目录 一、可变参数模板1.参数包的展开方式1.递归方式展开2.逗号表达式展开参数包 二、empl…

王杰国庆作业day6

服务器 #include <stdio.h> #include <string.h> #include <stdlib.h> #include <my_head.h> #define PORT 2324 //端口号 #define IP "192.168.10.107" //本机IP int main(int argc, const char *argv[]) {sqlite3* d…

FPGA project : TFT_LCD

实验目标&#xff1a; 驱动TFT_LCD显示十色彩条。 重点掌握的知识&#xff1a; 1&#xff0c;液晶显示器&#xff0c;简称LCD(Liquid Crystal Display)&#xff0c;相对于上一代CRT显示器(阴极射线管显示器)&#xff0c;LCD显示器具有功耗低、体积小、承载的信息量大及不伤眼…