当前位置: 首页 > news >正文

零框架PHP学生成绩系统:学生查分+教师录分+完整SQL脚本+操作视频

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

简介:纯原生PHP写的学生成绩管理程序,不依赖Laravel、ThinkPHP等任何框架,也不用Composer、路由或模板引擎,只靠基础PHP+MySQL+HTML+CSS+JS就能跑起来。系统分学生和教师两个入口:学生登录后能看自己各科成绩、改密码和基本信息;教师登录后可以增删改查学生档案、批量录成绩、单条修改分数、重置学生密码。所有PHP文件都是手写逻辑,比如add_student_submit.php处理新增学生,update_mark_submit.php更新分数,check_session_login.php做登录校验,代码带中文注释,结构一目了然。压缩包里有全部前端页面(index.html、style.css、swiper.min.css等)、后端PHP脚本(共20多个核心文件)、建库建表的SQL文件(直接phpMyAdmin导入就行)、Word版图文说明文档、项目结构图,还有一个实操演示视频(php学生管理系统.mov),从环境部署到功能操作全涵盖。适合PHP初学者练手、课程设计参考或快速搭建轻量教学管理后台。

1. 为什么“零框架”才是新手学PHP的黄金起点?

刚接触PHP的新手,常被Laravel的Artisan命令、ThinkPHP的路由定义、Composer的依赖管理绕得晕头转向。我带过十几届学生做课程设计,发现一个铁律:90%的人卡在“环境配不起来”和“不知道哪段代码管哪个功能”上,而不是逻辑本身。这套“零框架PHP学生成绩系统”,就是我用三年时间打磨出来的“去幻觉教学工具”——它不炫技,不堆砌概念,只用最原始的<?php ?>标签、$_POST接收、mysqli_query()执行SQL,把Web开发最底层的“请求-处理-响应”链条,像拆解自行车一样摊开给你看。

核心关键词“原生PHP”在这里不是怀旧,而是精准的教学策略。比如学生登录后查看成绩,整个流程只有三步:index.php表单提交 →check_session_login.php验证账号密码并启动session →stuinfo.php从数据库查出该学生所有科目成绩并渲染HTML表格。没有中间件拦截、没有路由映射、没有自动注入,你打开任何一个PHP文件,第一行就能看到<?php session_start();,最后一行就是</body>闭合标签。这种“所见即所得”的结构,让初学者第一次真正理解“为什么改了query.php里的SQL语句,页面上的数据就变了”。

更关键的是,“MySQL成绩录入”这个功能点,在框架里可能要写Model、Controller、View三层,而在这里,它浓缩成一个insert_mark.php文件:前端用HTML表格批量输入学号、科目、分数,后端用foreach($_POST['student_id'] as $key => $id)循环插入,连预处理语句都用最直白的"INSERT INTO scores (student_id, subject, score) VALUES ('$id', '$subject[$key]', '$score[$key]')"(当然,实际部署前我会教你怎么加mysqli_real_escape_string()防注入)。这不是鼓励写不安全代码,而是先建立“数据从键盘敲进去,最终存进数据库”的完整心智模型——就像学骑车先不装辅助轮,摔几次才记得重心在哪。

这套系统真正解决的是“学习断层”问题。很多教程讲完echo "Hello World"就跳到Laravel,中间缺了最关键的“如何把用户填的表单变成数据库里的一行记录”这一课。而这里的add_student_submit.php,就是这堂课的教案:它接收$_POST['name']$_POST['class'],拼接SQL,执行mysqli_query(),再用header("Location: management.php?msg=success")跳转并传参提示。20多个PHP文件,每个都是一个独立的知识切片,你可以单独打开modpwd.php研究密码修改逻辑,不用先读懂整个框架的生命周期。

提示:别急着批评“没用预处理语句”。对新手而言,先理解$sql = "UPDATE students SET password='$new_pwd' WHERE id=$uid"这行代码如何把变量塞进SQL,比背诵PDO参数绑定语法重要十倍。等他亲手改出三次SQL语法错误,自然会问:“有没有更安全的方法?”——那时,你再教mysqli_prepare(),他眼睛是亮的。

2. 系统架构与角色权限设计:两个入口,一套底层逻辑

很多人以为“学生查分”和“教师录分”是两套独立系统,其实它们共享同一套数据库和核心逻辑,区别仅在于会话校验规则页面渲染分支。这种设计不是偷懒,而是刻意展示Web权限控制的本质:不是靠框架的@auth装饰器,而是靠$_SESSION['role']这个变量在每页开头做判断。

2.1 双入口的底层真相

系统有两个首页入口:index.html(学生登录页)和teacher.php(教师登录页),但它们最终都指向同一个认证脚本check_session_login.php。这个文件干了三件事:
1. 连接MySQL数据库($conn = mysqli_connect($host, $user, $pwd, $db)
2. 根据登录页传来的$_POST['role']参数,决定查哪张表:if($_POST['role']=='student') $table='students'; else $table='teachers';
3. 执行查询后,用$_SESSION['role'] = $_POST['role']; $_SESSION['id'] = $row['id'];存储身份信息

这意味着,你完全可以在index.html里把<input type="hidden" name="role" value="teacher">,然后用学生账号密码登录教师后台——当然,系统后续会在management.php里用if($_SESSION['role']!='teacher') die('无权访问');拦住。这种“明面上分离,底层统一”的设计,让新手一眼看懂权限控制的物理实现:它就是几个if判断和$_SESSION变量的组合。

2.2 数据库设计:一张表解决所有关系

整个系统只用4张表,却覆盖了学生档案、成绩、教师、密码重置需求:
-students表:id(主键),name,class,phone,password,created_at
-scores表:id,student_id(外键),subject,score,updated_at
-teachers表:id,username,password,real_name,created_at
-pwd_reset_tokens表:id,user_id,token,expires_at

重点说说scores表的设计巧思。它没有为每科设单独字段(如math_score,english_score),而是用“行”来存储科目。这样做的好处是:新增科目(比如加一门“人工智能导论”)无需ALTER TABLE,只要往scores表插新记录就行。学生查分时,stuinfo.php执行SELECT subject, score FROM scores WHERE student_id = ?,结果直接循环输出;教师录分时,insert_mark.php接收$_POST['subject']数组,循环插入多行。这种设计让新手第一次理解“范式化”的实际价值——不是为了考试,而是为了未来少改几行代码。

2.3 文件职责划分:每个PHP文件只做一件事

压缩包里20多个PHP文件,命名规则全是动词+名词(add_student_submit.phpupdate_mark_submit.php),这是刻意为之的“单一职责”训练。以update_mark.php为例,它只做一件事:根据URL参数?id=5查出ID为5的成绩记录,渲染一个带预填充值的HTML表单;而真正的更新操作,由update_mark_submit.php完成——它接收表单POST,执行UPDATE SQL,然后跳转回management.php。这种拆分强迫新手思考:“显示页面”和“处理数据”必须分离,否则容易写出把HTML和SQL混在一起的“意大利面代码”。

注意:check_session_login.php是唯一被多个入口调用的“公共函数”,但它不渲染任何HTML,只负责认证和跳转。这种复用方式,比教新手写include 'config.php'更直观——你看得见它被谁调用、返回什么结果。

3. 核心功能实操详解:从建库到批量录分的完整链路

现在我们动手跑通整个流程。假设你有一台装了XAMPP的Windows电脑(Mac用户用MAMP,Linux用户用LAMP),以下是真实操作步骤,不是理论描述。

3.1 数据库一键导入:三分钟建好所有表

打开phpMyAdmin(通常是http://localhost/phpmyadmin),点击左上角“新建”,输入数据库名student_system,排序规则选utf8mb4_general_ci(支持中文和emoji)。接着点击“导入”,选择压缩包里的student_system.sql文件。这个SQL脚本包含三部分:

-- 1. 创建students表 CREATE TABLE `students` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(50) NOT NULL, `class` varchar(20) NOT NULL, `phone` varchar(15) DEFAULT NULL, `password` varchar(255) NOT NULL, `created_at` timestamp DEFAULT CURRENT_TIMESTAMP, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; -- 2. 插入测试数据(教师账号) INSERT INTO `teachers` (`username`, `password`, `real_name`) VALUES ('admin', '$2y$10$9Xz...hash...', '张老师'); -- 3. 添加外键约束(确保成绩表student_id存在) ALTER TABLE `scores` ADD CONSTRAINT `fk_student_id` FOREIGN KEY (`student_id`) REFERENCES `students`(`id`) ON DELETE CASCADE;

执行后,你会看到4张表出现在左侧列表。特别注意teachers表里的密码是bcrypt加密的($2y$10$...开头),这是teachermodpwd.php里用password_hash()生成的。如果你忘了初始密码,可以直接执行UPDATE teachers SET password=password_hash('123456', PASSWORD_DEFAULT) WHERE username='admin';重置。

3.2 学生查分全流程:从登录到看到自己的数学92分

  1. 浏览器打开http://localhost/student_system/index.html(注意:不是PHP文件,是纯静态HTML)
  2. 输入学生账号stu001,密码123456,点击登录 → 跳转到check_session_login.php
  3. 该脚本验证通过后,执行header("Location: stuinfo.php");,此时浏览器地址栏变成http://localhost/student_system/stuinfo.php
  4. stuinfo.php开始执行:先检查if(!isset($_SESSION['id']) || $_SESSION['role']!='student') die('请先登录');,再连接数据库,执行:
    php $sql = "SELECT s.name, s.class, sc.subject, sc.score FROM students s JOIN scores sc ON s.id = sc.student_id WHERE s.id = ".$_SESSION['id']; $result = mysqli_query($conn, $sql);
  5. 循环$result,用<tr><td><?php echo $row['subject']; ?></td><td><?php echo $row['score']; ?></td></tr>输出表格

你会发现,stuinfo.php里没有任何JavaScript,所有交互靠PHP完成。如果学生想改密码,点击页面上的“修改密码”链接,跳转到stu_update_info.php,这个页面会显示一个表单,提交后由stu_update_info_submit.php处理——整个过程像流水线,每个环节都清晰可见。

3.3 教师批量录分:三步搞定50个学生的期中成绩

这才是体现系统实用性的核心场景。传统做法是一个个点开学生编辑页,手动输分数;而这里用HTML表格实现批量操作:

  1. 教师登录后进入management.php,点击“批量录分”按钮,跳转到insert_mark.php
  2. insert_mark.php生成一个动态表格:
    ```html

    学号姓名数学英语物理

3. `insert_mark_submit.php`接收数据,循环插入:php
for($i=0; $i<count($_POST[‘student_id’]); $i++) {
$sid = $_POST[‘student_id’][$i];
// 分别插入三科成绩
mysqli_query($conn, “INSERT INTO scores (student_id, subject, score) VALUES ($sid, ‘数学’, {$_POST[‘math_score’][$i]})”);
mysqli_query($conn, “INSERT INTO scores (student_id, subject, score) VALUES ($sid, ‘英语’, {$_POST[‘english_score’][$i]})”);
mysqli_query($conn, “INSERT INTO scores (student_id, subject, score) VALUES ($sid, ‘物理’, {$_POST[‘physics_score’][$i]})”);
}
```

实测下来,录50个学生3科成绩,填表+提交不到2分钟。这个功能的价值在于:它用最基础的HTML表单和PHP循环,解决了教育场景中最频繁的操作痛点,而且代码一目了然——新手能立刻模仿着改成“语文、化学、生物”四科。

4. 安全加固与生产部署:从实验室到真实环境的必经之路

这套系统在教学环境中运行完美,但若要放到学校内网甚至公网,必须补上几块“安全垫”。这不是可选项,而是每个PHP开发者的职业本能。

4.1 密码存储:从明文到bcrypt的升级路径

原始代码里,add_student_submit.phpmd5($_POST['password'])存密码,这在2024年是严重安全隐患。正确做法是替换为password_hash()

// 替换前(危险!) $password_hash = md5($_POST['password']); // 替换后(推荐) $password_hash = password_hash($_POST['password'], PASSWORD_DEFAULT);

同时,登录验证也要改:

// 替换前 if($row['password'] == md5($_POST['pwd'])) { /* 登录成功 */ } // 替换后 if(password_verify($_POST['pwd'], $row['password'])) { /* 登录成功 */ }

PASSWORD_DEFAULT目前是bcrypt,未来PHP升级会自动切换到更强算法,无需改代码。这个改动只需5分钟,却能让系统抵御彩虹表攻击。

4.2 SQL注入防护:三招构建防火墙

原始代码大量使用字符串拼接SQL,如"SELECT * FROM students WHERE id = ".$_GET['id']。修复方案分三级:
-初级(立即生效):用mysqli_real_escape_string()过滤所有用户输入
php $safe_id = mysqli_real_escape_string($conn, $_GET['id']); $sql = "SELECT * FROM students WHERE id = $safe_id";
-中级(推荐):改用预处理语句(Prepared Statements)
php $stmt = mysqli_prepare($conn, "SELECT * FROM students WHERE id = ?"); mysqli_stmt_bind_param($stmt, "i", $_GET['id']); // "i"表示整数 mysqli_stmt_execute($stmt);
-高级(长期主义):在check_session_login.php开头添加全局过滤
php function sanitize_input($data) { $data = trim($data); $data = stripslashes($data); $data = htmlspecialchars($data); return $data; } $_POST = array_map('sanitize_input', $_POST); $_GET = array_map('sanitize_input', $_GET);

4.3 会话安全:防止Session Fixation和劫持

原始代码的session_start()没有配置安全参数。生产环境必须加上:

// 在所有PHP文件最开头(比session_start()还早) ini_set('session.cookie_httponly', 1); // 防止JS读取cookie ini_set('session.cookie_secure', 1); // 仅HTTPS传输(部署到https时启用) ini_set('session.use_strict_mode', 1); // 防止Session Fixation session_start(); // 登录成功后立即regenerate ID if($login_success) { session_regenerate_id(true); // 销毁旧session }

4.4 部署 checklist:上线前必须核对的7件事

检查项操作方法为什么重要
1. 关闭错误报告php.ini中设display_errors = Off,或在PHP文件开头加error_reporting(0);防止数据库密码等敏感信息暴露在错误页面上
2. 限制目录浏览在项目根目录放.htaccess文件,内容:Options -Indexes避免黑客直接看到/uploads/目录下的文件列表
3. 移除调试文件删除压缩包里的.~介绍文档.docx.gitignore.inscode等临时文件减少攻击面,避免泄露编辑器配置信息
4. 修改默认账号执行SQL:UPDATE teachers SET username='your_admin', password=password_hash('your_strong_pwd', PASSWORD_DEFAULT) WHERE id=1;防止使用默认admin/123456被暴力破解
5. 设置文件权限Linux下执行:chmod 644 *.php *.html *.csschmod 755 uploads/防止PHP文件被意外写入恶意代码
6. 数据库连接隔离$host,$user,$pwd等信息移到config.php,并设chmod 600 config.php避免数据库凭据硬编码在每个PHP文件里
7. 启用HTTPS重定向.htaccess中添加:
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
强制加密传输,防止登录凭证被嗅探

实操心得:我在某中学部署时,曾因忘记第1项,导致mysqli_connect()失败时直接打印出mysql_user:root, mysql_pwd:123456在页面上。后来每次上线前,都用这段代码快速检测:
php <?php if(ini_get('display_errors')) { die('警告:display_errors未关闭,请修改php.ini'); } echo "安全检查通过"; ?>

5. 常见问题排查与二次开发指南:那些文档里不会写的坑

即使按文档一步步操作,新手仍会遇到一些“意料之外”的问题。这些不是Bug,而是PHP运行环境的特性。我把三年来收集的高频问题整理成速查表,并附上独家解决方案。

5.1 典型问题速查表

问题现象可能原因解决方案经验备注
登录后空白页,URL停留在check_session_login.phpsession_start()前有空格或BOM头用Notepad++打开所有PHP文件 → 编码 → 转为UTF-8无BOM格式Windows记事本保存的PHP文件自带BOM,会导致headers already sent错误
stuinfo.php显示“未登录”,但明明刚输过账号密码session_start()未在每个PHP文件开头调用检查stuinfo.php第一行是否为<?php session_start();,确认没有空行或空格PHP的session机制要求每个使用$_SESSION的文件都必须先session_start()
批量录分时,只插入了第一个学生的成绩for循环中SQL语句缺少分号或引号不匹配insert_mark_submit.php中临时加echo $sql; die();,查看生成的SQL语句新手常犯错误:VALUES ($sid, '数学', $_POST['math_score'][$i])漏了$符号
修改学生资料后,页面跳转到management.php?msg=success但没显示提示management.php里没有处理$_GET['msg']的代码management.php的HTML顶部添加:
<?php if(isset($_GET['msg']) && $_GET['msg']=='success'): ?><div class="alert">操作成功!</div><?php endif; ?>
原始代码的提示逻辑分散在各处,建议统一用CSS类.alert控制样式
phpMyAdmin导入SQL时报错“#1046 - No database selected”没有先创建数据库或SQL文件里缺少USE student_system;在SQL文件最开头添加CREATE DATABASE IF NOT EXISTS student_system CHARACTER SET utf8mb4; USE student_system;大多数新手以为导入SQL会自动建库,其实需要手动创建或SQL里声明

5.2 二次开发实战:给系统加一个“成绩统计”功能

很多老师需要知道班级平均分、最高分。原始系统没这个功能,但扩展起来只要3个文件:

  1. statistics.php(前端页面)
    management.php里加个链接<a href="statistics.php">成绩统计</a>,然后创建statistics.php
    ```php
成绩统计

各科成绩统计

科目平均分最高分最低分及格率
=60 THEN 1 ELSE 0 END) pass FROM scores WHERE subject='$sub'"; $res = mysqli_query($conn, $sql); $row = mysqli_fetch_assoc($res); $pass_rate = $row['total'] ? round($row['pass']/$row['total']*100,1) : 0; echo "
$sub".round($row['avg'],2)."{$row['max']}{$row['min']}{$pass_rate}%
"; } ?>

```

  1. export_csv.php(导出Excel)
    statistics.php里加个按钮,点击后执行:
    ```php

```

  1. config.php(统一配置)
    创建config.php,把数据库连接信息集中管理:
    ```php

`` 然后在所有PHP文件开头改为require_once ‘config.php’;`

这个扩展案例的价值在于:它展示了如何在不破坏原有结构的前提下,用最小成本增加新功能。所有新增代码都遵循原始系统的风格——没有框架、没有复杂依赖,就是纯粹的PHP+MySQL。

6. 教学价值再挖掘:如何用这套系统讲透PHP核心概念

作为一线讲师,我发现这套系统是绝佳的“概念锚点”。当学生抽象地学“面向对象”时,你让他看management.php里重复出现的mysqli_connect(),他立刻明白“为什么要封装成函数”;当他困惑“什么是MVC”时,你指着update_mark.php(View)、update_mark_submit.php(Controller)、scores表(Model),他豁然开朗。

6.1 用真实代码讲解PHP核心机制

  • 超全局变量:让学生在check_session_login.php里打断点,观察$_POST如何接收表单数据,$_SESSION如何跨页面传递用户ID;
  • 文件包含:把mysqli_connect()提取到db_connect.php,演示require_once如何避免重复连接;
  • 表单处理:对比stu_update_info.php(显示表单)和stu_update_info_submit.php(处理提交),讲解HTTP GET/POST区别;
  • 错误处理:故意把mysqli_query()的SQL写错,在add_student_submit.php里加or die(mysqli_error($conn)),让学生亲眼看到错误信息。

6.2 课程设计进阶任务清单

给学生布置渐进式任务,从模仿到创新:
1.基础任务:修改style.css,把蓝色主题改成绿色(考察HTML/CSS基础)
2.逻辑任务:在scores表里加semester字段(如“2024春”),修改所有成绩相关PHP文件,支持按学期筛选(考察SQL和PHP逻辑)
3.安全任务:将所有md5()替换为password_hash(),并修改登录验证逻辑(考察安全意识)
4.扩展任务:增加“家长查看”角色,要求家长只能看自己孩子的成绩,且不能修改(考察权限控制深度)
5.综合任务:用原生JavaScript重写stuinfo.php的成绩排序功能(点击表头按分数升序/降序),不刷新页面(考察前后端协作)

最后分享一个小技巧:我在课堂上会让学生用手机扫描php学生管理系统.mov视频里的二维码,直接跳转到GitHub仓库(已脱敏处理)。仓库里不仅有源码,还有每个版本的commit记录——比如feat: add statistics pagefix: prevent sql injection in update_mark_submit.php。学生能看到真实的开发迭代过程,理解“写代码”不是一蹴而就,而是不断修复、优化、重构的旅程。这套系统真正的价值,不在于它多完美,而在于它足够真实,真实到能让新手第一次触摸到软件开发的温度。

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

简介:纯原生PHP写的学生成绩管理程序,不依赖Laravel、ThinkPHP等任何框架,也不用Composer、路由或模板引擎,只靠基础PHP+MySQL+HTML+CSS+JS就能跑起来。系统分学生和教师两个入口:学生登录后能看自己各科成绩、改密码和基本信息;教师登录后可以增删改查学生档案、批量录成绩、单条修改分数、重置学生密码。所有PHP文件都是手写逻辑,比如add_student_submit.php处理新增学生,update_mark_submit.php更新分数,check_session_login.php做登录校验,代码带中文注释,结构一目了然。压缩包里有全部前端页面(index.html、style.css、swiper.min.css等)、后端PHP脚本(共20多个核心文件)、建库建表的SQL文件(直接phpMyAdmin导入就行)、Word版图文说明文档、项目结构图,还有一个实操演示视频(php学生管理系统.mov),从环境部署到功能操作全涵盖。适合PHP初学者练手、课程设计参考或快速搭建轻量教学管理后台。


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

http://www.jsqmd.com/news/960946/

相关文章:

  • 医疗生成式AI的隐私保护分层防御架构
  • 终极AMD Ryzen调试工具:5分钟掌握硬件调优秘籍
  • 2026 放热焊接模具优质厂家哪家好:五大实力厂商横向测评优选指南
  • 基于51单片机的豆浆机智能控制仿真工程(Proteus电路+Keil源码)
  • Windows任务栏透明美化终极方案:TranslucentTB完全解析
  • 从‘共轭对称’到实信号:用Matlab IFFT生成OFDM时域波形的保姆级指南
  • 佛山禅城区黄金回收行情:当前金价944元,回收价这样算才不亏 - 黄金上门回收
  • 飞牛 NAS 用 Docker 搭 Navidrome:把本地音乐库变成随时能听的私有歌单
  • Elsevier投稿避坑:你的cas-dc模板作者信息和参考文献排序搞对了吗?
  • MQTTBox vs MQTT.fx:手把手教你选对物联网调试工具(含WebSocket、负载测试对比)
  • V-JEPA在面部表情识别中的创新应用与性能突破
  • WinForm日历控件源码包:支持考勤状态着色、时间段高亮与多视图切换
  • 2025国际数据人才生存指南:LLM工程化与签证策略实战
  • Blueking Lite更新:新增多类功能,满足运维管理多样需求
  • 【智能工作成熟度诊断工具】:3分钟定位你团队的AI整合卡点(含12维度自评矩阵,仅限前500名领取)
  • 2026 漳平厨卫楼顶地下室漏水测评,吉修匠五星高分稳居榜首 - 吉修匠
  • 承德 11 区县全套文案(全区统一固定标题:2026 上海防水补漏 + 瓷砖空鼓修复推荐,苏易修缮本土直营,老城老房漏水、瓷砖翘边拱起就近微创修) - 苏易修缮
  • 保姆级教程:用树莓派4B+MJPG-streamer搭建家庭安防摄像头(含FRP内网穿透)
  • E-Hentai下载器:无需积分的画廊打包下载神器
  • 为什么TSV电镀面铜越薄越好?
  • WinForms点云显示控件:基于SharpGL的即用型C#三维渲染组件
  • 用Python和OpenCV实战霍夫圆检测:从Canny边缘到圆心定位的完整流程
  • Ubuntu下串口调试,除了PuTTY和CuteCom,这3个宝藏工具也值得一试
  • 从“单词计数”到实战:手把手教你用Java写一个MapReduce程序处理日志文件
  • 上班用250排量踏板推荐 - 行业深度观察
  • 曲靖本地家电维修师傅电话推荐|本地维修家电|欧米到家统一报修 - 欧米到家
  • 2026报考必看:文山学院优质专业盘点,解锁适配就业新方向 - 品牌2026
  • 终极指南:tcc-g15 - 完全掌控你的Dell G15散热系统
  • 社区养老丨2026年物业企业的新赛道机会
  • Lumafly:空洞骑士模组管理的终极指南,让模组安装变得简单又高效!