OOSE LAB EXP online voting System
OOSE LAB EXP online voting System
AIM
To develop a problem statement for the suggested domain Online Voting System.
PROBLEMSTATEMENT
The basic methodology as applied to online voting system would involve giving voter realistic
voting task to accomplish using a variety of ballot designs. A regroups methodology is used to sample variable
aspects of the system, such as vectors and ballots. The sample is constructed so as to provide a statistical basis
for generalization from the sample to the populations they represents voting task performance is measured
using variables such as accuracy time and workload.
In online voting mechanism each voter receives a unique ballot code. The ballot code has an arbitrary length
and is generated randomly to help prevent manipulation. Online voting system mails virtual ballot papers
, including the ballot code, to the voters before election. The voters can then uses their email clients to
return their votes to the voting server.
The voting server collects the votes and filters out duplicate and invalid vote. Each voter can then check his/
her vote online to ensure that his/her vote has been counted correctly
SYSTEMCAPABILITIES:
1. Real-Time Journey Planning and Information: Enables users to search for trains based on source and destination
stations, and desired date of travel, providing up-to-the-minute information on train schedules, seat availability
across different classes, and detailed fare breakdowns.
CSE/OOSE RISHIKAC/513322104027
2. EffortlessTicket Bookingand Management: Allows users to select trains, choose travelclasses and the number of
passengers, input passenger details securely, select available seats (where applicable), and manage their current
bookings.
3. Streamlined Cancellation andRefundProcessing:Providesastraightforwardprocess foruserstocancel confirmed
tickets, clearly displays the applicable cancellation policies and potential refund amounts, and manages the
refund process according to established rules.
4. Intuitive Search and Filtering: Offers a user-friendly interface for searchingtrains with options to filter results
based on various criteria such as departure/arrival times, train type, and preferred travel class, ensuring efficient
discovery of suitable travel options.
5. Dynamic Availability Display and Confirmation: Presents real-time seat availability information to users during
the booking process and generates immediate booking confirmation messages with all relevant details upon
successful transaction, as well as clear cancellation confirmations whenapplicable.
6. SecureandDiversePaymentGateway Integration: Integrateswithmultiplesecurepayment gatewaysto facilitate
online payments through various methods, ensuring transaction security and offering users flexibility in payment
options.
7. Automated Ticket Generation and Delivery: Generates electronic tickets in a printable format (e.g., PDF)
containing all necessary travel information, including booking reference (PNR), train details, passenger
information, and seat numbers, and provides options for download or emaildelivery.
RESULT
Thustheproblemstatementforthegivenmini-projectRailwayReservationSystemwasidentified successfully.
CSE/OOSE RISHIKAC/513322104027
DATE:
SOFTWAREREQUIREMENTSSPECIFICATION
EX.NO:
AIM
ToCreatetheSoftwareRequirementsSpecification(SRS)forRailwayReservationSystem.
SOFTWAREREQUIREMENTSSPECIFICATION(SRS)
1. INTRODUCTION
Purpose
Thisdocument details what our RailwayReservation System (RRS) needsto do. Thinkof it asa clear guide for
everyone involved – the people building it (developers), the ones testing it (testers), and anyone who has astake in how
it works(stakeholders). It lays out exactly whatthe system isfor, what it will cover, explains any special terms we use,
and points to any related documents. Ultimately, this SRS acts like a shared understanding, a blueprint that ensures we
all know what the system should do, how well it should perform, and any limitations we need to keep in mind during
development.
Scope
1. Searchforavailabletrainsbasedonsourceanddestinationstations,anddateofjourney.
2. Viewtrainschedules,seatavailability,andfaredetails.
3. Bookticketsonlineandmakepaymentsthroughvariouspayment gateways.
4. Cancelticketsandrequestrefundsaccordingtothecancellationpolicy.
5. Manageuseraccounts,profiles, andbookinghistory.
6. Generateanddownloadtickets inprintableformat.
7. Administertrainschedules, routes,andfaresthroughanadministrativeinterface.
ThisSRSdoesnot cover:
1. Integrationwithphysicalticketing kiosks.
2. Real-timetraintrackingandlocation services.
3. On-boardentertainment systems.
CSE/OOSE RISHIKAC/513322104027
2. OVERALLDESCRIPTION
Product Perspective
The Railway Reservation System (RRS) is a web-based application designed to provide a convenient and
efficient way for passengers to book railway tickets online. It operates as a standalone system, but integrates with
payment gateways and potentially with railway's internal database for train schedules and availability.
Product Features
TrainSearch:Allowsuserstosearchforavailabletrainsbasedonsource,destination,anddate.
ScheduleDisplay:Displaystrainschedules,includingarrivalanddeparturetimes,andseat availability.
Ticket Booking: Enables users to book tickets online by providing passenger details and selecting seats.
PaymentProcessing:Integrateswith paymentgatewaysto processonlinepaymentssecurely.
TicketCancellation:Allowsusersto cancelticketsand requestrefunds.
User Account Management: Enables users to create accounts, manage profiles, and view booking history.
TicketGeneration:Generatesandallowsuserstodownloadticketsinprintableformat.
UserClassesandCharacteristics
Passengers (Users):
Characteristics:Generalpublic,rangingfromnovicetoexperiencedinternet users.
Skills:Basiccomputerliteracy,abilitytonavigatewebsites.
Goals:Tosearchfortrains,booktickets,managebookings,andaccesstravelinformation.
Administrators(Admins):
Characteristics:Railwaystaff responsibleformanagingthesystem.
Skills:Advancedcomputerliteracy,databasemanagement,systemadministration.
Goals:Tomanagetrainschedules,routes, fares,useraccounts,andsystemconfigurations.
OperatingEnvironment
ApplicationServer:Python(Flask)
Database:
OperatingSystems:WindowsServer
Browsers:Chrome,Firefox,Safari,Edge
CSE/OOSE RISHIKAC/513322104027
DesignandImplementationConstraints
1. Security:ThesystemmustcomplywithPCIDSSstandardsforsecurepayment processing.
2. Accessibility:ThesystemmustcomplywithWCAGguidelinesfor accessibility.
3. Scalability:Thesystemmustbescalabletohandlealargenumberofconcurrentusersand transactions.
4. Performance:Thesystemmustprovidefastresponsetimesandefficientresource utilization.
5. DataPrivacy:Thesystemmustprotectuser dataand complywith dataprivacyregulations.
6. TechnologyStack:Thesystemmustbedevelopedusingthespecifiedtechnologystack(Python,
Flask,SQLAlchemy,HTML,CSS,JS).
AssumptionsandDependencies
Astableinternetconnectionisavailableforuserstoaccessthesystem.
Railway'sinternaldatabasefortrainschedulesandavailabilityisaccessible.
Usershavebasiccomputerliteracyandareabletonavigatewebsites.
3. SPECIFICREQUIREMENTS
ExternalInterfaceRequirements
UserInterfaces
Web-basedGUI:
Thesystemoffersaresponsivedesign forbothdesktopandmobiledevices, ensuringsmooth navigation and
usability. It featuresa clear, intuitive layout with concise information presentation while adhering to WCAG accessibility
standards for inclusivity.
AdminInterface:
The system ensures secure login with role-based access, offers a dashboard for performance monitoring,
andincludesformsformanagingschedules, fares, andaccounts. Italso providesreportingtools for tracking ticket sales
and user activity.
HardwareInterfaces
WebServer:Standardserverhardwarewithsufficientprocessingpowerandmemory.
DatabaseServer:StandardserverhardwarewithsufficientstoragecapacityandI/Operformance.
BarcodeScanners:Forscanningticketsatrailwaystations
Printers:Forprintingticketsat railwaystations.
CSE/OOSE RISHIKAC/513322104027
SoftwareInterfaces
CommunicationInterfaces
FunctionalRequirements
1. User Registration and Login: The system enables users to register with a valid password, ensuring secure
account creation. It supports secure login authentication and includes a "Forgot Password"feature for
resetting passwords when needed.
2. Train Search: The system enables users to search for available trains by specifying the sourcestation,
destination station, and journey date. It then displays matching trains with details such as train name, arrival
and departure times, and seat availability for easy selection.
3. Schedule Display: The system shall display detailed train schedules, including all stations along the route,
arrival and departure times at each station, and seat availability for each class.
4. Ticket Booking: The system enables users to select a train, class, and number of passengers, while also
collectingpassenger details such asname, age, and gender. It then displaysthe totalfare for the selected tickets
and allows seat selection when applicable.
5. Payment Processing: The system securely integrates with payment gateways, supporting multiple options like
credit cards, debit cards, and online wallets. Upon successful payment, it displays a confirmation message to
ensure transaction completion.
6. Ticket Cancellation: The system enables users to cancel tickets and request refunds, displaying the
cancellation policy and refund amount. Refunds are processed according to the policy, ensuring clarity and
fairness.
7. User Account Management: The system enables users to manage profile information such as name, phone
number, and email, while also allowing them to view booking history and change their password for account
security.
8. TicketGeneration:Thesystemgeneratesprintabletickets informats likePDF,containingessential details such as
booking ID, train information, passenger name, seat number, and barcode for verification.
CSE/OOSE RISHIKAC/513322104027
PerformanceRequirements
ResponseTime:Thesystemshallrespond to user requestswithin 3secondson average.
Scalability: The system shall be able to handle at least 1000 concurrent users without
performancedegradation.
QualityAttributes
DesignConstraints
LimitedscalabilityduetoCSVstorage,requiringfuturetransitiontoa database.
4. OtherRequirements
LegalandRegulatoryCompliance:Thesystemmustcomplywithallapplicablelawsandregulations.
Documentation:The system shallbe well-documented, includingusermanuals, developer guides, and API
documentation.
Training:Training shallbeprovided to administratorsand userson howto usethe system.
5. ErrorHandling&Logging
CommonErrors& Troubleshooting:
SystemLoggingforDebugging:
Logsuseractivity,errors,andsystemperformancemetricstodiagnoseissues.
CSE/OOSE RISHIKAC/513322104027
UsesCSV-basedlogging,recordingeventssuchasfailedtransactionsandunauthorizedaccess attempts.
Ensuresadministratorscanmonitor,analyze,andimprovesystemstabilitybasedonloggeddata.
User-FriendlyErrorMessages:
Providesclear,conciseerrornotificationswithouttechnicaljargon.
Guidesuserstoward solutions,suchasretryingactionsor contactingsupport.
Ensuresasmooth experiencebyminimizingconfusion and frustration.
6. Appendix
Acronyms&Abbreviations
PNR–PassengerNameRecord
UI–UserInterface
CSV–Comma-Separated Values
WCAG–WebContentAccessibilityGuidelines
ORM–Object-RelationalMapping
References
Railwaybookingguidelines
FlaskandPythondocumentationforwebapplicationdevelopment
WCAGaccessibilitystandards
Future Enhancements
DatabaseIntegration–TransitionfromCSVtoPostgreSQL/MySQLforscalability
MobileAppDevelopment – Extendfunctionalitytomobile applications
DynamicPricing–Implementreal-timefareadjustmentsbased ondemand
NotificationSystem–IntroduceSMS/emailalertsfor bookingupdates
RESULT
CSE/OOSE RISHIKAC/513322104027
DATE: IDENTIFYUSECASESANDDEVELOP
EX.NO: THEUSECASEMODEL
AIM
USECASE
1. EnquireTicketAvailability:Customerscheckifseatsareavailableforaspecifictrain.
2. FillForm:Customersprovidenecessarydetailsforbooking.
3. BookTicket: Customersconfirmtheirbookingafterfillingthe formandpayingthe fare.
4. PayFare Amount:Customerscompletethepaymentprocessfor theirbooking.
5. PrintForm:Clerksassistin printingformsfor customers.
6. CancelTicket:Customerscanceltheirbooked tickets.
7. RefundMoney:Thesystemprocessesrefundsforcanceledtickets.
ACTORS
The Customer interacts with the system for booking, cancelling, or inquiring about tickets, ensuring smooth
travel arrangements. The Clerk supports customers by printing forms and managing ticket cancellations when
required. At the core, the Railway System automates processes, handles data, and facilitates seamless ticket
transactions among users.
Relationships
1. Customer↔RailwaySystem:
o Customers interact directly with the railwaysystem for alluse cases like booking, cancellation, and
payment.
2. Customer↔Clerk:
o Clerksassistcustomersin printingformsor managingcancellations.
3. Clerk↔RailwaySystem:
o Clerksusetherailwaysystemto printformsor processcancellations.
4. Customer↔Ticket:
o Customersarelinkedtoticketsthroughbookingandcancellation processes.
5. Customer↔Payment:
o Customerscompletepaymentsfor ticketbookings,whichisprocessed bytherailwaysystem.
CSE/OOSE RISHIKAC/513322104027
USECASEDIAGRAM
RESULT
Thus,the usecases for the selectedsoftwaresystem Railway Reservartion System has beenidentified and the use
case diagram has been developed successfully.
CSE/OOSE RISHIKAC/513322104027
DATE:
DOMAINMODELANDCLASSDIAGRAMS
EX.NO:
AIM
PROCEDURE
ConceptualClassesand DomainModel
Thedomainandconceptualmodelfocusesonrepresentingthereal-worldentitiesandtheirrelationships within the
railway reservation system.
1. Entities:
Passenger:Represents individualsbookingtickets.
RailwaySystem:Handlesoverallfunctionalityandinteractionwithpassengersandclerks.
Clerk:Assistswithticketbookingand cancellations.
Train:Representstrain-relateddetailsliketrainnumberandname.
Ticket:Maintainsticket-specificdetails suchasPNRnumber,status,andpassengercount.
Payment:Managestransaction details.
2. Relationships:
ClassModel
Theclassmodeldefinestheattributesandmethodsforeachentityandmapsouttherelationships between them.
Classes
1. Passenger:
o Attributes:name,address,age,gender.
o Methods:searchTrain(),bookTicket(),cancelTicket(),payCharges(),modifyForm().
2. RailwaySystem:
o Attributes:id.
o Methods:response().
CSE/OOSE RISHIKAC/513322104027
3. Clerk:
o Attributes:id,name.
o Methods:form_detail(),cancellation_form().
4. Train:
o Attributes:trainNo, trainName.
o Methods:Nonespecifiedbutlinkedto Ticket.
5. Ticket:
o Attributes:pnrNo,status,noOfPersons, chargeType.
o Methods:newTicket(), deleteTicket().
6. Payment:
o Attributes:amount.
o Methods:Nonespecifiedbutlinkedto Passenger.
CLASSDIAGRAM
RESULT
Thus,the conceptual classes have beenidentified,a domainmodel has beendevelopedand the class diagrams have
been constructed successfully.
CSE/OOSE RISHIKAC/513322104027
DATE: SEQUENCEDIAGRAMAND
DATE:
EX.NO: COLLABORATIONDIAGRAM
AIM
To find the interaction between objects and represent them using UML sequence diagrams and collaboration
diagrams.
PROCEDURE
INTERACTIONSEQUENCE
1. PassengerLogin:
ThePassengerinitiatestheinteractionbyloggingintotheRailwaySystem.
TheRailwaySystemvalidatesthelogin.
2. FormRequestandSubmission:
ThePassengerrequestsabookingform.
RailwaySystemgeneratesand providestheform.
Passengerfills inandsubmitstheformwiththeirdetails.
3. TicketCreation:
TheRailwaySystemprocessesthedetailsandcreatestheticket.
Detailsaresentto theTicketentity,which confirmstheticketcreation.
4. TicketPrinting:
TheRailwaySysteminformsthePassenger thatthetickethasbeencreated successfully.
Passengerprintstheticketto completethe process.
SEQUENCE DIAGRAM
The diagram aims to visually map out the communication flow and responsibilities between the Passenger,
Railway System, and Ticket entity in the ticket booking process. It provides clarity on the steps required for login,
form submission, ticket creation, and ticket printing.
CSE/OOSE RISHIKAC/513322104027
COLLABORATIONDIAGRAM
The primary purpose of this collaboration diagram is to show how different entities work together and
communicate during the ticket bookingprocess. It highlights the rolesand responsibilitiesof each entity and the flow of
information between them
RESULT
Thus, the sequence diagrams and collaboration diagrams have been used to represent interactions between the
objects.
CSE/OOSE RISHIKAC/513322104027
DATE:
STATECHARTANDACTIVITYDIAGRAM
EX.NO:
AIM
Todeveloptherelevantstatechartand activitydiagram.
STATECHARTREPRESENTATION
1. Loginand Validation:
Theuserenterstheirlogindetailsthensystemvalidatesthecredentials.
2. EnteringTrainDetails:
Theuserprovidesinformationaboutthetrain theywishto book.
3. CheckingAvailability:
Thesystemverifiesifseatsareavailablefortheselected train.
4. ProvidingPersonalDetails:
Theuserinputstheirpersonaldetails,requiredfor booking.
5. BookingConfirmation:
Thesystemprocessesthebookingandconfirmstheticket.
6. Printing:
Theuserprintstheticketfortheir reference.
7. Logout:
Theuserlogsout,completingthe process.
CSE/OOSE RISHIKAC/513322104027
ACTIVITYDIAGRAMREPRESENTATION
1. Start bysearchingforatrain.
2. Proceedtocheckticketavailability:
Ifticketsaren't available:endtheprocesswithlogout.
Ifticketsareavailable:moveforward to bookthe tickets.
3. Enterpersonalandjourneydetails(filldetails) andsubmitthem.
4. Completethepayment process.
5. Finishbyprinting the ticket.
RESULT
CSE/OOSE RISHIKAC/513322104027
DATE:
DATE: SOFTWARESYSTEM IMPLEMENTATION
EX.NO:
AIM
ToimplementtheRailwayReservationSystemasper therequirements.
1. ProjectSetup:
ChoosetheTechStack:
ProgrammingLanguage:Python
WebFramework:Flask
Frontend:HTML,CSS,JavaScript
DataStorage:CSVfiles(initially),consider SQLiteorPostgreSQLforfuture scalability.
2. EnvironmentSetup:
InstallPython.
Createavirtualenvironment:python-mvenvvenv
Activatethevirtualenvironment:
Windows:venv\Scripts\activate
macOS/Linux:sourcevenv/bin/activate
InstallFlask:pipinstallflask
InstallSQLAlchemy(optional,forfuturedatabaseintegration):pipinstallsqlalchemy
SetupyourIDE(VSCode,PyCharm,etc.).
3. DataStorageImplementation:
CSVFileSetup:
Createadata/directoryinyourproject.
Createtrain.csvfilewithappropriateheaders(e.g.,train_id,from_station,to_station,journey_date).
SchemaDesign:Designthedatabaseschemaforstoringtrainschedules,bookings,passenger information, etc.
4. BackendDevelopment(Flask):
APIDevelopment:
CreateFlaskroutesfor:
Homepage(/index)
Searchtrains(/search_train)
CSE/OOSE RISHIKAC/513322104027
Bookticket(/book)
Cancelticket(/cancel)
Refundrequest(/refund)
Trainschedule(/schedule)
PassengerInfo(/info)
PrintTicket(/print_ticket)
BusinessLogic:
Implementfunctionsto:
Searchfortrainsbasedon criteria.
Booktickets.
Canceltickets.
Processrefundrequests.
Managetrainschedules.
Readand writedatato thebookings.csvfileusingthe csvmodule.
Security:
Implementbasicinputvalidationtopreventmalicious input.
ConsiderusingHTTPSforsecure communication.
5. FrontendDevelopment:
UI/UXDesign:
CreateHTMLtemplatesforeachpage(e.g.,index.html,search_train.html,book.html).
UseCSStostylethepagesandmakethemvisuallyappealing.
UseJavaScriptforinteractiveelements(e.g.,formvalidation,dynamiccontentupdates).
Integration:
UseFlask'surl_for()functiontogenerateURLsfordifferentroutes.
UseFlask'stemplateengine(Jinja2) torenderdynamiccontentin theHTML templates.
Handleformsubmissionsanddisplayappropriatemessagestothe user.
ResponsiveDesign:
Use CSSmedia queries to ensure the websitelooksgood on differentscreen sizes(desktop, tablet,
mobile).
6. Testing:
UnitTesting:
Writeunittestsforthebackendfunctions(e.g.,search train,bookticket,cancelticket).
UsePython'sunittestmoduleorpytestfor writingand runningunittests.
IntegrationTesting:
Testtheintegrationbetweenthefrontendand backend.
CSE/OOSE RISHIKAC/513322104027
Verifythatthedataisbeingpassed correctlybetween thefrontend and backend.
UserAcceptanceTesting(UAT):
Haveuserstestthesystemtoensureitmeetstheir requirements.
Gatherfeedbackfrom usersandfixanyissues.
8. Documentation:
CodeDocumentation:
Addcommentstothecodetoexplainitsfunctionality.
Usedocstringstodocumentfunctionsand classes.
UserDocumentation:
Createa usermanualthat explainshowtouse the system.
ProvideFAQsand troubleshootingtips.
APIDocumentation:
DocumenttheFlaskroutesandtheirparameters.
UsetoolslikeSwaggertogenerateAPIdocumentation.
9. Maintenanceand Updates:
BugFixesandUpdates:
Continuouslymonitorthesystemforbugsanderrors.
Fixbugsandreleaseupdatesregularly.
CustomerSupport:
Providesupporttouserswhoarehavingproblemswiththesystem.
Gatherfeedbackfromusersand useitto improvethesystem.
RESULT
Thus,thedesignforforRailwayReservationSystemhasbeenimplemented successfully
CSE/OOSE RISHIKAC/513322104027
DATE:
DATE: SOFTWARESYSTEMTESTCASES
EX.NO:
AIM
Totestthesoftwaresystemforallthescenariosidentifiedaspertheusecase diagram.
TESTCASETEMPLATE
1. TestCaseID:Auniqueidentifierforeachtestcase.
2. TestScenario:Abrief descriptionof thefunctionalitybeingtested.
3. TestSteps:Concisestepsthatoutlinehowto executethetestcase.
4. ExpectedResult:Theexpectedoutcomeafterexecutingtheteststeps.
5. ActualResult:Theactualoutcomeobserved after executingthetest.
6. Status:Pass/Failbased on whether theactualresultmatchestheexpected result.
TestCase1:FillForm
Test CaseID:TC001
TestScenario:VerifythattheCustomercansuccessfullyfillthebookingformwithallrequired details.
TestSteps:
1. Navigateto the"FillForm"usecase(normally after checkingavailability).
2. Enterallrequiredpassenger details(name,email,travelpreferences,etc.).
3. Ensureallmandatoryfieldsarefilled andvalidations(such asformatanddatatype)pass.
4. Submitthe form.
ExpectedResult:
o Theformisacceptedwithouterrors,andthedataisrecordedforfurtherprocessing.
ActualResult:
o Thebookingformissuccessfullyfilledandsubmittedwithcorrectvalidations.
Status:Pass
CSE/OOSE RISHIKAC/513322104027
TestCase2:Enquire Ticket Availability
Test CaseID:TC002
TestScenario:VerifythattheCustomercanenquireaboutticketavailabilitybyprovidingvalid travel details.
TestSteps:
1. LaunchtheapplicationandensuretheCustomerisloggedin(ifrequired).
2. Navigatetothe"EnquireTicketAvailability"feature.
3. Entervalidtravelinformation(e.g.,source,destination, date).
4. Clickon the"Search"or "Enquire"button.
ExpectedResult:
o The system displays a list of available trains, including details such as departure times, seats available,
and fare information.
ActualResult:
o Availabletrainsalongwithdetailedtimingsandseatinformationaredisplayed.
Status:Pass
CSE/OOSE RISHIKAC/513322104027
TestCase3:BookTicket
Test CaseID:TC003
Test Scenario:VerifythattheCustomer canbookaticketafter completingthebookingform.
TestSteps:
1. Completethe"FillForm"usecase asperTC001.
2. Clickonthe"BookTicket"option.
3. Thesystemprocessesthebookingrequestusingtheprovideddetails.
ExpectedResult:
o Thesystemconfirmsthebooking,displayingaticketconfirmationthatincludesaunique ticket or PNR
number and journey details.
ActualResult:
o Aconfirmationmessageisdisplayedwith ageneratedticketnumberand traveldetails.
Status:Pass
CSE/OOSE RISHIKAC/513322104027
CSE/OOSE RISHIKAC/513322104027
TestCase4:PayFareAmount
Test CaseID:TC004
TestScenario:Verifythatthe autopayment processistriggeredandexecutedautomaticallyafter ticket booking.
TestSteps:
1. Completetheticketbookingprocess.
2. Allowthesystemtotriggertheautopaymentprocessusingsavedpayment details.
3. Observetheautomaticprocessingand confirmation.
ExpectedResult:Paymentisprocessedautomaticallywithaconfirmationmessagedisplayed.
ActualResult: Autopaymentexecutedsuccessfullyandconfirmationdetailsprovided.
Status:Pass
TestCase5:PrintForm
Test CaseID:TC005
Test Scenario: Verify that the Clerk can print the filled booking form to provide a hard copy to the Customer.
TestSteps:
1. TheClerklogsintothesystem.
2. Locatethebookingformassociated with aspecific transaction.
3. Clickonthe"PrintForm"optionprovidedinthesystem interface.
ExpectedResult:
o Thesystemsendsthebookingformtotheprinter,andtheprinteddocumentincludesall essential details
(passenger info, booking details, etc.).
ActualResult:
CSE/OOSE RISHIKAC/513322104027
o Theformprintscorrectly withallrequiredbookinginformation.
Status:Pass
TestCase6:CancelTicket
Test CaseID:TC006
TestScenario:VerifythattheCustomer can cancelabooked ticketthrough the system.
TestSteps:
1. TheCustomerlogsinandnavigatestothe"CancelTicket"option.
2. Selectthetickettobecanceledfromthelistof booked tickets.
3. Confirmthecancellation whenpromptedbythe system.
ExpectedResult:
o Thesystemprocessestheticketcancellation and updatestheticketstatusto "Cancelled."
ActualResult:
o Theselectedticketiscanceled,andacancellationconfirmationmessageisdisplayed.
Status:Pass
CSE/OOSE RISHIKAC/513322104027
TestCase7:RefundMoney
Test CaseID:TC007
Test Scenario:VerifythattheRailwaySystemprocessesarefund after atickethasbeencanceled.
TestSteps:
1. Followingasuccessfulticketcancellation (TC006),navigateto therefund processsection.
2. Checkthattherefundprocedureistriggeredautomaticallyorviacustomerrequest.
3. Reviewtherefundtransactiondetails(amount,transactionID,timestamp,etc.).
ExpectedResult:
o Thesystemsuccessfullyprocessestherefund,andtherefunddetailsaredisplayedtothe Customer (or sent to
their registered email).
ActualResult:
o Therefundisprocessed,andconfirmationalongwithrefunddetailsisprovidedtothe Customer.
Status:Pass
CSE/OOSE RISHIKAC/513322104027
Prerequisitesforthe Project:
Deployment:Projectdeployedonalocal/testserver.
Software:Python,Flask, andrequireddependenciesareinstalled.
Data:CSVdatafilesareplacedinthedesignated folder.
Credentials:Validtestuseraccounts(e.g., Customer,Clerk)areavailable.
Environment: Ensurebrowser,network,andsystemconfigurationsaresetup.
RESULT
CSE/OOSE RISHIKAC/513322104027
DATE: IMPROVETHEREUSABILITYAND
MAINTAINABILITYBYAPPLYING APPROPRIATE
EX.NO: DESIGNPATTERNS
AIM
Toimprovethereusabilityandmaintainabilityofthesoftwaresystembyapplyingappropriatedesign patterns.
IMPROVINGSYSTEMSTRUCTURE
1. Model-View-Controller(MVC)
Thispatternseparatesthesystemintothreedistinctcomponents:
Model:Managesdata(e.g.,trainschedules,seatavailability, userbookings).
View:Displays information(e.g., webpages, mobileappUI).
Controller:Handlesuserrequests(e.g.,ticketsearch,bookingprocess).
2. FactoryMethod
Ratherthanmanuallycreatingticketobjects,thispatternencapsulatesobjectcreation:
StandardTicketFactory:Createsnormaltickets.
ConcessionTicketFactory:Generatesdiscountedtickets(forseniors,students).
PremiumTicketFactory:IssuesVIP-classtickets.
3. StrategyPattern
Differentfarecalculationmethodscanbeswapped dynamically:
DistanceBasedFare:Chargesperkilometer traveled.
ClassBasedFare:Pricesdifferforsleeper,AC,andgeneralclasses.
DynamicFare:Adjustsbased ondemand.
Thisensuresflexibilityinfarecalculationswithoutmodifyingcorelogic.
CSE/OOSE RISHIKAC/513322104027
4. ObserverPattern
Insteadofmanuallynotifyingusers,thesystemcanautomaticallyupdatethemwhenscheduleschange:
TrainSchedule(Subject):Maintainsschedulesand updatesstatus.
Observers(NotificationService,BookingManager):Receivealertswhentraintimingschange.
Usersreceivereal-timeupdates,improvingresponsiveness.
5. TemplateMethod
Definesthegeneralbookingstepswhileallowingspecificmodifications:
Thispreventsduplicationwhileallowingcustomworkflows.
6. SingletonPattern
Ensuresonlyoneinstanceofcoreservices(likeDatabaseConnection)exists,preventingconflicts.
Centralizeddatabasehandlingavoidsredundant queries.
Improvesperformancebyminimizingresource usage.
7. FacadePattern
Simplifiescomplexinteractionsbyprovidingasingleinterface:
BookingFacade:Handlestrainsearch,seatselection,paymentprocessinginonestep.
Usersdon’thavetointeractwithmultiplesubsystems.
RESULT
System.
CSE/OOSE RISHIKAC/513322104027
DATE: IMPLEMENTTHEMODIFIEDSYSTEMAND
TESTITFORVARIOUSSCENARIOS
EX.NO:
AIM
AIM
ToimplementandTest theModifiedRailwayReservationSystem.
Step1:ImplementtheModifiedSystem
Refactoringthecode tofollowMVCprinciples,separatingbusinesslogic,UI,anduserinteractions.
IntegratingtheFactoryMethodfor ticketcreation,ensuringdynamicticketobjectgeneration.
ImplementingtheStrategyPatternforflexiblefarecalculationsbasedondistance,class,and demand.
ObserverPatternisusedfor real-timenotifications,ensuringusersreceiveupdatesontrainschedules.
Step2: TestingtheSystemforVariousScenarios
Tovalidatethefunctionalityandrobustness,thesystemistestedunderthefollowing scenarios:
1. FunctionalTesting
TrainSearch&Booking Tests:
Verifytrainsearchresultsmatchtheuser’sinput(date,source,destination).
Ensureuserscan selectseatsandtickettype(General,Sleeper,AC,etc.).
Validatethesystemcorrectlycalculatesfarebased onclassandroute distance.
Confirmsuccessful ticketgeneration andproperformatting ofticket details(PNR,passengerinfo, barcode, etc.).
Cancellation&Refunds Tests:
UserAccountManagementTests:
Ensureuserscanupdateprofileinformation(Name,Email,Password,PhoneNumber)successfully.
CSE/OOSE RISHIKAC/513322104027
Verifybookinghistorydisplayscorrectdetails,includingpastcancellationsandpayments.
Testpasswordrecoveryandauthenticationsecuritymeasures.
2. Load&PerformanceTesting
StressTesting:
Pushthesystemtoitslimitsbysimulatingextremecasessuchas:
o Massiveticketbookingswithinashort period.
o Multiplesimultaneouscancellations.
o Suddenspikesin paymenttransactions.
Evaluatehowserverresourcesareutilizedandwhetherfail-safemechanismsare triggered.
3. SecurityTesting
Authentication&AccessControlTests:
Testloginsecurity,ensuringaccountsarenotvulnerabletoattackslikebruteforceorpassword guessing.
Validaterole-basedaccesscontrolsopassengers,clerks,andadministratorshaveproperpermissions.
Testing forSQLInjection&XSSAttacks:
Validatethatuserinputscannotbeexploitedtomanipulatedatabasequeries(SQLinjection prevention).
Ensuresystemescapesuntrustedinputto protectagainstCross-SiteScripting(XSS)attacks.
4. ErrorHandling&RecoveryTesting
CSE/OOSE RISHIKAC/513322104027
IncorrectInputHandling:
Validatepropererrormessagesappearwhenusersenterinvalidstationnames,incorrectpayment details, or
unsupported requests.
Ensureusersreceiveclearguidanceonhowtocorrecterrors.
SystemCrash&RecoveryTests:
5. Usability&AccessibilityTesting
Ensureintuitivenavigation andeasy-to-usefeatures.
Validateconsistencyindesignacrossdesktopandmobileversions.
AccessibilityComplianceChecks:
RESULT
ThustheimplementationandTestingforthe ModifiedRailwayReservationSystemwasdone
successfully.
CSE/OOSE RISHIKAC/513322104027
Appendix
app.py
fromflaskimportFlask,render_template,request,redirect,url_for,send_file from
importio
fromreportlab.lib.pagesizesimportletter from
fromdatetimeimportdatetime
import os
importuuid
app= Flask(name)
app.config['SQLALCHEMY_DATABASE_URI']='sqlite:///trains.db'app.config['SQLALCHEMY_TRACK_MODIFICATIONS']=Fal
se
db=SQLAlchemy(app)
classTrain(db.Model):
id = db.Column(db.Integer, primary_key=True)
train_id=db.Column(db.String(10),nullable=False)
from_station=db.Column(db.String(100),nullable=False) to_station
db.Column(db.Integer, nullable=False)
classBooking(db.Model):
id=db.Column(db.Integer,primary_key=True)
booking_id=db.Column(db.String(36),default=str(uuid.uuid4()),unique=True) name =
db.Column(db.String(100), nullable=False)
email=db.Column(db.String(100),nullable=False)
CSE/OOSE RISHIKAC/513322104027
phone = db.Column(db.String(15), nullable=False) from_station
=db.Column(db.String(100),nullable=False) to_station =
db.Column(db.String(100), nullable=False)
journey_date=db.Column(db.String(100),nullable=False) seats =
db.Column(db.Integer, nullable=False)
train_id=db.Column(db.String(10),nullable=False)
ifnotos.path.exists('trains.db'): with
app.app_context():
db.create_all()
print("✅Databasecreated!")
#AddthistoimporttraindatafromCSV import
csv
with open('trains.csv') as f:
reader=csv.DictReader(f)
train = Train(train_id=row['train_id'],
from_station=row['from_station'],
to_station=row['to_station'],
departure=row['departure'],
available_seats=int(row['available_seats'])
db.session.add(train)
db.session.commit()
print("Traindataimported!")
@app.route('/')
CSE/OOSE RISHIKAC/513322104027
def index():
return render_template('index.html')
@app.route('/search_train',methods=['GET','POST']) def
search_train():
ifrequest.method=='POST':
from_station=request.form['from'].strip().title()
to_station = request.form['to'].strip().title()
journey_date = request.form['journeyDate']
try:
formatted_date=datetime.strptime(journey_date,'%Y-%m-%d').strftime('%d-%m-%Y') available_trains =
Train.query.filter(
Train.from_station.ilike(f'%{from_station}%'),
Train.to_station.ilike(f'%{to_station}%'),
Train.departure.like(f'%{formatted_date}%')
).all()
returnrender_template('schedule.html',trains=available_trains)
except Exception as e:
flash('Errorprocessingyoursearch','error') return
redirect(url_for('search_train'))
returnrender_template('search_train.html')
book():
=request.form['train_id']
seats_needed=int(request.form['seats'])
train=Train.query.filter_by(train_id=train_id).first() if
flash('Notenoughseatsavailable','error')
CSE/OOSE RISHIKAC/513322104027
return redirect(url_for('search_train')) #
booking_data={
request.form['email'], 'phone':
request.form['phone'],
'from_station':request.form['from'],
'to_station': request.form['to'],
'journey_date':request.form['journeyDate'], 'seats':
seats_needed,
'train_id':train_id
train.available_seats-=seats_needed booking =
Booking(**booking_data)
db.session.add(booking) db.session.commit()
returnrender_template('confirmation.html', booking_id=booking.booking_id,
**booking_data)returnre
nder_template('book.html')
@app.route('/cancel',methods=['GET','POST']) def
cancel():
ifrequest.method=='POST':
booking_id= request.form['booking_id']
booking=Booking.query.filter_by(booking_id=booking_id).first() if
booking:
booking.status='Cancelled'db.session.
commit()
CSE/OOSE RISHIKAC/513322104027
returnrender_template('cancel.html',message="TicketCancelledSuccessfully.") else:
returnrender_template('cancel.html',message="BookingIDnotfound.") return
render_template('cancel.html')
@app.route('/refund',methods=['GET','POST']) def
refund():
ifrequest.method=='POST':
booking_id= request.form['booking_id']
booking=Booking.query.filter_by(booking_id=booking_id).first() if
booking:
booking.status='Refunded'db.session.
commit()
returnrender_template('refund.html',message="RefundProcessedSuccessfully.") else:
returnrender_template('refund.html',message="BookingIDnotfound.") return
render_template('refund.html')
@app.route('/statement/<booking_id>') def
statement(booking_id):
booking = Booking.query.filter_by(id=booking_id).first()
returnrender_template('statement.html',booking=booking)
@app.route('/booking-stats') def
booking_stats():
data=db.session.query(Booking.date,db.func.count(Booking.id)).group_by(Booking.date).all() dates =
counts =[d[1]fordindata]
returnrender_template('booking_chart.html',dates=dates,counts=counts) @app.route('/print_ticket/<booking_id>')
def print_ticket(booking_id):
CSE/OOSE RISHIKAC/513322104027
booking=Booking.query.filter_by(booking_id=booking_id).first() if
booking:
returnrender_template('print_ticket.html',booking=booking) else:
flash('BookingIDnotfound.','error')
returnredirect(url_for('cancel'))#Orsomeotherappropriatepage @app.route('/download_ticket/<booking_id>')
def download_ticket(booking_id):
booking=Booking.query.filter_by(booking_id=booking_id).first() if not
booking:
flash('BookingIDnotfoundfordownload.','error')
returnredirect(url_for('cancel'))#Orsomeotherappropriatepage buffer =
io.BytesIO()
p=canvas.Canvas(buffer,pagesize=letter)
textobject=p.beginText(inch,10.5*inch)
textobject.setFont("Helvetica-Bold", 16)
textobject.textLine("Railway Ticket")
textobject.setFont("Helvetica", 12)
ID: {booking.train_id}")
textobject.textLine(f"From:{booking.from_station}to{booking.to_station}")
p.showPage() p.save()
buffer.seek(0)
CSE/OOSE RISHIKAC/513322104027
returnsend_file(buffer,as_attachment=True,download_name=f"ticket_{booking.booking_id}.pdf",
mimetype='application/pdf')
if name =="main":
init_db()
print("StartingFlaskApp...")
app.run(debug=True)
index.html
<!DOCTYPEhtml>
<htmllang="en">
<head>
<metacharset="UTF-8">
<metaname="viewport"content="width=device-width,initial-scale=1.0">
<title>RailwayReservation -RailEase</title>
<linkrel="stylesheet"href="{{url_for('static',filename='styles.css')}}">
</head>
<body>
<header>
<imgsrc="{{url_for('static',filename='logo.jpeg')}}"alt="RailEaseLogo"class="logo">
<h1>RailEase</h1>
</header>
<nav>
<ul>
<li><ahref="{{url_for('search_train')}}">SearchTrain</a></li>
<li><ahref="{{url_for('book')}}">BookTicket</a></li>
<li><ahref="{{url_for('cancel')}}">CancelTicket</a></li>
<li><ahref="{{url_for('refund')}}">Refund</a></li>
</ul>
</nav>
<divclass="container">
CSE/OOSE RISHIKAC/513322104027
<sectionclass="hero-section">
<h2>DiscoverSeamlessTrainJourneyswith RailEase</h2>
<ahref="{{url_for('search_train')}}"class="call-to-action">SearchTrainsNow</a>
</section>
<divclass="logo-background"></div>
</div>
<footer>
<p>©2025RailEase</p>
</footer>
</body>
</html>
book.html
<!DOCTYPEhtml>
<htmllang="en">
<head>
<metacharset="UTF-8">
<metaname="viewport"content="width=device-width,initial-scale=1.0">
<title>BookTicket</title>
<linkrel="stylesheet"href="{{url_for('static',filename='styles.css')}}">
</head>
<body>
<header>
<divclass="logo-container">
<imgsrc="{{url_for('static',filename='logo.jpeg')}}"alt="RailEaseLogo"class="logo">
</div>
<h1>ConfirmYourBooking</h1>
</header>
CSE/OOSE RISHIKAC/513322104027
<divclass="booking-container">
<formmethod="POST">
<divclass="form-section">
<h3>PassengerDetails</h3>
<divclass="form-group">
<labelfor="name">FullName:</label>
<inputtype="text"id="name"name="name"placeholder="Enteryourfullname"required>
</div>
<divclass="form-group">
<labelfor="email">Email:</label>
<inputtype="email"id="email"name="email"placeholder="Enteryouremailaddress"
required>
</div>
<divclass="form-group">
<labelfor="phone">PhoneNumber:</label>
<inputtype="tel"id="phone"name="phone"placeholder="Enteryourphonenumber"
required>
</div>
</div>
<divclass="form-section">
<h3>JourneyDetails</h3>
<divclass="form-group">
<labelfor="train_id">TrainID:</label>
<inputtype="text"id="train_id"name="train_id"value="{{request.args.get('train_id','')}}"
readonly>
</div>
<divclass="form-group">
<labelfor="from">FromStation:</label>
<inputtype="text"id="from"name="from"value="{{request.args.get('from','')}}"readonly>
CSE/OOSE RISHIKAC/513322104027
</div>
<divclass="form-group">
<labelfor="to">ToStation:</label>
<inputtype="text"id="to"name="to"value="{{request.args.get('to','')}}"readonly>
</div>
<divclass="form-group">
<labelfor="journeyDate">JourneyDate:</label>
<inputtype="text"id="journeyDate"name="journeyDate"value="{{request.args.get('date','')
}}"readonly>
</div>
<divclass="form-group">
<labelfor="seats">NumberofSeats:</label>
<inputtype="number"id="seats"name="seats"min="1"placeholder="Enternumberofseats"
required>
</div>
</div>
<divclass="form-group">
<buttontype="submit">ConfirmBooking</button>
</div>
</form>
</div>
<ahref="{{url_for('index')}}"class="back-link">Back toHome</a>
<footer>
<p>©2025RailEaseTravels</p>
</footer>
</body>
</html>
confirmation.html
<!DOCTYPEhtml>
CSE/OOSE RISHIKAC/513322104027
<htmllang="en">
<head>
<metacharset="UTF-8">
<metaname="viewport"content="width=device-width,initial-scale=1.0">
<title>BookingConfirmation</title>
<linkrel="stylesheet"href="{{url_for('static',filename='styles.css')}}">
</head>
<body>
<header>
<divclass="logo-container">
<imgsrc="{{url_for('static',filename='logo.jpeg')}}"alt="RailEaseLogo"class="logo">
</div>
<h1>BookingSuccessful!</h1>
</header>
<divclass="confirmation-container">
<h2class="confirmation-heading">YourTrainTicketisConfirmed</h2>
<divclass="confirmation-details">
<divclass="detail-row">
<spanclass="detail-label">BookingID:</span>{{booking_id}}
</div>
<divclass="detail-row">
<spanclass="detail-label">Train:</span>{{train_id }}
</div>
<divclass="detail-row">
CSE/OOSE RISHIKAC/513322104027
<spanclass="detail-label">From:</span>{{from_station}}
</div>
<divclass="detail-row">
<spanclass="detail-label">To:</span>{{to_station}}
</div>
<divclass="detail-row">
<spanclass="detail-label">JourneyDate:</span>{{journey_date }}
</div>
<divclass="detail-row">
<spanclass="detail-label">Seats:</span>{{seats}}
</div>
</div>
<divclass="action-links">
<ahref="{{url_for('print_ticket',booking_id=booking_id)}}">View/DownloadTicket</a>
</div>
</div>
<ahref="{{url_for('index')}}"class="back-link">Back toHome</a>
<footer>
<p>©2025RailEase Travels</p>
</footer>
</body>
</html>
cancel.html
<!DOCTYPEhtml>
CSE/OOSE RISHIKAC/513322104027
<htmllang="en">
<head>
<metacharset="UTF-8">
<metaname="viewport"content="width=device-width,initial-scale=1.0">
<title>CancelTicket-RailEase</title>
<linkrel="stylesheet"href="{{url_for('static',filename='styles.css')}}">
<linkrel="stylesheet"href="https://cdnjs.cloudflare.com/ajax/libs/font-
awesome/6.0.0/css/all.min.css"integrity="sha512-
9usAa10IRO0HhonpyAIVpjrylPvoDwiPUiKdWk5t3PyolY1cOd4DSE0Ga+ri4AuTroPR5aQvXU9xC6qOPnzFeg=="
crossorigin="anonymous"referrerpolicy="no-referrer"/>
</head>
<body>
<header>
<divclass="logo-container">
<imgsrc="{{url_for('static',filename='logo.jpeg')}}"alt="RailEaseColorfulLogo"class="logo">
</div>
<h1>CancelYourTicket</h1>
</header>
<divclass="cancel-container">
<h2class="cancel-heading"><iclass="fasfa-bantext-warningmr-2"></i>TicketCancellation</h2>
<formmethod="POST">
<divclass="form-group">
<labelfor="booking_id"><iclass="fas fa-ticket-altmr-2"></i>EnterBookingIDtoCancel:</label>
CSE/OOSE RISHIKAC/513322104027
<inputtype="text"id="booking_id"name="booking_id"placeholder="e.g., ABC-123456"required>
</div>
<divclass="form-group">
<buttontype="submit"><iclass="fas fa-times-circlemr-2"></i>CancelTicket</button>
</div>
</form>
{%ifmessage %}
<pclass="message"><iclass="fasfa-info-circlemr-2"></i>{{message }}</p>
{%endif%}
</div>
<ahref="{{url_for('index')}}"class="back-link"><iclass="fasfa-arrow-leftmr-2"></i>Back toHome</a>
<footer>
</footer>
</body>
</html>
refund.html
<!DOCTYPEhtml>
<htmllang="en">
<head>
<metacharset="UTF-8">
<metaname="viewport"content="width=device-width,initial-scale=1.0">
<title>RefundRequest-RailEase</title>
CSE/OOSE RISHIKAC/513322104027
<linkrel="stylesheet"href="{{url_for('static',filename='styles.css')}}">
<link rel="stylesheet"
href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.0.0/css/all.min.css"
integrity="sha512-
9usAa10IRO0HhonpyAIVpjrylPvoDwiPUiKdWk5t3PyolY1cOd4DSE0Ga+ri4AuTroPR5aQvXU9xC6qOPnzFeg=="
crossorigin="anonymous" referrerpolicy="no-referrer"/>
</head>
<body>
<header>
<divclass="logo-container">
<imgsrc="{{url_for('static',filename='logo.jpeg')}}"alt="RailEaseColorfulLogo"class="logo">
</div>
<h1>RefundRequest</h1>
</header>
<divclass="refund-container">
<h2><iclass="fasfa-exclamation-triangletext-dangermr-2"></i>InitiateRefund</h2>
<formmethod="POST">
<divclass="form-group">
<labelfor="booking_id"><iclass="fas fa-ticket-altmr-2"></i>EnterYourBookingID:</label>
<inputtype="text"id="booking_id"name="booking_id"placeholder="e.g.,ABC-123456"required>
</div>
<divclass="form-group">
</div>
CSE/OOSE RISHIKAC/513322104027
</form>
{%ifmessage %}
<pclass="message"><iclass="fasfa-info-circlemr-2"></i>{{message }}</p>
{%endif%}
</div>
<ahref="{{url_for('index')}}"class="back-link"><iclass="fasfa-arrow-leftmr-2"></i>Back toHome</a>
<footer>
<p>©2025RailEaseTravels-YourTrustedJourneyPartner</p>
</footer>
</body>
</html>
Schedule.html
<!DOCTYPEhtml>
<htmllang="en">
<head>
<metacharset="UTF-8">
<metaname="viewport"content="width=device-width,initial-scale=1.0">
<title>TrainSchedule -RailEase</title>
<linkrel="stylesheet"href="{{url_for('static',filename='styles.css')}}">
</head>
<body>
CSE/OOSE RISHIKAC/513322104027
<header>
<divclass="logo-container">
<imgsrc="{{url_for('static',filename='logo.jpeg')}}"alt="RailEaseColorfulLogo"class="logo">
</div>
<h1>AvailableTrains</h1>
</header>
<main>
<table>
<thead>
<tr>
<th>TrainID</th>
<th>FromStation</th>
<th>ToStation</th>
<th>Departure</th>
<th>AvailableSeats</th>
<th>Action</th>
</tr>
</thead>
<tbody>
{%iftrains %}
{%fortrainintrains %}
<tr>
<td>{{train.train_id}}</td>
<td>{{train.from_station}}</td>
CSE/OOSE RISHIKAC/513322104027
<td>{{train.to_station}}</td>
<td>{{train.departure}}</td>
<td>{{train.available_seats}}</td>
<td>
<ahref="{{url_for('book',train_id=train.train_id,
from=train.from_station,
to=train.to_station,
date=train.departure.split()[0])}}">
BookNow
</a>
</td>
</tr>
{%endfor%}
{%else%}
<tr>
<tdcolspan="6"class="no-trains">Notrainsavailableforyoursearchcriteria</td>
</tr>
{%endif%}
</tbody>
</table>
</main>
<ahref="{{url_for('index')}}"class="back-link"><iclass="fasfa-arrow-left"></i>Backto Home</a>
<footer>
<p>©2025RailEase Travels-YourColorfulJourneyAwaits!</p>
CSE/OOSE RISHIKAC/513322104027
</footer>
</body>
</html>
Info.html
<!DOCTYPEhtml>
<htmllang="en">
<head>
<metacharset="UTF-8">
<metaname="viewport"content="width=device-width,initial-scale=1.0">
<title>PassengerInformation</title>
<linkrel="stylesheet"href="{{url_for('static',filename='styles.css')}}">
</head>
<body>
<header>
<divclass="logo-container">
<imgsrc="{{url_for('static',filename='logo.jpeg')}}"alt="RailEaseLogo"class="logo">
</div>
<h1>EnterPassengerDetails</h1>
</header>
<divclass="passenger-info-container">
<h2>YourInformation</h2>
<formmethod="POST">
<divclass="form-group">
<labelfor="name">FullName:</label>
CSE/OOSE RISHIKAC/513322104027
<inputtype="text"id="name" name="name" placeholder="Enteryourfullname"required>
</div>
<divclass="form-group">
<labelfor="email">Email:</label>
<inputtype="email"id="email"name="email"placeholder="Enteryouremailaddress" required>
</div>
<divclass="form-group">
<labelfor="phone">PhoneNumber:</label>
<inputtype="tel"id="phone"name="phone"placeholder="Enteryourphonenumber" required>
</div>
<divclass="form-group">
<buttontype="submit">Continue</button>
</div>
</form>
</div>
<ahref="{{url_for('index')}}"class="back-link">Back toHome</a>
<footer>
<p>©2025RailEaseTravels</p>
</footer>
</body>
</html>
Print_ticket.html
<!DOCTYPEhtml>
<htmllang="en">
CSE/OOSE RISHIKAC/513322104027
<head>
<metacharset="UTF-8">
<metaname="viewport"content="width=device-width,initial-scale=1.0">
<title>PrintTicket</title>
<linkrel="stylesheet"href="{{url_for('static',filename='styles.css')}}">
</head>
<body>
<divclass="ticket">
<divclass="ticket-header">
<divclass="logo-container">
<imgsrc="{{url_for('static',filename='logo.jpeg')}}"alt="RailEaseLogo"class="logo">
</div>
<divclass="company-name">RailEaseTravels</div>
</div>
<divclass="ticket-details">
<divclass="detail-row">
<divclass="detail-label">BookingID:</div>
<div>{{booking.booking_id }}</div>
</div>
<divclass="detail-row">
<divclass="detail-label">Train:</div>
<div>{{booking.train_id}}</div>
</div>
<divclass="detail-row">
CSE/OOSE RISHIKAC/513322104027
<divclass="detail-label">From:</div>
<div>{{booking.from_station}}</div>
</div>
<divclass="detail-row">
<divclass="detail-label">To:</div>
<div>{{booking.to_station}}</div>
</div>
<divclass="detail-row">
<divclass="detail-label">JourneyDate:</div>
<div>{{booking.journey_date}}</div>
</div>
<divclass="detail-row">
<divclass="detail-label">Seats:</div>
<div>{{booking.seats}}</div>
</div>
<divclass="detail-row">
<divclass="detail-label">PassengerName:</div>
<div>{{booking.name}}</div>
</div>
</div>
<divclass="barcode">
||||||||||||||||||||||
</div>
<divclass="important-info">
CSE/OOSE RISHIKAC/513322104027
<p>Pleasekeepthisticketsafe.Itisrequiredfortravel.</p>
</div>
</div>
<divclass="button-container">
<buttononclick="window.print()"class="print-button">PrintTicket</button>
<ahref="{{url_for('download_ticket',booking_id=booking.booking_id)}}"class="download- button">Download
Ticket</a>
</div>
<footer>
<p>©2025RailEaseTravels</p>
</footer>
</body>
</html>
Search_train.html
<!DOCTYPEhtml>
<htmllang="en">
<head>
<metacharset="UTF-8">
<metaname="viewport"content="width=device-width,initial-scale=1.0">
<title>SearchTrain</title>
<linkrel="stylesheet"href="{{url_for('static',filename='styles.css')}}">
<linkrel="stylesheet"href="https://cdnjs.cloudflare.com/ajax/libs/font-
awesome/6.0.0/css/all.min.css"integrity="sha512-
CSE/OOSE RISHIKAC/513322104027
9usAa10IRO0HhonpyAIVpjrylPvoDwiPUiKdWk5t3PyolY1cOd4DSE0Ga+ri4AuTroPR5aQvXU9xC6qOPnzFeg=="
crossorigin="anonymous" referrerpolicy="no-referrer" />
</head>
<body>
<header>
<divclass="logo-container">
<imgsrc="{{url_for('static',filename='logo.jpeg')}}"alt="RailEaseColorfulLogo"class="logo">
</div>
<h1>FindYourTrain</h1>
</header>
<divclass="search-container">
<formmethod="POST">
<divclass="form-group">
<labelfor="from"><iclass="fasfa-train-station"></i>FromStation:</label>
<inputtype="text"id="from"name="from"placeholder="Enterdeparturestation"required>
</div>
<divclass="form-group">
<labelfor="to"><iclass="fasfa-map-marker-alt"></i>ToStation:</label>
<inputtype="text"id="to"name="to"placeholder="Enterdestinationstation"required>
</div>
<divclass="form-group">
<labelfor="journeyDate"><iclass="farfa-calendar-alt"></i>JourneyDate:</label>
<inputtype="date"id="journeyDate"name="journeyDate"required>
</div>
CSE/OOSE RISHIKAC/513322104027
<divclass="form-group">
<buttontype="submit"><iclass="fas fa-search"></i>SearchTrains</button>
</div>
</form>
{%withmessages=get_flashed_messages(with_categories=true)%}
{%ifmessages%}
<divclass="flash-messages">
{%forcategory,messageinmessages %}
<divclass="flash{{category}}">{{message}}</div>
{%endfor%}
</div>
{%endif%}
{%endwith%}
</div>
<ahref="{{url_for('index')}}"class="back-link"><iclass="fasfa-arrow-left"></i>Backto Home</a>
<footer>
<p>©2025RailEase Travels-EnjoyYourColorfulJourney!</p>
</footer>
</body>
</html>
Style.css
body{
font-family:Arial,sans-serif;
background-color: #f4f4f4;
CSE/OOSE RISHIKAC/513322104027
margin:0;
padding:0;
header{
background-color:#333;
color: white;
text-align:center;
padding: 1em;
.logo{
height:50px; margin-
right:10px;
vertical-align:middle;
navul{
list-style:none;
padding: 0;
text-align:center;
nav li{
display: inline;
margin:015px;
nav a{
CSE/OOSE RISHIKAC/513322104027
color:rgb(156,114,240);
text-decoration: none;
font-weight: bold;
footer{
background-color:#333;
color: white;
form{
max-width:600px;
margin:50pxauto;
padding: 20px;
background-color:rgb(164,157,248);
box-shadow:0010pxrgba(0,0,0,0.1);
form input,
formbutton{
width: 100%;
padding: 10px;
margin: 10px 0;
border-radius:4px;
CSE/OOSE RISHIKAC/513322104027
border:1pxsolid #ccc;
button{
background-color:#4CAF50;
border: none;
cursor: pointer;
button:hover{
background-color:#45a049;
/*Addtostyles.css*/
.flash-messages {
margin:20pxauto;
max-width:600px;
.flash{
padding: 10px;
margin: 10px 0;
border-radius:4px;
.flash.error{
background-color:#ffebee;
color: #c62828;
CSE/OOSE RISHIKAC/513322104027
}
.flash.info{
background-color:#e3f2fd;
color: #1565c0;
table{
width:100%;
border-collapse:collapse;
margin: 20px 0;
th,
td{
padding:12px;
text-align: left;
border-bottom: 1pxsolid#ddd;
th{
background-color:#333;
color: white;
tr:hover{
background-color:#f5f5f5;
/*schedule.htmlstyles*/
CSE/OOSE RISHIKAC/513322104027
body{
font-family:'Poppins',sans-serif;
background-image:linear-gradient(135deg,#e0f7fa,#b2ebf2); margin: 0;
padding:20px;
display: flex;
flex-direction:column;
#37474f;
header{
background-color:#81d4fa;/*Lightblueheader*/ color:
#fff;
padding: 20px;
text-align:center;
border-bottom:3pxsolid#4fc3f7;
margin-bottom: 30px;
display:flex;
justify-content:center;
align-items: center;
box-shadow:02px5pxrgba(0,0,0,0.1);
header.logo{
CSE/OOSE RISHIKAC/513322104027
height:50px; margin-
right:20px;
header h1 {
margin:0;
font-size: 2.5em;
font-weight:700;
table{
width:90%;
max-width: 900px;
background-color: #fff;
border-collapse:collapse;
box-shadow:04px10pxrgba(0,0,0,0.1);
border-radius: 12px;
overflow:hidden;/*Tocontaintheborder-radius*/ margin-
bottom: 30px;
th,td{
padding:15px;
text-align: left;
border-bottom: 1pxsolid#e0e0e0;
th{
CSE/OOSE RISHIKAC/513322104027
background-color:#29b6f6;/*Brightblueheaderrow*/ color: #fff;
font-weight:600;
text-transform:uppercase;
tbodytr:nth-child(even){
background-color:#f5f5f5;/*Lightgreyforevenrows*/
tbody tr:hover{
background-color:#e1f5fe;/*Lightblueonhover */
tda{
display:inline-block;
padding:10px15px;
text-decoration:none;
size: 1em;
transition:background-color0.3sease;
td a:hover{
background-color:#f57c00;
CSE/OOSE RISHIKAC/513322104027
.no-trains {padding:
20px; text-
align:center; font-
#d32f2f;
background-color:#ffebee;
border-radius: 8px;
margin-bottom:20px;
.back-link{
color:#1e88e5;
text-decoration:none;
size: 1em;
transition:color0.3sease;
.back-link:hover {
color:#0d47a1;
footer{
background-color:#37474f;
color: #fff;
text-align:center;
CSE/OOSE RISHIKAC/513322104027
padding:20px0;
width: 100%;
margin-top:auto;
font-size: 0.9em;
box-shadow:0-2px5pxrgba(0,0,0,0.1);
/*info.htmlstyles*/ body
font-family:'Arial',sans-serif;
background-color: #f4f4f4;
margin: 0;
padding: 0;
display:flex;
flex-direction:column;
height: 100vh;
header{
padding: 20px 0;
text-align:center;
width: 100%;
margin-bottom:20px;
CSE/OOSE RISHIKAC/513322104027
display:flex;
justify-content:center;
align-items: center;
.logo-container {
margin-right:20px;
height:40px;/* Adjustsizeasneeded*/
.logo{
max-height:100%;
header h1 {
margin:0;
font-size:2em;
.passenger-info-container{
background-color: #fff;
padding: 30px;
border-radius:8px;
box-shadow:02px10pxrgba(0,0,0,0.1);
width:80%;
max-width: 500px;
margin-bottom:20px;
CSE/OOSE RISHIKAC/513322104027
.form-group{
margin-bottom:20px;
text-align: left;
width:100%;
.form-group label {
bottom:8px; font-
#555;
.form-groupinput[type="text"],
.form-groupinput[type="email"],
.form-groupinput[type="tel"]{
padding: 10px;
border:1pxsolid#ccc;
border-radius: 4px;
font-size: 1em;
.form-groupbutton{
padding:12px20px;
CSE/OOSE RISHIKAC/513322104027
border: none;
border-radius:5px;
size: 1em;
transition:background-color0.3sease;
width: 100%;
.form-group button:hover {
background-color:#0056b3;
.back-link
{color:#007bff;
text-decoration:none;
size: 0.9em;
transition:color0.3sease;
.back-link:hover {
color:#0056b3;
footer{
background-color:#333;
color: white;
text-align:center;
CSE/OOSE RISHIKAC/513322104027
padding:15px0;
width: 100%;
margin-top:auto;
font-size: 0.8em;
/*print_ticket.htmlstyles*/ body {
font-family:'Arial',sans-serif;
background-color:#f0f0f0;/*Lightgreybackgroundforviewing*/ margin:
20px;
.ticket{
solid #ccc;
border-radius:10px;
padding: 20px;
width:80%;/*Adjustwidthasneeded*/ max-
width: 600px;
margin:20px auto;
color:#333;/*Darktextcolor */
.ticket-header{ display:
flex;
CSE/OOSE RISHIKAC/513322104027
justify-content:space-between;
align-items: center;
border-bottom:2pxsolid#ddd;
padding-bottom: 10px;
margin-bottom:15px;
.logo-container{
/*Adjustlogosizeasneeded*/
height:50px;
.logo{
max-height:100%;
.company-name {
font-size: 1.5em;
font-weight:bold;
color:#007bff;/*Acommonrailwaycolor*/
.ticket-details{
margin-bottom:15px;
.detail-row {
display:flex;
justify-content:space-between;
CSE/OOSE RISHIKAC/513322104027
margin-bottom:8px;
font-size: 0.9em;
.detail-label{
font-weight:bold;
color: #555;
.barcode{
text-align:center;
margin-top:20px;
.important-info {
margin-top:20px;
padding: 10px;
background-color:#f9f9f9;
border-radius: 5px;
font-size:0.8em; color:
#777;
.button-container {
text-align:center;
CSE/OOSE RISHIKAC/513322104027
margin-top:20px;
20px;
margin: 0 10px;
border: none;
border-radius:5px;
cursor: pointer;
text-decoration:none;
color: white;
font-weight:bold;
.print-button{
background-color:#007bff;
.download-button { background-
color:#28a745;
/*Stylesspecificallyforprinting*/ @media
print {
body{
background-color:#fff;/*Whitebackgroundforprinting*/ margin:
0;
padding:0;
CSE/OOSE RISHIKAC/513322104027
font-size:10pt;/* Adjustfont size forprinting*/
.ticket {
box-shadow:none;
border:1pxsolid#000;/*Blackborderforprinting*/ width:
100%;
max-width:none;
margin: 0;
border-radius:0;
padding:10px;/* Adjustpaddingforprinting*/
.button-container {
/*search_train.htmlstyles*/ body
font-family:'Poppins',sans-serif;
background-image:linear-gradient(135deg,#e0f7fa,rgb(140,149,250));/*Lightbluegradient*/ margin: 0;
padding: 0;
display:flex;
flex-direction:column;
align-items: center;
CSE/OOSE RISHIKAC/513322104027
min-height:100vh;
color:#37474f;/*Darkgreytext*/
header{
background-color:#64b5f6;/*Lightblueheader*/ color:
#fff;
padding: 20px 0;
text-align:center;
width: 100%;
margin-bottom:30px; display:
flex;
justify-content:center;
align-items: center;
box-shadow:02px5pxrgba(0,0,0,0.1);
.logo-container {
margin-right:20px;
height:50px;/*Adjustsize */
.logo{
max-height:100%;
header h1 {
margin:0;
CSE/OOSE RISHIKAC/513322104027
font-size: 2.5em;
font-weight:700;
.search-container {
background-color:#fff;
padding: 40px;
border-radius:12px;
box-shadow:04px10pxrgba(0,0,0,0.1);
width:85%;
max-width: 600px;
margin-bottom:30px;
.form-group{
margin-bottom:25px;
.form-grouplabel{
display: block;
margin-bottom:10px;
font-weight: 600;
color:#546e7a;/*Slategreylabel*/ font-
size: 1.1em;
.form-groupinput[type="text"],
.form-groupinput[type="date"]{
CSE/OOSE RISHIKAC/513322104027
width:calc(100%-22px);
padding: 12px;
border:1pxsolid#a7b1b8;/*Lightgreyborder*/ border-
radius: 6px;
font-size:1em;
color:#37474f;
.form-groupbutton{
background-color:#29b6f6;/*Brightbluebutton*/ color:
#fff;
padding:15px25px;
pointer; font-size:
1.2em;
transition:background-color0.3sease;
width: 100%;
box-shadow:02px4pxrgba(0,0,0,0.1);
.form-groupbutton:hover{
background-color:rgb(54,131,189);/*Darkerbrightblue*/
.flash-messages {
margin-top:30px;
CSE/OOSE RISHIKAC/513322104027
width:85%;
max-width:600px;
.flash {
bottom:15px; font-size:
1.1em;
.flash.error{
background-color:#ffcdd2;/*Lightred*/ color:
border:1pxsolid #e57373;
.flash.info{
background-color:#c8e6c9;/*Lightgreen*/ color:
border:1pxsolid #81c784;
.back-link{
color:#1e88e5;/*Anothershadeofblue*/ text-
decoration: none;
margin-top:20px;
font-size: 1em;
CSE/OOSE RISHIKAC/513322104027
transition:color0.3sease;
.back-link:hover{
color:#0d47a1;/*Darkerblue*/
footer{
background-color:#37474f;
color: #fff;
text-align:center;
padding: 20px 0;
width: 100%;
margin-top:auto;
font-size: 0.9em;
box-shadow:0-2px5pxrgba(0,0,0,0.1);
Style.css
/*GeneralStyles*/ body {
font-family:'Arial',sans-serif;
background-color: #f4f4f4;
margin: 0;
padding: 0;
display:flex;
flex-direction:column;
CSE/OOSE RISHIKAC/513322104027
min-height:100vh;
color: #333;
header{
background-color:#fff; color:
#007bff;
text-align:center;
padding: 20px;
border-bottom:1pxsolid#ddd; display:
flex;
justify-content:center;
align-items: center;
width: 100%;
margin-bottom:30px;
box-shadow:02px5pxrgba(0,0,0,0.1);
.logo-container {
margin-right:20px;
height:40px;
.logo{
height:50px; margin-
right:10px;
vertical-align:middle;
CSE/OOSE RISHIKAC/513322104027
max-height:100%;
headerh1{
margin:015px00;
font-size: 2.5em;
font-weight: bold;
nav {
background-color:#007bff;
color: white;
padding:15px0;
border-bottom: 2pxsolid#0056b3;
navul{
list-style:none;
padding: 0;
margin:0;
text-align:center;
nav li{
display: inline;
margin:015px;
nav a{
CSE/OOSE RISHIKAC/513322104027
color:white;
size: 1.1em;
transition:color0.3sease;
font-weight: bold;
nav a:hover {
color:#ddd;
.container {
flex-grow:1;
padding: 20px;
text-align:center;
footer{
background-color:#333;
color: white;
width: 100%;
font-size:0.9em;
box-shadow:0-2px5pxrgba(0,0,0,0.1);
CSE/OOSE RISHIKAC/513322104027
form{
max-width:600px;
margin:50pxauto;
padding: 20px;
background-color:rgb(164,157,248);
box-shadow:0010pxrgba(0,0,0,0.1);
form input,
formbutton{
width: 100%;
padding: 10px;
margin: 10px 0;
border-radius:4px;
border:1pxsolid #ccc;
button{
background-color:#4CAF50;
border: none;
cursor: pointer;
button:hover{
background-color:#45a049;
CSE/OOSE RISHIKAC/513322104027
.back-link
{color:#007bff;
text-decoration:none;
size: 0.9em;
transition:color0.3sease;
.back-link:hover {
color:#0056b3;
/*Specific Styles */
.hero-section{
background-color:#e9ecef;
padding: 40px;
border-radius: 8px;
margin-bottom:20px;
.hero-section h2 {
font-size:2.2em;
color: #333;
margin-bottom:15px;
.hero-section p {
font-size:1.1em;
CSE/OOSE RISHIKAC/513322104027
color:#555;
line-height: 1.6;
margin-bottom:20px;
.call-to-action {
display:inline-block;
padding:12px25px;
background-color:#28a745;
color: white;
text-decoration:none;
size: 1.1em;
transition:background-color0.3sease;
.call-to-action:hover {
background-color:#1e7e34;
.logo-background{/* Newclassforthebackground*/
background-image:url('/static/railway.jpg');/*Pathtoyourimage*/
background-repeat: no-repeat;
background-position:centerbottom;/*Positionatthebottomcenter*/
2100px 900px;
CSE/OOSE RISHIKAC/513322104027
}
/*book.htmlstyles*/
.booking-container {
background-color:#fff;
padding: 30px;
border-radius:8px;
box-shadow:02px10pxrgba(0,0,0,0.1);
width:80%;
max-width: 600px;
margin-bottom:20px;
.form-section{
margin-bottom: 25px;
padding-bottom:15px;
border-bottom: 1pxsolid#eee;
.form-section:last-child{
border-bottom:none;
.form-sectionh3{ color:
#333;
margin-top: 0;
margin-bottom:15px;
font-size: 1.5em;
CSE/OOSE RISHIKAC/513322104027
}
.form-group{
margin-bottom:15px;
text-align: left;
width:100%;
.form-group label {
bottom:8px; font-
#555;
.form-groupinput[type="text"],
.form-groupinput[type="email"],
.form-groupinput[type="tel"],
.form-groupinput[type="number"]{
10px;
border:1pxsolid#ccc;
border-radius: 4px;
font-size: 1em;
.form-groupinput[readonly]{
CSE/OOSE RISHIKAC/513322104027
background-color:#f9f9f9;
color: #777;
cursor:not-allowed;
.form-groupbutton{
background-color:#28a745;/*Greenbuttonforbooking*/ color:
white;
padding:12px20px;
pointer; font-size:
1em;
transition:background-color0.3sease;
width: 100%;
.form-group button:hover {
background-color:#1e7e34;
/*confirmation.htmlstyles*/
.confirmation-container{
background-color:#fff;
padding: 30px;
border-radius:8px;
box-shadow:02px10pxrgba(0,0,0,0.1);
CSE/OOSE RISHIKAC/513322104027
width:80%;
max-width: 500px;
margin-bottom:20px;
text-align: center;
.confirmation-heading{ color:
#28a745;
font-size: 1.8em;
margin-bottom:20px;
.confirmation-details {
bottom:20px;
.detail-row{
margin-bottom:10px;
font-size: 1em;
color: #333;
display:flex;
justify-content:space-between;
.detail-label{
font-weight: bold;
margin-right:10px;
CSE/OOSE RISHIKAC/513322104027
color:#555;
.action-links { margin-
top:20px;
.action-links a {
display:inline-block;
padding:10px20px;
margin: 0 10px;
border:1pxsolid#007bff; color:
#007bff;
text-decoration:none;
border-radius: 5px;
transition:background-color0.3sease,color0.3sease;
.action-links a:hover {
background-color:#007bff;
color: white;
/*cancel.htmlstyles*/ body {
font-family:'SegoeUI',Tahoma,Geneva,Verdana,sans-serif;
background-color: #f8f9fa;
margin:0;
CSE/OOSE RISHIKAC/513322104027
padding:20px;
display: flex;
flex-direction:column;
#495057;
header{
background-color:#ffc107;/*Bootstrapwarningyellow*/ color:
headerh1{
font-size: 2.2em;
font-weight:500;
.cancel-container {
background-color:#fff;
padding: 30px;
border-radius:8px;
box-shadow:0010pxrgba(0,0,0,0.1);
width:90%;
max-width: 500px;
margin-bottom:30px;
CSE/OOSE RISHIKAC/513322104027
.cancel-heading{
color: #ffc107;
font-size:1.8em;
margin-bottom:20px;
text-align: center;
.message{
margin-top: 20px;
padding: 15px;
border-radius:5px;
background-color:#fff3cd;/*Lightyellowbackground*/ color:
border:1pxsolid#ffeeba;/*Lightyellowborder*/ text-
align: center;
/*refund.htmlstyles*/
header {
background-color:#dc3545;/*Bootstrapdangerred*/ color:
#fff;
.refund-container {
background-color:#fff;
padding: 30px;
CSE/OOSE RISHIKAC/513322104027
border-radius:8px;
box-shadow:0010pxrgba(0,0,0, 0.1);
width:90%;
max-width: 500px;
margin-bottom:30px;
/*schedule.htmlstyles*/
body {
font-family:'Poppins',sans-serif;
background-image:linear-gradient(135deg,#e0f7fa,#b2ebf2); color:
#37474f;
header{
background-color:#81d4fa;/*Lightblueheader*/ color:
#fff;
border-bottom: 3pxsolid#4fc3f7;
headerh1{
font-size: 2.5em;
font-weight:700;
table{
width:90%;
max-width:900px;
CSE/OOSE RISHIKAC/513322104027
background-color: #fff;
border-collapse:collapse;
box-shadow:04px10pxrgba(0,0,0,0.1);
border-radius: 12px;
overflow:hidden;/*Tocontaintheborder-radius*/ margin-
bottom: 30px;
th,td{
padding:15px;
text-align: left;
border-bottom:1pxsolid#e0e0e0;
th{
font-weight:600;
text-transform:uppercase;
tbodytr:nth-child(even){
background-color:#f5f5f5;/*Lightgreyforevenrows*/
tbody tr:hover{
background-color:#e1f5fe;/*Lightblueonhover */
CSE/OOSE RISHIKAC/513322104027
tda{
display:inline-block;
padding:10px15px;
text-decoration:none;
size: 1em;
transition:background-color0.3sease;
td a:hover{
background-color:#f57c00;
.no-trains {padding:
20px; text-
align:center; font-
#d32f2f;
background-color:#ffebee;
border-radius: 8px;
margin-bottom:20px;
/*info.html styles*/
CSE/OOSE RISHIKAC/513322104027
.passenger-info-container{
background-color: #fff;
padding: 30px;
border-radius:8px;
box-shadow:02px10pxrgba(0,0,0,0.1);
width:80%;
max-width: 500px;
margin-bottom:20px;
/*print_ticket.htmlstyles*/ body {
font-family:'Arial',sans-serif;
background-color:#f0f0f0;/*Lightgreybackgroundforviewing*/ margin:
20px;
.ticket{
solid #ccc;
border-radius:10px;
padding: 20px;
width:80%;/*Adjustwidthasneeded*/ max-
width: 600px;
margin:20px auto;
CSE/OOSE RISHIKAC/513322104027
color:#333;/*Darktextcolor */
.ticket-header{
justify-content:space-between;
align-items: center;
border-bottom:2pxsolid#ddd;
padding-bottom: 10px;
margin-bottom:15px;
.company-name {
font-size: 1.5em;
font-weight:bold;
color:#007bff;/*Acommonrailwaycolor*/
.ticket-details{
margin-bottom:15px;
.detail-row{
margin-bottom:8px;
font-size: 0.9em;
.detail-label{
font-weight:bold;
color: #555;
CSE/OOSE RISHIKAC/513322104027
}
.barcode{
text-align:center;
margin-top:20px;
.important-info {
margin-top:20px;
padding: 10px;
background-color:#f9f9f9;
border-radius: 5px;
font-size:0.8em; color:
#777;
.button-container {
text-align:center;
margin-top:20px;
20px;
margin:010px; border:
none;
CSE/OOSE RISHIKAC/513322104027
border-radius:5px;
cursor: pointer;
text-decoration:none;
color: white;
font-weight:bold;
.print-button{
background-color:#007bff;
.download-button { background-
color:#28a745;
/*Stylesspecificallyforprinting*/ @media
print {
body{
background-color:#fff;/*Whitebackgroundforprinting*/ margin:
0;
padding:0;
.ticket {
box-shadow:none;
border:1pxsolid#000;/*Blackborderforprinting*/ width:
100%;
CSE/OOSE RISHIKAC/513322104027
max-width:none;
margin: 0;
border-radius:0;
padding:10px;/* Adjustpaddingforprinting*/
.button-container {
display:none;/*Hidebuttonswhen printing*/
/*search_train.htmlstyles*/ body
font-family:'Poppins',sans-serif;
header{
background-color:#64b5f6;/*Lightblueheader*/
headerh1{
font-size: 2.5em;
font-weight:700;
.search-container {
background-color:#fff;
CSE/OOSE RISHIKAC/513322104027
padding: 40px;
border-radius:12px;
box-shadow:04px10pxrgba(0,0,0,0.1);
width:85%;
max-width: 600px;
margin-bottom:30px;
.form-grouplabel{
display: block;
margin-bottom:10px;
font-weight: 600;
color:#546e7a;/*Slategreylabel*/ font-
size: 1.1em;
.form-groupinput[type="text"],
.form-groupinput[type="date"]{
12px;
border:1pxsolid#a7b1b8;/*Lightgreyborder*/ border-
radius: 6px;
font-size:1em;
color:#37474f;
.form-groupbutton{
CSE/OOSE RISHIKAC/513322104027
background-color:#29b6f6;/*Brightbluebutton*/ color:
#fff;
padding:15px25px;
pointer; font-size:
1.2em;
transition:background-color0.3sease;
width: 100%;
box-shadow:02px4pxrgba(0,0,0,0.1);
.form-groupbutton:hover{
background-color:rgb(54,131,189);/*Darkerbrightblue*/
.flash-messages {
margin-top:30px;
width: 85%;
max-width:600px;
.flash {
bottom:15px; font-size:
1.1em;
CSE/OOSE RISHIKAC/513322104027
}
.flash.error{
background-color:#ffcdd2;/*Lightred*/ color:
border:1pxsolid #e57373;
.flash.info{
background-color:#c8e6c9;/*Lightgreen*/ color:
border:1pxsolid #81c784;
CSE/OOSE RISHIKAC/513322104027