软件工程基础实训II课程设计说明书Word文档下载推荐.docx
《软件工程基础实训II课程设计说明书Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《软件工程基础实训II课程设计说明书Word文档下载推荐.docx(70页珍藏版)》请在冰豆网上搜索。
(4)公交查询
公交查询模块为用户提供公交信息查询的功能,包括站点查询、线路查询、站站查询、最短距离查询、最少换乘查询等功能。
站点查询:
用户可以利用此功能查看某个站点所停靠的公交线路。
线路查询:
用户可以利用此功能查看某条线路所路经的公交站点。
站站查询:
用户可以利用此功能查询出发地和目的地之间的所有公交乘车方案。
最短距离查询:
用户可以利用此功能查询出发地和目的地之间最短距离的公交乘车方案。
最少换乘查询:
用户可以利用此功能查询出发地和目的地之间最少换乘的公交乘车方案。
3.要求:
界面友好,易于操作;
数据结构运用灵活,编码规范,设计合理。
各阶段具体要求:
1、需求分析阶段
(1)写出需求分析(做什么)
(2)要求问题分析和功能定义准确
2、系统设计阶段
(1)根据问题描述,设计系统的结构
(3)完成数据结构中各个函数的定义
(4)用户界面的设计
(5)要求数据结构定义合理,类层次结构清晰
3、编码实现阶段
(1)完成代码编写
(2)要求代码编写规范
4、系统测试阶段
(1)完成功能调试
(2)要求完成必要的测试工作
5、交付实施阶段
(1)提交可正常执行的系统
(2)提交系统需求说明书、设计说明书、程序代码
(3)撰写实训报告书
(4)要求规范地书写文档
设计工作量:
(1)软件设计:
完成问题陈述中所提到的所有需求功能。
(2)论文:
要求撰写不少于3000个文字的文档,详细说明各阶段具体要求。
工作计划:
安排两周时间进行课程设计,软件开发步骤如下,2天完成1~3,3-5天完成4~6,论文同步进行;
1)选定题目
2)需求分析
3)系统设计
4)编码实现
5)系统测试
6)交付实施
注意事项
⏹提交文档
Ø
长沙学院实训任务书(每学生1份)
长沙学院实训说明书(每学生1份)
长沙学院实训鉴定表(每学生1份)
指导教师签名:
日期:
教研室主任签名:
日期:
系主任签名:
日期:
长沙学院课程设计鉴定表
专业
软件工程
班级
设计题目
指导教师意见:
评定成绩:
教师签名:
日期:
答辩小组意见:
答辩小组长签名:
日期:
教研室意见:
最终评定等级:
教研室主任签名:
说明
课程设计成绩分“优秀”、“良好”、“中等”、“及格”、“不及格”五等。
摘要
本系统的设计流程简单比较简单,原始数据全部都保存在文件中,用户就不必自己一个一个的输入信息。
程序执行时从文件中读出,文件的读取操作在下文中我会详细说明,这里就不做具体说明了。
创建动态链表、图和结构体数组对路线信息进行存储,因为使用链表时对程序的插入、删除会比较方便,那么插入和删除就相当于对链表节点的删除和插入。
写无返回值的主函数voidmain()对系统的功能进行显示,每次用户选择某一功能时都可以看到路线的大致信息,以便于用户更准确的选择功能。
其中利用switch条件分支语句进行子函数功能的选择和调用。
并且使用while循环语句进行多次循环执行,就可以实现对信息的多次删除、增加、修改,知道达到用户满意时由用户自己选择退出系统。
通同时使用了清屏函数,对上一次程序运行的结果清楚只显示本次运行的相关信息,这样的话就做到了界面的友好化,简单明了,不冗杂,更方便观看。
当用户对信息进行有关的改动之后,用户根据自己的选择是否保存入文件中,就可以保存他所要的信息了。
一、引言
1.1编写目的
本文档是“城市公交查询软件”的软件设计说明书,编写目的是:
明确软件需求、概要设计、详细设计和功能测试用例,为软件后续开发和维护提供指导。
本文档的读者对象是需求分析人员、系统设计人员、系统开发人员、系统测试人员。
1.2参考资料
BruceEckel著,刘宗田袁兆山潘秋菱译C++编程思想.
钱能著,C++程序设计教程.北京:
清华大学出版社,2007
谭浩强著,C++面向对象程序设计.北京:
清华大学出版社,2009
范磊著,零起点学通C++.北京:
科学出版社,2010
齐治昌谭庆平,宁洪编著.软件工程.北京:
高等教育出版社,2008
吕云翔杨雪编著.大学实用计算机英语教程.北京:
机械工业出版社,2009.9
李莉李秀华编著.计算机专业英语教程(第2版).北京:
北京大学出版社,2010
二、需求规约
2.1功能需求
功能点编号
ETQ0101
功能点名称
管理员用户登陆
角色
管理员
功能说明
管理员用户能通过本功能点完成登陆操作。
事件流程
1、管理员用户输入用户名和密码,并回车。
2、软件校验用户名和密码格式是否合法。
3、软件校验用户名和密码是否正确。
4、若正确,则跳转到主功能处理界面;
否则,提示“用户或密码输入错误,请重新输入!
”。
前置条件
管理员用户成功注册。
后置条件
管理员用户成功进入软件主功能处理界面。
输入数据
用户名和密码
输出数据
软件主功能处理界面
备注
无
2.2数据需求
提示:
说明程序需处理的数据实体及其属性,数据名称,数据格式,数据结构,数据取值范围,数据存储要求,数据处理过程。
例如,用户实体
学生实体属性有学号,姓名,…。
表格说明范例如表2.1所示。
表2.1用户实体
属性名称
类型
长度
是否为空
唯一标识
字符串
32
否
用户名
三、概要设计
主要功能:
1)通过线路查询:
输入查询方式1,输入要查询的车次的名称,如1路,结果显示出该公车路线经过的站点;
2)通过站点查询:
输入查询方式2,输入要查询的站点的名称,如沃尔玛,结果显示出途经该站点的所有公车车次;
3)查询两点间有无车次经过:
输入查询方式3,输入要查询的两站的名称,如沃尔玛、广东石油化工学院,结果显示出通过两站点的车次;
4)显示全部信息:
输入查询方式4,结果分别显示出所有站点和所有公车路线的记录;
3.1系统结构
图3.1程序结构图
图3.2程序结构图
3.2界面设计
图3.3用户登录对话框
表3.1用户登录对话框控件表
组件名
属性
dialog
Dialog
默认
窗体,是对话框顶层容器
默认关闭方法:
Frame.DISPOSE_ON_CLOSE
Title
StaticText
Text="
欢迎使用公交查询系统"
单行文本框,默认值
user
EditText
Text="
用户名"
单行文本框,输入用户名
pass
密码"
单行文本框,输入密码
btnLogin
Button
确认"
确认按钮。
处理相应动作事件
3.3数据设计
说明采用那些数据结构及数据的存储方式。
可列表输出,例如表3.2所示。
表3.2用户信息数据记录
数据项名
数据类型
长度
userid
char[]
4
是
loginName
20
用户登录名
loginPassWd
6
用户登录密码
userName
40
用户真实姓名
userSex
2
用户性别
;
四、详细设计
4.1数据结构设计说明
本系统的数据库设计,采用了载入TXT文本文档进行数据库设计。
通过对市场的调查,各建立一个bus主文件夹和position主文件夹分别进行通过查询线路得出途经的站点和通过查询站点得出途经的公交路线。
另外,还建立了3个名为线路名称、busname、positionname的数据库进行两站点之间查询有无车次通过的方法。
其总体结构分析如下:
busname用来保存线路名称,即公交名。
数据格式定义为:
1路、2路、3路、6路、7路、8路、9路、10路、11路、12路、16路、18路、201路、202路、203路,类型定义为文本。
Positionname用来保存站点名称,数据格式定义为:
百花大厦春苑公园妇幼保健院公交商业城官渡市场广东石油化工学院河西汽车站交通技工学校大厦火车站人民广场人民医院市二技学校市委大院市政府体育中心铜鼓岭文化广场沃尔玛移动通讯公司镇盛街市府中心广场等。
线路名称用来保存公车路线的途径上下行站点,发车起始时间,以及对应的车票费用。
4.2用户注册用例设计说明
表4.1主处理函数
函数名
user_register()
源文件
user_register.c
参数
void
返回值
int类型,0表示成功,-1表示失败
功能描述
实现主功能界面的绘制和菜单处理
设计方案
1、利用while循环,在界面上绘制主功能选择菜单项,且对每个选项进行编号。
2、利用switch结构,根据用户输入的功能选项,调用相应模块的业务处理主函数“bizBizName()”,进入不同的业务模块进行处理。
五、测试用例设计
yl-009
用户名超过36,123456
登录失败
通过
注册
yl-010
用户名,密码,确认密码,真是姓名,性别,出生日期,地址,邮政编码,电话,email,密保问题,密保答案,验证码
Tony,123456,123456,test1,男,1991-10-10,长沙,410014,85577424,505@,我是谁,test1.
创建成功
用例测试
六、总结
一个应用程序设计开发的好坏,与设计人员对开发工具的掌握程度息息相关。
根据个人情况,尽量选择了自己较熟悉的开发环境及工具,以便能够顺利的实现系统避免延期。
同时设计的思想,套路在开发前期需要认真的物色,一个好的设计思路是开发出好的系统的基石。
尽管如此在本系统的开发设计过程中,由于本人对开发工具的掌握尚有欠缺,可以说整个的开发过程是一边摸索一边实践出来的。
但令人高兴的是,通过这样一个边学习边应用的过程与其他同学、老师的帮助,本人完成了公交查询系统的开发工作,并实现了该应用程序背景所要求的功能。
在此过程中能力得到了相应的提升,为日后设计开发和学习增强了信心。
但总的来说,程序仍然存在许多不足之处。
相信随着对开发工具的逐渐熟悉和知识体系的逐渐完善,该系统在日后一定能够得到不断改进,发挥出它应有的作用。
附录
附录1程序运行结果
附录2程序源代码
#include<
iostream>
cstring>
stdio.h>
stdlib.h>
string.h>
queue>
usingnamespacestd;
////线路图结构体
typedefstructroute_arc//公交线路中站点信息
{
intsta_num;
//站点编号
structroute_arc*next;
}route_arc;
typedefstructroute_v//公交线路信息
introute_num;
//线路编号
charroute_name[20];
//公交线路名称
intsta_sum;
//该线路中站点的总数
route_arc*head;
//公交站点的头结点
route_v*r_next;
//指向下一条公交线路的指针
}route_v;
typedefstructroute_graph
introute_sum;
//城市公交线路总数
route_v*r_node;
//公交线路的头结点
}route_graph;
//站点图结构体
typedefstructsta_route//公交线路映射到站点的结构体
introute_num;
//线路编号
structsta_route*r_next;
}sta_route;
typedefstructsta_arc//弧信息
intsta_dis;
//站点之间的路径长度
structsta_arc*next;
}sta_arc;
typedefstructsta_v//站点信息
//站点编号
charsta_name[20];
//站点名称
intarc_sum;
//与这个站点临近的站点的总数
//经过这个站点的公交线路总数
sta_arc*head;
//路径的头指针
sta_route*r_head;
//公交线路的头指针
sta_v*v_next;
//指向下一个站点信息的指针
}sta_v;
typedefstructsta_graph
//城市公交站点总数。
sta_v*v_node;
//城市公交站点记录指针
}sta_graph;
//用户信息
typedefstructuser
charuserId[10];
charloginName[20];
charloginPassword[7];
charuserName[20];
charuserSex[5];
structuser*next;
}user;
////////////////////界面函数调用
intuser_register(structuser*U);
//用户注册函数
intuser_login(structuser*U);
//用户登录函数
intadmin_main();
//管理员的界面
voiduser_login_success();
//用户登录成功
structuser*found(user*U,charID[10]);
//查找账户
intwrite_userfile(user*U);
//用户写入文件
voidini_userfile();
intread_userfile(user*U);
voiduser_del(user*U);
//用户删除
voidsta_query(sta_graph*G,route_graph*Gr);
//站点查询
voidroute_query(sta_graph*G,route_graph*Gr);
//线路查询
voidbus_query(sta_graph*G,route_graph*Gr);
//交通查询
voidadmin_login_success(structuser*U);
//管理员登录成功函数
voidroute_manage(sta_graph*G,route_graph*Gr);
//线路管理
voidstation_manage(sta_graph*G,route_graph*Gr);
//站点管理函数
/////////////////////////站点管理函数调用
intread_stafile(sta_graph*G);
//读取站点文件函数
intwrite_stafile(sta_graph*G);
//写入文件函数
voidini_stafile(sta_graph*G);
//创建文件函数
sta_v*sta_location(sta_graph*G,intn);
//查找站点
sta_arc*sta_location(sta_graph*G,sta_v*p,intn);
//查找路径
voidinsert_sta(sta_graph*G);
//插入站点函数
voidshow_sta(sta_graph*G);
//查看站点
voiddel_sta(sta_graph*G,route_graph*Gr);
//删除站点
voidcorrect_sta(sta_graph*G);
//修改站点
/////////////////////线路管理
intread_routefile(route_graph*Gr);
//读取线路文件函数
intwrite_routefile(route_graph*Gr);
//写入文件函数
voidini_routefile(route_graph*Gr);
//创建线路函数
route_v*location_route(route_graph*Gr,intn);
//查找线路函数
voidinsert_route(route_graph*Gr,sta_graph*G);
//插入线路
voidshow_route(route_graph*Gr,sta_graph*G);
//查看线路
voiddel_route(route_graph*Gr,sta_graph*G);
//删除线路
voidcorrect_route(route_graph*Gr,sta_graph*G);
//修改线路
///////////////////查询函数(线路,站点,最短路径)
#defineBus_Size100
#defineINT_MAX2147483647
typedefstructnode
intmatrix[Bus_Size][Bus_Size];
//邻接矩阵
intsta_num[Bus_Size];
intn;
//顶点数
}MGraph;
typedefstructstack
charbus_name[20];
intbus_num;
}stack;
typedefstructno
intsta_num,dir;
intflag;
}Fn;
Fnvisited[Bus_Size];
typedefstructbus_route
intsta_num,route_num;
}buss;
bussbus[Bus_Size];
voidDijkstraPath(MGraphg,int*dist,int*path,intv0);
//迪杰斯特拉算法
intlocation_sta(MGraphg,intn);
//在图中查找站点
voidquery_sta(sta_graph*G,route_graph*Gr,intsta_b,intsta_e);
//快速查找站点
intcmp(intsta_num,sta_graph*G);
//比较
intbfs(sta_graph*G,route_graph*Gr,sta_v*sta_b,sta_v*sta_e);
//
intmain()
user*U=(user*)malloc(sizeof(user));
U->
next=NULL;
if(!
read_userfile(U))
{
system("
pause"
);
printf("
初次使用!
\n"
ini_userfile();
if(!
printf("
数据读取失败!
}
while
(1)
intn;
intflag=0;
//标记变量,用于记录调用函数的返回值,然后根据返回选择要调用的函数。
===================================================\n\n"
欢迎使用城市公交系统:
\n\n"
1用户注册2用户登录3管理员4退出\n\n"
===================================================\n"
scanf("
%d"
&
n);
switch(