公交查询系统用户管理课程设计说明书
长 沙 学 院
课程设计说明书
题
快递公司问题件快递公司问题件货款处理关于圆的周长面积重点题型关于解方程组的题及答案关于南海问题
目 城市公交查询软件 系(部) 计算机科学与技术系 专业(班级) 2011软件工程(服务外包)8班 姓名 张宁宁
学号 2011022819 指导教师 段晓娟
起止日期 2012.12.10 — 2013.1.18
课程设计任务书
课程名称:服务外包软件工程实训?
设计题目:城市公交查询软件
已知技术参数和设计要求:
需求说明及要求
1.主要功能模块:
(1)用户管理
用户管理模块为用户提供用户信息管理的功能,包括用户注册、用户登陆、用户信息修改、用户密码修改、用户注销等功能。
用户注册:用户可以利用此功能完成注册,用户在界面输入注册信息,回车后,软件将注册信息保存到用户信息数据文件中。
用户登陆:用户可以利用此功能完成登陆,用户在界面输入登陆信息,回车后,软件验证登录信息,登陆成功后,软件进入主功能选择界面。
用户信息修改:用户可以利用此功能完成用户信息修改。
用户密码修改:用户可以利用此功能完成密码修改。
用户注销:用户可以利用此功能完成用户信息注销,某用户注销后,便不能再次登录。
(2)线路管理
线路管理模块为用户提供公交线路数据的管理和维护,包括线路添加、线路修改、线路删除等功能。
线路添加:用户可以利用此功能增加一条线路。
线路修改:用户可以利用此功能修改一条线路。
线路删除:用户可以利用此功能删除一条线路。
(3)站点管理
站点管理模块为用户提供公交站点数据的管理和维护,包括站点添加、站点修改、站点删除等功能。
站点添加:用户可以利用此功能增加一个站点。
站点修改:用户可以利用此功能修改一个站点。
站点删除:用户可以利用此功能删除一个站点。
(4)公交查询
公交查询模块为用户提供公交信息查询的功能,包括站点查询、线路查询、站站查询、最短距离查询、最少换乘查询等功能。
站点查询:用户可以利用此功能查看某个站点所停靠的公交线路。
线路查询:用户可以利用此功能查看某条线路所路经的公交站点。
站站查询:用户可以利用此功能查询出发地和目的地之间的所有公交乘车方案。
最短距离查询:用户可以利用此功能查询出发地和目的地之间最短距离的公交乘车方案。
最少换乘查询:用户可以利用此功能查询出发地和目的地之间最少换乘的公交乘车方案。
2
3.要求:界面友好,易于操作;数据结构运用灵活,编码规范,设计合理。
各阶段具体要求:
1、需求分析阶段
(1)写出需求分析(做什么)
(2)要求问题分析和功能定义准确
2、系统设计阶段
(1)根据问题描述,设计系统的结构
(3)完成数据结构中各个函数的定义
(4)用户界面的设计
(5)要求数据结构定义合理,类层次结构清晰
3、编码实现阶段
(1)完成代码编写
(2)要求代码编写规范
4、系统测试阶段
(1)完成功能调试
(2)要求完成必要的测试工作
5、交付实施阶段
(1)提交可正常执行的系统
(2)提交系统需求说明书、设计说明书、程序代码 (3)撰写实训报告书
(4)要求规范地书写文档
设计工作量:
(1)软件设计:完成问题陈述中所提到的所有需求功能。 (2)40课时。
工作
计划
项目进度计划表范例计划下载计划下载计划下载课程教学计划下载
:
安排两周时间进行课程设计,软件开发步骤如下,第一周完成1,3,第二周完
成4,8,
论文
政研论文下载论文大学下载论文大学下载关于长拳的论文浙大论文封面下载
同步进行;
1) 选定题目
2) 需求分析
3) 系统设计
4) 编码实现
5) 系统测试
6) 交付实施
指导教师签名: 日期: 教研室主任签名: 日期: 系主任签名: 日期:
3
长沙学院课程设计鉴定表 姓名 张宁宁 学号 2011022819 专业 软件工程 班级 8班 设计题目 城市公交查询软件 指导教师 段晓娟 指导教师意见:
评定等级: 教师签名: 日期: 答辩小组意见:
评定等级: 答辩小组长签名: 日期: 教研室意见:
教研室主任签名: 日期: 系(部)意见:
系主任签名: 日期: 说明 课程设计成绩分“优秀”、“良好”、“及格”、“不及格”四类;
4
摘要
随着我国公交系统的蓬勃发展,公交线路的数目和站点愈加完善,在给市民提供方便的同时,市民出行过程中队公交线路的查询往往不知所措。在此背景下,我们开发了这个应用
城市公交查询系统。本次设计,首先我们结合公交实际的运营情况以及乘客的实际程序----
需求,了解到在公交乘坐过程中主要包括了对线路、站名、站点区间以及线路图等几方面的查询,与此相结合开发对应的功能;因此在开发过程中建立了核心模块----查询模块:其中包括按线路查询、按站点查询、按两站点查询等;管理模块:其中包括公交站点管理和公交线路管理等功能。
关键字:公交查询系统软件
5
目录
摘要................................................................................................................................................... 5 1.引言............................................................................................................................................... 7
1.1 编写目的 ........................................................................................................................... 7
1.2 项目背景 ........................................................................................................................... 7
1.3 名词解释 ........................................................................................................................... 7 2.需求规约....................................................................................................................................... 8
2.1 业务描述 ........................................................................................................................... 8
2.2 功能需求 ........................................................................................................................... 8
2.2.1 用户管理功能模块 ............................................................................................... 8
2.3 性能需求 ......................................................................................................................... 10
2.4 数据需求 ......................................................................................................................... 11 3、软件总体设计 ........................................................................................................................... 12
3.1 软件框架设计 ................................................................................................................. 12
3.2 软件模块划分 ................................................................................................................. 12
3.3软件数据设计 .................................................................................................................. 13 4、软件详细设计 ........................................................................................................................... 14
4.1 软件模块划分 ................................................................................................................. 14
4.1.1 用户注册功能点 ................................................................................................. 14
4.1.2用户登陆功能模块详细设计: .......................................................................... 16
4.1.3用户查询功能模块详细设计: .......................................................................... 17
4(1.4用户修改功能模块详细设计: ........................................................................ 18
4.1.5用户注销功能模块详细设计: .......................................................................... 21 5.软件测试..................................................................................................................................... 23
5.1功能点性测试 .................................................................................................................. 23
5.1.1测试用例用户注册 .............................................................................................. 23
5.1.2测试用例用户登录 .............................................................................................. 24
5.1.3测试用例用户查询 .............................................................................................. 25
5.1.4测试用例用户修改 .............................................................................................. 25
5.1.5测试用例用户注销 .............................................................................................. 26
5.2.数据测试 ......................................................................................................................... 27
5.2.1用测试用例用户注册 .......................................................................................... 27
5.2.2用测试用例用户登录 .......................................................................................... 27
5.2.3测试用例用户查询 .............................................................................................. 28
5.2.4测试用例用户修改 .............................................................................................. 28
5.2.5测试用例用户注销 .............................................................................................. 28 6、总结........................................................................................................................................... 29 参考文献......................................................................................................................................... 30 附录................................................................................................................................................. 31
6
1.引言
1.1 编写目的
编写该文档的目的是为了让别人更了解我们所完成的城市公交查询系统的各个功能,同时并详细介绍了该功能是怎么、如何实现的。也可以清晰的表现出这个项目的优点和缺点。
该文档是介绍本项目的用户管理功能。主要操作有用户注册,用户登录,用户注销,信息查询,以及用户信息修改。该文档详细介绍了这几个功能的具体实现。 1.2 项目背景
城市公共交通运输以其覆盖面广、经济快捷的特点,目前,仍然是绝大多数出行者的首选方式,许多国家和城市都在积极地研究和发展本地的公共交通设施与服务,不断地对交通路线和人口的分布进行优化和合理调度。如果能提供一种服务,为市民特别是外来旅游、出差、就医等急需了解本地道路情况的人提供方便、快捷、经济、高效地利用公共线路的方案,将极大的方便他们出行和生活,同时减少不必要的交通流量,提高交通运输的效率和城市的地位。
湖南城交集团(虚拟化名)是一个具有数十年历史的交通管理公司。该集团长沙分公司希望通过信息化的手段,为长沙市民以及外来旅客提供理想的公共线路方案,特出资招商开发一套“城市公交查询软件”,该软件将为公司的日常运营提供用户管理、站点管理、线路管理等功能,同时为广大人民群众提供方便快捷的公交查询功能,为社会又回馈一份便捷。 1.3 名词解释
UserCopy();//声明复制函数 Start();//声明函数
Administrator();//声明管理员函数 Regist();//声明注册函数
Login();//声明登录函数 Menu();//声明主菜单函数
UserQuery();//声明查询函数 LoginAdministrator();//声明函数
UpdatePassword();//声明改密函数 UpdateName();//声明修改名字函数 UpdateAge();//声明修改年龄函数 UpdateAddr();//声明修改地址函数 UpdateInfo();//声明修改菜单选择函数 UserDelete();//声明注销用户函数 UserMaintain(); UserSave();//声明保存函数
2.需求规约
2.1 业务描述
鉴于目前中国的经济发展情况,中国人出行还是以公交车为主,所以每个城市的公交查询系统比较庞大发达。而且无法迅速,准确地查到所需要目的地以及各车次所经过站点的信息,带来了很大的不便。因此结合实际操作,开发出适合与公交查询的管理软件,不仅可以让管理员从现有的繁重的信息手工录入、查询中解放出来,提高工作效率。
随着公路规模的不断扩大,公交数量的急剧增加,有关公交管理的各种信息量也在不断的增长,面对庞大的信息量,就需要有公交信息管理系统来提高公交车管理工作的效率,通过这样的系统,我们可以做到信息的规范管理和快速查询,从而减少了工作量。 我国城市公交查询系统的发展还处于一个比较落后的水平,公交信息的完整性和准确性得不到保证,而且还没有专门的机构负责信息的发布和管理。乘客可以获得的公交信息很少,而且获取方式以常规手段为主。所以从国内的发展趋势来看,需要建立一个以高效的公交数据库为基础的、面向公交路线的在线公交车线路查询软件。
本软件主要分为两个模式,分别为普通用户模式和管理员模式。在普通用户模式下, 新用户可以进行注册,老用户就可直接登录进行下一步操作。其中在这个模式下,用户可以进行的操作有,用户信息查询,用户信息修改,用户注销,线路查询,以及站点查询,最短路径,最少站点的查询。在管理员模式下,管理员需登录然后进行下一步操作。其中,管理员可以对站点查询,修改,增加和删除,对线路进行增加,删除和查询。
2.2 功能需求
2.2.1 用户管理功能模块
1、用户注册功能点
表2.1 “用户注册”功能需求分析用例
功能点编号 Joy1-1
功能点名称 用户注册
角色 所有用户
功能说明 实现用户注册模块业务处理
事件流程 进入用户管理界面
进入注册,输入用户名、真实姓名、性别、年龄、籍贯,密码
判断此用户有无注册,年龄大小是否符合,性别填写是否正确
所有条件都符合,显示注册成功,并进入主功能模块界面,若不符合
则重新输入。
前置条件 无
后置条件 用户成功进入软件主功能处理界面
输入数据 用户、用户密码、用户真实姓名、用户性别、用户年龄,用户籍贯 输出数据 软件主功能处理界面
备注 无
8
2、用户登录功能点
表2.2 “用户登录”功能需求分析用例 功能点编号 Joy1-2
功能点名称 用户登录
角色 所有用户
功能说明 实现用户登录模块业务处理
事件流程 1、进入用户管理界面
2、进入用户登录,请输入用户名及密码。
3、判断该用户是否注册,密码是否正确。
4、若条件都符合则进入主功能处理界面。若不存在或密码错误,则提示:
用户不存在,请重新输入,重复以上操作。 前置条件 用户成功登录
后置条件 用户成功进入软件主功能处理界面 输入数据 用户名、用户登录密码
输出数据 软件主功能处理界面
备注 无
3、用户信息查询功能
表2.3 “用户信息查询”功能需求分析用例 功能点编号 Joy1-3
功能点名称 用户信息查询
角色 已经注册的用户
功能说明 实现用户信息查询模块业务处理 事件流程 选择用户信息查询功能
进入用户信息查询,显示该用户的信息。并输出选择界面,1、修改,2
返回
若选择1则进入修改功能界面;若选择2则返回主功能处理界面
前置条件 用户的成功登录
后置条件 用户成功进入查询界面
输入数据 1或2
输出数据 软件主功能处理界面、修改功能界面 备注 无
4、用户信息修改功能
表2.4 “用户信息修改”功能需求分析用例 功能点编号 Joy1-4
功能点名称 用户信息修改
角色 所有已经注册的用户
功能说明 实现用户信息修改模块业务处理 事件流程 进入用户管理界面
9
进入用户信息修改选择界面,选择更新的项目。如:真实姓名、年龄、地
址、密码。
根据用户选择的信息对信息进行修改,并输出选择:1、继续修改,2返
回
若选择1则进入用户信息选择界面;若选择2则进入主功能处理界面 前置条件 用户的成功登录
后置条件 用户成功成功修改信息
输入数据 用户登录名、用户登录密码
输出数据 软件主功能处理界面、用户信息选择修改界面
备注 无
5、用户信息注销功能
表2.5 “用户信息注销”功能需求分析用例
功能点编号 Joy1-5
功能点名称 用户注销
角色 所有用户
功能说明 实现用户注销模块业务处理
事件流程 1、进入管理员界面
2、选择用户注销功能,输入要注销的用户名。并输出请选择1确认注销
2返回
3、若选择1,则注销该用户;若选择2则返回管理员界面 前置条件 管理员的成功登陆
后置条件 用户成功注销
输入数据 用户名
输出数据 管理员界面
备注 无
2.3 性能需求
为了保证系统能够长期、安全、稳定、可靠、高效的运行,城市公交查询系统应该满足以下的性能需求。
系统处理的准确性和及时性
系统处理的准确性和及时性是系统的必要性能。在系统设计和开发过程中,要充分考虑系统当前和将来可能承受的工作量,使系统的处理能力和响应时间能够满足企业对信息处理的需求。
由于公交查询系统的查询功能对于整个系统的功能和性能完成举足轻重。作为系统的很多数据来源,而车票数量和时间又影响企业的决策活动,其准确性很大程度上决定了公交查询系统的成败。在系统开发过程中,必须采用一定的方法保证系统的准确性。
系统的开放性和系统的可扩充性
公交查询系统在开发过程中,应该充分考虑以后的可扩充性。例如网上查询的用户查询的需求也会不断的更新和完善。所有这些,都要求系统提供足够的手段进行功能的调整和扩充。而要实现这一点,应通过系统的开放性来完成,既系统应是一个开放系统,只要符合一
10
定的规范,可以简单的加入和减少系统的模块,配置系统的硬件。通过软件的修补、替换完成系统的升级和更新换代。
系统的易用性和易维护性
公交查询系统是直接面对使用人员的,而使用人员往往对计算机并不时非常熟悉。这就要求系统能够提供良好的用户接口,易用的人机交互界面。要实现这一点,就要求系统应该尽量使用用户熟悉的术语和中文信息的界面;针对用户可能出现的使用问题,要提供足够的在线帮助,缩短用户对系统熟悉的过程。
公交查询系统中涉及到的数据是公交公司的相当重要的信息,系统要提供方便的手段供系统维护人员进行数据的备份,日常的
安全管理
企业安全管理考核细则加油站安全管理机构环境和安全管理程序安全管理考核细则外来器械及植入物管理
,系统意外崩溃时数据的恢复等工作。
系统的标准性
系统在设计开发使51用aspx过程中都要涉及到很多计算机硬件、软件。所有这些都要符合主流国际、国家和行业标准。例如在开发中使用的操作系统、网络系统、开发工具都必须符合通用标准。如规范的数据库操纵界面、作为业界标准的TCP/IP网络
协议
离婚协议模板下载合伙人协议 下载渠道分销协议免费下载敬业协议下载授课协议下载
及ISO9002标准所要求的质量规范等;同时,在自主开发本系统时,要进行良好的设计工作,制订行之有效的软件工程规范,保证代码的易读性、可操作性和可移植性。
系统的先进性
目前计算系统的技术发展相当快,做为公交查询系统工程,应该保证系统在下个世纪仍旧是先进的,在系统的生命周期尽量做到系统的先进,充分完成企业信息处理的要求而不至于落后。这一方面通过系统的开放性和可扩充性,不断改善系统的功能完成。另一方面,在系统设计和开发的过程中,应在考虑成本的基础上尽量采用当前主流并先进且有良好发展前途的产品。
系统的响应速度
公交查询系统在日常处理中的响应速度为秒级,达到实时要求,以及时反馈信息。在进行统计分析时,根据所需数据量的不同而从秒级到分钟级,原则是保证操作人员不会因为速度问题而影响工作效率。
2.4 数据需求
数据在城市公交查询软件中占有非常重要的地位,数据结构设计的好坏将直接对应用系统的效率以及实现的效果产生影响。合理的数据结构设计可以提高数据存储的效率,保证数据的完整和一致。目前软件开发行业中,软件开发人员对软件数据的存储无非借助三个方法:内存数据存储、磁盘文件存储和数据库存储。
用户信息记录的数据项如下:
用户编号、用户登录名、用户登录密码、用户真实姓名、用户性别、用户年龄、用户籍贯。数据类型为char型与int型。
11
3、软件总体设计
3.1 软件框架设计
我们将设计为三个部分:业务处理、数据处理和存储处理。系统结构如图3-1所示。
业务处理部分实现系统与用户的接口,业务处理部分完成数据的输入和呈现,该部分包含软件需求的所有业务功能。
数据处理部分实现数据格式的转换,将用户界面获取的数据转换成相应的逻辑结构进行文件存储,或者将文件存储的数据转成相应的逻辑结构进行界面展示。软件产生的业务数据可以不做任何处理,直接以字符串记录的形式存储在磁盘上,但是如此一来对数据读取和操作的效率就会十分低下,为了解决这个问题,我们引入适当的数据结构进行数据处理,例如链表、二叉树、图等数据结构。
存储处理部分实现数据的存储,将所有数据以文件的形式存储。
主功能处理界面
业
务 处 用户管理界面 站点维护界面 线路维护界面 公交查询界面 理
数 据 处链表处理库 图处理库 理
存
储 处
理 文件处理库
图3.1系统结构图
图3-1系统结构
3.2 软件模块划分
该城市公交查询系统的用户管理功能分为两个大模块。其中一个为普通用户模块,供新
12
老用户使用。用户登录成功后可以进行用户信息修改,用户信息查询,用户登录以及用户注册。
框架结构图如下:
普通用户
管理员
用户注册 用户登录 用户信息查询用户信息修改 用户注销
呢
图3-2 软件模块划分
3.3软件数据设计
表3-3.1用户信息记录
数据项名 数据类型 长度 是否为空 唯一标识 说明
UserId char[] 5 否 是 用户编号
LoginName char[] 40 否 否 用户名
UserPassword char[] 6 否 否 用户登录密码
UserName char[] 40 否 否 用户真实姓名
UserSex int 2 否 否 用户性别
UserAge int 3 否 否 用户年龄
UserAddr char[] 40 否 否 用户籍贯
13
4、软件详细设计
4.1 软件模块划分
4.1.1 用户注册功能点
【功能点编号】
Joy1-1
【功能点名称】
用户注册
【功能点描述】
用户能通过本功能完成注册的操作
【实现函数/文件】
头文件user.c、实现函数void Regist()、void Menu()
【界面设计】
注册成功界面:
图4-1注册界面设计1 【输入数据】
用户名 char LoginName[L]、密码char UserPassword[6]、性别int UserSex、年龄int age、
char UserName[L]、char UserAddr[L]; 【输出数据】
主功能业务处理界面
14
【流程设计】
开始
是
系统是否已登录
您已属于会员 否 是
是否重新注册 输入用户的信息
否
是否提交注册信息
否
是
用户名是否已被注册
是 否
两次的密码是否一致
否 是
注册失败 数据的格式是否正确
否
是
注册结束 注册成功
图4-2用户注册流程图
15
4.1.2用户登陆功能模块详细设计:
【功能点编号】Joy1-2
【功能点名称】用户登录
【功能点描述】管理员通过本功能完成用户登录操作 【实现函数/文件】
头文件user.c、实现函数void UserLogin()、void Menu()
【界面设计】
登录成功界面
图4-3登录界面设计1 登录失败界面
图4-4登录界面设计2 【输入数据】
用户名 char UserName[L] ,密码:char UserPassword[6]
【输出数据】
用户管理界面
16
【流程设计】
开始
是 系统是否已登录
系统已登录 否
是否重新注册 输入用户名,密码
否 用户名、密码是否正确
是
登录失败 登录成功
登录结束
图4-5登录界面流程图
4.1.3用户查询功能模块详细设计: 【功能名称】
用户查询
【功能描述】
通过此功能能够实现用户查询功能
【实现函数】
头文件:user.c 实现函数:void Menu() ;void UserQuery();
void UpdateInfo();//声明修改菜单选择函数 【界面设计】
查询功能界面
17
图4-6查询界面设计 【输入数据】
数据1或2
【输出数据】
用户名 p->UserName 年龄:p->UserAge 性别:p->UserSex 地址:p->UserAddr
【流程设计】
开始
否
系统是否已登录
是 对不起,您还没登录
显示用户的信息
查询失败 查询成功
查询结束
图4-7用户信息查询流程图 4(1.4用户修改功能模块详细设计: 【功能名称】
用户修改功能模块
【功能描述】
18
通过此功能能够实现用户修改功能
【实现函数/头文件】
头文件:user.c 实现函数void UserQuery();//声明查询函数 void LoginAdministrator();//声明函数 UpdatePassword();//声明改密函数 void UpdateName();//声明修改名字函数void UpdateAge();//声明修改年龄函数 void UpdateAddr();//声明修改地址函数void UpdateInfo();//声明修改菜单选择函数 【界面设计】
用户信息修改界面
图4-8修改界面设计1
图4-9修改界面设计2
图4-10修改界面设计3
19
【输入数据】
用户名 char NewName[40]、密码int NewPassword、性别char NewSex[40]、年龄int NewAge、
char NewAddr[40]
【输出数据】
用户名 char NewName[40]、密码int NewPassword、性别char NewSex[40]、年龄int NewAge、
char NewAddr[40]
【流程设计】
开始
否
系统是否已登录
是
您还没登录 显示用户的信息 是
是否重新修改
否 重新输入用户信息
是否提交修改信息
否
是
两次的密码是否一致
否
是
数据的格式是否正确
否
修改失败 修改成功
修改结束
20
4.1.5用户注销功能模块详细设计:
【用户名称】
用户注销
【功能描述】
通过此功能能够实现用户注销功能
【实现函数】
头文件:user.c void UserDelete();//声明注销用户函数 【界面设计】
注销界面设计:
图4-12注销界面设计 【输入数据】
用户名:char User name[40]; 【输出数据】
管理员界面
21
【流程设计】
开始
否 系统是否是管理员登录
是 管理员权限
是 输入要删除的用户名
是否重新删除
否
输入的用户名是否存在
否
是
删除失败 删除成功
删除结束
-13用户注销流程图 图4
22
5.软件测试 5.1功能点性测试
5.1.1测试用例用户注册
【覆盖功能点】
用户注册
【测试输入】
用户名、密码、性别、年龄、用户籍贯
【测试输出】
若成功注册,则输出主功能处理界面;若注册失败,则重新输入 【测试结论】
注册成功界面:
图5-1注册界面1 注册失败界面:
图5-2注册界面2
23
5.1.2测试用例用户登录
【覆盖功能点】
用户登录
【测试输入】
用户名、密码
【测试输出】
若用户名密码正确,则输出主功能业务处理界面;若用户名或密码错误,则重新输入
【测试结论】
登录成功界面
图5-3登录界面1
登录失败界面
图5-4登录界面2
24
5.1.3测试用例用户查询 【覆盖功能点】
用户查询
【测试输入】
用户名
【测试输出】
用户查询的信息
【测试结论】
查询成功界面
图5-5查询界面
5.1.4测试用例用户修改 【覆盖功能点】
用户修改
【测试输入】
用户真实姓名、密码、性别、年龄、地址
【测试输出】
用户修改后的信息
【测试结论】
用户信息修改界面
25
图5-6用户信息修改1
图5-7用户信息修改2
图5-8用户信息修改3
图5-9用户信息修改4 5.1.5测试用例用户注销
【覆盖功能点】
用户注销
【测试输入】
用户名
【测试输出】
若该用户存在,则成功注销,输出管理员界面;若不存在,则重新输入
【测试结论】
26
注销成功界面
图5-10注销用户1 注销失败界面:
图5-10注销用户2 5.2.数据测试
5.2.1用测试用例用户注册
【覆盖功能点】
用户注册
【测试输入】
用户名:znn 密码:2 性别:2 年龄:19 地址:2 【测试输出】
恭喜你,注册成功~
【测试结论】
提示“注册成功”表示注册成功~并核对注册信息。提示“注册失败”,表示注册失败,原
因可能用户名已存在、两次密码输入错误、数据格式输入错误。 5.2.2用测试用例用户登录
【覆盖功能点】
用户登录
【测试输入】
用户名:znn 密码:2
【测试输出】
27
登录失败、登录成功,用户名已存在
【测试结果】
提示“登录成功”表示登录成功~成功跳转到用户管理界面,提示“登录失败”,表示注册
失败,原因可能用户名已存在。
5.2.3测试用例用户查询
【覆盖功能点】
用户查询
【测试输入】
用户名
【测试输出】
查询失败、查询成功,未登录
【测试结论】
提示“查询成功”表示查询成功~显示查询的内容。提示“查询失败”,表示查询失败,原
因可能没登陆。
5.2.4测试用例用户修改
【覆盖功能点】
用户修改
【测试输入】
用户名、密码、性别、年龄、联系方式
【测试输出】
用户名、密码、性别、年龄、联系方式、修改成功、修改失败、格式输入错误、两次密码输
入错误
【测试结论】
提示“修改成功”表示查询成功~显示修改的内容。提示“修改失败”,表示修改失败,原
因格式输入错误、两次密码输入错误。
5.2.5测试用例用户注销
【覆盖功能点】
用户注销
【测试输入】
用户名
【测试输出】
若用户名不存在,则注销失败;若存在,则成功注销。 【测试结论】
提示“注销成功”表示注销成功~公交系统不存在该用户的信息。提示“注销失败”,表示
注销失败,原因未管理员登录、用户名不存在
28
6、总结
这次的城市公交查询系统软件实训跟以往的实训有些不同。这次是分工合作,每个人做一部分,然后由组长把它组合起来。
这次实训总共分为五块,用户管理、站点查询、站点增加、数据的处理与存储、还有界面以及框架设计。而我负责的是用户管理这一块,相对于其它来说,这是比较容易完成的吧。 用户管理又分为用户注册、用户登录、用户注销、用户查询、以及用户信息修改。对于这些还是比较熟悉的,因为在去年的ATM实训中,这个都有做过,所以,要完成这些,对我来说,难度还是不大。
当然,在编写代码的时候还是遇到了一些问题,自己问了同组的组员,很快问题得到了解决。总的来说,这次让我感触最深的便是一种团队精神吧。这是在从前的实训中,从未有过的感觉。在实训的这些日子里,我们组的几个人总是坐在一起,互相讨论,互相交流,那种感觉真的很美好,也让我学到了很多。
当然,也有遗憾和不足,就是对于其他同学做的那部分,自己还不是特别的了解,也没有花太多的心思去了解,恰好那些又是跟这学期学的知识内容息息相关的。我想,回家了有空还是要把其他模块看一下,以弥补那一点点的遗憾吧。
刚开始,本来以为我们这组会是最先答辩的,后来,由于我们组做站点的那位同学没做完,不得不等他,因为要全部组合在一起才能答辩。后来,我们组的另外两个同学还把他反锁在寝室,要他写代码,说是没做出来就不准出来。
这次的实训确实感触很深,因为都努力的付出了吧。每个人都最少熬了两个通宵,不断的改错,不断的寻找漏洞,以求达到最好。我也深深地被我们的组员们感动着,为那种团结、进取的精神感动着。
最后,对我们组的所有成员还有我们的实训老师说声:谢谢,辛苦了~
29
参考文献
[1] 严蔚敏,吴伟民,数据结构(C语言版)。清华大学出版社。1997年四月份(连续出版物:ISBN978-7-302-02368-5。1-321页)
[2] 李根强,数据结构(C++版)(第二版)习题解答及实训指导。中国水利水电出版社。2009年(连续出版物:ISBN978-7-5084-6559-3。1-246页)
[3] 谭浩强,C程序设计。清华大学出版社。2005年(2007年重印)(连续出版物:ISBN978-7-302-10853-5。1-363页)
[4] 谭浩强,C程序设计题解与上机指导。清华大学出版社。2005年(2007年重印)(连续出版物:ISBN978-7-302-11217-4。1-250页
30
附录 #define STU struct customer//宏定义
#define LEN sizeof(struct customer)//宏定义 #define L 40
struct customer//定义结构体
{
char loginName[L];//登录名
char userName[L];//真实姓名
char userId[5];//用户编号
int userSex;//性别
char userAddr[L];//地址
char password[6];//密码
int userAge;//年龄
struct customer *next; };
STU *customer();
STU *compare(char IDcard1[L]);
STU *Pass();
STU *p=NULL;
STU *head=NULL;//定义头指针,并赋为空 void UserCopy();//声明复制函数
void Start();//声明函数
void Administrator();//声明管理员函数
void Regist();//声明注册函数
void Login();//声明登录函数
void Menu();//声明主菜单函数
void UserQuery();//声明查询函数
void LoginAdministrator();//声明函数
void UpdatePassword();//声明改密函数
void UpdateName();//声明修改名字函数 void UpdateAge();//声明修改年龄函数
void UpdateAddr();//声明修改地址函数
void UpdateInfo();//声明修改菜单选择函数 void UserDelete();//声明注销用户函数
void UserMaintain(); void UserSave();//声明保存函数
void RoadMaintain(MGraph G);
void StationMaintain(MGraph G);
void Skip();//声明跳转函数
void Help();
void Again();//声明返回函数
31
void EXITSYSTEM();//声明退出函数
void speedDown();//声明减速函数
/******************************************************************************
******/
//从文件中复制出信息
void UserCopy()
{
FILE *fp;//定义文件类型的指针
STU *p1=NULL,*p2=NULL;//定义结构体类型的指针
if((fp=fopen("customer.txt","r"))==NULL)
{
printf("\n\n\n\n\n\n\t\t\t当前系统为空,请您先注册~谢谢合作~\n");
speedDown();//延长时间,是界面变得更美观
return;
}
head=(STU *)malloc(LEN);//申请一个长度为“LEN”的空间
p2=head;//把地址赋给p2
while((!feof(fp))&&(p2->next!=NULL))//直到文件末尾并且p2所指的下一节点不为空时
{
p1=(STU *)malloc(LEN);//申请一个长度为“LEN”的空间
p2->next=p1;
fread(p1,LEN,1,fp);//读出一个长度为LEN的数据
p2=p1;
}
fclose(fp);//关闭文件
}
/******************************************************************************
******/
//开始界面
void Start()
{
system("cls");
char ch;
printf("\n\n @@欢迎您进入0.0公交查询系统@@\n");
printf("
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&\n");
printf(" & 1.注册
&\n");
printf(" &
&\n");
printf(" &
&\n");
32
printf(" & 2.登录 &\n");
printf(" &
&\n");
printf(" &
&\n");
printf(" & 3.管理员 &\n");
printf(" &
&\n");
printf(" &
&\n");
printf(" & 0.退出系统 &\n");
printf(" &
&\n");
printf(" &
&\n");
printf("
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&\n");
printf(" 请输入数字:0~3:\n");
printf(" ");
scanf("%s",&ch);
switch(ch)
{
case '1':Regist();break;
case '2':Login();break;
case '3':LoginAdministrator();break;
case '0':EXITSYSTEM();break;
default:printf("您的输入有误!请重新输入!\n");
speedDown();//延长时间,是界面变得更美观
system("cls");//清屏
Start();
}
}
/******************************************************************************
******/
//比对管理员密码
void LoginAdministrator()
{
int n;
char secret2[L]="";
system("cls");//清屏
printf("\n\n\n\n\n\t\t\t请输入管理员指令:");
for (n=0;n
next)
{
for(p1=head->next;p1!=NULL;p1=p1->next)
{
if(p1->next==DElete)
{
DElete->next=p2;
p1->next=p2;
printf("\n\n\n\n\n\n\n\t\t\t注销成功~返回中~");
system("pause");
system("cls");
printf("\n\n\n\n\n\n\n\t\t\t返回中~");
Skip();//调用跳转函数
speedDown();//延长时间,是界面变得更美观
Start();break;
}
}
}
else
{
head->next=NULL;
system("cls");//清屏
printf("\n\n\n\n\n\n\n\t\t\t返回中~");
Skip();//调用跳转函数
speedDown();//延长时间,是界面变得更美观
Start();break;
}
case '2':Start();break;
default:printf("\t\t\t您的输入有误!请重新输入!\n");
speedDown();//延长时间,是界面变得更美观
system("cls");
UserDelete();
}
}
else
{
printf("\n\n\n\n\t\t\t该用户不存在~\n\t\t\t");
Skip();//调用跳转函数
36
speedDown();//延长时间,是界面变得更美观
UserDelete();
}
}
/******************************************************************************
******/
//注册函数
void Regist()
{
system("cls");//清屏
FILE *fp;
char a;
long record=1;
if((p=customer())==NULL)
{
printf("\n\n\n\n\n\t\t\t对不起~注册失败,请重新注册!\n");
printf("\n\n\n\t\t\t1.继续----------2.返回\n\n\t\t\t");
scanf("%s",&a);
switch(a)
{
case '1':Regist();break;
case '2':Start();break;
default:printf("\n\n\n\t\t\t输入有误,返回上一层~");
Skip();//调用跳转函数
speedDown();//延长时间,是界面变得更美观
Start();
}
}
if((fp=fopen("record.txt","r"))!=NULL)
{
fp=fopen("record.txt","r");
fscanf(fp,"%ld",&record);
record++;
fclose(fp);
}
printf("\n\n\n\n\n\t\t恭喜您~注册成功~您是第 【%ld】 位注册用户~
\n",record);
fp=fopen("record.txt","w");
fprintf(fp,"%ld",record);
fclose(fp);
speedDown();//延长时间,是界面变得更美观
Menu();
}
STU *customer()
37
{
system("cls");//清屏
STU
*p1=NULL,*p2=NULL,*p3=NULL,*i=NULL,*j=NULL,*k=NULL,*l=NULL;//定义结构体类型的指针并赋值为空
p1=(STU *)malloc(LEN);
printf("\t\t\t请输入您的用户名:\n\t\t\t\t");
scanf("%s",p1->loginName);
printf("\t\t\t请输入真实姓名:\n\t\t\t\t");
scanf("%s",p1->userName);
printf("\t\t\t请输入您的年龄:\n\t\t\t\t");
scanf("%d",&(p1->userAge));
printf("\t\t\t请输入您的性别(男:请输入1 女:请输入2):\n\t\t\t\t");
scanf("%d",&(p1->userSex));
printf("\t\t\t请输入你的住址:\n\t\t\t\t");
scanf("%s",p1->userAddr);
if(head==NULL)//当head为空时
{
if((0userAge)&&(p1->userAge<200)&&((p1->userSex==1)||(p1->userSex==2)))
{
printf("\t\t\t请输入密码:\n\t\t\t");
i=Pass();
strcpy(p1->password,i->password);
printf("\n\t\t\t请再次输入密码:\n\t\t\t");
j=Pass();
if(strcmp(p1->password,j->password)==0)
{
p1->next=NULL;
if(head==NULL)
{
head=(STU *)malloc(LEN);
head->next=p1;
}
else
{
for(p2=head;p2->next!=NULL;p2=p2->next);
p2->next=p1;
}
}
else
{
//system("cls");//清屏
printf("\n\n\n\n\n\t\t两次密码输入不一致~请重新输入~
38
\n\n\t\t");
system("pause");
Skip();//调用跳转函数
speedDown();//延长时间,是界面变得更美观
Regist();
}
}
else
{
printf("信息输入有误~请重新输入~\n");
system("pause");
Skip();//调用跳转函数
speedDown();//延长时间,是界面变得更美观
Regist();
}
}
else//当head不为空时
{
for(p3=head->next;p3!=NULL;p3=p3->next)
{
if(strcmp(p3->loginName,p1->loginName)==0)
{
//system("cls");//清屏
printf("\n\n\n\n\n\t\t\t该用户已注册~\n");
system("pause");
Skip();//调用跳转函数
speedDown();//延长时间,是界面变得更美观
Regist();break;
}
}
if((0userAge)&&(p1->userAge<200)&&((p1->userSex==1)||(p1->userSex==2)))
{
printf("\t\t\t请输入密码:\n\t\t\t");
k=Pass();
strcpy(p1->password,k->password);
printf("\n\t\t\t请再次输入密码:\n\t\t\t");
l=Pass();
if(strcmp(p1->password,l->password)==0)
{
p1->next=NULL;
if(head==NULL)
{
head=(STU *)malloc(LEN);
39
head->next=p1;
}
else
{
for(p2=head;p2->next!=NULL;p2=p2->next);
p2->next=p1;
}
}
else
{
//system("cls");//清屏
printf("\n\n\n\n\n\t\t\t两次密码输入不一致~请重新输入~\n\n");
system("pause");
Skip();//调用跳转函数
speedDown();//延长时间,是界面变得更美观
Regist();
}
}
else
{
printf("\n\n\t\t\t信息输入有误~请重新输入~\n");
system("pause");
Skip();//调用跳转函数
speedDown();//延长时间,是界面变得更美观
Regist();
}
}
return p1;
}
/******************************************************************************
******/
//登录函数
void Login()
{
system("cls");//清屏
STU *check=NULL,*j=NULL;//定义结构体类型的指针并赋值为空
char loginName1[L];
printf("\n\t\t\t请输入您的用户名:\n\t\t\t\t");
scanf("%s",loginName1);
if((check=compare(loginName1))==NULL)
{
printf("\n\t\t\t该用户不存在!\n");
char a;
printf("\n\n\n\t\t\t1.继续----------2.返回\n\n\t\t\t\t");
40
scanf("%s",&a);
switch(a)
{
case '1':Login();break;
case '2':Start();break;
default:printf("\n\n\n\t\t\t输入有误,返回上一层~");
Skip();//调用跳转函数
speedDown();//延长时间,是界面变得更美观
Start();
}
}
else
{
printf("\n\n\t\t\t请输入密码:\n\t\t\t\t");
j=Pass();
if(strcmp(j->password,check->password)!=0)
{
printf("\n\n\n\t\t\t密码错误!请核对再在输入~\n");
char a;
printf("\n\n\n\t\t\t1.继续----------2.返回\n\n\t\t\t");
scanf("%s",&a);
switch(a)
{
case '1':Login();break;
case '2':Start();break;
default:printf("\n\n\n\t\t\t输入有误,返回上一层~");
Skip();//调用跳转函数
speedDown();//延长时间,是界面变得更美观
Start();
}
}
else
{
//system("cls");//清屏
printf("\n\n\n\n\t\t\t 登录成功~\t尊敬的%s,您好~\n\n\n\t\t\t",check->loginName);
system("pause");
p=check;
speedDown();//延长时间,是界面变得更美观
Menu();
}
}
}
//比较账号函数
41
STU *compare(char loginName1[L])
{
STU *compareloginName=NULL;
if(head==NULL)return NULL;
for(compareloginName=head->next;compareloginName!=NULL;compareloginName=compareloginName->next)
{
if(strcmp(compareloginName->loginName,loginName1)==0)
{
return(compareloginName);
}
}
return NULL;
}
/******************************************************************************
******/
//主菜单栏
void Menu()
{
char ch;
MGraph G;
CreateFUDN(&G);
system("cls");//清屏
printf(" &&&尊敬的用户,欢迎您使用0.0公交查询
系统~&&&&\n");
printf(" &--------------------------------------------&\n");
printf(" & 1.用户管理 & 2.站点查
询 &\n");
printf(" & & &\n");
printf(" & & &\n");
printf(" & 3.线路查询 & 4.最短程
(权值) &\n");
printf(" & & &\n");
printf(" & & &\n");
printf(" & 5.最短程(站点) & 6.帮助说
明 &\n");
printf(" & & &\n");
printf("
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&\n");
42
printf(" &
&\n");
printf(" & 0.退出系统 &\n");
printf(" &
&\n");
printf(" &--------------------------------------------&\n");
printf(" &&&&&&&&&&&& 本系统开发人员:
&&&&&&&&&&&&\n");
printf(" &----罗思思、张宁宁、曾鹏、郑新民、李文
彬&---&\n");
printf(" 请输入数字:0~6:\n");
printf(" ");
scanf("\t\t\t%s",&ch);
switch(ch)
{
case '1':UserMaintain();break;
case '2':QueryStation(G);system("pause");Menu();break;
case '3':QueryLine(G);system("pause");Menu();break;
case '4':MinRoadnmQuery(G);system("pause");Menu();break;
case '5':MinRoadQuery1(G);system("pause");Menu();break;
case '6':Help();system("pause");Menu();break;
case '0':EXITSYSTEM();break;
default:printf("您的输入有误!请2秒钟后重新输入!\n");
speedDown();//延长时间,是界面变得更美观
system("cls");//清屏
Menu();
}
}
/******************************************************************************
******/
//输入密码函数
STU *Pass()
{
int n;
char secret2[L]="";
STU *Pas=NULL;//定义结构体类型的指针并赋值为空
Pas=(STU *)malloc(LEN);
for (n=0;npassword,secret2);
return Pas;
}
/******************************************************************************
******/
//查询用户信息函数
void UserQuery()
{
system("cls");
char a;
printf("\n\t\t\t尊敬的%s您好~以下是你的个人信息\n\n\n",p->loginName);
printf("\t\t\t姓名:%s\n\n",p->userName);
printf("\t\t\t年龄:%d\n\n",p->userAge);
printf("\t\t\t性别:");
if(p->userSex==1)
{
printf("男");
}
else
{
printf("女");
}
printf("\n\n\t\t\t地址:%s\n\n",p->userAddr);
printf("\t\t\t请继续选择:\n\n");
printf("\t\t\t1.修改----------2.返回\n\n\t\t\t");
scanf("%s",&a);
switch(a)
{
case '1':UpdateInfo();break;
case '2':Menu();break;
default:printf("\t\t\t对不起,输入有误");
Skip();//调用跳转函数
speedDown();//延长时间,是界面变得更美观
Menu();
}
}
/******************************************************************************
******/
//修改选择菜单函数
void UpdateInfo()
{
system("cls");//清屏
char ch;
44
printf("\n 请选择您要修改的信息\n");
printf(" &--------------------------------------------&\n");
printf(" & 1.真实姓名 & 2.修改年
龄 &\n");
printf(" & & &\n");
printf(" & & &\n");
printf(" & 3.修改密码 & 4.修改地
址 &\n");
printf(" & & &\n");
printf(" & & &\n");
printf(" & 5.返回 & 0.退出系
统 &\n");
printf(" & & &\n");
printf("
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&\n");
printf(" &--------------------------------------------&\n");
printf(" 请输入数字:0~5:\n");
printf(" ");
scanf("%s",&ch);
switch(ch)
{
case '1':UpdateName();break;
case '2':UpdateAge();break;
case '3':UpdatePassword();break;
case '4':UpdateAddr();break;
case '5':UserMaintain();break;
case '0':EXITSYSTEM();break;
default:printf("您的输入有误!请重新输入!\n");
speedDown();//延长时间,是界面变得更美观
system("cls");//清屏
UpdateInfo();
}
}
/************************************************************************************/
//修改姓名函数
void UpdateName()
{
45
system("cls");
char a;
char Newname[L];
printf("\n\n\n\t\t\t您的姓名为:%s",p->userName);
printf("\n\n\n\t\t\t请输入新姓名:");
scanf("%s",Newname);
strcpy(p->userName,Newname); //用新的变量覆盖节点中的变量
printf("\n\n\t\t\t恭喜你~姓名修改成功~");
printf("\n\n\n\t\t\t1.继续修改----------2.返回\n\n\t\t\t");
scanf("%s",&a);
switch(a)
{
case '1':UpdateInfo();break;
case '2':UserMaintain();break;
default:printf("\n\n\n\t\t\t输入有误");
Skip();//调用跳转函数
speedDown();//延长时间,是界面变得更美观
Menu();
}
}
/******************************************************************************
******/
//修改年龄函数
void UpdateAge() {
system("cls");
char a;
int Newage;
printf("\n\n\n\t\t\t您的当前年龄为:%d",p->userAge);
printf("\n\n\n\t\t\t输入新年龄:");
scanf("%d",&Newage);
p->userAge=Newage; //用新的变量覆盖节点中的变量
printf("\n\n\t\t\t恭喜你~年龄修改成功~");
printf("\n\n\n\t\t\t1.继续修改----------2.返回\n\n\t\t\t");
scanf("%s",&a);
switch(a)
{
case '1':UpdateInfo();break;
case '2':UserMaintain();break;
default:printf("\n\n\n\t\t\t输入有误");
Skip();//调用跳转函数
speedDown();//延长时间,是界面变得更美观
Menu();
}
46
}
/******************************************************************************
******/
//修改密码函数
void UpdatePassword()
{
char a;
STU *i=NULL,*j=NULL;//定义结构体类型的指针并赋值为空
system("cls");//清屏
printf("\n\n\n\t\t\t请输入旧密码:\n\t\t\t");
i=Pass();
printf("\n\t\t\t");
if(strcmp(i->password,p->password)!=0)
{
printf("旧密码输入错误~请重新输入~");
Skip();//调用跳转函数
speedDown();//延长时间,是界面变得更美观
UpdatePassword();
}
printf("\n\n\t\t\t请输入新密码:\n\t\t\t");
j=Pass();
strcpy(p->password,j->password);
printf("\n\n\n\t\t\t恭喜你~密码修改成功~");
printf("\n\n\n\t\t\t1.继续修改----------2.返回\n\n\t\t\t");
scanf("%s",&a);
switch(a)
{
case '1':UpdateInfo();break;
case '2':UserMaintain();break;
default:printf("\n\n\n\t\t\t输入有误");
Skip();//调用跳转函数
speedDown();//延长时间,是界面变得更美观
Menu();
}
}
/******************************************************************************
******/
//修改地址函数
void UpdateAddr() {
system("cls");
char a;
char Newaddr[L];
printf("\n\n\n\t\t\t您的当前地址为:%s",p->userAddr);
47
printf("\n\n\n\t\t\t输入新地址:");
scanf("%s",Newaddr);
strcpy(p->userAddr,Newaddr); //用新的变量覆盖节点中的变量
printf("\n\n\t\t\t恭喜你~地址修改成功~");
printf("\n\n\n\t\t\t1.继续修改----------2.返回\n\n\t\t\t");
scanf("%s",&a);
switch(a)
{
case '1':UpdateInfo();break;
case '2':UserMaintain();break;
default:printf("\n\n\n\t\t\t输入有误");
Skip();//调用跳转函数
speedDown();//延长时间,是界面变得更美观
Menu();
}
}
/******************************************************************************
******/
void StationMaintain(MGraph G)
{
char ch;
system("cls");//清屏
printf("\n\n @@欢迎使用0.0公交
查询系统@@\n");
printf("
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&\n");
printf(" & 1.站点添加 &\n");
printf(" &
&\n");
printf(" & 2.站点删除 &\n");
printf(" &
&\n");
printf(" & 3.站点修改 &\n");
printf(" &
&\n");
printf(" & 4.返回管理员界面 &\n");
printf(" &
&\n");
printf(" & 5.退出管理员操作 &\n");
printf(" &
48
&\n");
printf(" & 0.退出系统 &\n");
printf("
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&\n");
printf(" 请输入数字:0~5:\n");
printf(" ");
scanf("%s",&ch);
switch(ch)
{
case '1':AddStation(&G);system("pause");StationMaintain(G);break;
case '2':DeleteStation(&G);system("pause");StationMaintain(G);break;
case '3':UpdateStation(&G);system("pause");StationMaintain(G);break;
case '4':Administrator();break;
case '5':Start();break;
case '0':EXITSYSTEM();break;
default:printf("您的输入有误!请重新输入!\n");
speedDown();//延长时间,是界面变得更美观
system("cls");//清屏
StationMaintain(G);
}
}
/******************************************************************************
******/
void RoadMaintain(MGraph G)
{
char ch;
system("cls");//清屏
printf("\n\n @@欢迎使用0.0公交
查询系统@@\n");
printf("
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&\n");
printf(" & 1.线路添加 &\n");
printf(" &
&\n");
printf(" & 2.线路删除 &\n");
printf(" &
&\n");
printf(" & 3.线路修改 &\n");
printf(" &
&\n");
printf(" & 4.返回管理员界面
49
&\n");
printf(" & &\n");
printf(" & 5.退出管理员操作 &\n");
printf(" & &\n");
printf(" & 0.退出系统 &\n");
printf("
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&\n");
printf(" 请输入数字:0~5:\n");
printf(" ");
scanf("%s",&ch);
switch(ch)
{
case '1':AddLine(&G);system("pause");RoadMaintain(G);break;
case '2':DeleteLine(&G);system("pause");RoadMaintain(G);break;
case '3':UpdateLine(&G);system("pause");RoadMaintain(G);break;
case '4':Administrator();break;
case '5':Start();break;
case '0':EXITSYSTEM();break;
default:printf("您的输入有误!请重新输入!\n");
speedDown();//延长时间,是界面变得更美观
system("cls");//清屏
RoadMaintain(G);
}
}
/*****************************************************************************/
void UserMaintain()
{
char ch;
system("cls");//清屏
printf("\n\n @@欢迎使用0.0公交
查询系统@@\n");
printf("
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&\n");
printf(" & 1.我的个人信息 &\n");
printf(" & &\n");
printf(" & 2.修改个人信息 &\n");
printf(" &
50
&\n");
printf(" & 3.返回主界面 &\n");
printf(" &
&\n");
printf(" & 0.退出系统
&\n");
printf(" &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&\n");
printf(" 请输入数字:0~3:\n");
printf(" ");
scanf("%s",&ch);
switch(ch)
{
case '1':UserQuery();break;
case '2':UpdateInfo();break;
case '3':Menu();break;
case '0':EXITSYSTEM();break;
default:printf("您的输入有误!请重新输入!\n");
speedDown();//延长时间,是界面变得更美观
system("cls");//清屏
Administrator();
}
}
/*****************************************************************************/
//将信息写入文件
void UserSave()
{
STU *Saver=NULL;//定义结构体类型的指针并赋值为空
FILE *fp;//定义文件类型的指针
if(head==NULL)
{
printf("\n\n\n\n\n\t\t\t无可储存信息~");
return;
}
else
{
Saver=head->next;//传值
}
if((fp=fopen("customer.txt","w"))==NULL)
{
printf("\n\n\t\t文件打不开!");
return;
}
else
51
{
while(Saver!=NULL)
{
fwrite(Saver,LEN,1,fp);//写入文件
Saver=Saver->next;
}
}
fclose(fp);//关闭文件
}
/*****************************************************************************/
//自动跳转函数
void Skip()
{
printf("\n\n\t\t\t2秒钟后自动跳转~请稍等......."); }
/*****************************************************************************/
//返回主菜单函数
void Again()
{
system("cls");//清屏
printf("\n\n\n\n\n\n\n\t\t\t返回主菜单中~");
Skip();
speedDown();//延长时间,是界面变得更美观
Menu();
}
/****************************************************************************/
//退出函数
void EXITSYSTEM()
{
system("cls");//清屏
UserSave();
printf("\n\n\n\n\n\n\n\n\t\t\t正在退出系统~请稍侯......");
speedDown();//延长时间,是界面变得更美观
exit(0);
}
/****************************************************************************/
//帮助函数
void Help()
{
system("cls");//清屏
printf("\n\n\n\n\n\n\t\t\t请您按提示操作~否则后果自负~"); }
/******************************************************************************
******/
52
//减速函数
void speedDown()
{
int i;
for(i=0;i<500000000;i++); }
/******************************************************************************
******/
53