第五周 软件工程基础结对项目3 地铁

本文档详细介绍了完成软件工程基础项目——地铁线路处理的各个阶段,包括后端C++程序和Python UI的设计,XML数据处理,单元测试,代码评审,性能分析,以及扩展需求。后端实现了查找站点和路线的功能,UI则提供了用户交互界面。通过XML存储数据,项目实现了北京和上海地铁线路的适配。
摘要由CSDN通过智能技术生成

一、本周任务

本周完成后段核心逻辑处理程序并合并,对其进行代码评审、单元测试、性能分析后改进代码。以及编写UI,合并后再次测试。

1.程序编写

1)后端程序(C++)

  1. find_line.cpp
  2. find_path.cpp
  3. line_io.cpp

find_line功能是通过一个站点的名称找出其所在路线的站点信息。
主要逻辑为:通过输入的站点名称,使用map类变量Sta_nameToNum映射成站点id,通过id在station_list里找到所在的路线id,最后通过路线id,结合find_line_list找到所有站点。

l_it = Sta_nameToNum.find(station_name);//通过站点名称找到其站点
  if (l_it == Sta_nameToNum.end())
    throw "Don't find station!";
  else st = l_it->second;//找到之后记录其所在路线的下标
  line_num = station_list[st].TransferID.size();//通过路线id找到该路线所有的站点
  find_line_list = new Path[line_num];
  vector<Sstation>::iterator itr = station_list[st].TransferID.begin();
  for(int line_id, i = 0; itr != station_list[st].TransferID.end(); ++itr, ++i)
    {
   
      line_id = itr->line;
      find_line_list[i].stnid = Line_list[line_id];
      find_line_list[i].len = Line_list[line_id].size();
    }

find_path功能与find_line相似,区别在于通过路线名称找到该路线所有站点。
主要逻辑为:输入路线名称,通过Line_nameToNum找到路线id,再通过Line_list返回路线所有站点信息。

  int line_id = 0;
  map<string, int>::iterator l_it;
  l_it = Line_nameToNum.find(linename);//通过linename找到其id
  if (l_it == Line_nameToNum.end())
    throw "Don't find this line!";
  else line_id = l_it->second;

  Path line;//返回该站点的路线信息
  line.stnid = Line_list[line_id];
  line.len = Line_list[line_id].size();

line_io.cpp该文件的作用是处理输出信息,使输出信息能正确保存在txt文件中,以及正确输出到控制台,并对可能产生的错误进行提示。
print_path方法用于向控制台输出路线信息

void SearchSys::print_path(Path& p)
{
   
  vector<int>::iterator it = p.stnid.begin();
  for (; it != p.stnid.end(); ++it)
    cout << station_list[*it].name << " -> ";
  cout << "end" << endl;
}

save_path方法用于写入txt文件

fstream f(filename, ios::out);
  if(f.bad())//对错误进行提示
	{
   
      cout << "打开文件出错" << endl;
      throw "Can't open file";
	}
  for(int i = 0; i < path_num; i++)//向文件写入
    {
   
      f << '#' << i << endl;
      for (vector<int>::iterator it = p[i].stnid.begin(); it != p[i].stnid.end(); ++it)
        f << station_list[*it].name << endl
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值