记一次网易云课堂MOOC课程学习经历——《软件工程(C编码实践篇)》擎天炉citidal

正如计算机业内的一个非常经典的等式所言:

程序=算法+数据结构

软件=程序+软件工程

软件企业=软件+商业模式

现代软件企业的成功离不开优秀的软件以及杰出的商业模式,同时,作为企业运营核心的软件亦离不开软件工程的指导。

作为商业软件而言,程序是软件的“内功”,“内功”分算法和数据结构两个方面,它们共同决定了程序运行的效率,但无关乎程序的正确与否。除了程序本身之外,软件工程才真正决定了软件的命运。软件工程是指导人们如何构建和开发软件的科学,是最优的组织软件开发的方法。

总的说来,有了软件工程设计思想的“武装”,以后就为开发规范、成功的软件打下了坚实的基础。

本课程有相对应的实验课程,在实验楼网站中运行虚拟的Linux环境来进行C语言的编程。

以下是实验的心得与体会,共六篇:

在这个十分简单的“菜单”功能C程序的开发过程中,将会逐渐重现下列软件工程开发思想对软件开发的指导:

在开始的开始,还有一个十分重要的事情,那就是程序的代码风格。

什么是代码风格?什么是好的代码风格?

通常来说,代码风格就是,缩进、命名、注释等代码编排的风格规范。

好的代码风格的原则是:简明、易读、无二义性。

对于编译器来说,代码风格确实无关紧要,甚至对于一些追求极限性能的程序来说,有时候,考虑代码风格问题甚至会带来程序性能的下降(代码难以理解)。

但是,在实际开发的绝大多数场合,开发者所遇到的性能瓶颈问题,都基本不会是依靠打乱代码风格来解决的。

正相反,良好的代码风格,使程序代码简洁清晰,容易维护,也是开发人员之间的写作具有更高的效率。

(1)最原始的代码

#include#include#include#includeintmain(){charcommand[128];time_tt;charName[64]="NULL";while(1){printf("command>>");scanf("%s",command);if(strcmp(command,"help")==0){printf("commandlist:help,info,echo,exit,time,setName,getName,clearName\n");}elseif(strcmp(command,"info")==0){printf("author:LiuDongxiaoVersion:1.0\n");}elseif(strcmp(command,"echo")==0){scanf("%s",command);printf("%s\n",command);}elseif(strcmp(command,"exit")==0){exit(0);}elseif(strcmp(command,"time")==0){printf("Now:%s",ctime(&t));}elseif(strcmp(command,"setName")==0){printf("Pleaseinsertyourname!\n");scanf("%s",Name);}elseif(strcmp(command,"getName")==0){printf("%s\n",Name);}elseif(strcmp(command,"clearName")==0){strcpy(Name,"NULL");}elseprintf("WrongCommand\n");}return0;}程序十分简单!学过C语言的都能看懂!

(2)引入链表,实现代码的业务逻辑和数据存储之间的分离

前文的代码十分简单,同时也存在严重的不足,就是一点用也没有。

我们的目的是写一个可重用的菜单程序,上面那个连边也摸不着。

于是,我们引入了一种数据结构:链表

typedefstructdataNode{char*cmd;char*desc;int(*handler)();structdataNode*next;}tDataNode;tDataNode*findCMD(tDataNode*head,char*cmd);voidshowAllCMD(tDataNode*head);具体实现请参见代码库。

有了链表,再对源程序改造一番!

#include#include#include#include"Linklist.h"#defineCMD_MAX_LEN128#defineDESC_LEN1024#defineCMD_NUM10statictime_tt;voidhelp();voidinfo();voidecho();voidExit();voidTime();statictDataNodemenu[]={{"help","Listallcommandinthisprogram",help,&menu[1]},{"info","Showinformation",info,&menu[2]},{"echo","Repeatyourinput",echo,&menu[3]},{"exit","Exitthisprogram",Exit,&menu[4]},{"time","Showtimenow",Time,NULL},};intmain(){charcmd[CMD_MAX_LEN];tDataNode*command;printf("Programisrunning\n");while(1){printf("Command>>");scanf("%s",cmd);command=findCMD(menu,cmd);if(command==NULL){printf("CommandNotfound\n");}elseif(command->handler!=NULL){command->handler();}}}voidhelp(){showAllCMD(menu);}voidinfo(){printf("Author:LiuDongxiao\nProgramVersion:1.0\n");}voidecho(){charcommand[CMD_MAX_LEN];scanf("%s",command);printf("%s\n",command);}voidExit(){printf("Programexited\n");exit(0);}voidTime(){printf("Now:%s",ctime(&t));}这样就将功能与存储分离了开来。同时,也应用了模块化的思想。

(3)改造链表,提升重用性

(2)中的链表很不完善,而且与源程序的耦合性也很强,继续改造之

(4)信息的隐藏与封装以及回调函数

typedefstructLinkListNodetLinkListNode;typedefstructLinkListtLinkList;tLinkList*CreateLinkList();intDeleteLinkList(tLinkList*pLinkList);intAddLinkListNode(tLinkList*pLinkList,tLinkListNode*pNode);intDelLinkListNode(tLinkList*pLinkList,tLinkListNode*pNode);tLinkListNode*GetLinkListHead(tLinkList*pLinkList);tLinkListNode*GetNextLinkListNode(tLinkList*pLinkList,tLinkListNode*pNode);tLinkListNode*SearchLinkListNode(tLinkList*pLinkList,intCondition(tLinkListNode*pNode,void*args),void*args);所谓回调,就是调用者调用被调用者,在被调用者执行的过程中,又去执行调用者代码段的过程逻辑。

我们在本程序中引入回调函数,是为了进一步增强链表的功能。

intSearchCondition(tLinkListNode*pNode,void*args){return(strcmp(((tDataNode*)pNode)->cmd,(char*)args)0:1);}tDataNode*FindCmd(tLinkList*head,char*cmd){return(tDataNode*)SearchLinkListNode(head,SearchCondition,cmd);}tLinkListNode*SearchLinkListNode(tLinkList*pLinkList,intCondition(tLinkListNode*pNode,void*args),void*args){if(pLinkList==NULL){returnNULL;}tLinkListNode*tmp=pLinkList->pHead;while(tmp!=NULL){if(Condition(tmp,args)==1){returntmp;}tmp=tmp->pNext;}returnNULL;}可以看出,在上述两段代码的过程逻辑中,主函数中的FindCMD调用了LinkList中的SearchLinkListNode,而在SearchLinkListNode中又使用了主函数传递过来的SearchCondition函数,这样可以做到,在主程序中定义了搜索条件,而不是预先定义在LinkList中。

通过一系列的改进,我们编写的程序做到了,在主函数中定义menu项,加入队列,自定义查询条件等一系列功能。

任务接近完成!

(5)最终的改造,接口设计

之前一系列的改造之后,menu功能实现的很顺利,是时候将整个代码封装成模块了。

intMenuConfig(char*cmd,char*desc,void(*handler)(intargc,char*argv[]));intExecuteMenu();如果我们以后想使用menu模块,就要使用上面这两个接口。第一个用来增加menu项,第二个来启动menu页面。

接口的实现:

使用示例:

MenuConfig("info","Showinformation\n\t'-author'forauthorinformation\n\t'-version'forversioninformation",info);MenuConfig("exit","Exitthisprogram",Exit);MenuConfig("time","Showtimenow",Time);#include"menu.h"intmain(){ExecuteMenu();return0;}大功告成!

近两个月的学习已经结束了,本门课程的核心在于对软件开发思想的学习,而不是纠结于具体代码的一城一池,学习本课程的最大收获,就是在一个更高的理论层次上,总览全局,对软件的总体进行把握。只有学会了高屋建瓴,才能开发出高质量的软件。

除此之外,还对本课程抱有一丝遗憾:

(有一次课程作业忘记了互评……得分减半……好可惜……本句话删除)

希望可以在课程的学习中,实际动手做出一些更具有实用价值的软件。

THE END
1.网易云课堂和中国大学MOOC并入网易有道,加快教育资源整合PingWest品玩3月19日讯,3月19日,网易有道CEO周枫公布,原网易公司教育产品部运营的产品“网易云课堂”“中国大学MOOC”产品已并入网易有道。二者业务合并后,由网易有道负责教育业务,将重点聚焦K12(指学前教育至高中教育)培训,同时将在2019年推出两款少儿编程教育产品有道小图灵和卡搭编程。 https://www.pingwest.com/w/185191
2.网易云课堂网易公司(163.com)旗下实用技能学习平台。与优秀讲师、专业机构、院校合作,为您提供海量优质课程,以及创新的在线学习体验,帮助您获得全新的个人发展和能力提升。,中国大学MOOC(慕课)https://www.icourse163.org/university/CLOUD
3.学堂在线学堂在线是清华大学于2013年10月发起建立的慕课平台,是教育部在线教育研究中心的研究交流和成果应用平台,是国家2016年首批双创示范基地项目,是中国高等教育学会产教融合研究分会副秘书长单位,也是联合国教科文组织(UNESCO)国际工程教育中心(ICEE)的在线教育平台。目https://www.xuetangx.com/
4.慕课教学使用协议与隐私政策 感谢您使用网易云课堂! 为了更好地保障您的个人权益,请认真阅读《使用协议》、《隐私政策》和《服务条款》的全部内容,同意并接受全部条款后开始使用我们的产品和服务。若不同意,将无法使用我们的产品和服务。 同意 在线客服 手机课堂 返回顶部 https://study.163.com/course/introduction/1005535062.htm
5.职教云智慧职教app下载职教云新版mooc(云课堂智慧职教)是一款智慧教学培训线上平台应用,软件中内含海量的优质视频课程内容,用户可以自主在线进行学习,支持教师在线进行教学办公处理,学生快速进行学习以及完成作业等功能,对软件感兴趣的话不妨点击下载试试! 软件介绍 职教云新版mooc(云课堂智慧职教)是一款自主学习/授课的移动工具,拥有优质的学习https://www.fxxz.com/azsoft/255149.html
6.云课堂智慧职教mooc学院网页登录入口云课堂智慧职教版本大全 旧版本官方版官网登录入口2.8.43版 软件介绍智慧职教mooc官网登录入口是一款非常优秀的线上教学服务软件!这款软件不管是老师还是学生都可以自由的登录,在这里学习各种课程。专业的教学方式,丰富的课程内容。老师教的轻松,孩子学得更加愉快。感兴趣的朋友不要错过哦! https://shouyou.3dmgame.com/android/220575.html?ivk_sa=1024320u
7.云课堂智慧职教mooc官方下载云课堂智慧职教mooc学院ap云课堂智慧职教mooc学院app是一款专门为大家打造的线上教育学习云课堂软件,在这里用户们可以进行线上学习,软件中有丰富的在线课堂和学习资源内容,你可以在这里和老师们进行各种问题的讨论,有不会的问题你都可以在这里得到有效的解决,同时你还可以和更多同龄的学生们进行学习,有需要的用户赶快下载软件体验吧! https://www.itmop.com/downinfo/502309.html
8.登录用户登录 Access your account 微信登录 或 account_circle lock done_all 登录https://edu.ppclass.cn/
9.智慧职教云课堂app官方下载智慧职教mooc学院下载安装云课堂智慧职教pc端 53.00M / 2021-12-18 / v2.8.45 最新版本 云课堂智慧职教最新版本是一款电脑在线教学软件,用户在软件中能轻松找到自己对应的班级,让你在网上享受一个良好的在线教学环境,软件中能培养各种针对性教育人才。喜欢就来下载吧!智慧职教电脑版官方介绍通过资源 点击下载 http://www.downcc.com/k/zhihuizhijiao/
10.2023年云课堂十大品牌排行榜云课堂行业拥有众多品牌,如何选择一家有品质、信用与服务保障的品牌,成为了众多消费者非常关注的问题。中国大学MOOC、学堂在线、超星、智慧树网、腾讯课堂、网易云课堂、华文慕课、好大学在线、优学院、智慧职教等品牌的成功,体现了这些品牌在品牌形象、产品质量、创新技术、营销策略等方面的优势。 表1:2023年云课堂十大https://m.chinabgao.com/brand/69734.html
11.智慧职教mooc官网登录入口云课堂智慧职教mooc官网登录入口智慧智慧职教mooc官网登录入口云课堂智慧职教mooc官网登录入口 智慧课堂平台登录入口。智慧职教mooc学院登录入口是一款优质的手机线上教学服务app,该软件为用户提供众多课程学习资源,为学生提供专业的教学方式,老师教的轻松,孩子学的愉快,家长才会更放心,需要这款软件的朋友就快来下载体验吧! https://www.duote.com/tech/202111/217006.html
12.IC云课堂“翻转课堂”是从英语“Flipped Class Model”翻译过来的术语,一般被称为“反转课堂式教学模式”。 传统的教学模式是老师在课堂上讲课,布置家庭作业,让学生回家练习。与传统的课堂教学模式不同,在“翻转课堂式教学模式”下,学生在家完成知识的学习,而课堂变成了老师学生之间和学生与学生之间互动的场所,包括答疑解惑、知http://myic.icclass.com/flippedclass.aspx
13.网易云课堂推出“微专业”,为企业和专家定制职业MOOC课程MOOC的风要从职业教育开始吹起。 4月22日网易云课堂推出了一个新的微专业——《前端开发工程师》。比较特别的是,此微专业课程是由网易自己的工程师主讲的。 网易是最早做在线教育平台的互联网公司,聚集了一众优秀的内容提供方。海外有 Coursera、TED、可汗学院、OpenCourseWare 等;国内有教育部领衔,清华、北大在内的https://www.36kr.com/p/1647118991361
14.GitHubrenever/cnmooc###网易云课堂(study.163.com): python study163_dl.py "url" 云课堂新增专栏“计算机专业课程”那一部分(mooc.study.163.com)有点特殊,具体看下面。 收费课程下不了。 网易云课堂不必登录。其中 url 是课程列表页面浏览器地址,比如:http://study.163.com/course/introduction/334013.htm 不https://github.com/renever/cn_mooc_dl
15.云课堂松大MOOC云课堂 目前支持 Windows 7 及以上版本 需同时安装 PowerPoint 2007或者PowerPoint 2010 版本 预览资源时推荐使用IE11浏览器体验更佳https://www.stschool.cn/cloud_class
16.十大云课堂平台在线课堂网站有哪些2024年云课堂十大排行榜最新发布,十大云课堂排行榜前十名有中国大学MOOC、学堂在线、学银在线、智慧树网、智慧职教、网易云课堂、哔哩哔哩、华文慕课、优学院、国图公开课。云课堂10大排行榜由品牌研究部门收集整理大数据分析研究得出,帮助你了解在线学习平台有哪些。https://www.maigoo.com/maigoo/9354ykt_index.html
17.mooc智慧职教网课入口(智慧教室编程登录入口)智慧职教mooc官网登录入口在哪? 1、0621,邮箱:hbsxwb@16com)。 2、云课堂智慧职教网页版登录入口的位置 云课堂智慧职教网页版登录入口通常位于该平台的官方网站首页。用户可以通过搜索引擎或直接在浏览器地址栏输入网址进入官方网站。 3、第2种方法:苹果或安卓手机可以在职教云https://zjyicve.com.cn/网页端进行登https://www.cqrzr.com/post/93580.html
18.是国内优质的中文MOOC学习平台,由爱课程网携手网易云课堂打造中国大学MOOC(慕课)国家精品课程在线学习平台,是国内优质的中文MOOC学习平台,由爱课程网携手网易云课堂打造。平台拥有包括985高校在内提供的千余门课程。 网站数据 目前中国大学的浏览人数已达到3,051,如需查询该站的相关权重数据,请点击[爱站数据],[Chinaz数据]进行浏览访问。 https://www.jspoo.com/wz/505.html
19.云课堂职教云Icve网课兼考试助手(绿版v3)职教云学习效率提升助手小脚本,中文化高度可定制参数,自动课件,课件一目十行,保险模式,解除Ctrl+C限制,下载课件,自动四项评论,课堂智能跟帖讨论,支持自动答题(作业,测验,考试),搜题填题,软件定制 < Feedback on 云课堂|职教云|Icve --网课兼考试助手 (绿版v3) https://greasyfork.org/da/scripts/396813-%E8%81%8C%E6%95%99%E4%BA%91-icve-%E4%BA%91%E8%AF%BE%E5%A0%82%E6%99%BA%E6%85%A7%E8%81%8C%E6%95%99-mooc-%E5%AD%A6%E9%99%A2-%E7%BD%91%E8%AF%BE%E5%85%BC%E8%80%83%E8%AF%95%E5%8A%A9%E6%89%8B-%E7%BB%BF%E7%89%88v3/discussions/80227
20.一键下载中国大学/网易云课堂/慕课网等课程视频和课件这个软件支持中国大学,网易云课堂,爱课程,学堂在线,慕课网5大慕课网站的视频课程下载 https://github.com/PyJun/Mooc_Downloader ,登录账号后使用命令行形式下载。 输入视频课程地址https://www.icourse163.org/course/USTB-1206412811,不用登录即可下载。 https://cloud.tencent.com/developer/article/1745515