You are on page 1of 50

Placement Management System

MAJOR PROJECT

BY

Debkanta Mitra (1920022)

Samujoy Bhattacharjee (1920049)

Saptarshi Pramanik (1920052)

Guided by Sumit Kumar Sinha

Department of Computer Application


CONTENTS

Abstract

Introduction

• Background
• Problems with Existing Software
• About project
• Objective of the project
• Scope of the Project
• Advantages

Feasibility Study

• Operational Feasibility
• Technical Feasibility
• Financial and Economic Feasibility

Software Requirement Specification

• Functional requirements
• Non-Functional requirements
• Performance requirements
• Hardware and Software requirements

Software Analysis

• DFD
• Use case Diagram
• Sequence Diagram

Software Design

• Schema Design
• Data Dictionary
• ER Diagram

Implementation

• Sample code for developed Modules and Database


• Sample

Output Conclusion

Bibliography
Abstract

The project named “Placement Management System” is a web application-


based recruitment system. A web application that aims to solve one specific
problem, which some us final year students have already faced during our
college recruitments, basically the main motive is to build something that deals
with all the college recruitment related things.

The web application will help all the final year students to access all the
information regarding placements and meet their recruitment goals. And as
well as on the other hand the web application will be valuable to the Training
and Placement officers too.

It’ll be an End-to-end campus recruitment gateway, and a stepping stone


towards digitizing, automating, and enabling placement cell online.

Students and TPOs will find this app robust as any other best social media apps
being used by most of us today.
INTRODUCTION

▪ Background
This project is aimed at developing a web application for the Training and
Placement Department of Colleges. The system is a web application that
can be accessed throughout the organization with proper login provided.
This system can be used as a web application for the Training and
Placement Officers (TPO) of the college to manage the student’s
information with regard to placement. Students logging should be able to
upload their information in the form of a CV. The key feature is that it is a
onetime registration. Our project provides the facility of maintaining the
details of the students. Administrator logging in may also see information
put up by the students. This will also help in fast access procedures in
placement related activities.

▪ Problems with existing system


In Various colleges, training and placement officers have to manage the
students’ profile and documents of students for their training and
placement’s manually. Placement Officer have to collect the information of
various companies who want to recruit students and notify students time
to time about them. Placement Officer have to arrange profiles of students
according to various streams and notify them according to company
requirements. If any modifications or updates are required in the profile of
any student, it has to be searched and done manually.
▪ About this Software
This Software is to facilitate students in college to register and
communicate with Placement Officer. The users can access easily to this
and the data can be retrieved easily in no time. In the main page there
are options for a new registration by filling up all the details required, a
registered student to directly login using username and password. In
the student registration form, we can give personal details, educational
qualifications, and professional skills. The job details of the placed
students will be provided by the administrator. The administrator plays
an important role in our project. They provide approval of student
registration and updating. In this project administrator can post updates
regarding placement drives.

▪ Objective of the project


In the due times of Covid we all have one thing in common, which is
how computers and information technology have a major influence on
the society and the society is becoming more and more dependent on
technology. Going on is an era of simplifying almost all complicated
works using computers. The last few years have witnessed a
tremendous increase in the capabilities and use of computers. Manual
processing makes the process slow and other problems such as
inconsistency and ambiguity on operations. The proposed system
intends user-friendly operations which may resolve ambiguity. By
considering all these factors, the applications produced, which
performs the social service simply and effectively.
▪ Scope of the Project
Our project has a big scope to do. We can store information of all the
students. Students can maintain their information and can update it.
Notifications are sent to students about the companies. Students can
access previous information about placement. Students can also prepare
themselves according to the preparation guides of corresponding
companies, which will be provided into the web application. The TPO’s
can manage information separately of the students who’re already
placed and also the one’s who’re not.

▪ Advantages
The Benefits and Advantages of Placement Management System are:

1. Track campus placement process

2. Improve student placement & retention

3. Administrative control over students and companies

4. Identify companies that match student’s expectations

5. Automation: The application automatically notifies about upcoming


companies

6. Online Portal: Students can apply for companies online

7. Record list of students placed with respective job designation in


a particular academic year.

8. Time-Saving: Reduces manual human effort

9. Cloud-based: Store all data forever.


FEASIBILITY STUDY

▪ Operational Feasibility
It is to find out whether the current work practices and procedures support a
new system.

Also, social factors i.e. how the organizational changes will affect the working
lives of those affected by the system.

▪ Technical Feasibility
Our project is a complete web-based application. The main technologies
and tools that are associated with it are:
o HTML
o CSS
o BOOTSTRAP (FRAMEWORK)
o JAVASCRIPT
o NODE JS
o MONGO DB ATLAS (CLOUD BASED DATABASE)
o VISUAL STUDIO CODE
o GOOGLE CHROME BROWSER

Each of these technologies listed above are freely available and the technical
skills required are manageable. Time limitations of the product development
and the ease of implementing using these technologies are synchronized.

The application is the fact that it has been developed on Windows 10 platform
and a high configuration of 4GB RAM on Intel i3 core processor. This is
technically feasible.
▪ Financial and Economic Feasibility
Being a web application, our project doesn’t have an associated hosting cost.
We will follow the freeware software standards. No cost will be charged
from the potential customers. And In the fast-paced world today there is a
great need of online social networking facilities. Thus, the benefits of this
project in the current scenario make it financially and economically feasible.
SOFTWARE REQUIREMENT SPECIFICATION

▪ Functional Requirements

• This section describes the functional requirements of the system for those
requirements which are expressed in the natural language style. A Student
should be able to login to the system through the first page of the
application, and he/she should be able to access all the information
related to placement drives and all the new updates by TPO’s.
• Student must fill all the required information during registration,
without filling all the details he/she will not get access to the
homepage of the website.
• An administrator (TPO) can also login into the web application and
update various information regarding placement drives and notify all the
students logged into the system, He or She must also be able to access
all the student information and update them if required.
• Whenever administrator updates new drive information, all the students
that match the company’s eligibility criteria must be informed on their
registered email address.

▪ Non-Functional Requirements
Usability

This section includes all of those requirements that effect usability.

• We get the response within seconds.

• The software must have a simple, user-friendly interface so customers can


save time and confusion.

Reliability
• The system is more reliable because of the qualities that are inherited from
the chosen platform Node JS. The codebase built with Node JS is more reliable.

Supportability

• The system is designed to be the cross platform supportable. The system is


supported on a wide range of hardware and any web browser. This
application is being developed using Node JS; hence it is extremely portable.

Implementation

• The system is implemented in web environment. The Express JS is used as


the web server and windows 10 is used as the platform.

Interface

• The user interface is based on the web browser. The application is developed
using jQuery and HTML along with BOOTSTRAP framework for styling.

• The Interface design is aimed at a flexible front-end communication to


provide the user with clear information in navigating a user-friendly interface
is planned.

▪ Performance requirements

o The completely separate business logic at server side from the student
interface ensures good performance.
o The system exhibits high performance because it is well optimized. The
business logic is clearly separate from the UI.

We get the response within seconds.


▪ Hardware and Software Requirements
Hardware: Processor Intel dual core and above

Operating System: Windows 7 and above

Internet Connection: Existing telephone lines, Data card.

Browser: Google chrome latest version, Mozilla Firefox

Database: Mongo DB

Performance: The turn-around time of the project will be medium.

Software:

-MongoDB: MongoDB is a document database with the scalability and


flexibility that you want with the querying and indexing that you need.
MongoDB is a document-oriented NoSQL database used for high volume
data storage. Instead of using tables and rows as in the traditional
relational databases, MongoDB makes use of collections and documents.
Documents consist of key-value pairs which are the basic unit of data in
MongoDB.

-Express JS: Express is a minimal and flexible Node.js web application


framework that provides a robust set of features for web and mobile
applications.

-Node JS: It is primarily used for non-blocking, event-driven servers, due


to its single-threaded nature. It's used for traditional web sites and back-
end API services, but was designed with real-time, push-based
architectures in mind.

-Visual Studio Code: Visual Studio Code is a free source-code editor made
by Microsoft for Windows, Linux and macOS. Features include support for
debugging, syntax highlighting, intelligent code completion, snippets,
code refactoring, and embedded Git.
SOFTWARE ANALYSIS

▪ Data Flow
Diagram DFD Level 0:
DFD Level 1:
DFD Level 2:
▪ Use case Diagram
A Use case is a description of set of sequence of actions, graphically it is
rendered as an ellipse with solid line including only its name. Use case
diagram is a behavioral diagram that shows a set of use cases and actors
and their relationship. It is an association between the use cases and actors.
An actor represents a real-world object.

Use case diagram for students

Update
Details

Check
Login/ Updates
Register

User
Materials

Change
password
Use case diagram for TPO

Change
password
Update
Details

Add
Login/ Students
Register

Admin
Notify
Students

Add new Upload


drives Material
▪ Sequence Diagram
Sequence diagram and collaboration diagram are called INTERACTION
DIAGRAMS. An interaction diagram shows an interaction, consisting of set of
objects and their relationship including the messages that may be dispatched
among them.

Sequence diagram for Student


Sequence diagram for Admin
SOFTWARE DESIGN

▪ Schema Design
The schema is a skeleton structure that represents the logical view of
the database as a whole.
▪ Sample Of Data Models

1. Drive Model

2. Student Model
▪ ER Diagram
IMPLEMENTATION

▪ Sample code for developed Modules and Databases


ServerSide Code

1. app.js
2. const express = require('express')
3. const ejs = require('ejs')
4. const mongoose = require('mongoose')
5. const bodyparser = require('body-parser')
6. const expressLayouts= require('express-ejs-layouts')
7. const app = express()
8.
9. let my_data;
10.
11.//importing database models
12.const student = require('./model/student_model')
13.const drive = require('./model/drive_model')
14.
15.//mongodb atlas connection string
16. const URI = "mongodb+srv://dm_user123:dm_user123@cluster0.ykkfq.mongodb.ne
t/myFirstDatabase?retryWrites=true&w=majority"
17.
18.//mongoose database connection
19.mongoose.connect(URI, {useNewUrlParser: true, useUnifiedTopology: true})
20. .then(console.log("Database connected.."))
21. .catch(err=> console.log(err));
22.
23.//setting the view engine
24.app.set('view engine', 'ejs')
25.
26.//middlewares
27.app.use(express.urlencoded({extended: false}))
28.app.use(expressLayouts)
29.app.use('/assets', express.static(__dirname + '/assets'));
30.
31.//routes
32.app.get('/home', (req, res) => {
33. res.render('home')
34.})
35.
36.app.get('/stud_reg', (req, res) => {
37. res.render('stud_reg')
38.})
39.
40.app.post('/stud_reg', (req, res) => {
41. const {name,streams,backs,ssc_perc,hsc_perc,grad_perc,email,password,p
assword2}=req.body;
42. let errors= [];
43.
44. //Validation
45. //check required fields
46.if(!name || !email || !password || !password2 || !backs || !ssc_perc |
| !hsc_perc || !grad_perc){
47. errors.push({msg:"Please fill all the required fields."})
48. }
49.
50. //check passwords match
51. if(password!==password2){
52. errors.push({msg: 'Passwords do not match.'})
53. }
54.
55. //check pass len
56. if(password.length<6){
57. errors.push({msg:`Password must'be of 6 characters.` })
58. }
59.
60. if(errors.length>0){
61. res.render('stud_reg', {errors})
62. } else {
63. student.findOne({ email: email })
64. .then(user => {
65. if (user) {
66. errors.push({ msg: 'Email already exists' })
67.
68. res.render('stud_reg', {errors})
69.
70. } else {
71. const newUser = new student({
72. name: name,
73. stream: streams,
74. backlog: backs,
75. ssc_perc: ssc_perc,
76. hsc_perc: hsc_perc,
77. grad_perc: grad_perc,
78. email: email,
79. password: password
80. });
81. newUser
82. .save()
83. .then(user => {
84. res.redirect('/stud_log');
85. })
86. .catch(err => console.log(err));
87. }
88. });
89. }
90.})
91.
92.app.get('/stud_log', (req, res) => {
93. res.render('stud_log')
94.})
95.
96.app.post('/stud_log', (req, res) => {
97. let errors= []
98. const {email, password} = req.body
99.
100. if(!email || !password){
101. errors.push({msg:"Please fill all the required fields."})
102. res.render('stud_log', {errors})
103. }else{
104. student.findOne({email:email})
105. .then(data =>{
106. if(!data){
107. errors.push({msg: "Email address is not register
ed.."})
108. res.render('stud_log', {errors})
109. }
110. if(data.password==password){
111. my_data = data
112. res.render('stud_home', {data})
113. }else{
114. errors.push({msg: "Wrong password"})
115. res.render('stud_log', {errors })
116. }
117. })
118. .catch( err => console.log(err))
119. }
120. })
121.
122. app.get('/admin_log', (req, res) => {
123. res.render('admin_log')
124. })
125.
126. //admin credentials
127. const user_id = "system_admin123@bppimt.com"
128. const admin_password ="admin123@bppimt"
129.
130. app.post('/admin_log', (req, res) => {
131. let errors = []
132. const {email, password} = req.body
133. if(!email || !password){
134. errors.push({msg: "Please fill all the required fields."})
135. res.render('admin_log', {errors})
136. }
137.
138. if(email===user_id && admin_password===password){
139. res.render('admin_home');
140. }else{
141. errors.push({msg: "Enter the correct credentials.."})
142. res.render('admin_log', {errors})
143. }
144. })
145.
146. app.get('/admin_home', (req, res)=>{
147. res.render('admin_home')
148. })
149.
150. app.get('/new_drive', (req, res) => {
151. res.render('drive_post')
152. })
153.
154. app.post('/new_drive', (req, res) => {
155. const {drive_id, comp_name, role, salary, perc_criteria, back_cr
iteria, test_date, link} = req.body
156. let errors = []
157. let message = []
158. if(!drive_id || !comp_name || !role || !salary|| !perc_criteria
| !back_criteria || !test_date || !link){
159. errors.push({msg: "Please fill all the required fields"})
160. res.render('drive_post', {errors})
161. }else{
162. drive.findOne({drive_id:drive_id})
163. .then(data =>{
164. if( data){
165. errors.push({msg: "This drive already exists"})
166. res.render('drive_post', {errors})
167. }else{
168. let new_drive = new drive({
169. drive_id:drive_id,
170. company_name: comp_name,
171. job_role: role,
172. package: salary,
173. perc_criteria: perc_criteria,
174. back_criteria: back_criteria,
175. test_date: test_date,
176. apply_link: link
177. })
178.
179. new_drive.save()
180. .then( data => {
181. message.push({msg: "Drive update succesf
ully posted!"})
182. res.render('admin_home', {message})
183. })
184. .catch( err => console.log(err))
185. }
186. })
187. }
188. })
189.
190. app.get('/stud_home', (req, res)=>{
191. const data = my_data
192. res.render('stud_home', {data})
193. })
194. app.get('/students', (req, res)=>{
195. student.find()
196. .then(data =>{
197. res.render('students', {data})
198. })
199. .catch(err => console.log(err))
200. })
201.
202. app.get('/drive_update', (req, res) => {
203. drive.find()
204. .then(data => {
205. res.render('drive_updates', {data})
206. })
207. .catch(err => console.log(err))
208. })
209. //server listener
210. app.listen(3000, (req, res) => {
211. console.log('Listening on server port: 3000!');
212. })
213.

Templates

1. Welcome page (HTML - EJS)


2. <!DOCTYPE html>
3. <html lang="en">
4. <head>
5. <meta charset="UTF-8">
6. <meta http-equiv="X-UA-Compatible" content="IE=edge">
7. <meta name="viewport" content="width=device-width, initial-scale=1.0">
8. <title>Welcome</title>
9. </head>
10.<body>
11. <div class="container">
12. <div class="row mt-5">
13. <div class="col-md-8 m-auto">
14. <div class="card card-body text-center">
15. <i class="fas fa-user-graduate fa-5x"></i>
16. <h3 class="mt-3 mb-
3"> Welcome to Placement Management System!</h3>
17. <h6 class='mb-3 text-
warning'>Are you a STUDENT or ADMIN?</h6>
18. <a href="/stud_reg" class="btn btn-primary mb-2"
19. >STUDENT</a>
20. <a href="/admin_log" class="btn btn-primary">ADMIN</a>
21. </div>
22. </div>
23. </div>
24. </div>
25.</body>
26.</html>

2. Student Registration Page (HTML- EJS)


<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-
scale=1.0"> <title>register</title>
</head>
<body>
<a href="/home"><button type="button" class="btn btn-primary
mt-2"><i class="fas fa-arrow-circle-left"></i></button></a>
<div class="container">
<div class="row mt-5 mb-5">
<div class="col-md-6 m-auto">
<div class="card card-body">
<h1 class="text-center mb-3">
<i class="fas fa-user-plus"></i> Register
</h1>
<%- include('./partials/message')%>
<form action="/stud_reg" method="POST">
<div class="form-group">
<label for="name">Name</label>
<input
type="name"
id="name"
name="name"
class="form-control"
placeholder="Enter Name"
value="<%= typeof name != 'undefined' ? name : '' %>"
/>
</div>
<div class="form-group">
<label for="streams">Choose your stream:</label>
<select name="streams" id="streams" class="form-control">
<option value="bca">Bachelor of Computer Application</option>
<option value="bba">Bachelor of Business Administration</opti
on>
</select>
</div>
<div class="form-group">
<label for="backs">Number of current backlogs: </label>
<input
type="number"
id="backs"
name="backs"
class="form-control"
value="<%= typeof name != 'undefined' ? name : '' %>"
/>
</div>
<div class="form-group">
<label for="ssc_perc">Percentage of
SSC:</label> <input
type="text"
id="ssc_perc"
name="ssc_perc"
class="form-control"
value="<%= typeof name != 'undefined' ? name : '' %>"
/>
</div>
<div class="form-group">
<label for="hsc_perc">Percentage of
HSC:</label> <input
type="text"
id="hsc_perc"
name="hsc_perc"
class="form-control"
value="<%= typeof name != 'undefined' ? name : '' %>"
/>
</div>
<div class="form-group">
<label for="grad_perc">Percentage of Graduation:</label>
<input
type="text"
id="grad_perc"
name="grad_perc"
class="form-control"
value="<%= typeof name != 'undefined' ? name : '' %>"
/>
</div>
<div class="form-group">
<label for="email">Email</label>
<input
type="email"
id="email"
name="email"
class="form-control"
placeholder="Enter Email"
value="<%= typeof email != 'undefined' ? email : '' %>"
/>
</div>
<div class="form-group">
<label for="password">Password</label>
<input
type="password"
id="password"
name="password"
class="form-control"
placeholder="Create Password"
value="<%= typeof password != 'undefined' ? password : '' %>"
/>
</div>
<div class="form-group">
<label for="password2">Confirm Password</label>
<input
type="password"
id="password2"
name="password2"
class="form-control"
placeholder="Confirm Password"
value="<%= typeof password2 != 'undefined' ? password2 : '' %>"
/>
</div>
<button type="submit" class="btn btn-primary btn-
block"> Register
</button>
</form>
<p class="lead mt-
4">Have An Account? <a
href="/stud_log">Login</a></p> </div>
</div>
</div>
</div>
</body>
</html>
3. Student Login Page ( HTML -EJS)
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-
scale=1.0"> <title>login</title>
</head>
<body>
<a href="/home"><button type="button" class="btn btn-primary
mt-2"><i class="fas fa-arrow-circle-left"></i></button></a>
<div class="container">
<div class="row mt-5">
<div class="col-md-6 m-auto">
<div class="card card-body">
<h1 class="text-center mb-3"><i class="fas fa-sign-
in-alt"></i> Student Login</h1>
<%- include('./partials/message')%>
<form action="/stud_log" method="POST">
<div class="form-group">
<label for="email">Email</label>
<input
type="email"
id="email"
name="email"
class="form-control"
placeholder="Enter email address"
/>
</div>
<div class="form-group">
<label for="password">Password</label>
<input
type="password"
id="password"
name="password"
class="form-control"
placeholder="Enter Password"
/>
</div>
<button type="submit" class="btn btn-primary btn-
block">Login</button>
</form>
<p class="lead mt-4">
No Account? <a href="/stud_reg">Register</a>
</p>
</div>
</div>
</div>
</div>
</body>
</html>

4. Admin Login Page (HTML -EJS)


<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-
scale=1.0"> <title>login</title>
</head>
<body>
<a href="/home"><button type="button" class="btn btn-primary
mt-2"><i class="fas fa-arrow-circle-left"></i></button></a>
<div class="container">
<div class="row mt-5">
<div class="col-md-6 m-auto">
<div class="card card-body">
<h1 class="text-center mb-3"><i class="fas fa-sign-
in-alt"></i> Admin Login</h1>
<%- include('./partials/message')%>
<form action="/admin_log" method="POST">
<div class="form-group">
<label for="email">User Id</label>
<input
type="email"
id="email"
name="email"
class="form-control"
placeholder="Enter the user id"
/>
</div>
<div class="form-group">
<label for="password">Password</label>
<input
type="password"
id="password"
name="password"
class="form-control"
placeholder="Enter Password"
/>
</div>
<button type="submit" class="btn btn-primary btn-
block">Login</button>
</form>
</div>
</div>
</div>
</div>
</body>
</html>

5. Student home page( HTML -EJS)


<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-
scale=1.0"> <title>Document</title>
</head>
<body>
<nav class="navbar navbar-expand-lg navbar-dark bg-
dark"> <div class="container-fluid">
<a class="navbar-brand" href="/stud_home"><i class="fas fa-
envelope-open-text"></i> Placement Management System</a>
<button class="navbar-toggler" type="button" data-bs-
toggle="collapse" data-bs-target="#navbarNavAltMarkup" aria-
controls="navbarNavAltMarkup" aria-expanded="false" aria-
label="Toggle navigation">
<span class="navbar-toggler-
icon"></span> </button>
<div class="collapse navbar-collapse justify-content-
end" id="navbarNavAltMarkup">
<div class="navbar-nav">
<a class="nav-link active" aria-current="page" href="#">Home</a>
<a class="nav-link" href="https://www.geeksforgeeks.org/a-complete-
step-by-step-guide-for-placement-preparation-by-geeksforgeeks/">Study
Materials</a>
<a class="nav-link text-
info" href="/drive_update">Drive Updates</a>
<a class="nav-link text-danger" href="/home"><i class="fas fa-sign-
out-alt"></i> Sign Out</a>
</div>
</div>
</div>
</nav>
<section>
<figure class="text-center mt-5">
<blockquote class="blockquote">
<p>Welcome <%= data.name %>! </p>
</blockquote>
</figure>
</section>
</body>
</html>

6. Student Drive Update page (HTML -EJS)


<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<nav class="navbar navbar-expand-lg navbar-dark bg-
dark"> <div class="container-fluid">
<a class="navbar-brand" href="/stud_home"><i class="fas fa-envelope-
open-text"></i> Placement Management System</a>
<button class="navbar-toggler" type="button" data-bs-
toggle="collapse" data-bs-target="#navbarNavAltMarkup" aria-
controls="navbarNavAltMarkup" aria-expanded="false"
aria-label="Toggle navigation">
<span class="navbar-toggler-
icon"></span> </button>
<div class="collapse navbar-collapse justify-content-
end" id="navbarNavAltMarkup">
<div class="navbar-nav">
<a class="nav-link" aria-current="page" href="/stud_home">Home</a>
<a class="nav-link" href="https://www.geeksforgeeks.org/a-
complete-
step-by-step-guide-for-placement-preparation-
by-geeksforgeeks/">Study Materials</a>
<a class="nav-link active text-
info" href="/drive_update">Drive Updates</a>
<a class="nav-link text-danger" href="/home"><i class="fas fa-sign-
out-alt"></i> Sign Out</a>
</div>
</div>
</div>
</nav>
<section id='text'>
<figure class="text-center mt-5">
<blockquote class="blockquote">
<h3>Below is the list of all current active drives!</h3>
<br>
<br>
<div class="container">
<%- include('./partials/message')%>
</div>
</blockquote>
</figure>
</section>
<section id='main'>
<table class="table table-dark table-striped mb-5">
<thead>
<tr>
<th scope="col">Company name</th>
<th scope="col">Job specifications</th>
<th scope="col">Test date</th>
<th scope="col">Apply Link</th>
</tr>
</thead>
<tbody>
<% for(let i=0;i<data.length;i++){ %>
<tr>
<td class="pl-4"><%= data[i].company_name %></td>
<td><!-- Button trigger modal -->
<button type="button" class="btn btn-outline-info" data-
bs-toggle="modal" data-bs-target="#staticBackdrop">
Check
</button>

<!-- Modal -->


<div class="modal fade" id="staticBackdrop" data-bs-
backdrop="static" data-bs-keyboard="false" tabindex="-1" aria-
labelledby="staticBackdropLabel" aria-hidden="true">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-
title" id="staticBackdropLabel">Job Specification</h5>
</div>
<div class="modal-body">
<span class="text-
info">Job role:</span> <%= data[i].job_role
%> <br>
<span class="text-
info">Annual package:</span> <%= data[i].package
%> <br>
<span class="text-
info">Eligibility Criteria:</span> Student must've <%= data[i].perc_criteria %>
% throughout with
<% if(data[i].back_criteria==0){ %>
no
<% }else{ %>
maximum <%= data[i].back_criteria %>
<%} %> backlogs.
</div>
<div class="modal-footer">
<button type="button" class="btn btn-primary"
data-bs-dismiss="modal">Close</button>
</div>
</div>
</div>
</div></td>
<td><%= data[i].test_date %> </td>
<td><button type="button" class="btn btn-outline-
primary"><a href=" <%= data[i].apply_link %> ">Apply</a></button></td>
</tr>
<%}%>
</tbody>
</table>
</section>
</body>
</html>

7. Admin home page (HTML – EJS)


<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-
scale=1.0"> <title>Document</title>
</head>
<body>
<nav class="navbar navbar-expand-lg navbar-dark bg-
dark"> <div class="container-fluid">
<a class="navbar-brand" href="/stud_home"><i class="fas fa-
envelope-open-text"></i> Placement Management System</a>
<button class="navbar-toggler" type="button" data-bs-
toggle="collapse" data-bs-target="#navbarNavAltMarkup" aria-
controls="navbarNavAltMarkup" aria-expanded="false" aria-
label="Toggle navigation">
<span class="navbar-toggler-
icon"></span> </button>
<div class="collapse navbar-collapse justify-content-
end" id="navbarNavAltMarkup">
<div class="navbar-nav">
<a class="nav-link active" aria-current="page" href="#">Home</a> <a
class="nav-link" href="/students">Candidates</a>
<a class="nav-link text-
success" href="/new_drive">Post new drive</a>
<a class="nav-link text-danger" href="/home"><i class="fas fa-sign-
out-alt"></i> Sign Out</a>
</div>
</div>
</div>
</nav>
<section>
<figure class="text-center mt-5">
<blockquote class="blockquote">
<p>Welcome Admin!</p>
<br>
<br>
<div class="container">
<%- include('./partials/message')%>
</div>
</blockquote>
</figure>
</section>

</body>
</html>

8. Admin’s New Drive Posting page (HTML-EJS)


<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-
scale=1.0"> <title>Document</title>
</head>
<body>
<nav class="navbar navbar-expand-lg navbar-dark bg-dark">
<div class="container-fluid">
<a class="navbar-brand" href="/stud_home"><i class="fas fa-envelope-
open-text"></i> Placement Management System</a>
<button class="navbar-toggler" type="button" data-bs-
toggle="collapse" data-bs-target="#navbarNavAltMarkup"
aria-controls="navbarNavAltMarkup" aria-expanded="false"
aria-label="Toggle navigation">
<span class="navbar-toggler-
icon"></span> </button>
<div class="collapse navbar-collapse justify-content-
end" id="navbarNavAltMarkup">
<div class="navbar-nav">
<a class="nav-link " aria-current="page"
href='/admin_home'>Home</a> <a class="nav-link"
href="/students">Candidate</a> <a class="nav-link text-
success active" href="/new_drive">Post new drive</a>
<a class="nav-link text-danger" href="/home"><i class="fas fa-sign-out-
alt"></i> Sign Out</a>
</div>
</div>
</div>
</nav>
<div class="container ">
<div class="row mt-5 mb-5">
<div class="col-md-6 m-auto">
<h3 class="mb-5 text-center">Drive information</h3>
<%- include('./partials/message')%>
<form action="/new_drive" method="POST">
<div class="row mb-4">
<label for="drive_id" class="col-sm-2 col-form-
label">Drive Id</label>
<div class="col-sm-10">
<input type="text" class="form-
control" id="drive_id" name="drive_id">
</div>
</div>
<div class="row">
<label for="company_name" class="col-sm-2 col-
form-label">Company Name</label>
<div class="col-sm-10">
<input type="text" class="form-
control" id="company_name"
name="comp_name"> </div>
</div>
<div class="row mb-4">
<label for="role" class="col-sm-2 col-form-label">Job
Role</label> <div class="col-sm-10">
<input type="text" class="form-control" id="role"
name="role"> </div>
</div>
<div class="row mb-4">
<label for="salary" class="col-sm-2 col-
form-label">Package</label>
<div class="col-sm-10">
<input type="text" class="form-
control" id="salary" name="salary">
</div>
</div>
<div class="row">
<label for="perc_criteria" class="col-sm-2 col-form-
label">Percentage criteria</label>
<div class="col-sm-10">
<input type="text" class="form-
control" id="perc_criteria"
name="perc_criteria">
</div>
</div>
<div class="row">
<label for="back_criteria" class="col-sm-2 col-form-
label">Backlog criteria</label>
<div class="col-sm-10">
<input type="text" class="form-
control" id="back_criteria"
name="back_criteria">
</div>
</div>
<div class="row mb-4">
<label for="test_date" class="col-sm-2 col-
form-label">Test date</label>
<div class="col-sm-10">
<input type="date" class="form-
control" id="test_date" name="test_date">
</div>
</div>
<div class="row mb-3">
<label for="link" class="col-sm-2 col-form-
label">Apply link</label>
<div class="col-sm-10">
<input type="text" class="form-control" id="link" name="link">
</div>
</div>
<button type="submit" class="btn btn-primary btn-block
mt-4">Notify</button>
</form>
</div>
</div>
</div>
</body>
</html>

Database models

1. StudentModel.js
2. const mongoose= require('mongoose')
3.
4. const student_schema = new mongoose.Schema({
5. name:{
6. type: String,
7. required: true
8. },
9. stream:{
10. type: String,
11. required: true
12. },
13. backlog:{
14. type: Number,
15. required: true
16. },
17. ssc_perc:{
18. type: Number,
19. required: true
20. },
21. hsc_perc:{
22. type: Number,
23. required: true
24. },
25. grad_perc:{
26. type: Number,
27. require: true
28. },
29. email:{
30. type: String,
31. required: true,
32. unique: true
33. },
34. password:{
35. type: String,
36. required: true
37. }
38.})
39.
40.const students = mongoose.model('students', student_schema)
41.
42.module.exports = students

2. DriveModel.js
const mongoose= require('mongoose')

const drives_schema = new


mongoose.Schema({ drive_id:{
type:String,
required: true,
unique: true
},
company_name:{
type: String,
required: true
},
job_role:{
type: String,
required: true
},
package:{
type: Number,
required: true
},
perc_criteria:{
type: Number,
required: true
},
back_criteria:{
type: Number,
required: true
},
test_date:{
type: String,
required: true
},
apply_link:{
type: String,
required: true
}
})

const drives = mongoose.model('drives', drives_schema)

module.exports = drives
Sample Output

1. Welcome Page

2. Student Register Page


3. Student Login Page

4. Admin Login Page


5. Student Home Page

6. Student Drive Updates Page


7. Admin Home Page

8. Admin New Drive Update Page


CONCLUSION

From a proper analysis of positive points and constraints on the


application, it can be safely concluded that the product is a highly
efficient web-based application. Also, application will be user friendly.
Generally, the TPO ‘s of the Colleges has to face a lot of problems in
management of the Students information. This all information has to
be managed manually. So, there is a need to develop a system that can
solve the mentioned problem. This software comes with just that
solution.
BIBLIOGRAPHY


www.google.com

www.wikipedia.org

dbdiagram.io

geeksforgeeks.org

You might also like