




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、长 沙 学 院 课程设计说明书 题目城市公交查询软件 系(部)数学与计算机科学系 专业(班级) 姓名 学号 指导教师 起止日期 课程设计任务书 课程名称:课程名称:软件工程基础实训 ii 设计题目:设计题目:城市公交查询软件 已知技术参数和设计要求:已知技术参数和设计要求: 需求说明及要求 1.主要功能模块: (1)用户管理 用户管理模块为用户提供用户信息管理的功能,包括用户注册、用户登陆、用户信息修改、用户 密码修改、用户注销等功能。 用户注册:用户可以利用此功能完成注册,用户在界面输入注册信息,回车后,软件将注册信息 保存到用户信息数据文件中。 用户登陆:用户可以利用此功能完成登陆,用户在
2、界面输入登陆信息,回车后,软件验证登录信 息,登陆成功后,软件进入主功能选择界面。 用户信息修改:用户可以利用此功能完成用户信息修改。 用户密码修改:用户可以利用此功能完成密码修改。 用户注销:用户可以利用此功能完成用户信息注销,某用户注销后,便不能再次登录。 (2)线路管理 线路管理模块为用户提供公交线路数据的管理和维护,包括线路添加、线路修改、线路删除等功 能。 线路添加:用户可以利用此功能增加一条线路。 线路修改:用户可以利用此功能修改一条线路。 线路删除:用户可以利用此功能删除一条线路。 (3)站点管理 站点管理模块为用户提供公交站点数据的管理和维护,包括站点添加、站点修改、站点删除等
3、功 能。 站点添加:用户可以利用此功能增加一个站点。 站点修改:用户可以利用此功能修改一个站点。 站点删除:用户可以利用此功能删除一个站点。 (4)公交查询 公交查询模块为用户提供公交信息查询的功能,包括站点查询、线路查询、站站查询、最短距离 查询、最少换乘查询等功能。 站点查询:用户可以利用此功能查看某个站点所停靠的公交线路。 线路查询:用户可以利用此功能查看某条线路所路经的公交站点。 站站查询:用户可以利用此功能查询出发地和目的地之间的所有公交乘车方案。 最短距离查询:用户可以利用此功能查询出发地和目的地之间最短距离的公交乘车方案。 最少换乘查询:用户可以利用此功能查询出发地和目的地之间最
4、少换乘的公交乘车方案。 2.要求:界面友好,易于操作;数据结构运用灵活,编码规范,设计合理。 各阶段具体要求:各阶段具体要求: 1、需求分析阶段 (1)写出需求分析(做什么) (2)要求问题分析和功能定义准确 2、系统设计阶段 (1)根据问题描述,设计系统的结构 (3)完成数据结构中各个函数的定义 (4)用户界面的设计 (5)要求数据结构定义合理,类层次结构清晰 3、编码实现阶段 (1)完成代码编写 (2)要求代码编写规范 4、系统测试阶段 (1)完成功能调试 (2)要求完成必要的测试工作 5、交付实施阶段 (1)提交可正常执行的系统 (2)提交系统需求说明书、设计说明书、程序代码 (3)撰写
5、实训报告书 (4)要求规范地书写文档 设计工作量:设计工作量: (1)软件设计:完成问题陈述中所提到的所有需求功能。 (2)论文:要求撰写不少于 3000 个文字的文档,详细说明各阶段具体要求。 工作计划:工作计划: 安排两周时间进行课程设计,软件开发步骤如下,2 天完成 13,3-5 天完成 46,论文同步进行; 1)选定题目 2)需求分析 3)系统设计 4)编码实现 5)系统测试 6)交付实施 注意事项注意事项 提交文档提交文档 长沙学院实训任务书(每学生 1 份) 长沙学院实训说明书(每学生 1 份) 长沙学院实训鉴定表(每学生 1 份) 指导教师签名: 日期: 教研室主任签名: 日期:
6、 系主任签名: 日期: 长沙学院课程设计鉴定表 姓名学号专业班级 设计题目城市公交查询软件指导教师 指导教师意见: 评定等级: 教师签名: 日期: 答辩小组意见: 评定等级:答辩小组长签名:日期: 教研室意见: 教研室主任签名: 日期: 系(部)意见: 系主任签名:日期: 说明 课程设计成绩分“优秀” 、 “良好” 、 “及格” 、 “不及格”四类; 目 录 一、引言一、引言 .6 1.1 编写目的.6 1.2 参考资料.6 二、需求规约二、需求规约 .6 2.1 需求分析.6 2.2 功能需求.6 2.3 出错处理需求.7 2.4 输入输出需求.7 2.5 环境需求.7 三、设计三、设计 .
7、8 3.1 程序流程图.8 3.2 抽象数据类型.9 3.3 存储结构.10 3.3.1 公交路线的存储结构 .10 3.3.2 公交站点的存储结构 .10 四、编码测试四、编码测试 .10 4.1 测试用例.10 4.1.1 站站查询 .10 4.1.2 线路查询 .10 4.1.3 站站查询 .11 4.1.4 最短距离查询 .11 4.1.5 最少换乘查询 .11 4.2 程序运行结果.12 五、总结五、总结 .15 六、附录六、附录 .15 query.h.15 query.c.16 station.h.23 station.c.25 station_manage.h.31 stati
8、on_manage.c.31 bus.h.33 bus.c.36 bus_manage.h.41 bus_manage.c.42 一、引言一、引言 1.1 编写目的编写目的 此公交查询软件主要是对不熟悉公交线路,而又要外出的人提供方便的查询服务,当你想到某个 站点去却不知道如何走的话,那就可以使用这款软件,它能满足大多数人的需求,查询最方便的乘车 方案。 1.2 参考资料参考资料 表 1.1 参考资料表 资料名称作者文件编号、版本 数据结构 c 语言版 严蔚敏 吴伟民编著978-7-113-12943-9 c 语言版入门经典 霍顿(ivor horton)第五版 算法导论thomas h.co
9、rmen、charles e.leiserson 等 第二版 二、需求规约二、需求规约 2.1 需求分析需求分析 需要构建一张站点的图,然后建立起这些站点的关系,另外还需要保存每一个不同线路的信息, 其中经过的站点,构建完这些就可以方便的查询各种信息了。 2.2 功能需求功能需求 查询功能:查询功能: 站点查询:查询一个站点所经过的所有线路。 线路查询:查询一个线路所经过的所有站点。 站站查询: 查询两个站点之间的所有公交乘车方案。 最短距离查询:查询两个站点之间的最短距离乘车方案。 最少换乘查询:查询两个站点之间最少换乘的乘车方案。 2.3 出错处理需求出错处理需求 当用户查询路径时,输入不
10、存在的站点,程序应当提示用户重新输入,而不是毫无提示或程序崩 溃。用户输入操作指令时,若用户输入了非法的指令,应当提示用户重新输入。若两站点之间没有连 通,需保证程序不会出错。 管理员添加站点或公交线路时,若添加的站点或线路已经存在,须提示管 理员输入有误重新输入。 2.4 输入输出需求输入输出需求 输入的城市名为一字符串,除汉字外不包含任何字符,包含任何字符的都输入非法输入。输出为 一字符串和一个数值,该字符串包含最短路径上的所有城市名,城市名之间用一个箭头隔开,额外的 一行输出当前的最短路径的里程。 表 2.1 输入输出要求表 测试编号测试功能输入输出 gjcx-01站点查询一个站点的名字
11、该站点所经过的所有公交 gjcx-02线路查询公交的名字改公交所经过的所有站点 gjcx-03站站查询起点站和终点站所有可能的乘车方案 gjcx-04最短距离查询起点站和终点站最短距离的乘车方案 gjcx-05最少换乘查询起点站和终点站最少换乘的乘车方案 2.5 环境需求环境需求 此系统是以 c 语言的 c99 标准编写的,测试时注意好编译器的版本,检查编译器是否支持 c99 以 免编译器版本不符,造成错误。另外此系统是在 dev-c+4.9.9.2 环境下编写。 三、设计三、设计 3.1 程序流程图程序流程图 图 3.1 查询流程图 图 3.2 站点管理流程图 图 3.3 线路管理流程图 3
12、.2 抽象数据类型抽象数据类型 station.h init();/初始化 free(t);/销毁 clear(t);/清空 isempty(t);/是否为空 count(t);/返回站点的数量 add(t,station_name);/添加一个站点 add_bus(t,index,bus_name);/往一个站点添加经过的路线 remove(t,index);/删除一个站点 remove_bus(t,index,bus_name);/删除一个站点经过的路线 set(t,index,station_name);/修改一个站点 get(t,index);/返回一个站点的名字 set_bus(t,
13、index,old_bus_name_new_bus_name);/修改一个站点经过的路线 lookup(t,station_name);/判断站点是否存在 lookup_bus(t,index,bus_name);/判断站点是否有该线路经过 get_bus_count(t,index);/返回一个站点所经过的线路数量 get_bus_name(t,index_station,index_bus);/返回一个站点所经过的线路名称 save(t);/将站点的信息保存到文件 read(t);/从文件中读取信息 print(t,index);/打印一个站点的所有线路信息 bus.h init();/
14、初始化 free(t);/销毁 clear(t);/清空 count(t);/返回 isempty(t);/是否为空 add(t,bus_name);/添加一条线路 add_station(t,index,station_naem,distance);/在线路上添加一个站点 set_station(t,index,old_station,new_station);/在线路上修改一个站点 remove_station(t,index,station_name);/在线路上删除一个站点 lookup_station(t,index,station_name);/判断一条线路上是否存在某个站点 ge
15、t_station_count(t,index);/返回一条线路所经过的站点数量 get_station_name(t,index_bus,index_station);/返回线路上一个站点的名字 get_station_distance(t.index_bus,index_station);/返回一个站点距上一个站点的距离 remove(t,index);/删除一条线路 lookup(t,bus_name);/判断一条线路是否存在 indexof(t,bus_name);/返回一条线路的下标 get(t,index);返回一条线路的名称 save(t);/将线路的信息保存到文件中 read(
16、t);/从文件中读取信息 print(t,index);/将公交线路的信息打印出来 3.3 存储结构存储结构 3.3.3.3.1 1 公交路线的存储结构公交路线的存储结构 公交路线采用的是邻接链表的存储方式,每个链上存储的是该公交经过的每一个站点。 3.3.3.3.2 2 公交站点公交站点的存储结构的存储结构 公交站点采用邻接链表的存储方式,链表上的灭个节点存储了每个站经过了哪些线路。 四、编码测试四、编码测试 4.1 测试用例测试用例 4.1.14.1.1 站站查询站站查询 表 4.1 站站查询测试用例 用例编号测试数据预期结果实际结果判定 gjcx-01-01竹园路口101 路同预期通过
17、gjcx-01-02五里牌101 路、405 路同预期通过 gjcx-01-03远大路口122 路、405 路同预期通过 gjcx-01-04马王堆122 路同预期通过 4.1.24.1.2 线路查询线路查询 表 4.2 线路查询测试用例 用例编号测试数据预期结果实际结果判定 gjcx-02-01101 路第一站 竹园路口 第二站 五里牌 第三站 火车站 第四站 车站路口 第五站 窑岭东 第六站 梓园路口 第七战 广济桥 第八站 红旗药号 同预期通过 gjcx-02-02122 路第一站 识字岭 第二站 地质中学 第三站 梓园路口 第四站 湘雅二医院 第五站 高建市场 第六站 东方新城 第七站
18、 远大路口 第八站 马王堆 同预期通过 gjcx-02-03405 路第一站 五里牌 第二站 南湖大市场 第三站 远大路口 第四站 万家丽广场 同预期通过 4.1.34.1.3 站站查询站站查询 表 4.3 站站查询测试用例 用例编号测试数据预期结果实际结果判定 gjcx-03-01竹园路口识字岭输出两站点之间的所有乘车方案同预期通过 gjcx-03-02五里牌马王堆输出两站点之间的所有乘车方案同预期通过 gjcx-03-03远大路口红旗药号输出两站点之间的所有乘车方案同预期通过 gjcx-03-04马王堆竹园路口输出两站点之间的所有乘车方案同预期通过 4.1.44.1.4 最短距离查询最短距
19、离查询 表 4.4 最短距离查询测试用例 用例编号测试数据预期结果实际结果判定 gjcx-04-01竹园路口识字岭输出两站点之间的最短距离乘车方案同预期通过 gjcx-04-02五里牌马王堆输出两站点之间的最短距离乘车方案同预期通过 gjcx-04-03远大路口红旗药号输出两站点之间的最短距离乘车方案同预期通过 gjcx-04-04马王堆竹园路口输出两站点之间的最短距离乘车方案同预期通过 4.1.54.1.5 最少换乘查询最少换乘查询 表 4.5 最少换乘查询测试用例 用例编号测试数据预期结果实际结果判定 gjcx-04-01竹园路口识字岭输出两站点之间的最少换乘乘车方案同预期通过 gjcx-
20、04-02五里牌马王堆输出两站点之间的最少换乘乘车方案同预期通过 gjcx-04-03远大路口红旗药号输出两站点之间的最少换乘乘车方案同预期通过 gjcx-04-04马王堆竹园路口输出两站点之间的最少换乘乘车方案同预期通过 4.2 程序运行结果程序运行结果 图 4.1 站点查询 图 4.2 线路查询 图 4.3 站站查询 图 4.4 最短距离查询 图 4.5 最少换乘 五、总结五、总结 这次实训时间很短,而难度有比上一周的实训要大得多,对我来说是一次挑战,首先是存储结 构的选择,这个问题我纠结了很久,最后我还是选择用邻接链表来存储线路和站点的信息,虽然操作 起来有点麻烦,但是思路很清晰,对于解
21、决这个问题来说很方便。这次实训的最难的地方应该就是最 少换乘的求解了,该开始对了求解最少换乘毫无思路,不过当我用 dijkstra 算法求出最短路径后,我 似乎有了一点启发,我用 dijkstra 算法的思想,把之前的求最短路径的算法改成了最少换乘,这对我 来说试一次提升,我对 dijkstra 算法的理解不仅仅只是表面的应用,更重要的是我理解了这个算法的 思想,学会算法并不意味着什么,而当我们会自己去创建一个算法的时候,我们才是真正的进入了算 法这一领域。 六、附录六、附录 query.h #ifndef _query_h_ #define _query_h_ #include bus.h
22、#include station.h #include graph.h /*查询经过该站点的所有公交线路*/ void query_station(struct station *t); /*查询某个公交线路*/ void query_road(struct bus *t); /*查询两个站点之间的所有乘车方案*/ void query_stations(struct station *ts, struct bus *tb, struct graph *tg); /*查询两个站点之间的最短路径乘车方案*/ void query_shortest_path(struct station *ts,
23、 struct bus *tb,struct graph *tg); /*查询两个站点之间的最少换乘方案*/ void query_min_transfer(struct station *ts, struct bus *tb, struct graph *tg); #endif /* _query_h_ */ query.c #include #include #include #include #include query.h /*查询经过该站点的所有公交线路*/ void query_station(struct station *t) char station_name20; prin
24、tf(请输入您要查询的站点:); scanf(%s,station_name); if(!station_lookup(t,station_name) printf(您输入的站点不存在!n); system(pause); return; station_print(t,station_indexof(t,station_name); system(pause); /*查询某个公交线路*/ void query_road(struct bus *t) char bus_name20; printf(请输入您要查询的公交线路:); scanf(%s,bus_name); if(!bus_look
25、up(t,bus_name) printf(您输入的公交线路不存在!n); system(pause); return; bus_print(t,bus_indexof(t,bus_name); system(pause); static void buspath_print(struct station *ts, struct bus *tb, int ans, int ans_bus, int cnt) int i; for(i = 0; i = cnt; i+) if(i != 0 else if(i = cnt) printf(在%s 站乘%s 路下车!n,station_get(ts
26、,ansi),bus_get(tb,ans_busi); else if(i = 0) printf(在%s 站乘%s 路上车!n,station_get(ts,ansi),bus_get(tb,ans_busi); else printf(在%s 站乘坐%s 路。n,station_get(ts,ansi),bus_get(tb,ans_busi); system(pause); /*对于一条线路用 dfs 搜出所有的换乘方案*/ static void dfs_station(struct station *ts, struct bus *tb, int ans, int ans_bus,
27、int cnt, int deep) int i; if(deep = cnt) ans_busdeep = ans_busdeep-1; buspath_print(ts,tb,ans,ans_bus,deep); return; for(i = 0; i station_get_bus_count(ts,ansdeep); i+) char *bus_name = station_get_bus_name(ts,ansdeep,i); int index_bus = bus_indexof(tb,bus_name); ans_busdeep = index_bus; if(station_
28、lookup_bus(ts,ansdeep+1,bus_name)/如果下一站包含该线路则继续走 dfs_station(ts,tb,ans,ans_bus,cnt,deep+1); else/否则就换车 continue; /*用 dfs 搜出所有的路径*/ static void dfs_path(struct graph *tg, int vis, int ans,int s, int t, int deep, struct station *ts,struct bus * tb) int i; viss = 1; ansdeep = s; if(s = t) int ans_bus10
29、0; dfs_station(ts,tb,ans,ans_bus,deep,0); return; for(i = 0; i cnt; i+) if(!visi visi = 0; /*查询两个站点之间的所有乘车方案*/ void query_stations(struct station *ts, struct bus *tb, struct graph *tg) char start_station20; char terminal_station20; int vis100; int ans100; int index_s; int index_t; printf(请输入起点站:); s
30、canf(%s,start_station); if(!station_lookup(ts,start_station) printf(您输入的站点不存在!n); system(pause); return; printf(请输入终点站:); scanf(%s,terminal_station); if(!station_lookup(ts,terminal_station) printf(您输入的站点不存在!n); system(pause); return; index_s = station_indexof(ts,start_station); index_t = station_ind
31、exof(ts,terminal_station); memset(vis,0,sizeof(vis); printf(%d %dn,index_s,index_t); dfs_path(tg,vis,ans,index_s,index_t,0,ts,tb); /*用 djikstra 算法求出一条最短路径*/ static int dijkstra(struct station *ts, struct bus *tb, struct graph *tg, int s, int t, int ans_path) int vis100; int d100; int path100; int cn
32、t = station_count(ts); int ans_bus100; int ans_cnt = 0;/记录 ans_path 的数量 int i,j; /*初始化*/ for(i = 0; i cnt; i+) visi = 0; di = int_max; pathi = -1; ds = 0; /*求最短路径*/ for(i = 0; i cnt; i+)/最多循环次数 int minimum = int_max;/当前路径最小值 int x; /每一轮的起点 for(j = 0; j cnt; j+) if(dj minimum x = j; visx = 1; if(x =
33、t) break;/已找到从起点到终点的最短路径 for(j = 0; j arcxj != 0 pathj = x; if(dt = int_max) return 0; /*保存路径*/ i = t; while(i != -1) ans_pathans_cnt+ = i; i = pathi; for(i = 0; i ans_cnt/2; i+) int t_ans = ans_pathi; ans_pathi = ans_pathans_cnt-i-1; ans_pathans_cnt-i-1 = t_ans; /*对该路径搜换乘方案*/ dfs_station(ts,tb,ans_
34、path,ans_bus,ans_cnt-1,0); return 1; /*查询两个站点之间的最短路径乘车方案*/ void query_shortest_path(struct station *ts, struct bus *tb, struct graph *tg) char start_station20; char terminal_station20; int ans_path100; int index_s; int index_t; printf(请输入起点站:); scanf(%s,start_station); if(!station_lookup(ts,start_st
35、ation) printf(您输入的站点不存在!n); system(pause); return; printf(请输入终点站:); scanf(%s,terminal_station); if(!station_lookup(ts,terminal_station) printf(您输入的站点不存在!n); system(pause); return; index_s = station_indexof(ts,start_station); index_t = station_indexof(ts,terminal_station); if(dijkstra(ts,tb,tg,index_
36、s,index_t,ans_path) /pass else printf(两站点之间没有线路!n); system(pause); return; /*求最少换乘的算法*/ static min_transfer(struct station *ts, struct bus *tb, struct graph *tg, int s, int t) int path100; int bus100; int ans_bus100 ; int ans_station100; int ans_cnt = 0; int d100; int vis100; int cnt = station_count
37、(ts); int i,j; /*初始化*/ for(i = 0; i cnt ; i+) visi = 0; pathi = -1; busi = 0; di = int_max; /*求最少换乘*/ i = cnt; ds = 0; while(i) int minimum = int_max; int x; for(j = 0; j cnt; j+) if(dj minimum x = j; visx = 1; if(x = t) break; /已经找到最短路径 i-; for(j = 0; j bus_count(tb); j+) char *station_name = stati
38、on_get(ts,x); int k; if(bus_lookup_station(tb,j,station_name) for(k = 0; k bus_get_station_count(tb,j); k+) int station_index = station_indexof(ts,bus_get_station_name(tb,j,k); if(!visstation_index i-) char *station_name = station_get(ts,ans_stationi); char *bus_name = bus_get(tb,ans_busi-1); if(i =
39、 ans_cnt-1) printf(从起点站%s 乘坐%s 路。n,station_name,bus_name); else if(i = 0) printf(到达终点站%s。n,station_name); else printf(到达%s 站后转乘%s 路。n,station_name,bus_name); /*查询两个站点之间的最少换乘方案*/ void query_min_transfer(struct station *ts, struct bus *tb, struct graph *tg) char start_station20; char terminal_station2
40、0; int index_s; int index_t; printf(请输入起点站:); scanf(%s,start_station); if(!station_lookup(ts,start_station) printf(您输入的站点不存在!n); system(pause); return; printf(请输入终点站:); scanf(%s,terminal_station); if(!station_lookup(ts,terminal_station) printf(您输入的站点不存在!n); system(pause); return; index_s = station_i
41、ndexof(ts,start_station); index_t = station_indexof(ts,terminal_station); min_transfer(ts,tb,tg,index_s,index_t); system(pause); station.h #ifndef _station_h_ #define _station_h_ #define station_init_size 100 struct station_node char bus_name20; struct station_node *next; ; struct station_arr char s
42、tation_name20;/站点名 int bus_cnt;/经过的公交数量 struct station_node *next; ; struct station int station_cnt; struct station_arr *list; ; /*初始化*/ struct station * station_init(); /*销毁*/ void station_free(struct station *t); /*清空*/ void station_clear(struct station *t); /*判断站点是否为空*/ int station_isempty(struct
43、 station *t); /*返回站点数量*/ int station_count(struct station *t); /*添加一个站点*/ void station_add(struct station *t, char *station_name); /*添加一个站点经过的线路*/ void station_add_bus(struct station *t, int index, char *bus_name); /*删除一个站点*/ void station_remove(struct station *t, int index); /*删除一个站点所经过的线路*/ void s
44、tation_remove_bus(struct station *t, int index, char *bus_name); /*修改一个站点*/ void station_set(struct station *t, int index, char *station_name); /*返回一个站点的名字*/ char * station_get(struct station *t, int index); /*修改一个站点所经过的线路*/ void station_set_bus(struct station *t, int index, char *old_bus_name, char
45、 *new_bus_name); /*检查一个站点是否存在*/ int station_lookup(struct station *t, char *station_name); /*检查摸个站点是否有改线路经过*/ int station_lookup_bus(struct station *t, int index, char *bus_name); /*返回一个站点的下标*/ int station_indexof(struct station *t, char *station_name); /*返回一个站点所经过线路的数量*/ int station_get_bus_count(s
46、truct station *t, int index); /*返回一个站点所经过线路的名称*/ char * station_get_bus_name(struct station *t, int index_station, int index_bus); /*将站点的信息保存到文件中*/ void station_save(struct station *t); /*从文件中读取信息*/ void station_read(struct station *t); /*交一个站点的信息打印出来*/ void station_print(struct station *t, int inde
47、x); #endif /* _station_h_ */ station.c #include #include #include #include station.h /*初始化*/ struct station * station_init() struct station *p = (struct station *)calloc(1,sizeof(struct station); struct station_arr *p_arr = (struct station_arr *)calloc(station_init_size,sizeof(struct station_arr); i
48、nt i; if(p = null | p_arr = null) return null; for(i = 0; i list = p_arr; return p; /*销毁*/ void station_free(struct station *t) station_clear(t); free(t); /*清空*/ void station_clear(struct station *t) int i; for(i = 0; i listi.next; while(p-next) struct station_node *p_node = p-next; p-next = p_node-
49、next; free(p_node); t-listi.bus_cnt = 0; strcpy(t-listi.station_name,); t-station_cnt = 0; /*判断站点是否为空*/ int station_isempty(struct station *t) return t-station_cnt = 0; /*返回站点数量*/ int station_count(struct station *t) return t-station_cnt; /*添加一个站点*/ void station_add(struct station *t, char *station_
50、name) strcpy(t-listt-station_cnt.station_name,station_name); t-station_cnt+; /*添加一个站点经过的线路*/ void station_add_bus(struct station *t, int index, char *bus_name) struct station_node *p = t-listindex.next; struct station_node *p_node = (struct station_node *)malloc(sizeof(struct station_node); if(p_nod
51、e = null) return; while(p-next) p = p-next; strcpy(p_node-bus_name,bus_name);/! p_node-next = null; p-next = p_node; t-listindex.bus_cnt+; /*删除一个站点*/ void station_remove(struct station *t, int index) struct station_node *p = t-listindex.next; int i; while(p-next) struct station_node *p_node = p-next
52、; p-next = p_node-next; free(p_node); for(i = index; i station_cnt; i+) t-listi = t-listi+1; t-station_cnt-; /*删除一个站点所经过的线路*/ void station_remove_bus(struct station *t, int index ,char *bus_name) struct station_node *p = t-listindex.next; struct station_node *q = p; int flag = 0; while(p) if(strcmp(
53、p-bus_name,bus_name) = 0) flag = 1; break; q = p; p = p-next; if(flag) q-next = p-next; free(p); t-listindex.bus_cnt-; /*修改一个站点*/ void station_set(struct station *t, int index, char *station_name) strcpy(t-listindex.station_name,station_name); /*返回一个站点的名字*/ char * station_get(struct station *t, int
54、index) return t-listindex.station_name; /*修改一个站点所经过的线路*/ void station_set_bus(struct station *t, int index, char *old_bus_name, char *new_bus_name) struct station_node *p = t-listindex.next; while(p) if(strcmp(p-bus_name,old_bus_name) = 0) break; p = p-next; if(p) strcpy(p-bus_name,new_bus_name); /*
55、检查一个站点是否存在*/ int station_lookup(struct station *t, char *station_name) int i; for(i = 0; i station_cnt; i+) if(strcmp(t-listi.station_name,station_name) = 0) return 1; return 0; /*检查摸个站点是否有改线路经过*/ int station_lookup_bus(struct station *t, int index, char *bus_name) struct station_node *p = t-listind
56、ex.next; while(p) if(strcmp(p-bus_name,bus_name) = 0) return 1; p = p-next; return 0; /*返回一个站点的下标*/ int station_indexof(struct station *t, char *station_name) int i; for(i = 0; i station_cnt; i+) if(strcmp(t-listi.station_name,station_name) = 0) return i; return -1; /*返回一个站点所经过线路的数量*/ int station_ge
57、t_bus_count(struct station *t, int index) return t-listindex.bus_cnt; /*返回一个站点所经过线路的名称*/ char * station_get_bus_name(struct station *t, int index_station, int index_bus) struct station_node *p = t-listindex_station.next; int i = -1; while(i next; return p-bus_name; /*将站点的信息保存到文件中*/ void station_save
58、(struct station *t) file *fp = fopen(station.txt,wb+); int i,j; fwrite(t,sizeof(struct station),1,fp); for(i = 0; i station_cnt; i+) struct station_node *p_node = t-listi.next-next; fwrite( for(j = 0; j listi.bus_cnt; j+) fwrite(p_node,sizeof(struct station_node),1,fp); p_node = p_node-next; fclose(
59、fp); /*从文件中读取信息*/ void station_read(struct station *t) file *fp = fopen(station.txt,rb+); int i,j; struct station_arr *p_arr = t-list; if(fp = null) return; fread(t,sizeof(struct station),1,fp); t-list = p_arr; for(i = 0; i station_cnt; i+) struct station_node *p = t-listi.next; fread( t-listi.next
60、= p; for(j = 0; j listi.bus_cnt; j+) struct station_node *p_node = (struct station_node *)malloc(sizeof(struct station_node); fread(p_node,sizeof(struct station_node),1,fp); p_node-next = null; p-next = p_node; p = p_node; fclose(fp); /*交一个站点的信息打印出来*/ void station_print(struct station *t, int index)
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 网络课程修读管理办法
- 考察开发建设管理办法
- 考评认定管理办法试行
- 职工驿站运营管理办法
- 联合贷款业务管理办法
- 联通资费体系管理办法
- 肇庆市小作坊管理办法
- 航道工程资质管理办法
- 2025浙江嘉兴嘉善县事业单位面向普通高校毕业生退役士兵招聘2人备考练习试题及答案解析
- 2025四川凉山州布拖县农业投资有限责任公司招聘专业技术人员8人考试参考试题及答案解析
- 综合与实践:数学连环画(大单元教学设计) 一年级数学下册 (苏教版2025)
- 五年级科学教科版上册全册课后习题含答案
- 《电子商务基础(第二版)》课件 第三章 网络营销
- GB/T 45637-2025电动牙刷性能测试方法
- 2025年呼伦贝尔农垦集团有限公司工作人员招聘考试试题
- GB/T 25820-2025包装用钢带
- 《中国心力衰竭诊断和治疗指南+2024》要点解读课件
- 新人教版物理八年级下册知识点总结-物理八年级下册考点人教版
- 2024年湖北农商行招聘笔试题及
- ICU感染性休克护理查房
- 2025年九年级语文上册课后习题参考答案
评论
0/150
提交评论