尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
C# ASP.NET通讯录系统开发实战:从数据表设计到避坑指南
简介基于C#与ASP.NET的Web通讯录管理系统源码面向使用.NET技术栈的初学者可作为课程设计或毕业设计的参考项目。系统以SQL Server 2005作为数据存储实现了用户注册登录、联系人增删改查、分组树形展示、照片上传与个人信息修改等完整功能覆盖了Web窗体页面的生命周期、Session会话保持、ADO.NET数据库访问、输入验证与防SQL注入等Web开发关键知识点。压缩包总共包含92个文件其中以aspx页面、cs后台逻辑文件、数据库MDF/LDF文件以及CSS样式文件为主另配有大量GIF和JPG图标素材压缩包大小约5.53MB文件目录按照页面、代码、数据、样式进行了清晰分类。目前该资源已有300人学习或下载。资源中附带了项目工程和Address_Data数据库备份可在Visual Studio 2005开发环境中直接打开运行十分适合动手实践。通过逐行阅读代码读者能掌握GridView数据绑定、SQL语句封装、文件上传处理、IIS部署流程等实用技能有助于建立对ASP.NET Web应用从开发到部署的完整认知。1. 通讯录用 C# asp.net 做出来不要只盯着增删改查一次给内部做人员台账我拿到一份 C# asp.net 通讯录的源码包本以为只是 GridView 套数据库的老套路结果发现它把部门、联系人、电话、邮箱、备注、头像全串在了一张业务表上还带简单的权限和搜索。这套东西适合两类人一是刚学 asp.net 想找一个完整 WebForms 案例练手的开发者二是公司里需要快速搭内部通讯录、又不愿意从零写权限和分页的从业者。它能直接回答“通讯录到底怎么存、怎么查、怎么改”也能让你少踩 WebForms 回传、数据绑定和 SQL 注入的坑。2. 造通讯录之前先想清楚数据表怎么设计控件怎么选2.1 功能清单与数据模型把“通讯录”拆成三张表拿到通讯录需求第一反应往往是“不就是一张表吗”。实际写起来你会发现单表也能跑但稍微加点部门管理、搜索和权限单表就会变成一张越来越宽的表。常见的做法是拆成三张表部门表、联系人表、用户表。部门表存部门编号和部门名称联系人表存姓名、性别、手机、座机、邮箱、部门编号、备注、头像路径。用户表是给登录用的不是必须的但大多数现成通讯录源码都会顺手带上因为内部工具通常要限制谁能改数据。CREATE TABLE Department ( DeptID INT PRIMARY KEY IDENTITY(1,1), DeptName NVARCHAR(50) NOT NULL ); CREATE TABLE Contact ( ContactID INT PRIMARY KEY IDENTITY(1,1), Name NVARCHAR(50) NOT NULL, Gender CHAR(1) DEFAULT 男, Mobile NVARCHAR(20), Phone NVARCHAR(20), Email NVARCHAR(100), DeptID INT, Remark NVARCHAR(500), AvatarPath NVARCHAR(200), CreateTime DATETIME DEFAULT GETDATE() );联系人表里的 DeptID 不是直接把部门名字存进来而是只存编号。查询的时候再和 Department 表做关联。这样做的理由是部门改名只需要改部门表联系人的数据不动如果以后要做按部门统计用编号比用字符串稳定得多。Mobile 和 Phone 用 NVARCHAR 而不是数字类型是因为手机号可能带区号、分机号也可能以 0 开头用数字类型会丢掉前导零电话号里的“-”也没法存。用户表不是这套资源的重点但它通常会存放登录账号、密码哈希、显示名和角色。密码不要用明文MD5 已经不够看了至少用 SHA256 加盐或者直接上 BCrypt。很多通讯录源码里的登录模块只是演示用的你接手后第一件事应该是检查密码存储方式。2.2 WebForms 还是 MVC这套源码更偏向哪种写法C# asp.net 通讯录这个标题其实是个大范围可能是传统 WebForms 的 .aspx 页面也可能是 MVC 的 Razor 视图。两种都能实现通讯录但代码组织方式差别很大。WebForms 的特点是拖控件、事件驱动、ViewState 自动维护状态适合快速做内部工具MVC 的特点是好测试、好分离关注点适合长期维护的项目。这套资源的典型形态是 WebForms因为“通讯录”这个场景在课程设计和毕业设计里出现频率极高而课程设计大多用 WebForms 加 GridView/FormView 来凑页面。如果你拿到的是 WebForms 版本核心页面一般长这样List.aspx 显示联系人列表Edit.aspx 负责新增和编辑Detail.aspx 显示单条联系人详情。这些页面共用同一个数据库访问层通常是一个 SqlHelper 或 DBHelper 类。我一般会先看三样东西Web.config 里的连接字符串、DBHelper 里的数据库操作方法、页面的 DataSource 绑定方式。这三样决定了这个资源能不能跑起来。连接字符串写死服务器地址和密码的第一件事改成相对路径或本地调试地址DBHelper 里如果到处是 SqlCommand 拼接字符串那就得考虑参数化改造。2.3 数据库连接与连接字符串别把密码写死在代码里通讯录这种小系统数据库连接字符串通常写在 Web.config 的 connectionStrings 节点里。标准写法是这样connectionStrings add nameAddressBookDB connectionStringData Source.;Initial CatalogAddressBook;User IDsa;Password123456;MultipleActiveResultSetsTrue providerNameSystem.Data.SqlClient / /connectionStringsData Source.; 表示本机默认实例Initial Catalog 是数据库名MultipleActiveResultSetsTrue 允许同一个连接上同时跑多个结果集这个在 GridView 绑定时很实用。开发时用 SQL Server 账号密码登录方便但发布到生产环境前建议改成 Windows 集成认证或者把账号密码放到发布配置里避免源代码仓库里躺着一份明文密码。读取连接字符串的做法很多最常见的是在 DBHelper 里用 ConfigurationManagerstring connStr ConfigurationManager.ConnectionStrings[AddressBookDB].ConnectionString; using (SqlConnection conn new SqlConnection(connStr)) { // 打开连接执行命令 }这套匹配的数据库脚本一般在源码包的 DB 文件夹或根目录下名字通常是 addressbook.sql 或 database.sql。你要做的不是手动在 SSMS 里建表而是直接执行这个脚本它会顺带把测试数据插进去。执行完以后用 SELECT TOP 10 * FROM Contact 看一眼有没有数据很多链接不上数据库的问题其实是脚本没执行成功。这里有个容易忽略的细节连接字符串里的 User ID 和 Password 一旦写错页面报的不是“连接字符串错误”而是“用户 sa 登录失败”或“无法打开登录所请求的数据库”。看到这类错误不要慌先回去核对 Web.config。调试期间可以把连接字符串临时改成 .\SQLEXPRESS 或者 localdb服务器版 SQL Server 和 Express 版的连接写法略有不同资源里一般会注释说明。3. 把核心页面做出来列表、新增、编辑、删除与查询3.1 列表页GridView 绑定数据并处理空数据通讯录的主页面一眼看过去就是一张表姓名、部门、手机、邮箱排在格子里面。WebForms 里最省事的做法是拖一个 GridView在 Page_Load 里绑定数据。很多源码包的做法是在后台写一个 BindData 方法protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack) { BindData(); } } private void BindData() { string sql SELECT c.ContactID, c.Name, c.Gender, c.Mobile, c.Email, d.DeptName FROM Contact c LEFT JOIN Department d ON c.DeptID d.DeptID ORDER BY c.CreateTime DESC; DataTable dt SqlHelper.ExecuteDataTable(sql); GridView1.DataSource dt; GridView1.DataBind(); }Page_Load 里的 if (!IsPostBack) 是整个 WebForms 最容易踩的地方。GridView 点分页、点编辑都会触发回传如果每次都重新绑数据你点击的操作会被覆盖。把绑定放在 !IsPostBack 里只在第一次加载时绑定后续回传交给 GridView 自己的事件处理。如果资源里没有这个判断恭喜你翻页翻到第二页然后点删除大概率会出问题。数据为空时 GridView 不显示任何东西这对用户体验很不友好。常见做法是先用 DataTable 判断行数空表时给页面一个提示if (dt.Rows.Count 0) { GridView1.EmptyDataText 通讯录里还没有联系人请先新增。; GridView1.DataSource dt; GridView1.DataBind(); return; }EmptyDataText 是 GridView 自带的属性数据源为空时会在表格位置显示一段文字。比单独写一个 Label 省事。列表页还要考虑要不要显示头像如果联系人表有 AvatarPath 字段用模板列放一个 Image 控件比直接在绑定列里拼 HTML 更可控。3.2 新增/编辑页FormView 与参数校验GridView 适合列表新增和编辑页面一般单独用一个 FormView 或 DetailsView。FormView 的好处是支持 ItemTemplate 和 EditItemTemplate改一条记录不用跳转页面。不过很多课程设计源码会做成两个独立页面Add.aspx 和 Edit.aspx共用同一个数据访问方法。新增页的核心操作是拿页面控件值构造 INSERT 语句然后执行protected void btnSave_Click(object sender, EventArgs e) { string name txtName.Text.Trim(); string mobile txtMobile.Text.Trim(); string email txtEmail.Text.Trim(); string deptId ddlDept.SelectedValue; if (string.IsNullOrEmpty(name)) { lblMsg.Text 姓名不能为空; return; } string sql INSERT INTO Contact (Name, Gender, Mobile, Phone, Email, DeptID, Remark) VALUES (Name, Gender, Mobile, Phone, Email, DeptID, Remark); SqlParameter[] parameters { new SqlParameter(Name, name), new SqlParameter(Gender, ddlGender.SelectedValue), new SqlParameter(Mobile, mobile), new SqlParameter(Phone, txtPhone.Text.Trim()), new SqlParameter(Email, email), new SqlParameter(DeptID, deptId), new SqlParameter(Remark, txtRemark.Text.Trim()) }; int rows SqlHelper.ExecuteNonQuery(sql, parameters); if (rows 0) { Response.Redirect(List.aspx); } else { lblMsg.Text 保存失败请检查输入内容; } }这里每一个值都从界面控件上 Trim 过再进数据库。Trim 的作用不是防注入而是避免用户手滑打了空格存进去一条“张三空格”的数据后面搜索“张三”搜不到。姓名空判断放在最前面这是最基础的非空校验。移动端和固定电话不要用同一个输入框。Mobile 和 Phone 分开存显示的时候也分开列因为业务上这两个字段的使用频率不同。邮箱不是必填的话代码里不要把空字符串变成 NULL空字符串在页面上显示为空白格子NULL 在 GridView 里显示为空稍有区别但搜索时 IS NULL 和 写法不一样。统一用空字符串更省心。编辑页的思路几乎一样只是把 INSERT 换成 UPDATE并且要拿到一个主键 ContactID。这个主键通常通过 QueryString 从列表页传过来比如 Edit.aspx?id3。接收的时候一定要判断int contactId 0; if (!int.TryParse(Request.QueryString[id], out contactId) || contactId 0) { Response.Redirect(List.aspx); return; }不做这个判断用户手动输入 Edit.aspx?idabc 或 id-1程序就有机会抛异常或者操作不存在的记录。这个问题在验收演示时非常容易出现因为演示的人会手滑改 URL。3.3 删除与详情主键传递和防误删删除功能看起来最简单一个按钮一个 DELETE 语句。但 WebForms 里的删除按钮经常放在 GridView 的模板列里触发方式不对就变成“点击没反应”。常见的删除方式是用 CommandName 和 CommandArgumentasp:TemplateField HeaderText操作 ItemTemplate asp:LinkButton IDlnkDelete runatserver CommandNameDelete CommandArgument%# Eval(ContactID) % OnClientClickreturn confirm(确定要删除该联系人吗); 删除 /asp:LinkButton /ItemTemplate /asp:TemplateField后台对应的事件处理protected void GridView1_RowCommand(object sender, GridViewCommandEventArgs e) { if (e.CommandName Delete) { int contactId Convert.ToInt32(e.CommandArgument); string sql DELETE FROM Contact WHERE ContactID ContactID; SqlParameter param new SqlParameter(ContactID, contactId); SqlHelper.ExecuteNonQuery(sql, param); BindData(); } }OnClientClick 里的 confirm 是前端弹窗确认和后台没有任何关系它只是给用户一个后悔药。真正删除动作发生在 RowCommand 事件里。注意 GridViewCommandEventArgs 的 CommandArgument 是字符串要转成 int。如果你拿到的是 object 类型直接用 ToString 再 TryParse不要在转换上赌数据一定合法。详情页比编辑页简单只做一次 SELECT然后把结果填到 Label 或 Literal 里。也可以把 Contact 数据放到 FormView 的默认模式省去手动赋值string sql SELECT * FROM Contact WHERE ContactID ContactID; DataTable dt SqlHelper.ExecuteDataTable(sql, param); FormView1.DataSource dt; FormView1.DataBind();详情页要考虑一个显示细节头像路径。如果联系人有头像页面里放一个 Image 控件路径指向 AvatarPath 字段。如果没传头像Image 显示红叉很丑判断字段是否为空再决定给一个默认头像还是直接隐藏。这个细节在很多演示时会被挑毛病。3.4 按姓名/部门/手机号模糊查询SQL 参数化写法通讯录没有搜索就等于废了一半。搜索框放在列表页顶部输入关键词点击查询GridView 重新绑定。常见做法是把查询条件拼进 SQL 的 WHERE 子句但拼法有讲究string keyword txtKeyword.Text.Trim(); string sql SELECT c.ContactID, c.Name, c.Gender, c.Mobile, c.Email, d.DeptName FROM Contact c LEFT JOIN Department d ON c.DeptID d.DeptID WHERE (c.Name LIKE kw OR c.Mobile LIKE kw OR c.Email LIKE kw) ORDER BY c.CreateTime DESC; SqlParameter param new SqlParameter(kw, % keyword %); DataTable dt SqlHelper.ExecuteDataTable(sql, param);LIKE 的模糊匹配需要前后加 %SearchText 作为参数传进去而不是直接拼接这是底线。SQL 注入不是玄学用户输入 OR 11 时如果直接拼字符串整张表就被拉出来了。参数化以后输入内容只被当成一个普通字符串数据库不会把它当作 SQL 语法执行。如果搜索条件里选了部门就再加一个 DeptID 判断。可以拼一个动态 WHERE但每个参数都要走参数化string where WHERE 11 ; if (!string.IsNullOrEmpty(keyword)) { where AND (c.Name LIKE kw OR c.Mobile LIKE kw); } if (!string.IsNullOrEmpty(deptId)) { where AND c.DeptID DeptID; }WHERE 11 的技巧是方便后面直接拼 AND实际执行时 SQL Server 优化器会忽略这个恒真条件不用担心性能。DeptID 用下拉框传值要么是数字要么是空字符串不是用户随手输入的自由文本相对安全。搜索完以后点 GridView 翻页时搜索条件会丢。如果忘了把搜索条件保存到 ViewState 或 Session用户翻到第二页看到的会是全表数据。这是通讯录开发里一个高频问题。4. 避坑排查通讯录开发里最常遇到的五个问题4.1 现象本机能跑部署到服务器就报 500本机调试一切正常发布到服务器 IIS 后页面直接 500浏览器显示“Server Error in / Application”或干脆只有“Runtime Error”。原因分两类第一Web.config 里的连接字符串指向本机 SQL Server服务器上并没有这个数据库或账号第二服务器没配置 ASP.NET 环境IIS 没注册 .NET Framework或者应用程序池选成了 Classic 模式而代码需要 Integrated 模式。解决方法是按顺序排查先看服务器上有没有 SQL Server执行数据库脚本确认连接字符串里的 Data Source 指向正确再确认 IIS 应用程序池的托管管道模式是 Integrated启动类别是 AlwaysRunning最后打开项目里的 Error 页面上线前关闭自定义错误直接在浏览器看具体异常信息。我这里一般会在 Web.config 里把 customErrors modeOff 临时放开定位到了再改回去。4.2 现象中文乱码存进去变问号新增联系人时输入“张三”列表页显示“”或者数据库里直接是问号。原因是客户端页面编码和数据库排序规则不一致。Web.config 里没配 utf-8页面发送的表单数据按 GBK 编码而 SQL Server 列类型是 NVARCHAR 或 VARCHAR排序规则又是 Chinese_PRC导致编码错位。解决方法是先统一编码。在 Web.config 的 system.web 节点里加上 globalization requestEncodingutf-8 responseEncodingutf-8 fileEncodingutf-8再把页面 meta 标签的 charset 改成 utf-8。数据库端优先用 NVARCHAR 类型存中文驱动层连接字符串里加 CharacterSetutf8如果用的是 MySQLSQL Server 一般不用加。我踩过最深的一次坑是列类型没问题但旧数据是用 VARCHAR 存的新数据用 NVARCHAR搜索时 LIKE 匹配不上最后重建表并统一机制才解决。4.3 现象GridView 翻页后点“编辑”没反应列表能正常显示翻到第 2 页点某行“编辑”或“删除”页面刷新了但没进入编辑状态或者干脆跳回第 1 页。原因是 GridView 的 PageIndexChanging 事件没有处理或者绑数据时机错了。翻页后 PageIndex 变了但 Page_Load 里 if (IsPostBack) 分支又重新绑了数据把当前页重置回第 1 页。删除和编辑事件也随之找不到对应行。解决办法是给 GridView 挂上 PageIndexChanging 事件在里面把新页码赋给 GridView1.PageIndex然后重新调用 BindData()。同时Page_Load 里的绑定语句必须包在 if (!IsPostBack) 里不能每次回传都绑。如果两个都做了还在出错检查 GridView 是否设置了 AllowPagingTrue 和 PageSize 值没开启分页就不会触发翻页事件。4.4 现象输入单引号或特殊字符直接报错在搜索框输入一个单引号页面直接报语法错误后台日志显示“字符串 后的引号不匹配”。原因是代码里用了拼接 SQL输入的单引号把 SQL 语句结构破坏了。这一类问题同时意味着 SQL 注入漏洞不只是报错这么简单。解决方法是把所有 SQL 语句改成参数化查询不允许任何用户输入直接拼进 SQL。如果旧代码有很多拼接先跑一遍搜索所有“ str ”形式的代码逐个替换。参数化的额外好处是执行计划会被 SQL Server 缓存同一语句反复执行时性能更好。看到自己的代码里出现 string sql SELECT * FROM Contact WHERE Name name 第一反应必须重写。4.5 现象头像/图片路径在子目录下 404联系人头像存了路径“upload/avatar/1.jpg”页面上 Image 控件显示红叉或 404。原因是相对路径拼错了。WebForms 页面在根目录图片路径如果写“upload/avatar/1.jpg”浏览器会按当前页面的相对路径解析如果页面在子目录下解析成了 /subdir/upload/avatar/1.jpg当然找不到。解决方法是统一用根目录绝对路径。在绑定头像路径时前面加上 ResolveUrl(~/upload/avatar/)或者存库时直接存完整路径“/upload/avatar/1.jpg”不要存相对路径和带 ../ 的写法。还有一种情况是 upload 目录没有写权限文件压根没传上去图片路径存在库了但物理文件不在解决办法是给 upload 目录开写权限并把存储路径和上传控件里的保存路径设置成一致。检查的时候先手动访问路径看文件是否真实存在再查权限不要一上来就改代码。5. 收尾进阶给通讯录加一个像样的搜索与导出5.1 搜索条件拼装从单一关键词到组合筛选第 3 章的搜索只有关键词实际用起来不够。通讯录维护到几百人的时候用户会想按“部门 姓名首字母 在职状态”组合筛。组合筛选的进阶做法是构造动态查询条件列表而不是一条长 SQL 拼到底。var conditions new Liststring(); var parameters new ListSqlParameter(); if (!string.IsNullOrEmpty(keyword)) { conditions.Add((c.Name LIKE kw OR c.Mobile LIKE kw)); parameters.Add(new SqlParameter(kw, % keyword %)); } if (!string.IsNullOrEmpty(deptId)) { conditions.Add(c.DeptID DeptID); parameters.Add(new SqlParameter(DeptID, deptId)); }最后把 conditions 用 AND 连接拼到主 SQL 上。这样的好处是条件多时代码不混乱参数和条件始终绑定在一起不会出现条件里用了 kw 但忘了加参数的情况。查询时把结果存到 ViewState导出时直接复用不用再查一遍。5.2 导出 Excel用后端生成 CSV 而不是引第三方组件通讯录导出 Excel 是高频需求但很多人一上来就引 NPOI 或 EPPlus然后卡在组件版本、权限、服务器 Office 环境上。最稳的做法是生成 CSV 文件Excel 完全能打开。Response.Clear(); Response.Charset utf-8; Response.ContentEncoding System.Text.Encoding.GetEncoding(GB2312); Response.AddHeader(Content-Disposition, attachment;filenamecontacts.csv); Response.Write(姓名,性别,手机,邮箱,部门\r\n); foreach (DataRow row in dt.Rows) { Response.Write(${row[Name]},{row[Gender]},{row[Mobile]},{row[Email]},{row[DeptName]}\r\n); } Response.End();注意 Content-Disposition 用了 attachment这是弹下载而不是在浏览器里打开。编码用 GB2312 是因为 Excel 打开 UTF-8 编码的 CSV 会乱码这是国内做通讯录导出最常见的坑。如果联系人的姓名或备注里本身含逗号CSV 格式会断列简单处理是替换掉逗号更稳妥的是用双引号包裹字段。导出几百条记录时 Response.End() 没问题上万条就不要用这种方式了会撑爆内存到时改成生成文件再下载。5.3 一个小习惯发布前强制走一遍的检查从拿到这份源码到最后发布我给自己定了一个固定流程。先查 Web.config 有没有把连接字符串写死再查所有 SQL 是否参数化接着在 IIS 上跑一遍新增、编辑、删除、搜索、翻页五个核心流程每一个步骤切换用户身份重新登录一次。如果页面报 500先看事件查看器不要瞎改代码。这套流程我第一次做的时候也觉得繁琐直到某一次漏了连接字符串上线后销售反馈打不开通讯录我才知道事前多花五分钟能省多少事。希望这套步骤对你也有用。本文还有配套的精品资源点击获取
RELATED

相关推荐

一文看懂 9 大 AI 模型:原理、落地与适用企业

一文看懂 9 大 AI 模型:原理、落地与适用企业

如今人工智能已经不再只是会聊天的大语言模型,而是由向量模型、重排模型、语音模型、视觉模型、文生图、文生视频、图生视频等一系列专业模型共同组成的能力矩阵。不同模型各司其职,组合起来才能实现图文音视频的理解、检索、生成,下面逐一拆…

📅 2026/10/11 9:36:17
中药学论文从文献到答辩:我会这样搭配 AI 助手 [特殊字符][特殊字符]‍[特殊字符][特殊字符]

中药学论文从文献到答辩:我会这样搭配 AI 助手 [特殊字符][特殊字符]‍[特殊字符][特殊字符]

先把场景说具体:假设你是医学 / 中药学类 / 中药学专业学生,正在做毕业论文,题目类似 “黄芪—丹参药对干预糖尿病心肌病的作用机制研究”,可能结合网络药理学、动物实验或文献研究。 这类题目很典型,也确实容易让人头…

📅 2026/10/11 9:36:17
起重司索信号工考试新题库 常考题型 + 答案解析助力一次过

起重司索信号工考试新题库 常考题型 + 答案解析助力一次过

干起重司索信号工这行,不少师傅技术过硬,一上考场却发怵。原因不复杂:平时靠经验干活,真到做题时,法规条文、安全距离、指挥信号这些细节记不准,加上工作忙、复习时间碎,翻书又抓不住重点。我们…

📅 2026/10/11 9:36:17
MORE NEWS

更多资讯

📰

Docker本地部署Home Assistant:从零搭建私有智能家居平台

如果你最近在研究智能家居,大概率会反复听到一个名字:Home Assistant,以及一个动词:Docker 部署。这两个词凑在一起,基本就是当前自托管智能家居最主流的一套玩法——HA 负责把不同品牌、不同协议的设备拉到同一个平台…

📰

有源配电网SOP规划:为何必须考虑DG时序特性与MINLP建模

简介:本资源是一套面向电力系统方向毕业设计与科研实践的MATLAB仿真代码包,聚焦有源配电网中智能软开关(SOP)的规划建模与求解,适用于电气工程、新能源并网及智能配网研究领域的高年级本科生与研究生。资源完整复现了知…

📰

屏幕故障不用怕:黑屏、花屏、闪屏的定位排查全流程

屏幕出问题的时候,大多数人第一反应是“显示器坏了”或者“显卡挂了”。我经手过不少机器,真正一上来就换硬件解决的,其实只占一小部分。黑屏、花屏、闪屏这类现象,背后的原因可能藏在信号线、供电、驱动、系统设置,甚…

📰

ApplyPilot六阶段流水线全景解析:从职位发现到自动提交的完整工作原理

【免费下载链接】ApplyPilot AI agent that applies to jobs for you. Any site. Any form. 项目地址: https://gitcode.com/gh_mirrors/ap/ApplyPilot 点击查看 免费下载 ApplyPilot 是一款开源 AI 求职代理(job application agent)&#x…

📰

AI Agent工具调用模块和MCP:把MCP endpoint改到TaoToken的配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

📰

单片机计算机毕设之基于 51 单片机的小型燃气机房 CO 与温湿度阈值可调告警装置设计 基于物联网的食堂后厨一氧化碳泄漏远程监测智能排风系统设计(030124)

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于嵌入式单片机,Java、小程序技术领域和毕业项目实战 ✌️…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬