地铁收费管理系统.docx

上传人:b****1 文档编号:2103218 上传时间:2022-10-26 格式:DOCX 页数:18 大小:63.25KB
下载 相关 举报
地铁收费管理系统.docx_第1页
第1页 / 共18页
地铁收费管理系统.docx_第2页
第2页 / 共18页
地铁收费管理系统.docx_第3页
第3页 / 共18页
地铁收费管理系统.docx_第4页
第4页 / 共18页
地铁收费管理系统.docx_第5页
第5页 / 共18页
点击查看更多>>
下载资源
资源描述

地铁收费管理系统.docx

《地铁收费管理系统.docx》由会员分享,可在线阅读,更多相关《地铁收费管理系统.docx(18页珍藏版)》请在冰豆网上搜索。

地铁收费管理系统.docx

地铁收费管理系统

地铁收费管理系统

考试提醒

请仔细阅读规格文档,理解规格文档估计需要花费10~30分钟来理解,请务必看清

楚要求再动手,试题包括规格描述和代码框架。

C/C++编译环境统一为VisualC++6.0版本。

如果你喜欢并熟悉SourceInsight或其它工具,也可以使用SourceInsight或其它工具进行开发,但考生必须保证提交的代码要在指定编译环境下编译通过,否则无法阅卷。

如果考题与日常工作/生活接近,请考生以规格为准,不要类比相似案例。

出于自动化测试的需要,程序中不要使用原始的I/O输入输出(键盘输入、屏幕输出)作为正式输入输出,我们会提供基于Socket的输入输出API接口,考生必须使用

SocketAPI进行正式输入输出操作。

调试输出的方式不受此限制。

考试的工程已经提供Socket通信功能,并提供输入/输出的API,考生不需要实现。

1总体说明

考生需要模拟实现一个简单的地铁收费系统,实现地铁交通卡或单程票的扣费、余额提示、日志记录和日志查询等功能。

1.1相邻站点间里程表

系统预置有一张“相邻站点间里程表”,作为计算基本票价的依据。

其结构和内容如下:

站点1

站点2

里程(千米)

站点名

站点名

系统已设置值

站点名

站点名

系统已设置值

站点名

站点名

系统已设置值

OOOOOO

OOOOOO

OOOOOO

站点名

站点名

系统已设置值

备注:

只考虑1条地铁线路,站点关系示意:

站点---站点---站点---。

---站点---站点,无分叉,无环路,任何2站点之间的路径是唯一的,不存在多条路径的情况。

该线路上地铁双向运行。

乘客可以从任何站点进站,也可以从任何站点出站。

表中无重复记录,一对相邻站点在表中只存在一条记录,比如:

S2与S4之间的记

录只有:

S2->S4或S4->S2其中的任意1条,而不会同时存在2条。

考生可以直接使用考试系统提供的根据该表计算任意2站点间最短里程的接口(接

口参见3.4API说明)。

1.2地铁收费系统规则

1、票价分为基本票价和扣费票价。

扣费票价是在基本票价的基础上,根据票卡类型、时间段进行特殊计算得到的(也有可能等于基本票价),是扣费操作时需要从卡上扣除的金

额。

2、基本票价计算规则:

按进站点与出站点之间的最短里程分级计算:

3千米(包含3千米,但不包括0)以内:

2元。

3千米至5千米(包含5千米):

3元。

5千米至10千米(包含10千米):

4元。

10千米以上:

5元。

structdistcost

{

Chars1[];

Chars2[];

Intdistanee;

};

3、进出站为同一站点的,则按进出站时长计算:

(1)小于等于30分钟:

单程票:

票卡面值作为扣费票价;

其他卡:

0元,且不受任何时间段的限制,即直接作为扣费票价。

(2)大于30分钟:

单程票:

(票卡面值,3元)中“最大值”作为扣费票价;

其他卡:

3元,且不享受任何时间段的优惠,即直接作为扣费票价。

4、扣费票价计算规则1:

按照各种票卡的类型计算:

普通卡(C):

正常时间段以基本票价作为扣费票价;特殊时间段收费参见“5、扣费票价计算规则2”。

老年卡(B):

正常时间段以基本票价的9折作为扣费票价(如出现小数,则向下取整);特殊时间段收费参见“5、扣费票价计算规则2”。

单程票(A):

即一次性车票,任何时间段不享受任何优惠,直接以(票卡面值,基本票价)中“最大值”作为扣费票价。

5、扣费票价计算规则2(不涉及单程票):

按照进站时间的不同区间计算:

进站时间为[7:

00,9:

00)、[16:

30,18:

30)时,无任何优惠,所有类型的交通卡(单

程票除外)以基本票价作为扣费票价。

进站时间为[10:

00,11:

00)、[15:

00,16:

00)时,所有类型的交通卡(单程票除外)

以基本票价的5折作为扣费票价(如出现小数,则向下取整)。

1.3约束

考生严格按操作说明的功能项实现,不用考虑其他异常(比如:

单参数的合法性,

不同操作之间的逻辑关联性,等等)。

系统不考虑跨天的情况,只需要考虑同一天,即00:

00~23:

59地铁全天运行时间范围内的功能。

所用的命令字和卡类型参数中的字母不区分大小写;站名中若出现小写字母,考试

框架自动将其转换成大写字母。

2操作说明

采用在考试系统提供的SocketTool工具中输入命令串方式与系统进行操作交互,命令字是该命令串的第一个符号。

命令行的格式:

命令字[空格]参数仁.[空格]参数n

命令字与第一个参数之间、参数与参数之间,均使用英文半角空格分隔,单个参数内无空格。

命令行涉及到的“参数说明

参数名称

参数说明

类型

取值范围

示例

卡号

卡号

整数

0~9,0为通配卡号,只在查询(q)命令中可用。

5

卡类型

票卡的类型:

单程票/老年卡/普通卡

字符

A(a),B(b),C(c)

B,b

金额(元)

卡扣费前余额卡扣费后余额扣费金额

(遇小数向下取整)

整数

0~999

888

时间

进站时间出站时间查询起始时间查询终止时间

HH:

MM

00:

00~23:

59

注意命令输入格式:

合法:

09:

05

非法:

9:

05、09:

5、9:

5

站点名称

进站站点名称出站站点名称

字符串

共六个站名:

S1~S6

S5

2.1初始化

命令格式:

r

功能说明:

程序复位,使程序恢复到刚启动时的初始化状态。

全局变量、链表及输出消

费记录的文件等统一恢复到初始状态。

约束说明:

系统在任何状态下可以执行该命令初始化系统。

输出说明:

输出操作结果提示(执行完r命令后系统会自动输出操作结果,考生不需要

调用任何输出函数)。

编号

用例标题

测试步骤

预期输出

1

程序复位

R

I00:

欢迎使用地铁收费系统

22请求扣费

命令格式:

c卡号卡类型卡扣费前余额进站时间进站站点名称出站时间出站站点名称

功能说明:

1、按照输入条件和“1.2地铁收费系统规则”,对票卡进行扣费操作(减去扣费票价)。

2、输出信息调用系统已提供的接口完成(接口参见“3.4API说明”)。

3、如果:

进站时间>出站时间,则不扣费,输出参数错误。

编号

用例标题

测试步骤

预期输出

1

请求扣费命令

C9C2012:

05S1

E02:

参数错误(时间关系错误)

参数非法

11:

20S4

4、如果从进站点到出站点之间的路线不存在,则不扣费,输出无效路线,并显示“卡扣费后余额”(“卡扣费后余额”等于“卡扣费前余额”)。

编号

用例标题

测试步骤

预期输出

1

无效线路,扣费

C3C8509:

05S3

I10:

扣费失败(无效路线)

失败

10:

20S8

<卡号-3><余额=85>

注意:

3/4同时发生时,以3输出优先。

5、如果“卡扣费前余额”大于等于扣费票价,则扣费,输出扣费成功,并显示“卡扣

费后余额”。

注意:

如果单程票面值大于等于扣费票价,则按票面值扣费。

例如:

单程票面值5元,

应收票价为3元,则本次扣费为5元,余额为0。

编号

用例标题

测试步骤

预期输出

1

正常扣费成功

C1A307:

00S4

08:

25S3

I11:

扣费成功<卡号-1><余额

瓦-0>

6、不是单程票的,扣费成功后,如果“卡扣费后余额”小于20元,则输出余额过低,

并显示“卡扣费后余额”。

 

编号「

用例标题

测试步骤

预期输出

1

正常扣费成功,

C4B2010:

05S1

I12:

扣费成功(余额过低)

卡内余额偏低

11:

20S4

<卡号-4><余额-18>

7、如票“卡扣费前余额”不足以扣费,则不扣费,输出扣费失败(余额不足),并显示

 

“卡扣费后余额”(“卡扣费后余额”等于“卡扣费前余额”)。

编号

用例标题

测试步骤

预期输出

1

余额不足,扣费

C4B115:

00S1

I13:

扣费失败(余额不足)

失败

15:

55S4

<卡号-4><余额-1>

8、调用系统已提供的写日志接口(接口参见“3.4API说明”),将“地铁乘车记录”记录到内存日志中,日志记录中包含如下字段:

<卡号><进站时间HH:

MM<t站站点名称><出站时间HH:

MM<出站站点名称><实际扣款金额><扣费是否成功>

Structloginfo{

Intcard;

LonginTime;Chars1[];

LongoutTime;

Chars2[];

Intcost;

BoolisCost;

};

请求扣费操作(c/C)所有(无论是否成功或失败)输出返回时,均要求要记录日志。

(如果卡号已注销的话,不写日志)

仅请求扣费操作(c/C)才记录日志,其他任何操作(查询扣费日志(q/Q)、初始化

(r/R))均要求不要记录日志。

系统最多记录10条日志,超过的系统会自动丢弃,程序初始化(或复位(r/R))后

日志记录自动清空,自动从头记录。

约束说明:

无。

输出说明:

输出操作结果,统一参见“3.3基本用例”。

2.3查询扣费日志(本功能作为附加功能,学员选做,请在完成其他功能后再做)

命令格式:

q卡号查询起始时间查询终止时间

功能说明:

1、查询指定票卡出站时间在指定时间段内(查询起始时间<=出站时间<=查询终止

时间)的“地铁乘车记录”日志。

备注:

对于内存日志的访问,请使用系统已提供的访问日志的接口(接口参见“3.4API

说明”)。

2、输出日志查询结果信息,请调用系统已提供的接口完成(接口参见“3.4API说明”)。

3、如果:

查询起始时间>查询终止时间,则输出参数错误。

编号

用例标题

测试步骤

预期输出

1

查询日志命令参数非法

Q020:

0017:

30

E02:

参数错误(时间关系错误)

4、如果卡号为0,则查询所有票卡出站时间在指定时间段内的地铁乘车记录;

5、查询结果按照“卡号”从小到大的顺序输出,同一卡号按照记录日志的先后顺序输

出。

编号

用例标题

测试步骤

预期输出

1

查询日志成功

R

I00:

欢迎使用地铁收费系统

C4B2010:

05S1

I12:

扣费成功(余额过低)

11:

20S4

<卡号-4><余额=18>

C3C8509:

05S3

I10:

扣费失败(无效路线)

10:

20S8

<卡号-3><余额=85>

Q000:

0023:

59

I20:

查询成功|

<3><09:

05><10:

20xS8><0><失败>

<4><10:

05><11:

20><2><成功>

6、如果没有满足条件的记录,则输出查询失败(无相应记录)

 

编号

用例标题

测试步骤

预期输出

1

无日志记录,查询失败

R

Q000:

0

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 自然科学 > 数学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1