Client Management System
Client Management System
Client Management System
MINI PROJECT
A project report submitted in partial fulfillment of
The requirements for the award of the degree of
MARCH - 2024
MNI PROJECT WORK
HIGH RESOLUTION ANIMATED SCENES FROM STILLS
Bonafide Work Done By
D.THAVASI
C21UG207CAP023
(P.Sankar.,M.Sc.,B.Ed.,M.,phil.,B.A(E).,B.Sc(Geo)
DECLARATION
2 Introduction 1
3 System study 3
I am highly indebted to (Name of your Mentor) for their guidance and constant
supervision as well as for providing necessary information regarding the project &
also for their support in completing the project. I am extremely thankful to him for
providing such a nice support and guidance, although he had busy schedule
managing the corporate affairs.
In Client Management System we use PHP and MySQL Database. This project
keeps the records of clients. Client Management System has two module i.e. admin
and client.
Admin Module
1. Dashboard: In this section, admin can briefly view the total services, total
clients, total today's sales, total yesterday's sales, total seven's sales and total
sales.
2. Services: In this section, admin can manage services (Add/Update).
3. Add Clients: In this section, admin can add new clients
4. Clients List: In this section, admin can update the client details and add services
which are provided by admin.
5. Invoices: In this section, admin can view invoices of the client and also take
print of invoice.
6. Reports: In this section admin can view the clients details and check the sales
reports (month wise/year wise) in a particular period.
7. Search Invoice: In this section, admin can search clients invoice with the help
of his/her invoice number.
Admin can also update his profile, change the password and recover the password.
Client Module
1. Dashboard: It is a welcome page for a client.
2. Invoices: In this section, client can view invoices of the client and also take
print of invoice.
3. Search Invoice: In this section, client can search his/her invoice with the help of
invoice number.
Client can also update his/her profile, change the password and recover the
password.
Objective
The main objective of the Client Management System project is to have a fully
automated Client Management System. This system will enable to draw the details
of the client. This Client Management System will definitely reduce the time,
energy and money wasted in manually searching the details of the clients. With the
help of this software, all the services and clients can be properly channelized.
Existing System
The present scenario offers manual data entry. A lot of time is wasted in creating
the reports as well as maintaining them. In case, if any query arises to get the
information about the client, the whole report is re-typed or xeroxed. This seriously
affects the authentication of the system. This Client Management System is totally
outdated and involves high risk of ambiguity and redundancy.
Proposed System
Client Side:
AMfgdfRA RAM 512 MB
Hard disk 10 GB
Server side:
RAM 1 GB
Hard disk 20 GB
Client Side:
Server Side:
APACHE
The Apache HTTP Server Project is an effort to develop and maintain an open-
source HTTP server for modern operating systems including UNIX and Windows.
The goal of this project is to provide a secure, efficient and extensible server that
provides HTTP services in sync with the current HTTP standards.
The Apache HTTP Server ("httpd") was launched in 1995 and it has been the most
popular web server on the Internet since April 1996. It has celebrated its 20th
birthday as a project in February 2015.
PHP
• PHP stands for PHP: Hypertext Preprocessor.
MYSQL
• MYSQL is a database server
Design Introduction:
Design is the first step in the development phase for any techniques and principles
for the purpose of defining a device, a process or system in sufficient detail to
permit its physical realization.
Once the software requirements have been analyzed and specified the software
design involves three technical activities - design, coding, implementation and
testing that are required to build and verify the software.
The design activities are of main importance in this phase, because in this activity,
decisions ultimately affecting the success of the software implementation and its
ease of maintenance are made. These decisions have the final bearing upon
reliability and maintainability of the system. Design is the only way to accurately
translate the customer’s requirements into finished software or a system.
Design is the place where quality is fostered in development. Software design is a
process through which requirements are translated into a representation of
software. Software design is conducted in two steps. Preliminary design is
concerned with the transformation of requirements into data
UML Diagrams:
Actor:
A coherent set of roles that users of use cases play when interacting with the
use `cases.
UML stands for Unified Modeling Language. UML is a language for specifying,
visualizing and documenting the system. This is the step while developing any
product after analysis. The goal from this is to produce a model of the entities
involved in the project which later need to be built. The representation of the
entities that are to be used in the product being developed need to be designed.
USECASE DIAGRAMS:
Use case diagrams model behavior within a system and helps the developers
understand of what the user require. The stick man represents what’s called an
actor.
Use case diagram can be useful for getting an overall view of the system and
clarifying who can do and more importantly what they can’t do.
Use case diagram consists of use cases and actors and shows the interaction
between the use case and actors.
• The purpose is to show the interactions between the use case and actor.
• To represent the system requirements from user’s perspective.
• An actor could be the end-user of the system or an external system.
USECASE 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. Primary Actor – Sender, Secondary Actor
Receiver.
Add Services
Manage Services
(Update Details)
Add Clients
Clients List
Invoice
Generate Reports
Search Invoice
Update Profile
Change Password
Password Recovery
Client
Dashboard
Invoice
Search Invoice
Update Profile
Change Password
Password Recovery
Class Diagram:
A description of set of objects that share the same attributes operations,
relationships, and semantics
ER Diagram:
The Entity-Relationship (ER) model was originally proposed by Peter in 1976
[Chen76] as a way to unify the network and relational database views. Simply
stated the ER model is a conceptual data model that views the real world as entities
and relationships. A basic component of the model is the Entity-Relationship
diagram which is used to visually represent data objects. Since Chen wrote his
paper the model has been extended and today it is commonly used for database
design for the database designer, the utility of the ER model is:
• It maps well to the relational model. The constructs used in the ER model
can easily be transformed into relational tables.
• It is simple and easy to understand with a minimum of training. Therefore,
the model can be used by the database designer to communicate the design
to the end user.
• In addition, the model can be used as a design plan by the database
developer to implement a data model in specific database management
software.
ER Notation
There is no standard for representing data objects in ER diagrams. Each modeling
methodology uses its own notation. The original notation used by Chen is widely
used in academics texts and journals but rarely seen in either CASE tools or
publications by non-academics. Today, there are a number of notations used;
among the more common are Bachman, crow's foot, and IDEFIX.
All notational styles represent entities as rectangular boxes and relationships as
lines connecting boxes. Each style uses a special set of symbols to represent the
cardinality of a connection. The notation used in this document is from Martin. The
symbols used for the basic ER constructs are:
• Entities are represented by labeled rectangles. The label is the name of the
entity. Entity names should be singular nouns.
• Relationships are represented by a solid line connecting two entities. The
name of the relationship is written above the line. Relationship names should
be verbs
• Attributes, when included, are listed inside the entity rectangle. Attributes
which are identifiers are underlined. Attribute names should be singular
nouns.
• Cardinality of many is represented by a line ending in a crow's foot. If the
crow's foot is omitted, the cardinality is one.
Existence is represented by placing a circle or a perpendicular bar on the line.
Mandatory existence is shown by the bar (looks like a 1) next to the entity for an
instance is required. Optional existence is shown by placing a circle next to the
entity that is optional.
ER Diagram
MySQL Data Tables:
Admin Table :(Table name is admin)
This store admin personal and login details.
System Testing
The goal of the system testing process was to determine all faults in our project .The
program was subjected to a set of test inputs and many explanations were made and based
on these explanations it will be decided whether the program behaves as expected or not.
Our Project went through two levels of testing
1. Unit testing
2. Integration testing
UNIT TESTING
Unit testing is commenced when a unit has been created and effectively
reviewed .In order to test a single module we need to provide a complete
environment i.e. besides the section we would require
• The procedures belonging to other units that the unit under test calls
• Report Generation: admin can generate report from the main database.
INTEGRATION TESTING
FORGOT PASSWORD
<?php
session_start();
error_reporting(0);
include('includes/dbconnection.php');
if(isset($_POST['submit']))
{
$email=$_POST['email'];
$mobile=$_POST['mobile'];
$newpassword=md5($_POST['newpassword']);
$sql ="SELECT Email FROM tbladmin WHERE Email=:email and
MobileNumber=:mobile";
$query= $dbh ->prepare($sql);
$query->bindParam(':email', $email, PDO::PARAM_STR);
$query->bindParam(':mobile', $mobile, PDO::PARAM_STR);
$query->execute();
$results = $query ->fetchAll(PDO::FETCH_OBJ);
if($query ->rowCount() > 0)
{
$con="update tbladmin set Password=:newpassword where Email=:email and
MobileNumber=:mobile";
$chngpwd1 = $dbh->prepare($con);
$chngpwd1->bindParam(':email', $email, PDO::PARAM_STR);
$chngpwd1->bindParam(':mobile', $mobile, PDO::PARAM_STR);
$chngpwd1->bindParam(':newpassword', $newpassword, PDO::PARAM_STR);
$chngpwd1->execute();
echo "<script>alert('Your Password succesfully changed');</script>";
}
else {
echo "<script>alert('Email id or Mobile no is invalid');</script>";
}
}
?>
<!DOCTYPE HTML>
<html>
<head>
<title>Client Management System||Forgot Password Page</title>
<script type="application/x-javascript">addEventListener("load", function()
{ setTimeout(hideURLbar, 0); }, false); function hideURLbar(){ window.scrollTo(0,1); }
</script>
<!-- Bootstrap Core CSS -->
<link href="css/bootstrap.min.css" rel='stylesheet' type='text/css' />
<!-- Custom CSS -->
<link href="css/style.css" rel='stylesheet' type='text/css' />
<!-- Graph CSS -->
<link href="css/font-awesome.css" rel="stylesheet">
<!--jQuery -->
<link href='//fonts.googleapis.com/css?
family=Roboto:700,500,300,100italic,100,400'rel='stylesheet' type='text/css'>
<!-- lined-icons -->
<link rel="stylesheet" href="css/icon-font.min.css" type='text/css' />
<!-- //lined-icons -->
<scriptsrc="js/jquery-1.10.2.min.js"></script>
<!--clock init-->
<script type="text/javascript">
function valid()
{
if(document.chngpwd.newpassword.value!= document.chngpwd.confirmpassword.value)
{
alert("New Password and Confirm Password Field do not match !!");
document.chngpwd.confirmpassword.focus();
return false;
}
return true;
}
</script>
</head>
<body>
<div class="error_page">
<div class="error-top">
<h2 class="inner-tittle page">CMS</h2>
<div class="login">
<div class="buttons login">
<h3 class="inner-tittle t-inner" style="color:
lightblue">Forgot Password</h3>
</div>
<form id="login" method="post" name="chngpwd"
onSubmit="return valid();">
<input type="text" class="text" placeholder="E-
mail Address" name="email" required="true">
<input type="text" class="text"
placeholder="Mobile Number" required="true" name="mobile" maxlength="10"
pattern="[0-9]+">
<input type="password" placeholder="New
Password" name="newpassword" required="true">
<input type="password" placeholder="Confirm
Password" name="confirmpassword" required="true">
<div class="submit"><input type="submit"
onclick="myFunction()" value="Reset" name="submit" ></div>
<div class="clearfix"></div>
<div class="new">
<p><a href="index.php">Already have an
account</a></p>
<div class="clearfix"></div>
</div>
</form>
</div>
</div
<!--//login-top-->
</div>
<!--//login-->
<!--footer section start-->
<div class="footer">
<?phpinclude_once('includes/footer.php');?>
</div>
<!--footer section end-->
<!--/404-->
<!--js -->
<scriptsrc="js/jquery.nicescroll.js"></script>
<scriptsrc="js/scripts.js"></script>
<!-- Bootstrap Core JavaScript -->
<scriptsrc="js/bootstrap.min.js"></script>
</body>
</html>
CODING FOR CLIENT MODULE
CLIENT PROFILE
<?php
session_start();
error_reporting(0);
include('includes/dbconnection.php');
if (strlen($_SESSION['clientmsuid']==0)) {
header('location:logout.php');
} else{
if(isset($_POST['submit']))
{
$uid=$_SESSION['clientmsuid'];
$cname=$_POST['cname'];
$comname=$_POST['comname'];
$address=$_POST['address'];
$city=$_POST['city'];
$state=$_POST['state'];
$zcode=$_POST['zcode'];
$cellphnumber=$_POST['cellphnumber'];
$ophnumber=$_POST['ophnumber'];
$email=$_POST['email'];
$websiteadd=$_POST['websiteadd'];
$sql="update tblclient set
ContactName=:cname,CompanyName=:comname,Address=:address,City=:city,State=:st
ate,ZipCode=:zcode,Cellphnumber=:cellphnumber,Otherphnumber=:ophnumber,Email=:
email,WebsiteAddress=:websiteadd where ID=:uid";
$query = $dbh->prepare($sql);
$query->bindParam(':cname',$cname,PDO::PARAM_STR);
$query->bindParam(':comname',$comname,PDO::PARAM_STR);
$query->bindParam(':address',$address,PDO::PARAM_STR);
$query->bindParam(':city',$city,PDO::PARAM_STR);
$query->bindParam(':state',$state,PDO::PARAM_STR);
$query->bindParam(':zcode',$zcode,PDO::PARAM_STR);
$query->bindParam(':cellphnumber',$cellphnumber,PDO::PARAM_STR);
$query->bindParam(':ophnumber',$ophnumber,PDO::PARAM_STR);
$query->bindParam(':email',$email,PDO::PARAM_STR);
$query->bindParam(':websiteadd',$websiteadd,PDO::PARAM_STR);
$query->bindParam(':uid',$uid,PDO::PARAM_STR);
$query->execute();
if($query ->rowCount() > 0)
{
echo '<script>alert("Your profile has been updated")</script>';
echo "<script>window.location.href ='client-profile.php'</script>";
}
else
{
echo '<script>alert("Something Went Wrong. Please try again")</script>';
}
}
?>
INVOICES
<?php
session_start();
error_reporting(0);
include('includes/dbconnection.php');
if (strlen($_SESSION['clientmsuid']==0)) {
header('location:logout.php');
} else{
?>
<!DOCTYPE HTML>
<html>
<head>
<title>Client Management Sysytem || Invoice </title>
<script type="application/x-javascript">addEventListener("load", function()
{ setTimeout(hideURLbar, 0); }, false); function hideURLbar(){ window.scrollTo(0,1); }
</script>
<!-- Bootstrap Core CSS -->
<link href="css/bootstrap.min.css" rel='stylesheet' type='text/css' />
<!-- Custom CSS -->
<link href="css/style.css" rel='stylesheet' type='text/css' />
<!-- Graph CSS -->
<link href="css/font-awesome.css" rel="stylesheet">
<!--jQuery -->
<link href='//fonts.googleapis.com/css?
family=Roboto:700,500,300,100italic,100,400'rel='stylesheet' type='text/css'>
<!-- lined-icons -->
<link rel="stylesheet" href="css/icon-font.min.css" type='text/css' />
<!-- /js -->
<scriptsrc="js/jquery-1.10.2.min.js"></script>
<!-- //js-->
</head>
<body>
<div class="page-container">
<!--/content-inner-->
<div class="left-content">
<div class="inner-content">
<!-- header-starts -->
<?phpinclude_once('includes/header.php');?>
<!-- //header-ends -->
<!--outter-wp-->
<div class="outter-wp">
<!--sub-heard-part-->
<div class="sub-heard-part">
<ol class="breadcrumb m-b-0">
<li><a
href="dashboard.php">Home</a></li>
<li class="active">Invoice</li>
</ol>
</div>
<!--//sub-heard-part-->
<div class="graph-visual tables-main">
$uid=$_SESSION['clientmsuid'];
$sql="select distinct
tblclient.ContactName,tblclient.CompanyName,tblinvoice.BillingId,tblinvoice.PostingDa
te from tblclient
jointblinvoice on tblclient.ID=tblinvoice.Userid where tblinvoice.Userid=:uid";
$query = $dbh ->prepare($sql);
$query->bindParam(':uid',$uid,PDO::PARAM_STR);
$query->execute();
$results=$query->fetchAll(PDO::FETCH_OBJ);
$cnt=1;
if($query->rowCount() > 0)
{
foreach($results as $row)
{ ?>
<tr class="active">
<th scope="row"><?
php echo htmlentities($cnt);?></th>
<td><?php echo
htmlentities($row->BillingId);?></td>
<td><?php echo
htmlentities($row->CompanyName);?></td>
<td><?php echo
htmlentities($row->ContactName);?></td>
<td><?php echo
htmlentities($row->PostingDate);?></td>
<td><a href="view-
invoice.php?invoiceid=<?php echo $row->BillingId;?>">View</a></td>
</tr>
<?php
$cnt=$cnt+1;}} ?>
</tbody></table>
</div>
</div>
</div>
<!--//graph-visual-->
</div>
<!--//outer-wp-->
<?phpinclude_once('includes/footer.php');?>
</div>
</div>
<!--//content-inner-->
<!--/sidebar-menu-->
<?phpinclude_once('includes/sidebar.php');?>
<div class="clearfix"></div>
</div>
<script>
var toggle = true;
$(".sidebar-icon").click(function() {
if (toggle)
{
$(".page-container").addClass("sidebar-
collapsed").removeClass("sidebar-collapsed-back");
$("#menu span").css({"position":"absolute"});
}
else
{
$(".page-container").removeClass("sidebar-
collapsed").addClass("sidebar-collapsed-back");
setTimeout(function() {
$("#menu span").css({"position":"relative"});
}, 400);
}
toggle = !toggle;
});
</script>
<!--js -->
<scriptsrc="js/jquery.nicescroll.js"></script>
<scriptsrc="js/scripts.js"></script>
<!-- Bootstrap Core JavaScript -->
<scriptsrc="js/bootstrap.min.js"></script>
</body>
</html>
<?php } ?
VIEW INVOICES
<?php
session_start();
error_reporting(0);
include('includes/dbconnection.php');
if (strlen($_SESSION['clientmsuid']==0)) {
header('location:logout.php');
} else{
?>
<!DOCTYPE HTML>
<html>
<head>
<title>Client Management Sysytem || View Invoice </title>
<script type="application/x-javascript">addEventListener("load", function()
{ setTimeout(hideURLbar, 0); }, false); function hideURLbar(){ window.scrollTo(0,1); }
</script>
<!-- Bootstrap Core CSS -->
<link href="css/bootstrap.min.css" rel='stylesheet' type='text/css' />
<!-- Custom CSS -->
<link href="css/style.css" rel='stylesheet' type='text/css' />
<!-- Graph CSS -->
<link href="css/font-awesome.css" rel="stylesheet">
<!--jQuery -->
<link href='//fonts.googleapis.com/css?
family=Roboto:700,500,300,100italic,100,400'rel='stylesheet' type='text/css'>
<!-- lined-icons -->
<link rel="stylesheet" href="css/icon-font.min.css" type='text/css' />
<!-- /js -->
<scriptsrc="js/jquery-1.10.2.min.js"></script>
<!-- //js-->
</head>
<body>
<div class="page-container">
<!--/content-inner-->
<div class="left-content">
<div class="inner-content">
<!-- header-starts -->
<?phpinclude_once('includes/header.php');?>
<!-- //header-ends -->
<!--outter-wp-->
<div class="outter-wp">
<!--sub-heard-part-->
<div class="sub-heard-part">
<ol class="breadcrumb m-b-0">
<li><a
href="dashboard.php">Home</a></li>
<li class="active">View Invoice</li>
</ol>
</div>
<!--//sub-heard-part-->
<div class="graph-visual tables-main" id="exampl">
</div>
</div>
<!--//graph-visual-->
</div>
<!--//outer-wp-->
<?phpinclude_once('includes/footer.php');?>
</div>
</div>
<!--//content-inner-->
<!--/sidebar-menu-->
<?phpinclude_once('includes/sidebar.php');?>
<div class="clearfix"></div>
</div>
<script>
var toggle = true;
$(".sidebar-icon").click(function() {
if (toggle)
{
$(".page-container").addClass("sidebar-
collapsed").removeClass("sidebar-collapsed-back");
$("#menu span").css({"position":"absolute"});
}
else
{
$(".page-container").removeClass("sidebar-
collapsed").addClass("sidebar-collapsed-back");
setTimeout(function() {
$("#menu span").css({"position":"relative"});
}, 400);
}
toggle = !toggle;
});
</script>
<!--js -->
<scriptsrc="js/jquery.nicescroll.js"></script>
<scriptsrc="js/scripts.js"></script>
<!-- Bootstrap Core JavaScript -->
<scriptsrc="js/bootstrap.min.js"></script>
<script>
functionCallPrint(strid) {
varprtContent = document.getElementById("exampl");
varWinPrint = window.open('', '',
'left=0,top=0,width=800,height=900,toolbar=0,scrollbars=0,status=0');
WinPrint.document.write(prtContent.innerHTML);
WinPrint.document.close();
WinPrint.focus();
WinPrint.print();
WinPrint.close();
}
</script>
</body>
</html>
<?php } ?>
EVALUATION
Project URL: http://localhost/vpms
Home Page
Admin Login Page
Dashboard
Profile
Change Password
Add Services
Manage Services
Update Services
Add Clients
Client List
Assign Services
Edit Client Detail
Invoice Detail
Invoice Print
Between Dates Report
Sales Report
Search Invoice
Forgot Password
Client Login page
Dashboard
Client Profile
Invoice
Invoice Detail
Search Invoice
Forgot Password
CONCLUSION:
This Application provides a computerized and automated version of Client
Management System which will benefit the companies and their clients.
It makes entire process online and can generate reports. It has a facility of client’s
login where clients can view their invoice details.
The Application was designed in such a way that future changes can be
done easily. The following conclusions can be deduced from the development of
the project.
References
For PHP
• https://www.w3schools.com/php/default.asp
• https://www.sitepoint.com/php/
• https://www.php.net/
For MySQL
• https://www.mysql.com/
• http://www.mysqltutorial.org
For XAMPP
• https://www.apachefriends.org/download.html