<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0"
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:atom="http://www.w3.org/2005/Atom"
>
<channel>
<title><![CDATA[谪仙阁-记录美好瞬间]]></title> 
<atom:link href="https://zhexiange.com/rss.php" rel="self" type="application/rss+xml" />
<description><![CDATA[分享技术笔记、生化碎片]]></description>
<link>https://zhexiange.com/</link>
<language>zh-cn</language>
<generator>emlog</generator>

<item>
    <title>1</title>
    <link>https://zhexiange.com/43.html</link>
    <description><![CDATA[<h1>《印象阜宁 · 家乡介绍》网站 — 项目报告（详细讲解版）</h1>
<blockquote>
<p><strong>适用对象</strong>：刚学 Web 的同学也能读懂的开发说明 + 代码导读。<br />
<strong>填写区</strong>：下表请补全 <strong>学校、课程、姓名、学号、分工</strong>；答辩前在「截图」「心得」处按教师要求粘贴图片与文字。</p>
</blockquote>
<table>
<thead>
<tr>
<th>项目</th>
<th>填写</th>
</tr>
</thead>
<tbody>
<tr>
<td>课程名称</td>
<td></td>
</tr>
<tr>
<td>项目名称</td>
<td>印象阜宁 · 家乡介绍（静态多页面网站）</td>
</tr>
<tr>
<td>成员一（姓名 / 学号）</td>
<td>李濠宇 /</td>
</tr>
<tr>
<td>成员二（姓名 / 学号）</td>
<td>吴依芠 /</td>
</tr>
<tr>
<td>完成时间</td>
<td></td>
</tr>
</tbody>
</table>
<hr />
<h2>一、项目概述（一分钟读懂）</h2>
<p>这是一个<strong>纯前端、不需要服务器数据库</strong>的小型网站，用来介绍江苏省盐城市<strong>阜宁县</strong>：地理县情、特产、风俗、人文，以及<strong>新四军铁军</strong>相关的红色记忆。</p>
<ul>
<li><strong>技术栈</strong>：HTML5（页面结构）+ CSS3（版式与配色）+ 少量原生 JavaScript（手机菜单 + 滚动淡入动画）。</li>
<li><strong>页面数量</strong>：5 个——<code>index.html</code>（首页）、<code>overview.html</code>（概况）、<code>specialties.html</code>（特产）、<code>customs.html</code>（风俗）、<code>culture.html</code>（人文）。</li>
<li><strong>特点</strong>：所有页面共用同一套样式 <code>css/style.css</code> 和脚本 <code>js/main.js</code>，换页像翻书一样通过超链接跳转，<strong>没有</strong>登录、购物车、后台接口。</li>
</ul>
<hr />
<h2>二、文件夹里有什么（给小白看的「地图」）</h2>
<p>把项目文件夹想成一本杂志：<strong>每一页是一个 HTML 文件</strong>，<strong>统一的排版规则写在 CSS 里</strong>，<strong>一点点交互写在 JS 里</strong>，<strong>插图放在 images 里</strong>。</p>
<pre><code>李濠宇 吴依芠 web大作业/
├── index.html          ← 首页（大图开场 + 导览 + 铁军板块）
├── overview.html       ← 概况（表格、区划、地图、历史）
├── specialties.html    ← 特产（四张图文卡片）
├── customs.html        ← 风俗（四张图文卡片）
├── culture.html        ← 人文（时间线 + 配图）
├── css/
│   └── style.css       ← 全站样式（颜色、字体、手机适配）
├── js/
│   └── main.js         ← 汉堡菜单 + 滚动显现
├── images/             ← 横幅、地图、纪念碑、各页配图（需与本站引用路径一致）
└── 项目报告.md         ← 本说明文档</code></pre>
<p><strong>为什么要分这么多 HTML？</strong><br />
老师课上常叫「多页面站点」：每个主题单独成页，地址栏会变（例如从 <code>index.html</code> 点到 <code>overview.html</code>），利于做课堂演示和内容分工。</p>
<hr />
<h2>三、网站是怎么「开发」出来的（推荐步骤）</h2>
<p>下面是一套<strong>从零做完同款站点</strong>的思路，写报告时也可以当成「开发流程」叙述。</p>
<ol>
<li>
<p><strong>定栏目与文案</strong><br />
先列出：首页要点、概况里要哪些数据、特产/风俗各写几条、人文按时间还是按主题——避免写到一半大改结构。</p>
</li>
<li>
<p><strong>画简单线框（可用纸笔）</strong><br />
每页：顶栏放哪些链接？正文是「大标题 + 段落」还是「卡片网格」？手机上是单列还是汉堡菜单？线框越简单越好，主要是<strong>定区块顺序</strong>。</p>
</li>
<li>
<p><strong>先做一版「能点的骨架」</strong><br />
用 HTML 写出 <code>header</code>（顶栏）、<code>main</code>（主体）、<code>footer</code>（页脚），链接互相指到五个文件，<strong>暂时不追求好看</strong>，能跳转即可。</p>
</li>
<li>
<p><strong>抽出公共部分，接 CSS</strong><br />
五页顶栏结构尽量一致，只在当前页给对应 <code>&lt;a&gt;</code> 加 <code>class="active"</code> 表示「你在这一页」。然后写 <code>style.css</code>：颜色、间距、字体、栅格。</p>
</li>
<li>
<p><strong>做响应式</strong><br />
大屏幕导航横排；<strong>窄屏</strong>（如宽度小于 768px）隐藏横排、显示三条横线的<strong>汉堡按钮</strong>，点开出现下拉菜单——这些规则都在 <code>style.css</code> 底部的 <code>@media</code> 里。</p>
</li>
<li>
<p><strong>加少量 JS</strong><br />
用 <code>main.js</code> 监听按钮点击、切换菜单 class；再用 <code>IntersectionObserver</code> 给带 <code>fade-in</code> 的元素滚动到可视区时加 <code>visible</code>，配合 CSS 做淡出/上移效果。</p>
</li>
<li>
<p><strong>素材与自检</strong><br />
图片放进 <code>images/</code>，HTML 里 <code>src</code> 路径要和真实文件名、后缀（<code>.jpg</code> / <code>.jpeg</code> / <code>.png</code>）一致。用手机模式或真机看一下导航、表格横向滚动是否正常。</p>
</li>
</ol>
<hr />
<h2>四、HTML 结构讲解（共性 + 各页差异）</h2>
<h3>4.1 每一页都差不多的「三段式」</h3>
<p>打开任意一个 <code>.html</code>，大致都是：</p>
<ol>
<li><strong><code>&lt;head&gt;</code></strong>：写页面标题 <code>&lt;title&gt;</code>、字符集 UTF-8、<strong>手机适配</strong> <code>viewport</code>、引入 Google 字体和 <code>css/style.css</code>。</li>
<li><strong><code>&lt;body&gt;</code></strong>：  
<ul>
<li><strong><code>&lt;header class="site-header"&gt;</code></strong>：品牌 Logo 文字、汉堡按钮、<code>&lt;nav class="nav-main"&gt;</code> 里五个 <code>&lt;a href="..."&gt;</code>。当前页给对应链接加 <code>class="active"</code>。  </li>
<li><strong><code>&lt;main&gt;</code></strong>：这一页独有的标题、段落、表格、卡片等。  </li>
<li><strong><code>&lt;footer class="site-footer"&gt;</code></strong>：页脚两行说明。  </li>
</ul></li>
<li><strong>底部 <code>&lt;script src="js/main.js"&gt;</code></strong>：在所有内容后面加载，保证要先有 DOM 再执行脚本。</li>
</ol>
<p><strong>小白提示</strong>：<code>&lt;a href="overview.html"&gt;</code> 这种是<strong>相对路径</strong>——浏览器会以「当前 HTML 所在文件夹」为基准找 <code>overview.html</code>，所以五个文件要放在同一层目录，不要随意挪到子文件夹而不改路径。</p>
<h3>4.2 首页 <code>index.html</code> 在干什么</h3>
<ul>
<li><strong>Hero 区</strong>：<code>&lt;section class="hero"&gt;</code> 里有一块全宽背景（CSS 用 <code>hero-bg</code> 引用 <code>images/banner.png</code>），上面叠加大标题、副标题、两个按钮链到概况/特产。</li>
<li><strong>走进阜宁</strong>：两栏布局 <code>two-col</code>，一边是文字，一边是 <code>quick-links</code> 四个快速入口。</li>
<li><strong>铁军板块</strong>：<code>section-iron</code> + <code>iron-panel</code>，左边 <code>&lt;figure&gt;</code> 插图，右边标题、段落、<code>.spirit-grid</code> 六宫格关键词，底下两个按钮。</li>
</ul>
<p>语义化标签：<code>main</code>、<code>section</code>、<code>header</code>（站点头）、<code>nav</code>、<code>figure</code>、<code>footer</code>——对无障碍和 SEO 更友好，答辩时可以说「符合 HTML5 语义化习惯」。</p>
<h3>4.3 概况页 <code>overview.html</code></h3>
<ul>
<li><strong><code>page-hero</code></strong>：内页顶部红金渐变条，中间大标题「县情概况」。</li>
<li><strong>若干 <code>section</code></strong>：<code>section-alt</code> 表示每隔一块换一种浅色背景，区分层次。</li>
<li><strong><code>facts-table</code></strong>：用 <code>&lt;table&gt;</code> 做县情简表；外面包了 <code>facts-wrap</code>，CSS 设 <code>overflow-x: auto</code>，<strong>小屏可以横向滑动</strong>表格而不把版面撑破。</li>
<li><strong><code>admin-grid</code></strong>：四街道、十三镇的列表，用 <code>admin-block</code> 卡片包住。</li>
<li><strong><code>map-figure</code></strong>：<code>images/ditu.jpeg</code> 地图 + <code>&lt;figcaption&gt;</code> 说明。</li>
</ul>
<h3>4.4 特产 / 风俗页</h3>
<p>结构高度相似：<code>card-grid card-grid--pair</code> 里多个 <code>&lt;article class="card"&gt;</code>，每个卡片包含：</p>
<ul>
<li><code>card-media</code>：放图片；  </li>
<li><code>card-badge</code>：一条彩色顶边装饰；  </li>
<li><code>card-body</code>：标题 <code>&lt;h3&gt;</code> + 段落 <code>&lt;p&gt;</code>。</li>
</ul>
<p>图片上可加 <code>loading="lazy"</code>：图片滚到附近再加载，略省流量（风俗、特产、人文里部分图用了这个属性）。</p>
<h3>4.5 人文页 <code>culture.html</code></h3>
<ul>
<li><strong><code>timeline</code></strong>：左侧竖线 + 圆点，每个 <code>timeline-item</code> 是一段小标题和内容；部分条目下有 <code>timeline-figure</code> 配图和 <code>figcaption</code>。<br />
这种「时间线」布局全靠 CSS 画竖线和圆点，<strong>没有用图表库</strong>。</li>
</ul>
<hr />
<h2>五、CSS 讲解（<code>css/style.css</code> 怎么组织）</h2>
<h3>5.1 <code>:root</code> 里的「主题变量」</h3>
<p>文件开头：</p>
<pre><code class="language-css">:root {
    --iron-red: #b42318;
    --gold: #d4af37;
    --paper: #faf6f0;
    /* ... */
}</code></pre>
<p><strong>含义</strong>：整站主色是「铁军红 + 金色点缀 + 纸色背景」。后面凡是写 <code>color: var(--iron-red)</code> 的地方，一改 <code>:root</code> 就能联动变色，<strong>维护方便</strong>。答辩可以说「使用 CSS 自定义属性做主题」。</p>
<h3>5.2 顶栏固定与正文留白</h3>
<p><code>.site-header</code> 用了 <code>position: fixed</code>，贴在窗口最上方。下面 <code>main</code> 设了 <code>padding-top: var(--nav-h)</code>，否则<strong>正文第一行会被顶栏挡住</strong>。这是固定导航的经典写法。</p>
<h3>5.3 首页 Hero 背景图</h3>
<p><code>.hero-bg</code> 的 <code>background: url("../images/banner.png") center / cover</code>：<code>cover</code> 会铺满区域并裁剪，不同比例屏幕都不容易露白。上面叠两层伪元素 <code>::before</code>（深色渐变，让白字可读）、<code>::after</code>（底部淡出到纸色），过渡到下面内容。</p>
<h3>5.4 栅格与卡片</h3>
<ul>
<li><strong><code>card-grid</code></strong>：<code>repeat(auto-fill, minmax(...))</code> 自动决定一行几个格子。</li>
<li><strong><code>card-grid--pair</code></strong>：手机默认一列；<code>@media (min-width: 768px)</code> 时变两列，特产/风俗在平板、电脑上就是两列卡片。</li>
<li><strong><code>card-media</code></strong>：<code>aspect-ratio: 16/10</code> 固定图片区域比例；<code>img</code> 用 <code>object-fit: cover</code> 裁切填满，避免有的图太高有的图太矮。</li>
</ul>
<h3>5.5 响应式 breakpoints（断点）</h3>
<p>文件末尾集中写了：</p>
<ul>
<li><strong><code>max-width: 768px</code></strong>：显示 <code>.nav-toggle</code>，<code>.nav-main</code> 变成滑下来的全宽菜单（默认 <code>translateY(-120%)</code> 藏起，加 <code>.is-open</code> 滑入）。</li>
<li><strong><code>max-width: 480px</code></strong>：顶栏略矮、品牌略小，节省小屏垂直空间。</li>
<li><strong><code>prefers-reduced-motion: reduce</code></strong>：用户系统开了「减少动画」时，关掉 <code>fade-in</code> 位移动画和 hover 抬起效果——<strong>可访问性</strong>加分项。</li>
</ul>
<hr />
<h2>六、JavaScript 讲解（<code>js/main.js</code> 逐段说明）</h2>
<p>脚本包在一个<strong>立即执行函数</strong> <code>(function () { ... })();</code> 里，避免全局变量污染，这是比较常见的小技巧。</p>
<h3>6.1 移动端菜单</h3>
<pre><code class="language-javascript">var nav = document.querySelector(".nav-main");
var toggle = document.querySelector(".nav-toggle");</code></pre>
<ul>
<li>找到导航和按钮。若存在，给按钮加 <code>click</code> 监听：<br />
<code>nav.classList.toggle("is-open")</code> 在开/关之间切换；同时改 <code>aria-expanded</code>、<code>aria-label</code>，<strong>方便读屏软件</strong>知道菜单是否展开。</li>
<li>给每个导航链接也监听点击：点完后 <code>remove("is-open")</code>，防止切页后菜单还悬在半空（虽然会跳转，但这是良好的交互习惯）。</li>
</ul>
<h3>6.2 滚动淡入（Intersection Observer）</h3>
<pre><code class="language-javascript">var observer = new IntersectionObserver(function (entries) { ... }, { threshold: 0.12, rootMargin: "0px 0px -28px 0px" });
document.querySelectorAll(".fade-in").forEach(function (el) { observer.observe(el); });</code></pre>
<ul>
<li><strong>含义</strong>：浏览器原生 API，用来观察「元素是否进入视口」。当某个 <code>.fade-in</code> 露出一部分（约 12%）时，给它加 class <code>visible</code>。</li>
<li><strong>CSS 配合</strong>：<code>.fade-in</code> 默认透明且向下偏移；<code>.fade-in.visible</code> 变为不透明、回原位。<code>observer.unobserve</code> 在触发一次后取消观察，<strong>避免重复执行</strong>。</li>
</ul>
<p><strong>小白对比</strong>：若不用 Observer，就要监听 <code>window scroll</code> 自己算位置，代码更啰嗦且性能往往更差。</p>
<hr />
<h2>七、功能结构一览（答辩用简表）</h2>
<p>从模块关系看，<strong>页面层</strong>由首页、概况、特产、风俗、人文五块组成；<strong>表现层</strong>统一由 <code>css/style.css</code> 提供主题色、栅格、组件样式与响应式规则；<strong>行为层</strong>由 <code>js/main.js</code> 负责移动端导航开关及滚动淡入；<strong>资源层</strong>为字体外链与本地图片。</p>
<table>
<thead>
<tr>
<th>模块</th>
<th>文件</th>
<th>主要功能</th>
</tr>
</thead>
<tbody>
<tr>
<td>首页</td>
<td><code>index.html</code></td>
<td>全屏 Hero、本站导览、铁军精神六宫格与纪念碑配图</td>
</tr>
<tr>
<td>概况</td>
<td><code>overview.html</code></td>
<td>地理区位、县情简表、区划列表、县域地图、历史与老区</td>
</tr>
<tr>
<td>特产</td>
<td><code>specialties.html</code></td>
<td>四种风物卡片（图+文），桌面端两列</td>
</tr>
<tr>
<td>风俗</td>
<td><code>customs.html</code></td>
<td>四种民俗卡片（图+文），布局同特产</td>
</tr>
<tr>
<td>人文</td>
<td><code>culture.html</code></td>
<td>时间线叙述 + 配图、文物非遗拾零</td>
</tr>
<tr>
<td>公共样式</td>
<td><code>css/style.css</code></td>
<td>主题变量、顶栏、响应式、卡片/时间线、动效与无障碍</td>
</tr>
<tr>
<td>公共脚本</td>
<td><code>js/main.js</code></td>
<td>汉堡菜单、滚动淡入</td>
</tr>
<tr>
<td>静态资源</td>
<td><code>images/</code></td>
<td>横幅、地图、纪念碑及配图</td>
</tr>
</tbody>
</table>
<h3>网站模块图（Mermaid）</h3>
<p>支持 Mermaid 的编辑器里可渲染；做 PPT 时可导出为图。</p>
<pre><code class="language-mermaid">flowchart TB
    subgraph client[浏览器]
        NAV[顶栏导航 5 链接]
        subgraph pages[页面层]
            P0[index.html 首页]
            P1[overview.html 概况]
            P2[specialties.html 特产]
            P3[customs.html 风俗]
            P4[culture.html 人文]
        end
        subgraph assets[静态资源]
            CSS[css/style.css]
            JS[js/main.js]
            IMG[images/* 图片]
        end
        NAV --&gt; P0 &amp; P1 &amp; P2 &amp; P3 &amp; P4
        P0 &amp; P1 &amp; P2 &amp; P3 &amp; P4 --&gt; CSS
        P0 &amp; P1 &amp; P2 &amp; P3 &amp; P4 --&gt; JS
        P0 &amp; P1 &amp; P2 &amp; P3 &amp; P4 --&gt; IMG
    end</code></pre>
<h3>信息架构（栏目树）</h3>
<pre><code>印象阜宁
├── 首页 — 形象展示 / 导览 / 铁军记忆
├── 概况 — 地理 / 县情表 / 行政区划 / 地图 / 历史与老区
├── 特产 — 风物卡片（图文）
├── 风俗 — 民俗卡片（图文）
└── 人文 — 时间线 + 文物非遗拾零 + 阅读一座城</code></pre>
<hr />
<h2>八、开发环境（按实际填写）</h2>
<table>
<thead>
<tr>
<th>类别</th>
<th>说明</th>
</tr>
</thead>
<tbody>
<tr>
<td>操作系统</td>
<td>如：Windows 11 / macOS</td>
</tr>
<tr>
<td>编辑器</td>
<td>如：Visual Studio Code、Cursor</td>
</tr>
<tr>
<td>浏览器与调试</td>
<td>Chrome / Edge / Safari（Device Toolbar 测手机宽度）</td>
</tr>
<tr>
<td>运行方式</td>
<td>双击打开 <code>index.html</code>，或 VS Code Live Server</td>
</tr>
<tr>
<td>版本管理（可选）</td>
<td>Git</td>
</tr>
</tbody>
</table>
<hr />
<h2>九、核心代码导读（报告里可配图/标行号）</h2>
<p>以下路径均相对于项目根目录，行号随文件演进可能略有出入，以编辑器为准。</p>
<table>
<thead>
<tr>
<th>文件</th>
<th>读什么</th>
<th>说明</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>index.html</code></td>
<td>顶栏 <code>nav</code>、<code>.hero</code>、<code>.iron-panel</code></td>
<td>首页层次最丰富，适合讲语义化与分区</td>
</tr>
<tr>
<td><code>overview.html</code></td>
<td><code>facts-table</code>、<code>admin-grid</code>、<code>map-figure</code></td>
<td>表格 + 栅格 + 图注</td>
</tr>
<tr>
<td><code>specialties.html</code> / <code>customs.html</code></td>
<td><code>article.card</code> 重复结构</td>
<td>「组件化」思想：同结构换内容</td>
</tr>
<tr>
<td><code>culture.html</code></td>
<td><code>.timeline</code>、<code>.timeline-item</code></td>
<td>纵向叙事版式</td>
</tr>
<tr>
<td><code>css/style.css</code></td>
<td><code>:root</code>、<code>@media (max-width: 768px)</code>、<code>.fade-in</code></td>
<td>主题、响应式、动画</td>
</tr>
<tr>
<td><code>js/main.js</code></td>
<td>全文约 36 行</td>
<td>导航 + Observer，适合逐行讲解</td>
</tr>
</tbody>
</table>
<hr />
<h2>十、模块设计与实现（分工与截图区）</h2>
<blockquote>
<p><strong>要求</strong>：每位成员只写自己承担的页面/功能；配 <strong>1～2 张页面截图</strong> + <strong>1～2 段核心代码截图</strong>（或注明源文件与行号）。公共文件请说明 <strong>你具体编写或修改的区块</strong>。</p>
</blockquote>
<h3>成员一（姓名：李濠宇）</h3>
<p><strong>1）负责范围（勾选并补充）</strong></p>
<ul>
<li>[ ] <code>index.html</code>（首页）</li>
<li>[ ] <code>overview.html</code>（概况）</li>
<li>[ ] <code>specialties.html</code>（特产）</li>
<li>[ ] <code>customs.html</code>（风俗）</li>
<li>[ ] <code>culture.html</code>（人文）</li>
<li>[ ] <code>css/style.css</code>（说明具体区块：<strong>__</strong>）</li>
<li>[ ] <code>js/main.js</code></li>
<li>[ ] 图片素材搜集与替换（说明：<strong>__</strong>）</li>
</ul>
<p><strong>2）设计要点（简述 100～200 字）</strong></p>
<p><strong>3）页面效果截图</strong></p>
<table>
<thead>
<tr>
<th>说明</th>
<th>插入截图</th>
</tr>
</thead>
<tbody>
<tr>
<td>本人负责页面之一</td>
<td><img src="在此插入图片或改为本地路径" alt="成员一页面1" /></td>
</tr>
<tr>
<td>（可选）关键交互</td>
<td>![成员一页面2]( )</td>
</tr>
</tbody>
</table>
<p><strong>4）核心代码说明</strong></p>
<table>
<thead>
<tr>
<th>文件</th>
<th>说明</th>
</tr>
</thead>
<tbody>
<tr>
<td></td>
<td>例：见 <code>________</code> 约第 <strong>～</strong> 行</td>
</tr>
</tbody>
</table>
<hr />
<h3>成员二（姓名：吴依芠）</h3>
<p><strong>1）负责范围（勾选并补充）</strong></p>
<ul>
<li>[ ] <code>index.html</code>（首页）</li>
<li>[ ] <code>overview.html</code>（概况）</li>
<li>[ ] <code>specialties.html</code>（特产）</li>
<li>[ ] <code>customs.html</code>（风俗）</li>
<li>[ ] <code>culture.html</code>（人文）</li>
<li>[ ] <code>css/style.css</code>（说明具体区块：<strong>__</strong>）</li>
<li>[ ] <code>js/main.js</code></li>
<li>[ ] 图片素材搜集与替换（说明：<strong>__</strong>）</li>
</ul>
<p><strong>2）设计要点（简述 100～200 字）</strong></p>
<p><strong>3）页面效果截图</strong></p>
<table>
<thead>
<tr>
<th>说明</th>
<th>插入截图</th>
</tr>
</thead>
<tbody>
<tr>
<td>本人负责页面之一</td>
<td>![成员二页面1]( )</td>
</tr>
<tr>
<td>（可选）关键交互</td>
<td>![成员二页面2]( )</td>
</tr>
</tbody>
</table>
<p><strong>4）核心代码说明</strong></p>
<table>
<thead>
<tr>
<th>文件</th>
<th>说明</th>
</tr>
</thead>
<tbody>
<tr>
<td></td>
<td></td>
</tr>
</tbody>
</table>
<hr />
<h3>推荐分工示例</h3>
<table>
<thead>
<tr>
<th>方向</th>
<th>成员一（示例）</th>
<th>成员二（示例）</th>
</tr>
</thead>
<tbody>
<tr>
<td><strong>页面</strong></td>
<td>概况、特产（数据与物产）</td>
<td>首页、风俗、人文（叙事与时间线）</td>
</tr>
<tr>
<td><strong>样式</strong></td>
<td>县情表、地图、卡片两列</td>
<td>Hero、时间线、铁军面板</td>
</tr>
<tr>
<td><strong>脚本与素材</strong></td>
<td>图片命名与特产/风俗配图</td>
<td><code>main.js</code>、首页/人文大图</td>
</tr>
</tbody>
</table>
<hr />
<h2>十一、个人心得体会</h2>
<h3>成员一（李濠宇）</h3>
<p>（200～400 字：技术收获、分工协作、布局/兼容问题与解决等。）</p>
<h3>成员二（吴依芠）</h3>
<p>（200～400 字。）</p>
<hr />
<h2>十二、答辩前自检清单</h2>
<ul>
<li>[ ] 五个页面导航互通，当前页 <code>active</code> 正确  </li>
<li>[ ] <code>images/</code> 路径、扩展名与 HTML 中 <code>src</code> 一致  </li>
<li>[ ] 手机宽度下汉堡菜单可展开/收起，链接可点  </li>
<li>[ ] 报告截图清晰，代码片段有简短图题  </li>
<li>[ ] 两人分工在封面或开头写清  </li>
<li>[ ] 引用的外部字体需联网加载；离线演示可说明或改用系统字体（若教师允许）</li>
</ul>
<hr />
<h2>十三、常见问题（小白向）</h2>
<p><strong>Q：为什么我的图片不显示？</strong><br />
A：检查文件名大小写、<code>images/</code> 是否在项目里、HTML 里写的是 <code>images/xxx</code> 还是 <code>../images/xxx</code>（从 <code>css</code> 里写背景图才需要 <code>../</code>）。</p>
<p><strong>Q：手机上菜单点不开？</strong><br />
A：确认 <code>js/main.js</code> 已引入、控制台无报错；确认 <code>style.css</code> 里 768px 以下 <code>.nav-toggle</code> 为 <code>display: flex</code>。</p>
<p><strong>Q：算不算「动态网站」？</strong><br />
A：本作业是<strong>静态网站</strong>：内容由 HTML 写死，没有服务器拼页面。只有 JS 做了「菜单开关、滚动动画」，不叫后台动态生成。</p>
<hr />
<p><em>文档版本：与当前仓库目录结构同步；若教师要求 Word，可复制各节到文档中并补截图。</em></p>]]></description>
    <pubDate>Wed, 06 May 2026 19:17:48 +0800</pubDate>
    <dc:creator>谪仙</dc:creator>
    <guid>https://zhexiange.com/43.html</guid>
</item>
<item>
    <title>多媒体2</title>
    <link>https://zhexiange.com/42.html</link>
    <description><![CDATA[<p>应用题答案与解析<br>&nbsp;<br>&nbsp;<br>&nbsp;<br>第1题：音频存储量计算<br>&nbsp;<br>题目：采样频率22.05KHz，量化精度8bit的立体声，求1分钟数据存储量。<br>&nbsp;<br>公式：<br>存储容量（字节） = 采样频率(Hz) &times; 量化位数(bit) &times; 声道数 &times; 时间(s) &divide; 8<br>&nbsp;<br>计算过程：<br>采样频率：22.05KHz = 22050 Hz<br>声道数：立体声 = 2 声道<br>时间：1分钟 = 60 秒<br>存储容量 = 22050 &times; 8 &times; 2 &times; 60 &divide; 8 = 2646000 字节（约2.52 MB）<br>&nbsp;<br>答案：1分钟声音数据存储量为 2646000 字节（约2.52 MB）。<br>&nbsp;<br>&nbsp;<br>&nbsp;<br>第2题：Huffman编码<br>&nbsp;<br>已知信源符号及概率：<br>&nbsp;<br>符号 a1 a2 a3 a4 a5&nbsp;<br>P(A) 0.40 0.23 0.16 0.11 0.10&nbsp;<br>&nbsp;<br>(1) Huffman编码树与各符号编码<br>&nbsp;<br>1. 按概率从小到大合并：- 合并 a4(0.11) 和 a5(0.10) &rarr; 节点 0.21（左枝a4标1，右枝a5标0）<br>- 合并 a3(0.16) 和 0.21 &rarr; 节点 0.37（左枝a3标1，右枝0.21标0）<br>- 合并 a2(0.23) 和 0.37 &rarr; 节点 0.60（左枝a2标1，右枝0.37标0）<br>- 合并 a1(0.40) 和 0.60 &rarr; 根节点1.00（左枝a1标0，右枝0.60标1）<br>2. 回溯得到编码（从根到叶子的路径）：- a1：0<br>- a2：11<br>- a3：101<br>- a4：1001<br>- a5：1000<br>&nbsp;<br>(2) 信息熵计算<br>&nbsp;</p>
<p>\begin{align}<br>H(A) &amp;= -\sum_{i=1}^5 P(a_i)\log_2 P(a_i) \\<br>&amp;= -(0.40\log_2 0.40 + 0.23\log_2 0.23 + 0.16\log_2 0.16 + 0.11\log_2 0.11 + 0.10\log_2 0.10) \\<br>&amp;\approx 2.12\ \text{bit/符号}<br>\end{align}</p>
<p>&nbsp;<br>(3) 平均码长计算<br>&nbsp;</p>
<p>\begin{align}<br>\bar{L} &amp;= \sum_{i=1}^5 P(a_i) \times l_i \\<br>&amp;= 0.40&times;1 + 0.23&times;2 + 0.16&times;3 + 0.11&times;4 + 0.10&times;4 \\<br>&amp;= 2.18\ \text{bit/符号}<br>\end{align}</p>
<p>&nbsp;<br>答案：<br>(1) 编码：a1: &nbsp;0 ；a2: &nbsp;11 ；a3: &nbsp;101 ；a4: &nbsp;1001 ；a5: &nbsp;1000&nbsp;<br>(2) 信息熵：&asymp; 2.12 bit/符号<br>(3) 平均码长：2.18 bit/符号<br>&nbsp;<br>&nbsp;<br>&nbsp;<br>第3题：算术编码<br>&nbsp;<br>已知信源符号：x1=1（概率0.25），x2=0（概率0.75），对序列 &nbsp;1100 &nbsp;编码。<br>&nbsp;<br>编码过程<br>&nbsp;<br>初始区间：[low=0,\ high=1)<br>&nbsp;<br>- 第1个符号 &nbsp;1 （x1，区间占比0~0.25）：<br>新区间：[0 + (1-0)&times;0,\ 0 + (1-0)&times;0.25) = [0,\ 0.25)<br>- 第2个符号 &nbsp;1 （x1，区间占比0~0.25）：<br>新区间：[0 + (0.25-0)&times;0,\ 0 + (0.25-0)&times;0.25) = [0,\ 0.0625)<br>- 第3个符号 &nbsp;0 （x2，区间占比0.25~1）：<br>新区间：[0 + (0.0625-0)&times;0.25,\ 0 + (0.0625-0)&times;1) = [0.015625,\ 0.0625)<br>- 第4个符号 &nbsp;0 （x2，区间占比0.25~1）：<br>新区间：[0.015625 + (0.0625-0.015625)&times;0.25,\ 0.0625) = [0.02734375,\ 0.0625)<br>&nbsp;<br>答案：编码结果可取区间内任意值，如取0.04，或表示为二进制 &nbsp;0.0000101... 。<br>&nbsp;<br>&nbsp;<br>&nbsp;<br>第4题：LZW编码<br>&nbsp;<br>对字符序列 &nbsp;ABAABCAAABAC &nbsp;进行LZW编码。<br>&nbsp;<br>编码过程<br>&nbsp;<br>1. 初始化字典： {A:1, B:2, C:3}&nbsp;<br>2. 逐字符处理：<br>| 当前串 | 下一个字符 | 输出 | 新增字典项 |<br>|--------|------------|------|------------|<br>| 空 &nbsp; &nbsp; | A &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;| 1 &nbsp; &nbsp;| - &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;|<br>| A &nbsp; &nbsp; &nbsp;| B &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;| 1 &nbsp; &nbsp;| AB:4 &nbsp; &nbsp; &nbsp; |<br>| B &nbsp; &nbsp; &nbsp;| A &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;| 2 &nbsp; &nbsp;| BA:5 &nbsp; &nbsp; &nbsp; |<br>| A &nbsp; &nbsp; &nbsp;| A &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;| 1 &nbsp; &nbsp;| AA:6 &nbsp; &nbsp; &nbsp; |<br>| A &nbsp; &nbsp; &nbsp;| B &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;| 6 &nbsp; &nbsp;| AAB:7 &nbsp; &nbsp; &nbsp;|<br>| AB &nbsp; &nbsp; | C &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;| 4 &nbsp; &nbsp;| ABC:8 &nbsp; &nbsp; &nbsp;|<br>| C &nbsp; &nbsp; &nbsp;| A &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;| 3 &nbsp; &nbsp;| CA:9 &nbsp; &nbsp; &nbsp; |<br>| A &nbsp; &nbsp; &nbsp;| A &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;| 1 &nbsp; &nbsp;| AA已存在 &nbsp; |<br>| AA &nbsp; &nbsp; | B &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;| 6 &nbsp; &nbsp;| AAB已存在 &nbsp;|<br>| AAB &nbsp; &nbsp;| A &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;| 7 &nbsp; &nbsp;| AABA:10 &nbsp; &nbsp;|<br>| A &nbsp; &nbsp; &nbsp;| C &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;| 1 &nbsp; &nbsp;| AC:11 &nbsp; &nbsp; &nbsp;|<br>| C &nbsp; &nbsp; &nbsp;| 结束 &nbsp; &nbsp; &nbsp; | 3 &nbsp; &nbsp;| - &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;|<br>&nbsp;<br>最终输出编码序列： 1, 2, 1, 4, 3, 1, 6, 7, 1, 3 （注：按标准LZW流程，更简洁的输出序列为 1,2,1,4,3,6,2,3 ，以字典匹配为准）<br>&nbsp;<br>答案：LZW编码结果为 1, 2, 1, 4, 3, 6, 2, 3（或按流程输出的对应字典索引序列）。<br>&nbsp;<br>&nbsp;<br>&nbsp;<br>需要我帮你把这四道题的核心公式和易错点整理成一页速记版吗？</p>]]></description>
    <pubDate>Wed, 29 Apr 2026 19:07:56 +0800</pubDate>
    <dc:creator>谪仙</dc:creator>
    <guid>https://zhexiange.com/42.html</guid>
</item>
<item>
    <title>多媒体</title>
    <link>https://zhexiange.com/41.html</link>
    <description><![CDATA[<p>三、简答题</p>
<p>1. 媒体在计算机领域的两种含义：</p>
<p>- 一是指存储信息的实体，如磁带、磁盘、光盘等；</p>
<p>- 二是指承载信息的载体，如文本、声音、图像、动画等。</p>
<p>2.&nbsp;多媒体技术的应用领域：</p>
<p>教育与培训、商业广告、影视娱乐、医疗诊断、通信与网络、办公自动化等。</p>
<p>3.&nbsp;光盘存储多媒体信息的优点：</p>
<p>存储容量大、成本低、携带方便、保存时间长、可靠性高、可随机读取。</p>
<p>4.&nbsp;CMYK引入黑色的原因：</p>
<p>理论上CMY三色混合可生成黑色，但实际印刷中油墨存在杂质，混合后呈深灰色，引入黑色（K）可以增强图像对比度、提升印刷细节清晰度，同时减少彩色油墨用量。</p>
<p>5. 光存储器按读写功能分类：</p>
<p>- 只读型（如CD-ROM、DVD-ROM）：只能读取，无法写入；</p>
<p>- 一次写多次读型（如CD-R、DVD-R）：可写入一次，之后只读；</p>
<p>- 可擦写型（如CD-RW、DVD-RW）：可多次读写。</p>
<p>6. 直接色与真彩色的异同：</p>
<p>- 相同点：都用于表示彩色图像，都能呈现丰富的色彩；</p>
<p>- 不同点：真彩色是直接用RGB（24位，每个通道8位）存储像素值；直接色是通过颜色索引查找表（调色板）获取RGB值，占用存储空间更小。</p>]]></description>
    <pubDate>Wed, 29 Apr 2026 19:02:24 +0800</pubDate>
    <dc:creator>谪仙</dc:creator>
    <guid>https://zhexiange.com/41.html</guid>
</item>
<item>
    <title>Python作业</title>
    <link>https://zhexiange.com/39.html</link>
    <description><![CDATA[<pre class="language-python"><code>weather = 'sunny,windy,sunny,rainy,rainy,windy,sunny,windy,sunny,rainy'
wlist = weather.split(',')
result = {w:wlist.count(w) for w in set(wlist)}

print('天气:次数')
for k,v in result.items():
    print(k,v,sep=':')</code></pre>
<pre class="language-python"><code>stu = {"zxc": 58, "asd": 70, "qwe": 89}
s = stu.copy()

s.update({'ghj': '缺考'})
print(s)

s.update({'fgh': 60})
print(s)

# 安全移除 'xxw'，如果不存在则给出提示
if 'xxw' in s:
    result = s.pop('xxw')
    print("移除的 xxw 的值：", result)
else:
    print("xxw 不在字典中，无法移除")
print(s)

print("字典长度：", len(s))

x = input("请输入名字：")
# 安全访问，避免 KeyError
if x in s:
    print("成绩：", s[x])
else:
    print(f"未找到 {x} 的成绩")</code></pre>]]></description>
    <pubDate>Tue, 24 Mar 2026 15:32:25 +0800</pubDate>
    <dc:creator>谪仙</dc:creator>
    <guid>https://zhexiange.com/39.html</guid>
</item>
<item>
    <title>重返 2016：Minecraft 0.14.3 “基岩服”</title>
    <link>https://zhexiange.com/37.html</link>
    <description><![CDATA[<h1>⛏️ 重返 2016：Minecraft 0.14.3 “基岩服”深度招募指南</h1>
<p>在网易版尚未统一、版本更新还在以“Alpha”命名的年代，<strong>0.14.3</strong> 是无数老玩家心中最完美的平衡点。它拥有了红石、活塞和女巫塔，却没有后来的花哨与臃肿。</p>
<p>如果你想找回那台旧手机里的夏天，<strong>基岩服 (gyf.asia)</strong> 已经为你准备好了通往过去的传送门。</p>
<hr />
<h2>💎 服务器核心特色</h2>
<h3>1. 跨越十年的版本兼容</h3>
<p>我们深耕 <strong>0.14.3 Alpha</strong> 这一经典版本。这个版本对移动端极其友好，无论你是使用当年的“古董机”还是性能过剩的现代旗舰，都能获得极其丝滑的帧率表现。</p>
<h3>2. 纯粹而自由的生存体验</h3>
<ul>
<li><strong>经典红石</strong>：完美还原 0.14 系列的红石逻辑，欢迎各路红石大牛来复刻全自动农场。</li>
<li><strong>领地系统 (Residence)</strong>：服务器内置成熟的领地插件，你可以轻松圈定自己的家园，自定义权限，彻底杜绝“熊孩子”破坏。</li>
<li><strong>经济与贸易</strong>：设有基础商店，支持玩家间自由交易。你可以成为坐拥万贯金币的商人，也可以做一名自给自足的隐士。</li>
</ul>
<h3>3. 硬核技术保障</h3>
<ul>
<li><strong>高标准架构</strong>：采用专为 0.14.3 优化的高性能服务端，解决原版联机常见的掉线、回档问题。</li>
<li><strong>双线加速</strong>：核心节点部署在 <code>gyf.hk</code>，配合多线解析，确保全国各地玩家都能享受低延迟（Low Ping）体验。</li>
</ul>
<hr />
<h2>📜 详细连接信息</h2>
<table>
<thead>
<tr>
<th>关键参数</th>
<th>详细说明</th>
</tr>
</thead>
<tbody>
<tr>
<td><strong>服务器名称</strong></td>
<td><strong>基岩服</strong></td>
</tr>
<tr>
<td><strong>官方网站</strong></td>
<td><a href="https://gyf.asia/">https://gyf.asia/</a></td>
</tr>
<tr>
<td><strong>接入地址</strong></td>
<td><code>gyf.hk</code></td>
</tr>
<tr>
<td><strong>默认端口</strong></td>
<td><code>19132</code></td>
</tr>
<tr>
<td><strong>支持版本</strong></td>
<td><strong>0.14.3 Alpha</strong> (必须版本一致方可进入)</td>
</tr>
<tr>
<td><strong>玩家群号</strong></td>
<td><a href="https://qm.qq.com/q/2HzLvBAYWA">点击一键加群</a></td>
</tr>
</tbody>
</table>
<hr />
<h2>🛠️ 入服三部曲</h2>
<ol>
<li><strong>准备客户端</strong>：<br />
由于 0.14.3 版本较老，许多应用商店已下架。请前往 <a href="https://www.google.com/search?q=https://gyf.asia/download">gyf.asia/download</a> 下载由社区维护的、适配现代系统的 0.14.3 纯净客户端。</li>
<li><strong>账号注册</strong>：<br />
进入服务器后，点击对话框输入：<br />
<code>/register &lt;你的密码&gt; &lt;重复确认密码&gt;</code><br />
下次进入时使用 <code>/login &lt;你的密码&gt;</code> 即可。</li>
<li><strong>阅读守则</strong>：<br />
我们是一个提倡<strong>和谐、平等、互助</strong>的社区。禁止任何形式的作弊（飞行、X-Ray）及人身攻击。请前往官网 <a href="https://gyf.asia/shouze">服务器守则</a> 查看完整条例。</li>
</ol>
<hr />
<h2>🌟 为什么加入我们？</h2>
<blockquote>
<p>“这不仅仅是一个服务器，这是一个活着的博物馆。”</p>
</blockquote>
<p>在 <strong>基岩服</strong>，你不会看到满屏的氪金弹窗，也不会有复杂到看不懂的魔改模组。这里只有最原始的撸树、挖矿、盖房子。</p>
<p>这里的每一个方块都是玩家亲手放置，每一座城堡都有它的故事。我们由一群热爱 MC 的骨灰级玩家自发维护，<strong>不以营利为目的，只求情怀常在。</strong></p>
<hr />
<h3>🔗 快速链接</h3>
<ul>
<li><strong>[官方论坛]</strong>：<a href="https://bbs.gyf.asia/">https://bbs.gyf.asia/</a> (寻找队友、分享攻略)</li>
<li><strong>[关于我们]</strong>：<a href="https://www.google.com/search?q=/about">了解服务器背后的故事</a></li>
</ul>
<hr />
<p><strong>你是想做一辈子随波逐流的现代版路人，还是想跟我们一起，回到那个方块梦开始的地方？</strong></p>
<p><strong>我在 <code>gyf.hk:19132</code> 等你。</strong></p>
<hr />
<blockquote>
<p>需要我帮你把这段文字针对 <strong>B站动态（增加表情包建议）</strong> 或者 <strong>小红书（增加标签排版）</strong> 再做一次优化吗？</p>
</blockquote>]]></description>
    <pubDate>Sun, 01 Mar 2026 21:39:54 +0800</pubDate>
    <dc:creator>谪仙</dc:creator>
    <guid>https://zhexiange.com/37.html</guid>
</item>
<item>
    <title>数据库上机2答案</title>
    <link>https://zhexiange.com/36.html</link>
    <description><![CDATA[<p>好嘞 ✅ 我帮你把每一道题目写上题干、SQL 语句，并在语句前加上注释，答案紧跟在下面。</p>
<hr />
<p>🔹 连接查询</p>
<p>1) 求供应工程 J1 零件的供应商号码 SNO</p>
<p>-- 查询供应工程 J1 零件的供应商编号<br />
SELECT DISTINCT SNO<br />
FROM SPJ<br />
WHERE JNO = 'J1';</p>
<p>答案： S1, S2, S3, S5</p>
<hr />
<p>2) 求使用供应商 S1 所供应零件的工程号码</p>
<p>-- 查询使用供应商 S1 所供应零件的工程编号<br />
SELECT DISTINCT JNO<br />
FROM SPJ<br />
WHERE SNO = 'S1';</p>
<p>答案： J1, J2, J3, J4</p>
<hr />
<p>3) 找出工程项目 J2 使用的各种零件的号码及其数量</p>
<p>-- 查询工程 J2 使用的零件编号及其数量<br />
SELECT PNO, QTY<br />
FROM SPJ<br />
WHERE JNO = 'J2';</p>
<p>答案：</p>
<p>P2 100</p>
<p>P3 200</p>
<p>P5 100</p>
<p>P6 200</p>
<hr />
<p>4) 找出天津的工程项目使用的各种零件的号码、数量及其对应的工程号</p>
<p>-- 查询天津的工程项目所使用的零件编号、数量及工程号<br />
SELECT SPJ.JNO, SPJ.PNO, SPJ.QTY<br />
FROM SPJ<br />
JOIN J ON SPJ.JNO = J.JNO<br />
WHERE J.CITY = N'天津';</p>
<p>答案：</p>
<p>J3 P1 100</p>
<p>J3 P6 300</p>
<p>J4 P1 700</p>
<p>J4 P3 500</p>
<p>J4 P6 200</p>
<p>J4 P2 100</p>
<p>J4 P6 500</p>
<hr />
<p>5) 找出工程项目 J2 使用的各种零件的名称及其数量</p>
<p>-- 查询工程 J2 使用的零件名称及其数量<br />
SELECT P.PNAME, SPJ.QTY<br />
FROM SPJ<br />
JOIN P ON SPJ.PNO = P.PNO<br />
WHERE SPJ.JNO = 'J2';</p>
<p>答案：</p>
<p>螺栓 100</p>
<p>螺丝刀 200</p>
<p>凸轮 100</p>
<p>齿轮 200</p>
<hr />
<p>6) 找出上海厂商供应的所有零件号码</p>
<p>-- 查询上海供应商供应的零件编号<br />
SELECT DISTINCT SPJ.PNO<br />
FROM SPJ<br />
JOIN S ON SPJ.SNO = S.SNO<br />
WHERE S.CITY = N'上海';</p>
<p>答案： P2, P3, P6</p>
<hr />
<p>7) 找出使用上海产的零件的工程名称</p>
<p>-- 查询使用上海供应商供应零件的工程名称<br />
SELECT DISTINCT J.JNAME<br />
FROM SPJ<br />
JOIN S ON SPJ.SNO = S.SNO<br />
JOIN J ON SPJ.JNO = J.JNO<br />
WHERE S.CITY = N'上海';</p>
<p>答案： 三建、一汽、造船厂</p>
<hr />
<p>🔹 嵌套查询</p>
<p>1) 显示与“螺母”颜色相同的产品名</p>
<p>-- 查询与“螺母”颜色相同的零件名称<br />
SELECT PNAME<br />
FROM P<br />
WHERE COLOR = (<br />
SELECT COLOR FROM P WHERE PNAME = N'螺母'<br />
);</p>
<p>答案： 螺母、螺丝刀、齿轮</p>
<hr />
<p>2) 查出工程 J1 和 J3 同时使用的零件名称</p>
<p>-- 查询工程 J1 和 J3 同时使用的零件名称<br />
-- 查出工程 J1 和 J3 同时使用的零件名称</p>
<p>SELECT DISTINCT P.PNAME</p>
<p>FROM P</p>
<p>WHERE P.PNO IN (SELECT PNO FROM SPJ WHERE JNO = 'J1')</p>
<p>AND P.PNO IN (SELECT PNO FROM SPJ WHERE JNO = 'J3');</p>
<p>答案： 螺母</p>
<hr />
<p>3) 找出没有使用天津产的零件的工程号码</p>
<p>-- 查询没有使用天津产零件的工程编号<br />
SELECT DISTINCT JNO<br />
FROM SPJ<br />
WHERE JNO NOT IN (<br />
SELECT DISTINCT SPJ.JNO<br />
FROM SPJ<br />
JOIN S ON SPJ.SNO = S.SNO<br />
WHERE S.CITY = N'天津'<br />
);</p>
<p>答案： J5, J6, J7</p>
<hr />
<p>4) 找出北京的任何工程都不购买的零件的零件号</p>
<p>-- 查询北京工程没有购买过的零件编号<br />
SELECT PNO<br />
FROM P<br />
WHERE PNO NOT IN (<br />
SELECT DISTINCT SPJ.PNO<br />
FROM SPJ<br />
JOIN J ON SPJ.JNO = J.JNO<br />
WHERE J.CITY = N'北京'<br />
);</p>
<p>答案： P2, P4, P6</p>
<hr />
<p>5) 求没有使用天津供应商生产的红色零件的工程号 JNO</p>
<p>-- 查询没有使用天津供应商生产的红色零件的工程编号<br />
SELECT DISTINCT JNO<br />
FROM SPJ<br />
WHERE JNO NOT IN (<br />
SELECT DISTINCT SPJ.JNO<br />
FROM SPJ<br />
JOIN S ON SPJ.SNO = S.SNO<br />
JOIN P ON SPJ.PNO = P.PNO<br />
WHERE S.CITY = N'天津' AND P.COLOR = N'红'<br />
);</p>
<p>答案： J2, J5, J6, J7</p>
<hr />
<p>要不要我帮你把这些查询再整理成一个 Word/PDF 文档，带表格形式的答案，方便你直接交作业？</p>]]></description>
    <pubDate>Sun, 28 Sep 2025 09:14:59 +0800</pubDate>
    <dc:creator>谪仙</dc:creator>
    <guid>https://zhexiange.com/36.html</guid>
</item>
<item>
    <title>数据库上机2</title>
    <link>https://zhexiange.com/35.html</link>
    <description><![CDATA[<p>spj数据库<br />
-- 1. 创建数据库</p>
<p>IF DB_ID('SPJDB') IS NULL</p>
<p>CREATE DATABASE SPJDB;</p>
<p>GO</p>
<p>USE SPJDB;</p>
<p>GO</p>
<p>-- 2. 删除旧表（避免重复执行报错）</p>
<p>IF OBJECT_ID('SPJ', 'U') IS NOT NULL DROP TABLE SPJ;</p>
<p>IF OBJECT_ID('S', 'U') IS NOT NULL DROP TABLE S;</p>
<p>IF OBJECT_ID('P', 'U') IS NOT NULL DROP TABLE P;</p>
<p>IF OBJECT_ID('J', 'U') IS NOT NULL DROP TABLE J;</p>
<p>GO</p>
<p>-- 3. 创建表</p>
<p>-- S 表：供应商</p>
<p>CREATE TABLE S (</p>
<p>SNO    CHAR(2) PRIMARY KEY,</p>
<p>SNAME  NVARCHAR(20),</p>
<p>STATUS INT,</p>
<p>CITY   NVARCHAR(20)</p>
<p>);</p>
<p>-- P 表：零件</p>
<p>CREATE TABLE P (</p>
<p>PNO    CHAR(2) PRIMARY KEY,</p>
<p>PNAME  NVARCHAR(20),</p>
<p>COLOR  NVARCHAR(10),</p>
<p>WEIGHT INT</p>
<p>);</p>
<p>-- J 表：工程项目</p>
<p>CREATE TABLE J (</p>
<p>JNO    CHAR(2) PRIMARY KEY,</p>
<p>JNAME  NVARCHAR(50),</p>
<p>CITY   NVARCHAR(20)</p>
<p>);</p>
<p>-- SPJ 表：供应关系</p>
<p>CREATE TABLE SPJ (</p>
<p>SNO  CHAR(2),</p>
<p>PNO  CHAR(2),</p>
<p>JNO  CHAR(2),</p>
<p>QTY  INT,</p>
<p>PRIMARY KEY (SNO, PNO, JNO),</p>
<p>FOREIGN KEY (SNO) REFERENCES S(SNO),</p>
<p>FOREIGN KEY (PNO) REFERENCES P(PNO),</p>
<p>FOREIGN KEY (JNO) REFERENCES J(JNO)</p>
<p>);</p>
<p>-- 4. 插入数据</p>
<p>-- S 表数据</p>
<p>INSERT INTO S VALUES ('S1','精益',20,N'天津');</p>
<p>INSERT INTO S VALUES ('S2','盛锡',10,N'北京');</p>
<p>INSERT INTO S VALUES ('S3','东方红',30,N'北京');</p>
<p>INSERT INTO S VALUES ('S4','丰泰盛',20,N'天津');</p>
<p>INSERT INTO S VALUES ('S5','为民',30,N'上海');</p>
<p>-- P 表数据</p>
<p>INSERT INTO P VALUES ('P1','螺母',N'红',12);</p>
<p>INSERT INTO P VALUES ('P2','螺栓',N'绿',17);</p>
<p>INSERT INTO P VALUES ('P3','螺丝刀',N'蓝',14);</p>
<p>INSERT INTO P VALUES ('P4','螺丝刀',N'红',14);</p>
<p>INSERT INTO P VALUES ('P5','凸轮',N'蓝',40);</p>
<p>INSERT INTO P VALUES ('P6','齿轮',N'红',30);</p>
<p>-- J 表数据</p>
<p>INSERT INTO J VALUES ('J1','三建',N'北京');</p>
<p>INSERT INTO J VALUES ('J2','一汽',N'长春');</p>
<p>INSERT INTO J VALUES ('J3','弹簧厂',N'天津');</p>
<p>INSERT INTO J VALUES ('J4','造船厂',N'天津');</p>
<p>INSERT INTO J VALUES ('J5','机车厂',N'唐山');</p>
<p>INSERT INTO J VALUES ('J6','无线电厂',N'常州');</p>
<p>INSERT INTO J VALUES ('J7','半导体厂',N'南京');</p>
<p>-- SPJ 表数据</p>
<p>INSERT INTO SPJ VALUES ('S1','P1','J1',200);</p>
<p>INSERT INTO SPJ VALUES ('S1','P1','J3',100);</p>
<p>INSERT INTO SPJ VALUES ('S1','P1','J4',700);</p>
<p>INSERT INTO SPJ VALUES ('S1','P2','J2',100);</p>
<p>INSERT INTO SPJ VALUES ('S2','P3','J1',400);</p>
<p>INSERT INTO SPJ VALUES ('S2','P3','J2',200);</p>
<p>INSERT INTO SPJ VALUES ('S2','P3','J4',500);</p>
<p>INSERT INTO SPJ VALUES ('S2','P3','J5',400);</p>
<p>INSERT INTO SPJ VALUES ('S2','P5','J1',400);</p>
<p>INSERT INTO SPJ VALUES ('S2','P5','J2',100);</p>
<p>INSERT INTO SPJ VALUES ('S3','P1','J1',200);</p>
<p>INSERT INTO SPJ VALUES ('S3','P3','J1',200);</p>
<p>INSERT INTO SPJ VALUES ('S4','P5','J1',100);</p>
<p>INSERT INTO SPJ VALUES ('S4','P6','J3',300);</p>
<p>INSERT INTO SPJ VALUES ('S4','P6','J4',200);</p>
<p>INSERT INTO SPJ VALUES ('S5','P2','J4',100);</p>
<p>INSERT INTO SPJ VALUES ('S5','P3','J1',200);</p>
<p>INSERT INTO SPJ VALUES ('S5','P6','J2',200);</p>
<p>INSERT INTO SPJ VALUES ('S5','P6','J4',500);</p>
<p>GO</p>]]></description>
    <pubDate>Sun, 28 Sep 2025 09:05:50 +0800</pubDate>
    <dc:creator>谪仙</dc:creator>
    <guid>https://zhexiange.com/35.html</guid>
</item>
<item>
    <title>数据库上机答案</title>
    <link>https://zhexiange.com/34.html</link>
    <description><![CDATA[<p><a href="https://zhexiange.com/?resource_alias=UqkXE36aLV6qV7HW&amp;resource_filename=34881758543255">新建文件夹.zip</a></p>
<p>好——下面给你每题对应的 <strong>T-SQL（SQL Server）答案</strong>。我假设你是在 SQL Server 上运行（语句用到 <code>GETDATE()</code>、<code>CAST</code>、窗口函数/子查询等），并且统一使用下面的 <strong>年龄计算表达式</strong>（精确到生日）：</p>
<pre><code class="language-sql">-- 年龄表达式（可直接复制到下面的查询里）
DATEDIFF(year, sbirth, GETDATE())
- CASE WHEN DATEADD(year, DATEDIFF(year, sbirth, GETDATE()), sbirth) &gt; GETDATE() THEN 1 ELSE 0 END</code></pre>
<p><strong>关于 ssex 的说明</strong>：你的数据里 <code>ssex</code> 的编码在示例里好像不一致（0/1 与性别的对应不明确）。下面的查询里我会在涉及“女生/男生”的题目处写成 <code>ssex = 0</code>（你若实际 0=男、1=女，请把条件反过来即可）。</p>
<p>下面按题号给出 SQL 语句（每条独立可执行）：</p>
<hr />
<ol>
<li>查询全体学生的学号、姓名与年龄</li>
</ol>
<pre><code class="language-sql">SELECT sno, sname,
  DATEDIFF(year, sbirth, GETDATE())
  - CASE WHEN DATEADD(year, DATEDIFF(year, sbirth, GETDATE()), sbirth) &gt; GETDATE() THEN 1 ELSE 0 END AS age
FROM StuInfo.dbo.S;</code></pre>
<ol start="2">
<li>查询计算机系（sdept='计算机'）的学生学号、姓名</li>
</ol>
<pre><code class="language-sql">SELECT sno, sname
FROM StuInfo.dbo.S
WHERE LTRIM(RTRIM(sdept)) = N'计算机';</code></pre>
<ol start="3">
<li>查询计算机系所有的女生姓名和年龄（假设 <code>ssex = 0</code> 表示女；若你系统相反请改为 <code>ssex = 1</code>）</li>
</ol>
<pre><code class="language-sql">SELECT sname,
  DATEDIFF(year, sbirth, GETDATE())
  - CASE WHEN DATEADD(year, DATEDIFF(year, sbirth, GETDATE()), sbirth) &gt; GETDATE() THEN 1 ELSE 0 END AS age
FROM StuInfo.dbo.S
WHERE LTRIM(RTRIM(sdept)) = N'计算机'
  AND ssex = 0;</code></pre>
<ol start="4">
<li>查询选修了课程的学生学号（去重）</li>
</ol>
<pre><code class="language-sql">SELECT DISTINCT sno
FROM StuInfo.dbo.SC;</code></pre>
<ol start="5">
<li>查询所有年龄在30岁以下的学生姓名及其年龄</li>
</ol>
<pre><code class="language-sql">SELECT sname,
  DATEDIFF(year, sbirth, GETDATE())
  - CASE WHEN DATEADD(year, DATEDIFF(year, sbirth, GETDATE()), sbirth) &gt; GETDATE() THEN 1 ELSE 0 END AS age
FROM StuInfo.dbo.S
WHERE (DATEDIFF(year, sbirth, GETDATE())
       - CASE WHEN DATEADD(year, DATEDIFF(year, sbirth, GETDATE()), sbirth) &gt; GETDATE() THEN 1 ELSE 0 END) &lt; 30;</code></pre>
<ol start="6">
<li>查询考试有不及格（还包括未参加考试，即 <code>grade &lt; 60 OR grade IS NULL</code>）的学生的学号</li>
</ol>
<pre><code class="language-sql">SELECT DISTINCT sno
FROM StuInfo.dbo.SC
WHERE grade &lt; 60 OR grade IS NULL;</code></pre>
<ol start="7">
<li>查询年龄在25-30岁之间（包含25和30岁）的学生的姓名和年龄</li>
</ol>
<pre><code class="language-sql">SELECT sname,
  DATEDIFF(year, sbirth, GETDATE())
  - CASE WHEN DATEADD(year, DATEDIFF(year, sbirth, GETDATE()), sbirth) &gt; GETDATE() THEN 1 ELSE 0 END AS age
FROM StuInfo.dbo.S
WHERE (DATEDIFF(year, sbirth, GETDATE())
       - CASE WHEN DATEADD(year, DATEDIFF(year, sbirth, GETDATE()), sbirth) &gt; GETDATE() THEN 1 ELSE 0 END) BETWEEN 25 AND 30;</code></pre>
<ol start="8">
<li>查询计算机，数学系和信息系学生的姓名</li>
</ol>
<pre><code class="language-sql">SELECT sname, sdept
FROM StuInfo.dbo.S
WHERE LTRIM(RTRIM(sdept)) IN (N'计算机', N'数学', N'信息工程', N'信息'); -- 兼顾可能的写法</code></pre>
<ol start="9">
<li>查询不是计算机和信息工程系的学生姓名</li>
</ol>
<pre><code class="language-sql">SELECT sname, sdept
FROM StuInfo.dbo.S
WHERE LTRIM(RTRIM(sdept)) NOT IN (N'计算机', N'信息工程');</code></pre>
<ol start="10">
<li>查询所有姓刘的学生姓名、学号</li>
</ol>
<pre><code class="language-sql">SELECT sno, sname
FROM StuInfo.dbo.S
WHERE sname LIKE N'刘%';</code></pre>
<ol start="11">
<li>查询与数据库相关课程的课程号和名称（模糊匹配“数据库”）</li>
</ol>
<pre><code class="language-sql">SELECT cno, cname
FROM StuInfo.dbo.C
WHERE cname LIKE N'%数据库%';</code></pre>
<ol start="12">
<li>查询未录入成绩的学生的学号和相应的课程号（grade IS NULL）</li>
</ol>
<pre><code class="language-sql">SELECT sno, cno
FROM StuInfo.dbo.SC
WHERE grade IS NULL;</code></pre>
<ol start="13">
<li>查询计算机系年龄在30岁以下的学生姓名</li>
</ol>
<pre><code class="language-sql">SELECT sname
FROM StuInfo.dbo.S
WHERE LTRIM(RTRIM(sdept)) = N'计算机'
  AND (DATEDIFF(year, sbirth, GETDATE())
       - CASE WHEN DATEADD(year, DATEDIFF(year, sbirth, GETDATE()), sbirth) &gt; GETDATE() THEN 1 ELSE 0 END) &lt; 30;</code></pre>
<ol start="14">
<li>查询选修了0102号课程的学生学号及其成绩，按学号升序</li>
</ol>
<pre><code class="language-sql">SELECT sno, grade
FROM StuInfo.dbo.SC
WHERE cno = '0102'
ORDER BY sno ASC;</code></pre>
<ol start="15">
<li>查询选修了0101号课程的学生学号及其成绩，按分数降序排列</li>
</ol>
<pre><code class="language-sql">SELECT sno, grade
FROM StuInfo.dbo.SC
WHERE cno = '0101'
ORDER BY grade DESC;</code></pre>
<ol start="16">
<li>查询学生总人数</li>
</ol>
<pre><code class="language-sql">SELECT COUNT(*) AS total_students
FROM StuInfo.dbo.S;</code></pre>
<ol start="17">
<li>查询选修了课程的学生人数（去重学号计数）</li>
</ol>
<pre><code class="language-sql">SELECT COUNT(DISTINCT sno) AS students_who_taken_course
FROM StuInfo.dbo.SC;</code></pre>
<ol start="18">
<li>计算0101号课程的平均成绩（排除 NULL）</li>
</ol>
<pre><code class="language-sql">SELECT AVG(CAST(grade AS FLOAT)) AS avg_grade_0101
FROM StuInfo.dbo.SC
WHERE cno = '0101' AND grade IS NOT NULL;</code></pre>
<ol start="19">
<li>计算计算机系学生的平均年龄</li>
</ol>
<pre><code class="language-sql">SELECT AVG(
  DATEDIFF(year, sbirth, GETDATE())
  - CASE WHEN DATEADD(year, DATEDIFF(year, sbirth, GETDATE()), sbirth) &gt; GETDATE() THEN 1 ELSE 0 END
) AS avg_age
FROM StuInfo.dbo.S
WHERE LTRIM(RTRIM(sdept)) = N'计算机';</code></pre>
<ol start="20">
<li>查询选修了0102号课程的学生最低分数</li>
</ol>
<pre><code class="language-sql">SELECT MIN(grade) AS min_grade_0102
FROM StuInfo.dbo.SC
WHERE cno = '0102' AND grade IS NOT NULL;</code></pre>
<ol start="21">
<li>查询学生 001108 选修课程的总学分数（若要只统计已录成绩的课可加 <code>AND sc.grade IS NOT NULL</code>）</li>
</ol>
<pre><code class="language-sql">SELECT s.sno,
       SUM(COALESCE(c.ccredit,0)) AS total_credits
FROM StuInfo.dbo.SC sc
JOIN StuInfo.dbo.C c ON sc.cno = c.cno
JOIN StuInfo.dbo.S s ON sc.sno = s.sno
WHERE sc.sno = '001108'
GROUP BY s.sno;</code></pre>
<ol start="22">
<li>查询每门课程号及其对应的选课人数</li>
</ol>
<pre><code class="language-sql">SELECT sc.cno, COUNT(sc.sno) AS student_count
FROM StuInfo.dbo.SC sc
GROUP BY sc.cno;</code></pre>
<ol start="23">
<li>计算每门课程及其平均分（排除 NULL）</li>
</ol>
<pre><code class="language-sql">SELECT c.cno, c.cname, AVG(CAST(sc.grade AS FLOAT)) AS avg_grade
FROM StuInfo.dbo.C c
LEFT JOIN StuInfo.dbo.SC sc ON c.cno = sc.cno AND sc.grade IS NOT NULL
GROUP BY c.cno, c.cname;</code></pre>
<ol start="24">
<li>计算选修了3门课程以上的学生学号（题目要求“超过3门”）</li>
</ol>
<pre><code class="language-sql">SELECT sno
FROM StuInfo.dbo.SC
GROUP BY sno
HAVING COUNT(*) &gt; 3;</code></pre>
<ol start="25">
<li>查询每个学生的学号及课程的平均分</li>
</ol>
<pre><code class="language-sql">SELECT sc.sno, AVG(CAST(sc.grade AS FLOAT)) AS avg_grade
FROM StuInfo.dbo.SC sc
WHERE sc.grade IS NOT NULL
GROUP BY sc.sno;</code></pre>
<ol start="26">
<li>查询所有课程的平均学分</li>
</ol>
<pre><code class="language-sql">SELECT AVG(CAST(ccredit AS FLOAT)) AS avg_credit
FROM StuInfo.dbo.C;</code></pre>
<ol start="27">
<li>查询与“林一帆”在同一个系学习的学生学号和姓名（不包括林一帆本人）</li>
</ol>
<pre><code class="language-sql">SELECT s2.sno, s2.sname
FROM StuInfo.dbo.S s1
JOIN StuInfo.dbo.S s2 ON LTRIM(RTRIM(s1.sdept)) = LTRIM(RTRIM(s2.sdept))
WHERE s1.sname = N'林一帆' AND s2.sno &lt;&gt; s1.sno;</code></pre>
<ol start="28">
<li>查询平均分在75分以下的学生信息（学号、姓名、平均分）</li>
</ol>
<pre><code class="language-sql">SELECT t.sno, s.sname, t.avg_grade
FROM (
    SELECT sno, AVG(CAST(grade AS FLOAT)) AS avg_grade
    FROM StuInfo.dbo.SC
    WHERE grade IS NOT NULL
    GROUP BY sno
) t
JOIN StuInfo.dbo.S s ON s.sno = t.sno
WHERE t.avg_grade &lt; 75;</code></pre>
<ol start="29">
<li>查询选修0101号课程且成绩在80分以上的所有学生姓名、学号</li>
</ol>
<pre><code class="language-sql">SELECT s.sno, s.sname, sc.grade
FROM StuInfo.dbo.SC sc
JOIN StuInfo.dbo.S s ON sc.sno = s.sno
WHERE sc.cno = '0101' AND sc.grade &gt;= 80;</code></pre>
<ol start="30">
<li>查询每个学生的学号、姓名、选修的课程名及其成绩</li>
</ol>
<pre><code class="language-sql">SELECT s.sno, s.sname, c.cname, sc.grade
FROM StuInfo.dbo.S s
LEFT JOIN StuInfo.dbo.SC sc ON s.sno = sc.sno
LEFT JOIN StuInfo.dbo.C c ON sc.cno = c.cno
ORDER BY s.sno;</code></pre>
<ol start="31">
<li>显示每个系的学生的平均年龄</li>
</ol>
<pre><code class="language-sql">SELECT LTRIM(RTRIM(sdept)) AS department,
       AVG(
         DATEDIFF(year, sbirth, GETDATE())
         - CASE WHEN DATEADD(year, DATEDIFF(year, sbirth, GETDATE()), sbirth) &gt; GETDATE() THEN 1 ELSE 0 END
       ) AS avg_age
FROM StuInfo.dbo.S
GROUP BY LTRIM(RTRIM(sdept));</code></pre>
<ol start="32">
<li>查询“计算机”系所有选修了“数据库原理”课程的学生姓名<br />
（假设课程名包含“数据库原理”，或你也可直接用 cno = '0106'）</li>
</ol>
<pre><code class="language-sql">SELECT DISTINCT s.sno, s.sname
FROM StuInfo.dbo.S s
JOIN StuInfo.dbo.SC sc ON s.sno = sc.sno
JOIN StuInfo.dbo.C c ON sc.cno = c.cno
WHERE LTRIM(RTRIM(s.sdept)) = N'计算机'
  AND c.cname LIKE N'%数据库原理%';</code></pre>
<ol start="33">
<li>显示至少有5名学生选修的课程的平均分数及其课程名称</li>
</ol>
<pre><code class="language-sql">SELECT c.cno, c.cname, AVG(CAST(sc.grade AS FLOAT)) AS avg_grade, COUNT(sc.sno) AS student_count
FROM StuInfo.dbo.C c
JOIN StuInfo.dbo.SC sc ON c.cno = sc.cno AND sc.grade IS NOT NULL
GROUP BY c.cno, c.cname
HAVING COUNT(sc.sno) &gt;= 5;</code></pre>
<ol start="34">
<li>查询每个人选修的课程数，显示其学号及课程数</li>
</ol>
<pre><code class="language-sql">SELECT s.sno, s.sname, COUNT(sc.cno) AS course_count
FROM StuInfo.dbo.S s
LEFT JOIN StuInfo.dbo.SC sc ON s.sno = sc.sno
GROUP BY s.sno, s.sname;</code></pre>
<ol start="35">
<li>查询有3门（包含3门）以上课程是70分以上（包含70分）的学生的学号及课程数</li>
</ol>
<pre><code class="language-sql">SELECT sno, COUNT(*) AS count_ge_70
FROM StuInfo.dbo.SC
WHERE grade &gt;= 70
GROUP BY sno
HAVING COUNT(*) &gt;= 3;</code></pre>
<ol start="36">
<li>查询“C++程序设计”这门课程的学生成绩（先找课程号，再查）</li>
</ol>
<pre><code class="language-sql">-- 方法一：按课程名模糊匹配
SELECT sc.sno, s.sname, sc.grade
FROM StuInfo.dbo.SC sc
JOIN StuInfo.dbo.C c ON sc.cno = c.cno
JOIN StuInfo.dbo.S s ON sc.sno = s.sno
WHERE c.cname LIKE N'%C++程序设计%';</code></pre>
<ol start="37">
<li>求年龄大于学生平均年龄的男学生姓名和年龄（假设 <code>ssex = 1</code> 表示男；若反过来改条件）</li>
</ol>
<pre><code class="language-sql">;WITH Ages AS (
  SELECT sno, sname,
    DATEDIFF(year, sbirth, GETDATE())
    - CASE WHEN DATEADD(year, DATEDIFF(year, sbirth, GETDATE()), sbirth) &gt; GETDATE() THEN 1 ELSE 0 END AS age
  FROM StuInfo.dbo.S
)
SELECT a.sno, a.sname, a.age
FROM Ages a
CROSS JOIN (SELECT AVG(age) AS avg_age FROM Ages) av
WHERE a.age &gt; av.avg_age
  AND EXISTS (SELECT 1 FROM StuInfo.dbo.S s WHERE s.sno = a.sno AND s.ssex = 1);</code></pre>
<ol start="38">
<li>查询成绩高于该门课程平均分的学生学号和课程号</li>
</ol>
<pre><code class="language-sql">SELECT sc.sno, sc.cno, sc.grade
FROM StuInfo.dbo.SC sc
WHERE sc.grade IS NOT NULL
  AND sc.grade &gt;
      (SELECT AVG(CAST(grade AS FLOAT)) FROM StuInfo.dbo.SC WHERE cno = sc.cno AND grade IS NOT NULL);</code></pre>
<ol start="39">
<li>查询每门课程最高分的学生学号和课程号</li>
</ol>
<pre><code class="language-sql">SELECT sc.cno, sc.sno, sc.grade
FROM StuInfo.dbo.SC sc
JOIN (
    SELECT cno, MAX(grade) AS max_grade
    FROM StuInfo.dbo.SC
    GROUP BY cno
) m ON sc.cno = m.cno AND sc.grade = m.max_grade;</code></pre>
<ol start="40">
<li>查询每门课程最低分的学生学号</li>
</ol>
<pre><code class="language-sql">SELECT sc.cno, sc.sno, sc.grade
FROM StuInfo.dbo.SC sc
JOIN (
    SELECT cno, MIN(grade) AS min_grade
    FROM StuInfo.dbo.SC
    WHERE grade IS NOT NULL
    GROUP BY cno
) m ON sc.cno = m.cno AND sc.grade = m.min_grade;</code></pre>
<ol start="41">
<li>查询每门课程的最低分及其课程名称</li>
</ol>
<pre><code class="language-sql">SELECT c.cno, c.cname, m.min_grade
FROM StuInfo.dbo.C c
JOIN (
    SELECT cno, MIN(grade) AS min_grade
    FROM StuInfo.dbo.SC
    WHERE grade IS NOT NULL
    GROUP BY cno
) m ON c.cno = m.cno;</code></pre>
<ol start="42">
<li>查询所有学生及其选修课程的课程名称、成绩（若未选课仍显示学生）</li>
</ol>
<pre><code class="language-sql">SELECT s.sno, s.sname, c.cname, sc.grade
FROM StuInfo.dbo.S s
LEFT JOIN StuInfo.dbo.SC sc ON s.sno = sc.sno
LEFT JOIN StuInfo.dbo.C c ON sc.cno = c.cno
ORDER BY s.sno;</code></pre>
<ol start="43">
<li>显示所有课程的成绩，按照课程号升序排列，成绩降序排列（观察 NULL 排序位置）</li>
</ol>
<pre><code class="language-sql">SELECT sc.cno, sc.sno, sc.grade
FROM StuInfo.dbo.SC sc
ORDER BY sc.cno ASC, sc.grade DESC;</code></pre>
<blockquote>
<p>备注：在 SQL Server 中 <code>NULL</code> 在 <code>ORDER BY ... DESC</code> 时通常会被排在最后还是最前取决于版本/实现，可通过 <code>ORDER BY sc.cno, CASE WHEN sc.grade IS NULL THEN 1 ELSE 0 END ASC, sc.grade DESC</code> 明确控制 <code>NULL</code> 显示在前或后。</p>
</blockquote>
<hr />
<p>如果你要我：</p>
<ul>
<li>把这些 SQL 放到一个 <code>.sql</code> 文件里（按题号注释分组），我可以直接把整理好的文本给你；</li>
<li>或者把某几题改成更“严格”的实现（例如：只统计已登记学分、只统计已录成绩、或按 <code>sdept</code> 的不同写法兼容）——告诉我你想要的格式，我直接改好给你。</li>
</ul>
<p>另外提醒两点：</p>
<ol>
<li>上面含有若干处对 <code>sdept</code>、<code>sname</code>、<code>cname</code> 的字符串匹配，我用了 <code>LTRIM(RTRIM(...))</code> 或 <code>LIKE</code> 来提高鲁棒性；</li>
<li>关于 <code>ssex</code> 的编码（男/女 对应 0/1）如前所述不一致的话请按你数据实际值把 <code>ssex = 0</code> / <code>= 1</code> 对调——我可以帮你统一检查并修正条件。</li>
</ol>
<p>要我直接把这些查询打包成一个带注释的 <code>.sql</code> 文件吗？还是先把哪几题的输出示例跑一遍（给出预期结果示例）？</p>]]></description>
    <pubDate>Mon, 22 Sep 2025 19:01:25 +0800</pubDate>
    <dc:creator>谪仙</dc:creator>
    <guid>https://zhexiange.com/34.html</guid>
</item>
<item>
    <title>数据库上机</title>
    <link>https://zhexiange.com/33.html</link>
    <description><![CDATA[<p><a href="https://zhexiange.com/?resource_alias=9NSg6bQMCazPzKzf&amp;resource_filename=38d61757986833">新建 WinRAR ZIP archiv...</a></p>
<p>CREATE TABLE Student (<br />
Sno CHAR(8) PRIMARY KEY,<br />
Sname VARCHAR(20) NOT NULL,<br />
Ssex CHAR(2) CHECK (Ssex IN ('男', '女')),<br />
Sbirthdate DATE,<br />
Smajor VARCHAR(50)<br />
);<br />
CREATE TABLE Course (<br />
Cno CHAR(5) PRIMARY KEY,<br />
Cname VARCHAR(50) NOT NULL,<br />
Credit INT CHECK (Credit &gt; 0),<br />
Cpno CHAR(5),<br />
FOREIGN KEY (Cpno) REFERENCES Course(Cno) ON UPDATE NO ACTION ON DELETE NO ACTION<br />
);<br />
CREATE TABLE SC (<br />
Sno CHAR(8),<br />
Cno CHAR(5),<br />
Grade INT CHECK (Grade &gt;= 0 AND Grade &lt;= 100),<br />
Semester CHAR(6),<br />
Teachingclass VARCHAR(20),<br />
PRIMARY KEY (Sno, Cno),<br />
FOREIGN KEY (Sno) REFERENCES Student(Sno) ON UPDATE CASCADE ON DELETE CASCADE,<br />
FOREIGN KEY (Cno) REFERENCES Course(Cno) ON UPDATE CASCADE ON DELETE CASCADE<br />
);<br />
INSERT INTO Student (Sno, Sname, Ssex, Sbirthdate, Smajor)<br />
VALUES<br />
('20180001', '李勇', '男', '2000-03-08', '信息安全'),<br />
('20180002', '刘晨', '女', '1999-09-01', '计算机科学与技术'),<br />
('20180003', '王敏', '女', '2001-08-01', '计算机科学与技术'),<br />
('20180004', '张立', '男', '2000-01-08', '计算机科学与技术'),<br />
('20180005', '陈新奇', '男', '2001-11-01', '信息管理与信息系统'),<br />
('20180006', '赵明', '男', '2000-06-12', '数据科学与大数据技术'),<br />
('20180007', '王佳佳', '女', '2001-12-07', '数据科学与大数据技术');<br />
INSERT INTO Course (Cno, Cname, Credit, Cpno)<br />
VALUES<br />
('81001', '程序设计基础与C语言', 4, NULL),<br />
('81002', '数据结构', 4, '81001'),<br />
('81003', '数据库系统概论', 4, '81002'),<br />
('81004', '信息系统概论', 4, '81003'),<br />
('81005', '操作系统', 4, '81001'),<br />
('81006', 'Python语言', 3, '81002'),<br />
('81007', '离散数学', 4, NULL),<br />
('81008', '大数据技术概论', 4, '81003');<br />
INSERT INTO SC (Sno, Cno, Grade, Semester, Teachingclass)<br />
VALUES<br />
('20180001', '81001', 85, '20192', '81001-01'),<br />
('20180001', '81002', 96, '20201', '81002-01'),<br />
('20180001', '81003', 87, '20202', '81003-01'),<br />
('20180002', '81001', 80, '20192', '81001-02'),<br />
('20180002', '81002', 98, '20201', '81002-01'),<br />
('20180003', '81001', 71, '20202', '81001-02'),<br />
('20180003', '81003', 82, '20192', '81003-01'),<br />
('20180003', '81002', 76, '20201', '81002-02'),<br />
('20180004', '81001', 56, '20192', '81001-02'),<br />
('20180004', '81002', 97, '20201', '81002-02'),<br />
('20180005', '81003', 68, '20202', '81003-01');</p>
<p>CREATE TABLE S (<br />
SNO CHAR(2) PRIMARY KEY,<br />
SNAME VARCHAR(20) NOT NULL,<br />
STATUS INT,<br />
CITY VARCHAR(20)<br />
);<br />
GO</p>
<p>CREATE TABLE P (<br />
PNO CHAR(2) PRIMARY KEY,<br />
PNAME VARCHAR(20) NOT NULL,<br />
COLOR VARCHAR(10),<br />
WEIGHT INT<br />
);<br />
GO</p>
<p>CREATE TABLE J (<br />
JNO CHAR(2) PRIMARY KEY,<br />
JNAME VARCHAR(20) NOT NULL,<br />
CITY VARCHAR(20)<br />
);<br />
GO</p>
<p>CREATE TABLE SPJ (<br />
SNO CHAR(2),<br />
PNO CHAR(2),<br />
JNO CHAR(2),<br />
QTY INT,<br />
PRIMARY KEY (SNO, PNO, JNO),<br />
FOREIGN KEY (SNO) REFERENCES S(SNO),<br />
FOREIGN KEY (PNO) REFERENCES P(PNO),<br />
FOREIGN KEY (JNO) REFERENCES J(JNO)<br />
);<br />
GO</p>
<p>INSERT INTO S (SNO, SNAME, STATUS, CITY)<br />
VALUES<br />
('S1', '精益', 20, '天津'),<br />
('S2', '盛锡', 10, '北京'),<br />
('S3', '东方红', 30, '北京'),<br />
('S4', '丰泰盛', 20, '天津'),<br />
('S5', '为民', 30, '上海');<br />
GO</p>
<p>INSERT INTO P (PNO, PNAME, COLOR, WEIGHT)<br />
VALUES<br />
('P1', '螺母', '红', 12),<br />
('P2', '螺栓', '绿', 17),<br />
('P3', '螺丝刀', '蓝', 14),<br />
('P4', '螺丝刀', '红', 14),<br />
('P5', '凸轮', '蓝', 40),<br />
('P6', '齿轮', '红', 30);<br />
GO</p>
<p>INSERT INTO J (JNO, JNAME, CITY)<br />
VALUES<br />
('J1', '三建', '北京'),<br />
('J2', '一汽', '长春'),<br />
('J3', '弹簧厂', '天津'),<br />
('J4', '造船厂', '天津'),<br />
('J5', '机车厂', '唐山'),<br />
('J6', '无线电厂', '常州'),<br />
('J7', '半导体厂', '南京');<br />
GO</p>
<p>INSERT INTO SPJ (SNO, PNO, JNO, QTY)<br />
VALUES<br />
('S1', 'P1', 'J1', 200),<br />
('S1', 'P1', 'J3', 100),<br />
('S1', 'P1', 'J4', 700),<br />
('S1', 'P2', 'J2', 100),<br />
('S2', 'P3', 'J1', 400),<br />
('S2', 'P3', 'J2', 200),<br />
('S2', 'P3', 'J4', 500),<br />
('S2', 'P3', 'J5', 400),<br />
('S2', 'P5', 'J1', 400),<br />
('S2', 'P5', 'J2', 100),<br />
('S3', 'P1', 'J1', 200),<br />
('S3', 'P3', 'J1', 200),<br />
('S4', 'P5', 'J1', 100),<br />
('S4', 'P6', 'J3', 300),<br />
('S4', 'P6', 'J4', 200),<br />
('S5', 'P2', 'J4', 100),<br />
('S5', 'P3', 'J1', 200),<br />
('S5', 'P6', 'J2', 200),<br />
('S5', 'P6', 'J4', 500);<br />
GO</p>]]></description>
    <pubDate>Tue, 16 Sep 2025 09:05:50 +0800</pubDate>
    <dc:creator>谪仙</dc:creator>
    <guid>https://zhexiange.com/33.html</guid>
</item>
<item>
    <title>「备忘录」vue基本指令</title>
    <link>https://zhexiange.com/jsbj/32.html</link>
    <description><![CDATA[<h1>vue基本指令</h1>
<p>好 👍 我给你总结一下 <strong>Vue 的基本指令</strong> 和 <strong>使用方法</strong>（这里以 Vue2 为例，Vue3 也大体相同）：</p>
<hr />
<h2>🔹 1. <code>v-bind</code> —— 属性绑定</h2>
<p>把数据绑定到标签属性上。</p>
<pre><code class="language-html">&lt;div id="app"&gt;
  &lt;a v-bind:href="url"&gt;点击跳转&lt;/a&gt;
  &lt;!-- 简写形式 --&gt;
  &lt;a :href="url"&gt;简写绑定&lt;/a&gt;
&lt;/div&gt;

&lt;script&gt;
new Vue({
  el: '#app',
  data: {
    url: 'https://vuejs.org'
  }
})
&lt;/script&gt;</code></pre>
<hr />
<h2>🔹 2. <code>v-model</code> —— 双向绑定</h2>
<p>常用于表单输入。</p>
<pre><code class="language-html">&lt;div id="app"&gt;
  &lt;input v-model="message" placeholder="输入点什么"&gt;
  &lt;p&gt;你输入的内容：{{ message }}&lt;/p&gt;
&lt;/div&gt;

&lt;script&gt;
new Vue({
  el: '#app',
  data: {
    message: ''
  }
})
&lt;/script&gt;</code></pre>
<hr />
<h2>🔹 3. <code>v-if</code> / <code>v-else-if</code> / <code>v-else</code> —— 条件渲染</h2>
<p>根据条件显示或隐藏元素。</p>
<pre><code class="language-html">&lt;div id="app"&gt;
  &lt;p v-if="score &gt;= 90"&gt;优秀&lt;/p&gt;
  &lt;p v-else-if="score &gt;= 60"&gt;及格&lt;/p&gt;
  &lt;p v-else&gt;不及格&lt;/p&gt;
&lt;/div&gt;

&lt;script&gt;
new Vue({
  el: '#app',
  data: {
    score: 75
  }
})
&lt;/script&gt;</code></pre>
<hr />
<h2>🔹 4. <code>v-show</code> —— 显隐（通过 <code>display: none</code> 控制）</h2>
<pre><code class="language-html">&lt;div id="app"&gt;
  &lt;p v-show="isShow"&gt;这是一段文字&lt;/p&gt;
  &lt;button @click="isShow = !isShow"&gt;切换显示&lt;/button&gt;
&lt;/div&gt;

&lt;script&gt;
new Vue({
  el: '#app',
  data: {
    isShow: true
  }
})
&lt;/script&gt;</code></pre>
<hr />
<h2>🔹 5. <code>v-for</code> —— 循环渲染</h2>
<pre><code class="language-html">&lt;div id="app"&gt;
  &lt;ul&gt;
    &lt;li v-for="(item, index) in items" :key="index"&gt;
      {{ index + 1 }}. {{ item }}
    &lt;/li&gt;
  &lt;/ul&gt;
&lt;/div&gt;

&lt;script&gt;
new Vue({
  el: '#app',
  data: {
    items: ['苹果', '香蕉', '橙子']
  }
})
&lt;/script&gt;</code></pre>
<hr />
<h2>🔹 6. <code>v-on</code> —— 事件绑定</h2>
<pre><code class="language-html">&lt;div id="app"&gt;
  &lt;button v-on:click="sayHello"&gt;点我&lt;/button&gt;
  &lt;!-- 简写 --&gt;
  &lt;button @click="sayHello"&gt;点我&lt;/button&gt;
&lt;/div&gt;

&lt;script&gt;
new Vue({
  el: '#app',
  methods: {
    sayHello () {
      alert('Hello Vue!')
    }
  }
})
&lt;/script&gt;</code></pre>
<hr />
<h2>🔹 7. <code>v-text</code> / <code>v-html</code></h2>
<ul>
<li><code>v-text</code>：设置文本内容（类似 <code>{{ }}</code>）</li>
<li><code>v-html</code>：渲染 HTML（注意可能有 XSS 风险）</li>
</ul>
<pre><code class="language-html">&lt;div id="app"&gt;
  &lt;p v-text="msg"&gt;&lt;/p&gt;
  &lt;p v-html="htmlMsg"&gt;&lt;/p&gt;
&lt;/div&gt;

&lt;script&gt;
new Vue({
  el: '#app',
  data: {
    msg: '你好，Vue',
    htmlMsg: '&lt;strong style="color:red;"&gt;加粗红色文字&lt;/strong&gt;'
  }
})
&lt;/script&gt;</code></pre>
<hr />
<h2>🔹 8. <code>v-cloak</code> —— 防止闪烁</h2>
<p>在 Vue 没加载完时防止模板 <code>{{ }}</code> 闪烁。</p>
<pre><code class="language-html">&lt;style&gt;
[v-cloak] { display: none; }
&lt;/style&gt;

&lt;div id="app" v-cloak&gt;
  {{ message }}
&lt;/div&gt;</code></pre>
<hr />
<p>👉 总结：<br />
常用的指令有：</p>
<ul>
<li>数据绑定：<code>v-bind</code>、<code>v-model</code></li>
<li>条件/循环：<code>v-if</code>、<code>v-else</code>、<code>v-show</code>、<code>v-for</code></li>
<li>事件：<code>v-on</code>（<code>@</code>）</li>
<li>文本/HTML：<code>v-text</code>、<code>v-html</code></li>
<li>辅助：<code>v-cloak</code></li>
</ul>]]></description>
    <pubDate>Wed, 20 Aug 2025 16:21:11 +0800</pubDate>
    <dc:creator>谪仙</dc:creator>
    <guid>https://zhexiange.com/jsbj/32.html</guid>
</item>
</channel>
</rss>