0% found this document useful (0 votes)
19 views44 pages

Batch16 Project Report

Uploaded by

Jayaram Das
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)
19 views44 pages

Batch16 Project Report

Uploaded by

Jayaram Das
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/ 44

Project Title

A PROJECT REPORT

Submitted by
Student 1 [Reg No:RA221103011800]

Student 2 [Reg No:RA2211003011764]

Student 3 [Reg No:RA2211003011791]

Under the Guidance of


PRAKASH B.
Designation, Department of Computing Technologies

in partial fulfillment of the requirements for the degree of

BACHELOR OF TECHNOLOGY
in
COMPUTER SCIENCE AND ENGINEERING

DEPARTMENT OF COMPUTING TECHNOLOGIES


COLLEGE OF ENGINEERING AND TECHNOLOGY
SRM INSTITUTE OF SCIENCE AND TECHNOLOGY
KATTANKULATHUR– 603 203
MAY 2024
SRM INSTITUTE OF SCIENCE AND TECHNOLOGY
KATTANKULATHUR–603 203

BONAFIDE CERTIFICATE

Register nos. RA2211003011764, RA2211003011791, RA2211003011800

Certified to be the bonafide work “GROCERY STORE MANAGEMENT” done

by Abignael Joseph K.T, Magin K.S, Jayarama Das of II year/IV Sem B.Tech

Degree Course in the Project Course – 21CSC205P Database Management

Systems in SRM INSTITUTE OF SCIENCE AND TECHNOLOGY,

Kattankulathur for the academic year 2023-2024.

Date: 03/05/24

Faculty in Charge HEAD OF THE DEPARTMENT


Dr Prakash B Dr.M.Pushpalatha
Associate Professor Professor & Head
Department of Computing Technologies Department of Computing Technologies
SRMSIT -KTR SRMIST - KTR
ABSTRACT

The Grocery Store Management System (GSMS) represents a comprehensive software solution
aimed at optimizing the operations of a typical grocery store. Built upon modern technologies,
GSMS offers a suite of features encompassing product management, order processing, customer
engagement, and data analysis. At its core, GSMS empowers store owners and managers to
efficiently manage their inventory, process customer orders, and maintain a rich database of
customer information. Through intuitive interfaces and seamless workflows, GSMS enhances
operational efficiency and streamlines day-to-day tasks within the grocery store environment.Key
functionalities include product management, allowing for the addition, modification, and deletion
of products, ensuring accurate and up-to-date inventory records. Furthermore, GSMS facilitates
order processing, enabling swift and accurate order fulfillment while providing insights into sales
trends and customer preferences through robust reporting and analytics tools.The system also
prioritizes customer engagement, offering features for managing customer information, tracking
purchase history, and implementing loyalty programs. This fosters personalized interactions and
targeted marketing strategies, ultimately enhancing customer satisfaction and loyalty.
Technologically, GSMS leverages a modern stack, utilizing Python with Flask for backend
development, MySQL for database management, and HTML/CSS/JavaScript for frontend
interfaces.
TABLE OF CONTENTS

ABSTRACT

Problem Statement

Chapter Chapter Name Page No


No

1. Problem understanding, Identification of Entity and


Relationships, Construction of DB using ER Model for the 4
project
2. Design of Relational Schemas, Creation of Database
Tables for the project.
6
3. Complex queries based on the concepts of constraints,
sets, joins, views, Triggers and Cursors.
9
4. Analyzing the pitfalls, identifying the dependencies, and
applying normalizations 13
5. Implementation of concurrency control and recovery
mechanisms 16
6. Code for the project
20
7. Result and Discussion (Screen shots of the
implementation with front end.
38
8. Attach the Real Time project certificate / Online course
certificate 42
I. PROBLEM UNDERSTANDING, IDENTIFICATION OF ENTITY AND RELATIONSHIPS,

CONSTRUCTION OF DB USING ER MODEL FOR THE PROJECT.

For the Grocery Store Database Management System (GSDMS) project, understanding the
problem involves analyzing the requirements and objectives of managing inventory, sales, and
customer information within a grocery store. The identification of entities involves recognizing
key components such as products, customers, sales transactions, suppliers, and employees.
Relationships between these entities must be established to define how they interact within the
system.

Using an Entity-Relationship (ER) model, the following entities and relationships can be
constructed:

Entities:
1. Product: Represents items available for sale in the store.
2. Customer: Represents individuals who purchase products from the store.
3. Sale: Represents individual transactions where products are sold to customers.
4. Supplier: Represents companies or entities supplying products to the store.
5. Employee: Represents staff members working in the store.

Relationships:
1. Product-Sale: Many-to-many relationship indicating which products are sold in each
transaction.
2. Customer-Sale: One-to-many relationship representing customers making multiple purchases.
3. Supplier-Product: One-to-many relationship indicating which suppliers provide specific
products.

4. Employee-Sale: One-to-many relationship representing employees processing sales


transactions.
Constructing the database involves creating tables for each entity and defining attributes that
describe them, along with establishing appropriate relationships between tables using foreign
keys. The ER model serves as a blueprint for designing the database schema, ensuring efficient
data storage and retrieval to meet the requirements of the GSDMS project.
II. DESIGN OF RELATIONAL SCHEMAS, CREATION OF DATABASE TABLES FOR THE

PROJECT.

To design the relational schemas and create the necessary database tables for the Grocery Store

Management System (GSMS) project, we need to consider the entities and their relationships.

Based on the provided Python code and its functionalities, here is a proposed design:

Entities:

1. Orders:

- Attributes: order_id (Primary Key), customer_name, total, datetime

2. Order_Details:

- Attributes: order_detail_id (Primary Key), order_id (Foreign Key referencing Orders),

product_id (Foreign Key referencing Products), quantity, total_price

3. Products:

- Attributes: product_id (Primary Key), product_name, uom_id (Foreign Key referencing

UOM), price_per_unit

Design Considerations:

- Each order can have multiple order details, representing the products purchased in that order.

- Products are associated with a specific unit of measurement (UOM).


- The price per unit of a product may vary, hence it's stored within the Products table.

Database Table Creation SQL Statements:

1. Orders Table:

sql

CREATE TABLE Orders (

order_id INT AUTO_INCREMENT PRIMARY KEY,

customer_name VARCHAR(255),

total DECIMAL(10, 2),

datetime DATETIME

);

2. Order_Details Table:

sql

CREATE TABLE Order_Details (

order_detail_id INT AUTO_INCREMENT PRIMARY KEY,

order_id INT,

product_id INT,

quantity INT,

total_price DECIMAL(10, 2),

FOREIGN KEY (order_id) REFERENCES Orders(order_id),

FOREIGN KEY (product_id) REFERENCES Products(product_id)

);
3. Products Table:

sql

CREATE TABLE Products (

product_id INT AUTO_INCREMENT PRIMARY KEY,

product_name VARCHAR(255),

uom_id INT,

price_per_unit DECIMAL(10, 2),

FOREIGN KEY (uom_id) REFERENCES UOM(uom_id)

);

4. UOM Table:

sql

CREATE TABLE UOM (

uom_id INT AUTO_INCREMENT PRIMARY KEY,

uom_name VARCHAR(50)

);

These SQL statements define the structure of the database tables needed to implement the GSMS

project. They establish relationships between entities using foreign keys to ensure data integrity

and enable efficient querying of the database. Adjustments can be made based on additional

requirements or specific database management system (DBMS) considerations.


III. COMPLEX QUERIES BASED ON THE CONCEPTS OF CONSTRAINTS, SETS, JOINS,

VIEWS, TRIGGERS AND CURSORS.

1. Constraints:

- Unique Constraint: Ensure that no two orders have the same order number.

sql

ALTER TABLE Orders ADD CONSTRAINT unique_order_number UNIQUE (order_id);

- Check Constraint: Ensure that the total price in the Order_Details table is always positive.

sql

ALTER TABLE Order_Details ADD CONSTRAINT positive_total_price CHECK

(total_price > 0);

2. Sets:

- Union: Retrieve a list of all products along with their prices, including those with zero stock.

sql

(SELECT product_name, price_per_unit FROM Products)

UNION

(SELECT 'Out of Stock', 0);

3. Joins:

- Retrieve a list of orders along with their details (customer name, order date, product name,
quantity, total price).

sql

SELECT o.order_id, o.customer_name, o.datetime, p.product_name, od.quantity,

od.total_price

FROM Orders o

INNER JOIN Order_Details od ON o.order_id = od.order_id

INNER JOIN Products p ON od.product_id = p.product_id;

4. Views:

- Create a view to display the total sales amount for each product.

sql

CREATE VIEW Product_Sales AS

SELECT product_id, SUM(total_price) AS total_sales

FROM Order_Details

GROUP BY product_id;

5. Triggers:

- Create a trigger to automatically update the total price in the Orders table when new order

details are inserted.

sql

CREATE TRIGGER update_total_price

AFTER INSERT ON Order_Details


FOR EACH ROW

BEGIN

UPDATE Orders

SET total = total + NEW.total_price

WHERE order_id = NEW.order_id;

END;

6. *Cursors*:

- Use a cursor to iterate over all orders and calculate the total sales amount.

sql

DECLARE total_sales DECIMAL(10, 2);

DECLARE done INT DEFAULT 0;

DECLARE cur CURSOR FOR SELECT total FROM Orders;

DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = 1;

OPEN cur;

read_loop: LOOP

FETCH cur INTO total_sales;

IF done THEN

LEAVE read_loop;

END IF;

-- Perform calculations or operations with total_sales

END LOOP;
IV. ANALYZING THE PITFALLS, IDENTIFYING THE DEPENDENCIES, AND

APPLYING NORMALIZATIONS

1. Analyzing Pitfalls:

- Data Redundancy: Redundant data can lead to inconsistencies and wasted storage space.

- Update Anomalies: Insertion, deletion, and modification of data may result in inconsistencies

or unintended consequences.

- Dependency Problems: Inadequate normalization can lead to functional dependencies that

may hinder data integrity and flexibility.

2. Identifying Dependencies:

- Functional Dependencies: Determine which attributes depend on others. For example, in

Orders table, customer_name depends on order_id.

- Transitive Dependencies: Identify dependencies where an attribute depends on another

through a non-primary key attribute. For instance, in Products table, price_per_unit may depend

on uom_id.

3. Applying Normalizations:

- First Normal Form (1NF): Ensure that each table has a primary key and atomic attributes. Split

multi-valued attributes into separate columns.

- Second Normal Form (2NF): Remove partial dependencies by ensuring that non-key attributes

depend fully on the primary key. Split tables if necessary.


- Third Normal Form (3NF): Eliminate transitive dependencies by moving non-key attributes

that depend on other non-key attributes to separate tables.

Let's apply these principles to the database schema:

Orders Table:

- Primary Key: order_id

- Attributes: customer_name, total, datetime

Order_Details Table:

- Primary Key: order_detail_id

- Foreign Keys: order_id (references Orders), product_id (references Products)

- Attributes: quantity, total_price

Products Table:

- Primary Key: product_id

- Attributes: product_name, price_per_unit

- Foreign Key: uom_id (references UOM)

UOM Table:

- Primary Key: uom_id

- Attribute: uom_name
Normalization:

1. 1NF: All tables have a primary key, and attributes are atomic.

2. 2NF:

- Orders: No partial dependencies.

- Order_Details: No partial dependencies.

- Products: No partial dependencies.

- UOM: No partial dependencies.

3. 3NF:

- Orders: No transitive dependencies.

- Order_Details: No transitive dependencies.

- Products: No transitive dependencies.

- UOM: No transitive dependencies.

Dependencies:

- Orders depend on Order_Details through the order_id.

- Order_Details depend on Products through the product_id.

- Products depend on UOM through the uom_id.

By applying normalization, we've reduced redundancy, minimized update anomalies, and ensured

that dependencies are appropriately managed, resulting in a more robust and efficient database

schema for the GSMS project.


V. IMPLEMENTATION OF CONCURRENCY CONTROL AND RECOVERY

MECHANISMS

Implementing concurrency control and recovery mechanisms is crucial for ensuring data

consistency and system reliability in a database management system like the Grocery Store

Management System (GSMS).

1. Concurrency Control:

a. Lock-Based Concurrency Control:

- Use locks to control access to shared resources (e.g., database records) and prevent

conflicting operations.

- Implement two-phase locking (2PL) protocol to acquire locks before performing operations

and release them afterward.

- Example Python code for acquiring and releasing locks:

python

import threading

# Global lock

lock = threading.Lock()

# Acquire lock

lock.acquire()

# Perform operations on shared resource (e.g., database)

# Release lock
b. Timestamp-Based Concurrency Control:

- Assign timestamps to transactions to determine their relative order and resolve conflicts.

- Use techniques like Timestamp Ordering or Thomas' Write Rule for concurrency control.

- Example Python code for timestamp-based concurrency control:

python

import time

# Get current timestamp

timestamp = time.time()

2. Recovery Mechanisms:

a. *Write-Ahead Logging (WAL)*:

- Implement a logging mechanism where changes are first recorded in a log before being

applied to the database.

- Ensure that log records are written to stable storage before corresponding data modifications.

- Example Python code for logging changes:

python

def write_ahead_log(transaction_id, operation, data):

# Write log record to file or database

log_file.write(f"{transaction_id}, {operation}, {data}\n")


b. *Checkpointing*:

- Periodically perform checkpoints to save the current state of the database to stable storage.

- Use checkpoints to reduce the time required for recovery after a crash.

- Example Python code for checkpointing:

python

def perform_checkpoint():

# Save current database state to stable storage

# ...

c. *Transaction Rollback and Commit*:

- Implement mechanisms to rollback transactions that have not been committed in case of

failures.

- Ensure that committed transactions are durably stored in the database.

- Example Python code for transaction rollback and commit:

python

def rollback(transaction_id):

# Undo changes made by the transaction

# ...

def commit(transaction_id):

d. *Redo and Undo Operations*:


- Use redo and undo operations during recovery to reapply committed transactions and

rollback uncommitted ones.

- Example Python code for redo and undo operations:

python

def redo(log_record):

# Reapply changes recorded in the log

# ...

def undo(log_record):

# Reverse changes recorded in the log

By implementing these concurrency control and recovery mechanisms, you can ensure data

consistency and system reliability in the GSMS, even in the face of concurrent transactions and

system failures.
VI. CODE FOR THE PROJECT

from sql_connection import get_sql_connection

def get_all_products(connection):

cursor = connection.cursor()

query = ("select products.product_id, products.product_name, products.uom_id,

products.price_per_unit, uom.uom_name from products inner join uom on

products.uom_id=uom.uom_id")

cursor.execute(query)

response = []

for (product_id, product_name, uom_id, price_per_unit, uom_name) in cursor:

response.append({

'product_id': product_id,

'name': product_name,

'uom_id': uom_id,

'price_per_unit': price_per_unit,

'uom_name': uom_name

})

return response

def insert_new_product(connection, product):

cursor = connection.cursor()

query = ("insert into products"


"(product_name, uom_id, price_per_unit)"

"values(%s, %s, %s);")

data = (product['product_name'], product['uom_id'], product['price_per_unit'])

cursor.execute(query,data)

connection.commit()

return cursor.lastrowid

# deletion of products

def delete_product(connection, product_id):

cursor = connection.cursor()

query = "DELETE FROM products where product_id="+str(product_id)

cursor.execute(query)

connection.commit()

return cursor.lastrowid

if _name=='main_':

connection = get_sql_connection()

## for insertion :

# print(insert_new_product(connection, {

# 'product_name': 'cabage',

# 'uom_id':'1',

# 'price_per_unit': '10'

# }))
# for deletion :

# print(delete_product(connection, 9))

from flask import Flask, request, jsonify

from sql_connection import get_sql_connection

import uom_dao

import mysql.connector

import json

import products_dao

import orders_dao

app = Flask(_name_)

connection = get_sql_connection()

@app.route('/getUOM', methods=['GET'])

def get_uom():

response = uom_dao.get_uoms(connection)

response = jsonify(response)

response.headers.add('Access-Control-Allow-Origin', '*')

return response
@app.route('/getProducts', methods=['GET'])

def get_products():

response = products_dao.get_all_products(connection)

response = jsonify(response)

response.headers.add('Access-Control-Allow-Origin', '*')

return response

@app.route('/insertProduct', methods=['POST'])

def insert_product():

request_payload = json.loads(request.form['data'])

product_id = products_dao.insert_new_product(connection, request_payload)

response = jsonify({

'product_id': product_id

})

response.headers.add('Access-Control-Allow-Origin', '*')

return response

@app.route('/getAllOrders', methods=['GET'])

def get_all_orders():

response = orders_dao.get_all_orders(connection)

response = jsonify(response)

response.headers.add('Access-Control-Allow-Origin', '*')

return response
@app.route('/insertOrder', methods=['POST'])

def insert_order():

request_payload = json.loads(request.form['data'])

order_id = orders_dao.insert_order(connection, request_payload)

response = jsonify({

'order_id': order_id

})

response.headers.add('Access-Control-Allow-Origin', '*')

return response

@app.route('/deleteProduct', methods=['POST'])

def delete_product():

return_id = products_dao.delete_product(connection, request.form['product_id'])

response = jsonify({

'product_id': return_id

})

response.headers.add('Access-Control-Allow-Origin', '*')

return response

if _name_ == "_main_":

print("Starting Python Flask Server For Grocery Store Management System")

app.run(port=5002) # if you get internal server error then you can change port number hrere

import datetime
import mysql.connector

__cnx = None

def get_sql_connection():

print("Opening mysql connection")

global __cnx

if __cnx is None:

__cnx = mysql.connector.connect(user='root', password='magin@1404', database='gs',

auth_plugin='mysql_native_password')

return __cnx

def get_uoms(connection):

cursor = connection.cursor()

query = ("SELECT * from uom")

cursor.execute(query)

response = []

for(uom_id, uom_name) in cursor:

response.append({

'uom_id': uom_id,
'uom_name': uom_name

})

return response

if _name== 'main_':

from sql_connection import get_sql_connection

connection = get_sql_connection()

print(get_uoms(connection))

[<!DOCTYPE html>

<html>

<head>

<title> GSMS </title>

<meta charset="utf-8">

<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-

scale=1.0">

<meta name="apple-mobile-web-app-capable" content="yes"/>

<meta name="csrf-token"

content="kmapods5wQ5L1hn7rcR9OPst7EsN0gC7SrHh3m9K"/>

<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/material-design-iconic-

font/2.2.0/css/material-design-iconic-font.min.css">

<link rel="stylesheet"
href="https://fonts.googleapis.com/css?family=Roboto:400,300,600,700">

<link media="all" type="text/css" rel="stylesheet" href="css/bootstrap.min.css">

<link media="all" type="text/css" rel="stylesheet" href="css/style.css?v=…

[07:47, 03/05/2024] Abi: <!DOCTYPE html>

<html>

<head>

<title> GSMS </title>

<meta charset="utf-8">

<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-

scale=1.0">

<meta name="apple-mobile-web-app-capable" content="yes"/>

<meta name="csrf-token" content="kmapods5wQ5L1hn7rcR9OPst7EsN0gC7SrHh3m9K"/>

<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/material-design-iconic-

font/2.2.0/css/material-design-iconic-font.min.css">

<link rel="stylesheet"

href="https://fonts.googleapis.com/css?family=Roboto:400,300,600,700">

<link media="all" type="text/css" rel="stylesheet" href="css/bootstrap.min.css">

<link media="all" type="text/css" rel="stylesheet" href="css/style.css?v=1.0">

<link media="all" type="text/css" rel="stylesheet" href="css/sidebar-menu.css?v=1.0">

<link media="all" type="text/css" rel="stylesheet" href="css/custom.css?v=1.3.3">

</head>

<body class="tooltips">
<div class="container">

<div class="header content rows-content-header">

<button class="button-menu-mobile show-sidebar">

<i class="fa fa-bars"></i>

</button>

<div class="navbar navbar-default" role="navigation">

<div class="container">

<div class="navbar-collapse collapse">

<ul class="nav navbar-nav visible-lg visible-md limit-chars">

<ul class="breadcrumb">

<a href="index.html">

<i class="zmdi zmdi-view-dashboard zmdi-hc-fw" title="Orders"></i>

</a>

<a href="manage-product.html">

<i class="zmdi zmdi-assignment zmdi-hc-fw" title="Products"></i>

</a>

</ul>

</ul>

</div>

</div>
</div>

</div>

<div class="right content-page">

<div class="body content rows scroll-y">

<div class="box-info full" id="taskFormContainer">

<h2>Manage Products</h2>

<div class="panel-body pt-0">

<div class="row mb-4">

<div class="col-sm-12">

<button type="button" class="btn btn-sm btn-primary pull-right" data-

toggle="modal" data-target="#productModal">

Add New Product

</button>

</div>

</div>

<table class="table table-bordered">

<thead>

<th>Name</th>

<th>Unit</th>

<th>Price Per Unit</th>

<th style="width: 150px">Action</th>


</thead>

<tbody>

</tbody>

</table>

</div>

</div>

</div>

</div>

<div class="modal fade-scale" id="productModal" role="dialog" data-backdrop="static">

<div class="modal-dialog ">

<div class="modal-content">

<div class="modal-header">

<h4 class="modal-title">Add New Product</h4>

</div>

<div class="modal-body">

<form id="productForm">

<input type="hidden" name="id" id="id" value="0">

<div class="row">

<div class="col-sm-12">

<div class="form-group">
<label >Name</label>

<input class="form-control" placeholder="Name" name="name"

id="name" type="text" value="">

</div>

</div>

<div class="col-sm-12">

<div class="form-group">

<label >Unit</label>

<select name="uoms" id="uoms" class="form-control">

</select>

</div>

</div>

<div class="col-sm-12">

<div class="form-group">

<label >Price Per Unit</label>

<input class="form-control" placeholder="Price Per Unit" name="price"

id="price" type="text" value="">

</div>

</div>

</div>

</form>

</div>
<div class="modal-footer">

<button type="button" class="btn btn-secondary" data-

dismiss="modal">Close</button>

<button type="button" class="btn btn-primary" id="saveProduct">Save</button>

</div>

</div>

</div>

</div>

</div>

<script src="js/packages/jquery.min.js"></script>

<script src="js/custom/common.js"></script>

<script src="js/custom/manage-product.js"></script>

<script src="js/packages/bootstrap.min.js"></script>

</body>

</html>

<!DOCTYPE html>

<html>

<head>

<title> GSMS </title>

<meta charset="utf-8">

<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-

scale=1.0">
<meta name="apple-mobile-web-app-capable" content="yes"/>

<meta name="csrf-token" content="kmapods5wQ5L1hn7rcR9OPst7EsN0gC7SrHh3m9K"/>

<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/material-design-iconic-

font/2.2.0/css/material-design-iconic-font.min.css">

<link rel="stylesheet"

href="https://fonts.googleapis.com/css?family=Roboto:400,300,600,700">

<link media="all" type="text/css" rel="stylesheet" href="css/bootstrap.min.css">

<link media="all" type="text/css" rel="stylesheet" href="css/style.css?v=1.0">

<link media="all" type="text/css" rel="stylesheet" href="css/custom.css?v=1.3.3">

</head>

<body class="tooltips">

<div class="container">

<div class="header content rows-content-header">

<button class="button-menu-mobile show-sidebar">

<i class="fa fa-bars"></i>

</button>

<div class="navbar navbar-default" role="navigation">

<div class="container">

<div class="navbar-collapse collapse">

<ul class="nav navbar-nav visible-lg visible-md limit-chars">


<ul class="breadcrumb">

<a href="index.html">

<i class="zmdi zmdi-view-dashboard zmdi-hc-fw" data-toggle="tooltip"

data-placement="bottom" title="Dashboard"></i>

</a>

<a href="manage-product.html">

<i class="zmdi zmdi-assignment zmdi-hc-fw" data-toggle="tooltip" data-

placement="bottom" title="Products"></i>

</a>

</ul>

</ul>

</div>

</div>

</div>

</div>

<div class="right content-page">

<div class="body content rows scroll-y">

<form action="">

<div class="box-info full" id="taskFormContainer">

<h2>New Order

<input name="customerName" id="customerName" type="text" class="form-


control" placeholder="Customer Name" style="max-width:230px; float: right;margin-top: -

11px">

</h2>

<div class="row" style="margin-bottom: 5px;margin-top: -10px;">

<div class="col-sm-12">

<div class="col-sm-4">

<label >Product</label>

</div>

<div class="col-sm-3">

<label >Price</label>

</div>

<div class="col-sm-2">

<label >Quantity</label>

</div>

<div class="col-sm-3">

<label >Total</label>

<button class="btn btn-sm btn-primary pull-right" style="margin-top: -5px"

type="button" id="addMoreButton">Add More</button>

</div>

</div>

</div>

</div>
<div class="product-box-extra" id="itemsInOrder">

</div>

<div>

<div class="row">

<div class="col-sm-12">

<div class="box-info full p-3 mb-3 mt-0">

<div class="col-sm-9 text-right">

<span><b>Total</b></span>

</div>

<div class="col-sm-3">

<b><input id="product_grand_total" name="product_grand_total"

class="product-grand-total" value="0.0"></input> Rs</b>

<button class="btn btn-sm btn-primary pull-right" type="button"

id="saveOrder">Save</button>

</div>

</div>

</div>

</div>

</div>
</form>

<div class="product-box hidden">

<div class="row product-item">

<div class="col-sm-12">

<div class="box-info full p-3 mb-3 mt-0">

<div class="col-sm-4">

<select name="product" class="form-control cart-product" style="max-

width: 250px"></select>

</div>

<div class="col-sm-3">

<input id="product_price" name="product_price" class="product-price"

value="0.0"></input>

</div>

<div class="col-sm-2">

<input name="qty" type="number" min="1" placeholder="" class="form-

control product-qty" value="1" style="max-width: 100px">

</div>

<div class="col-sm-3">

<input id="item_total" name="item_total" class="product-

total"></input><span> Rs</span>

<button class="btn btn-sm btn-danger pull-right remove-row"

VII. RESULT AND DISCUSSION (SCREEN SHOTS OF THE IMPLEMENTATION WITH


FRONT END)

Project Summary:

GSMS is a software solution designed to streamline grocery store operations. It offers features

for product, order, and customer management, aiming to enhance efficiency and customer

satisfaction.

Key Features:

1. Product Management: Add, update, and delete products.

2. Order Processing: Create and process customer orders.

3. Customer Management: Store and retrieve customer information.

4. Reporting and Analytics: Gain insights into sales and inventory.

5. Security: Ensure secure access with authentication and authorization.

Technologies Used:

Python with Flask for backend, MySQL for database, HTML/CSS/JavaScript for frontend.

Benefits:

Improved efficiency, accuracy, and customer experience. Data-driven decision-making and

robust security and reliability.

Future Enhancements:
Integration with e-commerce platforms, mobile application development, predictive analytics,

social media integration, and IoT integration.

In summary, GSMS aims to revolutionize grocery store management through technology,

enhancing operations and customer satisfaction.


VIII. ATTACHMENT OF ONLINE COURSE CERTIFICATE

You might also like