Skip to content

Session 6

User interface design of the Railway Reservation System with screen inventory, navigation map, wireframes, and field validation

Updated View as Markdown

This session designs what the Passenger, Reservation Clerk and Administrator of the Railway Reservation System (RRS) actually see: which screens exist, how a user moves between them, what each screen shows and asks for, and what the system says when the input is wrong. The manual asks for an easy-to-follow interface with no hidden buttons, little graphics, and proper error messages, and every screen here is drawn to those rules. The business rules of Session 1 (max 6 passengers per PNR, no booking after departure, refund by hours before departure) become validation rules on specific fields, so the interface enforces the same rules the design in Session 5 enforces in code.

Objectives

Do not copy. Read for understanding and the viva
  • List every screen of the RRS with its actor, purpose and entry point.
  • Draw a navigation map showing how a user moves from login to booking, cancellation and admin tasks.
  • Draw text wireframes for the seven main screens.
  • Specify every input field with type, validation rule and exact error message.
  • Apply the manual’s interface rules (easy to follow, no hidden buttons, proper error messages) and show where each one is used.

Problem Statement

Write in lab record

Session 6: Develop user interface design for RRS.

Concept

Do not copy. Read for understanding and the viva

Screen inventory and navigation map

Start by listing screens, not drawing them. A screen is one page the user sees with one purpose. If a page has two purposes (search and book), split it. The inventory gives each screen an id (S1, S2, …) that the navigation map and field tables refer to. A navigation map is then a graph: screens are nodes, user actions are edges. It shows the happy path (login, search, select, enter passengers, pay, see PNR) and the side paths (cancel, admin). The rule from the manual is “no hidden buttons”: every edge in the map must be a visible button or link on the source screen.

Wireframes, validation and error messages

A wireframe is a box drawing of a screen with labels, input fields, buttons and messages, and no colours or graphics. Draw fields as underlined blanks, buttons in square brackets, and the error message area as a fixed line so the student knows where feedback appears. The manual says “proper error messages” and “you must do the type checking”. For each field write three things: the type, the rule, and the exact text the user reads. A message must say what is wrong and what to do: “Journey date cannot be in the past” is proper; “Invalid input” is not.

Screen Inventory

Write in lab record
Screen idNameActorPurposeReached from
S1LoginAllVerify email and password; route to the role’s homeApplication start, S2 Register
S2RegisterPassengerCreate a Passenger accountS1 link “New user? Register”
S3Passenger HomePassenger, Reservation ClerkMenu: Search Trains, Cancel by PNR, My Bookings, LogoutS1 after login
S4Search TrainsPassenger, Reservation ClerkEnter source, destination, dateS3 button “Search Trains”
S5Availability and FarePassenger, Reservation ClerkShow matching trains, seats per class, fare; pick oneS4 button “Search”
S6Passenger DetailsPassenger, Reservation ClerkEnter 1 to 6 passengers with berth preferenceS5 button “Book” on a row
S7Payment and ConfirmationPassenger, Reservation ClerkChoose payment mode, pay, see PNR and statusS6 button “Proceed to Pay”
S8Cancel by PNRPassenger, Reservation ClerkLook up PNR, show refund amount, confirm cancellationS3 button “Cancel by PNR”
S9My BookingsPassengerList own bookings with statusS3 button “My Bookings”
S10Admin HomeAdministratorMenu: Add Train, Add Schedule, Set Fare, Reports, LogoutS1 after admin login
S11Admin Add TrainAdministratorEnter train number, name, type, coachesS10 button “Add Train”
S12Admin Add ScheduleAdministratorCreate a run of a train on a dateS10 button “Add Schedule”
S13Admin ReportsAdministratorOccupancy, revenue, cancellation report for a date rangeS10 button “Reports”
Write in lab record
              Register        +-----------+     Administrator
   +-------------------------| S1 Login  |---------------------+
   |                          +-----+-----+                     |
   v            Passenger/Clerk     |                           v
+-------------+                     v                  +----------------+
| S2 Register |--Register-->(S1)    |                  | S10 Admin Home |
+-------------+           +---------+-------+          +--+----+-----+--+
                          | S3 Passenger    |             |    |     |
                          |      Home       |         Add |Add |Reports
                          +--+-----+-----+--+       Train |Sch.|
              Search Trains  |     |     |  My Bookings  v    v     v
                             v     |     v            +----+ +----+ +----+
                     +-----------+ |  +----------+    |S11 | |S12 | |S13 |
                     | S4 Search | |  | S9 My    |    +--+-+ +-+--+ +----+
                     +-----+-----+ |  | Bookings |       |     |
                    Search |       |  +----------+       +--Save-->(S10)
                           v       | Cancel by PNR
                 +-----------------+-+      |
                 | S5 Availability   |      v
                 |    and Fare       |  +----------------+
                 +--------+----------+  | S8 Cancel by   |
               Book (row) |             |     PNR        |
                          v             +-------+--------+
                 +------------------+           | Confirm Cancel -> refund shown -> (S3)
                 | S6 Passenger     |
                 |    Details       |
                 +--------+---------+
           Proceed to Pay |
                          v
                 +------------------+-- Pay OK: PNR shown, Done -> (S3)
                 | S7 Payment and   |
                 |  Confirmation    |-- Pay FAILED: Retry, stays on S7
                 +------------------+
   Logout in the top bar of every screen returns to S1.
Edge (from, to)Trigger on source screenGuard
S1 to S3 or S10Button “Login”S3 for Passenger or Reservation Clerk; S10 for Administrator
S1 to S2Link “New user? Register”none
S2 to S1Button “Register”All fields valid; account created
S3 to S4, S8, S9Buttons “Search Trains”, “Cancel by PNR”, “My Bookings”none
S4 to S5Button “Search”All three fields valid
S5 to S6Button “Book” on a train rowDeparture time is in the future
S6 to S7Button “Proceed to Pay”1 to 6 valid passengers
S7 to S3Button “Done” after PNR shownPayment SUCCESS
S7 to S7Button “Retry”Payment FAILED; booking not created
S8 to S3Button “Done” after refund shownCancellation saved
S10 to S11, S12, S13Buttons “Add Train”, “Add Schedule”, “Reports”none
S11, S12 to S10Button “Save”Record saved

Wireframes

Write in lab record

Conventions: ______ is a text field, [ Button ] is a button, ( ) item is a radio option, [v] is a drop-down. The line starting with ! is the fixed message area where errors and confirmations appear.

S1 Login

┌──────────────────────────────────────────────────────────┐
│ Railway Reservation System                               │
├──────────────────────────────────────────────────────────┤
│   Email     ____________________________                 │
│   Password  ____________________________                 │
│             [ Login ]                                    │
│   New user? Register                                     │
│ ! ______________________________________________________ │
└──────────────────────────────────────────────────────────┘
FieldTypeValidation ruleError message
Emailtext, max 100Required; must contain one @ and a dot after itEnter a valid email address such as name@example.com
Passwordpassword, 8 to 32RequiredEnter your password
Login (action)buttonEmail and password must match a User row; 3 attempts, then 5 minute lockEmail or password is incorrect. Attempts left: 2

S4 Search Trains

┌──────────────────────────────────────────────────────────┐
│ RRS  |  Home  |  Logged in: Asha Verma (Passenger)  [ Logout ] │
├──────────────────────────────────────────────────────────┤
│  Search Trains                                           │
│   From station   [v] NDLS - New Delhi                    │
│   To station     [v] BCT  - Mumbai Central               │
│   Journey date   ____/____/________  (DD/MM/YYYY)        │
│                  [ Search ]        [ Clear ]             │
│ ! ______________________________________________________ │
└──────────────────────────────────────────────────────────┘
FieldTypeValidation ruleError message
From stationdrop-down of StationRequiredSelect a source station
To stationdrop-down of StationRequired; not equal to From stationSource and destination cannot be the same
Journey datedate DD/MM/YYYYRequired; today or later; at most 120 days aheadJourney date must be between today and 120 days from today
Search (action)buttonAt least one Schedule matchesNo trains found between these stations on this date. Try another date

S5 Availability and Fare

┌────────────────────────────────────────────────────────────────────┐
│ RRS  |  Home  |  Asha Verma (Passenger)                 [ Logout ] │
├────────────────────────────────────────────────────────────────────┤
│  NDLS -> BCT on 14/10/2026                      [ Change search ]  │
│  Train  Name             Dep    Arr    Class  Avail   Fare         │
│  ─────  ───────────────  ─────  ─────  ─────  ──────  ──────       │
│  12952  Mumbai Rajdhani  16:25  08:15  3A     AVL 42  Rs 3,055     │
│                                        2A     AVL 6   Rs 4,270     │
│                                        1A     WL 3    Rs 5,480     │
│                                                        [ Book ]    │
│  12138  Punjab Mail      05:10  07:35  SL     AVL 118  Rs 745      │
│                                                        [ Book ]    │
│  Class to book  ( ) SL  (o) 3A  ( ) 2A  ( ) 1A                     │
│ ! ________________________________________________________________ │
└────────────────────────────────────────────────────────────────────┘
FieldTypeValidation ruleError message
Train rowread-only listOne row per Schedule from search_trainsnone
Availread-only, AVL n or WL nFrom check_availability; WL shown when 0 seats freenone
Class to bookradio SL, 3A, 2A, 1ARequired; class must exist on the chosen trainSelect a class available on this train
Book (action)button per rowDeparture time must be later than now (no booking after departure)This train has already departed and cannot be booked

S6 Passenger Details

┌────────────────────────────────────────────────────────────────────┐
│ RRS  |  Home  |  Asha Verma (Passenger)                 [ Logout ] │
├────────────────────────────────────────────────────────────────────┤
│  12952 Mumbai Rajdhani  NDLS -> BCT  14/10/2026  Class 3A          │
│  #  Name                    Age   Gender   Berth preference        │
│  1  ______________________  ___   [v] F    [v] LOWER               │
│  2  ______________________  ___   [v] M    [v] NONE                │
│                                                  [ + Add passenger ] │
│  Passengers: 2 of 6                                                │
│  Contact mobile  __________      Contact email  __________________ │
│  Fare: 2 x Rs 3,055 = Rs 6,110                                     │
│            [ Back ]                     [ Proceed to Pay ]         │
│ ! ________________________________________________________________ │
└────────────────────────────────────────────────────────────────────┘
FieldTypeValidation ruleError message
Nametext, 2 to 50 letters and spacesRequired for every rowPassenger 2: enter the name as on ID proof
Ageinteger, 1 to 120RequiredPassenger 2: age must be between 1 and 120
Genderdrop-down M, F, ORequiredPassenger 2: select a gender
Berth preferencedrop-down LOWER, MIDDLE, UPPER, SIDE_LOWER, SIDE_UPPER, NONEOptional, default NONEnone
Add passenger (action)buttonDisabled when 6 rows exist (max 6 passengers per PNR)Maximum 6 passengers are allowed on one PNR
Contact mobiletext, 10 digitsRequired; starts with 6 to 9Enter a 10-digit mobile number
Contact emailtext, max 100Required; valid email formatEnter a valid email address
Proceed to Pay (action)buttonAt least 1 passenger; every row valid; departure still in the futureAdd at least one passenger before proceeding

S7 Payment and Confirmation

┌────────────────────────────────────────────────────────────────────┐
│ RRS  |  Home  |  Asha Verma (Passenger)                 [ Logout ] │
├────────────────────────────────────────────────────────────────────┤
│  Payment                                                           │
│  Amount payable   Rs 6,110                                         │
│  Mode   (o) UPI   ( ) Card   ( ) Net banking                       │
│  UPI ID  ____________________                                      │
│                   [ Pay Rs 6,110 ]         [ Cancel booking ]      │
├────────────────────────────────────────────────────────────────────┤
│  Booking Confirmed                                                 │
│  PNR            4521098763                                         │
│  Train          12952 Mumbai Rajdhani   14/10/2026  Dep 16:25      │
│  From / To      NDLS New Delhi -> BCT Mumbai Central               │
│  1. Asha Verma     34 F   B2 / 21  LOWER   CONFIRMED               │
│  2. Rohan Verma    36 M   B2 / 22  MIDDLE  CONFIRMED               │
│  Paid            Rs 6,110 by UPI   Txn UPI2026101416251234         │
│  SMS and email sent to 98xxxxxx21 and as**@gmail.com               │
│                   [ Print ticket ]        [ Done ]                 │
│ ! ________________________________________________________________ │
└────────────────────────────────────────────────────────────────────┘
FieldTypeValidation ruleError message
Moderadio UPI, Card, Net banking (Cash shown only to Reservation Clerk)RequiredSelect a payment mode
UPI IDtext, max 50Required when mode is UPI; must contain one @Enter a valid UPI ID such as name@bank
Card numbertext, 16 digitsRequired when mode is Card; passes Luhn checkEnter a valid 16-digit card number
Pay (action)buttonGateway returns SUCCESS; on FAILED no booking is savedPayment failed. No amount was deducted. Press Retry or choose another mode
PNR (output)read-only, 10 digitsShown only after SUCCESSnone
Status (output)read-only CONFIRMED or WAITLISTED per passengerFrom book_ticketnone

S8 Cancel by PNR

┌────────────────────────────────────────────────────────────────────┐
│ RRS  |  Home  |  Asha Verma (Passenger)                 [ Logout ] │
├────────────────────────────────────────────────────────────────────┤
│  Cancel Ticket                                                     │
│  PNR   __________            [ Look up ]                           │
│  Booking found                                                     │
│  12952 Mumbai Rajdhani  14/10/2026  Dep 16:25  Class 3A            │
│  1. Asha Verma   CONFIRMED  B2/21                                  │
│  2. Rohan Verma  CONFIRMED  B2/22                                  │
│  Total fare       Rs 6,110                                         │
│  Time to departure  72 h 10 m   (more than 48 h: 100% less Rs 60)  │
│  Refund amount    Rs 6,050                                         │
│  Reason (optional) ________________________________                │
│            [ Back ]                    [ Confirm Cancel ]          │
│ ! ________________________________________________________________ │
└────────────────────────────────────────────────────────────────────┘
FieldTypeValidation ruleError message
PNRtext, exactly 10 digitsRequired; digits onlyPNR must be a 10-digit number
Look up (action)buttonPNR exists; belongs to logged-in user or user is Reservation Clerk; status not CANCELLEDNo booking found for this PNR, or: This PNR is already cancelled
Refund amount (output)read-only100% minus flat clerkage if more than 48 h before departure; 50% between 48 and 12 h; 0 under 12 hnone
Reasontext, max 100Optionalnone
Confirm Cancel (action)buttonSecond confirmation dialog: “Cancel PNR 4521098763? Refund Rs 6,050. This cannot be undone.”Cancellation could not be saved. Try again

S12 Admin Add Schedule

┌────────────────────────────────────────────────────────────────────┐
│ RRS  |  Admin Home  |  Suresh Nair (Administrator)      [ Logout ] │
├────────────────────────────────────────────────────────────────────┤
│  Add Schedule                                                      │
│  Train          [v] 12952 Mumbai Rajdhani                          │
│  Run date       ____/____/________  (DD/MM/YYYY)                   │
│  Status         (o) ACTIVE   ( ) CANCELLED                         │
│  Route preview (read-only, from Route table)                       │
│   Seq  Station  Arr    Dep    Km                                   │
│   1    NDLS     --     16:25  0                                    │
│   2    KOTA     21:00  21:05  465     ...  4  BCT  08:15  --  1384 │
│            [ Back ]                        [ Save ]                │
│ ! ________________________________________________________________ │
└────────────────────────────────────────────────────────────────────┘
FieldTypeValidation ruleError message
Traindrop-down of TrainRequired; train must have at least one Route row and one CoachTrain 12952 has no route defined. Add the route first
Run datedate DD/MM/YYYYRequired; today or later; no existing Schedule for same train and dateA schedule for 12952 on 14/10/2026 already exists
Statusradio ACTIVE, CANCELLEDRequired; default ACTIVEnone
Save (action)buttonAll rules pass; on success message “Schedule 3107 created” and Seat rows generated from CoachSchedule could not be saved. Check the fields marked in red

UI Design Principles Applied

Write in lab record
PrincipleRule from the manualWhere it is applied in the RRS
ConsistencyEasy to follow interfaceEvery screen has the same top bar (system name, Home, logged-in user, Logout), the same message line at the bottom, and the primary button always at the bottom right (Search, Proceed to Pay, Pay, Confirm Cancel, Save)
FeedbackProper error messagesS7 prints the PNR, seat numbers and transaction reference on the same screen after payment; S8 shows the computed refund amount before the user confirms; every action button reports success or failure in the message line
Error preventionType checking, field overrunS4 stations are drop-downs so a code cannot be misspelt; S6 “Add passenger” is disabled at 6 rows; S5 “Book” is hidden for departed trains; S8 asks a second confirmation before an irreversible cancellation
VisibilityNo hidden buttonsEvery edge in the navigation map is a labelled button or link on the source screen; there are no keyboard-only or menu-only actions
AccessibilityEasy to followEvery field has a text label to its left, not a placeholder that disappears; error messages name the field and row (“Passenger 2: age must be between 1 and 120”); colour is never the only signal, the message line carries the text
MobileEasy to followFields stack in one column under 600 px width; the S5 table collapses to one card per train with class rows below it; buttons are full width and at least 44 px tall

Viva Questions

Do not copy. Read for understanding and the viva
  • Q: Why is the PNR shown on the Payment screen instead of a separate screen? A: The user has just waited for the gateway; showing the PNR immediately, with the transaction reference, is direct feedback and avoids a page where the PNR could be lost if the connection drops.
  • Q: How does the interface enforce the six-passenger limit? A: The “Add passenger” button is disabled at six rows and the counter reads “6 of 6”; the server checks again in book_ticket.
  • Q: How does the interface stop a booking after departure? A: S5 hides the “Book” button when departure time has passed, and S6 “Proceed to Pay” re-checks it, because the user may have kept the page open.
  • Q: What makes an error message “proper”? A: It names the field, says what is wrong, and says what to do, such as “Journey date must be between today and 120 days from today”.
  • Q: Why are stations drop-downs and not text boxes? A: Error prevention: the user cannot type a code that is not in the Station table, so search_trains never raises UnknownStationError from the UI.
  • Q: Where does the Reservation Clerk’s interface differ from the Passenger’s? A: Only on S7, where Cash appears as a payment mode, and on S8, where the clerk can look up any PNR, not only their own.

Common Mistakes

Do not copy. Read for understanding and the viva
  • Drawing screens with logos, colours and icons. The manual asks for zero or very little graphics; marks go to fields, buttons and messages.
  • Writing “Invalid input” as the error message for every field. Each message must name the field and the fix.
  • Putting a validation rule in the table without a matching element on the wireframe, or a button on the wireframe that has no edge in the navigation map.
  • Showing a booking as confirmed before payment succeeds. The PNR appears only after the gateway returns SUCCESS.
  • Copying the passenger limit or departure rule into prose only. Put them on the specific field and button where they are enforced.

Session Summary

Write in lab record
  • Screen inventory table with 13 screens, navigation map diagram and its edge table.
  • Seven wireframes: Login, Search Trains, Availability and Fare, Passenger Details, Payment and Confirmation with PNR, Cancel by PNR, Admin Add Schedule.
  • One field table per wireframe with type, validation rule and error message, including the six-passenger limit and the no-booking-after-departure rule.
  • Principles table tying consistency, feedback, error prevention, accessibility and mobile to named screen elements.
Navigation

Type to search…

↑↓ navigate↵ selectEsc close