提交 eed31668 编辑于 作者: 魔法少女赵志辉's avatar 魔法少女赵志辉 🍊
浏览文件

Update project0

上级 a58c2a56
\documentclass{dreamClass}
%\newcommand\CC{C\nolinebreak\hspace{-.05em}\raisebox{.4ex}{\relsize{-1}{\textbf{+}}}\nolinebreak\hspace{-.10em}\raisebox{.4ex}{\relsize{-1}{\textbf{+}}}}
\def\CC{{C\nolinebreak[4]\hspace{-.05em}\raisebox{.4ex}{\small\bf ++}}}
\title{
% \vspace{-30pt}
\textbf{\Huge Project0}\\
\textbf{\huge 《高级程序设计》课程项目说明}
}
\author{刘添翼\thanks{\href{mailto:tyi.liu@outlook.com}{tyi.liu@outlook.com}}}
\affil{计算机科学与技术系,南京大学}
\date{\today}
\begin{document}
\maketitle
\thispagestyle{empty}
\section{课程项目}
课程项目,或者说project,是《高级程序设计》课程任务的一部分,预计将构成课程成绩的20\%
\subsection{要求与原则}
课程项目将会是一个有足够规模的,能行使一定功能的,体现出面向对象和泛型程序设计思想的,带有GUI(Graphics User Interface,图形界面)的,有趣的,\CC{}程序。
课程项目应当是从第一行代码开始独立完成的。如有必要,可以使用任何由\CC{}语言写成的函数库。当然,恰好能直接完成课程项目要求的或许不能用:我们希望各位同学自己动手,实现它们。
\subsection{日程安排}
2021年秋季学期有17周,从2021年8月30日起到2021年12月26日止。考虑到前2周可以自由退补选课程,我们将从第3周开始正式安排项目。
本学期的课程项目预计将分成三个阶段,每个阶段的最后期限分别设置在第6周、第11周和第16周结束时。
各位同学被期望在每个阶段完成一定的任务,通过分步走的方式,逐步完善自己的课程项目。
\subsection{验收与评分标准}
助教将一对一验收每位同学的课程项目的每个阶段。因此,各位同学需要给出:
\begin{itemize}
\item 课程项目的源代码。
\begin{itemize}
\item 在验收时,助教将就代码中自己感兴趣的点进行提问。各位同学被期望可以回答出这些问题。
\end{itemize}
\item 课程项目的可执行文件。
\begin{itemize}
\item 在验收时,助教将当面运行这个文件。各位同学被期望能向助教就课程项目的功能进行演示。
\end{itemize}
\item 课程项目的对应阶段的项目报告。
\begin{itemize}
\item 项目报告需要是一份\texttt{pdf}格式的文件。内容的具体组织方式不拘,长度宜\emph{},但要清楚地包含:
\begin{itemize}
\item 项目的整体设计,
\item 与实现方式。
\end{itemize}
例如,可以交代项目中主要含有的类,以及它们之间的交互。
还可以稍微提一提:
\begin{itemize}
\item 项目中有趣的地方,
\item 和完成项目时遇到的问题。
\end{itemize}
\end{itemize}
\item 助教可能就项目的整体设计进行提问。各位同学被期望能让助教理解自己的课程项目是如何被构建的。
\end{itemize}
验收时助教将对课程项目进行评分,评分标准包括:
\begin{itemize}
\item 是否实现了指定的功能,
\item 是否有一个\emph{好用的}(而不关心\emph{好看的})界面,
\item 是否实现了\emph{有趣的}(而不关心\emph{凑数的})功能。
\end{itemize}
\subsection{内容}
这个学期的课程项目的具体内容…很遗憾还没有确定下来。这里给出往年的一些题目作为参考:
\begin{itemize}
\item 实现一个从Markdown到HTML的编译器,并以此实现带预览功能的Markdown编辑器。
\item 模仿植物大战僵尸/坦克大战/…,实现一个自己的游戏。
\item 实现一个内存分配器,取代标准库提供的\texttt{malloc()}\texttt{free()},并引入更多的功能,例如内存安全检查和图形化的界面。
\item 实现一个\textbf{高级}的学生信息管理系统。
\end{itemize}
通常来说,每个学期会同时发布三个以上的项目,每位同学可以任意选择一个并坚持完成。如果想要选择其他自定义的项目,可以联系助教。
\section{关于GUI}
\subsection{一些传统}
《高级程序设计》课程设计的传统包含实现GUI,所以这是一个规定动作。
传统上,课程设计的前两个阶段被限定成项目中不能带有GUI,而第三个阶段的任务通常是为前面完成的项目加上GUI。我(们)觉得没有必要严格保持这个传统。
\subsection{图形库推荐}
如果对\CC{}的图形库并不熟悉,这里我们从简单到复杂给出三个库供参考:
\begin{itemize}
\item FLTK
\item wxWidgets
\item Qt
\end{itemize}
其中的每一个都有足够多的文档和示例程序,互联网上也有足够多的讨论内容,可供学习使用。
我们强烈建议,没有经验的同学在第一时间下载、安装这些库并且实际体验。安装过程可能会极端地痛苦和使人困惑,尤其是对于没有经验的同学来说。如果你遇到这方面的问题,欢迎向助教寻求帮助。
\section{关于开发环境}
课程项目本身并不限定开发环境。但是考虑到课程OJ的情况,我们建议使用gcc或者clang,及其附属的工具链来编译课程项目。
\subsection{OJ}
《高级程序设计》的OJ的评分服务器运行Linux操作系统,使用gcc 4.9.2作为编译器套件,使用\CC{}11作为\CC{}语言的标准。这一点是无法更改的。
\subsection{Visual Studio}
Visual Studio是Windows上非常流行的集成开发环境,它可以用来开发\CC{}程序。不过它默认使用的编译器,MSVC,和gcc/clang的行为存在一定差异(尽管我们可以通过设置项目的编译选项让MSVC的行为和标准尽可能一致,或者在稍新一些的Visual Studio中选择使用clang作为编译器)。总之,如果对自己写的程序是否符合\CC{}标准没有信心,我们建议不要使用Visual Studio作为课程的主力开发环境,这可能会对OJ的分数造成不利影响(比如在本地写的程序可以欢乐地跑起来,但是一传到OJ上就不能正常工作)。
\subsection{Windows}
Windows是非常流行的操作系统,传统上它对开发者不是很友好。
好消息是,新一些的Windows 10中包含了一个名为WSL(Windows Subsystem for Linux,适用于Windows的Linux子系统)的组件。第二代的WSL,被称为WSL2,可以被视作一个轻量化的Linux虚拟机。在Windows 11中,微软为WSL加入了官方的图形界面支持,即为WSLg。
或者,按照传统上的解决方式,可以使用VMware Player、Virtual Box、Hyper-V之类的虚拟机。
再或者,MinGW项目将gcc套件移植到了Windows上。MSYS2是一个这类软件的集合,可以考虑使用这一套工具来在Windows下使用gcc/clang编译器套件。
\subsection{Visual Studio Code / Qt Creator}
Visual Studio Code是非常流行的代码编辑器。通过加入一些插件,它可以很好地胜任《高级程序设计》课程中的开发工作。
Qt Creator本来是为开发使用Qt库的\CC{}程序而设计(在这门课里让我们忽略QML吧)。但它也可以被当作是通常的\CC{}的集成开发环境来使用,或许有些同学会喜欢它。
\subsection{Address Sanitizer / clang-format / clang-tidy / -Wall}
Address Sanitizer是一个开箱即用的内存安全错误检查工具。它对于找出\CC{}程序中的内存错误很有帮助。
clang-format是一个代码排版工具。可以使用它把\CC{}代码排版成自己喜欢的样式。
clang-tidy是一个代码风格检查工具。它可以就代码的不良风格给出警告。
-Wall和-Wextra等是gcc/clang编译器的编译选项。开启这些选项将得到更多的警告,这有助于在编写代码的过程中尽早发现问题。
\section{关于\CC{}}
如果觉得有必要的话,可以找一些经典的\CC{}教材作为自己的参考书。在这里我们推荐\emph{A Tour of \CC{}}\emph{Programming -- Principles and Practice Using \CC{}}\emph{\CC{} Primer}
除此之外,也可以参考互联网上的一些资料,比如\emph{\CC{} Core Guidelines}
\end{document}
Supports Markdown
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册