公共交通网络的票务系统
这是一个公共交通网络的票务系统,其中前端(客户端)使用 React JS 开发,后端(服务器端)使用 Node JS 和 Express JS 开发。该Web应用程序使用MongoDB作为数据库,这是一个跨平台的面向文档的数据库。
用户可以在系统上注册。验证电子邮件将发送至乘客的电子邮箱。他需要在登录系统之前进行确认。注册后,乘客可以使用电子邮件和密码登录系统,也可以使用社交登录。管理员还可以通过输入主管理员提供的电子邮件和密码,使用相同的登录名登录系统。
一旦主管理员创建了管理员,创建的管理员将收到一封确认电子邮件,对于乘客来说,一旦注册,他们将收到一封验证电子邮件以激活其帐户。
使用他们的个人资料,他们可以查看他们的预订历史记录。注册用户和未注册用户都可以查看预订费用。但只有登录用户才能确认预订。预订确认后,用户将收到一封电子邮件,其中包含预订详细信息和该预订的唯一二维码。用户可以在火车站扫描二维码取票。当他们上车时,需要扫描二维码,在旅程结束时,他们需要再次扫描二维码,以验证目的地站和出发站。如果二维码与实际出发站不符,乘客需支付额外费用。
我们还实现了一个管理面板来管理火车路线、火车站详细信息、火车详细信息和用户。对于铁路管理者来说,他们可以生成按列车筛选的月度和年度财务报告。
该应用程序遵循模型-视图-控制器 (MVC) 架构。该视图是使用 ReactJS 实现的,它使用复合视图模式。控制器和模型使用Node.js实现,后端连接MongoDB NoSQL数据库。前端和后端通过 REST API 调用进行通信。
作为对规范文档的改进,我们添加了使用 google API 的社交注册功能。根据规范文档中的规定,用户需要使用用户界面向我们的系统提供其详细信息。此外,在我们的系统中,我们目前正在验证乘客的电子邮件地址,以便将电子邮件发送到乘客的电子邮件地址。需要旅客先确认。这对乘客来说是额外的工作。因此,我们通过添加社交登录来减少额外的任务。因此,用户无需手动输入电子邮件、名字、姓氏等。他们可以轻松地通过 Google 帐户登录。
在此应用程序中,用户可以提供预订详细信息并检查当前可用座位并进行预订。我们的应用程序会跟踪之前进行的预订,并显示用户进行预订时的实际可用座位。用户在预订时需要添加出发地和目的地、车次、舱位、时间、车票数量和预订日期。输入数据后,应用程序将获取同一列车的时间和日期的先前预订,并减去该列车的座位数。
即使用户没有为该应用程序创建帐户,他们也可以查看席位的可用性。当用户需要进行预订时,他们需要有一个帐户。
用户进行预订后,应用程序将生成一个二维码来跟踪预订。然后,系统将向用户的电子邮箱发送一封电子邮件,其中包含预订详细信息和生成的二维码,该二维码将用于在火车站打印车票。此外,系统还会向用户注册的手机号码发送一条短信,其中包含预订详细信息。
这是我们向该应用程序引入的一项新功能。如果用户是政府雇员,他们可以享受特别折扣。一旦用户在注册时提供了 NIC,该 NIC 就会使用政府 Web 服务进行验证,以确保用户有资格获得折扣。如果用户有资格享受折扣,则会将其添加到预订中。
在该应用程序的规范中没有直接付款方式。根据规范,用户必须为其账户充值,然后支付预订费。这包括额外的用户交互,并且应用程序的用户友好性将会下降。
因此,我们增加了直接支付方式和现金支付选项。用户在预订时可以选择任何选项。如果用户选择卡,则用户需要添加有效的卡详细信息。或者用户可以选择现金支付,到火车站支付。
作为规范的改进,在用户管理部分,有一个用户列表,管理员可以从该列表中禁用特定用户。禁用后,用户无法使用其凭据访问该帐户。将向用户显示一条错误消息。我们添加此功能是因为如果任何乘客有某种不当行为,应该有一种方法可以从系统中禁用该用户。在规范中,没有办法禁用用户。
作为规范的另一项改进,管理员可以编辑乘客帐户。例如他们的电子邮件。在用户视图中,用户无法更改其电子邮件地址。但是,如果乘客提出特殊要求,管理员可以更新特定乘客的电子邮件地址和其他详细信息。
在最初的设计中,管理员没有向系统添加或删除其他管理员的功能。因此,如果公司内经理的数量增加或减少,则无法添加新经理或从系统中删除现有经理。
因此,作为对规范的改进,为管理面板添加了一个新功能,使管理员能够在系统中添加或删除另一个管理员。因此,当管理员新添加到系统时,他/她将收到一封电子邮件,该电子邮件发送到管理员注册时提供的相应电子邮件地址,表明他/她已被添加为系统管理员,并且他/她必须登录使用他/她的 NC 编号连接到系统。注册后,可以使用管理面板中的帐户设置更改密码。
在最初的设计中,他们提到铁路运输管理部门应该能够规划时刻表,因此我们为他们提供了一个界面,使用唯一的路线名称来管理不同的路线,并将该路线中应包含的车站与相关集市一起分配。以下是铁路运输管理线路管理中可用的功能。
在最初的设计中,他们没有提到铁路运输管理部门应该通过系统来管理列车,但作为一个附加功能,我们还创建了一个界面来使用唯一的列车名称来管理列车,并分配该列车不同等级的座位并分配火车运行的路线。以下是铁路运输管理列车管理中可用的功能。
图9:创建火车在最初的设计中,他们提到铁路运输管理部门应该能够通过处理预订详细信息来生成报告。因此,我们添加了一项功能来生成每列列车产生的收入的月度和年度报告。之后,我们为报告视图实现了饼图和条形图两种视图。以下是铁路运输管理报表管理中提供的功能。
如果您收到如下错误,则不是后端服务的错误。发生这种情况是因为某些病毒防护应用程序阻止了“nodemailer”电子邮件服务。
{ Error: self signed certificate in certificate chain
at TLSSocket . < anonymous > ( _tls_wrap . js : 1105 : 38 )
at emitNone ( events . js : 106 : 13 )
at TLSSocket . emit ( events . js : 208 : 7 )
at TLSSocket . _finishInit ( _tls_wrap . js : 639 : 8 )
at TLSWrap . ssl . onhandshakedone ( _tls_wrap . js : 469 : 38 ) code: 'ESOCKET' ,
command : 'CONN' }
这是Avast杀毒软件的常见问题,ESET和卡巴斯基不会出现这个问题。
我也在 https://stackoverflow.com 中问过这个问题。他们还建议在运行后端服务时禁用病毒防护。
如果您遇到此类错误,请禁用病毒防护并重试。无论如何,即使发生错误,预订过程也不会中止。
如果您收到如下错误,这是因为我正在使用 Twilio 免费试用版,并且在向该号码发送消息之前,应通过 Twilio 仪表板验证输入的手机号码。如果您有付费 Twilio 帐户,请在后端“config.json”文件中添加帐户详细信息。
{ [Error: The number +94777123456 is unverified . Trial accounts cannot send messages to unverified numbers ; verify + 94777123456 at twilio . com / user / account / phonenumbers / verified , or purchase a Twilio number to send messages to unverified numbers .]
status : 400 ,
message : 'The number +94777123456 is unverified. Trial accounts cannot send messages to unverified numbers; verify +94777123456 at twilio.com/user/account/phonenumbers/verified, or purchase a Twilio number to send messages to unverified numbers.' ,
code : 21608 ,
moreInfo : 'https: //www.twilio.com/docs/errors/21608',
detail: undefined }
目前我们已经在铁路上实施了该解决方案,但我们计划将该解决方案扩展至也可用于公交车。
我们有一个想法,为铁路和公共汽车实施实时跟踪系统,以便乘客可以知道公共汽车和火车到达车站的准确时间,从而节省乘客的时间。
目前,规范中提到的现金充值解决方案还无法实际实施。
(C) 2019 特努沙古鲁格
tenusha.wordpress.com