1、软件工程基础实训II课程设计说明书长 沙 学 院课程设计说明书题目城市公交查询软件系(部)数学与计算机科学系专业(班级)14软件3班姓名章彤学号指导教师何文德起止日期2015.12.21-2015.12.25课程设计任务书课程名称:软件工程基础实训设计题目:城市公交查询软件已知技术参数和设计要求:需求说明及要求1.主要功能模块:(1)用户管理用户管理模块为用户提供用户信息管理的功能,包括用户注册、用户登录、用户信息修改、用户密码修改、用户注销等功能。用户注册:用户可以利用此功能完成注册,用户在界面输入注册信息,回车后,软件将注册信息保存到用户信息数据文件中。用户登录:用户可以利用此功能完成登录
2、,用户在界面输入登录信息,回车后,软件验证登录信息,登录成功后,软件进入主功能选择界面。用户信息修改:用户可以利用此功能完成用户信息修改。用户密码修改:用户可以利用此功能完成密码修改。用户注销:用户可以利用此功能完成用户信息注销,某用户注销后,便不能再次登录。(2)线路管理线路管理模块为用户提供公交线路数据的管理和维护,包括线路添加、线路修改、线路删除等功能。线路添加:用户可以利用此功能增加一条线路。线路修改:用户可以利用此功能修改一条线路。线路删除:用户可以利用此功能删除一条线路。(3)站点管理站点管理模块为用户提供公交站点数据的管理和维护,包括站点添加、站点修改、站点删除等功能。站点添加:
3、用户可以利用此功能增加一个站点。站点修改:用户可以利用此功能修改一个站点。站点删除:用户可以利用此功能删除一个站点。(4)公交查询公交查询模块为用户提供公交信息查询的功能,包括站点查询、线路查询、站站查询、最短距离查询、最少换乘查询等功能。站点查询:用户可以利用此功能查看某个站点所停靠的公交线路。线路查询:用户可以利用此功能查看某条线路所路经的公交站点。站站查询:用户可以利用此功能查询出发地和目的地之间的所有公交乘车方案。最短距离查询:用户可以利用此功能查询出发地和目的地之间最短距离的公交乘车方案。最少换乘查询:用户可以利用此功能查询出发地和目的地之间最少换乘的公交乘车方案。 3.要求:界面友
4、好,易于操作;数据结构运用灵活,编码规范,设计合理。各阶段具体要求:1、需求分析阶段(1)写出需求分析(做什么) (2)要求问题分析和功能定义准确2、系统设计阶段(1)根据问题描述,设计系统的结构(3)完成数据结构中各个函数的定义(4)用户界面的设计(5)要求数据结构定义合理,类层次结构清晰3、编码实现阶段(1)完成代码编写 (2)要求代码编写规范4、系统测试阶段(1)完成功能调试(2)要求完成必要的测试工作5、交付实施阶段(1)提交可正常执行的系统(2)提交系统需求说明书、设计说明书、程序代码(3)撰写实训报告书(4)要求规范地书写文档设计工作量:(1)软件设计:完成问题陈述中所提到的所有需
5、求功能。(2)论文:要求撰写不少于3000个文字的文档,详细说明各阶段具体要求。工作计划:安排两周时间进行课程设计,软件开发步骤如下,2天完成13,3-5天完成46,论文同步进行;1) 选定题目2) 需求分析3) 系统设计4) 编码实现5) 系统测试6) 交付实施注意事项 提交文档 长沙学院实训任务书 (每学生1份) 长沙学院实训说明书 (每学生1份) 长沙学院实训鉴定表 (每学生1份)指导教师签名: 日期: 教研室主任签名: 日期:系主任签名: 日期:长沙学院课程设计鉴定表姓名章彤学号专业软件工程班级14软件3班设计题目城市公交查询软件指导教师何文德指导教师意见:评定成绩: 教师签名: 日期
6、: 答辩小组意见:评定成绩:答辩小组长签名:日期:教研室意见:最终评定等级:教研室主任签名:日期:说明课程设计成绩分“优秀”、“良好”、“中等”、“及格”、“不及格”五等。摘要本系统的设计流程简单比较简单,原始数据全部都保存在文件中,用户就不必自己一个一个的输入信息。程序执行时从文件中读出,文件的读取操作在下文中我会详细说明,这里就不做具体说明了。创建动态链表、图和结构体数组对路线信息进行存储,因为使用链表时对程序的插入、删除会比较方便,那么插入和删除就相当于对链表节点的删除和插入。写无返回值的主函数void main()对系统的功能进行显示,每次用户选择某一功能时都可以看到路线的大致信息,以
7、便于用户更准确的选择功能。其中利用switch条件分支语句进行子函数功能的选择和调用。并且使用while循环语句进行多次循环执行,就可以实现对信息的多次删除、增加、修改,知道达到用户满意时由用户自己选择退出系统。通同时使用了清屏函数,对上一次程序运行的结果清楚只显示本次运行的相关信息,这样的话就做到了界面的友好化,简单明了,不冗杂,更方便观看。当用户对信息进行有关的改动之后,用户根据自己的选择是否保存入文件中,就可以保存他所要的信息了。一、引言1.1 编写目的本文档是“城市公交查询软件”的软件设计说明书,编写目的是:明确软件需求、概要设计、详细设计和功能测试用例,为软件后续开发和维护提供指导。
8、本文档的读者对象是需求分析人员、系统设计人员、系统开发人员、系统测试人员。1.2 参考资料Bruce Eckel著,刘宗田袁兆山潘秋菱译C+编程思想.钱能著,C+程序设计教程.北京:清华大学出版社,2007谭浩强著,C+面向对象程序设计.北京:清华大学出版社,2009范磊著,零起点学通C+.北京:科学出版社,2010齐治昌 谭庆平,宁洪编著.软件工程.北京:高等教育出版社,2008吕云翔 杨雪编著.大学实用计算机英语教程.北京:机械工业出版社,2009.9李莉 李秀华编著.计算机专业英语教程(第2版).北京:北京大学出版社,2010二、需求规约2.1 功能需求功能点编号ETQ0101功能点名称
9、管理员用户登陆角色管理员功能说明管理员用户能通过本功能点完成登陆操作。事件流程1、 管理员用户输入用户名和密码,并回车。2、 软件校验用户名和密码格式是否合法。3、 软件校验用户名和密码是否正确。4、 若正确,则跳转到主功能处理界面;否则,提示“用户或密码输入错误,请重新输入!”。前置条件管理员用户成功注册。后置条件管理员用户成功进入软件主功能处理界面。输入数据用户名和密码输出数据软件主功能处理界面备注无2.2 数据需求提示:说明程序需处理的数据实体及其属性,数据名称,数据格式,数据结构,数据取值范围,数据存储要求,数据处理过程。例如,用户实体学生实体属性有学号,姓名,。表格说明范例如表2.1
10、所示。表2.1 用户实体属性名称类型 长度是否为空唯一标识说明姓名字符串32否否用户名三、概要设计主要功能:1)通过线路查询:输入查询方式1,输入要查询的车次的名称,如1路,结果显示出该公车路线经过的站点;2)通过站点查询:输入查询方式2,输入要查询的站点的名称,如沃尔玛,结果显示出途经该站点的所有公车车次;3)查询两点间有无车次经过:输入查询方式3,输入要查询的两站的名称,如沃尔玛、广东石油化工学院,结果显示出通过两站点的车次;4)显示全部信息:输入查询方式4,结果分别显示出所有站点和所有公车路线的记录;3.1系统结构图3.1 程序结构图 图3.2 程序结构图3.2 界面设计图3.3 用户登
11、录对话框表3.1 用户登录对话框控件表组件名类型属性说明dialogDialog默认窗体,是对话框顶层容器默认关闭方法:Frame.DISPOSE_ON_CLOSETitleStaticTextText=欢迎使用公交查询系统单行文本框,默认值userEditTextText= 用户名单行文本框,输入用户名passEditTextText= 密 码单行文本框,输入密码btnLoginButtonText= 确认确认按钮。处理相应动作事件3.3数据设计说明采用那些数据结构及数据的存储方式。可列表输出,例如表3.2所示。表3.2 用户信息数据记录数据项名数据类型长度是否为空唯一标识说明useridc
12、har4否是loginNamechar20否否用户登录名loginPassWdchar6否否用户登录密码userNamechar40否否用户真实姓名userSexchar2否否用户性别;四、详细设计4.1 数据结构设计说明 本系统的数据库设计,采用了载入TXT文本文档进行数据库设计。通过对市场的调查,各建立一个bus主文件夹和position主文件夹分别进行通过查询线路得出途经的站点和通过查询站点得出途经的公交路线。另外,还建立了3个名为线路名称、busname、positionname的数据库进行两站点之间查询有无车次通过的方法。其总体结构分析如下:busname用来保存线路名称,即公交名。
13、数据格式定义为:1路、2路、3路、6路、7路、8路、9路、10路、11路、12路、16路、18路、201路、202路、203路,类型定义为文本。Positionname用来保存站点名称,数据格式定义为:百花大厦 春苑公园 妇幼保健院 公交商业城 官渡市场 广东石油化工学院 河西汽车站 交通技工学校 大厦 火车站 人民广场 人民医院 市二技学校 市委大院 市政府 体育中心 铜鼓岭 文化广场 沃尔玛 移动通讯公司 镇盛街 市府中心广场 等。线路名称用来保存公车路线的途径上下行站点,发车起始时间,以及对应的车票费用。4.2用户注册 用例设计说明表4.1 主处理函数函数名user_register (
14、)源文件user_register.c参数void返回值int类型,0表示成功,-1表示失败功能描述实现主功能界面的绘制和菜单处理设计方案1、利用while循环,在界面上绘制主功能选择菜单项,且对每个选项进行编号。2、利用switch结构,根据用户输入的功能选项,调用相应模块的业务处理主函数“bizBizName ()”,进入不同的业务模块进行处理。五、测试用例设计yl-009用户名超过36,123456登录失败通过注册yl-010用户名,密码,确认密码,真是姓名,性别,出生日期,地址,邮政编码,电话,email,密保问题,密保答案,验证码Tony,123456,123456,test1,男,
15、1991-10-10,长沙,410014,85577424,505,我是谁,test1.创建成功通过用例测试六、总结一个应用程序设计开发的好坏,与设计人员对开发工具的掌握程度息息相关。根据个人情况,尽量选择了自己较熟悉的开发环境及工具,以便能够顺利的实现系统避免延期。同时设计的思想,套路在开发前期需要认真的物色,一个好的设计思路是开发出好的系统的基石。尽管如此在本系统的开发设计过程中,由于本人对开发工具的掌握尚有欠缺,可以说整个的开发过程是一边摸索一边实践出来的。但令人高兴的是,通过这样一个边学习边应用的过程与其他同学、老师的帮助,本人完成了公交查询系统的开发工作,并实现了该应用程序背景所要求
16、的功能。在此过程中能力得到了相应的提升,为日后设计开发和学习增强了信心。但总的来说,程序仍然存在许多不足之处。相信随着对开发工具的逐渐熟悉和知识体系的逐渐完善,该系统在日后一定能够得到不断改进,发挥出它应有的作用。附录附录1 程序运行结果附录2 程序源代码#include#include#include#include#include#includeusing namespace std;/线路图结构体typedef struct route_arc /公交线路中站点信息 int sta_num; /站点编号 struct route_arc *next; route_arc;typedef
17、struct route_v /公交线路信息 int route_num; /线路编号 char route_name20; /公交线路名称 int sta_sum; /该线路中站点的总数 route_arc *head; /公交站点的头结点 route_v *r_next; /指向下一条公交线路的指针route_v;typedef struct route_graph int route_sum; /城市公交线路总数 route_v *r_node; /公交线路的头结点route_graph; / 站点图结构体typedef struct sta_route /公交线路映射到站点的结构体 i
18、nt route_num; /线路编号 struct sta_route *r_next; sta_route;typedef struct sta_arc /弧信息 int sta_num; /站点编号 int sta_dis; /站点之间的路径长度 struct sta_arc *next; sta_arc;typedef struct sta_v /站点信息 int sta_num; /站点编号 char sta_name20; /站点名称 int arc_sum; / 与这个站点临近的站点的总数 int route_sum; /经过这个站点的公交线路总数 sta_arc *head;
19、/路径的头指针 sta_route *r_head; /公交线路的头指针 sta_v *v_next; /指向下一个站点信息的指针sta_v;typedef struct sta_graph int sta_sum; /城市公交站点总数。 sta_v *v_node; /城市公交站点记录指针sta_graph; /用户信息 typedef struct user char userId10; char loginName20; char loginPassword7; char userName20; char userSex5; struct user *next;user;/界面函数调用i
20、nt user_register(struct user *U); /用户注册函数int user_login(struct user *U); /用户登录函数int admin_main(); /管理员的界面void user_login_success();/用户登录成功struct user *found(user *U,char ID10);/ 查找账户int write_userfile(user *U);/用户写入文件void ini_userfile() ; int read_userfile(user *U);void user_del(user *U);/用户删除void s
21、ta_query(sta_graph *G,route_graph *Gr);/站点查询void route_query(sta_graph *G,route_graph *Gr);/线路查询void bus_query(sta_graph *G,route_graph *Gr);/交通查询void admin_login_success(struct user *U);/管理员登录成功函数void route_manage(sta_graph *G,route_graph *Gr);/线路管理void station_manage(sta_graph *G,route_graph *Gr);
22、/站点管理函数/站点管理函数调用void station_manage(sta_graph *G,route_graph *Gr);/站点管理函数int read_stafile(sta_graph *G);/读取站点文件函数int write_stafile(sta_graph *G);/写入文件函数void ini_stafile(sta_graph *G); /创建文件函数sta_v* sta_location(sta_graph*G,int n);/查找站点sta_arc* sta_location(sta_graph*G,sta_v *p,int n);/查找路径 void inse
23、rt_sta(sta_graph *G);/插入站点函数void show_sta(sta_graph *G);/查看站点void del_sta(sta_graph *G,route_graph *Gr);/删除站点void correct_sta(sta_graph *G);/修改站点/线路管理int read_routefile(route_graph *Gr);/读取线路文件函数int write_routefile(route_graph *Gr); /写入文件函数void ini_routefile(route_graph *Gr);/创建线路函数route_v* location
24、_route(route_graph *Gr,int n);/查找线路函数void insert_route(route_graph *Gr,sta_graph *G);/插入线路void show_route(route_graph *Gr,sta_graph *G);/查看线路void del_route(route_graph *Gr,sta_graph *G);/删除线路void correct_route(route_graph *Gr,sta_graph *G);/修改线路void route_manage(sta_graph *G,route_graph *Gr);/线路管理/查
25、询函数(线路,站点,最短路径)#define Bus_Size 100#define INT_MAX 2147483647 typedef struct node int matrixBus_SizeBus_Size; /邻接矩阵 int sta_numBus_Size; /站点编号 int n; /顶点数 MGraph; typedef struct stack char bus_name20; int bus_num; char sta_name20; int sta_num;stack;typedef struct no int sta_num,dir; int flag;Fn;Fn v
26、isitedBus_Size;typedef struct bus_route int sta_num,route_num;buss;buss busBus_Size;void sta_query(sta_graph *G,route_graph *Gr);/站点查询void route_query(sta_graph *G,route_graph *Gr);/线路查询void DijkstraPath(MGraph g,int*dist,int*path,int v0); /迪杰斯特拉算法int location_sta(MGraph g,int n);/在图中查找站点void query_
27、sta(sta_graph *G,route_graph *Gr,int sta_b,int sta_e);/快速查找站点int cmp(int sta_num,sta_graph *G);/比较int bfs(sta_graph *G,route_graph *Gr,sta_v* sta_b,sta_v* sta_e);/void bus_query(sta_graph *G,route_graph *Gr);/int main() user *U=(user*)malloc(sizeof(user); U-next=NULL; if(!read_userfile(U) system(pause); printf(初次使用!n); ini_userfile(); if(!read_userfile(U) printf(数据读取失败!n); while (1) int n; int flag=0; /标记变量,用于记录调用函数的返回值,然后根据返回选择要调用的函数。 printf(=nn); printf( 欢迎使用城市公交系统:nn); printf( 1 用户注册 2 用户登录 3 管理员 4 退出nn); printf(=n); scanf(%d,&n); switch (
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1