대중교통망 티켓팅 시스템
프론트 엔드(클라이언트 측)는 React JS를 사용하여 개발되고 백엔드(서버 측)는 Node JS 및 Express JS를 사용하여 개발되는 대중 교통 네트워크의 티켓팅 시스템입니다. 이 웹 애플리케이션은 크로스 플랫폼 문서 지향 데이터베이스인 MongoDB를 데이터베이스로 사용합니다.
사용자는 시스템에 등록할 수 있습니다. 승객의 이메일로 확인 이메일이 발송됩니다. 그는 시스템에 로그인하기 전에 이를 확인해야 합니다. 등록 후 승객은 이메일과 비밀번호를 사용하여 시스템에 로그인할 수 있으며, 그렇지 않으면 소셜 로그인을 사용할 수 있습니다. 관리자는 기본 관리자가 제공한 이메일과 비밀번호를 입력하여 동일한 로그인을 사용하여 시스템에 로그인할 수도 있습니다.
기본 관리자가 관리자를 생성하면 생성된 관리자는 확인 이메일을 받게 되며 승객도 등록되면 계정을 활성화하기 위한 확인 이메일을 받게 됩니다.
프로필을 사용하여 예약 내역을 볼 수 있습니다. 등록된 사용자와 등록되지 않은 사용자 모두 예약 예약 비용을 볼 수 있습니다. 단, 로그인한 사용자만 예약을 확인할 수 있습니다. 예약이 확인되면 사용자는 예약 세부 정보와 해당 예약에 대한 고유 QR 코드가 포함된 이메일을 받게 됩니다. 사용자는 기차역에서 QR 코드를 스캔하고 티켓을 얻을 수 있습니다. 열차에 탑승할 때 QR 코드를 스캔해야 하며, 여행이 끝나면 다시 QR 코드를 스캔하여 목적지 역과 출발 역을 확인해야 합니다. QR 코드와 실제 출발역이 일치하지 않는 경우 승객은 추가 금액을 지불해야 합니다.
또한 기차 노선, 기차역 세부 정보, 기차 세부 정보 및 사용자를 관리하는 관리자 패널을 구현했습니다. 철도 관리자의 경우 열차별로 필터링된 월별 및 연간 재무 보고서를 생성할 수 있습니다.
이 애플리케이션은 MVC(Model-View-Controller) 아키텍처를 따릅니다. 뷰는 복합 뷰 패턴을 사용하는 ReactJS를 사용하여 구현됩니다. 컨트롤러와 모델은 Node.js를 사용하여 구현되고, MongoDB NoSQL 데이터베이스는 백엔드에 연결됩니다. 프런트엔드와 백엔드는 REST API 호출을 통해 통신합니다.
사양 문서의 개선으로 Google API를 활용한 소셜 가입 기능을 추가했습니다. 사양 문서에 명시된 대로 사용자는 사용자 인터페이스를 사용하여 시스템에 세부 정보를 제공해야 합니다. 또한, 당사 시스템에서는 현재 승객의 이메일 주소로 이메일이 전송될 수 있도록 승객의 이메일 주소를 확인하고 있습니다. 승객이 먼저 이를 확인해야 합니다. 이는 승객들에게 추가 작업입니다. 그래서 우리는 소셜 로그인을 추가하여 추가 작업을 줄였습니다. 따라서 사용자는 이메일, 이름, 성 등을 수동으로 입력할 필요가 없습니다. Google 계정을 통해 쉽게 로그인할 수 있습니다.
이 애플리케이션에서 사용자는 예약 세부정보를 제공하고 현재 좌석 가용성을 확인하고 예약할 수 있습니다. 우리 애플리케이션은 이전에 이루어진 예약을 추적하고 사용자가 예약하려는 시점에 사용 가능한 실제 좌석을 표시합니다. 예약할 때 사용자는 시작 및 목적지 위치, 기차, 클래스, 시간, 티켓 수량 및 예약 날짜를 추가해야 합니다. 데이터가 입력되면 동일한 열차의 시간과 날짜에 대한 이전 예약을 가져오고 열차의 좌석 수를 뺍니다.
사용자가 애플리케이션용으로 생성된 계정이 없더라도 좌석 가용성을 볼 수 있습니다. 사용자가 예약을 하려면 계정이 있어야 합니다.
사용자가 예약을 하면 애플리케이션은 예약을 추적하기 위해 QR 코드를 생성합니다. 그런 다음 예약 세부 정보 및 생성된 QR 코드가 포함된 이메일이 사용자의 이메일로 전송되며, 이 코드는 기차역에서 티켓을 인쇄하는 데 사용됩니다. 또한, 예약 내역이 포함된 문자 메시지를 사용자의 등록된 휴대폰 번호로 전송됩니다.
이것은 우리가 애플리케이션에 도입한 새로운 기능입니다. 사용자가 공무원인 경우 특별 할인을 받을 수 있습니다. 사용자가 등록 시 NIC를 제공하면 정부 웹 서비스를 통해 해당 NIC가 검증되어 사용자가 할인을 받을 수 있는지 확인됩니다. 사용자가 할인 대상인 경우 예약에 추가됩니다.
본 애플리케이션의 사양에는 직접 결제 방식이 없습니다. 사양에 따라 사용자는 계정을 충전한 후 예약 수수료를 지불해야 합니다. 여기에는 추가적인 사용자 상호 작용이 포함되며 애플리케이션의 사용자 친화성이 저하됩니다.
그래서 직불방식을 추가하고 현금결제 옵션을 추가했습니다. 사용자는 예약 시 원하는 옵션을 선택할 수 있습니다. 사용자가 카드를 선택한 경우 유효한 카드 세부정보를 추가해야 합니다. 또는 현금 결제를 선택하고 기차역에서 결제할 수도 있습니다.
사양 개선으로 사용자 관리 섹션에는 사용자 목록이 있으며 관리자는 해당 목록에서 특정 사용자를 비활성화할 수 있습니다. 비활성화한 후에는 사용자는 자격 증명을 사용하여 계정에 액세스할 수 없습니다. 사용자에게 오류 메시지가 표시됩니다. 승객이 어떤 식으로든 잘못된 행동을 하는 경우 해당 사용자를 시스템에서 비활성화할 수 있는 방법이 있어야 하기 때문에 이 기능을 추가했습니다. 사양에는 사용자를 비활성화하는 방법이 없었습니다.
사양 관리자의 또 다른 개선 사항으로 승객 계정을 편집할 수 있습니다. 이메일과 같은 것입니다. 사용자 보기에서 사용자는 이메일 주소를 변경할 수 없습니다. 그러나 승객이 특별 요청을 하는 경우 관리자는 특정 승객의 이메일 주소 및 기타 세부 정보를 업데이트할 수 있습니다.
원래 설계에는 관리자가 시스템에 다른 관리자를 추가하거나 시스템에서 삭제할 수 있는 기능이 없습니다. 따라서 회사 내에서 관리자 수가 증가하거나 감소하는 경우 새 관리자를 추가하거나 시스템에서 기존 관리자를 제거할 방법이 없습니다.
따라서 사양 개선으로 관리자가 시스템에서 다른 관리자를 추가하거나 제거할 수 있는 새로운 기능이 관리자 패널에 추가되었습니다. 따라서 관리자가 시스템에 새로 추가되면 관리자 등록 시 제공된 해당 이메일로 자신이 시스템에 관리자로 추가되었으며 로그인해야 한다는 내용의 이메일을 받게 됩니다. 자신의 NC 번호를 사용하여 시스템에 등록 후 관리자 패널의 계정 설정을 사용하여 비밀번호를 변경할 수 있습니다.
원래 디자인에는 철도 운송 관리국이 시간표를 계획할 수 있어야 한다는 언급이 있으므로 고유한 경로 이름을 사용하여 다양한 경로를 관리하고 해당 경로에 포함되어야 하는 역을 관련 박람회에 할당할 수 있는 인터페이스를 제공했습니다. 철도교통행정을 위한 노선관리에서 사용할 수 있는 기능은 다음과 같습니다.
원래 설계에서는 철도 교통 관리국이 시스템을 통해 열차를 관리해야 한다고 언급하지 않았지만 추가 기능으로 고유한 열차 이름을 사용하여 열차를 관리하고 해당 열차의 다양한 클래스에 좌석을 할당하고 할당하는 인터페이스를 만들었습니다. 열차가 운행될 경로. 다음은 철도 운송 관리를 위해 열차 관리에서 사용할 수 있는 기능입니다.
Figure_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 및 Kaspersky에서는 이 문제가 발생하지 않습니다.
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