目录
一、本周任务
本周完成后段核心逻辑处理程序并合并,对其进行代码评审、单元测试、性能分析后改进代码。以及编写UI,合并后再次测试。
1.程序编写
1)后端程序(C++)
- find_line.cpp
- find_path.cpp
- 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