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

news2024/11/19 1:49:14

概念

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

功能实现

供应商管理模块属于业务功能,这里管理员不具备操作权限,而经理具备与供应商之间谈合作的实际需要,因此经理具备对供应商的添加,修改,删除和查询,普通员工只能根据需要查询供应商信息,而不具备对供应商信息更改,删除和添加的权限。

管理员操作供应商管理模块

当管理员点击供应商管理模块时,超出管理员的权限范围,因此弹出提示对话框提示管理员该功能不在其权限范围内

普通员工操作供应商管理模块

普通员工因业务需要,可以查看与超市有合作关系的所有供应商信息。给服务器发送地址请求  /gysgl/?type=3 ,服务器中需要接收该请求和其type参数

urls.py

 # 接收不同身份的用户操作供应商管理的功能地址
    path('gysgl/',views.gysgl),

 views.py

# 创建方法,根据当前登录的用户的身份,分配所操作的功能
def gysgl(request):
    # 接收当前登录的用户的身份
    type=request.GET["type"]
    # 先从数据库的供应商表中把所有供应商信息查询出来
    pList=Provider.objects.all().values()
    if type == "3":
        # 说明当前登录的用户是普通员工,只能查看供应商信息
        return render(request,"pProviderList.html",{"pList":pList,"user":user[0]})
    elif type == "2":
        # 说明当前登录的用户是经理,经理可以具备查看供应商,
        # 修改供应商,添加供应商,删除供应商的权利
        return render(request, "jProviderList.html", {"pList": pList, "user": user[0]})

当普通员工操作该功能时,服务器需要从数据库中将所有供应商信息查询出来,显示在html页面上

其html代码如下

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>超市订单管理系统--供应商列表</title>
</head>
<body>
	<div style="width: 1680px;height: 1000px;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: 840px;background-color: pink;overflow: scroll;">
			<table border="1" style="width: 90%;text-align: center;height: 800px;border-collapse: collapse;">
				<tr>
					<td>主键Id</td>
					<td>供应商编码</td>
					<td>供应商名称</td>
					<td>供应商详细描述</td>
					<td>供应商联系人</td>
					<td>联系电话</td>
					<td>地址</td>
					<td>传真</td>
				</tr>
				{% for foo in pList %}
				    <tr>
					<td >{{ foo.id }}</td>
					<td>{{ foo.proCode }}</td>
					<td>{{ foo.proName }}</td>
					<td ><p style="text-overflow: ellipsis;
					overflow: hidden;white-space: nowrap;
					width: 260px;">{{ foo.proDesc }}</p>
					</td>
					<td>{{ foo.proContact }}</td>
					<td>{{ foo.proPhone }}</td>
					<td>{{ foo.proAddress }}</td>
					<td>{{ foo.proFax }}</td>
				</tr>
				{% endfor %}


			</table>

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

其界面效果如下

经理操作供应商管理模块

经理的工作就是需要和各种符合超市要求的供应商进行签订合作,取消合作以及修改合作信息等等,因此经理具备操作供应商管理模块的添加,修改,删除和查询权限。当经理点击供应商管理模块时,发送地址请求 /gysgl/?type=2,服务器定义地址接收请求

这时需要将信息发送给 jProviderList.html页面

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>超市订单管理系统--供应商列表</title>
</head>
<body>
	<div style="width: 1680px;height: 1000px;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: 840px;background-color: pink;overflow: scroll;">
			<div align="left" style="height: 40px;" >
				<a href="/addProvider/" 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;height: 800px;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 pList %}
				    <tr>
					<td >{{ foo.id }}</td>
					<td>{{ foo.proCode }}</td>
					<td>{{ foo.proName }}</td>
					<td ><p style="text-overflow: ellipsis;
					overflow: hidden;white-space: nowrap;
					width: 260px;">{{ foo.proDesc }}</p>
					</td>
					<td>{{ foo.proContact }}</td>
					<td>{{ foo.proPhone }}</td>
					<td>{{ foo.proAddress }}</td>
					<td>{{ foo.proFax }}</td>
                    <td>
					<a href="/getProvider/?id={{ foo.id }}"><input type="button" value="修改" style="background-color: green;border: none;border-radius: 5px;color: white;"></a>
					<a href="/deleteProvider/?id={{ foo.id }}"><input type="button" value="删除" style="background-color: red;border: none;border-radius: 5px;color: white;"></a>
					</td>
				</tr>
				{% endfor %}
			</table>

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

 其界面效果图如下

经理需要添加新的供应商时,点击添加供应商超链接,进入添加供应商页面

# 接收经理点击添加供应商跳转页面的地址
    path('addProvider/',views.addProvider),
# 创建方法,跳转打开添加供应商的html页面
def addProvider(request):
    return render(request,"addProvider.html",{"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="/toAddProvider/" method="post">
                {% csrf_token %}
				<div style="padding: 5px 0px">
				<label for="proCode">供应商编码:</label>&nbsp;
				<input id="proCode" name="proCode" type="text" placeholder="请输入供应商编码" />
				</div>
				<div style="padding: 5px 0px">
				<label for="proName">供应商名称:</label>&nbsp;
				<input id="proName" name="proName" type="text" placeholder="请输入供应商名称" />
				</div>
				<div style="padding: 5px 0px">
				<label >供应商详细描述:</label><br/>
				<textarea rows="5" cols="40" name="proDesc" placeholder="请输入主营产品内容"></textarea>
				</div>
				<div style="padding: 5px 0px">
				<label >供应商联系人:</label>&nbsp;
				<input type="text" name="proContact" placeholder="请输入联系人姓名">
				</div>
				<div style="padding: 5px 0px">
				<label >联系电话:</label>&nbsp;
				<input type="number" name="proPhone" placeholder="请输入手机号" >
				</div>
				<div style="padding: 5px 0px">
				<label >地址:</label>&nbsp;
				<input type="text" name="proAddress" placeholder="请输入地址" >
				</div>
				<div style="padding: 5px 0px">
				<label >传真:</label>&nbsp;
				<input type="text" name="proFax" placeholder="请输入传真号码" >
				</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>

其界面效果图如下

当经理输入新供应商信息之后,将数据发送给服务器

# 接收经理添加新的供应商的数据地址
    path('toAddProvider/',views.toAddProvider),
# 创建方法,接收新供应商信息
def toAddProvider(request):
    # 供应商编号
    proCode=request.POST["proCode"]
    # 供应商名称
    proName=request.POST["proName"]
    # 供应商主营业务
    proDesc=request.POST["proDesc"]
    # 供应商联系人
    proContact=request.POST["proContact"]
    # 联系人电话
    proPhone=request.POST["proPhone"]
    # 供应商地址
    proAddress=request.POST["proAddress"]
    # 传真
    proFax=request.POST["proFax"]
    # 获得当前登录系统的经理的id
    createdBy=user[0].id
    # 获得经理添加供应商的实时时间
    creationDate=time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())
    # 不涉及修改功能,修改的经理的id默认为0
    modifyBy=0
    modifyDate=""
    # 将新供应商的数据信息添加至供应商表
    Provider.objects.create(proCode=proCode,proName=proName,proDesc=proDesc,
                            proContact=proContact,proPhone=proPhone,proAddress=proAddress,
                            proFax=proFax,createdBy=createdBy,creationDate=creationDate,
                            modifyBy=modifyBy,modifyDate=modifyDate)
    return HttpResponseRedirect("/gysgl/?type=2")

数据如果添加成功,则刷新供应商列表页面

当经理修改供应商信息需要将该供应商信息主键id发送给服务器

# 接收经理需要修改的供应商id的地址
    path('getProvider/',views.getProvider),
# 创建方法,根据经理要修改的供应商id查询供应商表,将该供应商信息显示在修改页面上
def getProvider(request):
    id=request.GET["id"]
    # 通过供应商id查询该供应商的完整信息
    provider=Provider.objects.get(id=id)
    return render(request,"updateProvider.html",{"provider":provider,"user":user[0]})

修改供应商页面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="/updateProvider/" method="post">
                {% csrf_token %}
				<!-- 完成修改功能的时候,需要将主键id隐藏存储在表单页面上
					因为在完成修改的sql语句的同时,是需要条件,只有主键id是不允许被修改的,
					那么能作为条件去修改数据库表中的数据只有主键id
				 -->
				<input type="hidden" name="id" value="{{ provider.id }}">
				<div style="padding: 5px 0px">
				<label for="proCode">供应商编码:</label>&nbsp;
				<input id="proCode" name="proCode" value="{{ provider.proCode }}" type="text" placeholder="请输入供应商编码" />
				</div>
				<div style="padding: 5px 0px">
				<label for="proName">供应商名称:</label>&nbsp;
				<input id="proName" name="proName" value="{{ provider.proName }}" type="text" placeholder="请输入供应商名称" />
				</div>
				<div style="padding: 5px 0px">
				<label >供应商详细描述:</label><br/>
				<textarea rows="5" cols="40" name="proDesc"  placeholder="请输入主营产品内容">{{ provider.proDesc }}</textarea>
				</div>
				<div style="padding: 5px 0px">
				<label >供应商联系人:</label>&nbsp;
				<input type="text" name="proContact" value="{{ provider.proContact }}" placeholder="请输入联系人姓名">
				</div>
				<div style="padding: 5px 0px">
				<label >联系电话:</label>&nbsp;
				<input type="number" name="proPhone" value="{{ provider.proPhone }}" placeholder="请输入手机号" >
				</div>
				<div style="padding: 5px 0px">
				<label >地址:</label>&nbsp;
				<input type="text" name="proAddress" value="{{ provider.proAddress }}" placeholder="请输入地址" >
				</div>
				<div style="padding: 5px 0px">
				<label >传真:</label>&nbsp;
				<input type="text" name="proFax" value="{{ provider.proFax }}" placeholder="请输入传真号码" >
				</div>
				<div style="padding: 5px 0px">
					<input type="submit"
					  value="修改供应商信息"
					 style="background-color: green;
					 border: none;padding: 5px;border-radius: 5px;
					 color: white;"/>
				</div>
			</form>


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

其界面效果如下

当经理更新供应商信息后,将数据发送给服务器

# 接收经理更新供应商的所有信息的地址
    path('updateProvider/',views.updateProvider),

 

# 创建方法,接收更新的供应商信息
def updateProvider(request):
    # 主键id
    id=request.POST["id"]
    # 供应商编号
    proCode = request.POST["proCode"]
    # 供应商名称
    proName = request.POST["proName"]
    # 供应商主营业务
    proDesc = request.POST["proDesc"]
    # 供应商联系人
    proContact = request.POST["proContact"]
    # 联系人电话
    proPhone = request.POST["proPhone"]
    # 供应商地址
    proAddress = request.POST["proAddress"]
    # 传真
    proFax = request.POST["proFax"]
    # 标注哪个经理修改了这个供应商信息
    modifyBy=user[0].id
    # 获得修改供应商的实时时间
    modifyDate=time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())
    # 根据供应商id从数据库中查询出旧供应商数据
    provider=Provider.objects.filter(id=id)
    # 将新数据替换旧数据
    provider.update(proCode=proCode,proName=proName,proDesc=proDesc,
                            proContact=proContact,proPhone=proPhone,proAddress=proAddress,
                            proFax=proFax,modifyBy=modifyBy,modifyDate=modifyDate)
    return HttpResponseRedirect("/gysgl/?type=2")

数据修改成功后,刷新供应商列表页面

经理还可以删除无效的供应商

# 接收经理删除指定供应商的地址
    path('deleteProvider/',views.deleteProvider),
# 创建方法,根据供应商id从数据库中删除指定的供应商信息
def deleteProvider(request):
    id=request.GET["id"]
    # 根据id查询出要删除的供应商信息
    provider=Provider.objects.filter(id=id)
    # 将该供应商删除
    provider.delete()
    # 刷新列表页面
    return HttpResponseRedirect("/gysgl/?type=2")

删除后刷新列表页面

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

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

相关文章

Linux | 进程理解,fork | 进程地址空间

文章目录冯诺依曼体系结构的理解为什么要有内存的存在&#xff1f;操作系统的管理进程的理解系统调用接口进程的查看fork进程状态Linux进程具体的状态孤儿进程总结进程优先级怎样修改优先级&#xff1f;进程其他概念进程抢占进程地址空间利用代码验证地址区域验证堆区和栈区的增…

python3GUI--音乐播放器(精简版)By:PyQt5(附下载地址)

文章目录一&#xff0e;前言二&#xff0e;预览1.主界面2.歌单页3.歌词页4.播放列表5.mini6.设置三&#xff0e;心得1.解耦2.体验优化3.歌词显示四&#xff0e;总结一&#xff0e;前言 传送门&#xff1a; 1.python3GUI–打造一款音乐播放器By:PyQt5&#xff08;附下载地址&am…

LD_PRELOAD劫持

在前面UUCTF的uploadinject题&#xff0c;遇到了 LD_PRELOAD劫持&#xff0c;之前没遇见过&#xff0c;刚好借此机会学一学。不能小瞧这个变量&#xff0c;它甚至可以弹shell&#xff0c;绕过disable_functions&#xff0c;非常危险。下面来介绍一下这个变量&#xff0c;以及怎…

XDocReport使用入门

XDocReport 简介 XDocReport是GitHub上根据麻省理工学院许可证开源的Wrod导出框架。XDocReport可以根据ODT、Doc、Docx文档模板通过模板引擎语法&#xff08;Freemarker、Velocity&#xff09;转换为另外一种格式文档&#xff08;Doc、Docx、XHTML、PDF&#xff09;。 XDocR…

防沉迷管理系统

开发工具(eclipse/idea/vscode等)&#xff1a; 数据库(sqlite/mysql/sqlserver等)&#xff1a; 功能模块(请用文字描述&#xff0c;至少200字)&#xff1a; 1、用户模块 1.1注册&#xff1a;用户通过注册生产账号&#xff0c;并在数据库存储数据 1.2登录&#xff1a;用户登录后…

k8s学习-CKA真题-k8s升级(kubeadm、kubelet、kubectl等)

目录题目解析命令准备工作升级组件升级kubectl、kubelet收尾结果killer 模拟环境题目解析解题参考题目 解析 结合博主当前环境&#xff0c;调整后题目为&#xff1a; 现有的 Kubernetes 集权正在运行的版本是 1.23.6&#xff0c;仅将主节点上的所有 kubernetes 控制面板和组件…

【语音处理】基于加权压力匹配方法(WPMM)的声音系统研究(Matlab代码实现)

&#x1f468;‍&#x1f393;个人主页&#xff1a;研学社的博客 &#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜…

【小程序】案例 - 本地生活(列表页面)

1. 演示页面效果以及主要功能 页面导航并传参 上拉触底时加载下一页数据 下拉刷新列表数据 2. 列表页面的 API 接口 以分页的形式&#xff0c;加载指定分类下商铺列表的数据&#xff1a; 接口地址 https://www.escook.cn/categories/:cate_id/shops URL 地址中的 :cate…

博泰应宜伦:智能汽车上攻时刻,需要“国家级”平台登场

作者 | 张祥威 编辑 | 王博汽车智能化转型的道路上&#xff0c;有个问题可能并非杞人忧天&#xff0c;而是值得整个行业警醒的。那就是&#xff1a; 中国的智能汽车发展&#xff0c;是否会被国外“卡脖子”&#xff1f; 卡脖子的担忧&#xff0c;其实也可以理解为&#xff0c;中…

【Linux】shell及其运行原理

目录1.什么是shell2.shell的功能3.shell的感性理解4.为什么不安装图形化界面1.什么是shell shell &#xff1a; 操作系统内核的外壳 通常来讲&#xff0c;计算机硬件是由运算器、控制器、存储器、输入/输出设备等硬件共同组成的&#xff0c;而让各种硬件设备各司其职且能协同运…

【基础强训】day3

一、选择题 &#x1f4a6;第1题&#xff1a; 以下程序的输出结果是&#xff08;&#xff09; #include <stdio.h> main() { char a[10] {1, 2, 3, 4, 5, 6, 7, 8, 9, 0}, *p; int i; i 8; p a i; printf("%s\n", p - 3); } A 6 B 6789 C 6 D 789 B 先定义…

阳了之后,python实用工具之:疫情信息快速查看

嗨害大家好鸭&#xff01;我是小熊猫&#xff01;&#xff08;阳了个阳版&#xff09; &#xff08;先给大家消消毒&#xff09; 不好意思&#xff0c;很久没给大家更新了… 主要是小熊猫我不小心阳了… 大家要多注意自己的身体健康 多喝点热水 这个真的是个好东西 在家里稍…

深度学习—00入门 神经网络 pytorch

1、深度学习简介 深度学习是机器学习的一个分支&#xff0c;简单来说就是通过人工神经网络&#xff0c;强行在业务的 输入 和 输出 之间&#xff0c;暴力耦合一个出一个数学模型。 1.1 深度学习特点 1、由于是暴力耦合出来的模型&#xff0c;自然模型可解释性很差&#xff0c…

STM32 cubeMX配置OLED

文章目录前言一、OLED的接线二、cubeMX的配置三、OLED的驱动代码四、OLED的使用总结前言 本篇文章主要介绍OLED的操作和使用。 一、OLED的接线 OLED一共有四根线这里我使用的是IIC的OLED显示屏。 VCC----3.3V或者5V GND-----GND SDA-----PB7 SCL-----PB6 二、cubeMX的配置 …

TFT-LCD屏幕触摸校准

TFT-LCD屏幕触摸校准 触摸屏幕分类 1.电阻屏 电阻屏的主要部分是一块与显示器表面配合非常好的电阻薄膜屏&#xff0c;这是一种多层的复合薄膜&#xff0c;由一层玻璃或有机玻璃作为基层&#xff0c;表面涂有一层秀明的导电层&#xff0c;上面再盖有一层外表硬化处理、光滑防…

通达信量化接口需要被程序化执行吗?

其实通达信量化接口其实是量化交易模型的需要被执行的一种方式&#xff0c;但如果你交易者的策略模型采用比较中低频的交易执行方式&#xff0c;比如每天只交易一次&#xff0c;甚至每周或每月才轮动一次。那么小编认为通达信量化接口建议是否程序化执行也是一个非常重要的指标…

UI自动化测试-selenium元素定位

在使用Selenium和WebDriver进行UI自动化测试时&#xff0c;我们首先需要对元素定位&#xff0c;那么如何来定位元素呢&#xff1f; HTML 在进行元素定位之前&#xff0c;我们要对html代码有所了解。 <div classs_form><div classs_form_wrapper><div idlg>…

菜鸟程序员,被无良HR欺骗,因祸得福,竟“意外”拿下美团offer

前因后果 先讲述一下自己这次被无良HR欺骗坑惨的经历吧&#xff0c;面试的是一家上海某电商公司&#xff0c;给的薪资是不错。面试的时候&#xff0c;找我要了工资流水&#xff0c;然后给了我口头offer&#xff0c;就让我回去等了邮件了。回去之后就觉得offer没啥问题&#xff…

tomcat工作任务训练

文章目录1.安装jdk1.8 tomcat9.0 发布java项目部署java环境部署tomcat启动tomcat&#xff0c;测试访问上传项目安装数据库&#xff0c;建库建户web页面配置jpress测试写文章&#xff0c;上传附件2.tomcat多实例安装 比如 8080 8081 8082 发布3个论坛项目 war包也给你了tomcat多…

(memcpy memmove memcmp memset)内存操作函数详解

目录 &#x1f355;注意&#xff1a;内存操作函数隶属于头文件&#xff0c;因此在使用任何内存操作函数之前都必须引用 &#x1f95e;memcpy函数 &#x1f35e;memcpy函数的初步认识及使用 &#x1f373;样例示范&#xff1a; &#x1f9c8;代码呈现&#xff1a; &#x1f9c…