%!TEX program = xelatex
%!TEX options=--shell-escape

\documentclass{npreport}
\begin{document}

\coursename{网络程序设计}  % 课程名称
\studentname{张　三}       % 姓名
\studentid{20180x00xxxx}   % 学号
\studenttype{指挥类}       % 培养类型
\studentgrade{2018级}      % 年级
\major{网　络　工　程}     % 专业
\school{计算机学院}        % 所属学院
\teacher{李　四}           % 授课教员

% 关键词
\keyword{关键词，很关键的词，十分关键的词，有一些关键的词}

% 封面与目录
% 实验报告双面打印；封面、目录与正文均从奇数页起始，不足双页则以空白页补齐。
\makecover
\tableofcontents

% 摘要
\begin{Abstract}
  摘要内容，小五号宋体，不超过500字。摘要是一篇文献的重要组成部分，能在第一时间给予读者最重要的信息，应该给予高度重视。摘要内容为简要概述主要的实验内容和结果，通常分为四个部分：实验的背景和意义、实验要研究的内容或对象、具体实验方法以及实验的结果。在撰写摘要时应该完整包含实验的基本信息和要点，使用标准精确的词汇和语言，清晰紧凑地概述客观事实；摘要整体形式上应该结构严谨，撰写思路要清楚，保证基本素材组织合理。关键词为经过规范化处理的词语或短语，数量一般为3～5个。
\end{Abstract}

% 正文
\wuhao %正文使用五号字体
\section{引~~言}

以下为正文内容，五号宋体。引言应简要说明所做实验的背景和意义，如有可能，应介绍相关领域内前人所做的工作和研究的概况；然后列出本实验准备研究的内容，或者准备在实验中解决的问题；然后概述主要实验内容和结果。

引言行文应言简意赅，但不要重复摘要和解释摘要。在文风上要防止吹嘘自己和贬低别人，避免使用宣传性的用语，尽量不要出现图表。引言中关于目前与本实验有关领域的研究进展和应用，最好自己上网查阅一两篇综述文献做大概的了解，查文献并对文献总结是做科研必备的基本功，希望在实验中有所体验。文中引用的结论性文字要标注参考文献，须加方括号，一般置于右上角，如\cite{赵梓铭2018边缘计算, 傅颖勋2013安全云存储综述}。

实验报告是科研文献撰写的简单和初级形态。撰写实验报告不仅是对课程实验的总结，也能锻炼自己科研写作的能力。应该认真对待每篇实验报告的撰写工作，按照尽量规范的形式撰写实验报告，这不仅能提升课程的分数，也同时是提升自己写作能力的重要机会。

在撰写实验报告时，应特别注意以下两个问题：

\begin{itemize}
  \item 严禁在实验报告中大段复制源代码，确有重要算法需要说明的用流程图或者伪代码说明，确实有非常重要的代码可以小片段引用；
  \item 若为多人分组实验，参与实验的每人均应提交一份实验报告，在实验报告中应详细介绍每个组员的详细工作分工，并尽量介绍自己的工作，不要大段描述其他组员的工作。
\end{itemize}

\section{实验内容}
从本节开始详细说明实验过程，其内容通常应该为详细说明实验要求，即通过实验要解决的具体问题；具体的实验内容，包括基于什么技术，有哪些关键算法和代码等；以及实验的结果。注意实验内容不是指实验操作步骤，实验部分写作重点是实验方法和实验中使用的重点技术，需要自己概括叙述，不是对实验过程的流水帐记录，尤其不要照抄实验指导书中的实验过程部分。

若课程实验包含多个不相关的实验，或者一个大的课程实验可以分为多个子部分，则可以将每个实验或子实验单独分节。每节的题目为该部分实验的内容，例如：“基于HTML与CSS的网页设计”、“基于SQLite的会话管理”等。分节叙述时，应该在最开始设置一个总集节对实验进行整体描述，并在其中说明实验作品的整体设计，组内成员的详细分工，实验作品的开发进度安排等。如果有通用的软硬件需求，也应该在这一节进行说明。

本节后续内容为一个总集节的实例，总集节的节标题可以简单取为“实验内容”。下一节（“3 基于 SQLite 与会话的用户管理”）为一个简单的具体实验示例。示例部分为蓝色字体。

\color{blue} %以下为蓝色字体颜色
本课程实验的需要基于Node.js技术开发一个具有用户管理能力的，基于Web页面的在线贪吃蛇游戏。该游戏具有如下特点：
\begin{itemize}
  \item 游戏支持至多两名玩家同时在线游戏；
  \item 玩家通过浏览器直接进入游戏，无需下载客户端；
  \item ……
\end{itemize}

\subsection{实验分组}
本课程实验分组完成，本实验小组共两人，分别为张三与王五。分工如表\ref{tab:responsibility}所示：

\begin{table}[h]
  \color{blue} %表格使用蓝色字体颜色
  \centering
  \caption{小组分工} \label{tab:responsibility}
  \liuhao
  \begin{tabular}{|c|c|}
    \hline
    {\heiti{成员}} &  {\heiti{工作}} \\   \hline
    张三 & 系统总体设计；接口协议设计与实现\\ \hline
    王五 & 界面设计与实现；数据库读写与实现\\ \hline
  \end{tabular}
\end{table}

具体而言，张三的工作包括……；王五的工作包括……。

\subsection{进度安排}

本课程实验计划按照课程的安排持续推进，将实验内容主要分为以下部分：

\begin{enumerate}
  \item 需求分析：在该阶段，主要完成……工作，该部分预计工作时间为1周。
  \item 概要设计：在该阶段，主要完成……工作，该部分预计工作时间为……周。
  \item ……：（分组实验这里应该写作者本人的实验进度安排）
  \item 联调测试：再改阶段，主要进行系统的联调和测试，需要具体完成……工作，该部分预计工作时间为……周。
\end{enumerate}

主要安排与时间节点如图\ref{fig:milestone}所示（有必要的话，可以用图表来进行描述）。

\begin{figure}[h]
  \centering
  \includegraphics[width=0.9\linewidth]{milestone}
  \caption{项目时间安排} \label{fig:milestone}
\end{figure}

\subsection{实验环境}
（整个实验共用的软硬件环境，包括网络拓扑，应该说明清楚）

本实验在Windows下进行开发，并利用虚拟机构建虚拟的局域网络进行联调与测试，主要的软硬件实验环境主要包括：

\subsubsection{硬件环境}

整个实验小组共使用PC笔记本电脑两台，并通过手机WiFi热点连接到同一个互联网中，其网络拓扑如图\ref{fig:topo}所示。

\begin{figure}[h]
  \centering
  \includegraphics[width=0.7\linewidth]{topo}
  \caption{硬件网络拓扑结构} \label{fig:topo}
\end{figure}

……（关于硬件的更多详细说明）……

\subsubsection{软件环境}

实验过程中用到的软件如下：

\begin{itemize}
  \item 操作系统
    \begin{itemize}
      \item Windows 11，开发笔记本操作系统
      \item Ubuntu 22.04，测试服务器操作系统
      \item ……
    \end{itemize}
  \item 开发环境
  \begin{itemize}
    \item VirtualBox 6.1，用于搭建虚拟测试网络
    \item VSCode，集成开发环境
    \item ……
  \end{itemize}
\item 测试工具
\item ……
\end{itemize}

（也可以采用图表的形式，列出使用的软件类型，名称，版本及在实验中的作用）

\section{基于SQLite与会话的用户管理}

在利用Express框架实现了基本的动态网页之后，本节需要在其基础上利用SQLite与Express内置的会话中间见实现用户管理机制。

\subsection{实验要求}

在本阶段，需要进一步完成游戏系统，使系统具体达成以下能力：

\begin{itemize}
  \item 系统可以通过SQLite数据库存储用户信息；
  \item 可以通过“注册用户”页面向系统添加新的用户；
  \item 可以通过“登录”页面登录系统；
  \item ……
\end{itemize}

\subsection{实验内容}

为了实现上述实验要求，拟分别采用……技术进行开发，本部分的实验工作具体可分为“用户登录注册页面”，“数据库访问模块”，“用户数据表设计”，“用户管理逻辑”，“登录管理逻辑”几个方面，下面分别进行详细说明。

\subsubsection{用户登录注册页面}

（……详细说明……）

\subsubsection{数据库访问模块}

为了方便与数据库交互，在实验的这个阶段实现了一个通用的数据库访问模块，该模块的设计思路是……。

基于上述思路，该模块主要包括了……与……等几部分，其结构如图x所示。

由于node.js默认采用了异步调用方法的特性，在进行数据库访问时可能导致数据访问不成功，因此设计了一个同步调用的封装方法进行处理，该方法的关键代码片段如表\ref{tab:db}所示。

\begin{table}[h]
\centering
\caption{数据库同步调用代码} \label{tab:db}
\begin{code}[javascript]
new Promise((resolve, reject) => {
  pool.getConnection(function (err, connection) {
    if (err) {
      reject(err)
    } else {
      connection.query(
        sql, values, (err, rows) => {
          if (err) {
            reject(err)
          } else {
            resolve(rows)
          }
          connection.release()
        })
    }
  })
}
\end{code}
\end{table}

在上述代码中，采用Promise类实现了同步调用，具体而言……。该部分的代码参考了网页“在Node.js使用Promise的方式操作Mysql”\cite{Promise_Node}中对数据库的操作。

……

\subsubsection{其他部分}

（……详细说明……）

（对该部分实验中有重要意义的过程，尤其是与实验要求相关的内容都可以以三级标题的小节分别进行说明。重点说明如何使用相关技术实现要求，使用何种特别的算法、模式、设计来实现。尽量配以图、表进行说明。确有非常重要的代码片段，可以插入，并需要在代码后进行详细说明。如果实验过程中参考了任何资料，包括网络资源，应该用引用参考文献的方式进行详细说明。）

\subsection{实验结果}

通过上述实验，成功在系统中实现了对用户登录的支持。具体测试结果如图x所示。

测试结果显示，该部分的实验已经达到了实验要求，此外在……方面还实现了更加……的效果。

（每个分节都应该给出给部分实验结果。实验结果可以以图、表的形式给出，并应该明确与实验要求之间对比的达成度，如果有值得特别说明的部分，可以更加详细的进行分析和说明。）

\color{black} %以下恢复正常字体颜色

\section{格式与规范}

实验报告的撰写应该遵循必要的格式规范，全文分节合理，逻辑清楚，使用列表时应该全文统一格式。使用图、表、代码、英文字母和缩写时务必规范。

\subsection{图、表和代码使用规范}
\subsubsection{图的编号与引用}
插图全文顺序编号。插图内容应与正文内容密切结合，每幅图前都应有相应的引出或介绍文字，并使用“如图\ref{fig:topo}所示”这类正式的文字进行引用，在图后应该对图中的内容做必要解释。图形应保证线条清晰，大小应适应版面要求，合理布局，图内如有标注或说明性文字时应清晰可辨。图中除了物理量符号及单位外一律用中文，同一图中的不同曲线应用不同线型表示。图形尽量使用矢量图形，确有必要使用点阵图像时，应尽量保证使用搞分辨率图像，如图\ref{fig:tianhe}所示。

\begin{figure}[h]
\centering
\includegraphics[width=0.8\linewidth]{tianhe}
\caption{高分辨率图像} \label{fig:tianhe}
\end{figure}

\subsubsection{表与代码的使用}

按表格在文中出现的顺序，同样用阿拉伯数字对其进行编号，全文顺序编号。与图片类似，相应的表题且每个表格前都应有相应的引出或介绍文字，并使用“如表\ref{tab:responsibility}所示”这类正式的文字进行引用。

表格推荐采用全线表，表头中使用量符号/量单位形式。表\ref{tab:responsibility}即为全线表。确有别要的情况下，也可以使用标准“三线表”的形式，表\ref{tab:tline}即为三线表示例。表中的数据存在量纲时，应该在表头中注明量纲。

\begin{table}[h]
\centering
\caption{三线表示例} \label{tab:tline}
\liuhao
\begin{tabular}{cccc}
\toprule
{测试编号} &  {模块} & {加载时间（ms）} & {响应时间（ms）}\\
\midrule
4 & 数据库访问 & 268 & 300\\
5 & 人脸识别 & 1034 & 2000\\
\bottomrule
\end{tabular}
\end{table}

在实验报告中插入代码时，按表进行编号，代码应该尽量简短，利用模板提供的code环境可以实现不同语言的代码着色。如表\ref{tab:python}所示的代码即按照python语法进行了代码着色
\begin{table}[h]
  \centering
  \caption{TCP服务器Python实现} \label{tab:python}
  \begin{code}[python]
  import socket
  import time
  def recv_data(sock,length):
    data=b''
    while len(data) < length:
      more = sock.recv(length - len(data))
      if not more:
        pass
      data += more
    return data         
  s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
  # 设置接收缓冲区大小为1024
  s.setsockopt(socket.SOL_SOCKET, socket.SO_RCVBUF, 1024)
  s.bind(('0.0.0.0', 9999))
  s.listen(1)
  print("Sever listening on 9999...")
  try:
    sc, addr = s.accept()
    while True:
      rcvdata = recv_data(sc,16)
      time.sleep(0.01)
      pass
  finally:
    sc.close()
    s.close() 
  \end{code}
  \end{table}
  
\subsection{公式与字母}
实验报告中若使用公式，应全文统一编号，并加以必要的说明。如公式（\ref{eq:random}）所示。
\begin{equation}\label{eq:random}
\frac{\partial u}{\partial x}+\frac{\partial v}{\partial y}+\frac{\partial w}{\partial z}=0
\end{equation}

在式（\ref{eq:random}）中，$u$是××××（单位）；$v$是×××（单位）；$w$是××（单位）。

一般情况下，需要引用的或重要的公式才编号。在文中引用时，用“式（编号）”表示。后文不再提及的，可以不编号。如
\begin{equation*}
1 + 1 + 3 = 5
\end{equation*}

对于公式中首次出现的量的符号，按照其在式中出现的顺序，用准确、简洁的语句对其进行逐一解释。公式中变量应尽量避免复合上下角标的使用。

\subsection{中英文缩略语}
文中的英文缩略语应在首次出现时给出中文含义以及英文全称后再使用。例如，全球定位系统(Global Positioning System，GPS)。

\subsection{外文字母的使用}
\subsubsection{斜体外文字母}

用于表示量的符号，主要用于下列场合
\begin{enumerate}
  \item 变量符号、变动附标及函数。
  \item 用字母表示的数及代表点、线、面、体和图形的字母。
  \item 特征数符号，如Re (雷诺数)、Fo (傅里叶数)、Al (阿尔芬数)等。
  \item 在特定场合中视为常数的参数。
\end{enumerate}

\subsubsection{正体外文字母}

用于表示名称及与其有关的代号，主要用于下列场合
\begin{enumerate}
  \item 有定义的已知函数（例如$\sin$, $\exp$, $\ln$等)。
  \item 其值不变的数学常数（例如$\mathrm{e} = 2.718 281 8\cdots)$及已定义的算子。
  \item 法定计量单位、词头和量纲符号。
  \item 数学符号。
  \item 化学元素符号。
  \item 机具、仪器、设备和产品等的型号、代号及材料牌号。
  \item 不表示量的外文缩写字。
  \item 表示序号的拉丁字母。
  \item 量符号中为区别其他量而加的具有特定含义的非量符号下角标。
\end{enumerate}

\section{实验结果与分析}

在实验报告的最后，应该对完整的系统进行测试和分析，内容与每个分节中的实验结果类似，但这里描述对整个课程实验的测试结果，不要在这里重复每节中的测试。

对测试结果应该进行一定的分析，对性能等结果尽量给出定量分析，并以图或表形式给出，并对图、表所反映的现象做出具体说明和解释。并设法进一步分析讨论影响实验结果的因素，改进方法等。

\section{结~~论}
用准确、精炼的语言归纳总结使用的方法以及研究结果。

在这里还可以说明自己做本实验的总结、收获和体会，对实验中发现的问题提出自己的建议。

%  参考文献
\makebibliography{demo}
%  参考文献按GB/T 7714－2015《文后参考文献著录规则》的要求著录.
%  参考文献在正文中的引用方法：\cite{bib文件条目的第一行}

\end{document}
