软件工程课下作业第一次结对作业设计思路

发布时间 2023-05-25 12:20:51作者: lmyyyy

设计思想:
在本次结对编程中,我们采用MVC(Model-View-Controller)设计模式来实现地铁查询系统。
模型(Model)层主要负责数据的存储和处理,包括地铁线路、车站、票价等信息的处理和管理。
视图(View)层是用户界面,用户可以在这里输入起点和终点站进行路径查询,并查看查询结果。
控制器(Controller)层连接模型和视图层,负责处理用户输入并根据查询结果更新视图层的显示。
源程序代码:
以下是部分关键代码:
// 定义模型层包括地铁线路、车站、票价等数据
class SubwayModel {
constructor(lines, stations, prices) {
this.lines = lines;
this.stations = stations;
this.prices = prices;
}

// 根据站台id获取车站名称
getStationNameById(stationId) {
return this.stations.find(station => station.id === stationId).name;
}

// 根据起点站和终点站获取最优路径及票价
searchPath(startStationId, endStationId) {
// 实现最优路径查找和票价计算算法
...
return {
path, // 一个包含站台id的数组表示最优路径
price // 计算得到的票价
};
}
}

// 定义视图层包括用户界面和显示结果屏幕
class SubwayView {
constructor() {
this.startInput = document.getElementById('start');
this.endInput = document.getElementById('end');
this.resultScreen = document.getElementById('result');
...
}

// 在结果屏幕中显示最优路径和票价信息
showPath(path, price) {
let pathStr = path.map(stationId => subwayModel.getStationNameById(stationId)).join(' - '); // 将站台id转化为站点名称
this.resultScreen.innerText = 最优路径: ${pathStr}\n票价: ${price}元;
}

// 获取用户输入的起点和终点站
getStartAndEnd() {
return {
start: this.startInput.value.trim(),
end: this.endInput.value.trim()
};
}
}

// 定义控制器层用于连接模型和视图层
class SubwayController {
constructor(model, view) {
this.model = model;
this.view = view;
}

// 初始化页面,并添加查询按钮点击监听事件
init() {
...
document.getElementById('search-btn').addEventListener('click', e => {
e.preventDefault();
const {start, end} = this.view.getStartAndEnd();
const {path, price} = this.model.searchPath(start, end);
this.view.showPath(path, price);
})
}
}

运行结果截图:
我们设计的地铁查询系统的运行结果如下:

编程总结分析:
本次结对编程中,我们采用MVC模式来实现地铁查询系统,这种设计模式将数据、用户界面和控制器解耦,提高了程序的可维护性和可扩展性。
在实现地铁查询算法时,我们使用了贪心算法和Dijkstra算法,具体实现较为复杂,需要充分考虑各种情况和异常情况,同时也需要对代码进行有效的优化提高算法性能。
在整个开发过程中,我们采用了git作为版本控制工具进行协同开发,使用Trello来进行任务分配和管理,有效提高了开发效率和团队协作效率。
PSP0级时间记录日志:
以下是本次结对编程的PSP0级时间记录日志:

日期 时间(分钟) 工作内容
05/10/23 120 研究地铁查询系统需求,绘制系统设计草图
05/12/23 240 实现地铁查询算法,编写部分源代码
05/15/23 180 实现MVC架构,编写剩余源代码
05/17/23 120 进行程序测试和调试,优化算法性能
05/20/23 120 编写博客文档和运行结果截图
05/23/23 60 写作编程总结和时间记录日志
总计 840
总结:
在本次结对编程中,我们采用了MVC设计模式来实现地铁查询系统,并使用了贪心算法和Dijkstra算法来实现最优路径查找和票价计算。程序测试和优化过程中,我们充分考虑各种异常情况,提高算法性能,同时采用了git和Trello等工具来优化团队协作效率。整个开发过程中,我们秉承着合作、创新、协作的开发精神,获得了很好的开发体验。