news 2026/9/26 23:38:02

SQL Server+C#运动会成绩管理系统实战指南

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
SQL Server+C#运动会成绩管理系统实战指南

简介:本资源是安徽工程大学数据库课程设计的典型实践项目——运动会成绩管理系统,面向高校计算机、软件工程等专业本科生,解决校级体育赛事中项目、运动员及成绩的数字化管理需求。系统基于C#开发,后端采用SQL Server数据库,支持成绩登记、预决赛名单生成、多维度统计与个性化查询等功能,完整覆盖课程设计全流程要求。压缩包共72个文件,含29个核心C#业务逻辑与界面代码文件、12个资源本地化文件(.resx)、1个SQL Server数据库文件(.mdf/.ldf)、1个VS2019可直接运行的解决方案(.sln)及详细使用说明文档(.docx),整体体积仅965KB,结构规范、开箱即用。已有1884人学习下载,提供从数据库建模、WinForm界面实现到DAO层封装的完整参考方案,特别适合数据库原理与应用、C#桌面开发课程的课程设计复现与拓展学习。

1. 这不是“交作业式课程设计”:安徽工程大学数据库课设里的运动会成绩管理系统,本质是用 SQL Server + C# 搭建的轻量级事务型业务系统

你拿到的安徽工程大学数据库课程设计运动会成绩管理系统.zip,表面看是学生期末交的压缩包,但拆开后你会发现:它不是 Word 报告+几张 E-R 图的“纸面设计”,而是一个真实可运行、带登录权限、支持多项目录入、实时排名计算、导出 Excel 的完整 C# WinForms 应用,后端直连 SQL Server LocalDB(或 Express),数据库脚本含 7 张表(Athlete,Event,Result,Team,Coach,Admin,Log),触发器自动更新Event表的CurrentRankCount字段,存储过程封装了“按学院统计金牌数”这类聚合逻辑。它解决的不是“怎么画 ER 图”的教学问题,而是“如何让院系体育部在三天内把校运会 32 个项目的 867 条成绩录完、不出错、能查能导”的真实场景。适合两类人:一是刚学完《数据库原理》想跑通第一个带事务的桌面应用的学生;二是需要快速搭建内部小型赛事管理工具的行政老师——它不追求高并发,但要求数据强一致、操作零容错、界面无学习成本。别被“课程设计”四个字骗了,这是一套经得起现场录入压力的最小可行系统(MVP)。


2. 从解压到运行:用 VS2019 复现这个系统的四步闭环

这个.zip包的结构非常典型:/src/下是 Visual Studio 解决方案(.sln),/db/下是.sql初始化脚本和.mdf数据库文件,/doc/是需求说明书和 E-R 图。复现的关键不是“打开就跑”,而是理解每一步背后的约束条件——尤其是 VS2019 版本与 SQL Server LocalDB 的隐式绑定关系。我当年在实验室帮三届学生调试时发现,87% 的“无法连接数据库”报错,根源都在这一步没对齐。

2.1 环境准备:VS2019 必装组件与 SQL Server LocalDB 的版本锁死逻辑

这个系统默认依赖SQL Server 2019 LocalDB(而非 Express 或更高版本),原因很实际:LocalDB 启动轻量、无需服务配置、与 VS2019 安装包深度集成。如果你装的是 VS2019 Community(最常见版本),安装时必须勾选以下两项:

  • ASP.NET 和 Web 开发(提供 IIS Express 支持,虽本项目不用 Web,但其依赖的 .NET Core SDK 会影响 WinForms 的设计器加载)
  • Python 开发(看似无关?实则关键:VS2019 安装器会通过 Python 工具链校验 LocalDB 实例状态,漏选会导致SqlLocalDB.exe不注册)

提示:不要试图用 SQL Server Express 替代 LocalDB。项目连接字符串硬编码为Data Source=(localdb)\\MSSQLLocalDB;...,改连接字符串会触发System.Data.SqlClient.SqlException: 无法打开登录所请求的数据库—— 因为 Express 默认实例名是SQLEXPRESS,而 LocalDB 实例名是MSSQLLocalDB,二者注册表路径、服务名、甚至SqlLocalDB.exe命令参数都不同。

验证 LocalDB 是否就位:

# 在管理员权限的 PowerShell 中执行 sqllocaldb info # 正常输出应包含: # MSSQLLocalDB # v11.0 # v12.0 # v13.0 # v14.0 # v15.0 ← 这就是 SQL Server 2019 LocalDB 对应的版本号

如果只看到v11.0(SQL Server 2012),说明你装的是旧版 VS 或手动卸载过 LocalDB,需重装 VS2019 并确保勾选上述组件。

2.2 数据库初始化:用sqlcmd执行.sql脚本比 SSMS 更可靠

/db/init.sql文件里包含CREATE DATABASE、CREATE TABLE、INSERT INTO测试数据三部分。很多同学直接双击用 SSMS 打开执行,结果卡在CREATE DATABASE报错:“数据库 'OlympicDB' 已存在”。这不是脚本问题,而是 SSMS 默认以master数据库上下文执行,而CREATE DATABASE必须在master中运行,但后续USE OlympicDB又会失败——因为 SSMS 的“执行全部”会把所有语句当一个批次提交,中间USE切换上下文会中断事务。

正确做法是用命令行分步执行:

# 1. 创建数据库(在 master 上执行) sqlcmd -S "(localdb)\MSSQLLocalDB" -Q "CREATE DATABASE OlympicDB ON (FILENAME='C:\temp\OlympicDB.mdf') LOG ON (FILENAME='C:\temp\OlympicDB_log.ldf');" # 2. 切换到新库并执行建表+数据(注意:-d 参数指定数据库名) sqlcmd -S "(localdb)\MSSQLLocalDB" -d "OlympicDB" -i "D:\project\安徽工程大学数据库课程设计运动会成绩管理系统\db\init.sql"

参数说明:
-S指定服务器实例(必须用(localdb)\MSSQLLocalDB,不能写localhost或.);
-d指定目标数据库(避免USE OlympicDB在脚本中失效);
-i指向 SQL 脚本路径(路径中不能有中文空格,建议先复制到D:\project\这类纯英文路径)。

执行后检查表是否建好:

sqlcmd -S "(localdb)\MSSQLLocalDB" -d "OlympicDB" -Q "SELECT COUNT(*) FROM sys.tables;" # 应返回 7 —— 对应 Athlete, Event, Result 等 7 张表

2.3 解决方案编译:WinForms 设计器加载失败的三个隐藏开关

打开/src/OlympicSystem.sln后,MainForm.cs [Design]标签页常显示“正在加载设计器…”然后卡死。这不是代码问题,而是 VS2019 对 WinForms 控件的渲染策略变更导致的兼容性断层。必须手动开启三个开关:

  1. 关闭“启用 UI 自动化”:
    工具 → 选项 → 调试 → 常规 → 启用 UI 自动化代理→ 取消勾选
    (否则设计器会尝试注入辅助技术 API,与 LocalDB 的 COM 组件冲突)

  2. 强制使用 .NET Framework 4.7.2 目标框架:
    右键项目 →属性 → 应用程序 → 目标框架→ 选择.NET Framework 4.7.2
    (原项目.csproj中<TargetFrameworkVersion>v4.7.2</TargetFrameworkVersion>是硬编码,若 VS 自动升级到 4.8 会导致DataGridView列宽计算异常)

  3. 重置 WinForms 设计器缓存:
    关闭 VS → 删除%USERPROFILE%\AppData\Local\Microsoft\VisualStudio\16.0_xxx\ComponentModelCache文件夹 → 重启 VS
    (该缓存记录控件元数据,LocalDB 驱动更新后旧缓存会引发设计器线程死锁)

完成以上三步,MainForm设计器才能正常拖拽按钮、绑定BindingSource,且DataGridView的AutoSizeMode属性生效。

2.4 连接字符串注入:为什么app.config里的connectionString必须手改

项目app.config中的连接字符串长这样:

<add name="OlympicDBConnectionString" connectionString="Data Source=(localdb)\MSSQLLocalDB;AttachDbFilename=|DataDirectory|\OlympicDB.mdf;Integrated Security=True;Connect Timeout=30;" providerName="System.Data.SqlClient" />

这段代码在开发机上能跑,但部署到另一台电脑时必报错:“无法找到|DataDirectory|指向的路径”。因为|DataDirectory|是 .NET Framework 的运行时宏,其默认值为Application.StartupPath,而StartupPath在 Debug 模式下是/bin/Debug/,在 Release 下是/bin/Release/,但.mdf文件实际放在/db/目录下——路径根本对不上。

血泪经验:必须在Program.cs的Main()方法最开头,手动设置AppDomain.CurrentDomain.SetData("DataDirectory", @"D:\project\安徽工程大学数据库课程设计运动会成绩管理系统\db");
然后在app.config中删掉AttachDbFilename,改用绝对路径:

<add name="OlympicDBConnectionString" connectionString="Data Source=(localdb)\MSSQLLocalDB;AttachDbFilename=D:\project\安徽工程大学数据库课程设计运动会成绩管理系统\db\OlympicDB.mdf;Integrated Security=True;Connect Timeout=30;" providerName="System.Data.SqlClient" />

注意:AttachDbFilename的路径必须用正斜杠/或双反斜杠\\,单反斜杠\会被 C# 当作转义字符处理,导致路径解析错误。


3. 核心业务逻辑落地:运动会成绩管理的三大关键事务实现

这个系统真正的价值不在界面美观,而在它用数据库原生能力解决了运动会特有的三个强一致性难题:成绩录入的原子性、跨项目排名的实时性、学院总分的防重算。下面拆解其 SQL Server 实现,不是贴代码,而是讲清“为什么非得这么写”。

3.1 成绩录入事务:INSERT INTO Result必须包裹在BEGIN TRAN中的三个理由

运动会成绩录入界面(ResultEntryForm)点击“保存”时,后台执行的不是单条INSERT,而是以下事务块:

BEGIN TRY BEGIN TRAN -- 步骤1:检查运动员是否已参加该项目(防重复录入) IF EXISTS (SELECT 1 FROM Result WHERE AthleteID = @aid AND EventID = @eid) THROW 50000, '该运动员已录入本项目成绩', 1; -- 步骤2:插入成绩记录 INSERT INTO Result (AthleteID, EventID, Score, Rank, RecordTime) VALUES (@aid, @eid, @score, @rank, GETDATE()); -- 步骤3:更新 Event 表的 CurrentRankCount(触发器会自动刷新排名) UPDATE Event SET CurrentRankCount = CurrentRankCount + 1 WHERE EventID = @eid; COMMIT TRAN END TRY BEGIN CATCH ROLLBACK TRAN THROW; END CATCH

为什么必须用事务?

  • 理由1(数据完整性):如果只执行步骤2,而步骤3因网络抖动失败,Event.CurrentRankCount就比实际Result行数少1,后续按CurrentRankCount分页查询会漏掉最后一条成绩;
  • 理由2(业务规则):步骤1的IF EXISTS检查必须和INSERT在同一事务中,否则并发录入时两个用户同时查到“不存在”,都会插入,造成重复;
  • 理由3(审计追溯):RecordTime使用GETDATE()而非客户端传入时间,避免选手用手机修改系统时间伪造成绩——这是运动会规程的硬性要求。

3.2 实时排名计算:用视图vw_EventRanking替代前端排序的底层逻辑

成绩列表界面(ResultListForm)的DataGridView绑定的是vw_EventRanking视图,而非直接查Result表。该视图定义如下:

CREATE VIEW vw_EventRanking AS SELECT e.EventName, a.Name AS AthleteName, t.TeamName, r.Score, r.Rank, ROW_NUMBER() OVER ( PARTITION BY r.EventID ORDER BY r.Score DESC, r.RecordTime ASC ) AS CalculatedRank FROM Result r JOIN Event e ON r.EventID = e.EventID JOIN Athlete a ON r.AthleteID = a.AthleteID JOIN Team t ON a.TeamID = t.TeamID

关键点在于ROW_NUMBER() OVER (PARTITION BY ... ORDER BY ...):

  • PARTITION BY r.EventID确保每个项目单独排名(100米和跳远不混排);
  • ORDER BY r.Score DESC, r.RecordTime ASC实现“分数高者优先,同分则按录入时间早者优先”——这是运动会规则:同分时,先录入的成绩排名靠前(体现公平性,避免人为干预);
  • CalculatedRank字段供前端直接显示,不依赖 C# 代码排序,杜绝了“前端排序逻辑与规则不符”的风险。

提示:视图不存储数据,每次查询都实时计算。测试表明,当Result表达 5000 行时,该视图查询耗时仍 <120ms(SQL Server 2019 LocalDB),完全满足校运会实时查询需求。

3.3 学院总分统计:存储过程sp_GetTeamScoreSummary的防重算设计

“学院总分榜”界面调用的是存储过程sp_GetTeamScoreSummary,而非简单GROUP BY:

CREATE PROCEDURE sp_GetTeamScoreSummary AS BEGIN SET NOCOUNT ON; -- 创建临时表存储中间结果(避免多次扫描 Result 表) CREATE TABLE #TeamScore ( TeamID INT, GoldCount INT DEFAULT 0, SilverCount INT DEFAULT 0, BronzeCount INT DEFAULT 0, TotalScore INT DEFAULT 0 ); -- 步骤1:统计各学院奖牌数(Rank=1/2/3) INSERT INTO #TeamScore (TeamID, GoldCount, SilverCount, BronzeCount) SELECT t.TeamID, SUM(CASE WHEN r.Rank = 1 THEN 1 ELSE 0 END), SUM(CASE WHEN r.Rank = 2 THEN 1 ELSE 0 END), SUM(CASE WHEN r.Rank = 3 THEN 1 ELSE 0 END) FROM Result r JOIN Athlete a ON r.AthleteID = a.AthleteID JOIN Team t ON a.TeamID = t.TeamID GROUP BY t.TeamID; -- 步骤2:计算总分(金牌5分,银牌3分,铜牌1分) UPDATE #TeamScore SET TotalScore = GoldCount * 5 + SilverCount * 3 + BronzeCount * 1; -- 步骤3:关联 Team 表获取学院名称 SELECT t.TeamName, ts.GoldCount, ts.SilverCount, ts.BronzeCount, ts.TotalScore FROM #TeamScore ts JOIN Team t ON ts.TeamID = t.TeamID ORDER BY ts.TotalScore DESC, ts.GoldCount DESC; END

为什么不用SELECT ... GROUP BY?

  • 防重算:运动会期间可能有成绩复核、申诉,Rank字段会动态调整。若用简单GROUP BY,每次查询都重新计算,当Result表超 2000 行时,CPU 占用飙升至 90%;而存储过程内建临时表,UPDATE比SELECT更快,且SET NOCOUNT ON减少网络包体积;
  • 规则固化:积分规则(5/3/1)写死在UPDATE语句中,避免前端代码误改;
  • 扩展性:若明年规则改为“金牌7分”,只需改存储过程,无需重编译 C# 程序。

4. 避坑指南:安徽工程大学课设项目在 VS2019 环境下的五大翻车现场

这个项目在实验室环境跑通容易,但一放到学生自己笔记本上就各种报错。以下是我在助教岗位上记录的 5 个最高频、最隐蔽的坑,按“现象→原因→解决”结构整理,全是真实翻车案例。

4.1 现象:启动时报错 “未能加载文件或程序集 ‘System.Data.SqlClient’”

原因:VS2019 默认项目引用的是System.Data.SqlClient4.8.5,但该项目packages.config锁定了 4.5.1 版本,且app.config中有<bindingRedirect>强制重定向。当 NuGet 更新后,重定向规则失效,CLR 加载器找不到匹配的 DLL。
解决:

  1. 删除packages.config;
  2. 在解决方案资源管理器中右键项目 →管理 NuGet 包→已安装标签页 → 找到System.Data.SqlClient→ 卸载;
  3. 重新安装System.Data.SqlClient4.5.1(必须指定版本号,不能装最新版);
  4. 清理bin/和obj/文件夹后重建。

4.2 现象:成绩录入后DataGridView不刷新,需重启程序才显示新数据

原因:ResultBindingSource的DataSource绑定的是DataTable,但INSERT语句执行后未调用DataTable.AcceptChanges(),导致BindingSource认为数据未变更。
解决:在ResultEntryForm.cs的保存按钮事件中,ExecuteNonQuery()后添加:

// 假设 dtResult 是绑定到 DataGridView 的 DataTable dtResult.Clear(); // 清空旧数据 adapter.Fill(dtResult); // 重新填充(adapter 是 SqlDataAdapter) resultBindingSource.ResetBindings(false); // 强制刷新绑定

4.3 现象:导出 Excel 时提示 “未将对象引用设置到对象实例”

原因:导出功能使用Microsoft.Office.Interop.Excel,但学生电脑未安装 Office,或安装的是 WPS。Interop组件在无 Excel 运行时会抛出NullReferenceException,而非明确的COMException。
解决:改用ClosedXML开源库(已在/lib/ClosedXML.dll提供):

// 替换原来的 Interop 代码 using (var wb = new XLWorkbook()) { var ws = wb.Worksheets.Add("成绩表"); ws.Cell(1, 1).Value = "项目"; // 填充表头 // ... 循环填充数据 wb.SaveAs(@"D:\Export\Results.xlsx"); }

4.4 现象:登录界面输入正确账号密码,却跳转到空白MainForm

原因:LoginForm.cs中的btnLogin_Click事件里,this.Hide()后直接new MainForm().ShowDialog(),但MainForm的Load事件中有一段if (CurrentUser.Role != "Admin") { this.Close(); }—— 如果数据库里Admin表的Role字段值是"管理员"(中文),而代码里硬编码"Admin",就会因字符串不等直接关闭窗体。
解决:统一角色标识为英文,在Admin表中Role字段值必须为"Admin"、"Coach"、"Athlete",并在LoginForm中用SELECT Role FROM Admin WHERE Username = @user获取,而非前端传参。

4.5 现象:DataGridView中中文列名显示为方框(乱码)

原因:VS2019 的 WinForms 设计器默认字体为Microsoft Sans Serif,该字体不支持中文 GB2312 编码。而app.config中未设置<globalization culture="zh-CN" />,导致设计器渲染时字体 fallback 失败。
解决:

  1. 在MainForm.cs的InitializeComponent()方法末尾添加:
this.Font = new Font("微软雅黑", 9F, GraphicsUnit.Point, 134);
  1. 对每个DataGridViewTextBoxColumn手动设置DefaultCellStyle.Font = new Font("微软雅黑", 9F);;
  2. 在app.config的<configuration>根节点下添加:
<system.web> <globalization requestEncoding="utf-8" responseEncoding="utf-8" /> </system.web>

5. 进阶技巧:把课设系统升级为可部署的生产级工具的三个实操动作

这个系统毕业答辩后常被束之高阁,但其实只要三个低成本改动,就能让它真正服务于下届运动会——不是“能跑就行”,而是“拿来即用、不出岔子”。这些动作我都在线上环境验证过,不依赖额外服务器或云服务。

5.1 数据库迁移:从 LocalDB 到 SQL Server Express 的无缝切换清单

LocalDB 适合开发,但正式使用必须迁移到 SQL Server Express(免费、支持远程连接、有图形化管理)。迁移不是简单备份还原,而是要处理四类差异:

差异项LocalDB 行为SQL Server Express 行为迁移操作
实例名(localdb)\MSSQLLocalDBlocalhost\SQLEXPRESS修改app.config中Data Source
身份验证Windows 集成认证(Integrated Security=True)需启用混合模式,并创建 SQL 登录账户在 SSMS 中新建登录olympic_user,授予db_owner权限
数据库路径.mdf文件随项目移动.mdf必须放在 SQL Server 数据目录(如C:\Program Files\Microsoft SQL Server\MSSQL15.SQLEXPRESS\MSSQL\DATA\)用 SSMS 的“分离/附加”功能迁移文件,而非直接复制
连接超时默认 30 秒足够网络环境差时易超时app.config中增加Connection Timeout=60

关键验证点:迁移后,在ResultEntryForm中执行一次成绩录入,然后立即在 SSMS 中查SELECT * FROM Log WHERE Action = 'InsertResult'—— 必须看到日志记录,证明事务日志正常写入。

5.2 权限分级:用数据库角色替代硬编码的 if-else 判断

当前系统用if (CurrentUser.Role == "Admin")控制菜单可见性,但运维时新增一个“裁判长”角色就得改 C# 代码。更好的做法是把权限逻辑下沉到数据库层:

  1. 在 SQL Server 中创建角色:
CREATE ROLE CoachRole; CREATE ROLE AthleteRole; EXEC sp_addrolemember 'db_datareader', 'CoachRole'; EXEC sp_addrolemember 'db_datawriter', 'CoachRole'; -- AthleteRole 只能读取自己学院的成绩 CREATE USER athlete_user FOR LOGIN athlete_login; EXEC sp_addrolemember 'AthleteRole', 'athlete_user';
  1. 在LoginForm中,根据登录用户所属角色动态加载菜单:
// 查询用户角色 string sql = "SELECT IS_MEMBER('CoachRole') AS IsCoach, IS_MEMBER('AthleteRole') AS IsAthlete"; using (var cmd = new SqlCommand(sql, conn)) { var reader = cmd.ExecuteReader(); if (reader.Read()) { if ((bool)reader["IsCoach"]) menuStrip.Items["录入成绩"].Visible = true; if ((bool)reader["IsAthlete"]) menuStrip.Items["查看成绩"].Visible = true; } }

这样,新增角色只需在 SQL Server 中配置,无需编译 C#。

5.3 日志增强:用SQL Server Audit替代手工Log表的审计闭环

当前Log表靠应用层INSERT记录操作,但存在漏洞:如果有人绕过程序直接连数据库删成绩,Log表不会记录。必须启用 SQL Server 自带的审计功能:

  1. 创建服务器审核:
CREATE SERVER AUDIT OlympicAudit TO FILE (FILEPATH = 'C:\Audit\') WITH (ON_FAILURE = CONTINUE); ALTER SERVER AUDIT OlympicAudit STATE = ON;
  1. 创建数据库审核规范,监控Result表:
CREATE DATABASE AUDIT SPECIFICATION OlympicDBSpec FOR SERVER AUDIT OlympicAudit ADD (INSERT, UPDATE, DELETE ON OBJECT::dbo.Result BY public); ALTER DATABASE AUDIT SPECIFICATION OlympicDBSpec STATE = ON;
  1. 审计日志自动写入C:\Audit\,可用 SSMS 的“安全 → 审核”节点查看,也可用 T-SQL 查询:
SELECT event_time, server_principal_name, statement FROM sys.fn_get_audit_file('C:\Audit\*.sqlaudit', default, default) WHERE object_name = 'Result';

这样,任何对成绩表的 DML 操作都有不可抵赖的审计证据,满足运动会规程的合规要求。

我带过的最后一届学生,用这套方案把系统部署到学院服务器上,支撑了 2023 年校运会全部 32 个项目、12 个学院、867 名运动员的成绩管理。没有崩溃,没有数据丢失,裁判组反馈“比往年纸质登记快 3 倍”。它证明了一件事:课程设计的价值,不在于评分表上的“优秀”,而在于你亲手把它变成别人愿意每天打开的真实工具。希望帮到你。

本文还有配套的精品资源,点击获取

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/26 23:37:55

做网站运营好还是SEO好?3个维度教你怎么选

做网站运营好还是SEO好?3个维度教你怎么选 模板网站太丑,改不动,客户还嫌不够用。这是建站行业最真实的痛点。很多项目经理在交付前夜崩溃,因为设计稿和代码实现总是有差距。这时候, 做网站运营好还是SEO好 就成了争论的焦点。其实,这俩不是单选题,而是 怎么选 的问题。…

作者头像 李华
网站建设 2026/9/26 23:37:35

别被坑了!3招搞定wordpress视频分集保姆级建站教程

别被坑了!3招搞定wordpress视频分集保姆级建站教程 找建站公司报价五千起步,改个页面加钱,上线后还要收年费,这种被当韭菜割的日子该结束了。很多刚转行做网站或者自己搞副业的朋友,拿着需求单一问,对方要么含糊其辞,要么直接甩给你个“标准套餐”,价格高得离谱。其实,像 wordpress视频分集…

作者头像 李华
网站建设 2026/9/26 23:37:04

开源可审计的LLM代码审查工作流设计与实践

1. 项目概述&#xff1a;这不是一个“工具”&#xff0c;而是一套可落地的开源代码审查工作流open-code-review 这个名字乍看像某个具体软件&#xff0c;但实际它代表的是一类正在快速成型的新型开发实践——用开源、透明、可审计的方式&#xff0c;把大语言模型&#xff08;LL…

作者头像 李华
网站建设 2026/9/26 23:36:53

项目经理必看:做网站简单还是做app简单?3步搞定选型

项目经理必看:做网站简单还是做app简单?3步搞定选型 很多项目经理在立项初期都会陷入一个纠结:到底该做网站还是做APP?看着市面上那些花里胡哨的模板,心里直犯嘀咕: 模板网站太丑不够用…

作者头像 李华
网站建设 2026/9/26 23:36:45

微信小程序+SSM实验室预约管理系统:源码部署与权限改造实战

简介&#xff1a;压缩包内是一个基于SSM框架的实验室管理微信小程序完整项目&#xff0c;面向需要学习小程序开发或搭建实验室管理系统的开发者&#xff0c;适合作为课程设计与毕业设计参考&#xff0c;也可直接部署使用。整套源码可正常运行&#xff0c;涵盖实验室设备管理、实…

作者头像 李华
网站建设 2026/9/26 23:36:44

GESP四级幸运数:字符串处理大数题的经典套路

上周末帮一个准备 GESP 四级的学生过真题&#xff0c;正好刷到洛谷 B3850 这道“[GESP202306 四级] 幸运数”。题目名称很喜庆&#xff0c;但真正让我在意的是题目标签里的“字符串处理”和“大数”两个词。很多同学一看到“大数”就容易慌&#xff0c;觉得要用高精度、甚至要找…

作者头像 李华