Varsha Project Report File
Varsha Project Report File
June, 2021
CANDIDATE’S DECLARATION
I hereby declare that the work presented in this report entitled “Parcel
tracking system”,
was carried out by me. I have not submitted the matter embodied in this
report for the award of any other degree or diploma of any other University or
Institute.
I have given due credit to the original authors/sources for all the words, ideas,
diagrams, graphics, computer programs, experiments, results, that are not my
original contribution.
I have used quotation marks to identify verbatim sentences and given credit
to the original authors/sources. I affirm that no portion of my work is
plagiarized, and the experiments and results reported in the report are not
manipulated. In the event of a complaint of plagiarism and the manipulation of
the experiments and results, I shall be fully responsible and answerable.
This is to certify that Varsha Katheria(Enroll No: 608/18 ) has carried out
the project work presented in this report entitled “Parcel tracking system”
for the award of Master of Computer Application from Babasaheb
Bhimrao Ambedkar Uiversity, Lucknow under my/our supervision. The
project embodies result of original work, and studies are carried out by the
student himself and the contents of the project do not form the basis for the
award of any other degree to the candidate or to anybody else from this or
any other University/ Institution.
Signature
Dr. Shalini Chandra
Assistant Professor
Dr. Deepak Kumar Verma
Signature
(Prof. Sanjay K. Dwivedi, DCS)
The "Parcel Tracking System" has been developed to override the problems
prevailing in the practicing manual system. This software is supported to
eliminate and in some cases reduce the hardships faced by this existing
system. Moreover this system is designed for the particular need of the
company to carry out operations in a smooth and effective manner.
In computer system the person has to fill the various forms & number of
copies of the forms can be easily generated at a time.
In computer system, it is not necessary to create the manifest but we
can directly print it, which saves our time.
To assist the staff in capturing the effort spent on their respective
working areas.
To utilize resources in an efficient manner by increasing their
productivity through automation.
The system generates types of information that can be used for various
purposes.
It satisfy the user requirement
Be easy to understand by the user and operator
Be easy to operate
2) Software Requirements:-
Python 3 (Any version)
Any text editor(PyCharm,Notepad++, etc.)
1. Economical Feasibility
∙ All hardware and software cost has to be borne by the organization. ∙ Overall
we have estimated that the benefits the organization is going to receive from
the proposed system will surely overcome the initial costs and the later on
running cost for system.
2. Technical Feasibility
This included the study of function, performance and constraints that may
affect the ability to achieve an acceptable system. For this feasibility study, we
studied complete functionality to be provided in the system, as described in
the System Requirement Specification (SRS), and checked if everything was
possible using different type of frontend and backend platform.
3. Operational Feasibility
No doubt the proposed system is fully GUI based that is very user friendly and
all inputs to be taken all self-explanatory even to a layman. Besides, a proper
training has been conducted to let know the essence of the system to the
users so that they feel comfortable with new system. As far our study is
concerned the clients are comfortable and happy as the system has cut down
their loads and doing.
Modules of Parcel Tracking System
Manage User– For the user, The admin can view, add, edit and delete user
information.
Manage Parcel– For the Parcel, The admin can add, edit and delete Parcel
information.
Login – By default the student need to login first to enable to access the
system.
Change Password– For the change password, The admin can change a
password for better security.
Customers(Users)
In the DFD, four symbols are used and they are as follows.
Admin logins to the system and manage all the functionalities of Parcel
tracking system
Admin can add, edit, delete and view the records of Parcel, delivery,
tracking
Admin can manage all the details of customer, shipment, delivery
Admin can also generate reports o Parcel, customer, shipment, delivery
ENTITY RELATION DIAGRAMS:-
The Entity Relation Model or Entity Relation Diagram (ERD) is a data model or
diagram for high-level description of conceptual data model, and it provides a
graphical notation for representing such data models in the form of entity
relationship diagrams. Such models are typically used in the first stage of
Management information management system design; they are used for
example, to describe information needs and/ or the type of information that is
to be stored in the Database during the requirement analysis. The data
modeling technique, however, can be used to describe any ontology ( i.e an
overview and classification of used term and their relationships) for a certain
universe of discourse (i.e area of interest ).
Attributes
Relations
Many-to-many
Many-to-one
One-to-many
One-to-one
Weak entities
Contact
Password
Email
Send
parce
Parcel
l
type
Parcel Parcel
request User weigh
t
Receiver
Generate address
ID
Not valid parcel
ID
See
parcel Status
Type
update
parcel Weight
status
Visitor
Track
Contact parcel
using ID
Security Testing of the Project
Testing is vital for the success of any software. no system design is ever
perfect. Testing is also carried in two phases. first phase is during the
software engineering that is during the module creation. second phase is after
the completion of software. this is system testing which verifies that the
whole set of programs hanged together.
In this technique, the close examination of the logical parts through the
software are tested by cases that exercise species sets of conditions or loops.
all logical parts of the software checked once. errors that can be corrected
using this technique are typographical errors, logical expressions which
should be executed once may be getting executed more than once and error
resulting by using wrong controls and loops. When the box testing tests all the
independent part within a module a logical decisions on their true and the
false side are exercised , all loops and bounds within their operational bounds
were exercised and internal data structure to ensure their validity were
exercised once.
This method enables the software engineer to device sets of input techniques
that fully exercise all functional requirements for a program. black box testing
tests the input, the output and the external data. it checks whether the input
data is correct and whether we are getting the desired output.
Alpha Testing:
Unit Testing:
Integration Testing:
Validation Testing:
Validation testing was performed to ensure that all the functional and
performance requirements are met.
System Testing:
PERT CHART
04/06/2021
13 Integration 5 days Sat05/06/2021 Thu 10/06/2021
Testing
14 Management 4 days Fri 11/06/2021 Thu 15/06/2021
systemLevel
Testing
15 Implementation 4 days Fri16/06/2021 Sun20/06/2021
This would help the managing the human resource and billing system etc. just
using one system i.e. Parcel Management System.
There are several advantages of using the Parcel management system in a
business setting are:
Cost savings:
This system manages the human and other resources in such a way that the
cost of delivery of each consignment decreases and helps the company to get
more profit.
Increased efficiency:
Data security:
They can process the consignment and update the status only with the
authenticated process to make user data secure which is our main concern in
this era.
DATABASE TABLES
1. Admin and User Login Table
class Signup(models.Model):
user=models.ForeignKey(User,on_delete=models.CASCADE)
mobile = models.CharField(max_length=20,null=True)
image = models.FileField(null=True)
gender = models.CharField(max_length=10,null=True)
dob = models.DateField()
address = models.CharField(max_length=50,null=True)
def _str_(self):
return self.user.username
2. Parcel request table:-
class ParcelRequest(models.Model):
first_name=models.CharField(max_length=40,null=True)
last_name=models.CharField(max_length=40,null=True)
email=models.CharField(max_length=40,null=True)
mobile=models.CharField(max_length=40,null=True)
parcel_type=models.CharField(max_length=40,null=True)
request_date=models.CharField(max_length=50,null=True)
gov_id=models.CharField(max_length=40,null=True)
gov_no=models.CharField(max_length=40,null=True)
weight=models.CharField(max_length=40,null=True)
address=models.CharField(max_length=200,null=True)
status=models.CharField(max_length=40,null=True)
parcel_id=models.IntegerField(max_length=50,null=True)
3. Receiver table
class Receiver(models.Model):
name=models.CharField(max_length=50,null=True)
contact=models.CharField(max_length=50,null=True)
pin=models.CharField(max_length=50,null=True)
house=models.CharField(max_length=50,null=True)
city=models.CharField(max_length=50,null=True)
state=models.CharField(max_length=50,null=True)
send_date=models.CharField(max_length=50,null=True)
parcel_id=models.IntegerField(max_length=50,null=True)
parcel_status=models.CharField(max_length=200,null=True)
parcel_date=models.CharField(max_length=200,null=True)
parcel_msg=models.CharField(max_length=200,null=True)
4. Feedback table
class Feedback(models.Model):
feedback_name = models.CharField(max_length=20,null=True)
feedback_contact = models.CharField(max_length=30, null=True)
feedback_email = models.CharField(max_length=10,null=True)
feedback_comment = models.CharField(max_length=15,null=True)
Project Screenshots
1. Home page –
8. Genrate Parcel ID –
9. View Users –
admin.site.register(Signup)
admin.site.register(Feedback)
admin.site.register(ParcelRequest)
admin.site.register(Receiver)
models.py –
from django.db import models
from django.contrib.auth.models import User
class Signup(models.Model):
user=models.ForeignKey(User,on_delete=models.CASCADE)
mobile = models.CharField(max_length=20,null=True)
image = models.FileField(null=True)
gender = models.CharField(max_length=10,null=True)
dob = models.DateField()
address = models.CharField(max_length=50,null=True)
def _str_(self):
return self.user.username
class Feedback(models.Model):
feedback_name = models.CharField(max_length=20,null=True)
feedback_contact = models.CharField(max_length=30, null=True)
feedback_email = models.CharField(max_length=10,null=True)
feedback_comment = models.CharField(max_length=15,null=True)
class ParcelRequest(models.Model):
first_name=models.CharField(max_length=40,null=True)
last_name=models.CharField(max_length=40,null=True)
email=models.CharField(max_length=40,null=True)
mobile=models.CharField(max_length=40,null=True)
parcel_type=models.CharField(max_length=40,null=True)
request_date=models.CharField(max_length=50,null=True)
gov_id=models.CharField(max_length=40,null=True)
gov_no=models.CharField(max_length=40,null=True)
weight=models.CharField(max_length=40,null=True)
address=models.CharField(max_length=200,null=True)
status=models.CharField(max_length=40,null=True)
parcel_id=models.IntegerField(max_length=50,null=True)
class Receiver(models.Model):
name=models.CharField(max_length=50,null=True)
contact=models.CharField(max_length=50,null=True)
pin=models.CharField(max_length=50,null=True)
house=models.CharField(max_length=50,null=True)
city=models.CharField(max_length=50,null=True)
state=models.CharField(max_length=50,null=True)
send_date=models.CharField(max_length=50,null=True)
parcel_id=models.IntegerField(max_length=50,null=True)
parcel_status=models.CharField(max_length=200,null=True)
parcel_date=models.CharField(max_length=200,null=True)
parcel_msg=models.CharField(max_length=200,null=True)
views.py –
from django.shortcuts import render,redirect
from django.contrib.auth.models import User,auth
from django.contrib.auth import authenticate,login,logout
from .models import *
import datetime
def index(request):
return render(request,'index.html')
def login(request):
error=""
if request.method == "POST":
ur = request.POST['uname']
pd = request.POST['pwd']
user = auth.authenticate(username=ur,password=pd)
try:
if user.is_staff:
auth.login(request,user)
error = "no"
elif user is not None:
auth.login(request,user)
return redirect('user_home')
error = "not"
else:
error = "yes"
except:
error = "yes"
d = {'error':error}
return render(request,'login.html',d)
def signup(request):
error = ""
if request.method=='POST':
f=request.POST['fname']
l=request.POST['lname']
e = request.POST['email']
con = request.POST['contact']
p = request.POST['pwd']
gen = request.POST['gender']
i=request.FILES['image']
addr=request.POST['address']
d=request.POST['dob']
try:
user=User.objects.create_user(first_name=f,last_name=l,username=e,passwor
d=p)
Signup.objects.create(user=user,mobile=con,image=i,gender=gen,address=ad
dr,dob=d)
error="no"
except:
error="yes"
d={'error':error}
return render(request,'signup.html',d)
def admin_home(request):
if not request.user.is_authenticated:
return redirect('login')
return render(request,'admin_home.html')
def Logout(request):
logout(request)
return redirect('index')
def view_users(request):
if not request.user.is_authenticated:
return redirect('admin_login')
data = Signup.objects.all()
d = {'data':data}
return render(request,'view_users.html',d)
def delete_user(request,pid):
if not request.user.is_authenticated:
return redirect('admin_login')
student = User.objects.get(id=pid)
student.delete()
return redirect('view_users')
def change_passwordadmin(request):
if not request.user.is_authenticated:
return redirect('user_login')
error=""
if request.method=="POST":
c = request.POST['currentpassword']
n = request.POST['newpassword']
try:
u = User.objects.get(id=request.user.id)
if u.check_password(c):
u.set_password(n)
u.save()
error="no"
else:
error="not"
except:
error="yes"
d = {'error':error}
return render(request,'change_passwordadmin.html',d)
def user_home(request):
if not request.user.is_authenticated:
return redirect('login')
return render(request,'user_home.html')
def change_passworduser(request):
if not request.user.is_authenticated:
return redirect('user_login')
error=""
if request.method=="POST":
c = request.POST['currentpassword']
n = request.POST['newpassword']
try:
u = User.objects.get(id=request.user.id)
if u.check_password(c):
u.set_password(n)
u.save()
error="no"
else:
error="not"
except:
error="yes"
d = {'error':error}
return render(request,'change_passworduser.html',d)
def feedback(request):
if not request.user.is_authenticated:
return redirect('feedback')
error=""
if request.method=='POST':
n = request.POST['fname']
p = request.POST['fphone']
e = request.POST['femail']
c = request.POST['fcomment']
try:
Feedback.objects.create(feedback_name=n,feedback_contact=p,feedback_emai
l=e,feedback_comment=c)
error = "no"
except:
error="yes"
d = {'error':error}
return render(request,'feedback.html',d)
def view_feedback(request):
if not request.user.is_authenticated:
return redirect('admin_login')
data = Feedback.objects.all()
d = {'data':data}
return render(request,'view_feedback.html',d)
def delete_feedback(request,id):
if not request.user.is_authenticated:
return redirect('admin_login')
feedback = Feedback.objects.get(id=id)
feedback.delete()
return redirect('view_feedback')
def send_parcel(request):
if not request.user.is_authenticated:
return redirect('login')
user = request.user
time = datetime.datetime.today()
error=""
if request.method=='POST':
f=request.POST['fname']
l=request.POST['lname']
e=request.POST['email']
c=request.POST['contact']
pt=request.POST['ptype']
rd=request.POST['rdate']
gi=request.POST['gid']
gn=request.POST['gidn']
w=request.POST['weight']
add=request.POST['address']
try:
ParcelRequest.objects.create(first_name=f,last_name=l,email=e,mobile=c,parc
el_type=pt,request_date=rd,gov_id=gi,gov_no=gn,weight=w,address=add,statu
s="Pending")
error="no"
except:
error="yes"
d={'time':time,'user':user,'error':error}
return render(request,'send_parcel.html',d)
def view_my_parcel(request):
if not request.user.is_authenticated:
return redirect('login')
data = ParcelRequest.objects.all()
d={'data':data}
return render(request,'view_my_parcel.html',d)
def view_parcel_admin(request):
if not request.user.is_authenticated:
return redirect('login')
data = ParcelRequest.objects.all()
data2 = Receiver.objects.all()
d={'data':data,'data2':data2}
return render(request,'view_parcel_admin.html',d)
def change_status(request,id):
if not request.user.is_authenticated:
return redirect('admin_login')
booking=ParcelRequest.objects.get(id=id)
error=""
if request.method == "POST":
rs = request.POST['rstatus']
booking.status = rs
try:
booking.save()
error = "no"
except:
error = "yes"
d = {'booking': booking,'error':error}
return render(request,'change_status.html',d)
def delete_parcel(request,id):
data=ParcelRequest.objects.get(id=id)
data.delete()
return redirect('view_my_parcel')
def sender_detail(request,id):
if not request.user.is_authenticated:
return redirect('login')
pr = ParcelRequest.objects.get(id=id)
w= int(pr.weight)*100
time = datetime.datetime.today()
error=""
if request.method=='POST':
n=request.POST['fname']
c=request.POST['contact']
pin=request.POST['pin_code']
hou=request.POST['house']
city=request.POST['city']
st=request.POST['state']
sd=request.POST['send_date']
pid=444+int(id)
try:
Receiver.objects.create(name=n,contact=c,pin=pin,house=hou,
city=city,state=st,send_date=sd,parcel_id=pid,
parcel_status="Your Parcel is Shipped")
pr.parcel_id=pid
pr.save()
error="no"
except:
error="yes"
d={'time':time,'w':w,'error':error}
return render(request,'sender_detail.html',d)
def check_status_user(request,pid):
if not request.user.is_authenticated:
return redirect('login')
data=Receiver.objects.get(parcel_id=pid)
d={'data':data}
return render(request,'check_status_user.html',d)
def change_track_status(request,pid):
if not request.user.is_authenticated:
return redirect('login')
error=""
time=datetime.datetime.today()
data = Receiver.objects.get(parcel_id=pid)
if request.method=="POST":
sv=request.POST['status_value']
dt=request.POST['date_time']
msg=request.POST['message']
try:
data.parcel_status=sv
data.parcel_date=dt
data.parcel_msg=msg
data.save()
error="no"
except:
error="yes"
d={'data':data,'time':time,'error':error}
return render(request,'change_track_status.html',d)
def visitor_track(request):
error="yes"
try:
if request.method=='POST':
vid=request.POST['vid']
vid=int(vid)
data = Receiver.objects.all()
d={'vid':vid,'data':data}
return render(request,'parsel_location.html',d)
except:
error="no"
d={'error':error}
return render(request,'visitor_track.html',d)
def parsel_location(request):
data=Receiver.objects.all()
d={'data':data}
return render(request,'parsel_location.html',d)
FUTURE ENHANCEMENT OF PARCEL TRACKING SYSTEM
It is still mature and fully enthusiastically. Any requirements, this project is
completed but still, they want to update and modify some modules. We are
always thinking about association requirements also growing day by day.
All the necessary output was created. The system was found to be user-
friendly with a help message for the customer. The menu Driven Architecture
of the system provide an easy-to-use environment for the users.
The system was implemented successfully. The manpower and working hours
needed to operate the system were less and it was seen to be more secure.
Thus, the project was completed successfully.