You are on page 1of 69

A Project Report

On
Railway Reservation System-e Rail
Submitted By

(Bhawanjeet Kaur)

Registration No. 21600590039

MCA (1634)
Lateral Entry

Batch :- 2016-18

Under the guidance of

Tanya
Name of Project guide

Lecturer(IT)
Designation

DIRECTORATE OF DISTANCE EDUCATION

1|Page
LOVELY PROFESSIONAL UNIVERSITY, PHAGWARA

Declaration

I hereby declare that the project report entitled “Railway Reservation System – eRail”

submitted in partial fulfillment and requirement for the degree of “Bachelor of Computer

Application” to Lovely Professional University, Punjab is my original work and not

submitted for the award of any other degree, diploma, fellowship, or any similar title of

prizes.

Bhawanjeet Kaur

Reg. No-21600590039

Date :-__________

Certified that the above statement made by the student is coorect to the best of our
knowledge and belief.

Tanya

Lecturer (IT)

Project guide

Date :-__________

2|Page
CERTIFICATE

This Is to Certify That Mrs. Bhawanjeet Kaur Regd. 21600590039 has processed under
by supervision her research project report on “Railway Reservation System – eRail”. The work
embodied in this report is original and is of the standard expected of an MCA Student and has not
been submitted in part or full to this or any other university for the award of any degree or
Diploma. She has completed all requirements of guidlines for research project report and the work
is fit for evaluation.

Name: Tanya
Desgination: Lecturer (IT)

3|Page
Table of Contents

Railway Management System Benefits.........................................................................5


Scope and Features ........................................................................................................5
Security module ............................................................................................................6
Master Management module ........................................................................................6
Transaction Module ......................................................................................................7
Query Module ...............................................................................................................7
Out of Scope ..................................................................................................................8
Goal and objective .........................................................................................................8
Solution Concept ...........................................................................................................8

PROBLEM STATEMENT .................................................................................................... 9-10

SYSTEM ARCHITECTURE ................................................................................................. 11-13

SOFTWARE AND HARDWARE REQUIREMENT ................................................................ 14

DEVELOPMENT TOOLS AND TECHNOLOGIES ................................................................ 15

DESIGN GOALS AND CONSTRAINTS ................................................................................. 16

USE CASE ........................................................................................................................... 17-24


[

RAILWAY RESERVATION SYSTEM DATA DICTIONARY .................................................. 25-30

RAILWAY RESERVATION SYSTEM– DATA SCHEMA ER DIAGRAM ................................ 31-62

RESERVATION SYSTEM TEST PLAN ...............................................................................63-67


CONCLUSION ..................................................................................................................68
BIBLIOGRAPHY................................................................................................................69

4|Page
Railway Management System Benefits

 Complete end to end system for all the activities related to railway
reservation system. 

 Supports the full life cycle of ticket reservation, seat allocation, and ticket cancellation.
Reschedule the cancel seat to unconfirmed passenger. 

 It is a scalable system. 

 Has a clearly arranged and user-friendly interface 

 Easy to use and minimum data entry, all important details is mater driven
and provide in drop down list to make fast operation and avoid mistake. 

 Automatic fare calculation from stage master, in new updation of fare in stage
master will automatically reflect in all new reservation. 

 All important details can be updated by front end master module only. 

 Retrieval of forgotten passwords. 

 Integrated security features. 

Scope and Features


From an end-user perspective, the Railway Reservation System Project consists of three
functional elements: Security Module, Master Management Module, Transaction Module
and a Query Module.

5|Page
Security module

Security modules include security features like user management and application
level password management..

 Maintain user master- Each user identified by the user name and user type.
Only admin user can create, edit user information. 

 Password must be 6 characters long. 

 Password must be alpha numeric. 


 While creating user system assign default password for the user, user must
change default password for first time login. 

 All login time stamp stored in the system for security audit. 

 Access level and roles and privileges are set for different type of users. 

Master Management module


Master management module includes following sub modules..

 Station Master – Every station is uniquely identified by system generated Station


ID. It also includes station code, station name and railway division name. 

 Train Master – Every train uniquely identified by train no, it includes train name,
train schedule which days of the week train will run. No of coaches available for 3
tier AC, First Class, Slipper Class etc. 

 Train Schedule – It includes train journey details from start station to end station,
all in between station, distances between 2 station, arrival and departure time. 

 Fare Rule – It help to calculate fare by distance, support different type of fare
calculation for different class like AC1, AC3 etc. 

 Cancellation Fees Rule - It provide the master data for all ticket cancellation
fees calculation. 

 Reservation and Super Fast Fees – It provide the master data for all
ticket cancellation fees calculation. 

6|Page
Transaction Module
Transaction module includes following sub modules.

 Reservation – This module used to make reservation, it asks for input data like
train no, journey date, from station code, end station code. System has powerful
validation rule to check validation like journey date must be greeter than system
date, journey date must be within 90 days. Train should run for the selected day.
Check for from station and to station. Seat availability, While saving the record
system generate PRN no, seat no and coach no. Before save the system ask for final
confirmation. System automatically calculates the fare and save the details. 

 Cancellation – For cancellation of ticket it ask for PRN no, after entering the correct PRN
no system check for validity of the PRN no, whether it already cancelled, journey date
already expired. I it validate system display all the details of the reservation. 

System automatically calculates the cancellation fees from the cancellation
rule master. Before save the record system ask for the confirmation. 

 Update Seat no for unconfirmed passenger – It is schedule activity, system
query for all cancelled ticket for particular journey date and allocates all vacant
seat to unconfirmed passenger. 

 Daily Cash Transaction – It shows daily transaction, like how much money received
and how much money refund. All data can be exported to MS Excel for review and
save in file system. 

Query Module
A powerful query module give on screen information for particular PRN NO, it shows all the
reservation details and cancellation details, include current status for the seat no, coach no.

Both of these areas of functionality will be delivered as the first version of the
Railway Reservation System is released. Functionality is described in more detail
later in this document.

7|Page
Out of Scope
The following functions are considered out of scope for Version 1 of the Railway Reservation
System. Versions 2.0 address items not in scope and those deemed not feasible during V1.0.

Function
Comment Version
Linking and integration of any Required by management to 2
legacy system for accounting. control and maintain the
accounting activity
Integration with banks and other Help to updated and share 2
credit verification agency the data
Connection to third-party OLAP 2
applications
Sophisticated system to host in 2
internet and used to connect all
travel agents.
Electronic Data Interchange (EDI) Aimed to reduce costs and 2
system between different time in the data sharing
department

Goal and objective

This section presents a conceptual overview of the solution, and then provides
an introduction to its requirements.

Solution Concept
The Railway Reservation System consists of:
 Security Modules: 

Security modules include security features like user management and
application level password management. 

 Master Management module: It includes all master like station, train, all rules
which are used to calculate fare and cancellation charges. 

 Transaction Module – It includes reservation, cancellation of ticket. Update of
seat no and coach no for unconfirmed passengers. 

 Query Modules. 

A powerful query module give on screen information for particular PRN no, system
user can view all information for particular ticket in one screen by entering PRN no. 

8|Page
Problem Statement
Requirements Summary
The following preliminary lists are based on initial interviews

Business Requirements
The business goal for the application is to support an increase the productivity and complete
automation of existing manual or semi automatic railway reservation process. Business
requirements are discussed in the Scope section, with the following additional detail:

 Improve the search facility and system users should get all the information in
 a second. 
 System should have security features in built as it handles sensitive personal
 and finance information of the customer. 
 User must not delete any data, Administrator can only have the rights to delete
 the data, 
 System Administrator must able to control the access rights by each user as per
 requirement. 
 The application should support the capability to use multi user environment. 

The system users want to improve their current ability to analyze customer data. In
particular, they want to focus on identifying their best customer and who are defaulter.
To enable them to accomplish this goal, they want to extract meaningful data that easily
answers the following questions:

 What are the early warning signs of problems? 


 Who is my best route? 
 What is the most used and busy train? 
  Payment pattern of the customer? 
 Cancellation pattern of customer? 
 What are my customers' issues as groups? 

User Requirements
User requirements are categorized by user type.

System Users
  Able to search and view the ticket information by only PRN no.. 
 Able to find all the information like reservation details, seat details, in one screen
 to give answer to customer query. 
  Must able to change the his or her own password 
 System must able to calculate all fare automatically. 

9|Page
Supervisor

 All mater details should be updated from front end only.. 


 All data must be exported to ms excel 

Operational Requirements

The following requirements provide a high-level view of how the system will run:

 Processor usage should not exceed 80 percent during concurrent uses. 


 Backups will occur incrementally throughout the day. 
 A full weekly backup is required to WORM drives. 

 Ensure that information is easy to access either, and meaningful for the system
users and the company. 

 Minimize the technical knowledge that system users need to access the data,
generate ad hoc queries, search and view information. 

 Any change to information must be reflected immediately, and the changes must be
propagated to the search engine so that system users that perform searches see
this new information. 

 The application should work with the existing communications and
networking infrastructure. 

 The application should deploy with a minimum of additional operational
processes, manual or otherwise. 

10 | P a g e
System Architecture

High Level Solution Architecture

System Analysis and


Query
Windows OLEDB Database
Application Engine
Microsoft VB Run
Time

Retrieval
Transactional Facade Facade

Passenge Train Schedule Fare Search and


r Retrieval
of
Information

Data Access
OLTP Access OLAP Access

Data Warehouse
Data

High Level Solution Architecture of online Railway Reservation System

11 | P a g e
User Profiles
The following user types are expected for the Railway Reservation System:

User Brief Description of Use Actions


USER Minimum rights to the system, query the
information can add, edit some modules.
Supervisor Reservation, Cancellation, Make, However can not
delete any information.
System Create new system users, set and alter the role
Administrator and privilege to the system users for accessing the
system resource. Can delete the data. Also
responsible to database backup, backend
performance. And overall the system
performance.

Usage Summary
Railway Reservation System Version 1.0 will address the following use cases. The complete
usage scenarios will be completed during the information-gathering process. Use cases will
be created and prioritized. Selected use cases will be expanded into usage scenarios and
features that are derived from both use cases and the usage scenarios, as represented in
the following diagram:

12 | P a g e
Usage summary use case

13 | P a g e
Software and Hardware Requirement

General Requirement for Server/Client:

Type Software Hardware


Work Station/ Node 1. Windows XP 1. P-4
2. VB Run time 2. RAM -256 MB
3. MS Office

Database Server 1.Win2000 Advance Server 1.P-4


2.RAM- 2GB
3.Hard Disk-160GB
4.RAID
Application Server 1.Win 2000 Advance Server 1.P-4
2.RAM- 1GB
3.Hard Disk-40GB

Data Base Server Application Server

Workstation 1 Workstation 2 Workstation 3 Workstation N

14 | P a g e
Development Tools and Technologies

Front End

1. VB 6

Why VB6?

VB6 is built on the Windows Server System to take major advantage of the OS and
which comes with a host of different servers which allows for building, deploying,
managing and maintaining Windows Based solutions. The Windows Server System
is designed with performance as priority and it provides scalability, reliability.

The advantage of VB.NET includes


  Rapid Application Development (RAD) Support. 
 Powerful Windows-based Applications 
 Simplified Deployment 
  Powerful, Flexible, Simplified Data Access 
 Improved Coding 
 Direct Access to the OS Platform 
 Object-Oriented Constructs 
 COM Interoperability 

Back End
1. MS Access

Why MS Access?
MS Access is desktop RDMS support small application with all features like
relational query, different data types, joins, and query. Includes
 Easy to use and easy to deployment. 
  Integration with Windows OS 
 Scalability 
 Import and Export of data in all major database system. 
 Centralized Management 
  Reliability 
 Automating Tasks 

15 | P a g e
Development Environment
1. Visual Studio 6.0
2. Microsoft Office

Design Goals and Constraints


Performance
No more than 5-percent degradation in average query response is allowed while
all concurrent users are using the system.

Processor utilization should not exceed 80 percent during all concurrent users are using
the system.

Availability
Because the system is accessed by users of the bank and staff for customer query, and
their should not be any single point of failure.

Reliability
Because of the need no single point failure, automatic failover will be required. In addition,
existing disaster recovery and backup plans and procedures must be revised to
incorporate the Railway Reservation System.

Scalability
Railway Reservation System an average load of 25 concurrent users after the system is
fully operational, and expects that to grow by 5 percent each year for the next five years.

Security
For the sensitive member information, all users will need to log on the system with their
user id and password.

Every resource in the system are defined by the role and privileged. System administrator
assigned user role and privileged for their access rights.

Interoperability
In Version 1.0 of the Railway Reservation System, there are no requirements
for interoperability with other systems.

Location
The Railway Reservation System is implemented in banks existing network.

Setup/Installation
Setup and installation must not interrupt the system user’s daily tasks and work flow.

16 | P a g e
Use Case
Manage Users
Description
This function will enable administrator to modify user information.

Business Need
This function will enable system users to interact with Railway Reservation System
catalog directly without the intervention of any other employees.

Priority
Medium

Manage Reservation
Description
This function allows user of Railway Reservation System to create new ticket reservation.

Business Need
This function will support the system users to create new reservation

Priority
High

Manage Cancellation

Description
This function enables the user to cancel ticket.

Business Need
This function enables user of Railway Reservation System to have enter PRN no and
cancel ticket.

Priority
High

17 | P a g e
PRN Query
Description
This function allows system user query to database for ticket information.

Business Need
This function will allow user to retrieve the latest ticket. Information by providing PRN no

Priority
High

Use Case : Manage Users


Title: Manage Users
Abbreviated Title: Manage Users
Requirement ID: 21

Intent

Manage the user information; modify the contact details of a user.

Scenario Narrative
Administrator may want to modify the contact details of a user.

Assumptions/Preconditions

 System users have access rights to view user data. 

Actors

 Administrator 

Basic Course

 Use case begins when the actor decides to modify user information. 
  System opens the user master information. 
 Actor navigates the required information from. 
  Actor press Edit button and make the necessary changes in the record. 
 Actor press Save button to save the record in the user master catalog. 
 Use case ends when the selected information is passed to a method of delivery. 

18 | P a g e
Alternate Course

  If no appropriate user information, system reports this fact. 


 Use case restarts to enable users to update the type of user information. 

Future Requirements

  The system users may want to apply filters to the retrieved data. 
 The system users may want to sort the data. For example, the system user want to list
the names of user in chronological order based on the entry date. 

Use Case Model: Manage Users

User Master Modify Details


Administrator

Update Master

Apply
Validation
Navigate Users

19 | P a g e
Use Case Manage Reservation
Title: Manage Reservation
Abbreviated Title: Manage Reservation
Requirement ID: 13

Intent

Enable actor to create new reservation.

Scenario Narrative

Actors want to create new reservation

Assumptions/Preconditions

 The actor has rights to access to the Railway Reservation System, and having rights to make
new reservation. 

Actors

  User 
  Supervisor 
 Administrator 

Basic Course:

  Use case begins when actor decides create new reservation. 


  The system displays new reservation screen. 
 Actor supply all the required details like train no, journey date, station code,
 passenger details. 
  System validates all the information. 
  System generates PRN no, new seat no and coach no, calculate ticket fare. 
  System asks for user confirmation. 
 Actor confirms the ticket. 
 Use case ends when information is presented to the correct method of delivery. 

20 | P a g e
Use Case Model: Manage Reservation

Check train
schedule
Validation
User

Add Train No,


Journey details

Transaction

Add passenger
details
Supervisor

Administrator

21 | P a g e
Use Case Manage Cancellation
Title: Manage Cancellation
Abbreviated Title: Manage Cancellation
Requirement ID: 16

Intent

Enable actor to cancel the ticket..

Scenario Narrative

An actor wants to cancel ticket.

Assumptions/Preconditions

 The actor has rights to access to the Railway Reservation System, and having rights to cancel
ticket. 

Actor

  User 
  Supervisor 
 Administrator 

Basic Course:

  Use case begins when actor decides to cancel ticket. 


  Actor enters PRN No. 
  System validates PRN no. 
  Systems displays reservation details, calculate cancellation fees. 
  System asks for confirmation. 
  Actor confirms cancellation. 
  System update the database: 
 Use case ends when information is presented to the correct method of delivery. 

22 | P a g e
Use Case Model: Manage Cancellation

Enter PRN No

Reservation
User Deatils

Validate the
PRN No

Cancellation
Rule
Calculate
Cancellation

Ask for Fees Master


confirmation

Transcation
Update Details

23 | P a g e
Use Case PRN Query
Title: PRN Query
Abbreviated Title: PRN Query
Requirement ID: 19

Intent

Enable actor to query the database for latest ticket information.

Scenario Narrative

An actor wants view the details of reservation by supplying PRN no.

Assumptions/Preconditions

 The actor has rights to access to the Railway Reservation System, and having rights to
query the database for reservation details. 

Actors

  User 
 Supervisor 

Basic Course:

  Use case begins when actor want to view the reservation details. 
  Actor enters PRN no. 
  System validates PRN no. 
 Systems displays latest information related to reservation, seat no coach no.. 

24 | P a g e
Railway Reservation System Data Dictionary

Table : cancellation_rules

Owner: dbo
Destination DB name: erail
Number of columns: 4
Number of indexes: 1
Number of foreign keys: 0
Extended attributes:
OnFileGroup PRIMARY
Clustered PK Yes

Columns Data type Allow NULLs Value/range


can_id Number Not allowed
before_24h Number Not allowed
before_12h Number Not allowed
before_1h Number Not allowed

Indexes Type Columns


PK_cancellation_rules_can_id clustered, unique, primary key can_id
located on PRIMARY

Table : cash_master

Owner: dbo
Destination DB name: erail
Number of columns: 6
Number of indexes: 2
Number of foreign keys: 1
Extended attributes:
OnFileGroup PRIMARY
Clustered PK Yes

Columns Data type Allow NULLs Value/range


cash_id Number Not allowed
prn_no Number Not allowed
amount_received Number Not allowed
amount_refund Number Not allowed
trn_date Date/Time Not allowed
trn_by Number Not allowed

Indexes Type Columns


PK_cash_master_cash_id clustered, unique, primary key cash_id
located on PRIMARY
IX_cash_master_ prn_no nonclustered located on prn_no
PRIMARY

25 | P a g e
Table : coach_type_master

Owner: dbo
Destination DB name: erail
Number of columns: 1
Number of indexes: 1
Number of foreign keys: 0
Extended attributes:
OnFileGroup PRIMARY
Clustered PK Yes

Columns Data type Allow NULLs Value/range


coach_type Text Not allowed

Indexes Type Columns


PK_coach_type_master_coach_type clustered, unique, primary key coach_type
located on PRIMARY

Table : other_fees

Owner: dbo
Destination DB name: erail
Number of columns: 3
Number of indexes: 2
Number of foreign keys: 1
Extended attributes:
OnFileGroup PRIMARY
Clustered PK Yes

Columns Data type Allow NULLs Value/range


coach_type Number Not allowed
re_fess Number Not allowed
sf_fees Number Not allowed

Indexes Type Columns


PK_other_fees_master_coach_type clustered, unique, primary key coach_type
located on PRIMARY

26 | P a g e
Table : reservation_master

Owner: dbo
Destination DB name: erail
Number of columns: 15
Number of indexes: 3
Number of foreign keys: 2
Extended attributes:
OnFileGroup PRIMARY
Clustered PK Yes

Columns Data type Allow NULLs Value/range


prn_no Number Not allowed
train_no Number Not allowed
coach_type Text Not allowed
journey_date Date/Time Not allowed
from_station Number Not allowed
to_station Number Not allowed
boarding_at Number Not allowed
re_fees Number Not allowed
sf_fees Number Not allowed
ti_fees Number Not allowed
cancel_fees Number Not allowed
create_by Number Not allowed
create_date Date/Time Not allowed
cancel_by Number Allowed
cancel_date Date/Time Allowed

Indexes Type Columns


PK_reservation_master_ prn_no clustered, unique, primary key prn_no
located on PRIMARY
IX_reservation_master_train_no nonclustered located on train_no
PRIMARY
IX_reservation_master_coach_type nonclustered located on coach_type
PRIMARY

27 | P a g e
Table : reservation_transaction

Owner: dbo
Destination DB name: erail
Number of columns: 9
Number of indexes: 2
Number of foreign keys: 1
Extended attributes:
OnFileGroup PRIMARY
Clustered PK Yes

Columns Data type Allow NULLs Value/range


trn_id Number Not allowed
prn_no Text Not allowed
p_name Text Not allowed
p_gender Text Not allowed
p_age Number Not allowed
Coach Text Not allowed
seat_no Text Allowed
confirm Text Allowed
is_cancel Text Allowed

Indexes Type Columns


PK_reservation_master_trn_id clustered, unique, primary key Trn_id
located on PRIMARY
IX_reservation_transaction_ prn_no nonclustered located on prn_no
PRIMARY

Table : stage_master

Owner: dbo
Destination DB name: erail
Number of columns: 5
Number of indexes: 2
Number of foreign keys: 1
Extended attributes:
OnFileGroup PRIMARY
Clustered PK Yes

Columns Data type Allow NULLs Value/range


stage_id Number Not allowed
coach_type Text Not allowed
dis_from Number Not allowed
dis_upto Number Not allowed
ticket_amount Number Not allowed

Indexes Type Columns


PK_stage_master_stage_id clustered, unique, primary key stage_id
located on PRIMARY
IX_stage_master_ coach_type nonclustered located on coach_type
PRIMARY

28 | P a g e
Table: station_master

Owner: dbo
Destination DB name: erail
Number of columns: 4
Number of indexes: 1
Number of foreign keys: 0
Extended attributes:
OnFileGroup PRIMARY
Clustered PK Yes

Columns Data type Allow NULLs Value/range


station_id Number Not allowed
station_code Text Not allowed
station_name Text Not allowed
railway_type Text Not allowed

Indexes Type Columns


PK_station_master_station_id clustered, unique, primary key Station_id
located on PRIMARY

Table : train_master

Owner: dbo
Destination DB name: erail
Number of columns: 11
Number of indexes: 1
Number of foreign keys: 0
Extended attributes:
OnFileGroup PRIMARY
Clustered PK Yes

Columns Data type Allow NULLs Value/range


train_no Number Not allowed
train_name Text Not allowed
train_typ Text Not allowed
schedule Text Not allowed
A1 Number Not allowed
A2 Number Not allowed
A3 Number Not allowed
SL Number Not allowed
GN Number Not allowed
GL Number Not allowed
AR Number Not allowed

Indexes Type Columns


PK_train_master_ train_no clustered, unique, primary key Train_no
located on PRIMARY

29 | P a g e
Table : train_schedule
Owner: dbo
Destination DB name: erail
Number of columns: 7
Number of indexes: 2
Number of foreign keys: 1
Extended attributes:
OnFileGroup PRIMARY
Clustered PK Yes

Columns Data type Allow NULLs Value/range


schedule_id Number Not allowed
train_no Number Not allowed
station_id Number Not allowed
distance Number Not allowed
arival_time Date/Time Not allowed
departure_time Date/Time Not allowed
day Number Not allowed

Indexes Type Columns


PK_train_schedule_schedule_id clustered, unique, primary key schedule_id
located on PRIMARY
IX_stage_master_train_no nonclustered located on train_no
PRIMARY

Table : user_master

Owner: dbo
Destination DB name: data
Number of columns: 16
Number of indexes: 2
Number of foreign keys: 0
Extended attributes:
OnFileGroup PRIMARY
Clustered PK Yes

Columns Data type Allow NULLs Value/range


user_id Number Not allowed
user_name Text Not allowed
user_password Text Not allowed
user_type Text Not allowed
user_active Number Not allowed
user_department Text Not allowed
user_desgination Text Allowed
user_dob Text Allowed
user_address Text Allowed
user_contact_no Text Allowed
user_email_id Text Allowed
create_date Date/Time Not allowed
create_by Number Not allowed
last_pass_chg_date Date/Time Not allowed
last_login1 Date/Time Not allowed
last_login2 Date/Time Not allowed

Indexes Type Columns


PK_user_master_user_id clustered, unique, primary key user_id
located on PRIMARY
IX_ user_master_user_name nonclustered located on User_name

30 | P a g e
Railway Reservation System– Data Schema ER Diagram

31 | P a g e
Railway Reservation System : Main Screen

FrmMain

32 | P a g e
Option Explicit

Private Sub MDIForm_Activate() If


CheckStartForm = False Then
CheckStartForm = True
frmStart.Show 1
End If

End Sub

Private Sub MDIForm_Load()


If FirstLoin = True Then
Dim OldCap As String
OldCap = FrmChangePassword.Caption
FrmChangePassword.Caption = "LMS :: CHANGE YOUR DEFAULT PASSWORD ... FOR FIRST TIME LOGIN"
FrmChangePassword.Show 1

FrmChangePassword.Caption = OldCap
FirstLoin = False
End If

StatusBar1.Panels(1).Text = UserName
StatusBar1.Panels(2).Text = Now
End Sub

Private Sub Timer1_Timer()


StatusBar1.Panels(2).Text = Now
End Sub

Private Sub Toolbar1_ButtonClick(ByVal Button As MSComctlLib.Button)


'>>> open diffrent forms
If Button.Key = "users" Then
If UserType = "ADMIN" Then
FrmUsers.Show 1
Else
MsgBox "You don't have access rights to user master.", vbExclamation
Exit Sub
End If

ElseIf Button.Key = "changepassword" Then


FrmChangePassword.Show 1
ElseIf Button.Key = "user" Then
If UserType = "USER" Then
MsgBox "You are not authorized to view deatils.", vbExclamation, vbExclamation
Exit Sub
End If

33 | P a g e
Railway Reservation System : Train Schedule

FrmTrainSchedule

34 | P a g e
Option Explicit
Dim Rs1 As New ADODB.Recordset
Dim AddEdit As String
Private Sub ChkViewAll_Click()

'>>> pass parameter to view all form

StrViewAll = "SELECT train_schedule.schedule_id, train_schedule.train_no,


station_master.station_code, station_master.station_name, train_schedule.distance,
train_schedule.arival_time, train_schedule.departure_time, train_schedule.day " _
& " FROM station_master INNER JOIN train_schedule ON station_master.station_id =
train_schedule.station_id view_all_filter order by schedule_id "

StrViewAllFilter = "select train_no from train_master "


StrFilterField = "train_no"
ViewQrNumeric = "N"

FrmViewAll.LblCap.Caption = "View all schedule"


FrmViewAll.LblFilter.Caption = "Filter by train no :"
IntViewID = 0
FrmViewAll.Show 1

'>>>check view id if any id return from the


grid '>>> get the record
If IntViewID > 0 Then
Dim p As Integer
Rs1.Find "schedule_id = " & IntViewID

p = Rs1.AbsolutePosition
'>> Rs1.Requery
Rs1.MoveFirst Rs1.Move
p-1
Call displayRecord

End If
End Sub

Private Sub Command1_Click()


'>>> close form
Unload Me
End Sub

Private Sub Command11_Click()


'>>> delete current record
'>>> only admin user can delete record
If CheckAdminValid(UserType) = False Then Exit Sub

If Rs1.State = adStateClosed Then Exit Sub


If Rs1.RecordCount <= 0 Then Exit Sub

On Error GoTo myer1


'>>> confirm before delete

35 | P a g e
If MsgBox("Delete the Record ? ", vbCritical + vbYesNo) = vbYes Then
Rs1.Delete
Call ClearText
'>>> show next record
Command4_Click
End If
Exit
Sub myer1:
MsgBox "Error Occured : " & Err.Description,
vbCritical End Sub

Private Sub Command2_Click()


'>>> move record set to first record and display the record
On Error Resume Next
If Rs1.State = adStateClosed Then Exit Sub
If Rs1.RecordCount <= 0 Then Exit Sub
Rs1.MoveFirst
Call displayRecord
End Sub

Private Sub Command3_Click()


'>>> move record set back and display the
record On Error Resume Next
If Rs1.State = adStateClosed Then Exit Sub
If Rs1.RecordCount <= 0 Then Exit Sub
'>>> check for recordset position
If Rs1.AbsolutePosition > 1
Then Rs1.MovePrevious
Else
MsgBox "First Record ..", vbInformation

Rs1.MoveFirst
End If
Call displayRecord

End Sub

Private Sub Command4_Click()


'>>> move record set next and display the record
On Error Resume Next
If Rs1.State = adStateClosed Then Exit Sub
If Rs1.RecordCount <= 0 Then Exit Sub
'>>> check for recordset position
If Rs1.AbsolutePosition < Rs1.RecordCount Then
Rs1.MoveNext
Else
MsgBox "Last Record ..", vbInformation

Rs1.MoveLast
End If
Call displayRecord

End Sub

36 | P a g e
Private Sub Command5_Click()
'>>> move record set to last record and display the record
On Error Resume Next
If Rs1.State = adStateClosed Then Exit Sub
If Rs1.RecordCount <= 0 Then Exit Sub
Rs1.MoveLast
Call displayRecord

End Sub

Private Sub Command6_Click()


'>>> add new record
'>>> set flag to add
'>>> clear all fields
If Rs1.State = adStateClosed Then Exit Sub

AddEdit = "ADD"
Call ClearText
DE False, True
CmbTrainNo.SetFocus
End Sub

Private Sub Command7_Click()


'>>> edit the current record
'>>> set flag to edit
If Rs1.State = adStateClosed Then Exit Sub
If Rs1.RecordCount <= 0 Then Exit Sub

AddEdit = "EDIT"
DE False, True
CmbTrainNo.SetFocus
End Sub

Private Sub Command8_Click()


'>>> update the record
'>>> check the flag
If Rs1.State = adStateClosed Then Exit Sub

''On Error GoTo myer1


'>>> valdation

If Trim(CmbTrainNo.Text) = "" Then


MsgBox "Select train no.", vbExclamation
CmbTrainNo.SetFocus
Exit Sub
End If

If Trim(CmbStation.Text) = "" Then


MsgBox "Select station.", vbExclamation
CmbStation.SetFocus
Exit Sub
End If

37 | P a g e
If IsNumeric(TxtDistance.Text) = False Then
MsgBox "Enter distance", vbExclamation
TxtDistance.SetFocus
Exit Sub
End If

If IsNumeric(TxtDay.Text) = False Then


MsgBox "Enter day", vbExclamation
TxtDay.SetFocus
Exit Sub
End If

'>>> check the add edit flag


If AddEdit = "ADD" Then
Dim LastSno As Integer
Dim Rs2 As New ADODB.Recordset
If Rs2.State = 1 Then Rs2.Close
Rs2.Open "select max(schedule_id) from train_schedule", Cn, adOpenStatic,
adLockReadOnly LastSno = IIf(IsNull(Rs2(0).Value) = True, 0, Rs2(0).Value) + 1

Rs1.AddNew
Rs1("schedule_id") = LastSno
Rs1("train_no") = Val(CmbTrainNo.Text)
Rs1("station_id") = ReturnText("select station_id from station_master where station_code ='"
& CmbStation.Text & "'")
Rs1("distance") = Val(TxtDistance.Text)
Rs1("arival_time") = DtArrivalTime.Value
Rs1("departure_time") = DtDepartureTime.Value
Rs1("day") = Val(TxtDay.Text)

Rs1.Update
Rs1.MoveLast Call
displayRecord
Else
Rs1("train_no") = Val(CmbTrainNo.Text)
Rs1("station_id") = ReturnText("select station_id from station_master where station_code ='"
& CmbStation.Text & "'")
Rs1("distance") = Val(TxtDistance.Text)
Rs1("arival_time") = DtArrivalTime.Value
Rs1("departure_time") = DtDepartureTime.Value
Rs1("day") = Val(TxtDay.Text)

Rs1.Update Dim
p As Integer
p = Rs1.AbsolutePosition
Rs1.Requery
Rs1.MoveFirst Rs1.Move
p-1
Call displayRecord
End If

38 | P a g e
DE True, False
Exit Sub
myer1:
MsgBox "Error Occured : " & Err.Description,
vbCritical End Sub

Private Sub Command9_Click()


DE True, False
End Sub

Private Sub Form_Load()


Me.Move (Screen.Width - Width) / 2, (Screen.Height - Height) / 2
ClearText

'>>> fill train no


FillCombo "select train_no from train_master order by train_no", CmbTrainNo

'>>> fill station


FillCombo "select station_code from station_master order by station_code", CmbStation

If Rs1.State = adStateOpen Then Rs1.Close


Rs1.Open "select * from train_schedule order by schedule_id ", Cn, adOpenDynamic, adLockOptimistic
If Rs1.RecordCount > 0 Then
Rs1.MoveFirst Call
displayRecord
End If
DE True, False

End Sub

Private Sub ClearText()


TxtScheduleID.Text = ""
CmbTrainNo.Text = ""
CmbStation.Text = ""
TxtDistance.Text = 0
TxtDay.Text = 1

End Sub

Private Sub displayRecord()

On Error Resume Next

TxtScheduleID.Text = IIf(IsNull(Rs1("schedule_id")) = True, "", Rs1("schedule_id"))


CmbTrainNo.Text = IIf(IsNull(Rs1("train_no")) = True, "", Rs1("train_no"))
CmbStation.Text = ReturnText("select station_code from station_master where station_id ="
& Rs1("station_id"))
TxtDistance.Text = IIf(IsNull(Rs1("distance")) = True, "0", Rs1("distance"))
DtArrivalTime.Value = IIf(IsNull(Rs1("arival_time")) = True, Time, Rs1("arival_time"))
DtDepartureTime.Value = IIf(IsNull(Rs1("departure_time")) = True, Time, Rs1("departure_time"))
TxtDay.Text = IIf(IsNull(Rs1("day")) = True, "0", Rs1("day"))

39 | P a g e
Railway Reservation System : Reservation

FrmReservation

Option Explicit

Dim Rs1 As New ADODB.Recordset


Dim Rs2 As New ADODB.Recordset
Private Sub CmbTrainNo_Change()

40 | P a g e
FillCombo "SELECT station_master.station_code FROM station_master INNER JOIN train_schedule ON
station_master.station_id = train_schedule.station_id where train_schedule.train_no =" & Val(CmbTrainNo.Text)
& " order by station_master.station_id", CmbStationFrom
FillCombo "SELECT station_master.station_code FROM station_master INNER JOIN train_schedule ON
station_master.station_id = train_schedule.station_id where train_schedule.train_no =" & Val(CmbTrainNo.Text)
& " order by station_master.station_id", CmbUpto
FillCombo "SELECT station_master.station_code FROM station_master INNER JOIN train_schedule ON
station_master.station_id = train_schedule.station_id where train_schedule.train_no =" &
Val(CmbTrainNo.Text) & " order by station_master.station_id", CmbBoardingAt

LblTrainName.Caption = ReturnText("select train_name from train_master where train_no ="


& Val(CmbTrainNo.Text))
End Sub

Private Sub CmbTrainNo_Click()


FillCombo "SELECT station_master.station_code FROM station_master INNER JOIN train_schedule ON
station_master.station_id = train_schedule.station_id where train_schedule.train_no =" &
Val(CmbTrainNo.Text) & " order by station_master.station_id", CmbStationFrom
FillCombo "SELECT station_master.station_code FROM station_master INNER JOIN train_schedule ON
station_master.station_id = train_schedule.station_id where train_schedule.train_no =" &
Val(CmbTrainNo.Text) & " order by station_master.station_id", CmbUpto
FillCombo "SELECT station_master.station_code FROM station_master INNER JOIN train_schedule ON
station_master.station_id = train_schedule.station_id where train_schedule.train_no =" &
Val(CmbTrainNo.Text) & " order by station_master.station_id", CmbBoardingAt

LblTrainName.Caption = ReturnText("select train_name from train_master where train_no ="


& Val(CmbTrainNo.Text))
End Sub

Private Sub CmdCheck_Click()


'>>> validation for all details entered to check the status
'>>> check journey date
'>>> it should be less than 90 days.
If DateDiff("d", Now, DtJourneyDate.Value) > 90 Then
MsgBox "Check journey date, it shoud be less than 90 days.", vbExclamation
DtJourneyDate.SetFocus
Exit Sub
End If

If DtJourneyDate.Value < Date Then


MsgBox "Journey date must not less than the current date.", vbExclamation
DtJourneyDate.SetFocus
Exit Sub
End If
If CheckListValue(CmbTrainNo.Text, CmbTrainNo) = False Then
MsgBox "Select train no.", vbExclamation
CmbTrainNo.SetFocus
Exit Sub
End If
If CheckListValue(CmbCoachType.Text, CmbCoachType) = False Then
MsgBox "Select coach type.", vbExclamation
CmbCoachType.SetFocus
Exit Sub
End If

41 | P a g e
If CheckListValue(CmbStationFrom.Text, CmbStationFrom) = False Then
MsgBox "Select station from.", vbExclamation
CmbStationFrom.SetFocus
Exit Sub
End If

If CheckListValue(CmbUpto.Text, CmbUpto) = False Then


MsgBox "Select station upto.", vbExclamation
CmbUpto.SetFocus
Exit Sub
End If

If CheckListValue(CmbBoardingAt.Text, CmbBoardingAt) = False Then


MsgBox "Select boarding at.", vbExclamation
CmbBoardingAt.SetFocus
Exit Sub
End If

'>>> check wheather train start this day from schedule

Dim AvaialbaleCaoch As Integer


If Rs1.State = 1 Then Rs1.Close
Rs1.Open "select * from train_master where train_no =" & Val(CmbTrainNo.Text), Cn,
adOpenStatic, adLockReadOnly
If Rs1.RecordCount > 0 Then
'>>> display train name
LblTrainName.Caption = Rs1("train_name")

Dim a() As String


a = Split(Rs1("schedule"), "|")
Dim Jday As String
Dim Ch As Boolean
Ch = True
Jday = UCase(Format(DtJourneyDate.Value, "DDD"))
If Jday = "MON" Then
If a(0) = 0 Then
Ch =
False End If
End If
If Jday = "TUE" Then
If a(1) = 0 Then
Ch =
False End If
End If
If Jday = "WED" Then
If a(2) = 0 Then
Ch =
False End If
End If
If Jday = "THU" Then
If a(3) = 0 Then
Ch =
False End If

42 | P a g e
End If
If Jday = "FRI" Then
If a(4) = 0 Then
Ch = False
End If
End If
If Jday = "SAT" Then
If a(5) = 0 Then
Ch = False
End If
End If
If Jday = "SUN" Then
If a(6) = 0 Then
Ch = False
End If
End If
If Ch = False Then
MsgBox "Selected Train not start in " & Format(DtJourneyDate.Value, "Dddd"), vbExclamation
Exit Sub
End If

'>>> get the no of coach


AvaialbaleCaoch = Rs1(CmbCoachType.Text)

Else
MsgBox "No Details found for the selected train no.", vbExclamation
LblTrainName.Caption = ""
CmbTrainNo.SetFocus
Exit Sub
End If

'>>> check for available seat


'>>> get the coach type
'>>> get the no of coach from train master
'>>> get the no of seats by mutiple coach no * no of seats
'>>> get the already booked seat for the date

If AvaialbaleCaoch <= 0 Then


MsgBox CmbCoachType.Text & " coach not availavle in train " & CmbTrainNo.Text,
vbExclamation CmbCoachType.SetFocus
Exit Sub
End If

Dim TotalSeat As Integer


If CmbCoachType.Text = "A1" Then
TotalSeat = AvaialbaleCaoch * 36
ElseIf CmbCoachType.Text = "A2" Then
TotalSeat = AvaialbaleCaoch * 54
Else
TotalSeat = AvaialbaleCaoch * 74
End If

43 | P a g e
'>>> get the count already booked
If Rs1.State = 1 Then Rs1.Close
Rs1.Open "select count(*) from reservation_master where format(journey_date,'dd-MMM-yy')='" &
Format(DtJourneyDate.Value, "dd-MMM-yy") & "' and coach_type ='" & CmbCoachType.Text & "'", Cn,
adOpenStatic, adLockReadOnly
MsgBox TotalSeat - Rs1(0) & " seats are available.", vbExclamation
Exit Sub

End Sub

Private Sub Command2_Click()


'>>> clear all
ClearText
End Sub

Private Sub Command3_Click()


'>>> save the record
'>>> validate details again
'>>> populate the data, and confirm before save.

'>>> validate

'>>> validation for all details entered to check the status


'>>> check journey date
'>>> it should be less than 90 days.
If DateDiff("d", Now, DtJourneyDate.Value) > 90 Then
MsgBox "Check journey date, it shoud be less than 90 days.", vbExclamation
DtJourneyDate.SetFocus
Exit Sub
End If

If DtJourneyDate.Value < Date Then


MsgBox "Journey date must not less than the current date.", vbExclamation
DtJourneyDate.SetFocus
Exit Sub
End If
If CheckListValue(CmbTrainNo.Text, CmbTrainNo) = False Then
MsgBox "Select train no.", vbExclamation
CmbTrainNo.SetFocus
Exit Sub
End If
If CheckListValue(CmbCoachType.Text, CmbCoachType) = False Then
MsgBox "Select coach type.", vbExclamation
CmbCoachType.SetFocus
Exit Sub
End If

If CheckListValue(CmbStationFrom.Text, CmbStationFrom) = False Then


MsgBox "Select station from.", vbExclamation
CmbStationFrom.SetFocus
Exit Sub
End If

44 | P a g e
If CheckListValue(CmbUpto.Text, CmbUpto) = False Then
MsgBox "Select station upto.", vbExclamation
CmbUpto.SetFocus
Exit Sub
End If

If CheckListValue(CmbBoardingAt.Text, CmbBoardingAt) = False Then


MsgBox "Select boarding at.", vbExclamation
CmbBoardingAt.SetFocus
Exit Sub
End If

'>>> check wheather train start this day from schedule

Dim AvaialbaleCaoch As Integer


If Rs1.State = 1 Then Rs1.Close
Rs1.Open "select * from train_master where train_no =" & Val(CmbTrainNo.Text), Cn,
adOpenStatic, adLockReadOnly
If Rs1.RecordCount > 0 Then
'>>> display train name
LblTrainName.Caption = Rs1("train_name")

Dim a() As String


a = Split(Rs1("schedule"), "|")
Dim Jday As String
Dim Ch As Boolean
Ch = True
Jday = UCase(Format(DtJourneyDate.Value, "DDD"))
If Jday = "MON" Then
If a(0) = 0 Then
Ch =
False End If
End If
If Jday = "TUE" Then
If a(1) = 0 Then
Ch =
False End If
End If
If Jday = "WED" Then
If a(2) = 0 Then
Ch =
False End If
End If
If Jday = "THU" Then
If a(3) = 0 Then
Ch =
False End If
End If
If Jday = "FRI" Then
If a(4) = 0 Then
Ch =
False End If

45 | P a g e
End If
If Jday = "SAT" Then
If a(5) = 0 Then
Ch = False
End If
End If
If Jday = "SUN" Then
If a(6) = 0 Then
Ch = False
End If
End If
If Ch = False Then
MsgBox "Selected Train not start in " & Format(DtJourneyDate.Value, "Dddd"), vbExclamation
Exit Sub
End If

'>>> get the no of coach


AvaialbaleCaoch = Rs1(CmbCoachType.Text)

Else
MsgBox "No Details found for the selected train no.", vbExclamation
LblTrainName.Caption = ""
CmbTrainNo.SetFocus
Exit Sub
End If

'>>> check for available seat


'>>> get the coach type
'>>> get the no of coach from train master
'>>> get the no of seats by mutiple coach no * no of seats
'>>> get the already booked seat for the date

If AvaialbaleCaoch <= 0 Then


MsgBox CmbCoachType.Text & " coach not availavle in train " & CmbTrainNo.Text,
vbExclamation CmbCoachType.SetFocus
Exit Sub
End If

Dim TotalSeat As Integer


If CmbCoachType.Text = "A1" Then
TotalSeat = AvaialbaleCaoch * 36
ElseIf CmbCoachType.Text = "A2" Then
TotalSeat = AvaialbaleCaoch * 54
Else
TotalSeat = AvaialbaleCaoch * 74
End If

'>>> get the count already booked


If Rs1.State = 1 Then Rs1.Close
Rs1.Open "select count(*) from reservation_master where format(journey_date,'dd-MMM-yy')='" &
Format(DtJourneyDate.Value, "dd-MMM-yy") & "' and coach_type ='" & CmbCoachType.Text & "'", Cn,
adOpenStatic, adLockReadOnly

46 | P a g e
If MsgBox(TotalSeat - Rs1(0) & " seats are available. Do you want to continue?", vbExclamation + vbYesNo)
= vbNo Then
Exit Sub
End If

'>>> validate the passenger deatils


Dim i As Integer
Dim c As Integer
c=0
For i = 0 To 5
If Trim(TxtPassenger(i).Text) <> ""
Then c = c + 1
End
If Next
If c <= 0 Then
MsgBox "Enter Passenger deatils.", vbExclamation
TxtPassenger(0).SetFocus
Exit Sub
End If
'>>> check other validation, age.male feamale
For i = 0 To c - 1
If Val(TxtAge(i)) <= 0 Then
MsgBox "Enter age of the pasenger.", vbExclamation
TxtAge(i).SetFocus
Exit Sub
End If

If CheckListValue(CmbSex(i).Text, CmbSex(i)) = False Then


MsgBox "Select gender of the passenger.", vbExclamation
CmbSex(i).SetFocus
Exit Sub
End If
Next

'>>> calculate other fare


If Rs1.State = 1 Then Rs1.Close
Rs1.Open "select * from other_fees where coach_type ='" & CmbCoachType.Text & "'", Cn,
adOpenStatic, adLockReadOnly
If Rs1.RecordCount > 0 Then
TxtReservationFees.Text = Rs1("re_fess")
TxtSuperFastFees.Text = Rs1("sf_fees")
End If

'>>> calcluate ticket fare


'>>> get the distance between two station
Dim StartDistanace As Integer
Dim EndDistance As Integer
Dim TicketFare As Integer

If Rs1.State = 1 Then Rs1.Close


Rs1.Open "select distance from train_schedule where train_no =" & Val(CmbTrainNo.Text) & " and station_id
= (select station_id from station_master where station_code='" & CmbStationFrom.Text & "')", Cn,
adOpenStatic, adLockReadOnly
If Rs1.RecordCount > 0 Then
StartDistanace = Rs1(0)
Else
47 | P a g e
Rs1.Open "select distance from train_schedule where train_no =" & Val(CmbTrainNo.Text) & " and station_id
= (select station_id from station_master where station_code='" & CmbUpto.Text & "')", Cn, adOpenStatic,
adLockReadOnly
If Rs1.RecordCount > 0 Then
EndDistance = Rs1(0)
Else
MsgBox "Selected station not found in the train schedule.", vbExclamation
CmbUpto.SetFocus
Exit Sub
End If

Dim TotalDistance As Integer


TotalDistance = EndDistance - StartDistanace
If TotalDistance <= 0 Then
MsgBox "Select strat station and end station properly.",
vbExclamation CmbStationFrom.SetFocus
Exit Sub
End If
'>>> get the fare from stage_master
table If Rs1.State = 1 Then Rs1.Close
Rs1.Open "select * from stage_master where coach_type='" & CmbCoachType.Text & "' order by stage_id ",
Cn, adOpenStatic, adLockReadOnly
If Rs1.RecordCount > 0 Then

Rs1.MoveFirst
For i = 0 To Rs1.RecordCount
If TotalDistance > Rs1("dis_from") And TotalDistance <= Rs1("dis_upto") Then
TicketFare = Rs1("ticket_amount")
Exit For
End If

Rs1.MoveNext
Next
Else
MsgBox "No fare details found for the train.", vbExclamation
Exit Sub
End If

TxtTotalFees.Text = TicketFare * c + Val(TxtReservationFees.Text) + Val(TxtSuperFastFees.Text)

'>>> save the record


'>>> open the transaction to hold, for final confirmation
Cn.BeginTrans

Dim PrnID As Integer


If Rs1.State = 1 Then Rs1.Close
Rs1.Open "select max(prn_NO) from reservation_master", Cn, adOpenStatic,
adLockReadOnly PrnID = IIf(IsNull(Rs1(0)) = True, 0, Rs1(0)) + 1
TxtPrnNo.Text = PrnID

48 | P a g e
Dim TrnId As Integer
If Rs1.State = 1 Then Rs1.Close
Rs1.Open "select max(trn_id) from reservation_transaction ", Cn, adOpenStatic, adLockReadOnly
TrnId = IIf(IsNull(Rs1(0)) = True, 0, Rs1(0)) + 1

Dim CashId As Integer


If Rs1.State = 1 Then Rs1.Close
Rs1.Open "select max(cash_id) from cash_master ", Cn, adOpenStatic, adLockReadOnly
CashId = IIf(IsNull(Rs1(0)) = True, 0, Rs1(0)) + 1

'>>> save in reservation master


If Rs1.State = 1 Then Rs1.Close
Rs1.Open "select * from reservation_master where 1=2 ", Cn, adOpenDynamic, adLockOptimistic
Rs1.AddNew
Rs1("prn_no") = PrnID
Rs1("train_no") = Val(CmbTrainNo.Text)
Rs1("coach_type") = CmbCoachType.Text
Rs1("journey_date") = DtJourneyDate.Value
Rs1("from_station") = Val(ReturnText("select station_id from station_master where station_code='" &
CmbStationFrom.Text & "'"))
Rs1("to_station") = Val(ReturnText("select station_id from station_master where station_code='" &
CmbUpto.Text & "'"))
Rs1("boarding_at") = Val(ReturnText("select station_id from station_master where station_code='" &
CmbBoardingAt.Text & "'"))
Rs1("re_fees") = Val(TxtReservationFees.Text)
Rs1("sf_fees") = Val(TxtSuperFastFees.Text)
Rs1("ti_fees") = Val(TxtTotalFees.Text)
Rs1("cancel_fees") = 0
Rs1("create_by") = UserID
Rs1("create_date") = Now
Rs1.Update

'>>> save in reservation transaction If


Rs1.State = 1 Then Rs1.Close
Rs1.Open "select * from reservation_transaction where 1=2 ", Cn, adOpenDynamic, adLockOptimistic
For i = 0 To c - 1
Rs1.AddNew
Rs1("trn_id") = TrnId
Rs1("prn_no") = PrnID
Rs1("p_name") = TxtPassenger(i).Text
Rs1("p_gender") = CmbSex(i).Text
Rs1("p_age") = TxtAge(i).Text
Rs1("confirm") = "Y"
'>>> get coach /seat no
If Rs2.State = 1 Then Rs2.Close
Rs2.Open "select seat_no,coach from reservation_transaction where prn_no in (select prn_no from
reservation_master where format(journey_date,'dd-MMM-yy')='" & Format(DtJourneyDate.Value, "dd-MMM-
yy") & "' and coach_type ='" & CmbCoachType.Text & "' ) order by coach , seat_no desc ", Cn
If Rs2.RecordCount <= 0 Then
Rs1("seat_no") = 1
Rs1("coach") = 1
Else
Dim SNo, CNo As Integer
SNo = Rs2("seat_no")
CNo = Rs2("coach")

49 | P a g e
SNo = SNo + 1

Dim NoOfCach As Integer


Dim NoOfSeat As Integer
NoOfCach = Val(ReturnText("select " & CmbCoachType.Text & " from train_master where train_no ="
& CmbTrainNo.Text))

If CmbCoachType.Text = "A1" Then


NoOfSeat = 36
ElseIf CmbCoachType.Text = "A2" Then
NoOfSeat = 54
Else
NoOfSeat = 74
End If

If SNo > NoOfSeat Then


'>>> increaser coach no
CNo = CNo + 1
SNo = 1
End If
If CNo > NoOfCach Then
CNo = CNo - 1
Rs1("confirm") = "N"
End If

Rs1("seat_no") = SNo
Rs1("coach") = CNo

End If

Rs1("is_cancel") = 0
Rs1.Update
TrnId = TrnId + 1
Next

'>>> save in cash_master


If Rs1.State = 1 Then Rs1.Close
Rs1.Open "select * from cash_master where 1=2 ", Cn, adOpenDynamic, adLockOptimistic
Rs1.AddNew
Rs1("cash_id") = CashId
Rs1("prn_no") = PrnID
Rs1("amount_received") = Val(TxtTotalFees.Text)
Rs1("amount_refund") = 0
Rs1("trn_date") = Now
Rs1("trn_by") = UserID

Rs1.Update

If MsgBox("Do you want to save the record ?", vbExclamation Or vbYesNo) = vbNo Then
Cn.RollbackTrans
Else

50 | P a g e
Cn.CommitTrans
MsgBox "Ticket saved.", vbInformation
ClearText
End If

End Sub

Private Sub Command4_Click()


Unload Me
End Sub

Private Sub Form_Load()


FillCombo "select train_no from train_master order by train_no", CmbTrainNo
FillCombo "select coach_type from coach_type_master ", CmbCoachType

Dim i As Integer
For i = 0 To 5
CmbSex(i).AddItem "M"
CmbSex(i).AddItem "F"

Next

ClearText

End Sub
Private Sub ClearText()
TxtPrnNo.Text = ""
DtJourneyDate.Value = Date
CmbTrainNo.Text = ""
LblTrainName.Caption = ""
CmbCoachType.Text = ""

CmbStationFrom.Text = ""
CmbUpto.Text = ""
CmbBoardingAt.Text = ""

Dim i As Integer
For i = 0 To 5
TxtPassenger(i).Text = ""
TxtAge(i).Text = ""
CmbSex(i).Text = ""

TxtCoach(i).Text = ""
TxtSeat(i).Text = ""

Next

TxtReservationFees.Text = ""
TxtSuperFastFees.Text = ""
TxtTotalFees.Text = ""
End Sub

51 | P a g e
Railway Reservation System : Cancellation

FrmCancellation

Option Explicit
Dim Rs1 As New ADODB.Recordset
Private Sub Command2_Click()
TxtPrnNo.Text = ""
ClearText
TxtPrnNo.SetFocus
End Sub

Private Sub Command3_Click()


'>> validate
If Rs1.State = 1 Then Rs1.Close
Rs1.Open "select * from reservation_master where prn_no=" & Val(TxtPrnNo.Text), Cn,
adOpenStatic, adLockReadOnly
If Rs1.RecordCount > 0 Then '>>>
check for already cancelled
If IsNull(Rs1("cancel_date")) = False Then
MsgBox "PRN no already cancelled.",
vbExclamation Exit Sub
End If

52 | P a g e
'>>> check for already journey
start Dim StrStartTime As String
Dim Rs2 As New ADODB.Recordset
If Rs2.State = 1 Then Rs2.Close
Rs2.Open "select * from train_schedule where train_no =" & Rs1("train_no") & " order by schedule_id
", Cn, adOpenStatic, adLockReadOnly
StrStartTime = Format(Rs2("arival_time"), "HH:nn")
If Rs2.State = 1 Then Rs2.Close

If CDate(Format(Rs1("journey_date"), "dd-MMM-yy ") & StrStartTime) < Now Then


MsgBox "You can not cancel this ticket, journey date expired.", vbExclamation
Exit Sub
End If

'>>> open transaction


Dim CancellFeesPer As Integer
Dim CanH As Integer
CanH = DateDiff("h", Now, CDate(Format(Rs1("journey_date"), "dd-MMM-yy ") & StrStartTime))

If Rs2.State = 1 Then Rs2.Close


Rs2.Open "select * from cancellation_rules ", Cn, adOpenStatic, adLockReadOnly

If CanH <= 1 Then


CancellFeesPer = Rs2("before_1h")
ElseIf CanH <= 12 Then
CancellFeesPer = Rs2("before_12h")
Else
CancellFeesPer = Rs2("before_24h")
End If

TxtCancellationFees.Text = Round(Val(TxtTotalFees.Text) * (CancellFeesPer / 100),


0) TxtTotalRefund.Text = Val(TxtTotalFees.Text) - Val(TxtCancellationFees.Text)

Cn.BeginTrans
Cn.Execute " update reservation_master set cancel_fees = " & Val(TxtCancellationFees.Text) & "
, cancel_by =" & UserID & ",cancel_date = now() where prn_no =" & Val(TxtPrnNo.Text)

Cn.Execute "update reservation_transaction set is_cancel = 1 where prn_no = " & Val(TxtPrnNo.Text)

Dim CashId As Integer


If Rs2.State = 1 Then Rs2.Close
Rs2.Open "select max(cash_id) from cash_master ", Cn, adOpenStatic,
adLockReadOnly CashId = IIf(IsNull(Rs1(0)) = True, 0, Rs1(0)) + 1

If Rs2.State = 1 Then Rs2.Close


Rs2.Open "select * from cash_master where 1=2", Cn, adOpenDynamic,
adLockOptimistic Rs2.AddNew
Rs2("cash_id") = CashId
Rs2("prn_no") = Val(TxtPrnNo.Text)
Rs2("amount_received") = 0
Rs2("amount_refund") =
Val(TxtTotalRefund) Rs2("trn_date") = Now
Rs2("trn_by") = UserID

Rs2.Update

53 | P a g e
If MsgBox("Do you want to cancel this ticket?", vbExclamation Or vbYesNo) = vbNo
Then Cn.RollbackTrans
Else
Cn.CommitTrans
MsgBox "Ticket cancelled.", vbInformation
ClearText
TxtPrnNo.Text = ""
TxtPrnNo.SetFocus
End If

Else
MsgBox "Invalid PRN no, no deatils found.", vbExclamation
Exit Sub
End If

End Sub

Private Sub Command4_Click()


Unload Me
End Sub

Private Sub Form_Load()


TxtPrnNo.Text = ""
ClearText
End Sub

Private Sub ClearText()

TxtJourney.Text = ""
TxtTrainNo.Text = ""
LblTrainName.Caption = ""
TxtCoachType.Text = ""

TxtStationFrom.Text = ""
TxtUpto.Text = ""
TxtBoarding.Text = ""

Dim i As Integer
For i = 0 To 5
TxtPassenger(i).Text = ""
TxtAge(i).Text = ""
CmbSex(i).Text = ""

TxtCoach(i).Text = ""
TxtSeat(i).Text = ""

Next

TxtReservationFees.Text = ""
TxtSuperFastFees.Text = ""
TxtTotalFees.Text = ""
TxtCancellationFees.Text = ""
TxtTotalRefund.Text = ""
End Sub

54 | P a g e
Private Sub TxtPrnNo_KeyDown(KeyCode As Integer, Shift As
Integer) If KeyCode = 13 Then
ClearText
If Rs1.State = 1 Then Rs1.Close
Rs1.Open "select * from reservation_master where prn_no=" & Val(TxtPrnNo.Text), Cn,
adOpenStatic, adLockReadOnly
If Rs1.RecordCount > 0 Then '>>>
check for already cancelled
If IsNull(Rs1("cancel_date")) = False Then
MsgBox "PRN no already cancelled.",
vbExclamation Command3.Enabled = False
'Exit
Sub End If

'>>> check for already journey


start Dim StrStartTime As String
Dim Rs2 As New ADODB.Recordset
If Rs2.State = 1 Then Rs2.Close
Rs2.Open "select * from train_schedule where train_no =" & Rs1("train_no") & " order by schedule_id
", Cn, adOpenStatic, adLockReadOnly
StrStartTime = Format(Rs2("arival_time"), "HH:nn")
If Rs2.State = 1 Then Rs2.Close

If CDate(Format(Rs1("journey_date"), "dd-MMM- yy ") & StrStartTime) < Now


Then MsgBox "You can not cancel this ticket, journey date expired.",
vbExclamation Exit Sub
End If

TxtJourney.Text = Rs1("journey_date")
TxtTrainNo.Text = Rs1("train_no")
TxtCoachType.Text = Rs1("coach_type")
TxtStationFrom.Text = Rs1("from_station")
TxtUpto.Text = Rs1("to_station")
TxtBoarding.Text = Rs1("boarding_at")

TxtReservationFees.Text = Rs1("re_fees")
TxtSuperFastFees.Text = Rs1("re_fees")
TxtTotalFees.Text = Rs1("ti_fees")

If IsNull(Rs1("cancel_date")) = False Then


Command3.Enabled = False
TxtCancellationFees.Text = Rs1("cancel_fees")
TxtTotalRefund.Text = Val(TxtTotalFees.Text) - Val(TxtCancellationFees.Text)

Else
Command3.Enabled = True
TxtCancellationFees.Text = ""
TxtTotalRefund.Text = ""

End If

55 | P a g e
'>>> get details from reservation
trnsaction If Rs2.State = 1 Then Rs2.Close
Rs2.Open "select * from reservation_transaction where prn_no =" & Val(TxtPrnNo.Text) & " order
by trn_id ", Cn, adOpenStatic, adLockReadOnly
If Rs2.RecordCount > 0
Then Dim i As Integer
Rs2.MoveFirst
For i = 0 To Rs2.RecordCount - 1
TxtPassenger(i).Text = Rs2("p_name")
TxtAge(i).Text = Rs2("p_age")
CmbSex(i).Text = Rs2("p_gender")
TxtCoach(i).Text = Rs2("coach")
TxtSeat(i).Text = Rs2("seat_no")

Rs2.MoveNext
Next

End If

Else
MsgBox "Invalid PRN no, no deatils found.", vbExclamation
Exit Sub
End If

End If
End Sub

56 | P a g e
Railway Reservation System : Daily Transaction

FrmDailyTranscation

57 | P a g e
Option Explicit
Dim Rs1 As New ADODB.Recordset

Private Sub CmdClose_Click()


Unload Me
End Sub

Private Sub CmdExportToExcel_Click()


'>>> export data to excel
CmdExportToExcel.Enabled = False
Dim Ex As Object
Dim Wb As Object
Dim Ws As Object

Set Ex = CreateObject("excel.application")
Set Wb = Ex.workbooks.Add
Set Ws = Wb.worksheets(1)
Dim i, j As Integer

'>>> grid to excel

For i = 0 To MF1.Rows - 1

For j = 0 To MF1.Cols - 1
Ws.cells(1 + i, 1 + j).Value = MF1.TextMatrix(i, j)
Next
Next

Ex.Visible = True
Ex.quit

'>>> realease memory


Set Ws = Nothing
Set Wb = Nothing
Set Ws = Nothing

CmdExportToExcel.Enabled = True

End Sub

Private Sub CmdShow_Click()


'>>> create query for show data

MF1.Rows = 2
MF1.Cols = 2

MF1.Clear
MF1.Refresh

If Rs1.State = adStateOpen Then Rs1.Close


Rs1.Open "select * from cash_master where format(trn_date,'dd-MMM-yy')='" &
Format(DTPicker1.Value, "dd-MMM-yy") & "' order by cash_id", Cn, adOpenDynamic, adLockOptimistic
If Rs1.RecordCount > 0
Then Dim i As Integer
Dim j As Integer

58 | P a g e
MF1.Rows = Rs1.RecordCount + 1
MF1.Cols = Rs1.Fields.Count

'>> create heading


For j = 0 To Rs1.Fields.Count - 1
MF1.TextMatrix(0, j) = Rs1(j).Name
Next

Rs1.MoveFirst
For i = 0 To Rs1.RecordCount - 1
For j = 0 To Rs1.Fields.Count - 1
If IsNull(Rs1(j).Value) = False Then
MF1.TextMatrix(i + 1, j) = Rs1(j).Value
End If
Next
Rs1.MoveNext
Next
Else
MsgBox "No record found.", vbExclamation

End If

'>>close recordset
If Rs1.State = adStateOpen Then Rs1.Close

End Sub

Private Sub Form_Load()


'>> fil filter combo
DTPicker1.Value = Date
MF1.Rows = 2
MF1.Clear
MF1.Refresh

End Sub

59 | P a g e
Railway Reservation System : PRN Query

FrmPRNQuery

Option Explicit
Dim Rs1 As New ADODB.Recordset

Private Sub Command2_Click()


TxtPrnNo.Text = ""
ClearText
TxtPrnNo.SetFocus
End Sub

Private Sub Command4_Click()


Unload Me
End Sub

Private Sub Form_Load()


TxtPrnNo.Text = ""
ClearText
End Sub

60 | P a g e
Private Sub ClearText()

TxtJourney.Text = ""
TxtTrainNo.Text = ""
LblTrainName.Caption = ""
TxtCoachType.Text = ""

TxtStationFrom.Text = ""
TxtUpto.Text = ""
TxtBoarding.Text = ""

Dim i As Integer
For i = 0 To 5
TxtPassenger(i).Text = ""
TxtAge(i).Text = ""
CmbSex(i).Text = ""

TxtCoach(i).Text = ""
TxtSeat(i).Text = ""

Next

TxtReservationFees.Text = ""
TxtSuperFastFees.Text = ""
TxtTotalFees.Text = ""
TxtCancellationFees.Text = ""
TxtTotalRefund.Text = ""
End Sub

Private Sub TxtPrnNo_KeyDown(KeyCode As Integer, Shift As


Integer) If KeyCode = 13 Then
ClearText
If Rs1.State = 1 Then Rs1.Close
Rs1.Open "select * from reservation_master where prn_no=" & Val(TxtPrnNo.Text), Cn,
adOpenStatic, adLockReadOnly
If Rs1.RecordCount > 0 Then '>>>
check for already cancelled
If IsNull(Rs1("cancel_date")) = False Then
MsgBox "PRN no already cancelled.", vbExclamation

'Exit Sub
End If

'>>> check for already journey


start Dim StrStartTime As String
Dim Rs2 As New ADODB.Recordset
If Rs2.State = 1 Then Rs2.Close
Rs2.Open "select * from train_schedule where train_no =" & Rs1("train_no") & " order by schedule_id
", Cn, adOpenStatic, adLockReadOnly
StrStartTime = Format(Rs2("arival_time"), "HH:nn")
If Rs2.State = 1 Then Rs2.Close

61 | P a g e
If CDate(Format(Rs1("journey_date"), "dd-MMM-yy ") & StrStartTime) < Now
Then MsgBox "You can not cancel this ticket, journey date expired.",
vbExclamation Exit Sub
End If

TxtJourney.Text = Rs1("journey_date")
TxtTrainNo.Text = Rs1("train_no")
TxtCoachType.Text = Rs1("coach_type")
TxtStationFrom.Text = Rs1("from_station")
TxtUpto.Text = Rs1("to_station")
TxtBoarding.Text = Rs1("boarding_at")

TxtReservationFees.Text = Rs1("re_fees")
TxtSuperFastFees.Text = Rs1("re_fees")
TxtTotalFees.Text = Rs1("ti_fees")

If IsNull(Rs1("cancel_date")) = False Then

TxtCancellationFees.Text = Rs1("cancel_fees")
TxtTotalRefund.Text = Val(TxtTotalFees.Text) - Val(TxtCancellationFees.Text)

Else

TxtCancellationFees.Text = ""
TxtTotalRefund.Text = ""

End If

'>>> get details from reservation


trnsaction If Rs2.State = 1 Then Rs2.Close
Rs2.Open "select * from reservation_transaction where prn_no =" & Val(TxtPrnNo.Text) & " order
by trn_id ", Cn, adOpenStatic, adLockReadOnly
If Rs2.RecordCount > 0
Then Dim i As Integer
Rs2.MoveFirst
For i = 0 To Rs2.RecordCount - 1
TxtPassenger(i).Text = Rs2("p_name")
TxtAge(i).Text = Rs2("p_age")
CmbSex(i).Text = Rs2("p_gender")
TxtCoach(i).Text = Rs2("coach")
TxtSeat(i).Text = Rs2("seat_no")

Rs2.MoveNext
Next

End If

Else
MsgBox "Invalid PRN no, no deatils found.", vbExclamation
Exit Sub
End If

End If
End Sub

62 | P a g e
Railway Reservation System Test Plan
Introduction
This document describes the user acceptance test plan for the Railway Reservation
System. The complete test strategy for the Railway Reservation System is to perform the
following kinds of tests, in sequence:

1. Component testing of each component that makes up the Railway Reservation


System
2. Integration testing of the Railway Reservation System, to ensure the
correct interworking of its components
3. Validation testing of the Railway Reservation System, to ensure that it
works correctly in a pseudo-live environment
4. User acceptance testing of the Railway Reservation System, to ensure that
its function is acceptable to its users

Acceptance testing is the last set of tests to be performed before the application
goes officially live.

Test Scope
The scope of the user acceptance testing covers:

 Version 1 of the Railway Reservation System 


  User-facing functionality defined by a set of use cases 
 Administrator-facing functionality defined by a set of use cases 

The aim of the testing is to determine how well the application meets its functional
requirements from the perspective of the user, and to identify any issues so they can be
resolved. Also, the testing serves to compile a set of test data and results that can be used
during subsequent test cycles, to test for non-regression of the software in later releases
or after the application is in maintenance.

Working practices might vary from user to user and are considered outside the scope of
the testing.

63 | P a g e
Test Strategy
The basis of user acceptance testing is that other tests were completed successfully, so the
application and its required infrastructure are considered to be stable and reliable.
Acceptance testing concentrates on the application from the user’s perspective, that is,
how the application is used and whether it meets the necessary quality criteria.

Change requests will be sent to the development team as the actionable documentation.
Change criteria will be determined by the Test team and the Development team prior to the
beginning of testing. For instance, criteria may include impact to desired functionality,
amount of code impacted by proposed change, and design required by proposed change. The
tester will evaluate the criteria. The test lead will determine Change Required or not. Once a
bug has been determined as Change Required, the bug report will be translated into a
Change Request and passed on to development.

The customer of the acceptance testing is the System Users, Supervisor and
Adminstratorfor Railway Reservation System. The progress of the acceptance testing will be
reported to the customer, together with any issues that are discovered and their planned
resolutions. Sign-off of the tests, and therefore the acceptance of the application, will be
performed by the customer or a selected representative.

Preconditions
The following items are required before testing can take place:

 A complete and coherent functional specification of the Railway Reservation


 System expressed as use cases and usage scenarios 
 A complete and validation-tested release of Railway Reservation System,
 delivered according to the delivery plan 
 An agreed-upon procedure for dealing with any anomalies that are discovered
 during the testing process 
 A set of test specifications describing how each functional area of the
 Railway Reservation System is to be acceptance tested 
  An implemented test environment for the testing 
 Sufficient, suitable resources to carry out the testing 
 Available standards for the acceptance testing 

Test Priorities
During testing of the Railway Reservation System, the following qualities will be tested
in order of priority:
 Functionality—whether the required functions are available and working as expected 
 Usability—how user-friendly and intuitive the Railway Reservation System is 
  Security—how well-protected and guaranteed corporate and user data is 
  Performance—whether the response times are within acceptable limits 
 Customization—how straightforward it is to use the application in new,
unpredicted ways 

64 | P a g e
Test Techniques
The following techniques will be applied:
 Scripted tests—sequences of user interactions (based on the use case and
 usage scenarios) using predefined data sets against predicted results 
 Unscripted tests—based on scripted tests, the tester tries to modify the scenarios
 to explore what-if possibilities 
  Penetration tests—scripted tests to attempt unauthorized entry into the system 
  Usability checklists—tests to determine the complexity of interactions 
 Performance statistics—generation of performance information to check
against desired performance criteria 

Test Organization

Roles and Responsibilities


The following roles are defined:

 QA lead/test manager—responsible for planning and ensuring the smooth running


 of the test process 
  Tester—carries out the tests according to the test plan, and then reports the results 
 Product manager—ensures that the tests are carried out successfully from a
 user perspective 
 Project sponsor/client—acts as main stakeholder, and ensures that the needs of
 the customer community as a whole are considered 
 Test support—provides technical assistance, such as test environment
configuration, and non-technical assistance, such as methodological support 

Weekly team meetings will be held involving the test manager, testers, and product
managers. At these meetings, the progress of the testing process will be reported, any
issues will be discussed, and actions will be agreed upon.

Deliverables
The following deliverables will be expected from the user acceptance testing process:

 Test plan—this document, together with any updates that have occurred during
 the testing process 
 Change requests—any bugs, defects, or other changes required to the
 Railway Reservation System as a result of the testing process 
 Weekly reports—progress reports to enable the status of the testing process to
 be determined 
 Completion report—a report to be signed off by the customer, to signify the
successful completion of the user acceptance testing 

65 | P a g e
Test Environment

Hardware and Software


The test environment will consist of:

Server

A single Intel-based computer running:


 Microsoft Windows 
 Railway Reservation System components 

Client Workstations

Two Intel-based client laptop computers, each running:

 Microsoft Windows XP Professional 


 Microsoft Office 

The following additional hardware will be required:

 One laser printer to print reports 


 One color printer (laser or inkjet) to print screen dumps 
 One CD-ROM drive to enable clean installation of the Railway Reservation System 
 Networking connectivity to permit interconnection of the server, clients. 

Testing Automation Software


No testing automation software packages are selected at present.

Application Configuration
The following user accounts will be configured on the server:

 System Administrator 
 System Users 1 
 System Users 2 
 Supervisor 

66 | P a g e
Test Management
Tests shall be managed according to the corporate test management standards, which cover:

 Conduct of tests 
 Reporting of test results 
 Defect tracking and resolution 
 Configuration management of the test environment 
 Configuration control of test deliverables. 

Testing Schedules
The user acceptance testing schedules are shown in the project structure document
and resulting Gantt charts.

Threats to Testing
Potential threats to the testing process are as follows:
 Insufficient resources available for testing. Testing resources have been seconded
from the development departments, whose time is at a premium. Mitigation: ensure
department heads apply a high priority to the testing of the Railway Reservation
 System. 
 Availability of sales personnel for testing. The test team should be overseen by at
least one sales representative. Mitigation: gain prior agreement from the vice president
of Sales for two sales representatives to be assigned to test the application. 

67 | P a g e
Conclusion and future enhancement

This project was developed to fulfill user and business requirement; however there are
lots of scope to improve the performance of the Railway Reservation System in the area of
user interface, database performance, and query processing time. Etc.

So there are many things for future enhancement of this project. The future
enhancements that are possible in the project are as follows.

 Linking and integration of any legacy system for accounting. 



 Integration with travel agent through Web Services 

 Connection to third-party OLAP applications 

 Electronic Data Interchange (EDI) system between banks, other credit
verification agency and their vendors 

 In the area of data security and system security. 

 Provide more online tips and help. 

 To optimize the query which is embedded in the system. 

68 | P a g e
Bibliography

Websites

 http://www.google.com 

 http://www.microsoft.com 

 http://www.programmer2programmer.net 

 http://www.codeproject.com 

 http://www.msdn.com. 

 http://www.vb123.com 

 http://www.vbcode.com 

 http://www.sqltuner.com 

Books

 Mastering Visual Basic 6 (Paperback) 



 Mastering Visual Basic .NET (Paperback) 

 Visual Basic Black Book (Paperback) 

 SQL Bible, 2nd Edition (Paperback) 

 Database Development in Visual Basic 

69 | P a g e

You might also like