HR Management
HR Management
A PROJECT REPORT
Submitted by
BACHELOR OF ENGINEERING
In
Computer Engineering
Department
i
Swaminarayan College of Engineering
& Technology
Kalol, Gandhinagar, Gujarat
(Affiliated with GTU)
This is to certify that the work of Project entitled “HR Management System”
has been carried out by Raval Ridham Bipinbhai (201150107001) under my
guidancein partial fulfilment for the degree of Bachelor of Engineering in
ii
Swaminarayan College of Engineering
& Technology
Kalol, Gandhinagar, Gujarat
(Affiliated with GTU)
This is to certify that the work of Project entitled “HR Management System”
has been carried out by Khuman Vinit Amrutbhai (201150107002) under my
guidance in partial fulfilment for the degree of Bachelor of Engineering in
iii
Swaminarayan College of Engineering
& Technology
Kalol, Gandhinagar, Gujarat
(Affiliated with GTU)
This is to certify that the work of Project entitled “HR Management System”
has been carried out by Parmar Yuvrajsinh Arvindsinh (201150107010) under
my guidance in partial fulfilment for the degree of Bachelor of Engineering in
iv
Swaminarayan College of Engineering
& Technology
Kalol, Gandhinagar, Gujarat
(Affiliated with GTU)
This is to certify that the work of Project entitled “HR Management System”
has been carried out by Patel Hiren Daxeshbhai (201150107012) under my
guidance in partial fulfilment for the degree of Bachelor of Engineering in
v
PMMS CERTIFICATE
vi
Acknowledgement
vii
Abstract
The system aims at the maintenance and management of the different Hotels that are
available in the different parts of the world. It mainly takes care of the HR Management at
the core area of the database. The system provides the information regarding the different
Hotels that are available and their status specific to availability. The guests can visit the site
and register themselves with the required information that is expected by the system. Each
registered guest can rise are quest for the unit bookings. The Guessers scheduled with the
information of the availability of the units for they have requested the time.
The total front end was dominated using HTML, CSS and Java Script standard supplied with
the dynamism of PHP server pages. The communicating client was designed using serviette.
At all proper levels high care was taken to check that the system manages the date
consistency with proper business validations. The database connectivity was planned using
the MySQL Data Base Connectivity, the authorization and authorization was cross checked
at all stages. The user level accessibility has been restricted in to two zones the
administrative and the normal user zone.
viii
Swaminarayan College of Engineering
& Technology
Kalol, Gandhinagar, Gujarat
(Affiliated with GTU)
DECLARATION
We hereby declare that the Project report submitted along with the In Project entitled “HR
Management System” submitted in partial fulfillment for the degree of Bachelor of
Engineering in Computer Engineering to Gujarat Technological University, Ahmadabad, Isa
bonafide record of original project work carried out by me at Swaminarayan College of
Engineering& Technology under the super vision of Prof. Nimesh Vaidya and that no part of
this report has been directly copied from any students ‘reports or taken from any other source,
without providing due reference.
Raval Ridham
Khuman Vinit
Parmar Yuvrajsinh
Patel Hiren
ix
Company Details
Over view of Company
Scope of Work
The scope of Phoenix IT Solutions is quite broad as they offer a wide range of
services related to information technology. Their services include:
Mobile App Development - The company also specializes in mobile app development
for iOS, Android, and hybrid platforms. They can develop custom apps, gaming apps,
and business apps for clients.
Company Vision
Currently Be in the company that best understands and satisfies the product, service
and self-fulfillment needs of the industry globally. Being a great place to work where
people are inspired to be the best they can be
x
Offer letter
Raval Ridham (201150107001)
xi
Khuman Vinit (201150107002)
xii
Parmar Yuvrajsinh (201150107010)
xiii
Patel Hiren (201150107012)
xiv
Project Content
Title Page I
Certificate(College) II
Certificate(PMMS) III
Acknowledgement IV
Abstract V
Declaration VI
Contents IX
List of Figures XI
Chapter1 Introduction 1
1.3 Purpose 2
1.4 Scope 2
1.5 Objective 2
xv
11
3.5 E Diagram
12
3.6 Class Diagram
13
Chapter4 Design
13
4.1 System Flow Diagram
14
4.2 Testing
15
Chapter5 Implementation
15
5.1 Implementation Environment (tools & Technology)
16
5.2 Security Feature
18
5.3 Coding Standard
20
5.4 Sample Code
34
Chapter6 Testing
34
6.1 Testing Plan / Strategy
37
6.2 Test Results and Analysis
38
Chapter7 Project Screenshot
38
7.1 Prototype with Results/Screenshot
55
Chapter8 Conclusion & Discussion
55
8.1 Conclusion
56
8.2 Summary of Project Work
57
8.3 Problem Encountered and Possible Solutions
58
8.4 Limitation & Future Work
59
References
xvi
Figure No. Figure Name Page No.
Fig2.1 Agile process 5
Fig.2.2 Gantt Chart 6
Fig.3.1 Use Case Diagram 8
Fig.3.2 Sequence Diagram 9
Fig.3.3 Activity Diagram 10
Fig.3.4 Dataflow Diagram 11
Fig.3.5 ER Diagram 12
Fig.3.6 Class Diagram 13
Fig.4.1 System Flow Diagram 14
Fig.5.4 Sample Code 21
xvii
Fig 6.1 Types of Testing 45
Fig 7.1 Login Page 49
Fig 7.2 Dashboard 50
Fig 7.3 Department 50
Fig 7.4 Designation 51
Fig 7.5 Employees 51
Fig 7.6 Disciplinary 52
Fig7.7 Inactive User 52
Fig7.8 Attendance List 53
Fig7.9 Add Attendance 53
Fig7.10 Attendance Report 54
Fig7.11 Holiday 54
Fig7.12 Leave Type 55
Fig7.13 Leave Application 55
Fig7.14 Report 56
Fig7.15 Projects 56
Fig7.16 Task List 57
Fig 7.17 Payroll List 57
Fig 7.18 Personal Info 58
Fig 7.19 Settings 58
List of Tables
Table.2.3 Roles and Responsibilities 7
Table.6.2 Test Case 38
xvii
i
TEAMID: 459960
CHAPTER: 1
INTRODUCTION
The CSE Learning Hub project is dedicated to supporting CSE students by providing
essential study resources free of charge. Our user-friendly app enables students to access and
contribute educational content effortlessly. To ensure security, we integrate Firebase for user
authentication. With a focus on accessibility and collaboration, the CSE Learning Hub aims
to streamline the learning process for students pursuing Computer Science and Engineering.
Traditionally, a hotel property management system was defined as a system that enables a
hotel or group of hotels to mange front-office capabilities, such as booking reservation, guest
check- in/check-out, room assignment, managing room rates and billing.
1.4 Purpose:
of the rooms, Cash billing, Room service, Restaurant service, Restaurant Billing,
Total Billing, Travels arrangement etc. using the automated HR management
software. One can Keep detailed records or info on an unlimited amount of customers.
The system l est. the user Know which all rooms are available for occupancy at any
point of time. This makes the Booking considerably faster. And thus helps the hotel
in better management and reduce a lot of paper work as well as manpower.
1.5 Scope:
1.6 Objective:
objectives of HR management are crucial to the success of any hotel, and they
play a critical role in achieving its goals. In this blog, we will discuss the
Customer Satisfaction.
Using Firebase for secure user login.
Operation efficiency.
In the literature review we consider and examine the work done by other scholars and
researchers who have broached on this particular topic (HR Management System) Technology
has made a considerable impact on the Hospitality industry in recent years and will continue to
do so with the increasing use of computer, controlled equipment and the growth of information
technology in general” (Jones and Lockwood, 1989, p.6) Really in the last two decades,
technology has become far more advanced and far more widely used throughout all types of
industry. The tourism and hospitality industry is no exception. Indeed, many tourism and
leisure establishments rely on technological systems for the vast majority of their operations.
They use a range of computer programs from everything to bookings, communications,
security and payments. If a hospitality establishment does not use some sort of advanced
technological system in its operations, it is deemed to be out of date and disorganized. Indeed,
James Bardi begins to outline the importance of these programs by claiming that “a well-
organized reservation system allows hotels to ensure a steady flow of guests into their
properties”. Furthermore, “Profitable business ventures rely on effective marketing, which
includes reviewing people who require hotel products and services, determining their specific
needs, developing products and services that meet those needs, and making a profit on the sale
of those products and services” (Bardi, 2010). Part of the reason why hotels utilize
technological systems in their operations is because it keeps them up to date in terms of where
they are placed in the market. It makes work easier for staff members, allowing them to work
more efficiently and taking away time consuming activities which can be carried out by the
technology. In some hotels, the utilization of technological systems mean that fewer staff
members are needed and this saves considerable costs. For others, especially luxury hotels, this
is not the case but it means that the staff can be free to attend to customers on a more personal
basis, thus upholding high standards. Therefore, it is understandable that 5 star hotels must
ensure that they employ the most advanced technology available. This is because their priority
is maintaining their position and status as a luxury brand, rather than cutting costs, which
would be more of a priority for budget hotels which cater to a lower end market. Therefore
luxury tourist establishments rely on top quality technological systems.
CHAPTER: 2
The CSE Learning Hub is a comprehensive educational platform designed specifically for
Computer Science and Engineering (CSE) students. It offers a wide range of resources
including course outlines, papers, reports, and textbooks, all accessible through a user-
friendly mobile application. The system aims to democratize education by providing these
resources free of cost, making learning more accessible and inclusive for all CSE students.
The Project work will ensure reservation of hotel rooms, staff management, and resource
management. A “Use Case” scenario is the room search for room reservation. Users may face
difficulties searching between available and booked rooms, but the automated system would
search more efficiently with the proficient search algorithm. All details of the rooms are
stored in the database servers and can be retrieved or modified with very little stress. Another
“Use Case” is the accounts receivable and payable field of the F&A module. The accounts
receivable simply captures all funds coming-in with their sources and dates while the
accounts payable displays the money going-out of the organization with their destination. The
business flow is quite simple; however, to accomplish all these tasks is burdensome for both
the customer side and the hotel side without an efficient and integrated HR management
system.
Agile Process:
The project will be managed using the Agile process, allowing for iterative development and
frequent feedback loops. This approach enables flexibility and adaptability to changing
requirements throughout the project lifecycle.
Fig2.1AgileProcess
Gantt Chart:
A Gantt chart will be utilized to visualize project milestones, tasks, and deadlines, facilitating
effective project management and resource allocation to ensure timely delivery of the HR
Management System.
Task Week Week Week Week Week Week Week Week Week Week Week Week
1 2 3 4 5 6 7 8 9 10 11 12
Planning
Research
Database
Setup
Designing
User
Authentication
Development
Trial&
Feedback
ModifyCode
Testing
FinalVersion
Fig 2.2GanttChart
Activities Responsibility
Planning Raval Ridham
Research Raval Ridham
DatabaseSetup Raval Ridham
Designing Raval Ridham
User Authentication Raval Ridham
Development Raval Ridham
Trial& Feedback Raval Ridham
Modify Code Raval Ridham
Testing Raval Ridham
Deployment Raval Ridham
CHAPTER:3
A use case diagram provides a visual representation of interactions between users (actors) and
a system to achieve specific goals. It outlines different scenarios or actions users can take
within the system. This diagram helps to understand system functionality and user
interactions in a simple and clear manner.
Sequence Diagram:
A sequence diagram is a type of interaction diagram that illustrates the flow of messages and
interactions between objects or components in a system over time. It shows the chronological
sequence of events that occur during a particular scenario or use case. Sequence diagrams are
useful for visualizing the dynamic behavior of a system and understanding how different
components communicate with each other to achieve a specific outcome.
Activity Diagram:
An activity diagram is a type of behavior diagram in the Unified Modeling Language (UML)
that represents the flow of activities or actions within a system or process. It visually depicts
the sequence of activities, decision points, and transitions that occur during the execution of a
particular use case or scenario. Activity diagrams are useful for modeling the workflow of
complex systems, business processes, or software applications.
Fig3.3ActivityDiagram
A data flow diagram (DFD) is a graphical representation of the flow of data within a system.
It illustrates how data moves through different processes, stores, and external entities within
the system. DFDs are commonly used in systems analysis and design to visualize the
structure and behavior of a system's data flow.
Fig3.4DataFlowDiagram
E-R Diagram:
Class Diagram:
A class diagram is a type of static structure diagram in the Unified Modeling Language
(UML) that illustrates the structure of a system by showing the classes, their attributes,
methods, and relationships between them. Class diagrams are widely used in software
development to model the object-oriented design of a system.
Fig 3.6ClassDiagram
CHAPTER : 4
DESIGN
A system flow diagram, also known as a system flowchart or system process diagram, is a
visual representation that illustrates the flow of data or information within a system. It
provides a high-level overview of the processes, interactions, and data flows that occur within
the system. System flow diagrams are commonly used in system analysis and design to
analyze and document the flow of information through various stages of a system.
Testing
Testing is the process of detecting errors. Testing performs a very critical role for quality assurance
and for ensuring the reliability of software. The results of testing are used later on during maintenance
also.
Psychology of Testing :
The aim of testing is often to demonstrate that a program works by showing that it has no errors. The
basic purpose of testing phase is to detect the errors that may be present in the program. Hence one
should not start testing with the intent of showing that a program works, but the intent should be to
show that a program doesn’t work. Testing is the process of executing a program with the intent of
finding errors.
Testing Objectives: The main objective of testing is to uncover a host of errors, systematically and
with minimum effort and time. Stating formally, we can say
Testing is a process of executing a program with the intent of finding an error.
A successful test is one that uncovers an as yet undiscovered error.
A good test case is one that has a high probability of finding error, if it exists.
The tests are inadequate to detect possibly present errors.
The software more or less confirms to the quality and reliable standards.
Levels of Testing:
In order to uncover the errors present in different phases we have the concept of levels of testing. The
basic levels of testing are as shown below…
Client Needs
Acceptance Testing
Requirements
System Testing
Integration Testing
Design
CHAPTER: 5
IMPLEMENTATION
During the development of the HR Management System, we leveraged a versatile set of tools
and technologies to ensure cross-platform compatibility and seamless user experience across
various devices. Here are the key components of our implementation environment:
Visual Studio Code (VS Code): VS Code served as the primary code editor for
developing the HMS. Its lightweight yet powerful features, extensive plugin
ecosystem, and seamless integration with PHP made it an ideal choice for our
development workflow.
Top Level DFD: The Top Level DFD gives the overview of the whole system
identifying the major system processes and data flow. This level focuses on the single
process that is drawn in the context diagram by ‘Zooming in’ on its contents and
illustrates what it does in more detail.
Detailed Level DFD: In Detailed D.F.Ds the main process is divided into sub
processes and we try to find out the flow from one process to another process. We
find the interaction among External entities, processes, sub processes and database.
A data-flow diagram (DFD) is a way of representing a flow of a data of a process or a
system (usually an information system). The DFD also provides information about the
outputs and inputs of each entity and the process itself. A data-flow diagram has no
control flow, there are no decision rules and no loops. Specific operations based on
the data can be represented by a flowchart
Security Features
Ensuring the security and privacy of our users' data is a top priority in the development of the
CSE Learning Hub app. Here are the key security features implemented to safeguard user
information:
Authentication: The app employs Firebase Authentication, which offers secure user
authentication mechanisms such as email/password authentication, social login (e.g.,
Google Sign-In), and phone number authentication. This ensures that only authorized
users can access the app's features and content.
Encryption: All sensitive data transmitted between the app and the backend servers is
encrypted using industry-standard encryption protocols such as SSL/TLS. This
ensures that data remains confidential and protected from unauthorized access during
transmission.
Security Testing: The app undergoes rigorous security testing processes, including
Data Protection: User data is stored securely using Firebase services, which provide
robust data security features such as encryption at rest and data masking.
Additionally, data access controls are enforced to restrict unauthorized access to
sensitive user information.
Coding Standards
Adhering to coding standards is essential for ensuring the readability, maintainability, and
consistency of the CSE Learning Hub app's codebase. Here are the coding standards followed
during the development process:
Naming Conventions:
Descriptive and meaningful variable, function, and class names are used to enhance
code readability.
Camel Case naming convention is followed for variables and functions, while
Pascal Case is used for class names.
Code Structure:
Modular code structure is employed, with logical separation of concerns to enhance
maintainability and scalability.
Functions and classes are organized into modules based on functionality, with each
module focusing on a specific feature or aspect of the app.
Error Handling:
Robust error handling mechanisms are implemented throughout the codebase to
gracefully handle exceptions and unexpected scenarios.
Error messages are clear, concise, and user-friendly, providing actionable information
to users in case of errors.
Code Reviews:
All code changes undergo thorough peer code reviews to ensure adherence to coding
standards, identify potential issues, and promote knowledge sharing among team
members.
Code review feedback is provided constructively, focusing on improvements in code
quality, readability, and maintainability.
Version Control:
Git version control system is used to manage code changes, with each feature or bug
fix implemented in separate branches.
Meaningful commit messages are used to describe the purpose and context of each
code change, facilitating easier tracking and debugging
Sample Code
Login.php
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<!-- Tell the browser to be responsive to screen width -->
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="description" content="">
<meta name="author" content="">
<!-- Favicon icon -->
<link rel="icon" type="image/png" sizes="16x16" href="assets/images/favicon.png">
<title>HR System</title>
<!-- Bootstrap Core CSS -->
<link href="<?php echo base_url(); ?>assets/plugins/bootstrap/css/bootstrap.min.css" rel="stylesheet">
<!-- Custom CSS -->
<link href="<?php echo base_url(); ?>assets/css/style.css" rel="stylesheet">
<!-- You can change the theme colors from here -->
<link href="<?php echo base_url(); ?>assets/css/colors/blue.css" id="theme" rel="stylesheet">
<!-- HTML5 Shim and Respond.js IE8 support of HTML5 elements and media queries -->
<!-- WARNING: Respond.js doesn't work if you view the page via file:// -->
<!--[if lt IE 9]>
<script src="https://oss.maxcdn.com/libs/html5shiv/3.7.0/html5shiv.js"></script>
<script src="https://oss.maxcdn.com/libs/respond.js/1.4.2/respond.min.js"></script>
<![endif]-->
</head>
<body>
<!-- ============================================================== -->
<!-- Preloader - style you can find in spinners.css -->
<!-- ============================================================== -->
<div class="preloader">
<svg class="circular" viewBox="25 25 50 50">
<circle class="path" cx="50" cy="50" r="20" fill="none" stroke-width="2" stroke-miterlimit="10" /> </svg>
</div>
<!-- ============================================================== -->
<!-- Main wrapper - style you can find in pages.scss -->
<!-- ============================================================== -->
</html>
Dashboard.php
<?php $this->load->view('backend/header'); ?>
<?php $this->load->view('backend/sidebar'); ?>
<div class="page-wrapper">
<div class="message"></div>
<div class="row page-titles">
<div class="col-md-5 align-self-center">
<h3 class="text-themecolor"><i class="fa fa-braille" style="color:#1976d2"></i>  Dashboard</h3>
</div>
<div class="col-md-7 align-self-center">
<ol class="breadcrumb">
<li class="breadcrumb-item"><a href="javascript:void(0)">Home</a></li>
<li class="breadcrumb-item active">Dashboard</li>
</ol>
</div>
</div>
<!-- Container fluid -->
<!-- ============================================================== -->
<div class="container-fluid">
<!-- ============================================================== -->
<!-- Row -->
<div class="row">
<!-- Column -->
<div class="col-lg-3 col-md-6">
<div class="card">
<div class="card-body">
<div class="d-flex flex-row">
<div class="round align-self-center round-primary"><i class="ti-user"></i></div>
<div class="m-l-10 align-self-center">
<h3 class="m-b-0">
<?php
$this->db->where('status','ACTIVE');
$this->db->from("employee");
echo $this->db->count_all_results();
?> Employees</h3>
<a href="<?php echo base_url(); ?>employee/Employees" class="text-muted m-b-0">View Details</a></div>
</div>
</div>
</div>
</div>
<!-- Column -->
<!-- Column -->
<div class="col-lg-3 col-md-6">
<div class="card">
<div class="card-body">
<div class="d-flex flex-row">
<div class="round align-self-center round-info"><i class="ti-file"></i></div>
<div class="m-l-10 align-self-center">
<h3 class="m-b-0">
<?php
$this->db->where('leave_status','Approve');
$this->db->from("emp_leave");
echo $this->db->count_all_results();
?> Leaves
</h3>
<a href="<?php echo base_url(); ?>leave/Application" class="text-muted m-b-0">View Details</a>
</div>
</div>
</div>
</div>
</div>
<!-- Column -->
<!-- Column -->
<div class="col-lg-3 col-md-6">
<div class="card">
<div class="card-body">
<div class="d-flex flex-row">
<div class="round align-self-center round-danger"><i class="ti-calendar"></i></div>
<div class="m-l-10 align-self-center">
<h3 class="m-b-0">
<?php
$this->db->where('pro_status','running');
$this->db->from("project");
echo $this->db->count_all_results();
?> Projects
</h3>
<a href="<?php echo base_url(); ?>Projects/All_Projects" class="text-muted m-b-0">View Details</a>
</div>
</div>
</div>
</div>
</div>
<!-- Column -->
<!-- Column -->
<div class="col-lg-3 col-md-6">
<div class="card">
<div class="card-body">
<div class="d-flex flex-row">
<div class="round align-self-center round-success"><i class="ti-money"></i></div>
<div class="m-l-10 align-self-center">
<h3 class="m-b-0">
<?php
$this->db->where('status','Granted');
$this->db->from("loan");
echo $this->db->count_all_results();
?> Loan
</h3>
<a href="<?php echo base_url(); ?>Loan/View" class="text-muted m-b-0">View Details</a>
</div>
</div>
</div>
</div>
</div>
<!-- Column -->
</div>
<!-- Row -->
<!-- Row -->
$this->db->where('pro_status','upcoming');
$this->db->from("project");
echo $this->db->count_all_results();
?>
</h1>
<h6 class="text-white">Upcoming Project</h6>
</div>
</div>
</div>
<!-- Column -->
<div class="col-md-6 col-lg-3 col-xlg-3">
<div class="card card-inverse card-success">
<div class="box text-center">
<h1 class="font-light text-white">
<?php
$this->db->where('status','Granted');
$this->db->from("loan");
echo $this->db->count_all_results();
?>
</h1>
<h6 class="text-white">Loan Application</h6>
</div>
</div>
</div>
<!-- Column -->
</div>
<!-- ============================================================== -->
</div>
<div class="container-fluid">
<?php $notice = $this->notice_model->GetNoticelimit();
$running = $this->dashboard_model->GetRunningProject();
$userid = $this->session->userdata('user_login_id');
$todolist = $this->dashboard_model->GettodoInfo($userid);
$holiday = $this->dashboard_model->GetHolidayInfo();
?>
<!-- Row -->
<div class="row">
<div class="col-md-8">
<div class="card">
<div class="card-body">
<h4 class="card-title">Running Project/s</h4>
</div>
<div class="card-body">
<div class="table-responsive" style="height:600px;overflow-y:scroll">
<table class="table table-bordered table-hover earning-box">
<thead>
<tr>
<th>Title</th>
<th>Start Date</th>
<th>End Date</th>
</tr>
</thead>
<tbody>
<?php foreach($running AS $value): ?>
<tr style="vertical-align:top;">
<td><a href="<?php echo base_url(); ?>Projects/view?P=<?php echo base64_encode($value->id); ?>"><?php
echo substr("$value->pro_name",0,25).'...'; ?></a></td>
<td><?php echo $value->pro_start_date; ?></td>
<td><?php echo $value->pro_end_date; ?></td>
</tr>
<?php endforeach; ?>
</tbody>
</table>
</div>
</div>
</div>
</div>
<!-- Column -->
<div class="col-lg-4">
<div class="card">
<div class="card-body">
<h4 class="card-title">To Do list</h4>
<h6 class="card-subtitle">List of your next task to complete</h6>
<div class="to-do-widget m-t-20" style="height:550px;overflow-y:scroll">
<ul class="list-task todo-list list-group m-b-0" data-role="tasklist">
<?php foreach($todolist as $value): ?>
<li class="list-group-item" data-role="task">
<?php if($value->value == '1'){ ?>
<div class="checkbox checkbox-info">
<input class="to-do" data-id="<?php echo $value->id?>" data-value="0" type="checkbox" id="<?
php echo $value->id?>" >
<label for="<?php echo $value->id?>"><span><?php echo $value->to_dodata; ?></span></label>
</div>
<?php } else { ?>
<div class="checkbox checkbox-info">
<input class="to-do" data-id="<?php echo $value->id?>" data-value="1" type="checkbox" id="<?
php echo $value->id?>" checked>
<script>
$(".to-do").on("click", function(){
//console.log($(this).attr('data-value'));
$.ajax({
url: "Update_Todo",
type:"POST",
data:
{
'toid': $(this).attr('data-id'),
'tovalue': $(this).attr('data-value'),
},
success: function(response) {
location.reload();
},
error: function(response) {
console.error();
}
});
});
</script>
<?php $this->load->view('backend/footer'); ?>
style.css
@import url("https://fonts.googleapis.com/css?family=Poppins:300,400,500,600,700");
@import url("https://fonts.googleapis.com/css?family=Poppins:300,400,500,600,700");
@import url(../scss/icons/font-awesome/css/font-awesome.min.css);
@import url(../scss/icons/simple-line-icons/css/simple-line-icons.css);
@import url(../scss/icons/weather-icons/css/weather-icons.min.css);
@import url(../scss/icons/linea-icons/linea.css);
@import url(../scss/icons/themify-icons/themify-icons.css);
@import url(../scss/icons/flag-icon-css/flag-icon.min.css);
@import url(../scss/icons/material-design-iconic-font/css/materialdesignicons.min.css);
@import url("https://fonts.googleapis.com/css?family=Poppins:300,400,500,600,700");
@import url(spinners.css);
@import url(animate.css);
.preloader {
width: 100%;
height: 100%;
top: 0px;
position: fixed;
z-index: 99999;
background: #fff
}
.preloader .cssload-speeding-wheel {
position: absolute;
top: calc(50% - 3.5px);
left: calc(50% - 3.5px)
}
* {
outline: none
}
body {
background: #fff;
/* font-family: "Poppins", sans-serif;*/
font-family: 'Open Sans', sans-serif margin: 0;
overflow-x: hidden;
color: #67757c;
font-weight: 300
}
html {
position: relative;
min-height: 100%;
background: #ffffff
}
a:focus,
a:hover {
text-decoration: none
}
a.link {
color: #455a64
a.link:focus,
a.link:hover {
color: #1976d2
}
.img-responsive {
width: 100%;
height: auto;
display: inline-block
}
.img-rounded {
border-radius: 4px
}
h1,
h2,
h3,
h4,
h5,
h6 {
color: #455a64;
font-family: "Poppins", sans-serif;
font-weight: 400
}
h1 {
line-height: 40px;
font-size: 36px
}
h2 {
line-height: 36px;
font-size: 24px
}
h3 {
line-height: 30px;
font-size: 19px;
}
h4 {
line-height: 22px;
font-size: 18px
}
h5 {
line-height: 18px;
font-size: 16px;
font-weight: 400
}
h6 {
line-height: 16px;
font-size: 14px;
font-weight: 400
}
.display-5 {
font-size: 3rem
}
.display-6 {
font-size: 36px
}
.box {
border-radius: 4px;
padding: 10px
.no-wrap td,
.no-wrap th {
white-space: nowrap
}
@charset "UTF-8";
/*!
* animate.css -http://daneden.me/animate
* Version - 3.5.1
* Licensed under the MIT license - http://opensource.org/licenses/MIT
*
* Copyright (c) 2016 Daniel Eden
*/
.animated {
-webkit-animation-duration: 1s;
animation-duration: 1s;
-webkit-animation-fill-mode: both;
animation-fill-mode: both
}
.animated.infinite {
-webkit-animation-iteration-count: infinite;
animation-iteration-count: infinite
}
.animated.hinge {
-webkit-animation-duration: 2s;
animation-duration: 2s
}
.animated.flipOutX,
.animated.flipOutY,
.animated.bounceIn,
.animated.bounceOut {
-webkit-animation-duration: .75s;
animation-duration: .75s
}
@-webkit-keyframes bounce {
from,
20%,
53%,
80%,
to {
-webkit-animation-timing-function: cubic-bezier(.215, .61, .355, 1.000);
animation-timing-function: cubic-bezier(.215, .61, .355, 1.000);
-webkit-transform: translate3d(0, 0, 0);
transform: translate3d(0, 0, 0)
}
40%,
43% {
-webkit-animation-timing-function: cubic-bezier(.755, .05, .855, .06);
animation-timing-function: cubic-bezier(.755, .05, .855, .06);
-webkit-transform: translate3d(0, -30px, 0);
70% {
-webkit-animation-timing-function: cubic-bezier(.755, .05, .855, .06);
animation-timing-function: cubic-bezier(.755, .05, .855, .06);
-webkit-transform: translate3d(0, -15px, 0);
transform: translate3d(0, -15px, 0)
}
90% {
-webkit-transform: translate3d(0, -4px, 0);
transform: translate3d(0, -4px, 0)
}
}
@keyframes bounce {
from,
20%,
53%,
80%,
to {
-webkit-animation-timing-function: cubic-bezier(.215, .61, .355, 1.000);
animation-timing-function: cubic-bezier(.215, .61, .355, 1.000);
-webkit-transform: translate3d(0, 0, 0);
transform: translate3d(0, 0, 0)
}
40%,
43% {
-webkit-animation-timing-function: cubic-bezier(.755, .05, .855, .06);
animation-timing-function: cubic-bezier(.755, .05, .855, .06);
-webkit-transform: translate3d(0, -30px, 0);
transform: translate3d(0, -30px, 0)
}
70% {
-webkit-animation-timing-function: cubic-bezier(.755, .05, .855, .06);
animation-timing-function: cubic-bezier(.755, .05, .855, .06);
-webkit-transform: translate3d(0, -15px, 0);
transform: translate3d(0, -15px, 0)
}
90% {
-webkit-transform: translate3d(0, -4px, 0);
transform: translate3d(0, -4px, 0)
}
}
.bounce {
-webkit-animation-name: bounce;
animation-name: bounce;
-webkit-transform-origin: center bottom;
transform-origin: center bottom
}
@-webkit-keyframes flash {
from,
50%,
to {
opacity: 1
}
25%,
75% {
opacity: 0
}
}
@keyframes flash {
from,
50%,
to {
opacity: 1
}
25%,
75% {
opacity: 0
}
}
.flash {
-webkit-animation-name: flash;
animation-name: flash
}
@-webkit-keyframes pulse {
from {
-webkit-transform: scale3d(1, 1, 1);
transform: scale3d(1, 1, 1)
}
50% {
-webkit-transform: scale3d(1.05, 1.05, 1.05);
transform: scale3d(1.05, 1.05, 1.05)
}
to {
-webkit-transform: scale3d(1, 1, 1);
transform: scale3d(1, 1, 1)
}
}
Chat.js
$(function () {
"use strict";
});
$('.chat-list').slimScroll({
position: 'right'
, size: "5px"
, height: '100%'
, color: '#dcdcdc'
});
$(".open-panel").on("click", function () {
$(".chat-left-aside").toggleClass("open-pnl");
$(".open-panel i").toggleClass("ti-angle-left");
});
});
$(function () {
"use strict";
// ==============================================================
// Newsletter
// ==============================================================
// Offset x1 a tiny amount so that the straight stroke gets a bounding box
// Straight lines don't get a bounding box
// Last remark on -> http://www.w3.org/TR/SVG11/coords.html#ObjectBoundingBox
chart.on('draw', function(ctx) {
if(ctx.type === 'area') {
ctx.element.attr({
x1: ctx.x1 + 0.001
});
}
});
// Create the gradient definition on created event (always after chart re-render)
chart.on('created', function(ctx) {
var defs = ctx.svg.elem('defs');
defs.elem('linearGradient', {
id: 'gradient',
x1: 0,
y1: 1,
x2: 0,
y2: 0
}).elem('stop', {
offset: 0,
'stop-color': 'rgba(255, 255, 255, 1)'
}).parent().elem('stop', {
offset: 1,
'stop-color': 'rgba(38, 198, 218, 1)'
});
});
// ==============================================================
// This is for the animation
// ==============================================================
$(function() {
"use strict";
// ==============================================================
// Sales overview
// ==============================================================
Morris.Area({
element: 'earning',
data: [{
period: '2011',
Sales: 50,
Earning: 80,
Marketing: 20
}, {
period: '2012',
Sales: 130,
Earning: 100,
Marketing: 80
}, {
period: '2013',
Sales: 80,
Earning: 60,
Marketing: 70
}, {
period: '2014',
Sales: 70,
Earning: 200,
Marketing: 140
}, {
period: '2015',
Sales: 180,
Earning: 150,
Marketing: 140
}, {
period: '2016',
Sales: 105,
Earning: 100,
Marketing: 80
},
{
period: '2017',
Sales: 250,
Earning: 150,
Marketing: 200
}
],
xkey: 'period',
ykeys: ['Sales', 'Earning'],
labels: ['Sales', 'Earning'],
pointSize: 3,
fillOpacity: 0,
pointStrokeColors: ['#1976d2', '#26c6da', '#1976d2'],
behaveLikeLine: true,
gridLineColor: '#e0e0e0',
lineWidth: 3,
hideHover: 'auto',
lineColors: ['#1976d2', '#26c6da', '#1976d2'],
resize: true
});
// ==============================================================
// Sales overview
// ==============================================================
// ==============================================================
// Download count
// ==============================================================
var sparklineLogin = function() {
$('.spark-count').sparkline([4, 5, 0, 10, 9, 12, 4, 9, 4, 5, 3, 10, 9, 12, 10, 9], {
type: 'bar',
width: '100%',
height: '70',
barWidth: '2',
resize: true,
barSpacing: '6',
barColor: 'rgba(255, 255, 255, 0.3)'
});
sparklineLogin();
});
$(function () {
"use strict";
// ==============================================================
// Newsletter
// ==============================================================
series: [
[0, 5000, 15000, 8000, 15000, 9000, 30000, 0]
, [0, 3000, 5000, 2000, 8000, 1000, 5000, 0]
]}, {
low: 0,
high: 28000,
showArea: true,
fullWidth: true,
plugins: [
Chartist.plugins.tooltip()
],
axisY: {
onlyInteger: true
, scaleMinSpace: 40
, offset: 20
, labelInterpolationFnc: function (value) {
return (value / 1000) + 'k';
}
},
});
// Offset x1 a tiny amount so that the straight stroke gets a bounding box
// Straight lines don't get a bounding box
// Last remark on -> http://www.w3.org/TR/SVG11/coords.html#ObjectBoundingBox
chart.on('draw', function(ctx) {
if(ctx.type === 'area') {
ctx.element.attr({
x1: ctx.x1 + 0.001
});
}
});
// Create the gradient definition on created event (always after chart re-render)
chart.on('created', function(ctx) {
var defs = ctx.svg.elem('defs');
defs.elem('linearGradient', {
id: 'gradient',
x1: 0,
y1: 1,
x2: 0,
y2: 0
}).elem('stop', {
offset: 0,
'stop-color': 'rgba(255, 255, 255, 1)'
}).parent().elem('stop', {
offset: 1,
'stop-color': 'rgba(38, 198, 218, 1)'
});
});
// ==============================================================
// This is for the animation
// ==============================================================
dur: 500,
from: data.path.clone().scale(1, 0).translate(0,
data.chartRect.height()).stringify(),
to: data.path.clone().stringify(),
easing: Chartist.Svg.Easing.easeInOutElastic
}
});
}
if (data.type === 'bar') {
data.element.animate({
y2: {
dur: 500,
from: data.y1,
to: data.y2,
easing: Chartist.Svg.Easing.easeInOutElastic
},
opacity: {
dur: 500,
from: 0,
to: 1,
easing: Chartist.Svg.Easing.easeInOutElastic
}
});
}
});
}
// ==============================================================
// world map
// ==============================================================
jQuery('#visitfromworld').vectorMap({
map: 'world_mill_en'
, backgroundColor: '#fff'
, borderColor: '#ccc'
, borderOpacity: 0.9
, borderWidth: 1
, zoomOnScroll : false
, color: '#ddd'
, regionStyle: {
initial: {
fill: '#fff'
}
}
, markerStyle: {
initial: {
r: 8
, 'fill': '#26c6da'
, 'fill-opacity': 1
, 'stroke': '#000'
, 'stroke-width': 0
, 'stroke-opacity': 1
}
, }
, enableZoom: true
, hoverColor: '#79e580'
, markers: [{
latLng: [21.00, 78.00]
, name: 'India : 9347'
, style: {fill: '#26c6da'}
},
{
latLng : [-33.00, 151.00],
name : 'Australia : 250'
}, {
period: '2011',
SiteA: 130,
SiteB: 100,
}, {
period: '2012',
SiteA: 80,
SiteB: 60,
}, {
period: '2013',
SiteA: 70,
SiteB: 200,
}, {
period: '2014',
SiteA: 180,
SiteB: 150,
}, {
period: '2015',
SiteA: 105,
SiteB: 90,
},
{
period: '2016',
SiteA: 250,
SiteB: 150,
}],
xkey: 'period',
ykeys: ['SiteA', 'SiteB'],
labels: ['Site A', 'Site B'],
pointSize: 0,
fillOpacity: 0.4,
pointStrokeColors:['#b4becb', '#01c0c8'],
behaveLikeLine: true,
gridLineColor: '#e0e0e0',
lineWidth: 0,
smooth: false,
hideHover: 'auto',
lineColors: ['#b4becb', '#01c0c8'],
resize: true
});
// ==============================================================
// sparkline chart
// ==============================================================
var sparklineLogin = function() {
barSpacing: '5',
barColor: '#ef5350'
});
$('#spark10').sparkline([ 0, 5, 6, 10, 9, 12, 4, 9], {
type: 'bar',
width: '100%',
height: '40',
barWidth: '4',
resize: true,
barSpacing: '5',
barColor: '#7460ee'
});
}
var sparkResize;
$(window).resize(function(e) {
clearTimeout(sparkResize);
sparkResize = setTimeout(sparklineLogin, 500);
});
sparklineLogin();
});
var data = []
, totalPoints = 300;
function getRandomData() {
if (data.length > 0) data = data.slice(1);
// Do a random walk
while (data.length < totalPoints) {
var prev = data.length > 0 ? data[data.length - 1] : 50
, y = prev + Math.random() * 10 - 5;
if (y < 0) {
y = 0;
}
else if (y > 100) {
y = 100;
}
data.push(y);
}
// Zip the generated y values with the x values
var res = [];
for (var i = 0; i < data.length; ++i) {
res.push([i, data[i]])
}
return res;
}
// Set up the control widget
var updateInterval = 30;
$("#updateInterval").val(updateInterval).change(function () {
var v = $(this).val();
if (v && !isNaN(+v)) {
updateInterval = +v;
if (updateInterval < 1) {
updateInterval = 1;
}
else if (updateInterval > 3000) {
updateInterval = 3000;
}
$(this).val("" + updateInterval);
}
});
var plot = $.plot("#placeholder", [getRandomData()], {
series: {
shadowSize: 0 // Drawing is faster without shadows
}
, yaxis: {
min: 0
, max: 100
}
, xaxis: {
show: false
}
, colors: ["#26c6da"]
, grid: {
color: "#AFAFAF"
, hoverable: true
, borderWidth: 0
, backgroundColor: '#FFF'
}
, tooltip: true
, tooltipOpts: {
content: "Y: %y"
, defaultTheme: false
}
});
function update() {
plot.setData([getRandomData()]);
// Since the axes don't change, we don't need to call plot.setupGrid()
plot.draw();
setTimeout(update, updateInterval);
}
update();
//Flot Line Chart
$(document).ready(function () {
console.log("document ready");
var offset = 0;
plot();
function plot() {
var sin = []
, cos = [];
for (var i = 0; i < 12; i += 0.2) {
sin.push([i, Math.sin(i + offset)]);
cos.push([i, Math.cos(i + offset)]);
}
var options = {
series: {
lines: {
show: true
}
, points: {
show: true
}
}
, grid: {
hoverable: true //IMPORTANT! this is needed for tooltip to work
}
, yaxis: {
min: -1.2
, max: 1.2
}
}
});
});
//Flot Moving Line Chart
$(function () {
var container = $("#flot-line-chart-moving");
// Determine how many data points to keep based on the placeholder's initial size;
// this gives us a nice high-res plot while avoiding more than one point per pixel.
var maximum = container.outerWidth() / 2 || 300;
//
var data = [];
function getRandomData() {
if (data.length) {
data = data.slice(1);
}
while (data.length < maximum) {
var previous = data.length ? data[data.length - 1] : 50;
var y = previous + Math.random() * 10 - 5;
data.push(y < 0 ? 0 : y > 100 ? 100 : y);
}
// zip the generated y values with the x values
var res = [];
for (var i = 0; i < data.length; ++i) {
res.push([i, data[i]])
}
return res;
}
//
series = [{
data: getRandomData()
, lines: {
fill: true
}
}];
//
var plot = $.plot(container, series, {
colors: ["#26c6da"]
, grid: {
borderWidth: 0
, minBorderMargin: 20
, labelMargin: 10
, backgroundColor: {
colors: ["#fff", "#fff"]
}
, margin: {
top: 8
, bottom: 20
, left: 20
}
, markings: function (axes) {
var markings = [];
var xaxis = axes.xaxis;
for (var x = Math.floor(xaxis.min); x < xaxis.max; x += xaxis.tickSize * 1) {
markings.push({
xaxis: {
from: x
, to: x + xaxis.tickSize
}
, color: "#fff"
});
}
return markings;
}
}
, xaxis: {
tickFormatter: function () {
return "";
}
}
, yaxis: {
min: 0
, max: 110
}
, legend: {
show: true
}
});
// Update the random dataset at 25FPS for a smoothly-animating chart
setInterval(function updateRandom() {
series[0].data = getRandomData();
plot.setData(series);
plot.draw();
}, 40);
});
//Flot Bar Chart
$(function () {
var barOptions = {
series: {
bars: {
show: true
, barWidth: 43200000
}
}
, xaxis: {
mode: "time"
, timeformat: "%m/%d"
, minTickSize: [2, "day"]
}
, grid: {
hoverable: true
}
, legend: {
show: false
}
, grid: {
color: "#AFAFAF"
, hoverable: true
, borderWidth: 0
, backgroundColor: '#FFF'
}
, tooltip: true
, tooltipOpts: {
content: "x: %x, y: %y"
}
};
var barData = {
label: "bar"
, color: "#009efb"
, data: [
[1354521600000, 1000]
, [1355040000000, 2000]
, [1355223600000, 3000]
, [1355306400000, 4000]
, [1355487300000, 5000]
, [1355571900000, 6000]
]
};
$.plot($("#flot-bar-chart"), [barData], barOptions);
});
$(function () {
//some data
var d1 = [];
for (var i = 0; i <= 10; i += 1) d1.push([i, parseInt(Math.random() * 60)]);
var d2 = [];
for (var i = 0; i <= 10; i += 1) d2.push([i, parseInt(Math.random() * 40)]);
var d3 = [];
for (var i = 0; i <= 10; i += 1) d3.push([i, parseInt(Math.random() * 25)]);
var ds = new Array();
ds.push({
label: "Data One"
, data: d1
, bars: {
order: 1
}
});
ds.push({
label: "Data Two"
, data: d2
, bars: {
order: 2
}
});
ds.push({
label: "Data Three"
, data: d3
, bars: {
order: 3
}
});
var stack = 0
, bars = true
, lines = true
, steps = true;
var options = {
bars: {
show: true
, barWidth: 0.2
, fill: 1
}
, grid: {
show: true
, aboveData: false
, labelMargin: 5
, axisMargin: 0
, borderWidth: 1
, minBorderMargin: 5
, clickable: true
, hoverable: true
, autoHighlight: false
, mouseActiveRadius: 20
, borderColor: '#f5f5f5'
}
, series: {
stack: stack
}
, legend: {
position: "ne"
, margin: [0, 0]
, noColumns: 0
, labelBoxBorderColor: null
, labelFormatter: function (label, series) {
// just add some space to labes
return '' + label + ' ';
}
, width: 30
, height: 5
}
, yaxis: {
tickColor: '#f5f5f5'
, font: {
color: '#bdbdbd'
}
}
, xaxis: {
tickColor: '#f5f5f5'
, font: {
color: '#bdbdbd'
}
}
, colors: ["#4F5467", "#009efb", "#26c6da"]
, tooltip: true, //activate tooltip
tooltipOpts: {
content: "%s : %y.0"
, shifts: {
x: -30
, y: -50
}
}
};
$.plot($(".sales-bars-chart"), ds, options);
});
CHAPTER: 6
TESTING
In computer programming, unit testing is a software testing method by which individual units
of source code, sets of one or more computer program modules together with associated
control data, usage procedures, and operating procedures, are tested to determine whether
they are fit for use. Intuitively, one can view a unit as the smallest testable part of an
application. In procedural programming, a unit could be an entire module, but it is more
commonly an individual function or procedure. In object-oriented programming, a unit is
often an entire interface, such as a class, but could be an individual method. Unit tests are
short code fragments created by programmers or occasionally by white box testers during the
development process. It forms the basis for component testing. Ideally, each test case is
independent from the others. Substitutes such as method stubs, mock objects, fakes, and test
harnesses can be used to assist testing a module in isolation. Unit tests are typically written
and run by software developers to ensure that code meets its design and behaves as intended.
Fig6.1TypeofTesting
Unit Testing:
Black Box Testing: Focuses on testing the functionality of individual units (such as
classes or functions) without examining their internal implementation details. This
ensures that the units meet the specified requirements and behave as expected from an
external perspective.
White Box Testing: Involves examining the internal structure, code paths, and logic of
the units being tested. This enables the tester to uncover errors or issues that may not
be apparent from black box testing alone, providing deeper insights into the code's
behavior.
Integration Testing:
User Interface Testing: Evaluates the functionality and usability of the application's
graphical user interface (GUI) by interacting with various UI elements, screens, and
menu items. This ensures that users can navigate through the interface smoothly and
efficiently.
Interaction Testing: Tests the interaction and communication between different
components or modules of the system, including data processing, message passing,
and function calls. This verifies that the integrated components work seamlessly
together to achieve the desired functionality.
Validation Testing:
Validates that the system meets the specified requirements and performs as expected
in real-world scenarios. This involves executing functional test cases based on user
stories, use cases, and software requirements specifications (SRS), comparing actual
outcomes with expected results to ensure alignment.
Helps in identifying any discrepancies or deviations from the intended behavior,
allowing for necessary adjustments and refinements to be made to the system.
System Testing:
Ensures that the integrated components or units of the system function correctly when
used together as a whole. This involves testing the system's end-to-end functionality
and behavior, including its interactions with external systems or dependencies.
Test data covers a wide range of scenarios and input values to validate the system's
behavior under various conditions, ensuring robustness and reliability.
Acceptance Testing:
Conducted to validate whether the system meets the acceptance criteria and fulfills the
user's requirements and expectations. This involves evaluating the system's overall
performance, functionality, and usability in a real-world environment.
User acceptance testing (UAT) is typically performed by end users or stakeholders to
determine if the system is ready for deployment and meets their business needs.
Table6.2TestCase
CHAPTER: 7
PROJECT SCREENSHOT
Fig7.14 Report
CHAPTER: 8
Conclusion
The entire project has been developed and deployed as per the requirements stated by the
user, it is found to be bug free as per the testing standards that are implemented. Any
specification untraced errors will be concentrated in the coming versions, which are planned
to be developed in near future. The system at present does not take care of the money
payment methods, as the consolidated constructs need SSL standards and are critically to be
initiated in the first face, the application of the credit card transactions is applied as a
developmental phase in the coming days. The system needs more elaborative technicality for
its inception and evolution.
The project involved the conception, design, and development of the HMS, aimed at serving
as a centralized repository for educational materials in the field of computer science and
information technology. Leveraging technologies such as Android Studio, Firebase, and
Flutter, we created a user-friendly application compatible with Android, iOS, and web
platforms, ensuring accessibility for a wide range of users. The app organizes study
materials according to semesters and subjects, allowing users to easily navigate and access
relevant content. While the initial focus has been on computer engineering materials, future
iterations aim to expand content to include other branches such as electronics and IT.
Additionally, plans are underway to introduce features like AI chatbots for user assistance, a
library section for books, and enhanced security measures like OTP mobile verification.
These enhancements will further enrich the user experience and ensure the app remains a
valuable resource for students and professionals alike.
This process not only adds complexity but also introduces delays in making
new materials available to users.
To address this issue, we plan to implement a user-friendly upload feature
that allows users to contribute their own study materials directly to the
platform.
By empowering users to upload content themselves, we can diversify the
range of materials available on the platform and provide a more dynamic
and responsive learning environment.
This process not only adds complexity but also introduces delays in making
new materials available to users. To address this limitation, future
iterations of the application will focus on implementing a user-friendly
upload feature, allowing users to contribute their own study materials
directly to the platform.
REFERENCES
StevenFeuerstein,BillPribyl.,PL/SQLProgramming,O’ReillyMedia,2014
JonDuckett .,JavaScriptProgramming,Wiley,2014
ElliotteRustyHarold., JAVANetworking, O’ReillyMedia,2010
ReneEnriquez., JAVASecurity,PacktPublishing,2014
BryanBasham,KathySierra.,HeadFirstEJB,O'ReillyMedia;Secondedition,2008
Shadabsiddiqui.,J2EEProfessional, PremierPress;1edition,2002
JoelMurach, MichaelUrban.,JAVAservlets, MikeMurach,2014
KogentLearningSolutionsINC., HTML5BlackBook,DreamtechPress,2011