现代软件工程讲义 个人项目和结对项目练习 地铁

很多老师反映教软件工程和程序设计的时候没有合适的题目,《构建之法》提供了下面的题目,都是从简单的解题思路入手,逐步增量改进。学生们可以复习基本的编程技能,然后逐步加入模块化,文件处理,单元测试,信息隐藏,面向对象的分析,MVC 等概念和实践。  大家可以选用:

    - 黄金点游戏和单词频率问题

    - 四则运算练习

    - 计算程序文件的行数,及其扩展问题

    - 电梯调度

    - 网页前端技术的练习题

下面的题目, 从简单的数据结构开始,让同学们逐步练习。

0. 请上网搜到最新的北京地线路图。

1. 把这个图的各个线路,各个站点,换乘信息等用文本文件  (假设名字叫 beijing-subway.txt)的形式保存起来,应该保存的信息有 {线路号,线路的各个站名,车站的换乘信息}, 应用程序可以读取这个文件,就能掌握关于北京地铁线路的所有信息,应该用什么样的格式呢?  在我们生活中,我们用自然语言,或者图表来表示信息, 当一个有足够生活经历的成年人看到上面的线图路,她马上可以理解  “两个小白圆点中间有一条线表示这两个车站是相邻的”。 当你要让电脑程序来处理这些信息,但是程序只知道一行,一个字,一个字节地处理信息, 怎么办,怎么表示 “这个车站可以转 5 号线”?

2. 写一个命令行程序 (不妨叫 subway.exe),这个程序启动的时候, 会读取beijing-subway.txt 的信息,然后这个程序就等待用户的输入, 用户可以输入地铁的线路编号,然后程序就输出此地铁线路的所有站名(按某一方向顺序输出即可)。 输出站名后,程序又进入等待状态。

3. 能否进一步, 找到两点之间的最有效线路? 请实现下面这个需求:

  subway.exe   /b 知春路   中关村

  返回经历的站名的个数,和路径,如果有换乘,请列出换乘的线路, 例如:

  4

  知春路

  知春里

  海淀黄庄  换乘10号线

  中关村

3.1 抽象

      在我们做测试的过程中,我们可以比较具体的车站的名字,已验证算法的正确性, 但是我们实际上并不在乎这个具体名字是 "知春路", 还是 "惠新西街南口",我们只要知道它们相同就好了。 能否给每个车站一个数字的标识,这样便于比较?  请修改你的 beijing-subway.txt 地图文件,把车站的唯一标识ID 加上,然后再修改程序中读取文件的部分,让它能处理ID,而不是仅仅车站名字。修改程序之后,请保证程序依然能够完成它原有的功能。

4. 既然有了地图和 “返回两个站点之间最短路径” 的功能, 我们怎么知道程序员实现的这个功能是正确的呢? 我们可以抽样调查,但是不能确保。能否测试这个模块呢? 这个模块可能是程序中的一个类,或几个相关的类,我们可以通过给它写单元测试,或模块测试的办法。

    请把subway 程序中 “返回两个站点之间最短路径” 的功能独立出来,成为一个DLL,或者一个类,那么我们就可以用《构建之法》 提到的单元测试, 或者 四则运算练习题 提到的测试模块的方法测试了。

 请把这个exe 分解为几个独立的模块,然后用你所在的平台的单元测试工具来测试。

5. 如果乘客有钱又有闲,那么,怎样才能尽可能快地遍历地铁的所有车站呢(只用经过一次,不用下车,就算经过车站)。 例如,注意到13号线 和 10 号线相交的知春路地铁站,我们选它作为一个起始站,从这个站出发,要经历多少站(换乘不出地铁系统,即不能从一个地铁口走到路面,然后从另一个站进去),才能把所有地铁站都遍历呢?

   扩展命令行程序,让它接受一个地铁站名。  例如这个格式: subway.exe /a  知春路  

程序输出总共经历多少站, 以及经历的站名, 举一个特例,假如地铁系统只有知春路, 西土城两个站, 那么这个程序应该输出:

  3

  知春路

  西土城

  知春路

5.1 从现实生活中我们知道,在地铁系统中换乘是比较麻烦的一件事情,花费额外的时间和体力 (下车,步行到下一个线路,等车,挤上车,再找座位),我们上一个遍历算法没有考虑到这一点,有点不接地气。 如果我们做一个改进, 每次换乘,相当于额外经历了 3 个车站, 我们还是要求遍历所有车站的最优线路,我们的程序应该怎么修改呢?  总的车站数量 = 实际经过的车站数量 + 换乘等价的车站数量

我们在前面几步的修改中, 把数据格式,程序的功能,程序的结构都稍稍修改了一些,但是整体程序还能按原来的需求运行。 希望初学者在每一步都只改一个方面,修改之后,能测试程序,保证没有引入其它错误。 有基础的同学可以用源代码管理工具来管理各个版本的代码。

5.2 既然有程序能输出解答, 那么我们怎么验证呢? 睁大眼睛一个一个地数么?  我们不是会写程序么? 来一个:

  subway.exe  /z filename 

      filename 指向一个文本文件,里面放了 /a  参数的答案 (就是题目 3 的输出, 一个数字加上站名)

  这个 /z  参数要求在命令行输出

      true: 如果filename 文件中的数据的确覆盖了整个地铁的所有站点至少一次,并且车站的数量是对的,车站的遍历次序是合理的。

  false: 车站的遍历次序仍然合理,但是有遗漏的站点,或者车站的数量错误。 如果有遗漏的站点,这个程序要至少输出一个遗漏的车站名。

  error: 如果车站的遍历次序不合理(例如直接从“知春路” 站到了“中关村” 站), 打印出出错的两个站名。

6. 我们前面的练习都是基于命令行的,能否做成图形界面呢? 首先我们要给每个站点一个坐标信息。

    1)请修改 beijing-subway.txt 文件,加入适当的信息,为实现图形界面做准备。 你要如何设计这些坐标呢?

    2)请改进 subway.exe,  加一个  /g  的命令行参数, 让它根据你提供的坐标画出各个地铁站,线路,以及换乘站。

    我们看到,所有要展现的信息都要存储起来,存储还要有一定的规则,这样程序才好正确地,高效地读出来。 存储有下面三个方案:

    a) 用文本文件, 用自定义的格式存放

    b) 用XML 格式存放

    c) 还可以用数据库的方式来存放, 例如 sqlite

    d) 还可以用自己定义的二进制的格式来存放。

    请比较几种方式的优缺点,特别是,这些方式如何应对变化的内部,外部因素。 例如,在 d) 方案中, 如果要增加一个地铁站,或者修改一个地铁站的名字,我们应该怎么做呢?

7. 现在我们回过头来,把遍历的解法搬到GUI (图形界面)来。 

    1)扩展 subway.exe,  处理下面参数的时候,

             subway.exe /g  知春路

         程序在图形界面中显示地铁地图 (各个站点的相对位置和官方地图类似即可),然后用一个小亮点表示乘客,乘客正在经过的车站就会闪亮,乘客走过的路用不同的颜色标识,同时在适当的地方有数字表明乘客已经经过车站的数目。

8. 前面几步都做好了,下面就是工程问题了:

    8.1 请让程序能处理上海的地铁地图,或者其它城市的地图。把程序由 “固定处理一个地图” 升级为 “能处理多个地图”, 程序的什么模块需要变化?

    8.2 请把程序移植到网页/手机,用户指定起点和终点,程序就报告这两个点的最优路径。  把程序从 PC 平台搬到 Web 或 Mobile,  原来写的所有代码都要扔掉么?  还是有很多部分可以重用? 怎样重用?

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/500361.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

最新软件工程总结,项目模板,软工作业下载

(改了标题吸引目标用户) 老师教课,学生上课,首先要讲明师生关系。 其次,就是要说明这门课的底线是什么。 我们假设所有人写作业都独立思考,认真实践,不断改进,勇于创新... 这个假设通常是不全面的&#xf…

C语言 教学实践建议

(编程/软件工程课程怎么教) 这是2016年秋季学期和北京工业大学耿丹学院合作教学的计划。这也可以用于其他学校的 C 语言课程。 2016级有四个班,每班大约 32 人,每班配有一个有一定实际工作经验的助教,配合老师把课教好。 C语言是一门基础课&…

团队项目建议 - 英语学习 App

在这几年推广《构建之法》软件工程教学的过程中,我看到很多老师在讲软件工程的时候,虽然讲了很多年,但是手头没有任何项目,学生或者现想(得到一些大而无当,无法在一学期内完成一个可用版本的项目), 或者抄袭…

结对和团队项目建议 - 黄金点游戏

故事看这里: 背景故事 (链接) 作业 这个游戏可以变成一个持续发展的团队项目: 1)在课堂上玩这个黄金点游戏,用Excel 纪录成绩。过渡到做成简单的单机版游戏,锻炼基本的编程能力 2)两人合作,做成简单的 client/server A…

个人和结对项目 - 英语单词词频统计

个人或结对编程项目 英语单词词频统计程序 (最新版本在这里) 实现一个命令行程序,支持几种模式下的单词词频统计 Implement a console application to tally the frequency of words under a directory. For all text files (file extension: "txt") unde…

个人或结对项目 - 动态显示程序运算的过程

现在网上有很多关于动态显示排序过程的小工具,小程序。 1) https://visualgo.net/sorting 2) http://jsdo.it/norahiko/oxIy/fullscreen 3) http://coolshell.cn/articles/4671.html 我们能否也做一些类似的工作呢? 在在这个作业中 (http:…

构建之法 第三版 17 章 部分草稿

构建之法 17 章  人&#xff0c;绩效和职业道德 (<构建之法> 第三版草稿) 2016/12/23 17.1 领导力 在软件开发过程中&#xff0c;有很多平等合作&#xff0c;但是也有上下之分的领导/被领导关系&#xff0c;即使都是平级的员工之间&#xff0c;也有老师傅/新人&#xf…

构建之法 第三版 第3章 部分草稿 (剪牦牛毛、老程序员去金融公司的故事)...

/* * 这是 《构建之法》 第三版的草稿 */ 3.2 软件工程中的几种思维误区 正如我们在第一章讲的那样&#xff0c;软件有很多特性&#xff0c;软件开发有它自己独特的规律&#xff0c;如果不了解这些特性&#xff0c;软件工程师就会产生不符合实际的想法&#xff0c;在开发过程中…

软件工程课的分数系统,和打分方法

考考考&#xff0c;老师的法宝&#xff1b;分分分&#xff0c;学生的命根。 以《构建之法》为核心的软件工程课已经在全国几十个学校开展了好几年&#xff0c;由于采用 Learning by doing (做中学) 的方法&#xff0c; 同学们通过实际的作业获得分数&#xff0c;逐渐累积并转换…

现代软件工程作业 – 计算最长英语单词链

结对编程 – 计算最长英语单词链 《构建之法》练习题 大家经常玩成语接龙游戏&#xff0c;我们试一试英语的接龙吧&#xff1a;一个文本文件中有N 个不同的英语单词&#xff0c; 我们能否写一个程序&#xff0c;快速找出最长的能首尾相连的英语单词链&#xff0c;每个单词最多只…

现代软件工程讲义 个人项目和结对项目练习 四则运算

这是构建之法 《现代软件工程》课的作业题之一。 下面的题目&#xff0c; 从简单的命令行处理和数据处理开始开始&#xff0c;让同学们逐步练习&#xff0c;巩固算法&#xff0c;学会松耦合的设计&#xff0c;学会PSP&#xff0c;源代码控制&#xff0c;单元测试&#xff0c;回…

软件工程作业 - word count

(编程和软件工程作业系列) 实践最简单的项目&#xff1a;WC 实践是理论的基础和验证标准&#xff0c;希望读者贯彻“做中学”的思想&#xff0c;动手实现下面的项目&#xff0c;并和别人的成绩相比较&#xff0c;分析产生差距的原因。 1. 实现一个简单而完整的软件工具(源程序特…

软件工程课, 编程课 助教的工作介绍

在用 "做中学 (Learning By Doing) " 方式讲授编程和软件工程课的时候&#xff0c;我们认为助教在其中起了很大的作用。 费曼学习方法的精髓是 “以教代学” 。如果不能向其他人简单地解释一件事&#xff0c;那么你就还没有真正弄懂它。 我们课程的各位助教&#xff…

软件工程资料 - 优秀的大学怎么教程序开发和软件工程课

他山之石&#xff0c;可以攻玉 世界上很多大学都有不错的教学方法&#xff0c; 例如我们曾经的助教总结他在国外的学习经历&#xff0c;可以看出老师和学校对于如何教好课是花了心思&#xff0c; 有很多投入的。 一门课怎么上&#xff1a; https://zhuanlan.zhihu.com/p/206103…

第二届构建之法论坛预告(草案)

(草案) 时间&#xff1a;2018年7月初 (暂定 7/9 - 7/11) 地点: 北京航空航天大学 活动&#xff1a;为期三天的软件工程教案设计培训和软件专业教育方法的讨论 时间内容工具备注第一天上午 1. 论坛主题演讲 “构建之法教学改进” 构建之法的教学是如何演进到目前的形态的&#x…

AI应用开发实战系列之一: 从零开始配置环境

AI应用开发实战 - 从零开始配置环境 与本篇配套的视频教程请访问&#xff1a;https://www.bilibili.com/video/av24421492/ 零、前提条件 一台能联网的电脑&#xff0c;使用win10 64位操作系统请确保鼠标、键盘、显示器都是好的 建议和反馈&#xff0c;请发送到 https://g…

usb连接不上 艾德克斯电源_第十二届(深圳)新能源汽车核心电源技术研讨会成功举办...

2019年4月26日&#xff0c;由大比特主办的第十二届(深圳)新能源汽车核心电源技术研讨会在深圳登喜路国际大酒店成功举办。本次会议受到了法雷奥、长安铁雪龙、比亚迪、蔚来汽车、麦格米特、科陆电子、欣锐、英威腾、晶福源、英可瑞、瀚美特、航嘉驰源、核达中远通、永联、优优绿…

AI应用开发实战系列之二:从零开始搭建macOS开发环境

AI应用开发实战 - 从零开始搭建macOS开发环境 本视频配套的视频教程请访问&#xff1a;https://www.bilibili.com/video/av24368929/ 零、前提条件 一台能联网的电脑&#xff0c;使用macOS操作系统请确保鼠标、键盘、显示器都是好的 建议和反馈&#xff0c;请发送到 https…

安卓能硬改的手机机型_手机后盖材质,金属比塑料的好,玻璃比金属的好,是这样么?...

从2000年至今&#xff0c;18年手机发生了巨大变化到现在&#xff0c;人们不再唯性能至上屏幕、拍照、材质、工艺等等也成了人们选购手机的标准手机后盖材质的发展史很好的见证了人们喜好的变化接下来我们来看手机后盖材质的演变史从手机的创造到手机的普及作为一个材料人我们经…

AI应用开发实战系列之三:手写识别应用入门

AI应用开发实战 - 手写识别应用入门 手写体识别的应用已经非常流行了&#xff0c;如输入法&#xff0c;图片中的文字识别等。但对于大多数开发人员来说&#xff0c;如何实现这样的一个应用&#xff0c;还是会感觉无从下手。本文从简单的MNIST训练出来的模型开始&#xff0c;和…