Inventrix Report
Inventrix Report
Semester: 6th
PROJECT REPORT
ON
“INVENTORY MANAGEMENT”
Inventory Management
1
ACKNOWLEDGEMENT
This project would not have taken shape, without the guidance provided by Ms Neelam, my
Trainer who helped in the modules of our project and resolved all the technical as well as
other problems related to the project and, for always providing us with a helping hand
whenever we faced any bottlenecks, inspite of being quite busy with their hectic schedules.
Above all we wish to express our heartfelt gratitude to Ms Sakshi Kumar, H.O.D, CSE
DEPARTMENT whose support has greatly boosted our self-confidence and will go a long
way on helping us to reach further milestones and greater heights.
HOD Mentor
Ms Sakshi Kumar Ms. Neelam
Inventory Management
2
ABSTRACT
A
This project presents the design and implementation of an Inventory Management System
tailored to streamline the process of tracking, managing, and organizing inventory within a
business environment. Developed as a comprehensive software solution, the system leverages
core programming concepts and database management techniques to ensure efficient inventory
control and minimal human error. Key features include real-time stock monitoring, automated
low-stock alerts, item categorization, and report generation. The system was developed using
Python and incorporates libraries such as Tkinter for the graphical user interface, SQLite/MySQL
for database management, and Pandas for data manipulation and reporting. By automating critical
inventory tasks, the system not only reduces operational inefficiencies but also provides a
scalable foundation for integration with future technologies such as barcode scanning and cloud-
based inventory systems. This project demonstrates practical applications of software
development, database systems, and user interface design, making it a valuable contribution to
the field of computer science. .
Inventory Management
3
TABLE OF CONTENTS
1. INTRODUCTION 6-9
1.1 Problem Statement
1.4 FeasibilityStudy.
1.4.1 TechnicalFeasibility
1.4.2 EconomicFeasibility
1.4.3 operationalFeasibility
2.1Document Processing
3. SYSTEMANALYSIS 12-14
3.1 User Interface
Inventory Management
4
3.5 Requirements Specification
4. S
YSTEM DESIGN 15-21
6.2 Conclusion
8. REFERENCES 45
Inventory Management
5
1. INTRODUCTION
Inventory management plays a vital role in the smooth operation of any business that deals with
physical goods, whether in retail, manufacturing, or warehousing. Efficient management of
inventory ensures that products are available when needed, helps avoid overstocking or stockouts,
and contributes to better customer satisfaction and cost control. In today’s digital age, manual
inventory tracking methods are increasingly being replaced by automated systems that offer
greater accuracy, real-time data access, and ease of use. This project focuses on developing an
Inventory Management System using Python, aimed at simplifying the tracking of stock levels,
item details, and transactions. The system is designed with a user-friendly interface and a robust
backend to provide a reliable and efficient solution for small to medium-scale inventory
operations. Through this project, core concepts of software engineering, database management,
and user interface design are applied to address real-world business challenges.
1.1 PROBLEMSTATEMENT
Managing inventory manually or through basic spreadsheet tools can lead to a host of
operational challenges, especially as the volume of items and transactions increases.
Common issues include inaccurate stock tracking, delayed updates, misplacement of
items, and inefficient order processing. These problems not only result in financial losses
due to overstocking or stockouts but also affect customer satisfaction and overall business
productivity. Small and medium enterprises, in particular, often lack access to cost-
effective, customizable software solutions that can address their specific inventory
management needs. The absence of an integrated system makes it difficult to maintain
real-time visibility over inventory levels, generate timely reports, or automate routine
tasks like reordering low-stock items. This project aims to solve these challenges by
developing a reliable, user-friendly, and scalable Inventory Management System that
enables businesses to monitor stock efficiently, maintain accurate records, and streamline
their inventory operations.
Inventory Management
6
1.2 OBJECTIVE OF PROPOSED SYSTEM
• To develop an efficient and user-friendly inventory management application that simplifies the
tracking, addition, and removal of stock items in real-time.
• To implement a reliable database system for storing item details, quantities, transaction
records, and supplier information, ensuring data integrity and ease of retrieval.
• To automate key inventory processes such as low-stock alerts, inventory updates after
sales/purchases, and report generation to reduce manual errors and save time.
• To provide scalability and flexibility so that the system can be adapted or extended for various
business types, including retail, warehouse, and office inventory environments.
Before the development of the Inventory Management System, a feasibility study was conducted
to evaluate the practicality and viability of the project. The study considered technical,
operational, and economic factors to ensure successful implementation. Technically, the system is
feasible as it uses readily available tools like Python and SQLite, which are lightweight and
efficient. Operationally, the system meets user requirements with a simple interface and essential
features. Economically, the project is cost-effective, requiring minimal resources and no
expensive third-party tools, making it suitable for small to medium enterprises.
Inventory Management
7
1.5.1 TECHNICAL FEASIBILITY
Technical feasibility determines whether the work for the project can be done with the
existing equipment, software technology and available personnel. Technical feasibility is
concerned with specifying equipment and software that will satisfy the user requirement. This
project is feasible on technical remarks also, as the proposed system is more beneficiary in
terms of having a sound proof system with new technical components installed on the system.
The proposed system can run on any machines supporting Windows and Internet services and
works on the best software and hardware that had been used while designing the system so it
would be feasible in all technical terms of feasibility.
The economic feasibility of the proposed Inventory Management System evaluates whether the
project is financially viable and cost-effective. The goal is to ensure that the benefits of
implementing the system outweigh the development and maintenance costs, particularly for small
and medium-sized businesses.
• Low Development Cost: The system is built using open-source technologies like Python
and SQLite, eliminating the need for costly software licenses.
• Minimal Hardware Requirements: It runs on standard hardware, requiring no
investment in high-end infrastructure.
• Reduced Labor Cost: Automation of inventory tasks minimizes manual effort, reducing
the need for additional staff.
• Long-Term Savings: Improved accuracy and efficiency help avoid losses from stock
mismanagement, saving money over time.
Inventory Management
8
1.5.3 OPERATIONAL FEASIBILITY
Operational feasibility assesses whether the proposed system can function effectively within the
existing business processes and meet user expectations. The Inventory Management System is
designed with a simple and intuitive interface, making it easy for non-technical users to adopt
with minimal training. Its core features—such as real-time stock updates, low-stock alerts, and
report generation—align with the daily operational needs of businesses. The system enhances
workflow efficiency by reducing manual errors and speeding up routine inventory tasks. Overall,
it integrates smoothly into current operations without disrupting existing workflows.
Inventory Management
9
2. LITERATURE REVIEW
The field of inventory management has evolved significantly with the advancement of
information technology. Traditional systems relied heavily on manual record-keeping and
spreadsheets, which were prone to human error, data redundancy, and inefficiency. With the
introduction of computerized systems, businesses have been able to streamline inventory
operations, improve accuracy, and make data-driven decisions.
Traditional inventory management systems were often based on manual tracking or spreadsheets.
These methods, although straightforward, are highly prone to human errors and data
inconsistency, especially as inventory volume grows. Businesses typically used paper-based
ledgers or basic software like Microsoft Excel to track stock levels, orders, and sales. However,
these systems lacked the ability to generate real-time updates or automate critical processes,
leading to inefficiencies such as stockouts, overstocking, and delayed order fulfillment. As
businesses grew, the limitations of these traditional systems became more apparent, necessitating
the shift to computerized solutions.
With the rise of information technology, modern inventory management systems emerged,
providing automated solutions for tracking stock levels, managing orders, and generating reports.
These systems use relational databases to store data and advanced algorithms to predict demand,
optimize stock levels, and automate reordering processes. Examples of modern systems include
Zoho Inventory, Odoo, and SAP Business One, which offer robust features such as barcode
scanning, real-time tracking, cloud integration, and multi-location support. While these solutions
provide comprehensive functionality, they may come with high implementation costs and
complexity, making them less accessible for small to medium-sized enterprises (SMEs).
The transition from manual to automated inventory management has provided significant benefits
to businesses. Automated systems improve accuracy by minimizing human error in stock entry
and calculation. They also enhance operational efficiency by streamlining tasks such as order
processing, stock tracking, and report generation. Research indicates that businesses that adopt
automated inventory systems experience reduced stockouts, better cash flow management, and
optimized inventory turnover. Moreover, automated systems enable businesses to make data-
driven decisions, allowing for smarter stock purchasing and demand forecasting.
Inventory Management
10
2.4. Challenges in Existing Inventory Management Systems
Despite the advantages, existing inventory management solutions, particularly those targeting
larger enterprises, often have shortcomings when tailored for SMEs. One common challenge is
the high cost of enterprise-level software and the associated maintenance fees. Many of these
systems are also feature-heavy, offering more functionality than what is needed for smaller-scale
businesses. Additionally, the complexity of these systems often requires specialized training,
which may not be practical for businesses with limited technical expertise. Furthermore, many
off-the-shelf solutions lack customization options to meet the specific needs of different business
models, making them less flexible and harder to integrate with existing business processes.
Inventory Management
11
3. . SYSTEM ANALYSIS
3.1 USERINTERFACE
● Front-end software: Python with Tkinter and PIL library
3.2 HARDWAREREQUIREMENTS
● Intel i3 or higher
● 8 GB RAM
3.3 SOFTWAREREQUIREMENTS
Following are the software used for Inventory Management:
● Python
● DB Browser
Inventory Management
12
3.5 Data Flow Diagram (DFD)
It is a directed graph where nodes represent processing activity and are represent data items
transmitted between processing nodes.
13
3.7.1 SAFETY REQUIREMENTS
If there is extensive damage to a wide portion of the database due to catastrophic failure, such
as a disk crash, the recovery method restores a past copy of the database that was backed up
to archival storage (typically tape) and reconstructs a more current state by reapplying or
redoing the operations of committed transactions from the backed up log, up to the time of
failure.
Inventory Management
14
4. SYSTEM DESIGN
System design is a critical phase in the development of the Inventory Management System,
serving as the blueprint for how the system's components interact to meet user and functional
requirements. The design process involves structuring the system into well-defined modules such
as stock management, user management, reporting, and database operations. A layered
architecture is followed, separating the user interface, business logic, and data access layers to
promote modularity and maintainability. Tools like Data Flow Diagrams (DFDs) and Entity-
Relationship (ER) diagrams are used to visualize data movement and storage relationships. The
user interface is designed for simplicity and ease of navigation, while the backend is structured
for efficiency and scalability.
The system follows a three-tier architecture comprising the presentation layer (UI), the
application layer (business logic), and the data layer (database). This layered approach ensures
separation of concerns, making the system more maintainable and scalable. The presentation
layer, built using a graphical interface (e.g., Tkinter), interacts with users, while the application
layer processes user input and enforces rules. The data layer handles storage and retrieval of
inventory data using SQLite or MySQL. This architecture facilitates smooth data flow and
enables future integration with cloud or web-based platforms. The proposed Inventory
Management System follows a Three-Tier Architecture, which separates the application into
three distinct layers to enhance scalability, maintainability, and modularity.
15
4.2 SYSTEM MODULES
The Inventory Management System is divided into several functional modules to ensure a
modular and organized design. The Item Management Module allows users to add, update,
delete, and view product details, ensuring accurate stock tracking. The Supplier Management
Module maintains records of suppliers and links them to the products they provide. The
Transaction Module handles stock-in and stock-out activities, logging each inventory movement
with timestamps. The User Management Module controls access levels, ensuring that only
authorized users can perform certain actions. Lastly, the Report Generation Module provides
summary reports such as current stock levels, low-stock items, and transaction history, supporting
informed decision-making. Together, these modules work cohesively to streamline and automate
inventory operations.
Inventory Management
16
4.2.1 Employee Module
The Employee Module is designed to manage the personnel who interact with the inventory
system. It includes features for adding, editing, viewing, and deleting employee records. Each
employee is assigned a unique ID, along with details such as name, role, contact information, and
login credentials. Role-based access control is a central part of this module, allowing
administrators to assign different access levels based on an employee’s responsibilities. For
example, administrators may have full access to all modules, while sales personnel may be
limited to the sales and product view sections. This ensures data integrity and security by
preventing unauthorized access to sensitive operations. In addition, employee activity logs can be
maintained to track actions performed within the system, providing accountability and
transparency.
Inventory Management
17
4.2.2 Supplier Module
The Supplier Module manages all data related to suppliers who provide inventory items to the
business. This module stores essential supplier details including supplier name, contact number,
email, address, and a list of associated products. Each product in the inventory is linked to its
respective supplier, allowing users to easily identify where items originate from and streamline
the reordering process. The module supports searching and filtering suppliers based on location,
product type, or rating. It also helps in generating supplier-specific purchase reports, managing
payment terms, and tracking order histories. This organized supplier information is crucial for
maintaining good vendor relationships and ensuring timely stock replenishment.
Inventory Management
18
4.2.3 Category Module
The Category Module is used to classify and group products into logical and manageable
categories. This classification system allows users to efficiently organize the inventory, making it
easier to search, manage, and report on items. Each category can be defined with a unique name
and description, and multiple products can be assigned to a single category. Examples include
categories like "Electronics," "Stationery," "Furniture," or "Food Items." Categorizing products
also aids in generating inventory reports by category, tracking stock movements within each
group, and identifying which categories contribute most to sales or stock usage. This module
plays a key role in improving the usability and scalability of the system, especially as the
inventory grows larger.
Inventory Management
19
4.2.4 Product Module
The Product Module is the heart of the Inventory Management System, responsible for the
complete management of inventory items. It handles the creation, updating, and deletion of
product records. Each product entry includes attributes such as product ID, name, category,
supplier, purchase price, selling price, quantity in stock, reorder level, and SKU (stock-keeping
unit) or barcode. The module ensures real-time inventory tracking—any addition, sale, or
removal of items updates stock quantities instantly. It also generates alerts when stock levels fall
below the predefined threshold, helping prevent stockouts. Products can be searched by name, ID,
category, or supplier, and filtered based on availability. The product module works in sync with
the sales and supplier modules to keep inventory data accurate and up to date at all times.
Inventory Management
20
4.2.5 Sales Module
The Sales Module is designed to handle and record all sales transactions conducted through the
system. It enables staff to create new sales entries by selecting products, inputting quantities, and
finalizing transactions with applicable taxes and discounts. Upon completing a sale, the system
automatically updates the product stock, ensuring that inventory levels reflect real-time usage.
This module can generate printed receipts or digital invoices, log the date and time of each sale,
and associate it with the employee who performed the transaction. Additionally, the sales module
supports reporting features such as daily sales summaries, product-wise sales analysis, and
monthly revenue tracking. These insights help businesses monitor performance, identify best-
selling products, and make informed decisions regarding pricing and inventory planning.
Inventory Management
21
5. Database Design
Database design is a foundational aspect of the Inventory Management System, as it determines
how data is stored, accessed, and managed efficiently. The system uses a relational database
model (such as SQLite or MySQL), which ensures data integrity, eliminates redundancy, and
facilitates quick retrieval. The design begins with the identification of key entities such as
Employees, Suppliers, Categories, Products, and Sales, each represented as a separate table.
These tables are connected through primary and foreign key relationships to maintain
referential integrity. For instance, the Products table includes foreign keys linking to both the
Category and Supplier tables, allowing easy classification and sourcing. Each table is
normalized to at least the third normal form (3NF) to eliminate data duplication and ensure
consistency. Indexing is used on frequently searched fields like product IDs and category names
to optimize performance. The database also supports transaction logging, enabling the system to
keep a record of stock movements, sales, and user actions, which aids in generating accurate
reports and audits. Overall, the database design emphasizes scalability, reliability, and efficient
data handling to meet the operational needs of the system.
The system uses a relational database schema to model the various entities involved in inventory
management. The schema consists of key entities such as Employees, Suppliers, Categories,
Products, and Sales. Each entity is represented as a separate table, with defined attributes
(columns), primary keys for uniqueness, and foreign keys for establishing relationships. The
schema is designed to follow Third Normal Form (3NF) to eliminate data redundancy and
ensure referential integrity.
The schema provides a modular structure where tables can be easily maintained, updated, or
extended without disrupting the entire database, which is critical for long-term scalability and
performance.
Below are the core tables and a brief explanation of their structures:
Employees Table
Suppliers Table
Inventory Management
22
• Stores supplier information and supports product-supplier linkage.
Categories Table
Products Table
Sales Table
Each table is equipped with appropriate data types and constraints (e.g., NOT NULL, UNIQUE,
DEFAULT) to ensure data validation and consistency.
Inventory Management
23
5.3. Relationships Among Entities
The database tables are interconnected using foreign key constraints, which enable complex
queries and maintain referential integrity across the system:
Inventory Management
24
6. SYSTEM IMPLEMENTATION
#title=====
self.icon_title=PhotoImage(file="images/[Link]")
title=Label([Link],text="InvenTrix",image=self.icon_title,compound=LEFT,font=(
"times new
roman",40,"bold"),bg="#010c48",fg="white",anchor="w",padx=20).place(x=0,y=0,relwi
dth=1,height=70)
#button==logout===
btn_logout=Button([Link],text="Logout",font=("times new
roman",15,"bold"),bg="yellow",cursor="hand2").place(x=1250,y=10,height=50,width=1
50)
#clock====
self.lbl_clock=Label([Link],text="Welcome to InvenTrix\t\t Date: DD-
MM-YYYY\t\t Time: HH:MM:SS",font=("times new roman",15),bg="#4d636d",fg="white")
self.lbl_clock.place(x=0,y=70,relwidth=1,height=30)
#====Left Menu===
Inventory Management
25
[Link]=[Link]("images/menu_im.png")
[Link]=[Link]((200,200),[Link])
[Link]=[Link]([Link])
LeftMenu=Frame([Link],bd=2,relief=RIDGE,bg="white")
[Link](x=0,y=102,width=200,height=580)
lbl_menuLogo=Label(LeftMenu,image=[Link])
lbl_menuLogo.pack(side=TOP,fill=X)
self.icon_side=PhotoImage(file="images/[Link]")
lbl_menu=Label(LeftMenu,text="Menu",font=("times new
roman",20),bg="#009688").pack(side=TOP,fill=X)
btn_employee=Button(LeftMenu,text="Employee",command=[Link],image=[Link]
n_side,compound=LEFT,padx=5,anchor="w",font=("times new
roman",20,"bold"),bg="white",bd=3,cursor="hand2").pack(side=TOP,fill=X)
btn_supplier=Button(LeftMenu,text="Supplier",command=[Link],image=[Link]
n_side,compound=LEFT,padx=5,anchor="w",font=("times new
roman",20,"bold"),bg="white",bd=3,cursor="hand2").pack(side=TOP,fill=X)
btn_category=Button(LeftMenu,text="Category",command=[Link],image=[Link]
n_side,compound=LEFT,padx=5,anchor="w",font=("times new
roman",20,"bold"),bg="white",bd=3,cursor="hand2").pack(side=TOP,fill=X)
btn_product=Button(LeftMenu,text="Product",command=[Link],image=self.icon_s
ide,compound=LEFT,padx=5,anchor="w",font=("times new
roman",20,"bold"),bg="white",bd=3,cursor="hand2").pack(side=TOP,fill=X)
btn_sales=Button(LeftMenu,text="Sales",command=[Link],image=self.icon_side,co
mpound=LEFT,padx=5,anchor="w",font=("times new
roman",20,"bold"),bg="white",bd=3,cursor="hand2").pack(side=TOP,fill=X)
btn_exit=Button(LeftMenu,text="Exit",image=self.icon_side,compound=LEFT,padx=5,an
chor="w",font=("times new
roman",20,"bold"),bg="white",bd=3,cursor="hand2").pack(side=TOP,fill=X)
#content===
Inventory Management
26
self.lbl_employee=Label([Link],text="Total Employee\n[ 0
]",bd=5,relief=RIDGE,bg="#33bbf9",fg="white",font=("goudy old style",20,"bold"))
self.lbl_employee.place(x=300,y=120,height=150,width=300)
self.lbl_supplier=Label([Link],text="Total Supplier\n[ 0
]",bd=5,relief=RIDGE,bg="#ff5722",fg="white",font=("goudy old style",20,"bold"))
self.lbl_supplier.place(x=650,y=120,height=150,width=300)
self.lbl_category=Label([Link],text="Total Category\n[ 0
]",bd=5,relief=RIDGE,bg="#009688",fg="white",font=("goudy old style",20,"bold"))
self.lbl_category.place(x=1000,y=120,height=150,width=300)
self.lbl_product=Label([Link],text="Total Product\n[ 0
]",bd=5,relief=RIDGE,bg="#607d8b",fg="white",font=("goudy old style",20,"bold"))
self.lbl_product.place(x=300,y=300,height=150,width=300)
self.lbl_sales=Label([Link],text="Total Sales\n[ 0
]",bd=5,relief=RIDGE,bg="#ffc107",fg="white",font=("goudy old style",20,"bold"))
self.lbl_sales.place(x=650,y=300,height=150,width=300)
#footer====
lbl_footer=Label([Link],text="InvenTrix- Inventory Management System
| Developed By- Ritik Bisla\nThe Complete Solution For Inventory
Records",font=("times new
roman",12),bg="#4d636d",fg="white").pack(side=BOTTOM,fill=X)
#=====Employee interact
def employee(self):
self.new_win=Toplevel([Link])
self.new_obj=employeeClass(self.new_win)
#=====Supplier interact
def supplier(self):
self.new_win=Toplevel([Link])
self.new_obj=supplierClass(self.new_win)
#=====Category interact
def category(self):
self.new_win=Toplevel([Link])
self.new_obj=categoryClass(self.new_win)
#=====Product interact
Inventory Management
27
def product(self):
self.new_win=Toplevel([Link])
self.new_obj=productClass(self.new_win)
#=====Sales interact
def sales(self):
self.new_win=Toplevel([Link])
self.new_obj=salesClass(self.new_win)
if __name__=="__main__":
root=Tk()
obj=IMS(root)
[Link]()
Inventory Management
28
1.2 Database Link Coding
import sqlite3
def create_db():
con=[Link](database=r'[Link]')
cur=[Link]()
[Link]("CREATE TABLE IF NOT EXISTS employee(eid INTEGER PRIMARY KEY
AUTOINCREMENT,name text,email text,gender text,contact text,dob text,doj
text,pass text,utype text,address text,salary text)")
[Link]()
create_db()
Inventory Management
29
6.2 Sales Module Coding
self.bill_list=[]
self.var_invoice=StringVar()
#----Title==========
lbl_title=Label([Link],text="View Customer Bills",font=("goudy old
style",30),bg="#184a45",fg="white",bd=3,relief=RIDGE).pack(side=TOP,fill=X,padx=1
0,pady=20)
txt_invoice=Entry([Link],textvariable=self.var_invoice,font=("times
new roman",15),bg="lightyellow").place(x=160,y=100,width=180,height=28)
btn_search=Button([Link],text="Search",command=[Link],font=("times new
roman",15,"bold"),bg="#2196f3",fg="white",cursor="hand2").place(x=360,y=100,width
=120,height=28)
btn_clear=Button([Link],text="Clear",command=[Link],font=("times
new
roman",15,"bold"),bg="lightgray",cursor="hand2").place(x=490,y=100,width=120,heig
ht=28)
#Bill List======
sales_Frame=Frame([Link],bd=3,relief=RIDGE)
sales_Frame.place(x=50,y=140,width=200,height=330)
Inventory Management
30
scrolly=Scrollbar(sales_Frame,orient=VERTICAL)
self.Sales_List=Listbox(sales_Frame,font=("goudy old
style",15),bg="white",yscrollcommand=[Link])
[Link](side=RIGHT,fill=Y)
[Link](command=self.Sales_List.yview)
self.Sales_List.pack(fill=BOTH,expand=1)
self.Sales_List.bind("<ButtonRelease-1>",self.get_data)
#Bill Area=======
bill_Frame=Frame([Link],bd=3,relief=RIDGE)
bill_Frame.place(x=280,y=140,width=410,height=330)
scrolly2=Scrollbar(bill_Frame,orient=VERTICAL)
self.bill_area=Text(bill_Frame,font=("goudy old
style",15),bg="lightyellow",yscrollcommand=[Link])
[Link](side=RIGHT,fill=Y)
[Link](command=self.bill_area.yview)
self.bill_area.pack(fill=BOTH,expand=1)
#==Image=======
self.bill_photo=[Link]("images/[Link]")
self.bill_photo=self.bill_photo.resize((450,300),[Link])
self.bill_photo=[Link](self.bill_photo)
lbl_image=Label([Link],image=self.bill_photo,bd=0)
lbl_image.place(x=700,y=110)
[Link]()
#=====================
def show(self):
del self.bill_list[:]
self.Sales_List.delete(0,END)
# print([Link]('bill'))
for i in [Link]('bill'):
if [Link]('.')[-1]=='txt':
self.Sales_List.insert(END,i)
self.bill_list.append([Link]('.')[0])
def get_data(self,ev):
index_=self.Sales_List.curselection()
Inventory Management
31
file_name=self.Sales_List.get(index_)
#print(file_name)
self.bill_area.delete('1.0',END)
fp=open(f'bill/{file_name}','r')
for i in fp:
self.bill_area.insert(END,i)
[Link]()
def search(self):
if self.var_invoice.get()=="":
[Link]("Error","Invoice no. should be
required",parent=[Link])
else:
if self.var_invoice.get() in self.bill_list:
fp=open(f'bill/{self.var_invoice.get()}.txt','r')
self.bill_area.delete('1.0',END)
for i in fp:
self.bill_area.insert(END,i)
[Link]()
else:
[Link]("Error","Invalid Invoice
No.",parent=[Link])
def clear(self):
[Link]()
self.bill_area.delete('1.0',END)
if __name__=="__main__":
root=Tk()
obj=salesClass(root)
[Link]()
Inventory Management
32
6.3. Category Module Coding
#=======variables=======
self.var_cat_id=StringVar()
self.var_name=StringVar()
#========Title=======
lbl_title=Label([Link],text="Manage Product Category",font=("goudy old
style",30),bg="#184a45",fg="white",bd=3,relief=RIDGE).pack(side=TOP,fill=X,padx=1
0,pady=20)
lbl_name=Label([Link],text="Enter Category Name",font=("goudy old
style",30),bg="white").place(x=50,y=100)
txt_name=Entry([Link],textvariable=self.var_name,font=("goudy old
style",18),bg="lightyellow").place(x=50,y=170,width=300)
#=====button
btn_add=Button([Link],text="ADD",command=[Link],font=("goudy old
style",18),bg="#4caf50",fg="white",cursor="hand2").place(x=360,y=170,width=150,he
ight=30)
btn_add=Button([Link],text="DELETE",command=[Link],font=("goudy
old
style",18),bg="red",fg="white",cursor="hand2").place(x=520,y=170,width=150,height
=30)
#=====Category Details====
cat_frame=Frame([Link],bd=3,relief=RIDGE)
cat_frame.place(x=700,y=100,width=380,height=100)
scrolly=Scrollbar(cat_frame,orient=VERTICAL)
Inventory Management
33
scrollx=Scrollbar(cat_frame,orient=HORIZONTAL)
self.category_table=[Link](cat_frame,columns=("cid","name"),yscrollcommand=
[Link],xscrollcommand=[Link])
[Link](side=BOTTOM,fill=X)
[Link](side=RIGHT,fill=Y)
[Link](command=self.category_table.xview)
[Link](command=self.category_table.yview)
self.category_table.heading("cid",text="C ID")
self.category_table.heading("name",text="Name")
self.category_table["show"]="headings"
self.category_table.column("cid",width=90)
self.category_table.column("name",width=100)
self.category_table.pack(fill=BOTH,expand=1)
self.category_table.bind("<ButtonRelease-1>",self.get_data)
#======images====
self.im1=[Link]("images/[Link]")
self.im1=[Link]((500,250),[Link])
self.im1=[Link](self.im1)
self.lbl_im1=Label([Link],image=self.im1,bd=2,relief=RAISED)
self.lbl_im1.place(x=50,y=220)
self.im2=[Link]("images/[Link]")
self.im2=[Link]((500,250),[Link])
self.im2=[Link](self.im2)
self.lbl_im2=Label([Link],image=self.im2,bd=2,relief=RAISED)
self.lbl_im2.place(x=580,y=220)
[Link]()
def add(self):
con=[Link](database=r'[Link]')
cur=[Link]()
try:
Inventory Management
34
if self.var_name.get()=="":
[Link]("Error","Category Name should be
required",parent=[Link])
else:
[Link]("Select * from category where
name=?",(self.var_name.get(),))
row=[Link]()
if row!=None:
[Link]("Error","Category already present, try
different",parent=[Link])
else:
[Link]("Insert into category (name)
values(?)",(self.var_name.get(),))
[Link]()
[Link]("Success","Category Added
Successfully",parent=[Link])
[Link]()
def show(self):
con=[Link](database=r'[Link]')
cur=[Link]()
try:
[Link]("select * from category")
rows=[Link]()
self.category_table.delete(*self.category_table.get_children())
for row in rows:
self.category_table.insert('',END,values=row)
def get_data(self,ev):
f=self.category_table.focus()
content=(self.category_table.item(f))
row=content['values']
#print(row)
self.var_cat_id.set(row[0])
self.var_name.set(row[1])
Inventory Management
35
def delete(self):
con=[Link](database=r'[Link]')
cur=[Link]()
try:
if self.var_cat_id.get()=="":
[Link]("Error","Please select Category from the
list",parent=[Link])
else:
[Link]("Select * from category where
cid=?",(self.var_cat_id.get(),))
row=[Link]()
if row==None:
[Link]("Error","Please try
again",parent=[Link])
else:
op=[Link]("Confirm","Do you really want to
delete?",parent=[Link])
if op==True:
[Link]("delete from category where
cid=?",(self.var_cat_id.get(),))
[Link]()
[Link]("Delete","Category Deleted
Successfully",parent=[Link])
[Link]()
self.var_cat_id.set("")
self.var_name.set("")
if __name__=="__main__":
root=Tk()
obj=categoryClass(root)
[Link]()
Inventory Management
36
6.3. Supplier Module Coding
#==All Variables===
self.var_searchby=StringVar()
self.var_searchtxt=StringVar()
self.var_sup_invoice=StringVar()
self.var_name=StringVar()
self.var_contact=StringVar()
#search frame=====
#SearchFrame=LabelFrame([Link],text="Search Employee",font=("goudy old
style",12,"bold"),bd=2,relief=RIDGE,bg="white")
#[Link](x=250,y=20,width=600,height=70)
#==Options===
lbl_search=Label([Link],text="Invoice No.",bg="white",font=("times new
roman",15))
lbl_search.place(x=700,y=80)
txt_search=Entry([Link],textvariable=self.var_searchtxt,font=("goudy
old style",15),bg="lightyellow").place(x=800,y=80,width=160)
btn_search=Button([Link],text="Search",command=[Link],font=("goudy old
style",15),bg="#4caf50",fg="white",cursor="hand2").place(x=980,y=79,width=100,hei
ght=28)
#==title====
Inventory Management
37
title=Label([Link],text="Supplier Details",font=("goudy old
style",20,"bold"),bg="#0f4d7d",fg="white").place(x=50,y=10,width=1000,height=40)
#content===
#row 1===============
lbl_supplier_invoice=Label([Link],text="Invoice No.",font=("goudy old
style",15),bg="white").place(x=50,y=80)
txt_supplier_invoice=Entry([Link],textvariable=self.var_sup_invoice,font=("gou
dy old style",15),bg="lightyellow").place(x=180,y=80,width=180)
#row 2======================
lbl_name=Label([Link],text="Name",font=("goudy old
style",15),bg="white").place(x=50,y=120)
txt_name=Entry([Link],textvariable=self.var_name,font=("goudy old
style",15),bg="lightyellow").place(x=180,y=120,width=180)
#row 3======================
lbl_contact=Label([Link],text="Contact",font=("goudy old
style",15),bg="white").place(x=50,y=160)
txt_contact=Entry([Link],textvariable=self.var_contact,font=("goudy
old style",15),bg="lightyellow").place(x=180,y=160,width=180)
#row 4======================
lbl_desc=Label([Link],text="Description",font=("goudy old
style",15),bg="white").place(x=50,y=200)
self.txt_desc=Text([Link],font=("goudy old
style",15),bg="lightyellow")
self.txt_desc.place(x=180,y=200,width=470,height=120)
#Buttons=========
btn_add=Button([Link],text="Save",command=[Link],font=("goudy old
style",15),bg="#2196f3",fg="white",cursor="hand2").place(x=180,y=370,width=110,he
ight=35)
btn_update=Button([Link],text="Update",command=[Link],font=("goudy old
style",15),bg="#4caf50",fg="white",cursor="hand2").place(x=300,y=370,width=110,he
ight=35)
Inventory Management
38
btn_delete=Button([Link],text="Delete",command=[Link],font=("goudy old
style",15),bg="#f44336",fg="white",cursor="hand2").place(x=420,y=370,width=110,he
ight=35)
btn_clear=Button([Link],text="Clear",command=[Link],font=("goudy
old
style",15),bg="#607d8b",fg="white",cursor="hand2").place(x=540,y=370,width=110,he
ight=35)
#==Employee Details====
emp_frame=Frame([Link],bd=3,relief=RIDGE)
emp_frame.place(x=700,y=120,width=380,height=350)
scrolly=Scrollbar(emp_frame,orient=VERTICAL)
scrollx=Scrollbar(emp_frame,orient=HORIZONTAL)
[Link]=[Link](emp_frame,columns=("invoice","name","contact","de
sc"),yscrollcommand=[Link],xscrollcommand=[Link])
[Link](side=BOTTOM,fill=X)
[Link](side=RIGHT,fill=Y)
[Link](command=[Link])
[Link](command=[Link])
[Link]("invoice",text="Invoice No.")
[Link]("name",text="Name")
[Link]("contact",text="Contact")
[Link]("desc",text="Description")
[Link]["show"]="headings"
[Link]("invoice",width=90)
[Link]("name",width=100)
[Link]("contact",width=100)
[Link]("desc",width=100)
[Link](fill=BOTH,expand=1)
[Link]("<ButtonRelease-1>",self.get_data)
[Link]()
#====------------------------------------------=====================-------------
-----------===========================
def add(self):
Inventory Management
39
con=[Link](database=r'[Link]')
cur=[Link]()
try:
if self.var_sup_invoice.get()=="":
[Link]("Error","Invoice must be
required",parent=[Link])
else:
[Link]("Select * from supplier where
invoice=?",(self.var_sup_invoice.get(),))
row=[Link]()
if row!=None:
[Link]("Error","Invoice no. already assigned,
try different",parent=[Link])
else:
[Link]("Insert into supplier (invoice,name,contact,desc)
values(?,?,?,?)",(
self.var_sup_invoice.get(),
self.var_name.get(),
self.var_contact.get(),
self.txt_desc.get('1.0',END),
))
[Link]()
[Link]("Success","Supplier Added
Successfully",parent=[Link])
[Link]()
def show(self):
con=[Link](database=r'[Link]')
cur=[Link]()
try:
[Link]("select * from supplier")
rows=[Link]()
[Link](*[Link].get_children())
for row in rows:
[Link]('',END,values=row)
Inventory Management
40
[Link]("Error",f"Error due to :
{str(ex)}",parent=[Link])
def get_data(self,ev):
f=[Link]()
content=([Link](f))
row=content['values']
#print(row)
self.var_sup_invoice.set(row[0])
self.var_name.set(row[1])
self.var_contact.set(row[2])
self.txt_desc.delete('1.0',END)
self.txt_desc.insert(END,row[3])
def update(self):
con=[Link](database=r'[Link]')
cur=[Link]()
try:
if self.var_sup_invoice.get()=="":
[Link]("Error","Invoice no. must be
required",parent=[Link])
else:
[Link]("Select * from supplier where
invoice=?",(self.var_sup_invoice.get(),))
row=[Link]()
if row==None:
[Link]("Error","Invalid Invoice
no.",parent=[Link])
else:
[Link]("Update supplier set name=?,contact=?,desc=?
where invoice=?",(
self.var_name.get(),
self.var_contact.get(),
self.txt_desc.get('1.0',END),
self.var_sup_invoice.get(),
))
[Link]()
Inventory Management
41
[Link]("Success","Supplier Updated
Successfully",parent=[Link])
[Link]()
[Link]()
Inventory Management
42
self.var_sup_invoice.set("")
self.var_name.set("")
self.var_contact.set("")
self.txt_desc.delete('1.0',END)
self.var_searchtxt.set("")
[Link]()
else:
[Link]("select * from supplier where
invoice=?",(self.var_searchtxt.get(),))
row=[Link]()
if row!=None:
[Link](*[Link].get_children())
[Link]('',END,values=row)
else:
[Link]("Error","No Record
Found!!!",parent=[Link])
except Exception as ex:
[Link]("Error",f"Error due to :
{str(ex)}",parent=[Link])
if __name__=="__main__":
root=Tk()
obj=supplierClass(root)
[Link]()
Inventory Management
43
7. SUMMARY AND CONCLUSIONS
7.2 CONCLUSION
The Inventory Management System provides an efficient solution for managing products,
suppliers, sales, and employees in a structured and user-friendly manner. By automating stock
tracking and transaction logging, it reduces manual errors and improves operational efficiency.
Developed using Python and SQLite, the system is lightweight, reliable, and suitable for small
to medium businesses. Though it has some limitations, it lays a strong foundation for future
enhancements and scalability.
7.3 FutureEnhancement
To improve the system’s capabilities and scalability, several enhancements can be considered
in future versions. Integration with barcode scanners and RFID technology can automate
product identification and inventory updates. Migrating the database from SQLite to a more
robust system like PostgreSQL or MySQL can support multi-user access and handle larger
datasets. Adding a web-based or mobile interface would enable remote access and real-time
monitoring of inventory from any location. Features like advanced analytics, graphical
dashboards, and automated reorder notifications can further assist in decision-making and
improve overall usability. Implementing role-based dashboards and audit logs would also
enhance security and accountability within the system.
Inventory Management
44
8. REFERENCES
References:
1• Silberschatz, A., Korth, H. F., & Sudarshan, S. (2010). Database System Concepts (6th
ed.). McGraw-Hill Education.
– Used for understanding relational database design, normalization, and entity relationships.
5• W3Schools – [Link]
– Referred for SQL queries and understanding CRUD operations with SQLite.
6• GeeksforGeeks – [Link]
– Utilized for code snippets, programming logic, and implementation strategies in Python and
SQLite.
Inventory Management
45