You are on page 1of 87

A

PROJECT REPORT
ON
“RAILWAY RESERVATION SYSTEM”
SUBMITTED IN THE PARTIAL FULFILLMENT OF THE REQUIREMENTS

FOR THE AWARD OF THE DEGREE

OF

MASTER OF COMPUTER APPLICATION


DR. APJ ABDUL KALAM TECHNICAL UNIVERSITY, LUCKNOW

Session (2021-2023)

SUBMITTED TO: SUBMITTED BY:

Mr. PUNIT KUMAR SHARMA OM GAUTAM


Assistant Professor MCA IV SEM
FIT, MEERUT ROLL NO. (2101290140036)

FORTE INSTITUTE OF TECHNOLOGY,


MAWANA ROAD MEERUT
A
PROJECT REPORT
ON
“RAILWAY RESERVATION SYSTEM”
SUBMITTED IN THE PARTIAL FULFILLMENT OF THE REQUIREMENTS

FOR THE AWARD OF THE DEGREE

OF

MASTER OF COMPUTER APPLICATION


DR. APJ ABDUL KALAM TECHNICAL UNIVERSITY, LUCKNOW

Session (2021-2023)

SUBMITTED TO: SUBMITTED BY:

Mr.PUNIT KUMAR SHARMA OM GAUTAM


Assistant Professor MCA IV SEM
FIT, MEERUT ROLL NO. (2101290140036)

FORTE INSTITUTE OF TECHNOLOGY,


MAWANA ROAD MEERUT
ACKNOWLEDGEMENT
The satisfaction that accompanies successful completion of any work would be

incomplete without the mention of the people who made it possible.

Primarily, I would like to thank my faculty members for giving me the opportunity to

fulfill my aspiration. With deep sense and regards, I am obliged to Mr. PUNIT KUMAR

SHARMA , Project Guide and project coordinator, as he had a direct influence, some

way, in my motivation and gratefulness for being part of the responsible project guide of

the institute. I am very thankful to him for his valuable guidance and remarkable patience

in guiding my work to its fulfillment.

I wish to thank my parents for their constant encouragement which is like snow, so after

when it falls and longer when it falls and longer when it dwells upon, the deeper it sinks

in mind.

I will be failing in my mission if I do not thank other people who directly or indirectly

helped me in the successful completion of this project.

So, my heart full thanks to all friends mainly who supported and encouraged me in

preparing this project report as best as possible.

OM GAUTAM
MCA IV SEM
ROLL NO.
2101290140036

CERTIFICATE

This is to be certify that this Project Report entitled “RAILWAY

RESERVATION SYSTEM” which is submitted by OM GAUTAM

(2101290140036), in the partial fulfillment, for the award of degree of Master of

Computer Application in Department of Computer Application, of FIT, Meerut,

affiliated to DR. APJ ABDUL KALAM TECHNICAL UNIVERSITY,

LUCKNOW; is carried out by him/her under my supervision.

The matter embodied in this Project Work has not been submitted earlier for award

of any degree or diploma in any university/institution to the best of our knowledge

and belief.

(Mr. Punit Kumar Sharma) (Mr. Ritin Kumar) (Mrs. Shweta Batra)
Project Guide Head of the Department Director

Date: __/__/____
INDEX

S.N. CHAPTER PAGE

1. INTRODUCTION……………………….…………………… 1-7

2. PROBLEM ANALYSIS…………………..……………….... 8-14

3. DESIGN PHASE……………………………………………..….. 15-35

4. MODULES AND THEIR DESCRIPTION …………………… 36-39

5. CODING ………………………..……………………….. 40-57

6. SNAPSHOTS ………………………………………………….… 58-67

7. TESTING ……………………….………………………….. 68-74

8. SYSTEM IMPLEMENTATION AND REQUIREMENT …… 75-81

5. SOFTWARE MAINTANCE..………….………………….. 82-97

6. REFRENCES …………………………………………………… 98
INTRODUCTION
This project introduces railway reservation system. It explains how reservation is being

done in Indian Railways. The step by step procedure is explained. This project is

developed in java language. Almost all the header files have been used in this project.

Proper comments have been given at desired locations to make the project user friendly.

Various functions and structures are used to make a complete use of this language. Thos

project is well versed with the programming. Railway reservation can easily accompanied

with the help of this.

About Indian Railway:

Railways were first introduced to India in 1853 from Bombay to Thane. In 1951 the

systems were nationalized as one unit, the Indian Railways, becoming one of the largest

networks in the world. IR operates both long distance and suburban rail systems on

a multi-gauge network of broad, meter and narrow gauges. It also

owns locomotive and coach production facilities at several places in India and are

assigned codes identifying their gauge, kind of power and type of operation. Its

operations cover twenty eight states and seven union territories and also provide limited

international services to Nepal, Bangladesh and Pakistan.

Indian Railways is the world's ninth largest commercial or utility employer, by number of

employees, with over 1.4 million employees. As for rolling stock, IR holds over

239,281 Freight Wagons, 59,713 Passenger Coaches and 9,549 Locomotives (43 steam,


5,197 diesel and 4,309 electric locomotives). The trains have a 5 digit numbering system

as the Indian Railways runs about 10,000 trains daily. As of 31 March 2013, 23,541 km

(14,628 mi) (36%) of the total 65,000 km (40,000 mi) km route length was electrified.

[4] Since 1960, almost all electrified sections on IR use 25,000 Volt AC traction through

overhead centenary delivery

Our Project: This system is basically concerned with the reservation and cancellation of

railway tickets to the passengers. The need of this system arose because as is the known

fact that India has the largest railway network in the whole of the world and to handle it

manually is quite a tough job. By computerizing it, we will be able to overcome many of

its limitations and will be able to make it more efficient. The handling of data and records

for such a vast system is a very complex task if done manually but it can be made much

easier if the system is computerized.

To be more specific, our system is limited in such a way that a train starting from a

particular source will have a single destination

The basic functions being performed by our system are:

RESERVATION MANAGEMENT

FARE MANAGEMENT

TIMETABLE MANAGEMENT

These functions will be handled with the help of following sub functions: -
It reserves and cancels seats for the passenger.

It contains information about the trains.

It contains information about the passenger.

It contains the details of reservation fees, any concessions etc.

It makes entries for reservation, waiting, cancelled tickets.

It will update for uptime and downtime trains.

OBJECTIVE:-

The objectives of the system are-

 To reduce paperwork.

 Reduced operational time.

 Increased accuracy and reliability.

 Fast Process.

 Increased operational efficiency.

 Data security.

This software package can be readily used by non-programming personal avoiding

human handled chance of error. This project will be used by three types of users

i. Railway Administrator

ii. Authorized Railway Reservation counters

iii. Passengers
MODIFICATION AND IMPROVEMENT OVER THE EXISTING

IMPLEMENTATION

Present State:-

 Currently used software lacks human friendly interface.

 Time consumed in accessing the records of the database.

 User has to wait for a long time in the queue to get the reservation.

 Facilities of the software cannot be accessed online/other than department

systems.

 There is no option to send the reports via email.

After implementation of project:-

 Easy to use GUI.

 The software will be accessed online by Administrator for authorized data, by

reservation counters for reservation and by passenger for search for trains from a

particular source to destination.

 Time saving and Facilities of the software will be access online.

 New features as per requirements.

SCOPE:-

This project has a large scope as it has the following features which help in making it

easy to use, understand and modify it:


 Automation of Reservation Status

 No Need to do Paper Work.

 To save the environment by using paper free work.

 To increase the accuracy and efficiency of the software.

 Management of Online Database.

 Management of Online Payment.

This software package can be readily used by non-programming personal avoiding

human handled chance of error. This project is used by three types of users

iv. Railway Administrator.

v. Authorized railway reservation counters.

Main Points are:-

 Simplified Management of Passengers.

 Can be used online.

 Online Payment System.

 Human friendly interface.

SIGNIFICANCE OF PROJECT:-

The significance of the project is to provide the following benefits:

 The significance of project is to automate the Reservation.

 The online facility of the software will make it more efficient.


 Passenger can be email directly.

 The software will be implemented in Railway Management System.

Hardware and Software Requirements:-

Hardware requirements:-

 Pentium-IV processor or above


 Processor Speed 533 MHZ
 Color monitor
 Keyboard
 80-GB Hard Disk Drive or above
 512 MB RAM or above

Software Requirements:-

 Microsoft Windows-95 or above


 JSP Technology
 Microsoft Access
PROBLEM ANALYSIS
One of the most difficult tasks of system analysis is developing a clear, in-depth

understanding of the problem being investigated, without which it becomes impossible to

specify the requirements for a new project with any accuracy. Several questions should

be posed for this. Some of those may be:

 What is the problem?

 How complex is it?

 What are its likely causes?

 Why is it important that the problem be solved?

 What are possible solutions to the problem?

 What types of benefits can be expected once the problem is solved?

It takes considerable skill to determine the true cause of a system problem. A systems

analyst might begin to define the problem by determining if the problem can be classified

ac-cording to one or more common types of systems problems. With knowledge of the

common types of systems problems, the analyst can diagnose a problem by examining its

characteristics.

Organizations usually face problems or have opportunity due to the following facts:

 A new product or plant or branch

 A new market or new process


 Failure of an existing system

 Inefficiency of an existing system

 Structural error in the existing system etc

For identifying problems/opportunities, we scan the following:

 The performance of the system

 The information being supplied and its form

 The economy of processing

 The control of the information processing

 The efficiency of the existing system

 The security of the data and software

 The security of the equipment and personnel etc

After identification of the problem, it is defined and a general direction or method for

solving this problem is also determined. The management establishes the term of

reference as well as the resources to be provided for the project. System development is

an iterative process and the first identifiable stage of it is problem definition, whose final

output is terms of reference.

Careful analysis of this system suggests a number of different problems:

1. Problem of reliability: Current system is not reliable. It seems to vary in quality

and result from one month to the next. Some items it gives good output, but

sometimes the output is worst.


2. Problem of accuracy: There are too many mistakes in reports and calculations.

3. Problem of timeliness: In the current system the reports and output produced is

mostly late and in most of the cases it is useless because it is not on time.

4. Problem of validity: The output and reports mostly contains misleading

information. The transactions and calculations are sometimes not valid.

5. Problem of economy: The current system is very costly. We have to spend lots of

money in manual filing, calculations and remembering the information, but still

not get the desired results.

6. Problem of capacity: The current system is suffering from problem of capacity

also. The workload is too much. Few peoples cannot handle all the working.

Requirements Analysis Phase:-

This phase formally defines the detailed functional user requirements using high-level

requirements identified in the Initiation, System Concept, and Planning phases. It also

delineates the requirements in terms of data, system performance, security, and

maintainability requirements for the system. The requirements are defined in this phase to

a level of detail sufficient for systems design to proceed. They need to be measurable,

testable, and relate to the business need or opportunity identified in the Initiation Phase.

The requirements that will be used to determine acceptance of the system are captured in

the Test and Evaluation Master Plan.

The purposes of this phase are to:


1· Further define and refine the functional and data requirements and document them in

the Requirements Document,

2· Complete business process reengineering of the functions to be supported (i.e., verify

what information drives the business process, what information is generated, who

generates it, where does the information go, and who processes it),

3· Develop detailed data and process models (system inputs, outputs, and the process. ·

Develop the test and evaluation requirements that will be used to determine acceptable

system performance.

FEASIBILITY:-

An initial investigation in a proposal that determines whether an alternative system is

feasible. A proposal summarizing the thinking of the analyst is presented to the user for

review. When approved, the proposal initiates feasibility study that describes and

evaluates candidate systems and provides for the selection of best system that meets

system performance requirements.

To do a feasibility study, we need to consider the economic, technical factors in system

development. First a project team is formed. The team develops system flowcharts that

identify the characteristics of candidate systems, evaluate the performance of each

system, weigh system performance and cost data and select the best candidate system for

the job. The study culminates in a final report to the management.

By the end of this chapter you should know:

1. The steps in defining system performance.

2. What key considerations are involved in feasibility analysis?


3. How to conduct a feasibility study?

INTRODUCTION:-

1. Describe and identify characteristics of candidate systems.

2. Determine and evaluate performance and cost effectiveness of each candidate

system.

3. Weigh system performance and cost data.

4.Select the best candidate system.

SUMMARY:

1. A feasibility study is conducted to select the best system that meets performance

requirements. This entails an identification description, an evaluation of candidate

systems, and the selection of the best system for the job.

2. A statement of constraints, the identification of specific system objectives and a

description of outputs define a system’s required performance. The analyst is then ready

to evaluate the feasibility of candidate systems to produce these outputs.

3. Three key considerations are involved in feasibility analysis: economic, technical and

behavioral.

4. There are eight steps in feasibility study:

STATEMENT OF CONSTRAINTS
Constraints are factors that limit the solution of a problem. Some constraints are

identified during the initial investigation

IDENTIFICATION OF SPECIFIC SYSTEM OBJECTIVES

Once the constraints are spelled out, the analyst proceeds to identify the system’s specific

performance objectives. They are derived from the general objectives specified in the

project directive at the end of the initial investigation. The steps are to state the system’s

benefits and then translate them into measurable objectives.

DESCRIPTION OF OUTPUTS

A final step in system performance definition is describing the output required by the

user. An actual sketch of the format and contents of the reports as well as a specification

of the media used, their frequency, size and numbers of copies required are prepared at

this point

FEASIBILITY CONSIDERATIONS

1. Legal Feasibility: Determines whether the proposed system conflicts with legal

requirements, e.g. a data processing system must comply with the local Data Protection

Acts.

2. Operational Feasibility:- Operational feasibility is a measure of how well a proposed

system solves the problems, and takes advantage of the opportunities identified during

scope definition and how it satisfies the requirements identified in the requirements

analysis phase of system development.


DESIGN PHASE
The design phase involves converting the informational, functional, and network

requirements identified during the initiation and planning phases into unified design

specifications that developers use to script programs during the development phase.

Program designs are constructed in various ways. Using a top-down approach, designers

first identify and link major program components and interfaces, then expand design

layouts as they identify and link smaller subsystems and connections. Using a bottom-up

approach, designers first identify and link minor program components and interfaces,

then expand design layouts as they identify and link larger systems and connections.

Contemporary design techniques often use prototyping tools that build mock-up designs

of items such as application screens, database layouts, and system architectures. End

users, designers, developers, database managers, and network administrators should

review and refine the prototyped designs in an iterative process until they agree on an

acceptable design. Audit, security, and quality assurance personnel should be involved in

the review and approval process. During this phase, the system is designed to satisfy the

functional requirements identified in the previous phase. Since problems in the design

phase could be very expensive to solve in the later stage of the software development, a

variety of elements are considered in the design to mitigate risk. These include: ·

Identifying potential risks and defining mitigating design features.

 Performing a security risk assessment.


 Developing a conversion plan to migrate current data to the new system.

Context Diagram (Level – 0):-

The level 0 DFD or a context model represents the entire software element as a single

bubble with input and output data indicated by incoming and outgoing arrows,

respectively.

In level 0 diagram shown below, the passenger fills either the reservation or cancellation

form as input. He gets the ticket as the output and the report is sent to the administration.

Fig: Level 0 DFD for Railway Reservation System

Paid Details

Fig: Level 0 DFD for Railway Reservation System(Complete Schedule)

Level – 1 Data Flow Diagram:-


A level 1 DFD is the furthur refinement of level 0 DFD showing greater details and

functionalities. In this, the single bubble of level 0 DFD is refined furthur . Each of the

processes depicted at level 1 is a subfunction of the overall system depicted in the context

model.

As shown in the DFD above, the passenger either enquires about the trains or goes

directly for the reservation or the cancellation processes as a result of which he gets the

ticket generated. The reports are then sent to the administration


Fig: Level 1 DFD for Railway Reservation Process

Fig: Level 1 DFD for Railway Reservation Process(Complete Schedule)

Level – 2 Data Flow Diagram:-

The level 2 DFD is the further refinement of the level 1 DFD. As shown in the DFD

above the passenger has many options like he can directly go to the reservation

counter or can first inquire and then go to the reservation counter or he can just

inquire and return back. If the passenger wants reservation then the seats are checked

for availability and if the seats are available the confirmation ticket is generated

otherwise he is asked for waiting and waiting ticket is generated if he wants.


Fig: Level 2 DFD for Railway Reservation System

Fig: Level 2 DFD for Railway Reservation System(Complete Schedule)

3.1.4 Level – 3 Data Flow Diagram:-


Fig: Level 3 DFD for Railway Reservation System(Complete Schedule)

ENTITY RELATIONSHIP DIAGRAM:-


Entity relationship diagram expresses the overall logical structure of a database

graphically. It shows the relationship between different entities. The entities can have

composite, multivolume or derived attributes. The entities and their attributes are: -

1 Passenger

#. Name

*. First name

*. Middle name

*. Last name
#. Gender

#. Address

#. Age

#. Phone no.

2 Form

#. Form no.

3 Ticket

#. Ticket no.

*. Waiting

*. Confirmed

*. Cancelled

4 Reservation counter

5 Administrator

6 Train

#. Train no

#. Train name

#. Source

#. Destination
7 Seat

#. Seat no.

#. Compartment no.

The relationships between different entities are: -

1. Fill: The passenger fills the form.

2. Submit: The form is submitted to the reservation counter.

3. Check: The reservation counter checks the seats.

4. Generate: Reservation counter generates the ticket.

5. Issue: Reservation counter issues ticket to the passenger.

6. Send info: The reservation counter sends information to the administrator.

7. Allotted: The seat is allotted in the train.

Symbols Meanings

Data flow

Process

Data store

Entity
Has a
FLOW CHART:-

DESCRIPTION OF FLOW CHART:

The program flowchart shows how the system proceeds from the input form to the output

form of the system. It explains how the system is actually processed step by step .It

represents the flow of control as the system is processed.

There are three types of program flow chart:

1. Input flow chart: This flowchart depicts the basic input operations in the system. In

railway reservation system, first of all the password is checked then if the password is
valid then we process the input form if the data is valid then the entries are updated in the

data base otherwise the form is refilled.

2. Output flow chart: This flowchart depicts the basic output operations in the system.

The user is required to enter the criteria for output. If it is for the reservation then the

availability of seats is checked. If the seats are available then the confirmed ticket is

generated otherwise the user is asked for waiting and if he wants then waiting ticket is

generated. If the user wants the seat to be cancelled it is done and the cancelled ticket is

generated for the user. The information about all the above transactions is then

transferred to the related databases.

3. Report flow chart: This flowchart depicts the basic operations for the generation of

reports. If the entries from the processed database are valid the concerned reports are

generated otherwise the process will have to be repeated

Input Flow Chart


Output Flow Chart

Report Flow Chart


STRUCTURE CHART:-

BOOKING/
STATIONS

TRAINS CUSTOMER DETAIL

CANCELLATION SEAT TICKETS FARE


AVILABILITY

CLASS DISCOUNTS

Decision Tree:-
Sequence Diagram:-
USECASE Diagram :-
Activity Diagram:-
MODULES AND THEIR DESCRIPTION
Modularization:
Modularization is a technique to divide a software system into multiple discrete and

independent modules, which are expected to be capable of carrying out task(s)

independently. These modules may work as basic constructs for the entire software.

Designers tend to design modules such that they can be executed and/or compiled

separately and independently. Modular design unintentionally follows the rule of ‘divide

and conquer’ problem solving strategy, this is because there are many other benefits

attached with the modular design of a software.

Advantage of modularization:

 Smaller components are easier to maintain

 Program can be divided based on functional aspects

 Desired level of abstraction can be brought in the program

 Components with high cohesion can be re-used again

 Concurrent execution can be made possible

 Desired from security aspect

RESERVATION FORM : -
This form is used for the reservation of ticket. The main advantage of the form is

that it has the easiest of the user interface. This makes it user friendly and easy to

use. It has Passenger’s name, address, contact no, source and destination station

name and codes.

CANCELLATION FORM :-
This form consists of cancelation. the user interface is again easy. One just needs

the PNR number to cancel a ticket.

FARE RECORDS :-
This form is used for the fare between two station with a specific class.

TRAIN ENQUIRY:-
Train enquiry is used for knowing available trains between two stations. We need

to provide source and destination names or codes and then we will be given the

train names between those two stations.

RESERVATION ENQUIRY:-
This form is used to know if there is any seat available in a train. Here we need to

provide date, train no, source and destination stations.

SEAT DETAILS :-

This form is used to know about the seat later using our PNR no.
Coding:-

using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Data.SqlClient;

public partial class home : System.Web.UI.Page


{
public static DateTime tm;

protected void Page_Load(object sender, EventArgs e)


{

tm = DateTime.Today;
//drp_select_movie.Items.Add("Select Center");

protected void drp_select_movie_SelectedIndexChanged(object


sender, EventArgs e)
{
drp_select_date.Items.Clear();
drp_select_date.Items.Add("Select Date");

drp_select_date.Items.Add(Convert.ToString(tm.ToShortDateString()
));
tm = tm.AddDays(1);

drp_select_date.Items.Add(Convert.ToString(tm.ToShortDateString()
));
tm = tm.AddDays(1);

drp_select_date.Items.Add(Convert.ToString(tm.ToShortDateString()
));
drp_select_date.Enabled = true;
drp_select_date.Visible = true;
drp_select_movie.Enabled = false;

protected void drp_select_date_SelectedIndexChanged(object


sender, EventArgs e)
{
drp_select_time.Enabled = true;
drp_select_time.Visible = true;
//drp_select_time.Items.Add("Select Time");
drp_select_date.Enabled = false;
}
protected void drp_select_center_SelectedIndexChanged(object
sender, EventArgs e)
{
drp_select_movie.Enabled = true;
drp_select_movie.Visible = true;
//drp_select_movie.Items.Add("Select Movie");
drp_select_center.Enabled = false;
}
protected void drp_select_time_SelectedIndexChanged(object
sender, EventArgs e)
{

}
protected void btn_reset_Click(object sender, EventArgs e)
{
Response.Redirect("home.aspx");
}
protected void btn_book_now_Click1(object sender, EventArgs
e)
{
SqlConnection conn = new SqlConnection();
conn.ConnectionString =
ConfigurationManager.ConnectionStrings["cinema_tckt_bookingConnec
tionString"].ConnectionString;
conn.Open();
string center
=Convert.ToString( drp_select_center.SelectedItem);
string movie =
Convert.ToString( drp_select_movie.SelectedItem);
string date = drp_select_date.SelectedValue;
string time =
Convert.ToString( drp_select_time.SelectedItem);
string sql = "insert into movie_info
(center_name,movie_name,date,time) values('" + center + "','" +
movie + "','" + date + "','" + time + "')";
SqlCommand cmd = new SqlCommand(sql, conn);
cmd.ExecuteNonQuery();
string del="delete from booking_info";
string del1 = "delete from booking";
string insert = "insert into booking (no_of_seats,type)
values('0','gold')";
string insert1 = "insert into booking (no_of_seats,type)
values('0','silver')";
SqlCommand delete = new SqlCommand(del, conn);
SqlCommand delete1 = new SqlCommand(del1, conn);
SqlCommand inser = new SqlCommand(insert, conn);
SqlCommand inser1 = new SqlCommand(insert1, conn);
delete.ExecuteNonQuery();
delete1.ExecuteNonQuery();
inser.ExecuteNonQuery();
inser1.ExecuteNonQuery();
Response.Redirect("login.aspx?m="+movie);
}
}
/*************************************************************/
using System.Configuration;
using System.Data;
//using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
//using System.Xml.Linq;
using System.Data.SqlClient;
public partial class login : System.Web.UI.Page
{

protected void Page_Load(object sender, EventArgs e)


{

}
protected void btn_login_Click(object sender, EventArgs e)
{
string u = Request.QueryString["m"];
SqlConnection conn = new SqlConnection();
conn.ConnectionString =
ConfigurationManager.ConnectionStrings["cinema_tckt_bookingConnec
tionString"].ConnectionString;
conn.Open();
string sql = "select * from login where username='" +
txt_uname.Text + "' and password='" + txt_password.Text + "'";
SqlCommand cmd = new SqlCommand(sql, conn);
SqlDataReader dr;
dr = cmd.ExecuteReader();
if (dr.Read())
{
conn.Close();
conn.Open();
string sql1 = "update movie_info set
username='"+txt_uname.Text+"' where movie_name=('"+ u +"')";
SqlCommand cmd1 = new SqlCommand(sql1, conn);
cmd1.ExecuteNonQuery( );
lbl_message.Text = "login sucessfull";
Response.Redirect("booking.aspx?q="+txt_uname.Text);
}
else
lbl_message.Text = "login failed";
}
protected void btn_register_Click(object sender, EventArgs e)
{
Response.Redirect("register.aspx");
}
}

/**************************************************************************/
using System;
using System.Collections;
using System.Configuration;
using System.Data;
//using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Data.SqlClient;

public partial class Booking : System.Web.UI.Page


{
int ticket_price=0;
int total_cost;

protected void Page_Load(object sender, EventArgs e)


{
GridView1.SelectedIndex = -1;
}
protected void GridView1_SelectedIndexChanged(object sender,
EventArgs e)
{
string display="Combos=";
int s;
total_cost = 0;
s = GridView1.SelectedIndex;
switch (s)
{
case 0:
total_cost
+=Convert.ToInt16(lbl_total_price.Text);
display +=
Convert.ToString(GridView1.SelectedValue);
lbl_combo_cost.Text = "100";
total_cost += 100;
break;
case 1:
total_cost +=
Convert.ToInt16(lbl_total_price.Text);
display +=
Convert.ToString(GridView1.SelectedValue);
lbl_combo_cost.Text="150";
total_cost += 150;
break;
case 2:
total_cost
+=Convert.ToInt16( lbl_total_price.Text);
display +=
Convert.ToString(GridView1.SelectedValue);
lbl_combo_cost.Text = "170";
total_cost += 170;
break;
case 3:
total_cost
+=Convert.ToInt16( lbl_total_price.Text);
total_cost += 200;
lbl_combo_cost.Text = "200";
display +=
Convert.ToString(GridView1.SelectedValue);
break;
}
lbl_combo_display.Text = display.ToString();
lbl_total_price.Text=total_cost.ToString();

protected void btn_reset_Click(object sender, EventArgs e)


{
total_cost = 0;
lbl_total_price.Text = "0";
}
protected void btn_seat_select_Click(object sender, EventArgs
e)
{
if (DropDownList2.SelectedIndex == 0)
lbl_error1.Text = "please select the ticket type and
quantity";
else
{
string w = Request.QueryString["q"];
Response.Redirect("Payment.aspx?e=" + w);
}
}
protected void btn_how_to_collect_tckt_Click(object sender,
EventArgs e)
{
Response.Redirect("how to collect your ticket.aspx");
}
protected void btn_rules_regulations_Click(object sender,
EventArgs e)
{
Response.Redirect("rule and regulations.aspx");
}
protected void DropDownList2_SelectedIndexChanged(object
sender, EventArgs e)
{
string w = Request.QueryString["q"];
total_cost =Convert.ToInt16(lbl_total_price.Text);
if (DropDownList1.SelectedValue == "1")
ticket_price = 130;
if (DropDownList1.SelectedValue == "2")
ticket_price = 110;
int s =Convert.ToInt16(DropDownList2.SelectedValue);
ticket_price = ticket_price * s;
txt_ticket_price.Text = ticket_price.ToString(); ;
txt_ticket_price.Enabled = false;
txt_combo_price.Text = total_cost.ToString();
txt_combo_price.Enabled = false;
txt_service_fees.Text = "10";
txt_service_fees.Enabled = false;
int net_payable;
net_payable = total_cost + ticket_price;
txt_net_payable.Text = net_payable.ToString();
txt_net_payable.Enabled = false;

SqlConnection conn = new SqlConnection();


conn.ConnectionString =
ConfigurationManager.ConnectionStrings["cinema_tckt_bookingConnec
tionString"].ConnectionString;
conn.Open();
int a = Convert.ToInt16(txt_combo_price.Text);
int b = Convert.ToInt16(txt_ticket_price.Text);
string c = Convert.ToString(DropDownList1.SelectedItem);
int d = Convert.ToInt16(DropDownList2.SelectedValue);
int f = Convert.ToInt16(txt_net_payable.Text);
string seat_typ="1",total_seat="1";
if (DropDownList1.SelectedValue == "1")
{
seat_typ = "select no_of_seats from booking where
type='gold'";
total_seat = "select gold from seats";
}
if (DropDownList1.SelectedValue == "2")
{
seat_typ = "select no_of_seats from booking where
type='silver'";
total_seat = "select silver from seats";
}
SqlCommand seat = new SqlCommand(seat_typ, conn);
SqlCommand tot_seat = new SqlCommand(total_seat, conn);
total_seat = tot_seat.ExecuteScalar().ToString();

int t_seat= Convert.ToInt16(total_seat);


string seat_info = seat.ExecuteScalar().ToString() ;
int drp=DropDownList2.SelectedIndex;
int s_info= Convert.ToInt16(seat_info);
s_info = s_info + drp;
string sql,no_of_seats,type;
if(s_info<t_seat)
{
if (DropDownList1.SelectedValue == "1")
{
type = "update booking set no_of_seats='" +
s_info + "',seat_booked_now='gold' where type='gold'";
sql = "insert into booking_info
(username,gold_booked,combo_cost,ticket_cost,seat_type,no_of_seat
s,net_payable) values('" + w + "','" + s_info + "','" + a + "','"
+ b + "','" + c + "','" + d + "','" + f + "')";
}
else
{
type = "update booking set no_of_seats='" +
s_info + "',seat_booked_now='silver' where type='silver'";
sql = "insert into booking_info
(username,silver_booked,combo_cost,ticket_cost,seat_type,no_of_se
ats,net_payable) values('" + w + "','" + s_info + "','" + a +
"','" + b + "','" + c + "','" + d + "','" + f + "')";
}
SqlCommand typ = new SqlCommand(type, conn);
SqlCommand cmd = new SqlCommand(sql, conn);
typ.ExecuteNonQuery();
cmd.ExecuteNonQuery();
}
else
Response.Write("not enough seats available");

}
}

using System;
using System.Collections;
using System.Configuration;
using System.Data;
//using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Data.SqlClient;

public partial class Booking : System.Web.UI.Page


{
int ticket_price=0;
int total_cost;

protected void Page_Load(object sender, EventArgs e)


{
GridView1.SelectedIndex = -1;
}
protected void GridView1_SelectedIndexChanged(object sender,
EventArgs e)
{
string display="Combos=";
int s;
total_cost = 0;
s = GridView1.SelectedIndex;
switch (s)
{
case 0:
total_cost
+=Convert.ToInt16(lbl_total_price.Text);
display +=
Convert.ToString(GridView1.SelectedValue);
lbl_combo_cost.Text = "100";
total_cost += 100;
break;
case 1:
total_cost +=
Convert.ToInt16(lbl_total_price.Text);
display +=
Convert.ToString(GridView1.SelectedValue);
lbl_combo_cost.Text="150";
total_cost += 150;
break;
case 2:
total_cost
+=Convert.ToInt16( lbl_total_price.Text);
display +=
Convert.ToString(GridView1.SelectedValue);
lbl_combo_cost.Text = "170";
total_cost += 170;
break;
case 3:
total_cost
+=Convert.ToInt16( lbl_total_price.Text);
total_cost += 200;
lbl_combo_cost.Text = "200";
display +=
Convert.ToString(GridView1.SelectedValue);
break;
}
lbl_combo_display.Text = display.ToString();
lbl_total_price.Text=total_cost.ToString();

protected void btn_reset_Click(object sender, EventArgs e)


{
total_cost = 0;
lbl_total_price.Text = "0";
}
protected void btn_seat_select_Click(object sender, EventArgs
e)
{
if (DropDownList2.SelectedIndex == 0)
lbl_error1.Text = "please select the ticket type and
quantity";
else
{
string w = Request.QueryString["q"];
Response.Redirect("Payment.aspx?e=" + w);
}
}
protected void btn_how_to_collect_tckt_Click(object sender,
EventArgs e)
{
Response.Redirect("how to collect your ticket.aspx");
}
protected void btn_rules_regulations_Click(object sender,
EventArgs e)
{
Response.Redirect("rule and regulations.aspx");
}
protected void DropDownList2_SelectedIndexChanged(object
sender, EventArgs e)
{
string w = Request.QueryString["q"];
total_cost =Convert.ToInt16(lbl_total_price.Text);
if (DropDownList1.SelectedValue == "1")
ticket_price = 130;
if (DropDownList1.SelectedValue == "2")
ticket_price = 110;
int s =Convert.ToInt16(DropDownList2.SelectedValue);
ticket_price = ticket_price * s;
txt_ticket_price.Text = ticket_price.ToString(); ;
txt_ticket_price.Enabled = false;
txt_combo_price.Text = total_cost.ToString();
txt_combo_price.Enabled = false;
txt_service_fees.Text = "10";
txt_service_fees.Enabled = false;
int net_payable;
net_payable = total_cost + ticket_price;
txt_net_payable.Text = net_payable.ToString();
txt_net_payable.Enabled = false;

SqlConnection conn = new SqlConnection();


conn.ConnectionString =
ConfigurationManager.ConnectionStrings["cinema_tckt_bookingConnec
tionString"].ConnectionString;
conn.Open();
int a = Convert.ToInt16(txt_combo_price.Text);
int b = Convert.ToInt16(txt_ticket_price.Text);
string c = Convert.ToString(DropDownList1.SelectedItem);
int d = Convert.ToInt16(DropDownList2.SelectedValue);
int f = Convert.ToInt16(txt_net_payable.Text);
string seat_typ="1",total_seat="1";
if (DropDownList1.SelectedValue == "1")
{
seat_typ = "select no_of_seats from booking where
type='gold'";
total_seat = "select gold from seats";
}
if (DropDownList1.SelectedValue == "2")
{
seat_typ = "select no_of_seats from booking where
type='silver'";
total_seat = "select silver from seats";
}
SqlCommand seat = new SqlCommand(seat_typ, conn);
SqlCommand tot_seat = new SqlCommand(total_seat, conn);
total_seat = tot_seat.ExecuteScalar().ToString();

int t_seat= Convert.ToInt16(total_seat);


string seat_info = seat.ExecuteScalar().ToString() ;
int drp=DropDownList2.SelectedIndex;
int s_info= Convert.ToInt16(seat_info);
s_info = s_info + drp;
string sql,no_of_seats,type;
if(s_info<t_seat)
{
if (DropDownList1.SelectedValue == "1")
{
type = "update booking set no_of_seats='" +
s_info + "',seat_booked_now='gold' where type='gold'";
sql = "insert into booking_info
(username,gold_booked,combo_cost,ticket_cost,seat_type,no_of_seat
s,net_payable) values('" + w + "','" + s_info + "','" + a + "','"
+ b + "','" + c + "','" + d + "','" + f + "')";
}
else
{
type = "update booking set no_of_seats='" +
s_info + "',seat_booked_now='silver' where type='silver'";
sql = "insert into booking_info
(username,silver_booked,combo_cost,ticket_cost,seat_type,no_of_se
ats,net_payable) values('" + w + "','" + s_info + "','" + a +
"','" + b + "','" + c + "','" + d + "','" + f + "')";
}
SqlCommand typ = new SqlCommand(type, conn);
SqlCommand cmd = new SqlCommand(sql, conn);
typ.ExecuteNonQuery();
cmd.ExecuteNonQuery();
}
else
Response.Write("not enough seats available");

}
}
TESTING
Introduction:-

Testing is the process of exercising software with the intent of finding errors and

ultimately correcting them. The following testing techniques have been used to make this

project free of errors.

Content Review

The whole content of the project has been reviewed thoroughly to uncover typographical

errors, grammatical error and ambiguous sentences.

Navigation Errors

Different users were allowed to navigate through the project to uncover the navigation

errors. The views of the user regarding the navigation flexibility and user friendliness

were taken into account and implemented in the project.

Unit Testing:-

Focuses on individual software units, groups of related units.

 Unit – smallest testable piece of software.

 A unit can be compiled /assembled / linked/loaded; and put under a test harness.

 Unit testing done to show that the unit does not satisfy the application and /or its

implemented software does not match the intended designed structure.


Integration Testing:-

Focuses on combining units to evaluate the interaction among them

 Integration is the process of aggregating components to create larger components.

 Integration testing done to show that even though components were individually

satisfactory, the combination is incorrect and inconsistent.

System Testing:-

Focuses on a complete integrated system to evaluate compliance with specified

requirements (test characteristics that are only present when entire system is run)
 A system is a big component.

 System testing is aimed at revealing bugs that cannot be attributed to a component as

such, to inconsistencies between components or planned interactions between

components.

 Concern: issues, behaviors that can only be exposed by testing the entire integrated

system (e.g., performance, security, recovery)

each form encapsulates (labels, texts, grid etc.). Hence in case of project in V.B. form are

the basic units. Each form is tested thoroughly in term of calculation, display etc.

Regression Testing:-

Each time a new form is added to the project the whole project is tested thoroughly to

rectify any side effects. That might have occurred due to the addition of the new form.

Thus regression testing has been performed.


Code coverage tools can evaluate the completeness of a test suite that was created with

any method, including black-box testing. This allows the software team to examine parts

of a system that are rarely tested and ensures that the most important function points have

been tested. Code coverage as a software metric can be reported as a percentage for:

Function coverage, which reports on functions executed Statement coverage, which

reports on the number of lines executed to complete the test 100% statement coverage

ensures that all code paths, or branches (in terms of control flow) are executed at least

once. This is helpful in ensuring correct functionality, but not sufficient since the same

code may process different inputs correctly or incorrectly.

Black-box testing:-

Black-box testing treats the software as a "black box", examining functionality without

any knowledge of internal implementation. The tester is only aware of what the software

is supposed to do, not how it does it. Black-box testing methods include: equivalence

partitioning, boundary value analysis, all-pairs testing, state transition tables, decision

table testing, fuzz testing, model-based testing, use case testing, exploratory testing and

specification-based testing.

Specification-based testing aims to test the functionality of software according to the

applicable requirements. This level of testing usually requires thorough test cases to be

provided to the tester, who then can simply verify that for a given input, the output value
(or behavior), either "is" or "is not" the same as the expected value specified in the test

case.

Alpha Testing:-

Alpha testing is simulated or actual operational testing by potential users/customers or an

independent test team at the developers' site. Alpha testing is often employed for off-the-

shelf software as a form of internal acceptance testing, before the software goes to beta

testing.

Beta Testing:-
Beta testing comes after alpha testing and can be considered a form of external user

acceptance

testing. Versions of the software, known as beta versions, are released to a limited

audience outside of the programming team. The software is released to groups of people

so that further testing can ensure the product has few faults or bugs. Sometimes, beta

versions are made available to the open public to increase the feedback field to a maximal

number of future users.


SYSTEM IMPLEMENTATION AND
REQUIREMENT
Introduction:
The decision to acquire hardware or software must be handled in the same way as any

other information decision, The variety of sizes and types of computing resources

available puts a burden on the analyst who must select hardware, software and advise the

top management accordingly.

Today, selecting a system is a serious and time-consuming. The time spent on the

selection process is a function of the applications and whether the system is a basic

microcomputer or a mainframe. In either case, planning system selection and acquiring

experienced help where necessary pay off in the long run.

There are various important factors, which should be considered prior to system

selection. They are:

 Define system capabilities that make sense for the system.

 Specify the magnitudes of the problem; that is, clarify section entails a few

peripherals or a major decision concerning the mainframe.

 Hardware and software should be considered as a package.

 Develop a time frame for the selection process.

 Provide user indoctrination. This is crucial, especially for first time users. Selling

the system to the user staff, provide adequate training and creating an environment

conductive to implementation are prerequisites for system acquisition.


The selection process should be viewed as a project and a project team should be formed

with the help of management. The selection process consists of several steps, which are

discussed below:

Requirements implementation framework: In order to analyze and improve an

organization’s capability to implement requirements effectively, a framework is needed

to describe how requirements are ideally implemented throughout the development. This

chapter presents such a framework, which integrates elements of requirements

implementation referenced to previously Chapters. These elements were found in the

literature as good practice of requirements implementation. While the previous chapters

provided examples of how these elements could actually be implemented (summary

available in Appendix 2), this chapter discusses their interrelations and integration.

Requirements implementation framework for embedded software : The purpose

of the proposed requirements implementation framework is to describe what kind of

elements are needed for effective implementation of requirements during embedded

software development. These elements are, for example, requirements implementation

processes, methods, and roles. Because elements such as a change control board,

traceability, and extensive reviews require considerable resources, smaller and more

flexible organizations may need to tailor the framework's concepts. Tailoring of the

framework is discussed at the end of this chapter.


Development activity Strong relation

Work product Weak relation

Role Compilation

LIMITATIONS OF EXISTING SYSTEM: -

Data redundancy:-

It means that same data fields appear in many different files and often in different

formats. In manual system, it poses quite a big problem because the data has to be

maintained in large volumes but in our system, this problem can be overcome by

providing the condition that if the data entered is duplicate, it will not be entered,

otherwise, updating will take place.

Difficulty in accessing the data:-

In manual system, searching information is time consuming but in our system, any

information can be accessed by providing the primary key.

Unsatisfactory security measures:-


In manual system, no security measures were provided but in this system, password

security has been provided. The person can access the system by providing the correct

password otherwise he is denied the access

Conclusion and future scope:-

This project as title “Online Railway Reservation System” is comes under the

Relational Database Management System (RDBMS). This application is developed

with the help of JSP 6.0 and Microsoft Access. This application can also be run on the

network environment so it can be said as network application.

From a proper analysis of positive points and constraints on the component it can be

safely concluded that the product is a highly efficient GUI based component. This

application is working properly and meeting to all user requirements. This component

can be easily plugged in many other systems.

Nothing is perfect in this world. So, we are also no exception. Although, we have tried

our best to present the information effectively, yet, there can be further enhancement in

the Application. We have taken care of all the critical aspects, which need to take care of

during the development of the Project. Like the things this project also has some

limitations and can further be enhances by someone, because there are certain drawbacks

that do not permit the system to be 100% accurate.

The different areas where we can use this application are:


SOFTWARE MAINTENANCE

INTRODUCTION :-

Software Development has many phases. These phases include Requirements

Engineering, Architecting, Design, Implementation, Testing, Software

Deployment, and Maintenance. Maintenance is the last stage of the software life

cycle. After the product has been released, the maintenance phase keeps the

software up to date with environment changes and changing user requirements.

The earlier phases should be done so that the product is easily maintainable. The

design phase should plan the structure in a way that can be easily altered.

Similarly, the 5 implementation phase should create code that can be easily read,

understood, and changed. Maintenance can only happen efficiently if the earlier

phases are done properly. There are four major problems that can slow down the

maintenance process: unstructured code, maintenance programmers having

insufficient knowledge of the system, documentation being absent, out of date, or

at best insufficient, and software maintenance having a bad image. The success of

the maintenance phase relies on these problems being fixed earlier in the life

cycle. Maintenance consists of four parts. Corrective maintenance deals with

fixing bugs in the code. Adaptive maintenance deals with adapting the software to

new environments.
 Market Conditions - Policies, which changes over the time, such as taxation and

newly introduced constraints like, how to maintain bookkeeping, may trigger

need for modification.

 Client Requirements - Over the time, customer may ask for new features or

functions in the software.

 Host Modifications - If any of the hardware and/or platform (such as operating

system) of the target host changes, software changes are needed to keep

adaptability.

 Organization Changes - If there is any business level change at client end, such

as reduction of organization strength, acquiring another company, organization

venturing into new business, need to modify in the original software may arise.

Types of maintenance :-

In a software lifetime, type of maintenance may vary based on its nature. It may

be just a routine maintenance tasks as some bug discovered by some user or it

may be a large event in itself based on maintenance size or nature. Following are

some types of maintenance based on their characteristics:

 Corrective Maintenance - This includes modifications and updations done in

order to correct or fix problems, which are either discovered by user or concluded

by user error reports.


 Adaptive Maintenance - This includes modifications and updations applied to

keep the software product up-to date and tuned to the ever changing world of

technology and business environment.

 Perfective Maintenance - This includes modifications and updates done in order

to keep the software usable over long period of time. It includes new features,

new user requirements for refining the software and improve its reliability and

performance.

 Preventive Maintenance - This includes modifications and updations to prevent

future problems of the software. It aims to attend problems, which are not

significant at this moment but may cause serious issues in future.

Cost of Maintenance :-

Reports suggest that the cost of maintenance is high. A study on estimating

software maintenance found that the cost of maintenance is as high as 67% of the

cost of entire software process cycle.


On an average, the cost of software maintenance is more than 50% of all SDLC phases.

There are various factors, which trigger maintenance cost go high, such as:

Real-world factors affecting Maintenance Cost

 The standard age of any software is considered up to 10 to 15 years.

 Older software’s, which were meant to work on slow machines with less memory

and storage capacity cannot keep themselves challenging against newly coming

enhanced software’s on modern hardware.

 As technology advances, it becomes costly to maintain old software.

 Most maintenance engineers are newbie and use trial and error method to rectify

problem.

 Often, changes made can easily hurt the original structure of the software, making

it hard for any subsequent changes.

 Changes are often left undocumented which may cause more conflicts in future.

Software-end factors affecting Maintenance Cost

 Structure of Software Program

 Programming Language

 Dependence on external environment

 Staff reliability and availability


Maintenance Activities :-

IEEE provides a framework for sequential maintenance process activities. It can be used

in iterative manner and can be extended so that customized items and processes can be

included.

These activities go hand-in-hand with each of the following phase:

 Identification & Tracing - It involves activities pertaining to identification of

requirement of modification or maintenance. It is generated by user or system

may itself report via logs or error messages.Here, the maintenance type is

classified also.
Software Re-engineering :-

When we need to update the software to keep it to the current market, without impacting

its functionality, it is called software re-engineering. It is a thorough process where the

design of software is changed and programs are re-written.

Legacy software cannot keep tuning with the latest technology available in the market.

As the hardware become obsolete, updating of software becomes a headache. Even if

software grows old with time, its functionality does not.

For example, initially Unix was developed in assembly language. When language C

came into existence, Unix was re-engineered in C, because working in assembly

language was difficult.

Other than this, sometimes programmers notice that few parts of software need more

maintenance than others and they also need re-engineering.


Program Restructuring :-

It is a process to re-structure and re-construct the existing software. It is all about re-

arranging the source code, either in same programming language or from one

programming language to a different one. Restructuring can have either source code-

restructuring and data-restructuring or both.

Re-structuring does not impact the functionality of the software but enhance reliability

and maintainability. Program components, which cause errors very frequently can be

changed, or updated with re-structuring.

The dependability of software on obsolete hardware platform can be removed via re-

structuring.

Forward Engineering :-

Forward engineering is a process of obtaining desired software from the specifications in

hand which were brought down by means of reverse engineering. It assumes that there

was some software engineering already done in the past.

Forward engineering is same as software engineering process with only one difference –

it is carried out always after reverse engineering.


Component reusability:-

A component is a part of software program code, which executes an independent task in

the system. It can be a small module or sub-system itself.

Example

The login procedures used on the web can be considered as components, printing system

in software can be seen as a component of the software.

Components have high cohesion of functionality and lower rate of coupling, i.e. they

work independently and can perform tasks without depending on other modules.

In OOP, the objects are designed are very specific to their concern and have fewer

chances to be used in some other software.

In modular programming, the modules are coded to perform specific tasks which can be

used across number of other software programs.

There is a whole new vertical, which is based on re-use of software component, and is

known as Component Based Software Engineering (CBSE).


Re-use can be done at various levels

 Application level - Where an entire application is used as sub-system of new

software.

 Component level - Where sub-system of an application is used.

 Modules level - Where functional modules are re-used.

Software components provide interfaces, which can be used to establish

communication among different components.

Reuse Process

Two kinds of method can be adopted: either by keeping requirements same and

adjusting components or by keeping components same and modifying requirements.


CONCLUSION:-

Maintenance clearly plays an important role is the life cycle of a software product.

As noted earlier, the cost of maintenance in the United States has been estimated at

more than $70 billion annually for more than ten billion lines of existing code.

While “traditional maintenance” applies only to corrective maintenance – fixing

bugs in the code, the maintenance phase also incorporates three other main aspects

that are considered to be elements of software evolution. Adaptive maintenance

serves to modify the software for use in new environments, such as a new

hardware platform or interfacing with a different database system. Perfective

maintenance concerns adding new functionality to a product, typically as a result

of a customer request. Finally, preventive maintenance increases the total life


REFERENCES
Books:
 Beginning Java Objects: From Concepts to Code , Jacquie Barker,2009

 Introduction to Java Programming: NIIIT publication , John Wiley,1998

 The Complete Reference Java, McGrawhill: Herbert Schildth- reprint, 2008

Web Sites:

 www.apache.org

 www.wikipedia.com

You might also like