当前位置: 首页 > 科技观察

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

时间:2023-03-19 01:59:59 科技观察

本文转载自雷锋网。如需转载,请在雷锋网官网申请授权。你认为你上了大学以后就再也不用为功课发愁了吗?并不真地。近日,来自知乎网友的灵魂提问:“你觉得清华自动化系2020级新生C++作业是写一个更强大的雨课堂(雷霆课堂)?”网上讨论很火。雷锋网的编辑也看了这个作业,说他连题目都看不懂,渣哭了……为什么要设计这样的作业?首先我们来看一下这个职位设计的背景。受疫情影响,在线教育成为这段时间学生和家长的常态。教育部数据显示,截至4月初,已有11.8亿学生和1600万教师参与在线课程。清华大学以“雨课堂”为主,腾讯会议、ZOOM等在线会议软件为辅。2019-2020年春季学期,在线授课共计4422门课程。“雨课堂”以Office插件形式,实现一对多PPT展示、在线答题、弹幕、随机点名等师生互动互动教学,并可归纳关键词、理解/了解、签到、在线时长、集中度、答题等群体和个人统计。然而,网络会议软件在多方语音交互、快速屏幕/窗口共享切换等方面具有突出的特点,但缺少教学信息统计功能。因此,在本学期C++课程开始前的系统测试中,有同学建议自主开发一款结合雨课堂和网络会议优势的网络教学软件。经过讨论,清华大学以“雷霆课”为题目,为本学期设计了一个大作业。堪称史上最难的作业:清华大学自动化系2020年C++作业那么,这个作业的主要内容是什么?作业主要分为四个部分,即基本功能需求;系统设计要求;代码和发布要求;和报告要求。雷锋网截取了部分作业要求,来康康为什么这个作业是史上最难的作业。一、基本功能需求(*代表教师用户功能)1.1用户登录:根据用户名和密码登录软件,3次输入错误密码后自动退出迅雷课堂软件。根据不同账户类型(教师/学生)自动切换功能。必须有管理员帐号,帐号名为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或其他)和必要的友函数(每个友函数的不可替代性需要在报告和程序中额外说明:为什么必须Onlywithfriends),不允许使用任何非类成员函数。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发布的程序必须是32位或者64位的Release版本,可以在Win10/Macos10.14操作系统下运行:不依赖具体开发环境的依赖库,不依赖操作系统驱动程序或功能模块配置,只有软件本身可以执行的文件和必要的数据库库文件(如果使用数据库)。当不可避免地依赖数据库驱动时,应提供自动化安装包:运行安装包可以自动安装配置数据库驱动,安装软件本身的可执行文件和数据库库文件。特别说明:只要可执行文件和数据库库文件的相对路径保持不变,数据库驱动、可执行文件和数据库库文件安装的绝对路径不得影响软件的正常运行。(Macos只能用C++编程,不允许Object-C、Swift或其他语言。)作业要求的雷锋网小编看了后只想问一句:“这个作业可以吗去完成”?翻开网友的评论,才发现我不是一个人......@ATPSynthase:不只是图像,直播需要实时采集,压缩成H264,再用RTSP/推送出去RTMP,光靠直播难度太大了。@读书:按照这个发展速度10年后,人均院士。@只想改个名字:震惊!清华软院高级奖获得者的编程水平不如自动化新生。[捂脸][捂脸][捂脸][捂脸]@学根不应该有网名:哈哈哈,救救孩子们。@木草Kina2:还有C++写个跨平台的图形界面……难以想象难度……@一个白比:建议直接加入BAT!但总的来说,让大家觉得难的主要有两点:一是工作量巨大,即使是程序员也需要两年时间才能完成,二是难度极高。最后再弱弱的吐槽一下,就是清华大学敢给这个作业,同学们也敢接offer。要是我,我早就直接退学了……