Skip to content
GitLab
菜单
项目
群组
代码片段
帮助
帮助
支持
社区论坛
快捷键
?
提交反馈
登录/注册
切换导航
菜单
打开侧边栏
魔法少女赵志辉
ap2021a-project
提交
eed31668
提交
eed31668
编辑于
8月 31, 2021
作者:
魔法少女赵志辉
🍊
浏览文件
Update project0
上级
a58c2a56
变更
1
Hide whitespace changes
Inline
Side-by-side
project0/project0.tex
0 → 100644
浏览文件 @
eed31668
\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.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录