热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

清华大学自动化系2020C++大作业引热议,网友:建议直接入职BAT!

你以为上了大学就再也没有作业的烦恼了吗?并不是。近日,来自知乎网友的灵魂一问:“如何看待清华大学自动化系2020年大一c++大作业是写一个功能更强大的雨课堂(雷课堂)?”在网上讨论火热。雷锋网编辑也看了下这个作业,表示连题目都没看懂,学渣哭泣

你以为上了大学就再也没有作业的烦恼了吗?

并不是。

近日,来自知乎网友的灵魂一问:“如何看待清华大学自动化系 2020 年大一 c++大作业是写一个功能更强大的雨课堂(雷课堂)?”在网上讨论火热。雷锋网编辑也看了下这个作业,表示连题目都没看懂,学渣哭泣......

为什么要设计这样一个作业?

首先,我们来看下这个作业设计的大背景。

受疫情影响,在线教育成为这段时间学生和家长的常态。据教育部数据,截至4月初,参加在线课程学习的学生达 11.8 亿人次,参与在线教学教师 1600 万人。

清华大学以“雨课堂”为主、腾讯会议和 ZOOM 等网络会议软件为辅,2019-2020 春季学期共实现了4422 门次课程的网络教学。“雨课堂”以 Office 插件形式,实现一对多的 PPT 展示、在线答题、弹幕、随机点名等师生互动的交互式教学,并可以汇总关键词、懂/不懂、签到、在线时长、注意力集中程度、答题情况等群体和个体统计数据。但网络会议软件在多方语音互动、快速屏幕/窗口共享切换等方面特色突出,但教学信息统计功能缺失。

清华大学自动化系 2020 C++ 大作业引热议,网友:建议直接入职 BAT!

因此,在本学期 C++ 课程开始前的系统测试中,有同学建议自主开发一款集合雨课堂和网络会议优点于一身的网络教学软件,经讨论,清华大学以“雷课堂” (Thunder Class)为题,设计了本学期的大作业。

堪称史上最难作业:清华大学自动化系2020年c++大作业

那么,这个作业的主要内容什么呢?

作业主要分为四个部分,即基本功能要求;系统设计要求;代码与发布要求;报告要求四部分。

雷锋网 (公众号:雷锋网) 截取了部分作业要求,大家一起来康康为什么这个作业堪称史上最难作业。

1. 基本功能要求(*代表教师用户具有的功能)

1.1 用户登陆:根据用户名密码登陆软件,三次密码输入错误自动退出雷课堂软件。根据账号类型(教师/学生)不同自动切换功能。必须包含一个账户名为 Admin,密码为 Admin 的管理员账号,此账号仅能用于管理教师和学生账户的增删改。(不需考虑如何在增删改用户和密码后通知该账户持有者。毕竟我们有微信)

1.2 语音设备选择和切换:教师开始上课前/学生加入课堂前,应可自主选择语音输入和播放设备;并可在课程持续期间随时切换语音设备。

1.3 共享屏幕*:教师在上课过程中,可共享整个屏幕或某个窗口内容给全体同学(包括但不限于PPT 和代码编辑器);可随时切换共享源、停止或再次开始共享屏幕。

1.4 语音直播*:开始上课时,自动开始语音采集,并实时的通过网络传送给所有已经连接到本课堂的学生。

1.5 随机语音提问*:教师可一键(单次鼠标点击或单次快捷键)在全体在线同学中随机选择一名。被选中的同学的麦克风将被自动打开,并发送给教师和其余全体同学。教师可再次一键结束此次语音提问。

1.6 在线发题*:教师可在上课过程中多次动态编辑并向全体同学发送单选/多选题,并实时统计个选项选择人数、选择每个选项的同学名单、每位同学作答的耗时。教师亦可随时中断发题,但仍需统计上述信息

1.7 在线答题:学生在收到试题时,应弹出置顶窗口显示题目和选项,并开始计时。直到学生提交答案或教师中断发题时,才关闭窗口,并将答案和耗时反馈给教师。

1.8 学生签到:进入课堂时自动签到。而教师可收到何时学生签到和退出课堂的信息。(多次签到和退出均需记录)

1.9 注意力:课堂持续期间,学生签到后,“雷课堂软件处于焦点窗口状态的时长”与学生在线时长的百分比,将在下课时反馈给教师做记录。

1.10 上课/下课*:上课时,教师端开始随时接收用户登录请求,并根据用户名密码自动决定是否允许学生端连入。一旦允许连入,之后的语音、屏幕共享均、语音提问、在线答题信息均会传送给该同学。教师下课时,应在接收了全体在线同学的注意力数据后再断开与学生端的网络连接,之后自动生成全部课上统计信息,以文件形式存储并在教师端界面上显示。

1.11 进入课堂/退出课堂:在输入了教师端的IP 地址(或IP 和端口号)后,连接到教师端,实现进入课堂功能并开始网络数据通信。如在30 秒内不能连接到教师端,应弹出提示。在主动退出课堂或直接关闭了软件时,应向教师端发送注意力数据,再断开与教师端的网络连接。(不需考虑如何获取教师端IP 和端口号,毕竟我们有课程微信群)

1.12 麦克风管制:除非收到教师语音提问,否则麦克风时刻处于静音状态。

2. 系统设计要求

2.1 除程序主函数(广义的主函数,可能是WinMain 或其他)和必要的友元函数(要在报告和程序中额外说明每个友元函数的不可替代性:为什么一定要用友元才能实现)外,不允许出现任何一个非类成员函数。

2.2 任何不改变对象状态(不改写自身对象数据成员值)的成员函数均需显示标注const。

2.3 全部类分为三大类:界面类(开发环境提供的、与图形界面相关的类)、业务流程类(仅有一个,用于和界面实现耦合)、核心类(其余全部类)。仅有界面类可以用开发环境自动生成代码框架。仅有业务流程类可以包含开发环境提供类的指针。核心类只允许使用C++11 支持的标准语法、STL、操作系统API。(此条为强烈建议,未实现界面类和核心类分离将严重影响成绩)

2.4 全部语音、屏幕共享、网络传输等需使用操作系统API 的相关操作,均需封装成类代码,再被其他核心类使用。不允许其他核心类直接调用操作系统API。

2.5 除界面类外,任何第三方类库的使用,只能处于源代码级别,不可依赖lib/so/dylib 文件(静态库也不可以)和DLL 文件。全部第三方类库需在报告和程序中著名来源和版权信息。

3. 代码与发布要求

3.1 通过开发环境自动生成的界面类代码,全部数据成员和成员函数需在类声明时加以注释,函数体内的必要步骤要加以注释。

3.2 其他全部类代码的数据成员和成员函数的声明和实现均需加以注释,成员函数的必要步骤要加以注释。

3.3 其他代码规范需遵循学堂发布的编码规范要求。

3.4 发布的程序必须是可运行于Win10/Mac os 10.14 操作系统下的32bit 或64bit的Release 版本:不依赖于具体开发环境的依赖库、不依赖操作系统驱动或功能模块配置、仅仅软件自身可执行文件和必要的数据库库文件(如使用了数据库)。在不可避免的依赖数据库驱动时,应提供自动化安装包:运行安装包即可自动安装和配置数据库驱动、安装软件本身的可执行文件和数据库库文件。特别地:只要可执行文件和数据库库文件的相对路径不变,数据库驱动、可执行文件和数据库库文件安装的绝对路径不可影响软件正常运行。(Mac os 也仅可用C++编程,不可使用Object-C、Swift 或其他语言)

看完作业要求的雷锋网编辑,我只想问:“这个作业是有可能完成的吗”?

打开网友的评论发现,我才发现,不是我一个人.......

清华大学自动化系 2020 C++ 大作业引热议,网友:建议直接入职 BAT!

@ATP合成酶:不只是图像,做直播需要实时采集,压缩成 H264,然后再用 RTSP/RTMP 推流出去,光直播这一项难度就太大了。
 
@Reading:按照这个发展速度 10 后,人均院士。
 
@就是想换一个名字:震惊!清华软院大四特奖得主的编程水平还不如自动化大一学生。[捂脸][捂脸][捂脸][捂脸]
 
@学渣不配拥有网名:哈哈哈救救孩子。
 
@木菜Kina2:还有C++写跨平台图形界面……我已经无法想象这个难度了…
 
 
@一个笨比:建议直接入职 BAT!

清华大学自动化系 2020 C++ 大作业引热议,网友:建议直接入职 BAT!

清华大学自动化系 2020 C++ 大作业引热议,网友:建议直接入职 BAT!

但总的来说,让大家觉得难的点主要是两个:一是工作量极大,即便是 程序员 也需要两个星期才能完成,二是难度系数极高。

最后,弱弱的吐槽一下,也就是清华大学敢出这个作业,学生们也敢接招,换做我,估计就是直接退学了.......

雷锋网雷锋网雷锋网

知乎传送门: https://www.zhihu.com/question/389457315

雷锋网原创文章,未经授权禁止转载。详情见 转载须知 。


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 我们


推荐阅读
  • 本文详细介绍了SQL日志收缩的方法,包括截断日志和删除不需要的旧日志记录。通过备份日志和使用DBCC SHRINKFILE命令可以实现日志的收缩。同时,还介绍了截断日志的原理和注意事项,包括不能截断事务日志的活动部分和MinLSN的确定方法。通过本文的方法,可以有效减小逻辑日志的大小,提高数据库的性能。 ... [详细]
  • Iamtryingtomakeaclassthatwillreadatextfileofnamesintoanarray,thenreturnthatarra ... [详细]
  • Webpack5内置处理图片资源的配置方法
    本文介绍了在Webpack5中处理图片资源的配置方法。在Webpack4中,我们需要使用file-loader和url-loader来处理图片资源,但是在Webpack5中,这两个Loader的功能已经被内置到Webpack中,我们只需要简单配置即可实现图片资源的处理。本文还介绍了一些常用的配置方法,如匹配不同类型的图片文件、设置输出路径等。通过本文的学习,读者可以快速掌握Webpack5处理图片资源的方法。 ... [详细]
  • 在说Hibernate映射前,我们先来了解下对象关系映射ORM。ORM的实现思想就是将关系数据库中表的数据映射成对象,以对象的形式展现。这样开发人员就可以把对数据库的操作转化为对 ... [详细]
  • 本文详细介绍了MysqlDump和mysqldump进行全库备份的相关知识,包括备份命令的使用方法、my.cnf配置文件的设置、binlog日志的位置指定、增量恢复的方式以及适用于innodb引擎和myisam引擎的备份方法。对于需要进行数据库备份的用户来说,本文提供了一些有价值的参考内容。 ... [详细]
  • 图解redis的持久化存储机制RDB和AOF的原理和优缺点
    本文通过图解的方式介绍了redis的持久化存储机制RDB和AOF的原理和优缺点。RDB是将redis内存中的数据保存为快照文件,恢复速度较快但不支持拉链式快照。AOF是将操作日志保存到磁盘,实时存储数据但恢复速度较慢。文章详细分析了两种机制的优缺点,帮助读者更好地理解redis的持久化存储策略。 ... [详细]
  • 无损压缩算法专题——LZSS算法实现
    本文介绍了基于无损压缩算法专题的LZSS算法实现。通过Python和C两种语言的代码实现了对任意文件的压缩和解压功能。详细介绍了LZSS算法的原理和实现过程,以及代码中的注释。 ... [详细]
  • Linux环境变量函数getenv、putenv、setenv和unsetenv详解
    本文详细解释了Linux中的环境变量函数getenv、putenv、setenv和unsetenv的用法和功能。通过使用这些函数,可以获取、设置和删除环境变量的值。同时给出了相应的函数原型、参数说明和返回值。通过示例代码演示了如何使用getenv函数获取环境变量的值,并打印出来。 ... [详细]
  • 本文讨论了clone的fork与pthread_create创建线程的不同之处。进程是一个指令执行流及其执行环境,其执行环境是一个系统资源的集合。在调用系统调用fork创建一个进程时,子进程只是完全复制父进程的资源,这样得到的子进程独立于父进程,具有良好的并发性。但是二者之间的通讯需要通过专门的通讯机制,另外通过fork创建子进程系统开销很大。因此,在某些情况下,使用clone或pthread_create创建线程可能更加高效。 ... [详细]
  • PDF内容编辑的两种小方法,你知道怎么操作吗?
    本文介绍了两种PDF内容编辑的方法:迅捷PDF编辑器和Adobe Acrobat DC。使用迅捷PDF编辑器,用户可以通过选择需要更改的文字内容并设置字体形式、大小和颜色来编辑PDF文件。而使用Adobe Acrobat DC,则可以通过在软件中点击编辑来编辑PDF文件。PDF文件的编辑可以帮助办公人员进行文件内容的修改和定制。 ... [详细]
  • 开发笔记:实验7的文件读写操作
    本文介绍了使用C++的ofstream和ifstream类进行文件读写操作的方法,包括创建文件、写入文件和读取文件的过程。同时还介绍了如何判断文件是否成功打开和关闭文件的方法。通过本文的学习,读者可以了解如何在C++中进行文件读写操作。 ... [详细]
  • 本文讨论了在手机移动端如何使用HTML5和JavaScript实现视频上传并压缩视频质量,或者降低手机摄像头拍摄质量的问题。作者指出HTML5和JavaScript无法直接压缩视频,只能通过将视频传送到服务器端由后端进行压缩。对于控制相机拍摄质量,只有使用JAVA编写Android客户端才能实现压缩。此外,作者还解释了在交作业时使用zip格式压缩包导致CSS文件和图片音乐丢失的原因,并提供了解决方法。最后,作者还介绍了一个用于处理图片的类,可以实现图片剪裁处理和生成缩略图的功能。 ... [详细]
  • 第四章高阶函数(参数传递、高阶函数、lambda表达式)(python进阶)的讲解和应用
    本文主要讲解了第四章高阶函数(参数传递、高阶函数、lambda表达式)的相关知识,包括函数参数传递机制和赋值机制、引用传递的概念和应用、默认参数的定义和使用等内容。同时介绍了高阶函数和lambda表达式的概念,并给出了一些实例代码进行演示。对于想要进一步提升python编程能力的读者来说,本文将是一个不错的学习资料。 ... [详细]
  • 本文介绍了Redis中RDB文件和AOF文件的保存和还原机制。RDB文件用于保存和还原Redis服务器所有数据库中的键值对数据,SAVE命令和BGSAVE命令分别用于阻塞服务器和由子进程执行保存操作。同时执行SAVE命令和BGSAVE命令,以及同时执行两个BGSAVE命令都会产生竞争条件。服务器会保存所有用save选项设置的保存条件,当满足任意一个保存条件时,服务器会自动执行BGSAVE命令。此外,还介绍了RDB文件和AOF文件在操作方面的冲突以及同时执行大量磁盘写入操作的不良影响。 ... [详细]
  • 本文介绍了OpenStack的逻辑概念以及其构成简介,包括了软件开源项目、基础设施资源管理平台、三大核心组件等内容。同时还介绍了Horizon(UI模块)等相关信息。 ... [详细]
author-avatar
生如葳蕤_306
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有