【Django】第二课 基于Django超市订单管理系统开发

news2024/11/20 1:23:27

概念

本文在上一文之上,针对管理员,经理,普通员工身份的用户操作用户管理模块功能。

功能实现

1.普通员工登录系统后,对于用户管理模块不具备操作其他用户信息的权限。因此当普通员工登录后,弹出对话框提示用户。

2.经理身份登录的用户,操作用户管理功能时,只能查看所有普通员工的用户信息,因此当经理点击用户管理按钮的时候,需要给服务器发送请求地址 yhgl/

在服务器的urls.py文件中定义接收该地址的代码

# 接收不同用户身份操作用户管理的地址
    path('yhgl/',views.yhgl),

 在views.py文件中定义针对经理身份的代码处理

# 创建方法,通过参数进行判断当前登录的用户身份
def yhgl(request):
    # 接收用户身份的参数
    type=request.GET["type"]
    global user
    if type =="1":
        # 管理员登录了
        # 从用户表中查询除了管理员自己以外的所有员工信息,发送到用户信息列表上显示
        # 查询用户表中用户角色不等于1的所有员工信息
        list1=User.objects.exclude(userRole=1).values()
        return render(request,"userList.html",{"uList":list1,"user":user[0]})
    elif type =="2":
        # 经理登录了
        # 从用户表中查询出所有的普通员工的信息,发送到用户信息列表页面上显示
        # 将查询的数据转换成字典
        userList=User.objects.filter(userRole=3).values()
        return render(request,"normalUserList.html",{"uList":userList,"user":user[0]})

当type参数为2时,说明当前登录的用户身份为经理,因此从数据库中查询出所有普通员工信息,并发送给指定的html页面上显示,其html代码如下

normalUserList.html
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>超市订单管理系统--用户信息列表</title>
</head>
<body>
	<div style="width: 1200px;height: 800px;margin: auto;">
		<div style="width: 100%;height: 160px;background-color:skyblue;">
			<div  style="width: 100%;height: 20px;">

				<div align="left" style="width: 20%;height: 100%;float: left;" >
					&nbsp;<a href="/login/?username={{ user.userName }}&password={{ user.userPassword }}" style="text-decoration: none;">返回首页</a>
				</div>

			<div align="right" style="width: 80%;height: 100%;float: right;">
				<a>欢迎,<span style="color: red;">{{user.userName}}</span></a>
				&nbsp;&nbsp;<a href="/" style="text-decoration: none;">注销</a>&nbsp;
			</div>

			</div>
			<div align="center" style="width: 100%;height: 140px;line-height: 140px;"><h1>超市订单管理系统</h1></div>
		</div>
		<div align="center" style="width: 100%;height: 640px;background-color: pink;">
			<table border="1" style="width: 80%;text-align: center;border-collapse: collapse;">
				<tr>
					<td>主键Id</td>
					<td>用户编码</td>
					<td>用户名称</td>
					<td>性别</td>
					<td>出生日期</td>
					<td>手机</td>
					<td>地址</td>
				</tr>
				{% for foo in uList %}
				    <tr>
					<td>{{ foo.id }}</td>
					<td>{{ foo.userCode }}</td>
					<td>{{ foo.userName }}</td>
                        {% if foo.gender == 1 %}
                            <td>女</td>
                        {% elif foo.gender == 2 %}
					        <td>男</td>
					    {% endif %}
					<td>{{ foo.birthday }}</td>
					<td>{{ foo.phone }}</td>
					<td>{{ foo.address }}</td>
					</tr>
				{% endfor %}
			</table>

		</div>
	</div>
</body>
</html>

其页面效果如下

 3.管理员具备较高的权限,对所有的经理和普通员工的信息进行查询,修改,添加和删除用户信息。这里使用的还是 yhgl/这个地址,只是发送的type参数值不同,在views.py文件中执行以下代码:

通过从数据库中查询出所有的经理和员工信息发送给userList.html页面展示

userList.html

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>超市订单管理系统--用户信息列表</title>
<style type="text/css">
	tr {
	height: 40px;
}
</style>
</head>
<body>

	<div style="width: 1200px;height: 800px;margin: auto;">
		<div style="width: 100%;height: 160px;background-color:skyblue;">
			<div  style="width: 100%;height: 20px;">

				<div align="left" style="width: 20%;height: 100%;float: left;" >
					&nbsp;<a href="/login/?username={{ user.userName }}&password={{ user.userPassword }}"
                             style="text-decoration: none;">返回首页</a>
				</div>

			<div align="right" style="width: 80%;height: 100%;float: right;">
				<a>欢迎,<span style="color: red;">{{user.userName}}</span></a>
				&nbsp;&nbsp;<a href="/" style="text-decoration: none;">注销</a>&nbsp;
			</div>

			</div>
			<div align="center" style="width: 100%;height: 140px;line-height: 140px;"><h1>超市订单管理系统</h1></div>
		</div>
		<div align="center" style="width: 100%;height: 640px;background-color: pink;">
			<div align="left" style="height: 40px;" >
				<a href="/addUser/" style="text-decoration: none;
				 text-align:center;  width: 50px;
				 height: 20px;
				 color: white;font-weight: bold;
				 margin-top:20px;margin-left:10px;
				 border-radius: 5px;">添加用户</a>
			</div>
			<table border="1" style="width: 90%;text-align: center;border-collapse: collapse;">
				<tr>
					<td>主键Id</td>
					<td>用户编码</td>
					<td>用户名称</td>
					<td>性别</td>
					<td>出生日期</td>
					<td>手机</td>
					<td>地址</td>
					<td>身份</td>
					<td>操作</td>
				</tr>
				{% for foo in uList %}
				    <tr>
					<td>{{ foo.id }}</td>
					<td>{{ foo.userCode }}</td>
					<td>{{ foo.userName }}</td>
                        {% if foo.gender == 1 %}
                            <td>女</td>
                        {% elif foo.gender == 2 %}
					        <td>男</td>
					    {% endif %}
					<td>{{ foo.birthday }}</td>
					<td>{{ foo.phone }}</td>
					<td>{{ foo.address }}</td>
                    {% if foo.userRole == 2 %}
                        <td>经理</td>
                     {% elif foo.userRole == 3 %}
                        <td>普通员工</td>
                    {% endif %}
                    <td><a href="/updateUser/?id={{ foo.id }}">
					<input type="button" value="修改" style="background-color: green;border: none;
					border-radius: 5px;color: white;" /></a>&nbsp;
					<a href="/delUser/?id={{ foo.id }}">
					<input type="button" value="删除" style="background-color: red;border: none;
					border-radius: 5px;color: white;"/></a></td>
					</tr>
				{% endfor %}
			</table>
			{% comment %}<!-- 分页页码导航栏 -->
			<br>
			<div align="center">
				<!-- 判断当前页是否存在上一页,不存在则不显示上一页的按钮 -->
				<%if(pi.getPrePage()>0){ %>
				<a href="yhgl.do?type=1&ym=<%=pi.getPrePage()%>"><input type="button" value="上一页"/></a>&nbsp;
				<%} %>
				<% for(int i:pi.getNavigatepageNums()){ %>
					<a href="yhgl.do?type=1&ym=<%=i%>"><%=i %></a>&nbsp;
				<%} %>
				<!-- 判断当前页是否存在下一页,不存在则不显示下一页的按钮 -->
				<% if(pi.getPageNum()<pi.getLastPage()){ %>
				<a href="yhgl.do?type=1&ym=<%=pi.getNextPage()%>"><input type="button" value="下一页"/></a>&nbsp;
				<%} %>
			</div>{% endcomment %}
		</div>
	</div>
</body>
</html>

 其界面效果如下:

 管理员添加新用户,点击添加用户发送 addUser/ 地址请求给服务器,urls.py文件中定义该地址进行接收请求

urls.py

# 管理员添加用户的地址
    path('addUser/',views.addUser),

views.py

# 创建方法,用于跳转至添加用户的html页面
def addUser(request):
    return render(request,"addUser.html",{"user":user[0]})

addUser.html

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>超市订单管理系统--添加用户</title>
</head>
<body>
	<div style="width: 1200px;height: 800px;margin: auto;">
		<div style="width: 100%;height: 160px;background-color:skyblue;">
			<div  style="width: 100%;height: 20px;">

				<div align="left" style="width: 20%;height: 100%;float: left;" >
					&nbsp;<a href="/login/?username={{ user.userName }}&password={{ user.userPassword }}" style="text-decoration: none;">返回首页</a>
				</div>

			<div align="right" style="width: 80%;height: 100%;float: right;">
				<a>欢迎,<span style="color: red;">{{user.userName}}</span></a>
				&nbsp;&nbsp;<a href="/" style="text-decoration: none;">注销</a>&nbsp;
			</div>

			</div>
			<div align="center" style="width: 100%;height: 140px;line-height: 140px;"><h1>超市订单管理系统</h1></div>
		</div>
		<div align="center" style="width: 100%;height: 640px;background-color: pink;">
			<form action="/addUserInfo/" method="post">
                {% csrf_token %}
				<div style="padding: 5px 0px">
				<label for="userCode">用户名:</label>&nbsp;
				<input id="userCode" name="userCode" type="text" placeholder="请输入用户名" />
				</div>
				<div style="padding: 5px 0px">
				<label for="userName">姓名:</label>&nbsp;
				<input id="userName" name="userName" type="text" placeholder="请输入用户名" />
				</div>
				<div style="padding: 5px 0px">
				<label >性别:</label>&nbsp;
				<input type="radio" name="gender" checked="checked" value="2">男&nbsp;
				<input type="radio" name="gender" value="1">女&nbsp;
				</div>
				<div style="padding: 5px 0px">
				<label >出生年月:</label>&nbsp;
				<input type="date" name="birthday" >
				</div>
				<div style="padding: 5px 0px">
				<label >手机号:</label>&nbsp;
				<input type="number" name="phone" placeholder="请输入手机号" >
				</div>
				<div style="padding: 5px 0px">
				<label >家庭地址:</label>&nbsp;
				<input type="text" name="address" placeholder="请输入家庭地址" >
				</div>
				<div style="padding: 5px 0px">
				<label >身份:</label>&nbsp;
				<input type="radio" name="userRole" checked="checked" value="3">普通员工&nbsp;
				<input type="radio" name="userRole"  value="2">经理
				</div>
				<div style="padding: 5px 0px">
					<input type="submit"
					  value="创建"
					 style="width: 120px;background-color: green;
					 border: none;padding: 5px;border-radius: 5px;
					 color: white;"/>
				</div>
			</form>


		</div>
	</div>
</body>
</html>

界面效果如下

 

用管理员填写完新用户信息后,通过表单的提交 addUserInfo/ 发送给服务器接收

urls.py

# 接收管理员添加新用户的地址
    path('addUserInfo/',views.addUserInfo),

views.py

# 创建方法,用于接收管理员添加新用户的数据信息
def addUserInfo(request):
    # 用户名
    userCode=request.POST["userCode"]
    # 姓名
    userName=request.POST["userName"]
    # 性别
    gender=request.POST["gender"]
    # 出生年月
    birthday=request.POST["birthday"]
    # 手机号
    phone=request.POST["phone"]
    # 家庭地址
    address=request.POST["address"]
    # 用户身份
    userRole=request.POST["userRole"]
    # 默认密码
    userPassword="0000000"
    global user
    # 当前系统管理员的id
    createdBy=user[0].id
    # 获得当前实时时间 year  month day  hour minute second
    creationDate=time.strftime("%Y-%m-%d %H:%M:%S",time.localtime())
    # 设置修改功能的id为0
    modifyBy=0
    # z设置修改的时间为空
    modifyDate=""
    # 将管理员创建的新用户的数据添加至数据库的用户表
    User.objects.create(userRole=userRole,userCode=userCode,userName=userName,
                        userPassword=userPassword,phone=phone,address=address,
                        gender=gender,birthday=birthday,createdBy=createdBy,
                        creationDate=creationDate,modifyBy=modifyBy,modifyDate=modifyDate)
    return HttpResponseRedirect("/yhgl/?type=1")

添加成功后,会刷新管理员操作的用户管理列表页面。

当管理员选择某一个用户信息进行修改的时候,将该用户信息的主键id发送给服务器

因此urls.py文件中定义该地址接收请求和id参数

 # 接收管理员修改用户的信息的获取的地址
    path('updateUser/',views.updateUser),

 将从数据库中查询到该要修改的用户信息,并发送到修改页面上进行显示

# 创建方法,接收管理要修改的用户的id,根据id查询用户表中对应的用户信息
def updateUser(request):
    id=request.GET["id"]
    # 根据id查询的是用户对象
    u=User.objects.get(id=id)
    return render(request,"updateUser.html",{"u":u,"user":user[0]})

修改页面代码如下

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>超市订单管理系统--修改用户</title>
</head>
<body>
	<div style="width: 1200px;height: 800px;margin: auto;">
		<div style="width: 100%;height: 160px;background-color:skyblue;">
			<div  style="width: 100%;height: 20px;">

				<div align="left" style="width: 20%;height: 100%;float: left;" >
					&nbsp;<a href="/login/?username={{ user.userName }}&password={{ user.userPassword }}" style="text-decoration: none;">返回首页</a>
				</div>

			<div align="right" style="width: 80%;height: 100%;float: right;">
				<a>欢迎,<span style="color: red;">{{user.userName}}</span></a>
				&nbsp;&nbsp;<a href="/" style="text-decoration: none;">注销</a>&nbsp;
			</div>

			</div>
			<div align="center" style="width: 100%;height: 140px;line-height: 140px;"><h1>超市订单管理系统</h1></div>
		</div>
		<div align="center" style="width: 100%;height: 640px;background-color: pink;">
			<form action="/updateUserInfo/" method="post">
                {% csrf_token %}
				<!-- 定义一个隐藏的文本框,用于临时存储要修改的这个用户的id -->
				<input type="hidden" name="id" value="{{ u.id }}">
				<div style="padding: 5px 0px">
				<label for="userCode">用户名:</label>&nbsp;
				<input id="userCode" name="userCode" type="text" value="{{ u.userCode }}" placeholder="请输入用户名" />
				</div>
				<div style="padding: 5px 0px">
				<label for="userName">姓名:</label>&nbsp;
				<input id="userName" name="userName" type="text" value="{{ u.userName }}" placeholder="请输入用户名" />
				</div>
				<div style="padding: 5px 0px">
				<label >性别:</label>&nbsp;
                    {% if u.gender == 2 %}
                        <input type="radio" name="gender" checked="checked" value="2">男&nbsp;
				        <input type="radio" name="gender" value="1">女&nbsp;
                    {% else %}
                        <input type="radio" name="gender"  value="2">男&nbsp;
				        <input type="radio" checked="checked" name="gender" value="1">女&nbsp;
                    {% endif %}
				</div>
				<div style="padding: 5px 0px">
				<label >出生年月:</label>&nbsp;
				<input type="date" value="{{ u.birthday }}" name="birthday" >
				</div>
				<div style="padding: 5px 0px">
				<label >手机号:</label>&nbsp;
				<input type="number" name="phone" value="{{ u.phone }}" placeholder="请输入手机号" >
				</div>
				<div style="padding: 5px 0px">
				<label >家庭地址:</label>&nbsp;
				<input type="text" name="address" value="{{ u.address }}" placeholder="请输入家庭地址" >
				</div>
				<div style="padding: 5px 0px">
				<label >身份:</label>&nbsp;
				{% if u.userRole == 3 %}
				    <input type="radio" name="userRole" checked="checked" value="3">普通员工&nbsp;
				    <input type="radio" name="userRole"  value="2">经理&nbsp;
                {% elif u.userRole == 2 %}
                    <input type="radio" name="userRole"  value="3">普通员工&nbsp;
				    <input type="radio" name="userRole" checked="checked" value="2">经理&nbsp;
				{% endif %}
				</div>
				<div style="padding: 5px 0px">
					<input type="submit"
					  value="修改"
					 style="width: 120px;background-color: green;
					 border: none;padding: 5px;border-radius: 5px;
					 color: white;"/>
				</div>
			</form>


		</div>
	</div>
</body>
</html>

其界面效果如下

当管理员修改用户信息后,将更新后的用户信息发送给服务器,地址为 updateUserInfo/

 同时urls.py文件中要定义接收该地址

# 接收管理员更新用户的所有信息
    path('updateUserInfo/',views.updateUserInfo),

views.py

# 创建方法,接收管理员更新用户的信息
def updateUserInfo(request):
    # id
    id=request.POST["id"]
    # 用户名
    userCode = request.POST["userCode"]
    # 姓名
    userName = request.POST["userName"]
    # 性别
    gender = request.POST["gender"]
    # 出生年月
    birthday = request.POST["birthday"]
    # 手机号
    phone = request.POST["phone"]
    # 家庭地址
    address = request.POST["address"]
    # 用户身份
    userRole = request.POST["userRole"]
    global user
    # 设置修改功能的id
    modifyBy = user[0].id
    # 设置修改的时间
    modifyDate = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())
    # 根据id将要修改的用户的旧数据查询出来
    u=User.objects.filter(id=id)
    u.update(userCode=userCode,userName=userName,gender=gender,
             birthday=birthday,phone=phone,address=address,
             userRole=userRole,modifyBy=modifyBy,modifyDate=modifyDate)
    return HttpResponseRedirect("/yhgl/?type=1")

修改成功后,刷新用户列表页面,即可看到更新后的数据

当管理员要删除已离职或者是无效的用户信息时,选择某一个用户信息点击删除,将该用户的主键id通过

 该地址发送请求给服务器,服务器需要定义地址接收请求和参数id

# 接收管理员删除用户的地址
    path('delUser/',views.delUser),
# 创建方法,接收管理员删除用户的指定id
def delUser(request):
    id=request.GET["id"]
    # 根据id从数据库的用户表中删除对应的用户信息
    u=User.objects.filter(id=id)
    u.delete()
    return HttpResponseRedirect("/yhgl/?type=1")

删除成功后,即刷新用户列表页面

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

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

相关文章

【Linux】Linux编辑器---vim的使用

等老了就养只柴犬&#xff0c;相依为命。 文章目录一、命令模式1.光标定位操作2.文本复制、粘贴、剪切、撤销3.文本编辑二、插入模式三、底行模式四、vim配置原理五、解决普通用户无法使用sudo提权一、命令模式 刚打开vim时&#xff0c;默认就是命令模式&#xff0c;命令模式的…

C++STL之string的使用

对于C语言中的字符串&#xff0c;我们只能使用char类型数组保存&#xff0c;并且是以\0结尾的. 操作起来非常不方便而且底层空间需要用户自己访问&#xff0c;非常造成容易越界访问. 这个时候&#xff0c;C的STL中的string类就很好解决了这些. 目录 string的使用 1.string…

mqtt的使用与二次封装

前提&#xff1a;先安装Mosquitto并启动服务&#xff0c;可使用mqttx进行接收发送的测试。 Mosquitto以配置启动命令 mosquitto -c mosquitto.conf -v原文链接&#xff1a;mqtt的使用 本文为测试使用固无账号密码&#xff0c;可在原文查看 封装后实现效果&#xff0c;加入一个…

LeetCode题解 16(15,22) 三数之和,括号生成

文章目录三数之和(15)代码解答:括号生成(22)代码解答:三数之和(15) 该题是让从1个数组中找到和为0的不重复的三个数,这次我们使用排序和指针的方法来解决 先将该数组从小到大进行排序 Arrays.sort(nums);我们需要遍历一遍该数组,同时我们还要去重的操作(例如[-1,-1,-1,2],这里面…

helm本地debug template渲染小记

前提条件 1&#xff0c; 安装helm 2&#xff0c;要能连接的k8s 3&#xff0c;本地有完成charts文件目录 具体步骤 本文因为是在项目流程中helm渲染出的deployment语法报错或者最终生成的不符合预期&#xff0c;因此本地使用helm命令进行debug验证测试。 我们先看一下基本的c…

怎么把word里面的彩色图转化为灰度图,直接在word里面操作,无需转其他软件,超简单!(位图和矢量图都可以)

怎么把word里面的彩色图转化为灰度图&#xff0c;直接在word里面操作&#xff0c;无需转其他软件&#xff0c;超简单&#xff01;&#xff08;位图和矢量图都可以&#xff09; Microsoft Office Word是微软公司的一个文字处理器应用程序。它最初是由Richard Brodie为了运行DOS…

深入理解自编码器(用变分自编码器生成图像)

文章目录自编码器欠完备自编码器正则自编码器稀疏自编码器去噪自编码器收缩自编码器变分自编码器References内容总结自花书《Deep Learning》以及《Python 深度学习》。 自编码器 自编码器&#xff08;autoencoder&#xff09;是神经网络的一种&#xff0c;经过训练后能尝试将…

机器学习经典算法:决策树(2)

1. 概述 决策树&#xff08;Decision Tree&#xff09;是有监督学习中的一种算法&#xff0c;并且是一种基本的分类与回归的方法。决策树有两种&#xff1a;分类树和回归树。 决策树是用于分类和回归的工具&#xff0c;它将数据特征值拆分为决策节点处的分支&#xff08;例如&a…

六、Kubernetes核心技术Pod详解、实例

1、概述 Pod 是 k8s 系统中可以创建和管理的最小单元&#xff0c;是资源对象模型中由用户创建或部署的最 小资源对象模型&#xff0c;也是在 k8s 上运行容器化应用的资源对象&#xff0c;其他的资源对象都是用来支 撑或者扩展 Pod 对象功能的&#xff0c;比如控制器对象是用来管…

某大型政务网站的优化咨询案例(视频点播VOD+GZIP压缩+静态文件CDN+Redis缓存+全文索引)

2022年圣诞节到来啦&#xff0c;很高兴这次我们又能一起度过~ 这次分享关于一个对某大型政务网站的优化咨询的案例&#xff0c;发生在今年的下半年&#xff0c;已过去一段时间&#xff0c;并取得了良好的成果&#xff01;* 项目背景 某大型政务网站准备上线&#xff0c;需要…

08-Golang中的运算符

[TOC](Golang中的运算符运算符介绍算数运算符基本介绍细节说明关系运算符(比较运算符&#xff09;基本介绍细节说明逻辑运算符基本介绍细节说明赋值运算符基本介绍细节说明运算符优先级运算符介绍 运算符是一种特殊的符号&#xff0c;用来表示数据的运算、赋值和比较 1.算数运…

Vue事件处理的基本使用

前言 事件处理在vue中也是非常重要的一项技术&#xff0c;它类似于js的事件处理&#xff0c;但是也有不同&#xff0c;下面就简单介绍一下在vue中如何进行事件使用以及一些要点 1 事件基本使用 在这里我们使用单击事件为例&#xff0c;简单讲讲在vue中单击事件的编写以及细节…

最近面试遇到一个算法题,简单写一点。

第⼀题&#xff08;必答&#xff09; 请针对有重复数字的数组设计⼀个快排算法&#xff0c;⽐如&#xff1a;[34, 34, 89, 1, 1, 20, 12]&#xff0c;排序后结果为 [89,34,34,20,12,1,1] 第⼆题&#xff08;必答&#xff09; 请利⽤Redis 实现⼀个通⽤分布式锁&#xff0c;并…

技术进步、研发计划启动及政策支持 共促我国合成生物学市场容量加速扩张

合成生物学是对生物体进行有目标的设计、改造乃至重新合成&#xff0c;这一名词最早出现于DNA重组技术发展的上世纪70年代。合成生物学汇聚并融合了生命科学、工程学和信息科学等诸多学科&#xff0c;在天然产物合成、化学工业、生物能源、生物医药等诸多领域有广泛的应用前景。…

【Animejs】——Anime.js照片墙案例实现

目录 一、实现的效果&#xff1a; 二、实现js的具体步骤 1、需要实现的逻辑梳理 2、切换风格的逻辑 三、完整代码&#xff1a; 用js编写使用animejs实现图片复杂的切换效果 一、实现的效果&#xff1a; 点击——> <——箭头&#xff0c;实现不同动画效果的炫酷切换 …

【小5聊】C++ 输入矩阵数字,然后回环方式输出

C 输入矩阵数字&#xff0c;然后回环方式输出 1、题目内容 输入 第一行是两个m和n&#xff0c;分别代表矩阵的行数和列数。 第二行开始输入对应矩阵 输出 第二行回转输出。 相邻的两个整数之间用一个空格分开&#xff0c;行尾无空格 样例输入 5 6 4 8 9 4 5 6 1 2 5 6…

控制算法-PID算法总结-从公式原理到参数整定解析

目录 一、控制系统 1.1控制系统的分类 1.2 性能指标 二、PID算法的起源及特点 三、PID应用 四、PID公式原理 五、PID源码 六、PID整定方法 6.1 经验法 6.2 衰减曲线法 6.3 响应曲线法 参考文献&#xff1a; 一、控制系统 1.1控制系统的分类 分为开环控制、闭环控制和…

Java 8 Stream 从入门到进阶——像SQL一样玩转集合

0.阅读完本文你将会 了解Stream的定义和它的特征了解Stream的基础和高阶用法 1. 前言 在我们日常使用Java的过程中&#xff0c;免不了要和集合打交道。对于集合的各种操作有点类似于SQL——增删改查以及聚合操作&#xff0c;但是其方便性却不如SQL。 所以有没有这样一种方式…

【每日一题Day66】LC1754构造字典序最大的合并字符串 | 贪心 双指针模拟

构造字典序最大的合并字符串【LC1754】 You are given two strings word1 and word2. You want to construct a string merge in the following way: while either word1 or word2 are non-empty, choose one of the following options: If word1 is non-empty, append the fir…

10.2、Django入门--前台管理

文章目录1、URLconf 路由管理展示首页2、视图函数处理业务逻辑展示书籍的详细页3、模板管理实现好看的HTML页面3.1 模板引擎配置3.2 模板语法&#xff1a;变量3.3 模板语法: 常用标签3.4 主页与详情页前端HTML设计常用的HTML编写基础标题标签列表标签图片标签链接标签表格标签表…