0% found this document useful (0 votes)
16 views61 pages

20MCA010

The document is a project report for a 'Job Recommendation and Filtering System' developed by A. Arun as part of the Master of Computer Applications program at Kumaraguru College of Technology. The system aims to assist job seekers by recommending suitable jobs based on their skills and profiles, utilizing Natural Language Processing techniques, while also providing a platform for employers to post jobs and search for candidates. The report includes sections on system analysis, specifications, software description, and feasibility studies, highlighting the project's technical, operational, and economic viability.
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
16 views61 pages

20MCA010

The document is a project report for a 'Job Recommendation and Filtering System' developed by A. Arun as part of the Master of Computer Applications program at Kumaraguru College of Technology. The system aims to assist job seekers by recommending suitable jobs based on their skills and profiles, utilizing Natural Language Processing techniques, while also providing a platform for employers to post jobs and search for candidates. The report includes sections on system analysis, specifications, software description, and feasibility studies, highlighting the project's technical, operational, and economic viability.
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 61

JOB RECOMMENDATION AND

FILTERING SYSTEM

PROJECT REPORT

Submitted by

A. ARUN
Register No: 20MCA010

in partial fulfilment for the award of the degree


of
MASTER OF COMPUTER APPLICATIONS
in
COMPUTER APPLICATIONS

KUMARAGURU COLLEGE OF TECHNOLOGY


(An Autonomous Institution Affiliated to Anna University, Chennai)
COIMBATORE – 641 049

JUNE 2022
KUMARAGURU COLLEGE OF TECHNOLOGY
(An Autonomous Institution Affiliated to Anna University, Chennai)

COIMBATORE - 641 049

Department of Computer Applications

PROJECT wORK

JUNE 2022

This is to certify that the project entitled

JOB RECOMMENDATION AND FILTERING SYSTEM

is the bonafide record of project work done by

A. ARUN

Register No: 20MCA010

of MCA (Computer Applications) during the year 2021-2022.

Project Guide Head of the Department

Submitted for the Project Viva-Voce examination held on


23/a6,an2

C
Internal Examiner External Examiner
DECLARATION

I affim that the project work titled Job Recommendation and Filtering System being
submitted in partial fulfilment for the award of Master of Computer Applications (MCA) is

the original work caried out by me. It has not fomed the part of any other project work
submitted for award of any degree or diploma, either in this or any other University

(Signature of the Candidate)

A. Arun

20MCA010

I certify that the declaration made above by the candidate is true.

(Signature of the Guide)

Dr. R. K. Kavitha

Assistant Professor (SRG]


ACKNOWLEDGEMENT

I thank all mighty who has been with me through every walk of life, guarding me and showering
the blessings throughout the endeavour to put forth my dissertation.

I sincerely thank SHRI. SHANKAR VANAVARAYAR, Joint Correspondent, Kumaraguru


College of Technology, for providing the ample facilities to carry out this project.

I sincerely thank Dr. D. SARAVANAN, Principal, Kumaraguru College of Technology, for


giving me an opportunity to undertake this full project work.

I am grateful to Dr. M. MANIKANTAN, Associate Professor and Head, Department of


Computer Applications, for his continuous encouragement and support during this project.

I am obliged to Dr. V. GEETHA, Professor Department of Computer Applications, Project


Coordinator, for her guidance, support, valuable suggestions and great encouragement during
this project.

I sincerely thank my guide Dr. R. K. KAVITHA, Assistant Professor (SRG) Department of


Computer Applications, Project Guide, Kumaraguru College of Technology, for her sincere
advice, thought provoking discussions and immense help throughout the project and
encouragement given by her.

Finally, I wish to thank my parents, friends and well-wishers who have been a catalyst
throughout the development of the project work.
TABLE OF CONTENTS

CHAPTER NO. TITLE PAGE NO.

Abstract i
List of Tables ii
List of Figures ii
List of Abbreviations iii
1 Introduction
1.1 Organization Profile 1
1.2 Objective 1
2 System Analysis
2.1 Existing System 2
2.2 Proposed System 2
2.3 Feasibility Study
2.3.1 Technical Feasibility 3
2.3.2 Operational Feasibility 3
2.3.3 Economic Feasibility 4
3 System Specification
3.1 Hardware Requirements 5
3.2 Software Requirements 5
4 Software Description
4.1 Front End 6

4.2 Back End 8

5 Project Description
5.1 Problem Definition 9
5.2 Overview of the Project 9
5.3 Module Description 10
5.4 Data Flow Diagram 12
5.5 E-R Diagram 15
5.6 Database Design 16
6 System Testing
6.1 Unit Testing 22
6.2 Integration Testing 22
6.3 Performance Testing 22
6.4 System Testing 23
6.5 Regression Testing 23
6.6 Test Cases 23
7 System Implementation 25
8 Conclusion & Future Enhancements
8.1 Conclusion 27
8.2 Future Enhancements 27
9 Appendix
9.1 Source Code 28
9.2 Screen Shots 40
10 References 52
i

ABSTRACT

The project entitled “Job Recommendation and Filtering System” is a web-based


application. The main goal of the application is to recommends jobs for graduates and students
or anyone who is looking for a job. Many job applicants find it difficult to search and find a
good job that suits them in job portals, so this project is developed in such a way that it
recommends jobs and reduces the time and effort of the job applicants. This application
analyses the data of the candidate or applicant, based on their skills mentioned, and
recommends jobs to them. In this application job seekers can upload their profile details
including personal details, education details and any core skills and based on that the
recommender can recommend apt jobs to the candidates using NLP techniques.

This project also has an employer module where the employers will register and post
jobs, and they can also edit and update the jobs posted. Employers can view candidates applied
for the post and it also feature to search candidates based on the skill and location. In some
cases, when employers urgently need candidates for work, they can search candidates and
contact them directly.

FRONT END: HTML, BOOTSTRAP, JAVASCRIPT


BACK END: POSTGRESQL
OPERATING SYSTEM: WINDOWS OR LINUX
ii

LIST OF TABLES

S. NO. TABLE NO. DESCRIPTION PAGE NO.


1 5.5.1 Core User Table 16
2 5.5.2 Core Seeker Profile Table 17
3 5.5.3 Core Educational Detail Table 18
4 5.5.4 Core Seeker Skillset Table 19
5 5.5.5 Core Job Post Activity Table 20
6 5.5.6 Core Job Post Table 21

LIST OF FIGURES

S. NO. DIAGRAM NO. DESCRIPTION PAGE NO.


1 5.4.1.1 LEVEL-0 DFD 12
2 5.4.1.2 LEVEL-1 DFD 13
3 5.4.1.3 LEVEL-2 DFD 14
4 5.4.2.1 ER DIAGRAM 15
iii

LIST OF ABBREVIATIONS

S. NO. DATA TYPE DESCRIPTION


1 HTML Hyper Text Markup Language
2 CSS Cascading Style Sheet
3 JS Java Script
4 NLP Natural Language Processing
1

CHAPTER 1

INTRODUCTION

1.1 ORGANIZATION PROFILE

Kumaraguru College of Technology (KCT), Coimbatore is an Engineering College started


in 1984 under the auspicious of Ramanandha Adigalar Foundation, a charitable educational
trust of Sakthi Group. It is situated in a sprawling campus of 150 acres in the IT corridor of
Coimbatore which in many ways was a front runner in the eco-system.

The able guidance and patronage of Arutselvar Dr. N. Mahalingam,Founder,Sakthi Group


along with the efficient administration of Dr.B.K.Krishnaraj Vanavarayar, Chairman, the
resourcefulness of Sri. M. Balasubramaniam, Correspondent and the foresightedness of
Sri.Shankar Vanavarayar,Joint Correspondent have equipped the college with the excellent
facilities such as spacious classrooms, seminar halls, well equipped laboratories, excellent
sporting amenities. Dedicated high-speed internet connectivity broadband) and well-qualified
faculty. Five Academic Blocks house the different departments. The administrative building,
“Dr. Mahalingam Vigyan Bhavan” is an architectural beauty and a landmark in Coimbatore.

The value of the education and training imparted by the college is highlighted by the interest
shown by leading companies for on-campus recruitments. Our alumni have done us proud by
proving their worth in their chosen field of work.

1.2 OBJECTIVE
This project’s main objective is to provide a good web application for job seekers (figure
9.2.1 to figure 9.2.11) and recruiters (figure 9.2.12 to figure 9.2.21). This application
recommends jobs to the candidates. It eases the work of the job applicants by recommending
jobs to the candidates based on the profile and skills. This application uses ‘Natural language
processing’ techniques to recommend jobs for job seekers.
The recruiters or employers uses the project to search for candidates as per their
requirements it also reduces the effort of the employers, and it helps employers to find
candidates in urgent situation.
2

CHAPTER 2

SYSTEM ANALYSIS

This chapter describes the analysis of the system. Analysis is a detailed study of the
various operations performed by the system and their relationship within and outside the
system.

2.1 EXISTING SYSTEM

In the existing system, the job applicants search of jobs manually and must apply for
the jobs even though some applications have recommendations, but it takes time to update if
the information changes. Most of the traditional job recommendations are made based on the
applicants’ preferences. The applicants may give irrelevant preferences, so they cannot find the
job that suits them.

2.1.1 DRAWBACKS

 Search jobs manually.


 Recommendations does not update immediately.
 Most of the job recommendations are based on applicants’ preferences.

2.2 PROPOSED SYSTEM


In the proposed system, applicants are recommended job based on their profile and
skills they currently possess, so that it is easy to find jobs that currently suit them and chances
of getting the jobs are high because they already have the skills. This saves time and effort
needed to search for the jobs that currently suit them.

2.2.1 ADVANTAGES
 Recommends jobs based on currently acquired skills.
 Easy to find jobs that currently suit them.
 Saves time and effort searching for suitable jobs.
3

2.3 FEASIBILITY STUDY


A feasibility study is an assessment of the practicality of a proposed project or system.
A feasibility study aims to objectively and rationally uncover the strengths and weaknesses of
an existing business or proposed venture, opportunities and threats present in the natural
environment, the resources required to carry through, and ultimately the prospects for success.
In its simplest terms, the two criteria to judge feasibility are cost required and value to be
attained.
The main objective of the feasibility study is to test the Technical, Operational and
Economical feasibility for adding new modules and debugging old running system.

2.3.1 TECHNICAL FEASIBILITY


The project “Job Recommendation and Filtering System” is designed with
JavaScript, HTML, CSS as Front end and Python as Back end and PostgreSQL as
database, it is easy to install in all the systems wherever needed. It is more efficient,
easy and user- friendly to understand by almost everyone. Technical Feasibility centres
on the existing computer system software, hardware etc. and to some extent how it can
support the proposed addition. It is very effective and can be accessed and used in any
device. The technical feasibility study most essentially supports the property
information of an organization. Hence this project has good technical feasibility.

2.3.2 OPERATIONAL FEASIBILITY


The project “Job Recommendation and Filtering System” is designed with
flexibility and expandability. It gives useful formatted content. The deployment of the
proposed system, repeated work will be reduced. Operational feasibility refers to the
measure of solving problems with the help of a new proposed system. It helps in taking
advantage of the opportunities and fulfils the requirements as identified during the
development of the project. Also, this project is designed in such a way that it can be
used with any frontend, for example if we want to develop a mobile application only
frontend development is required because it uses REST architecture to fetch data from
backend.
4

2.3.3 ECONOMICAL FEASIBILITY

The proposed system includes, increases the applicant satisfaction, it reduces


the searching of jobs which reduces the activity done at application which reduces
server processing so low level of server processing is enough to run the application
which reduces the cost involved. For font end we use react where we create components
and reuse it wherever possible so it reduces the development and thus reduces cost for
developing cost and also maintenance is also easy only making changes in one or two
files and it will reflect in whole application. Hence, this system is Economical feasible.
As this system is technically, economically and operationally feasible, this system is
judged feasible.
5

CHAPTER 3
SYSTEM SPECIFICATION

The Software Requirement Specification is a technical specification of requirements for the


software product. The goal of software requirements definition is to completely specify the
technical requirements for the software products in a concise and unambiguous manner.

3.1 HARDWARE REQUIREMENTS:

RAM : Minimum of 4 GB
Storage : Minimum of 5 GB
Others : Internet connection.

3.2 SOFTWARE REQUIREMENTS:

Operating System : Windows or Linux


Front end : React Framework
Back end : Django Rest Framework
Database : PostgreSQL
Web Server : WSGI
Others : Any Web Browser
6

CHAPTER 4
SOFTWARE DESCRIPTION

This chapter describes the software used for the development of Job Recommendation
And Filtering System.

4.1 FRONT END

4.1.1 HTML
Hypertext Markup Language (HTML) is the standard markup language for creating
web pages and web applications. With Cascading Style Sheets (CSS) and JavaScript, it
forms a triad of cornerstone technologies for the World Wide Web. Web browsers receive
HTML documents from a web server or from local storage and render the documents into
multimedia web pages. HTML describes the structure of a web page semantically and
originally included cues for the appearance of the document. HTML elements are the
building blocks of HTML pages. HTML provides a means to create structured documents
by denoting structural semantics for text such as headings, paragraphs, lists, links, quotes
and other items.

4.1.2 CSS
Cascading Style Sheets (CSS) is a style sheet language used for describing the
presentation of a document written in a markup language. Although most often used to set
the visual style of web pages and user interfaces written in HTML and XHTML, the
language can be applied to any XML document, including plain XML, SVG and XUL, and
is applicable to rendering in speech, or on other media.

4.1.3 BOOTSTRAP
Bootstrap is a free and open-source front-end web framework. It contains HTML and
CSS- based design templates for typography, forms, buttons, navigation and other interface
components, as well as optional JavaScript extensions. Unlike many earlier web
frameworks, it concerns itself with front-end development only. Bootstrap is a web
framework that focuses on simplifying the development of informative web pages (as
opposed to web apps). The primary purpose of adding it to a web project is to apply
Bootstrap's choices of colour, size, font and layout to that project.
7

4.1.4 JAVASCRIPT
JavaScript is a very powerful client-side scripting language, introduced to “make
webpages alive”. This allows us to create dynamic content for the web. JavaScript is a
lightweight language that is open-source and allows cross-platform. It doesn’t require
compilation and is interpreted with object-oriented capabilities. Also, it works with various
other programming languages. And this is the reason for its vast use all around the world.
Many popular websites and web applications like Google, Amazon, PayPal, etc use this
language. The file extension of a JavaScript file is .js
Most applications work due to an interaction between a client (user’s device) and a
remote server. The client requests data from the server. The server receives the request,
processes it and then responds accordingly. The response sent back is in a user-readable
format and is thus acceptable by the client. But this process takes time as well as resources.
Although users usually need this connection, in some projects, JavaScript often helps to
avoid it.
JavaScript allows the validation of forms without the input of the server, reducing
traffic. It provides wonderful tools for a more interactive and user-friendly website. Some
of the basic functions of JavaScript are:
 Autocomplete: The search box gives suggestions, based on what the user has
already typed.
 Form validation: If the users make a mistake while filling a form, JavaScript
immediately informs them of the error, avoiding filling it all again.
 Fixes layout issues to avoid the overlapping of elements on the page.
 Adds animation to the page to make it more attractive.

ADVANTAGES

• Faster Speed - It provides high speed to client-side languages. The various features
added to the JavaScript for interactivity helps in boosting the speed.
• Reduces Server Load - Avoid server traffic by validating user input on the client-
side. It reduces server load, giving it an advantage over other web languages.
• Rich Interfaces - JavaScript provides numerous interfaces to make the webpage more
interactive.
8

4.2 BACK END

4.2.1 POSTGRESQL

PostgreSQL also known as Postgres, is a free and open-source relational database


management system (RDBMS) emphasizing extensibility and SQL compliance.
PostgreSQL features transactions with Atomicity, Consistency, Isolation, Durability
(ACID) properties, automatically updatable views, materialized views, triggers, foreign
keys, and stored procedures. It is designed to handle a range of workloads, from single
machines to data warehouses or Web services with many concurrent users. It is the default
database for macOS Server and is also available for Windows, Linux, FreeBSD, and
OpenBSD.

4.3 FEATURES

PostgreSQL Databases are Relational


A relational database stores data in separate tables rather than putting all the data in one big
storeroom. The database structures are organized into physical files optimized for speed. The
logical model, with objects such as databases, tables, views, rows, and columns, offers a
flexible programming environment. You set up rules governing the relationships between
different data fields, such as one-to-one, one-to-many, unique, required or optional, and
“pointers” between different tables.

PostgreSQL is Open Source


Only PostgreSQL provides enterprise-class performance and functions among current
Open-Source DBMS with no end of development possibilities. Also, PostgreSQL users can
directly participate in the community and post and share inconveniences and bugs.

The PostgreSQL Database Server is very Fast, Reliable, Scalable, And Easy to Use
If that is what developer are looking for, developer should give it a try. PostgreSQL Server
can run comfortably on a desktop or laptop, alongside their other applications, web servers,
and so on, requiring little or no attention. If developer dedicate an entire machine to
PostgreSQL. PostgreSQL can also scale up to clusters of machines, networked together.
9

CHAPTER 5

PROJECT DESCRIPTION

This chapter discusses about the problem that will be addressed by the project, a set of goals
of the project, the overall objectives for the project, as well as a project plan that describes the
activities the members will undertake.

5.1 PROBLEM DEFINITION

In the existing system the job recommendations are made based on the users’ preferences
which may be good, but it doesn’t provide good job recommendation for applicants for current
skills and only recommends jobs of applicants wish. If the applicant wished for a job and
doesn’t have the skill he will not be selected for the job, so it will be useless.

In order to have a good recommendation and a useful recommendation it should be based


on the user skills and profile details. If the data of the user changes the recommendations
doesn’t change immediately. Because job recommendations are based on applicants’
preferences, they must search through many jobs manually to find apt jobs that currently suits
them.

5.2 PROJECT OVERVIEW

APPLICANTS

The applicants can create an account and put their information in the application like
the personal details, education details, skills acquired etc. They can search the jobs based
on the job title and location and apply for that job. They can also revoke the application
and view list of applied jobs. (figure 9.2.1 to figure 9.2.11)

EMPLOYERS

The employers can also have an account and they can post jobs with the necessary
details and the employers can view the details of the users who applied for the jobs and
contact them for the interview process. In case of urgent hiring employers also has option
to search through apt candidates and contact them. They also have an option to generate
report of list of candidates applied from and till specified dates in PDF format. (figure 9.2.1
to figure 9.2.11)
10

5.3 MODULE DESCRIPTION


The project contains the following modules:
 Find Jobs
 Applied Jobs
 Personal Profile
 Education Details
 Skill Details
 Create Jobs
 Edit Jobs
 My Jobs
 Find Candidates

5.3.1 FIND JOBS


This module has feature for searching jobs, it has two options searches by job title
and search by location. This is the home page for the applicants account in this page
also there is another feature that is recommended jobs a separate column in which
personalized recommendation of jobs based on the user profile and skills is made.
(figure 9.2.8)

5.3.2 APPLIED JOBS


This module has a list of applied jobs of the applicant the applicant can revoke
the application of the job view the list of jobs applied in this module. (figure 9.2.11)

5.3.3 PERSONAL PROFILE


In this module the applicants can set their personal profile like first name, last
name, date of birth, address, etc they can edit and update their profile. (figure 9.2.6)

5.3.4 EDUCATION DETAILS


In this module the applicants can set their educational details in the application
that consists of institute name, major, started date, completed date, percentage, CGPA
etc. All the details can be edited and can be updated. (figure 9.2.7)
11

5.3.5 SKILL DETAILS


This module has functions to add skills of the applicants and the applicants can
change and update the skills linked with their account. This is primary need for job
recommendation so if the use needs a job recommendation these details should be
completed. (figure 9.2.11)

5.3.6 CREATE JOBS


In this module the employer can post the jobs by filling details like job
description, education details required, location, rules and regulations etc. when the
job is created by the employer it is created with created date. (figure 9.2.19)

5.3.7 EDIT JOBS


This module has features to view the created jobs for the employer and has
options to edit the job post details and deleted the job post. It also has a job post view
where the employer can see how it looks for the applicants and view list of applied
users for the job post. (figure 9.2.19)

5.3.8 MY JOBS
This module has option for the preview of the job post and list applied users for
the job post and the employer can generate a report of list of users applied from and
till the specified date in a PDF format. (figure 9.2.15)

5.3.9 APPLICANTS VIEW


This module has options to view the applied candidates for a particular job and
view their profile to contact them. (figure 9.2.17)

5.3.10 FIND CANDIDATES


In this module the employer can search for the candidates and find the users based
on the skills and location and vie their details to contact them in case of urgent hiring.
12

5.4 DATA FLOW DIAGRAM


The data flow diagram (DFD) is one of the most important tools used by system analysts.
Data flow diagrams are made up of several symbols, which represent system components. Most
data flow modelling methods use four kinds of symbols. These symbols are used to represent
four kinds of system components. Processes, data stores, data flows and external entities.
Processes are represented by circles in DFD. A data-flow diagram is a way of representing a
flow of a data of a process or a 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. To construct a Data Flow Diagram,
 Arrow
 Circles
 Open End Box
 Squares are used

5.4.1.1 DATA FLOW DIAGRAM (LEVEL 0)

Figure 5.4.1.1 - Level-0 Context Diagram


13

5.4.1.2 DATA FLOW DIAGRAM (LEVEL 1)

Figure 5.4.1.2 - Level-1 Data Flow Diagram


14

5.4.1.3 DATA FLOW DIAGRAM (LEVEL 2)

Figure 5.4.1.3 - Level-2 Data Flow Diagram


15

5.4.2 ENTITY RELATIONSHIP DIAGRAM

Figure 5.4.2.1 – ER Diagram


16

5.5 DATABASE DESIGN


Database Design is a collection of processes that facilitate the designing, development,
implementation and maintenance of enterprise data management systems. Properly designed
database is easy to maintain, improves data consistency and are cost effective in terms of disk
storage space.

5.5.1 CORE USER TABLE

Table 5.5.1 stores details about users, whether they are employers or job seekers.

Table Name: Core User Table


Table Description: Core User table is used to store account info of different users.
Primary Key: id
Foreign Key: none

FIELD NAME DATA TYPE DESCRIPTION


User id used to identify
id (pk) bigserial
each user.
Used for storing password
password varchar(128)
hash.
User to indicate whether
is_superuser bool
the user is admin or not.
Used to store email
email varchar(255)
address of the user.
Used to store the name of
name varchar(255)
the user.
Used to indicate whether
is_staff bool the user is employer or
not.

Table 5.5.1 Core User Table


17

5.5.2 CORE SEEKER PROFILE TABLE


Table 5.5.2 stores details about job seekers personal details.

Table Name: Core Seeker Profile Table


Table Description: Core Seeker Profile table is used to store personal details of the job
seeker.
Primary Key: id
Foreign Key: user_id

FIELD NAME DATA TYPE DESCRIPTION


User Profile id used to
id (pk) bigserial
identify each user profile.
first_name varchar(255) Used to store first name.
last_name varchar(255) User to store last name.
Used to store date of
date_of_birth date
birth.
Used to store gender
gender varchar(1)
value.
address text Used to store address.
city varchar(100) Used to store city name.
state varchar(100) Used to store state name.
pincode varchar(50) Used to store pincode.
Used to store country
country varchar(100)
name.
Used to store phone
phone_number int8
number.
Used to indicate whether
disabled bool
the user is disabled or not.
Used to indicate to which
user_id (fk) bigserial user the profile belongs
to.

Table 5.5.2 Core Seeker Profile Table


18

5.5.3 CORE EDUCATION DETAIL TABLE

Table 5.5.3 stores details about job seekers educational details.

Table Name: Core Educational Detail Table


Table Description: Core Educational Detail table is used to store educational details
of the job seeker.
Primary Key: id
Foreign Key: user_id

FIELD NAME DATA TYPE DESCRIPTION


User Education detail id
id (pk) bigserial used to identify each user
education detail.
Used to store degree
certified_degree_name varchar(50)
name.
User to store major degree
major varchar(50)
name.
Used to store name of the
institute_university_name varchar(50)
institution.
Used to store the start
start_year int4
year.
Used to store completed
complete_year int4
year.
Used to store percentage
percentage numeric(5, 2)
of marks.
cgpa numeric(4, 2) Used to store cgpa.
Used to indicate to which
user_id (fk) bigserial user the education detail
belongs to.

Table 5.5.3 Core Educational Detail Table


19

5.5.4 CORE SEEKER SKILLSET TABLE


Table 5.5.4 stores details about job seekers skills

Table Name: Core Seeker Skillset Table


Table Description: Core Seeker Skillset table is used to store skill details of the job
seeker.
Primary Key: id
Foreign Key: user_id

FIELD NAME DATA TYPE DESCRIPTION


User Profile id used to
id (pk) bigserial
identify each user profile.
Used to store skills of
skills _varchar
seeker in array format.
Used to indicate to which
user_id (fk) bigserial user the profile belongs
to.

Table 5.5.4 Core Seeker Profile Table


20

5.5.5 CORE JOB POST ACTIVITY TABLE

Table 5.5.35 stores details about job seekers job application details.

Table Name: Core Job Post Activity Table


Table Description: Core Job Post Activity table is used to store information about job
application details.
Primary Key: id
Foreign Key: user_id, job_post_id

FIELD NAME DATA TYPE DESCRIPTION


User Job Application id
id (pk) bigserial used to identify each
users’ job applications.
Used to store applied date
apply_date timestamptz
of a particular job.
Used to indicate to which
job_post_id (fk) bigserial job post does this activity
belongs to.
Used to indicate to which
user_id (fk) bigserial user the job application
belongs to.

Table 5.5.5 Core Job Post Activity Table


21

5.5.6 CORE SEEKER PROFILE TABLE

Table 5.5.6 stores details about job post.

Table Name: Core Job Post Table


Table Description: Core Job Post table is used to store details of job posts.
Primary Key: id
Foreign Key: user_id

FIELD NAME DATA TYPE DESCRIPTION


Job post id used to
id (pk) bigserial
identify each job post.
job_title varchar(255) Used to store job title.
User to store job
job_description text
description.
Used to store roles and
roles_responsibilities text
responsibilities.
Used to store education
education _varchar
required.
Used to store industry
industry_type varchar(255)
type.
Used to store location
job_location _varchar
details.
Used to store employment
employment_type _varchar
type..
Used to store minimum
min_experience int4
experience.
Used to store minimum
min_salary int4
salary.
Used to store maximum
max_salary int4
salary.
Used to store skill details
skills _varchar
required.
Used to store number of
openings int4
openings available.
Used to store job created
created_date timestamptz
date.
Used to store company
company_name varchar(255)
name.
Used to indicate to which
user_id (fk) bigserial employer created the job
post.

Table 5.5.6 Core Job Post Table


22

CHAPTER 6
SYSTEM TESTING

System Testing is a type of software testing that is performed on a complete integrated


system to evaluate the compliance of the system with the corresponding requirements.

6.1 UNIT TESTING

Unit testing is a level of software testing where individual units/components of software


are tested. It is necessary to test each module by giving them different kind of inputs. This
ensures the stability and consistency of the application. The testing scenarios are written for
major modules such Manage Users, Edit User, Profile Details, Education Details, Skill Details,
Job Post etc.

6.2 INTEGRATION TESTING

Integration testing is the phase in software testing in which individual software modules
are combined and tested as a group. Integration testing is conducted to evaluate the compliance
of a system or component with specified functional requirements. It occurs after unit testing.
A testing strategy of integration testing has been used to check that the system behaves as
expected. The testing strategy was based on the functionality and the requirements of the
system. The testing table below gives a precise description of the tests that took place.

6.3 PERFORMANCE TESTING

Each component of the “Job Recommendation and Filtering System” web application went
through each stage of the approached methodology. It was identified that each unit behaved
differently as a single entity and differently when it was integrated with other units in respect
of speed. The test environment of the application plays a crucial role on its performance.
Moreover, the technical specifications of the platform where the application is installed plays
a major role.
23

6.4 SYSTEM TESTING

In system testing, integration testing passed components such as report issues, adding
project, user registration, custom fields, and tags are taken as input. The system elements are
tested as a whole. The environment and behaviour of the system and its elements is tested here.
The administrator system fulfils the objective in efficient manner. The administrator deals the
processes with less expectation of system resources and user friendly with the help of software
which takes care of the system resources.

6.5 REGRESSION TESTING

Whenever a change in a software application is made, it is quite possible that other areas
within the application have been affected by this change. Regression testing is performed to
verify that a fixed bug hasn't resulted in another functionality or business rule violation. The
intent of regression testing is to ensure that a change, such as a bug fix should not result in
another fault being uncovered in the application. Our application “Job Recommendation and
filtering System” is tested properly then and there whenever the bugs are being fixed, to ensure
that it doesn’t affect other modules.

6.6 TEST CASES

A test case is nothing, but a series of step executed on a product, using a predefined set
of input data, expected to produce a pre-defined set of outputs, in a given environment. It
describes “how” to implement those test cases. Test case specifications are useful as it enlists
the specification details of the items.

TEST EXPECTED RESULT ACTUAL RESULT


TEST DESCRIPTION
CASE ID RESULT
If user email and
Redirect to User Home Redirect to User
password fields are
TC001 page shown in figure Home page shown PASS
correct shown in figure
9.2.5 in figure 9.2.5
9.2.3
If employer email and
Redirect to User Home Redirect to User
password fields are
TC002 page shown in figure Home page shown PASS
correct shown in figure
9.2.15 in figure 9.2.15
9.2.13
24

Check Only one profile


Error Message should Error Message is
TC003 is created for a user and PASS
be shown. shown
no duplicates.
If an applicant is
Show personal
created, he/she should
details if profile
Creating User Personal only be able to create
TC004 already created. PASS
Details only one personal
Shown in figure
profile. Shown in figure
9.2.6
9.2.6
Any number of
There can be any
Education and
Creating Education and number of Educations
TC005 skill details be PASS
Skill details and Skills of an
present as shown
applicant
in figure 9.2.7
Applicant is
allowed only once
Applicant must not be
to apply for a job
TC006 Apply jobs Test able to apply more than PASS
as shown in figure
one for a Job
9.2.10 a, 9.2.10 b,
9.2.10 c
Only list of applied job Only applied jobs
TC007 Applied Jobs list Test details should be shown are shown as in PASS
as shown. figure 9.2.11
Only employers
are able to post
Employers can post any
TC008 Employers Job Post Test any number of PASS
number of job post
jobs, shown in
figure 9.2.19
Only the jobs
Only jobs created by an created by the
TC009 Employers My Jobs Test employer should be employer is listed, PASS
listed. shown in figure
9.2.15
Only candidates
applied for that
Applied users should be
TC0010 View applicants Test job is listed, PASS
shown in the list
shown in figure
9.2.17

Table 6.6.1 Test Cases


25

CHAPTER 7

SYSTEM IMPLEMENTATION

Implementation of “Job Recommendation and Filtering System” is a new one. While


system implementation the system meets the minimum requirements. The physical design
phase is the most important phase of the users. In this project the physical design phase is easy
to read, code and maintain. In this phase, the main goal of the application is to recommend apt
jobs to the job seekers and get report of applied candidates etc. Candidates can easily apply and
find the list of applied jobs.

7.1 INSTALLATION PROCEDURE

STEP 1

Unzip the downloaded file and install all the softwares in the requirements. Use pip to
install requirements1.txt and use npm to install requirements2.txt and run the setup.exe file.

STEP 2

To setup the database download postgresql database and execute the


database_setup.exe to set the database and the installation is completed.

STEP 3

To launch bug tracking tool, use the URL http://localhost:3000. It will display the login
page of bug tracking tool. Make sure the web server and the database, both are running before
using the URL, otherwise problem loading page error will be displayed.

STEP 4

If you are a job seeker, click on user and if you are new user, click user registration and
signup and complete your profile to view job recommendations and you can apply for jobs.

STEP 5

If you are an employer, click on employer registration in the index page and signup and
post jobs you can view applied candidates and generate list of applied candidates and search
required candidates in find candidates’ option.
26

SYSTEM REQUIREMENTS

Implementation of software refers to the final installation of the package in its real
environment, to the satisfaction of the intended users and the operation of the system.

 The active user must be aware of the benefits of using the system.
 Their confidence in the software is built up.
 Proper guidance is imparted to the user so that he is comfortable in using the
application.

The user must know that for viewing the result, the server program should be running
in the server. If the server object is not up running on the server, the actual process won’t take
place.


27

CHAPTER 8
CONCLUSION AND FUTURE ENHANCEMENT

8.1 CONCLUSION

The world of computer fields is not static, it is always subject to be dynamic. The
technology which is famous today becomes outdated the very next day. To keep abstract of
technical improvements, the system may be further refined. So, it is not concluded. Yet it will
improve with further enhancements.

The job recommendation system has features that include creating user profile and the
applicants can apply for jobs, search them and view applied jobs. The employer can post jobs
and view applied candidates’ details. In this project the job seekers have job recommendation
feature (as seen in figure 9.2.9) in which NLP techniques are used and is based on skills of the
applicant. The algorithm used is count vectorizer because it is efficient when little data is
available.

Thus, the project is flexible and can be enhanced at any time with more advanced features.

8.2 FUTURE ENHANCEMENT

In the future the system will have the following enhancements,

 Increase the quality of the software where it can handle various types of requests.
 Improve job recommendations by using many algorithms for different types and
different amount of data.
 Get more report generating options.
 Enhance security of the project.
28

CHAPTER 9

APPENDICES

9.1 SOURCE CODE

INDEX.JS

import Head from "next/head";


import Image from "next/image";
import Link from "next/link";

import { useDispatch, useSelector } from "react-redux";

import { listJobs } from "../actions/jobActions";

import React, { useState, useEffect } from "react";

import Header from "../components/Header";


import Footer from "../components/Footer";
import FindJobs from "../components/FindJobs";
import JobCard from "../components/JobCard";
import JobList from "../components/JobList";

import Loader from "../components/Loader";


import Message from "../components/Message";
import LoginPage from "./login";

import { BrowserRouter as Router, Routes, Route } from "react-router-dom";

import axios from "axios";

import { Container, Row, Col, Button } from "react-bootstrap";

export default function Home() {

return (
<div>
<Head>
<title>Apt Job</title>
<meta name="description" content="Generated by create next app" />
<link rel="icon" href="/favicon.ico" />
</Head>

<main className="page-wrapper">
<Header />
<Container fluid className="pb-5 mb-md-4 mt-5 py-4 py-sm-5">
<Container as="section" className="mb-3 pb-2">
<Row className="gy-4 align-items-md-center">
29

<Col md={6}>
<Image
src="/images/steps.svg"
width={634}
height={486}
quality={100}
alt="Apt Job"
/>
</Col>
<Col lg={5} md={6} className="offset-lg-1">
<h2 className="mb-4">Finding a new job is now even easier!</h2>
<p className="mb-4 pb-3 fs-lg">
Login to{" "}
<strong>
<i>Apt Job</i>
</strong>{" "}
and put your details you can apply for various jobs and get
recommendations of jobs based on your profile.
</p>
<p>
Employers, post your jobs and get perfect candidates for your
jobs!{" "}
</p>
<Row>
<Col>
<Link href="/user/register">
<Button variant="primary" className="rounded-pill">
{"User Register"}{" "}
<i className="fi-chevron-right ms-2"></i>
</Button>
</Link>
</Col>
<Col>
<Link href="/employer/register">
<Button variant="primary" className="rounded-pill">
{"Employer Register"}{" "}
<i className="fi-chevron-right ms-2"></i>
</Button>
</Link>
</Col>
</Row>
</Col>
</Row>
</Container>
</Container>
</main>
<Footer />
</div>)
;}
30

PERSONALDETAILS.JS

import React from "react";


import { useState, useEffect } from "react";

import Link from "next/link";


import { useRouter } from "next/router";

import { useDispatch, useSelector } from "react-redux";

import {
Col,
Row,
Accordion,
Form,
InputGroup,
Button,
ToastContainer,
Toast,
ToastHeader,
ToastBody,
} from "react-bootstrap";

import AccordionTitle from "./AccordionTitle";

import {
USER_UPDATE_PROFILE_RESET,
USER_CREATE_PROFILE_RESET,
} from "../../constants/userConstants";

import {
retrieveUserProfile,
updateUserProfile,
logout,
createUserProfile,
} from "../../actions/userActions";

import Loader from "../Loader";


import Message from "../Message";

const PersonalDetails = () => {


const userLogin = useSelector((state) => state.userLogin);
const { userInfo } = userLogin;
// const [userInfo, setUserInfo] = useState({});

const userGetProfile = useSelector((state) => state.userGetProfile);


const { error, loading, userProfile } = userGetProfile;

const userUpdateProfile = useSelector((state) => state.userUpdateProfile);


const { error: updateError, success } = userUpdateProfile;
31

const userCreateProfile = useSelector((state) => state.userCreateProfile);


const { error: createError, success: createSuccess } = userCreateProfile;

const dispatch = useDispatch();


const router = useRouter();

const [id, setId] = useState(0);


const [firstname, setFirstname] = useState("");
const [lastname, setLastname] = useState("");
const [gender, setGender] = useState("M");
const [genderKey, setGenderKey] = useState("Male");
const [dob, setDob] = useState("");
const [phone, setPhone] = useState(0);
const [address, setAddress] = useState("");
const [city, setCity] = useState("");
const [state, setState] = useState("");
const [pincode, setPincode] = useState("");
const [country, setCountry] = useState("");
const [disabled, setDisabled] = useState(false);

const [show, setShow] = useState(false);


const [eShow, setEShow] = useState(false);
const [text, setText] = useState("");

useEffect(() => {
// dispatch(retrieveUserProfile());

if (userInfo) {
if (userInfo.isEmployer == false) {
// dispatch(retrieveUserProfile());
if (success) {
console.log("success from 1");
dispatch({ type: USER_UPDATE_PROFILE_RESET });
setText("Profile updated");
setShow(true);
// router.push("/user/profile");
} else {
if (updateError) {
setEShow(true);
console.log(updateError);
setText("Error");
} else if (createSuccess) {
dispatch({ type: USER_CREATE_PROFILE_RESET });
setText("Profile updated");
setShow(true);
// router.push("/user/profile");
} else if (createError) {
setText({ createError });
setEShow(true);
32

}
if (!userProfile?.[0] || !userProfile?.[0]?.id) {
dispatch(retrieveUserProfile());
console.log("dispatch reterieveUserProfile from 1");
} else {
setId(userProfile?.[0]?.id);
setFirstname(userProfile?.[0]?.first_name);
setLastname(userProfile?.[0]?.last_name);
setGender(userProfile?.[0]?.gender);
setAddress(userProfile?.[0]?.address);
setCity(userProfile?.[0]?.city);
setPincode(userProfile?.[0]?.pincode);
setState(userProfile?.[0]?.state);
setCountry(userProfile?.[0]?.country);
setDisabled(userProfile?.[0]?.disabled);
setPhone(userProfile?.[0]?.phone_number);
setDob(userProfile?.[0]?.date_of_birth);
if (gender === "M") {
setGenderKey("Male");
} else if (gender === "F") {
setGenderKey("Female");
} else if (gender === "O") {
setGenderKey("Others");
}
}
}
} else if (userInfo.isEmployer) {
router.push("/employer");
}
} else {
router.push("/");
}
}, [
dispatch,
router,
userProfile?.[0],
success,
updateError,
createSuccess,
createError,
]);

const valuesWithKeys = {
Male: "M",
Female: "F",
Other: "O",
};

const personalSubmitHandler = (e) => {


e.preventDefault();
33

if (!userProfile?.[0] || !userProfile?.[0]?.id) {
let user = {
first_name: firstname,
last_name: lastname,
gender: gender,
date_of_birth: dob,
phone_number: phone,
address: address,
city: city,
state: state,
pincode: pincode,
country: country,
disabled: disabled,
};
dispatch(createUserProfile(user));
console.log(user);
} else {
dispatch(
updateUserProfile(id, {
first_name: firstname,
last_name: lastname,
gender: gender,
date_of_birth: dob,
phone_number: phone,
address: address,
city: city,
state: state,
pincode: pincode,
country: country,
disabled: disabled,
})
);
console.log("Updated Profile");
}
};

return (
<>
<ToastContainer
position="top-end"
bsPrefix="toast-container p-3 position-fixed mt-5 pt-5"
>
<Toast
onClose={() => {
setShow(false);
setText("");
}}
show={show}
delay={5000}
autohide
34

>
<ToastHeader closeVariant="white" className="bg-success text-white">
<i className="fi-check-circle me-2"></i>
<span className="fw-bold me-auto">Success</span>
</ToastHeader>
<ToastBody className="text-success">{text}</ToastBody>
</Toast>
<Toast
onClose={() => {
setEShow(false);
setText("");
}}
show={eShow}
delay={5000}
autohide
>
<ToastHeader closeVariant="white" className="bg-danger text-white">
<i className="fi-x-circle me-2"></i>
<span className="fw-bold me-auto">Error</span>
</ToastHeader>
<ToastBody className="text-danger">{text}</ToastBody>
</Toast>
</ToastContainer>
{console.log("show profile toast: " + show)}
<Row className="mb-4">
<Col bsPrefix="col-lg-3 col-12">
<h2 className="h4">Personal Details</h2>
</Col>
<Col bsPrefix="col-lg-9 col-12">
{loading ? (
<h2>
<Loader />
</h2>
) : error ? (
<Message variant="danger">{error}</Message>
):(
<></>
)}
{/* {loadingUpdate ? (
<Loader />
) : errorUpdate ? (
<Message variant="danger">{error}</Message>
):(
<></>
)} */}
<Accordion>
<div className="border rounded-3 p-3">
{/* <div className="border-bottom pb-3 mb-3">
<div className="d-flex align-items-center justify-content-between">
<div className="pe-2">
35

<h2 className="form-label fw-bold">


Full Name
</h2>
<p className="mb-0">Annette Black</p>
</div>
<CustomToggle eventKey="0" />
</div>
<Accordion.Collapse eventKey="0">
<div className="my-1">
<Form.Control
type="text"
placeholder="Enter Full name"
value={name}
onChange={(e) => setName(e.target.value)}
required
/>
</div>
</Accordion.Collapse>
</div> */}

<Form autoComplete="off" onSubmit={personalSubmitHandler}>


<div className="border-bottom pb-3 mb-3">
<AccordionTitle
title="Full name"
displayText={firstname + " " + lastname}
eventKey="0"
/>
<Accordion.Collapse eventKey="0">
<>
<div className="my-1">
<Form.Control
type="text"
placeholder="Enter firstname"
value={firstname}
onChange={(e) => setFirstname(e.target.value)}
required
/>
</div>
<div className="my-1">
<Form.Control
type="text"
placeholder="Enter lastname"
value={lastname}
onChange={(e) => setLastname(e.target.value)}
required
/>
</div>
</>
</Accordion.Collapse>
</div>
36

<div className="border-bottom pb-3 mb-3">


<AccordionTitle
title="Gender"
displayText={genderKey}
eventKey="1"
/>
<Accordion.Collapse eventKey="1">
<div className="my-1">
<Form.Select
aria-label="select"
value={gender}
onChange={(e) => {
setGender(e.target.value);
let index = e.nativeEvent.target.selectedIndex;
let label = e.nativeEvent.target[index].text;
setGenderKey(label);
}}
>
<option disabled>{"Select Gender"}</option>
{Object.entries(valuesWithKeys).map(([key, value]) => (
<option value={value} key={key}>
{key}
</option>
))}
</Form.Select>
</div>
</Accordion.Collapse>
</div>

<div className="border-bottom pb-3 mb-3">


<AccordionTitle
title="Date of birth"
displayText={dob}
eventKey="2"
/>
<Accordion.Collapse eventKey="2">
<div className="my-1">
<Form.Control
type="date"
placeholder="What's your DOB"
value={dob}
onChange={(e) => setDob(e.target.value)}
required
/>
</div>
</Accordion.Collapse>
</div>

<div className="border-bottom pb-3 mb-3">


37

<AccordionTitle
title="Phone Number"
displayText={phone}
eventKey="3"
/>
<Accordion.Collapse eventKey="3">
<div className="my-1">
<Form.Control
type="number"
placeholder="Phone number"
value={phone}
onChange={(e) => setPhone(e.target.value)}
required
/>
</div>
</Accordion.Collapse>
</div>

<div className="border-bottom pb-3 mb-3">


<AccordionTitle
title="Street address"
displayText={address}
eventKey="4"
/>
<Accordion.Collapse eventKey="4">
<div className="my-1">
<Form.Control
type="text"
placeholder="Enter your street Address"
value={address}
onChange={(e) => setAddress(e.target.value)}
required
/>
</div>
</Accordion.Collapse>
</div>

<div className="border-bottom pb-3 mb-3">


<AccordionTitle
title="City"
displayText={city}
eventKey="5"
/>
<Accordion.Collapse eventKey="5">
<div className="my-1">
<Form.Control
type="text"
placeholder="Enter your city"
value={city}
onChange={(e) => setCity(e.target.value)}
38

required
/>
</div>
</Accordion.Collapse>
</div>

<div className="border-bottom pb-3 mb-3">


<AccordionTitle
title="State"
displayText={state}
eventKey="6"
/>
<Accordion.Collapse eventKey="6">
<div className="my-1">
<Form.Control
type="text"
placeholder="Enter your state"
value={state}
onChange={(e) => setState(e.target.value)}
required
/>
</div>
</Accordion.Collapse>
</div>

<div className="border-bottom pb-3 mb-3">


<AccordionTitle
title="Pincode"
displayText={pincode}
eventKey="7"
/>
<Accordion.Collapse eventKey="7">
<div className="my-1">
<Form.Control
type="text"
placeholder="Enter your pincode"
value={pincode}
onChange={(e) => setPincode(e.target.value)}
required
/>
</div>
</Accordion.Collapse>
</div>

<div className="border-bottom pb-3 mb-3">


<AccordionTitle
title="Country"
displayText={country}
eventKey="8"
/>
39

<Accordion.Collapse eventKey="8">
<div className="my-1">
<Form.Control
type="text"
placeholder="Enter your country"
value={country}
onChange={(e) => setCountry(e.target.value)}
required
/>
</div>
</Accordion.Collapse>
</div>

<div className="border-bottom pb-3 mb-3">


<div className="d-flex align-items-center justify-content-between">
<div className="pe-2">
<InputGroup>
<InputGroup.Text
id="text-addon"
className="fw-bold text-dark"
>
{"Disabled"}
</InputGroup.Text>
<InputGroup.Checkbox
aria-label="Checkbox"
onChange={(e) => setDisabled(e.target.checked)}
checked={disabled}
/>
</InputGroup>
</div>
</div>
</div>

<div>
<div className="d-flex align-items-center justify-content-between">
<div className="pe-2">
<Button type="submit">{"Save"}</Button>
</div>
</div>
</div>
</Form>
</div>
</Accordion>
</Col>
</Row>
</>
);
};

export default PersonalDetails;


40

9.2 SCREEN SHOTS

Figure 9.2.1 Index Page

Figure 9.2.2 User Index Page


41

Figure 9.2.3 User Login

Figure 9.2.4 User Signup


42

Figure 9.2.5 User Home Page

Figure 9.2.6 User Profile Page


43

Figure 9.2.7 User Education and Skill Details Page

Figure 9.2.8 User Find Jobs


44

Figure 9.2.9 User Job Recommendation

Figure 9.2.10 a) User Job Apply Page


45

Figure 9.2.10 b) User Job Apply Page

Figure 9.2.10 c) User Job Apply Page


46

Figure 9.2.11 User Applied Jobs Page

Figure 9.2.12 Employer Index Page


47

Figure 9.2.13 Employer Login Page

Figure 9.2.14 Employer Signup Page


48

Figure 9.2.15 Employer My Jobs Page

Figure 9.2.16 Employer Job Details Page


49

Figure 9.2.17 Employer View Applicants Page

Figure 9.2.18 Employer View Applicants Details Page


50

Figure 9.2.19 Employer Job Post Page

Figure 9.2.20 Employer Posted Jobs Page


51

Figure 9.2.21 a) Employer Edit Job Page

Figure 9.2.21 b) Employer Edit Job Page


52

CHAPTER 10

REFERENCES

10.1 BOOKS

 Kirill Konshin, (26 July 2018) ‘Next.js Quick Start Guide: Server-side rendering done
right’, Packt Publishing Limited, pp. 164.
 William S Vincent, (10 August 2020) ‘Django for APIs: Build web APIs with Python
and Django’, Welcometocode, pp. 162.
 Simon Riggs, (March 31, 2022) ‘PostgreSQL 14 Administration Cookbook’, Packt
Publishing, pp. 608.

10.2 WEBSITES

https://stackoverflow.com/

https://www.django-rest-framework.org/

https://www.postgresql.org/

https://nextjs.org/learn/basics/create-nextjs-app

https://www.youtube.com/watch?v=qw--VYLpxG4

https://www.youtube.com/watch?v=c708Nf0cHrs

https://www.youtube.com/watch?v=MFuwkrseXVE

You might also like