基于C#开发web网页管理系统模板流程-主界面管理员录入和编辑功能完善
前言
紧接上篇->基于C#开发web网页管理系统模板流程-登录界面和主界面_c#的网页编程-CSDN博客
已经完成了登录界面和主界面,本篇将完善主界面的管理员录入和编辑功能,事实上管理员录入和编辑的设计套路适用于所有静态表的录入和编辑
首先还是介绍一下本项目将要实现的功能
(一)管理员-录入
点击菜单中的管理员-录入,网页给出输入信息的界面,用户输入完信息后判断其合法性
如果不合法提示重新输入,合法则保留信息到本地数据库
(二)管理员--编辑
一,新建gly文件夹
在admin文件下再新建一个gly文件夹以方便脚本管理,我们将把实现管理员录入和编辑功能的脚本放在这个文件夹下,以此类推,当你实现菜单的其它选项的功能时,也应采用这个思路

二,设计管理员-录入界面
(注:部分操作与上一篇的基本雷同,因此省去不必要的图片操作,自行根据文字提示完成操作)
(一)添加设计工作台
在gly文件下【右键】->【添加新建项】创建一个【包含母版页的Web窗体】,将其命名为glyadd.aspx

点击添加后再弹出的【选择母版页】窗口中选择唯一一个母版页Site.Master

(二)插入与调整表格
在刚刚新建的文件中点击右下角的【设计】,在紫色窗口中键入几个回车方便操作

顶部点击【表】->插入表格
重点!该表格的列数为2,行数=你数据库中管理员表的字段数+2
例如:我的管理员表有6个字段,因此设置该表为8(6+2)行
(三)修改表格背景色
这一步在上一篇的标题【三.(一).(3)】已经详细讲过,要重点注意的问题还是表格的选中问题(要点一下表头才能全选表格,而不是只选中表格中的4行,两者是有区别的!如果全选表格的话表的边框会加粗、而且右边的属性栏会有【TABLE】的标签而不是【TD】之类的标签,如果不正确的全选表格,对表格的一些整体操作会只作用于部分单元格从而导致最终显示结果乱版)

确认全选表格后,右边下滑找到【style】属性(如果右边没有属性窗口,对表格右键可以找到),点击该属性右边的三个小点,会弹出修改样式窗口,点击【背景】,在【background-color】中选择想要的背景色,点击确定,表格颜色成功修改

(四)添加提示用户输入的信息
本步操作就是美化以下录入界面,给用户提示在哪里输入信息,合并单元格、居中、放大字体、加粗字体等操作不再赘述,顺便调整一下表格的大小
读者在设计时应符合自己对用户的预期输入,并贴合数据库中字段需要录入的数据

(五)添加控件
给表格右边添加相应的文本框等录入控件,这样才能接收用户的输入
我们需要用到如下图红框中的这三个控件
(工具箱点左边的【工具箱】按钮展开)

这里我添加了5个【TextBox】、2个【RadioButton】、2个【Button】等控件,读者请根据实际需要添加合适的控件

(1)性别单选按钮
这里重点解释一下【RadioButton】的作用,因为需要录入性别信息,性别只有两种选择,【RadioButton】则能实现这一操作
点击控件后在属性栏中的【Text】修改他们的名字分别为男、女,再将这两个按钮的属性中的【GroupName】修改为同一名字,确保两个按钮在同一分组(这样才能实现非男即女的按钮单选)

(2)日历输入生日
然后再解释一下怎么设计成以日历的形式让用户快速输入日期信息
单击输入日期的文本框控件,在属性中找到【TextMode】属性,修改为【Date】,如果你需要用户的输入精确到时分秒,也可以修改为【DateTime】

(3)两个按钮改名
改一下两个【Button】控件的名字,方便用户明白它们的功能,也是在属性栏中的【Text】修改

(4)为录入按钮和重置按钮添加脚本以实现其功能
双击录入按钮,将下面的脚本复制到弹出的文件【glyadd.aspx.cs】中并【Ctrl+S】快捷键保存,脚本的功能已经在注释中做出了详细解释,请仔细查看!
(注:这整个脚本包含录入和重置这两个按钮的脚本)
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data.Odbc; //ODBC命名空间namespace ckgl.admin.gly
{public partial class glyadd : System.Web.UI.Page{protected void Button1_Click(object sender, EventArgs e)//录入按钮脚本{//根据你实际的设计进行对应的输入内容合法判断if (TextBox1.Text == "" || TextBox2.Text == ""){Response.Write("<script language=javascript> alert('管理员编号或密码不得为空!');</script>");return;}if (TextBox3.Text == ""){Response.Write("<script language=javascript> alert('管理员姓名不得为空!');</script>");return;}if (RadioButton1.Checked == false && RadioButton2.Checked == false){Response.Write("<script language=javascript> alert('请选择管理员性别!');</script>");return;}if (TextBox4.Text == "" || TextBox5.Text == ""){Response.Write("<script language=javascript> alert('管理员生日或电话不得为空!');</script>");return;}if (TextBox1.Text.Length != 6){Response.Write("<script language=javascript> alert('管理员编号为六位长度!');</script>");return;}//创建连接对象、打开数据库OdbcConnection con = DB.Lianjie();con.Open();//编写sql语句,查询重复的管理员编号string sql1 = " select * from glyb where gno='" + TextBox1.Text + "' ";OdbcCommand mycommand1 = new OdbcCommand(sql1, con);OdbcDataReader sdr = mycommand1.ExecuteReader();if (sdr.Read())//如果有重复,给出提示信息{Response.Write("<script language=javascript> alert('管理员编号已存在,请更换!');</script>");return;}//管理员录入,对于性别信息需要特殊处理成男、女文本string xb = "";if (RadioButton1.Checked == true)xb = "男";if (RadioButton2.Checked == true)xb = "女";string sql2 = " insert into glyb values('" + TextBox1.Text + "', '" + TextBox2.Text + "' , '" + TextBox3.Text + "','" + xb + "', ";sql2 += " '" + TextBox4.Text + "','" + TextBox5.Text + "') ";OdbcCommand mycommand2 = new OdbcCommand(sql2, con);// Response.Write(sql2);//调试用,正常不用这两行// return;mycommand2.ExecuteNonQuery(); //用于录入,修改,删除时Response.Write("<script language=javascript> alert('录入成功!');</script>");con.Close(); //关闭数据库}protected void Button2_Click(object sender, EventArgs e)//重置按钮脚本{//重置的思想很简单,直接把所有文本框置为空字符串,所有选择按钮置为false(即未选状态)//我这里有5个文本框,依次置空TextBox1.Text = TextBox2.Text = TextBox3.Text = TextBox4.Text = TextBox5.Text = "";//两个选择性别的按钮,置为falseRadioButton1.Checked = RadioButton2.Checked = false;}}
}
三,设计管理员-编辑界面
(一)添加设计工作台
在gly文件下【右键】->【添加新建项】创建一个【包含母版页的Web窗体】,将其命名为glyedit.aspx

点击添加后再弹出的【选择母版页】窗口中选择唯一一个母版页Site.Master

(二)插入与调整表格
管理员编辑界面的表格的列数固定为3,行数需要根据你自己管理系统需要查询的字段数来决定,行数=你需要查询的字段数+2
例如:在我的管理员表中,我需要查询的字段只有编号、姓名、电话这三个(其它字段基本没有查询的必要,密码不能展示给其它用户、性别要么查男要么查女,查出来很多记录没有意义,生日也属于隐私没必要查,总之根据你自己需要用户能够查询到的字段来设计即可)
因此设置该表为5(3+2)行
(三)修改表格背景色
(四)添加提示用户输入的信息
(五)添加控件
以上这四块内容基本是重复的套路操作,因此省去大量篇幅(如果忘了操作则重看本篇标题【二】的(2)(3)(4)(5),都是一样的套路),自由发挥设计即可,参考下图

完成以上操作之后,我们还要在上图绿框部分的大单元格处添加一个用于显示数据的控件,点击选中它之后,在【工具箱】->【数据】中找到【GridView】,双击后添加

(六)配置odbc数据源
本步操作用于管理系统能够连接到数据源从而显示查询结果,已经在上一篇(基于C#开发web网页管理系统模板流程-登录界面和主界面-CSDN博客)的标题【一.(三).(2)】处做过详细演示,如果你还没建立odbc数据源连接,请自行跳转查看教程

按下图操作,点击【<新建数据源>】

按如下图操作创建数据源

点完确定后回到这个窗口,点【下一步】,下一个窗口(这个窗口的截图我省略了)再点下一步

配置Select语句,在这里选择你数据库中的管理员表

(注:如果在本步操作你无法选择【指定来自表或视图的列】这个选项,从而导致你无法选择你的管理员表,错误原因在于你创建的odbc数据源未指定你的数据库),即下图绿框部分中红字特地强调的内容你没有做,此时你必须重新创建数据源
严格按照 上一篇(基于C#开发web网页管理系统模板流程-登录界面和主界面-CSDN博客)的标题【一.(三).(2)】所说的做,且新的数据源不能和原来错误的数据源同名(除非你删除原来错误的数据源,但如果你是5.1版本的odbc可能会发现删除不了,如果你想删除参考本篇->odbc用户dsn点删除点配置没反应个人解决经验-CSDN博客)
然后选【指定自定义SQL语句或存储过程(S)】再点下一步

接下来我们要创建SELECT、UPDATE、DELETE这三部分的SQL语句

SELECT的SQL语句就是【select * from 管理员表名】这样的形式
UPDATE的SQL语句是【update 管理员表名 set 字段1=? ,字段2=?,字段3=?,... where 管理员编号字段=?】的形式
DELETE的SQL语句是【delete from 管理员表名 where 管理员编号字段=?】
你需要确认自己管理员表名及其中的字段来对这3条语句进行适当修改,很简单的(但要求你仔细确认字段名是否正确,否则会导致后续的查询bug),你看看就知道了,参考下图
做完三条SQL编写的工作后,继续点下一步,在这个【测试查询】的窗口中也可以点测试查询(T)验证一下SELECT语句(其它更新、删除语句无法在此处验证),确认无误后点完成(实在后期遇到bug也没多大关系,可以修改配置的)

此时可以发现管理员表中的字段已经被绑定到控件中了

(七)设计编辑和删除功能
展开控件菜单,将【启用分页】、【启用编辑】、【启用删除】勾选上,此时可能需要你调整一下表格大小以适应这些内容

(1)设置分页
选中GridView控件后在属性栏中的【PageSize】处可以修改每页显示的记录数,可以根据自己设计需求进行设置

(2)将编辑、删除功能置于查询结果后方
一般来说习惯将编辑、删除功能置于查询结果后方,当然这也根据你自己喜好去设置
但是将【CommandField】列设置为TemplateField(模板列)是必须进行的操作!这关系到下文设置删除提示的操作!


(3)编辑和删除功能测试
在编辑界面直接运行,我们来测试一下编辑和删除功能,这一步可能产生的bug会非常多,博主也是被硬控了一天半多的时间
运行来到编辑界面,这里我随便准备了4条数据

点击第四条数据的删除,成功删除

点击第一条的编辑功能,修改其gname的值

点更新,成功修改

读者需要确保自己的编辑和删除功能能够实现上文所描述的,如果无法实现,提供以下可能的处理措施——
①检查自己在本篇标题【三.(6)】编写的三条SQL语句是否正确(语法、字段名、关键字之间是否空格隔开等)
②点击删除功能时弹出如下错误
解决方法是:再点开配置数据源,在【配置Select语句】的窗口选择【高级】,将【使用开放式开发(O)】这个选项勾选,最后点确定
(注:最好再去检查一下那三条自定义SQL语句是否错误,有可能会被系统修改成默认值,需要你手动再改回来)
③点击编辑功能,修改值后点更新,但是数据没有被修改
解决方法是:点击【编辑列】,确认你的【管理员编号】(这里我是gno)字段的属性【ReadOnly】是否为True,因为前文已经说过这个字段是不能被更改的,所以要设置为只可读
(补充必看)(4)给删除功能添加确认删除提示
为避免用户误删记录,必须给删除功能添加对应的确认提示
点击右下角的【源】,在模板列的后台代码(即绿色框起来的部分,如果没有绿框内的代码,说明你为进行本篇标题【三.(7).2】处内容的操作)中找到如下图红色下划线所在行的删除按钮后台代码,添加如红色下划线所示的代码在【Text="删除"】的后面
OnClientClick="return confirm('真的要删除吗?')"

测试功能:
做完修改后注意保存,运行后来到管理员编辑界面,对任意一条记录进行删除操作,出现如下确认删除的提示,证明功能无误

(5)为录入按钮和重置按钮添加脚本以实现其功能
双击录入按钮,将下面的脚本复制到弹出的文件【glyedit.aspx.cs】中并【Ctrl+S】快捷键保存,脚本的功能已经在注释中做出了详细解释,请仔细查看!
(注:这整个脚本包含录入和重置这两个按钮的脚本)
using System;
using System.Collections.Generic;
using System.Data.Odbc;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;namespace ckgl.admin.gly
{public partial class glyedit : System.Web.UI.Page{protected void Button1_Click(object sender, EventArgs e){OdbcConnection con = DB.Lianjie();con.Open();string sql = " select * from glyb where ";if (TextBox1.Text != "")sql += " gno='" + TextBox1.Text + "' and ";if (TextBox2.Text != "")sql += " gname='" + TextBox2.Text + "' and ";if (TextBox3.Text != "")sql += " gtele='" + TextBox3.Text + "' and ";sql += " '1'='1' "; //复合查询关口语句,这样的设计代码的思路是:如果三个文本框都为空,即用户未输入任何匹配信息,那么查询结果就是所有记录OdbcCommand mycommand1 = new OdbcCommand(sql, con);OdbcDataReader sdr = mycommand1.ExecuteReader();if (sdr.Read()){SqlDataSource1.SelectCommand = sql;GridView1.DataBind(); //刷新查询窗口,刷新才能显示查询结果}else{Response.Write("<script language=javascript> alert('查无此人!');</script>");return;}con.Close();}protected void Button2_Click(object sender, EventArgs e){//重置的思想很简单,直接把所有文本框置为空字符串//我这里有3个文本框,依次置空TextBox1.Text = TextBox2.Text = TextBox3.Text = "";}}
}
四,添加菜单
我们先找到上一篇的标题【三.(二).(4)】处(如下图)创立的主菜单(即母版页Site1.Master),当时我们只是草率的创立了几个新节点,出了【退出】这个选项的功能,其它菜单还没有完善

在项目中找到之前创建在admin文件夹下的Site.Master这个母版页

右键点击这个菜单栏->【编辑节点】,给它的子节点命名成几个有意义的菜单选项名,比如本篇我们是实现管理员的录入和编辑功能,因此将第一个节点命名成【管理员】,然后给该节点添加两个子节点,分别命名为【录入】和【编辑】,两个平行关系子节点的创建不好描述,但你试试就知道很简单的

但是仅是修改它的文本可做不到对应的跳转到录入页面的功能,我们需要实现的功能是点击录入后就跳转到录入页面,需要做的是修改【NavigateUrl】的值

同理,点击编辑就跳转到编辑页面,也是修改【NavigateUrl】的值

菜单效果效果如下,至于其它节点的名称和关系,则根据读者自己的管理系统来进行设计

五,测试
建议从登录窗口开始完整测试一遍,这里为了节省篇幅就直接从管理员功能的界面开始测试
(一)录入界面功能测试
(1)空输入拦截测试
读者自行测试所有信息的空输入拦截

(2)管理员编号长度合法性测试
因为前面的脚本有规定管理员的编号长度固定为6,因此此处进行测试

(3)重置输入测试
点击重置,应该把输入的信息清空

(二)编辑界面功能测试
(1)查询测试
匹配信息全为空时,查询结果为所有记录

编号匹配测试

姓名匹配测试

电话匹配测试

无记录查询测试

(2)重置输入测试

(3)编辑与删除测试
先故意录入一条测试用的记录

删除记录测试

编辑记录测试

相关文章:
基于C#开发web网页管理系统模板流程-主界面管理员录入和编辑功能完善
前言 紧接上篇->基于C#开发web网页管理系统模板流程-登录界面和主界面_c#的网页编程-CSDN博客 已经完成了登录界面和主界面,本篇将完善主界面的管理员录入和编辑功能,事实上管理员录入和编辑的设计套路适用于所有静态表的录入和编辑 首先还是介绍一下…...
K8s证书过期处理
问题描述 本地有一个1master2worker的k8s集群,今天启动VMware虚拟机之后发现api-server没有起来,docker一直退出,这个集群是使用kubeadm安装的。 于是kubectl logs查看了日志,发现证书过期了 解决方案: 查看证书 #…...
刷题之路径总和Ⅲ(leetcode)
路径总和Ⅲ 这题和和《为K的数组》思路一致,也是用前缀表。 代码调试过,所以还加一部分用前序遍历数组和中序遍历数组构造二叉树的代码。 #include<vector> #include<unordered_map> #include<iostream> using namespace std; //Def…...
MongoDB 原子操作:确保数据一致性和完整性的关键
在 MongoDB 中,原子操作是指可以一次性、不可分割地执行的数据库操作。这些操作能够保证在多个并发操作中不会出现数据不一致或者丢失的情况,确保数据库的数据完整性和一致性。 基本语法 MongoDB 的原子操作通常与更新操作相关,其基本语法如…...
2024上半年软考高级系统架构设计师回顾
本博客地址:https://security.blog.csdn.net/article/details/139238685 2024年上半年软考在5月25-26日举行,趁着时间刚过去记忆还在,简单写一点总结。 关于考试形式:上机考试(以后也都是机考)࿰…...
SQL注入绕过技术深度解析与防御策略
引言 在Web安全领域,SQL注入攻击一直是一个棘手的问题。攻击者通过SQL注入手段获取敏感数据、执行恶意操作,甚至完全控制系统。尽管许多防御措施已被广泛采用,但攻击者仍不断开发新的绕过技术。本文将深度解析SQL注入的绕过技术,…...
Redis教程(十六):Redis的缓存穿透、缓存击穿、缓存雪崩
传送门:Redis教程汇总篇,让你从入门到精通 缓存穿透 描述 用户需要查询一个数据,例如要查一张ASSET_CODE 999999的卡片,查询redis中没有,就直接去请求数据库,数据库中也不存在对应的数据,返回…...
如何实现一个高效的单向链表逆序输出?
实现单向链表逆序输出的关键点有两个: 反转链表本身 遍历反转后的链表并输出首先,我们来看如何反转链表: class Node:def __init__(self, data):self.data dataself.next Nonedef reverse_list(head):"""反转单向链表"""prev Nonecurrent h…...
使用 Go 实现 HelloWorld 程序,并分析其结构
在学习任何新的编程语言时,编写一个 “Hello, World” 程序通常是最初的入门步骤。这不仅是一个传统,也是一种快速了解语言基本语法和运行机制的有效方法。对于 Go 语言,这个过程不仅可以帮助新手快速入门,还提供了一个窗口&#…...
机器学习:在Python中sklearn库的使用,纯干货!12个小时的整理!
无监督学习是在没有标签的数据上训练的。其主要目的可能包括聚类、降维、生成模型等。 以下是 6 个重要的无监督学习算法,这些算法都可以通过使用sklearn(Scikit-learn)库在Python中很好地处理: 目录 K-Means 聚类 层次聚类 …...
XSS 攻击
XSS 攻击简介 定义: XSS(跨站脚本攻击)是一种网络安全漏洞,攻击者通过在 Web 页面中注入恶意代码,利用用户的浏览器执行这些恶意脚本,从而实施攻击。 解决方案: 过滤用户输入: 对…...
.Net Core 中间件与过滤器
过滤器这个是.Net MVC旧有的功能,中间件这个概念是新出的, ASP.NET Core只是完成了HTTP请求调度、报文解析等必要的工作,像检查用户身份、设置缓存报文头等操作都是在中间件中完成,中间件就是ASP.NET Core的一个组件,…...
【ARMv7-A】——WFI(wait for interrupt)
文章目录 WFI基本原理使用场景多任务模型注意事项代码实例linux 内核中的 WFI 指令不使用 WFI 指令测试使用 WFI 指令测试WFI WFI 即 Wait for interrupt,常用于低功耗。 WFI (Wait for interrupt) 和 WFE (Wait for event) 是两个让 ARM 核进入 low-power standby 模式的指…...
92. 反转链表 II
题目描述 给你单链表的头指针 head 和两个整数 left 和 right ,其中 left < right 。请你反转从位置 left 到位置 right 的链表节点,返回 反转后的链表 。 示例 示例 1: 输入:head [1,2,3,4,5], left 2, right 4 输出&#…...
Modbus工业网关
随着工业自动化程度的不断提高,设备之间的数据通信与交互变得至关重要。在这一背景下,Modbus协议凭借其简单、可靠、开放的特点,成为了工业自动化领域中最常用的通信协议之一。而HiWoo Box网关作为一款支持Modbus协议的工业网关设备ÿ…...
c++——模板初始识
1.函数模板 我们经常用到Swap函数交换两个值。由于需要交换的数据的类型不同,我们就需要写不同参数类型的同名函数,也就是函数重载: 然而这三个函数的逻辑是一样的,写这么多有些多此一举,通过函数模版可以写一个通用…...
帆软生成csv文件
帆软官网提供了导出csv文件的插件,需要下载指定版本的插件 请选择具体的详情点击官网介绍:文档介绍 插件地址:插件地址...
12.Redis之补充类型渐进式遍历
1.stream 官方文档的意思, 就是 stream 类型就可以用来模拟实现这种事件传播的机制~~stream 就是一个队列(阻塞队列)redis 作为一个消息队列的重要支撑属于是 List blpop/brpop 升级版本.用于做消息队列 2.geospatial 用来存储坐标 (经纬度)存储一些点之后,就可以让用户给定…...
品牌做电商控价的原因
品牌控价确实是一项至关重要的任务,它关乎着品牌形象、市场定位以及长期发展的稳定性。在电商平台上,价格的公开性和透明度使得消费者、经销商和其他渠道参与方都能够轻易地进行价格比较。因此,品牌方必须对电商渠道的价格进行严格的管控&…...
安全面试中的一个基础问题:你如何在数据库中存储密码?
3分钟讲解。 上周的面试故事 职位:初级安全工程师,刚毕业。 开始面试。 我:“这里你提到对数据安全有很好的理解。你能举例说明哪些方面的数据安全吗?” A:“当然。例如,当我们构建一个系统时,会…...
铭豹扩展坞 USB转网口 突然无法识别解决方法
当 USB 转网口扩展坞在一台笔记本上无法识别,但在其他电脑上正常工作时,问题通常出在笔记本自身或其与扩展坞的兼容性上。以下是系统化的定位思路和排查步骤,帮助你快速找到故障原因: 背景: 一个M-pard(铭豹)扩展坞的网卡突然无法识别了,扩展出来的三个USB接口正常。…...
C++_核心编程_多态案例二-制作饮品
#include <iostream> #include <string> using namespace std;/*制作饮品的大致流程为:煮水 - 冲泡 - 倒入杯中 - 加入辅料 利用多态技术实现本案例,提供抽象制作饮品基类,提供子类制作咖啡和茶叶*//*基类*/ class AbstractDr…...
MMaDA: Multimodal Large Diffusion Language Models
CODE : https://github.com/Gen-Verse/MMaDA Abstract 我们介绍了一种新型的多模态扩散基础模型MMaDA,它被设计用于在文本推理、多模态理解和文本到图像生成等不同领域实现卓越的性能。该方法的特点是三个关键创新:(i) MMaDA采用统一的扩散架构…...
Java - Mysql数据类型对应
Mysql数据类型java数据类型备注整型INT/INTEGERint / java.lang.Integer–BIGINTlong/java.lang.Long–––浮点型FLOATfloat/java.lang.FloatDOUBLEdouble/java.lang.Double–DECIMAL/NUMERICjava.math.BigDecimal字符串型CHARjava.lang.String固定长度字符串VARCHARjava.lang…...
ios苹果系统,js 滑动屏幕、锚定无效
现象:window.addEventListener监听touch无效,划不动屏幕,但是代码逻辑都有执行到。 scrollIntoView也无效。 原因:这是因为 iOS 的触摸事件处理机制和 touch-action: none 的设置有关。ios有太多得交互动作,从而会影响…...
Maven 概述、安装、配置、仓库、私服详解
目录 1、Maven 概述 1.1 Maven 的定义 1.2 Maven 解决的问题 1.3 Maven 的核心特性与优势 2、Maven 安装 2.1 下载 Maven 2.2 安装配置 Maven 2.3 测试安装 2.4 修改 Maven 本地仓库的默认路径 3、Maven 配置 3.1 配置本地仓库 3.2 配置 JDK 3.3 IDEA 配置本地 Ma…...
MFC 抛体运动模拟:常见问题解决与界面美化
在 MFC 中开发抛体运动模拟程序时,我们常遇到 轨迹残留、无效刷新、视觉单调、物理逻辑瑕疵 等问题。本文将针对这些痛点,详细解析原因并提供解决方案,同时兼顾界面美化,让模拟效果更专业、更高效。 问题一:历史轨迹与小球残影残留 现象 小球运动后,历史位置的 “残影”…...
MySQL JOIN 表过多的优化思路
当 MySQL 查询涉及大量表 JOIN 时,性能会显著下降。以下是优化思路和简易实现方法: 一、核心优化思路 减少 JOIN 数量 数据冗余:添加必要的冗余字段(如订单表直接存储用户名)合并表:将频繁关联的小表合并成…...
[大语言模型]在个人电脑上部署ollama 并进行管理,最后配置AI程序开发助手.
ollama官网: 下载 https://ollama.com/ 安装 查看可以使用的模型 https://ollama.com/search 例如 https://ollama.com/library/deepseek-r1/tags # deepseek-r1:7bollama pull deepseek-r1:7b改token数量为409622 16384 ollama命令说明 ollama serve #:…...
uniapp 小程序 学习(一)
利用Hbuilder 创建项目 运行到内置浏览器看效果 下载微信小程序 安装到Hbuilder 下载地址 :开发者工具默认安装 设置服务端口号 在Hbuilder中设置微信小程序 配置 找到运行设置,将微信开发者工具放入到Hbuilder中, 打开后出现 如下 bug 解…...








