Inventory Management with JSON in Python

15 Feb, 2022
The Inventory Management system is used to manage store products and keep track of all goods stock and also we can use it to check the purchases history of the store. Basically, we are developing a system to manage/automate some processes of any retail store by using the computer. So by using this system we can keep record data of products and even all purchases happened in-store.
So here we are going to develop an inventory management system using python and for storing data we are going to use JSON files. First of all, we will create sample data by using python code itself and then developing all functions one by one.
We have to open JSON files on each function and loading JSON data in python dictionary format and again reverse the process of converting dictionary data back to JSON format then closing the file.
Let’s generate data in a Python dictionary.
Python3
import json # Creating Dictionary to store dataavailable_products = {1001: {"name": "avocado", "price": 230,                             "category": "grocery",                             "quantity": 10, "date": "10/03/2021"},                      1002: {"name": "lotion", "price": 250,                             "category": "beauty & personal",                             "quantity": 100,                             "date": "15/07/2021"},                      1003: {"name": "pain reliever", "price": 500,                             "category": "health",                             "quantity": 200, "date": "12/04/2021"},                      1004: {"name": "dry pasta", "price": 20,                             "category": "grocery",                             "quantity": 50, "date": "27/06/2021"},                      1005: {"name": "toothbrush", "price": 700,                             "category": "beauty & personal",                             "quantity": 100,                             "date": "30/01/2021"},                      1006: {"name": "halloween candy", "price": 33,                             "category": "grocery",                             "quantity": 56, "date": "22/02/2021"},                      1007: {"name": "mascara", "price": 765,                             "category": "beauty & personal",                             "quantity": 70,                             "date": "11/03/2021"},                      1008: {"name": "capsicum", "price": 764,                             "category": "grocery",                             "quantity": 90, "date": "16/02/2021"},                      1009: {"name": "blush", "price": 87,                             "category": "beauty & personal",                             "quantity": 50, "date": "17/07/2021"},                      1010: {"name": "granola bars", "price": 24,                             "category": "grocery", "quantity": 60,                             "date": "20/05/2021"},                      } # Formatting Dictionary into JSON formatjs = json.dumps(available_products)''' json.dumps() function converts a Python object into a json string '''js  # so we got all data in json string format here # Create Jason File for DataBase and Write data Into Filefd = open("data.json", 'w') fd.write(js)  # writing string into filefd.close()  # Close File After Inserting Data
So we have created data for our inventory management system now we have to create functions to access this data and process various functionalities on it.
Admin Level Functionality. (used for Administrator of the system to operate)
User Level Functionality. (will be used by Customers)
Basically, This is just for managing the Inventory for a person having extra permissions like inserting, updating, and deleting product details which are should be at the owner or manager level only.
Following Function will help to coordinate between admin Functions
Python3
def admin():    print("============= Welcome to the Admin Inventory Management System =====")         while (1):        print("1)Display DataBase/All Products with there details")        print("2)Display Specific Product with its details")        print("3)Insert Data Into DataBase")        print("4)Update Product in Database")        print("5)Delete Product in DataBase")        print("6)Display User Purchase Reports")        print("7)Exit")        print("Enter Your Choice :- ")                 n = int(input())        if (n == 1):            display_data()        elif (n == 2):            display_specific_data()        elif (n == 3):            add_new()        elif (n == 4):            update_prod_data()        elif (n == 5):            delete_prod()        elif (n == 6):            display_reports_admin()        elif (n == 7):            break        else:            print("Invalid Choice...!!!")
This level will provide the following Functions
In This Function, Admin Will have two options either he wants all list as it is in Database or else he wants to have a look at all products by their categories.
Note: To make it look good in the tabular format we will use pandas.
Python3
def display_data():    import pandas as pd    import json    fd = open("data.json", 'r')  # Open file in read mode    txt = fd.read()  # reading data from file    data = json.loads(txt)         # This will parse the JSON data,    # populates a Python dictionary with the data    fd.close()    print("Enter '0' To Display Data Category Wise or '1' \    To Show Data As its Sequence Of Insertion :- ")    n = int(input())         # Display All Records    if (n == 1):        table = pd.DataFrame(            columns=['ID', 'name', 'price', 'category',                     'quantity', 'date'])                 # Creating Pandas dataframe to show data in table        # format later        for i in data.keys():            '''Fetch all keys in dictionary'''            temp = pd.DataFrame(columns=['ID'])            temp['ID'] = [i]                         for j in data[i].keys():                temp[j] = [data[i][j]]            table = table.append(temp)        table = table.reset_index(drop=True)                 # This will reset index of dataframe        from IPython.display import display        display(table)    elif (n == 0):               # Display Records by Category        table = pd.DataFrame(            columns=['ID', 'name', 'price', 'category',                     'quantity', 'date'])        cat = []                 for i in data.keys():            temp = pd.DataFrame(columns=['ID'])            temp['ID'] = [i]            for j in data[i].keys():                temp[j] = [data[i][j]]                if (j == 'category'):                    cat.append(data[i][j])            table = table.append(temp)            table = table.reset_index(drop=True)            cat = set(cat)            cat = list(cat)                     for k in cat:            temp = pd.DataFrame()            temp = table[table['category'] == k]            print("Data Of Products Of Category "+k+" is:- ")            from IPython.display import display            display(temp)    else:        print("Enter Valid Choice...!!!")         # display_data() # Uncomment This Line To Run This Function# Note :- Ensure You Have data.json File to Fetch Data
In this Function, Admin will have to enter the Product ID of the product to see the details he wants to check he will get all details regarding that particular product.
Python3
def display_specific_data():    import pandas as pd    import json    fd = open("data.json", 'r')    txt = fd.read()    data = json.loads(txt)    fd.close()    print("Enter Product ID Whoes Details You Want to Have a Look on :- ")    i = input()         # Following Code will Filter out Product ID from Records    if i in data.keys():        temp = pd.DataFrame(columns=['ID'])        temp['ID'] = [i]                 for j in data[i].keys():            temp[j] = [data[i][j]]                     from IPython.display import display        display(temp)    else:        print("You Have Entered Wrong Product ID \        that is not Present in DataBase...!!!")  # display_specific_data() # Uncomment This Line To Run This Function# Note :- Ensure You Have data.json File to Fetch Data
This Function will allow Admin to Add New Product Details in Inventory. Also provides Functionality to add new attribute property for a specific product if Admin wants to add other than basic 5 properties/details.
Note: Here program is more specific regarding data we have inserted we can make changes to make it applicable to all types
Python3
def add_new():    import json    fd = open("data.json", 'r')    txt = fd.read()    data = json.loads(txt)    fd.close()    print("Enter New Product ID :- ")    id = input()         if id not in data.keys():        print("Enter Product Name :- ")        name = input()                 print("Enter Price of Product(price for product quantity as 1) :- ")        price = input()                 print("Enter Category of Product :- ")        category = input()                 print("Enter Quantity of Product :- ")        quantity = input()                 print("Enter The Date on Which Product is Added in Inventory :- ")        date = input()                 data[id] = {'name': name, 'price': price,                    'category': category, 'quantity': quantity, 'date': date}        print("Please Press '0' to Add New Attributes\        /Properties of Product or Press '1' to Continue :- ")        z = int(input())                 if(z == 0):            print("Enter Number of New Attributes/Properties of Product :- ")            n = int(input())                         for i in range(n):                print("Enter Attribute Name That you Want To Add :- ")                nam = input()                print("Enter The "+str(nam)+" of Product :- ")                pro = input()                data[id][nam] = pro        print("Product ID "+str(id)+" Added Successfully...!!!")             else:        print("The Product ID you Have Entered Is Already Present\        t in DataBase Please Check...!!!")    js = json.dumps(data)    fd = open("data.json", 'w')    fd.write(js)    fd.close()     # add_new() # Uncomment This Line To Run This Function# Note :- Ensure You Have data.json File to Fetch Data
Here Admin can remove products that are out of stock or want to delete. Also, it will Throw an Error on an invalid product ID.
Python3
def delete_prod():    import json    fd = open("data.json", 'r')    txt = fd.read()    data = json.loads(txt)    fd.close()    print("Enter The Product ID of The Product Which You Want To Delete :- ")    temp = input()         if temp in data.keys():                 # here we are removing that particular data        data.pop(temp)         print("Product ID "+str(temp)+" Deleted Successfully...!!!")    else:        print("Invalid Product ID...!!!")    js = json.dumps(data)    fd = open("data.json", 'w')    fd.write(js)    fd.close()     # delete_prod() # Uncomment This Line To Run This Function# Note :- Ensure You Have data.json File to Fetch Data
This Function will provide Admin two options either he wants to update all details of the product or he wants to edit any specific detail/attribute of the product. Also, it will Throw an Error on an invalid product ID.
Python3
def update_prod_data():    import json    fd = open("data.json", 'r')    txt = fd.read()    data = json.loads(txt)    fd.close()    print("Enter The Product ID of The Product\    Which You Want To Update :- ")    temp = input()         if temp in data.keys():        print("Want to update whole product data\        press '0' else '1' for specific data :- ")        q = int(input())        if (q == 0):                       print("Enter Product Name :- ")            name = input()                         print("Enter Price of Product(price for product quantity as 1) :- ")            price = input()                         print("Enter Category of Product :- ")            category = input()                         print("Enter Quantity of Product :- ")            quantity = input()                         print("Enter The Date on Which Product is Added in Inventory :- ")            date = input()                         data[temp] = {'name': name, 'price': price,                          'category': category, 'quantity': quantity,                          'date': date}            print(                "Please Press '0' to Add more Attributes\                /Properties of Product or Press '1' to Continue :- ")            z = int(input())            if(z == 0):                print("Enter Number of New Attributes/Properties of Product :- ")                n = int(input())                                 for i in range(n):                    print("Enter Attribute Name That you Want To Add :- ")                    nam = input()                    print("Enter The "+str(nam)+" of Product :- ")                    pro = input()                    data[temp][nam] = pro            print("Product ID "+str(temp)+" Updated Successfully...!!!")                     elif(q == 1):            print("Enter Which Attribute of Product You want to Update :- ")            p = input()                         if p in data[temp].keys():                print("Enter "+str(p)+" of Product :- ")                u = input()                data[temp][p] = u                print("Product ID "+str(temp)+"'s attribute " +                      str(p)+" is Updated Successfully...!!!")            else:                print("Invalid Product Attribute...!!!")        else:            print("Invalid Choice...!!!")    else:        print("Invalid Product ID...!!!")    js = json.dumps(data)    fd = open("data.json", 'w')    fd.write(js)    fd.close()     # update_prod_data() # Uncomment This Line To Run This Function# Note :- Ensure You Have data.json File to Fetch Data
Admin can have a look at user purchases with two options like either he wants to check all purchase reports or want to check the purchase report of any specific customer/user. This Also Provide Functionality to show a message that no reports are present if no purchase happened by any user. Also, it will Throw an Error on an invalid User ID.
Python3
def display_reports_admin():    import os.path    import pandas as pd    import json    if (os.path.isfile("user_data.json") is False):               # Check for if file is present or not        # File will be generated only        # if any user will do some purchase        print("No User Reports are Present")        return           fd = open("user_data.json", 'r')    txt = fd.read()    user_data = json.loads(txt)    fd.close()    print("Enter '0' to Check All Bills/Reports and \    '1' To Check Specific User Bills/Reports :- ")    n = int(input())         if (n == 1):        print("Enter User ID Whoes Details You Want to Have a Look on")        i = input()        temp = pd.DataFrame()                 if i in user_data.keys():            for j in user_data[i].keys():                d = dict()                d['User ID'] = i                d['Purchase Number'] = j                for k in user_data[i][j].keys():                    d[k] = user_data[i][j][k]                temp = temp.append(d, ignore_index=True)                d = dict()            temp = temp.reset_index(drop=True)                         from IPython.display import display            display(temp)                     else:            print("You Have Entered Wrong User ID that is not Present in DataBase...!!!")    elif (n == 0):        table = pd.DataFrame()                 for i in user_data.keys():            temp = pd.DataFrame()                         for j in user_data[i].keys():                d = dict()                d['User ID'] = i                d['Purchase Number'] = j                                 for k in user_data[i][j].keys():                    d[k] = user_data[i][j][k]                temp = temp.append(d, ignore_index=True)                d = dict()            table = table.append(temp)        table = table.reset_index(drop=True)        from IPython.display import display        display(table)    else:        print("Please Enter Valid Choice...!!!") # display_reports_admin() # Uncomment This Line To Run This Function# Note :- Ensure You Have data.json File to Fetch Data
Admin Can Delete the Whole Database also if he wants to clear it all.
Python3
def delete_all():    fd = open("data.json", 'r')    txt = fd.read()    data = json.loads(txt)    fd.close()    data = {}  # Replacing Data with NULL Dictionary    js = json.dumps(data)    fd = open("data.json", 'w')    fd.write(js)    fd.close()
This is basically something like a customer can operate to buy products and get his bill and previous bills record too have no functionally or access to the product to either insert or modify or delete it.
Following Function will help to coordinate between admin Functions
Python3
def user():    print("===============\    Welcome to the User Inventory Management System\    ===============================================")         while (1):        print("1)Display All Products With Details")        print("2)Display Specific Product With Details")        print("3)Display All Purchase Bills")        print("4)Buy The Product")        print("5)Exit")        print("Enter Your Choice :- ")        n = int(input())        if (n == 1):            display_data()        elif (n == 2):            display_specific_data()        elif (n == 3):            display_user_data()        elif (n == 4):            buy_product()        elif (n == 5):            break        else:            print("Invalid Choice...!!!")
Following Are The Functions at User Level 
Note: Before the user buys something we should show him a list of all products available in inventory so we can use the same function we have created for admin for displaying products.
This Function will help the user to track his purchase and all bills reports till today. Also, This Function Provides Information Only to the User if he enters User ID. (we can add password features also here to increase more functionality)
Python3
def display_user_data():    import os.path    import json         if (os.path.isfile("user_data.json") is False):        print("No User Reports are Present")        return           fd = open("user_data.json", 'r')    txt = fd.read()    user_data = json.loads(txt)    fd.close()    print("Enter your User ID to Display All your Bills :- ")    i = input()    temp = pd.DataFrame()         if i in user_data.keys():        for j in user_data[i].keys():            d = dict()            d['User ID'] = i            d['Purchase Number'] = j            for k in user_data[i][j].keys():                d[k] = user_data[i][j][k]            temp = temp.append(d, ignore_index=True)            d = dict()        temp = temp.reset_index(drop=True)                 from IPython.display import display        display(temp)    else:        print("You Have Entered Wrong User ID that is not Present in DataBase...!!!")
User/Customer will get his bill regarding purchases done by him just after the purchase with a unique 10 digit Transaction ID. If a user buys multiple products in one go it will give an aggregate bill.
Python3
def generate_bill(user_id, prod_id, price, time_date,                  purchase_no, name, category,                  quantity_all, transaction_id):    print("================================\  ================= Bill ================\  =================================")    print("########################################")    print("   User ID :-", user_id)    print("############################################")    amount = 0    n = len(purchase_no)         for i in range(n):        print("--------------------------------------")        amount = amount+float(price[i])*float(quantity_all[i])        print("Purchase number", purchase_no[i],              "\nPurchase Time :-", time_date[i],              "\nProduct ID :-", prod_id[i],              "\nName Of Product :-",              name[i], "\nCategory Of Product :-", category[i],              "\nPrice of Product per Item :-", price[i],              "\nPurchase Quantity :-", quantity_all[i])        print("-------------------------------------------------")    print("*********************************************************")    print("      Total Payable Bill :-",          amount, "Transaction ID :-", transaction_id)    print("*************************************")
This is the main function of this part this will allow user/customer to buy products it will give an error if the customer buys a product with high quantity than in stock also user will get one more chance to correct quantity if he wants to save efforts or restarting the process or he can skip that product too. Also, Customer will get messages out of stock if the product is not present in inventory (quantity=0). Customers can buy multiple products simultaneously by using product IDs (we can add buying product by its name also) user/customer will error messages if he enters wrong choices.
Python3
def buy_product():    import time    import random    import os.path         if (os.path.isfile("user_data.json") is False):        user_data = {}    else:        fd = open("user_data.json", 'r')        txt = fd.read()        user_data = json.loads(txt)        fd.close()             fd = open("data.json", 'r')    txt = fd.read()    data = json.loads(txt)    fd.close()    print("Enter Your User ID if You are Old Customer\    else press '0' To New User ID :- ")    p = int(input())         if (p == 0):        if (len(user_data.keys()) == 0):            user_id = 1000        else:            user_id = int(list(user_data.keys())[-1])+1    else:        if str(p) in user_data.keys():            user_id = p        else:            user_id = -1                 if (user_id != -1):        user_id = str(user_id)        price = []        time_date = []        purchase_no = []        name = []        category = []        quantity_all = []        prod_id = []        transaction_id = ''.join(random.choice(            '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ') for i in range(10))        print("Enter Number of Products You Want To Buy :- ")        n = int(input())        print("Enter Data As Follows :- ")                 if user_id not in user_data.keys():            user_data[user_id] = {}            g = 0        else:            g = int(list(user_data[user_id].keys())[-1])+1                     for i in range(n):            print("Enter Product ID of Product " +                  str(i+1)+" that you want to buy")            id = input()                         if id in data.keys():                user_data[user_id][str(i+1+g)] = {}                user_data[user_id][str(i+1+g)]['time_date'] = str(time.ctime())                time_date.append(str(time.ctime()))                if(float(data[id]['quantity']) == 0):                    print("Product You Want is Currenty Out Of Stock...!!!")                    continue                                     purchase_no.append(i+1+g)                name.append(data[id]['name'])                user_data[user_id][str(i+1+g)]['name'] = data[id]['name']                prod_id.append(id)                user_data[user_id][str(i+1+g)]['product_id'] = id                category.append(data[id]['category'])                user_data[user_id][str(                    i+1+g)]['category'] = data[id]['category']                print("For Product "+str(data[id]['name']) +                      " Available Quantity is :- "+str(data[id]['quantity']))                print("Enter Quantity of Product " +                      str(i+1)+" that you want to buy")                quantity = input()                                 if (float(quantity) <= float(data[id]['quantity'])):                    data[id]['quantity'] = str(                        float(data[id]['quantity'])-float(quantity))                    quantity_all.append(quantity)                    user_data[user_id][str(i+1+g)]['quantity'] = str(quantity)                    price.append(data[id]['price'])                    user_data[user_id][str(i+1+g)]['price'] = data[id]['price']                    user_data[user_id][str(                        i+1+g)]['Transaction ID'] = str(transaction_id)                else:                    print(                        "The Quantity You Have Asked is Quite High\                        Than That is Available in Stock")                    print(                        "Did you Want To buy According to The Quantity\                        Available in Stock then Enter '0' Else '1'\                        to skip This Product")                    key = int(input())                                         if (key == 0):                        print("Enter Quantity of Product " +                              str(i+1)+" that you want to buy")                        quantity = intput()                        if (float(quantity) <= float(data[id]['quantity'])):                            data[id]['quantity'] = str(                                float(data[id]['quantity'])-float(quantity))                            quantity_all.append(quantity)                            user_data[user_id][str(                                i+1)]['quantity'] = str(quantity)                            price.append(data[id]['price'])                            user_data[user_id][str(                                i+1)]['price'] = data[id]['price']                            user_data[user_id][str(                                i+1+g)]['Transaction ID'] = str(transaction_id)                        else:                            print("Invalid Operation Got Repeated...!!!")                    elif (key == 1):                        continue                    else:                        print("Invalid Choice...!!!")            else:                print("Invalid Product ID...!!!")        if(len(purchase_no) != 0):            generate_bill(user_id, prod_id, price, time_date, purchase_no,                          name, category, quantity_all, transaction_id)    else:        print("User ID Doesn't Exists...!!!")    js = json.dumps(data)    fd = open("data.json", 'w')    fd.write(js)    fd.close()    js = json.dumps(user_data)    fd = open("user_data.json", 'w')    fd.write(js)    fd.close()
After all, we have to manage user and admin-level functionalities.  So, code for that is,
Python3
import jsonimport pandas as pd while (1):    print("Choose Any One of The Following :- ")    print("1)Admin")    print("2)User")    print("3)Exit")    print("Enter Your Choice Here :- ")    n = int(input())    if (n == 1):        admin()    elif (n == 2):        user()    elif (n == 3):        break    else:        print("Invalid Choice...!!!")
This was all complete Inventory Management System with Admin and User Functionalities.
Python3
import pandas as pdimport jsonimport os.pathimport timeimport random   # Creating Dictionary to store dataavailable_products = {1001: {"name": "avocado", "price": 230,                             "category": "grocery",                             "quantity": 10, "date": "10/03/2021"},                      1002: {"name": "lotion", "price": 250,                             "category": "beauty & personal",                             "quantity": 100,                             "date": "15/07/2021"},                      1003: {"name": "pain reliever", "price": 500,                             "category": "health",                             "quantity": 200, "date": "12/04/2021"},                      1004: {"name": "dry pasta", "price": 20,                             "category": "grocery",                             "quantity": 50, "date": "27/06/2021"},                      1005: {"name": "toothbrush", "price": 700,                             "category": "beauty & personal",                             "quantity": 100,                             "date": "30/01/2021"},                      1006: {"name": "halloween candy", "price": 33,                             "category": "grocery",                             "quantity": 56, "date": "22/02/2021"},                      1007: {"name": "mascara", "price": 765,                             "category": "beauty & personal",                             "quantity": 70,                             "date": "11/03/2021"},                      1008: {"name": "capsicum", "price": 764,                             "category": "grocery",                             "quantity": 90, "date": "16/02/2021"},                      1009: {"name": "blush", "price": 87,                             "category": "beauty & personal",                             "quantity": 50, "date": "17/07/2021"},                      1010: {"name": "granola bars", "price": 24,                             "category": "grocery", "quantity": 60,                             "date": "20/05/2021"},                      } # Formatting Dictionary into JSON formatjs = json.dumps(available_products) #  json.dumps() function converts a# Python object into a json stringjs  # so we got all data in json string format here # Create Jason File for DataBase and Write data Into Filefd = open("data.json", 'w')# it will open file into write mode if file# does not exists then it will create file too'''fd.write(js)  # writing string into filefd.close()  # Close File After Inserting Data def admin():    print("========\    Welcome to the Admin Inventory Management System \    ==============")    while (1):        print("1)Display DataBase/All Products with there details")        print("2)Display Specific Product with its details")        print("3)Insert Data Into DataBase")        print("4)Update Product in Database")        print("5)Delete Product in DataBase")        print("6)Display User Purchase Reports")        print("7)Exit")        print("Enter Your Choice :- ")        n = int(input())        if (n == 1):            display_data()        elif (n == 2):            display_specific_data()        elif (n == 3):            add_new()        elif (n == 4):            update_prod_data()        elif (n == 5):            delete_prod()        elif (n == 6):            display_reports_admin()        elif (n == 7):            break        else:            print("Invalid Choice...!!!")  def display_data():     fd = open("data.json", 'r')    txt = fd.read()  # reading data from file    data = json.loads(txt)         # This will parse the JSON data, populates a    # Python dictionary with the data    fd.close()    print("Enter '0' To Display Data Category Wise or '1' \    To Show Data As its Sequence Of Insertion :- ")    n = int(input())         # Display All Records    if (n == 1):        table = pd.DataFrame(            columns=['ID', 'name', 'price', 'category', 'quantity', 'date'])                 # Creating Pandas dataframe to show data in table format later        for i in data.keys():                       # Fetch all keys in dictionary            temp = pd.DataFrame(columns=['ID'])            temp['ID'] = [i]            for j in data[i].keys():                temp[j] = [data[i][j]]            table = table.append(temp)        table = table.reset_index(drop=True)        '''This will reset index of dataframe'''        from IPython.display import display        display(table)             elif (n == 0):               # Display Records by Category        table = pd.DataFrame(            columns=['ID', 'name', 'price', 'category',                     'quantity', 'date'])        cat = []                 for i in data.keys():            temp = pd.DataFrame(columns=['ID'])            temp['ID'] = [i]            for j in data[i].keys():                temp[j] = [data[i][j]]                if (j == 'category'):                    cat.append(data[i][j])            table = table.append(temp)            table = table.reset_index(drop=True)            cat = set(cat)            cat = list(cat)                     for k in cat:            temp = pd.DataFrame()            temp = table[table['category'] == k]            print("Data Of Products Of Category "+k+" is:- ")            from IPython.display import display            display(temp)    else:        print("Enter Valid Choice...!!!")         # display_data() # Uncomment This Line To Run This Functiondef display_specific_data():    fd = open("data.json", 'r')    txt = fd.read()    data = json.loads(txt)    fd.close()    print("Enter Product ID Whoes Details You Want to Have a Look on :- ")    i = input()         # Following Code will Filter out Product ID from Records    if i in data.keys():        temp = pd.DataFrame(columns=['ID'])        temp['ID'] = [i]        for j in data[i].keys():            temp[j] = [data[i][j]]        from IPython.display import display        display(temp)    else:        print("You Have Entered Wrong Product ID\        that is not Present in DataBase...!!!")  # display_specific_data() # Uncomment This Line To Run This Functiondef add_new():    fd = open("data.json", 'r')    txt = fd.read()    data = json.loads(txt)    fd.close()    print("Enter New Product ID :- ")    id = input()         if id not in data.keys():        print("Enter Product Name :- ")        name = input()        print("Enter Price of Product(price for product quantity as 1) :- ")        price = input()        print("Enter Category of Product :- ")        category = input()        print("Enter Quantity of Product :- ")        quantity = input()        print("Enter The Date on Which Product is Added in Inventory :- ")        date = input()        data[id] = {'name': name, 'price': price,                    'category': category, 'quantity': quantity, 'date': date}        print("Please Press '0' to Add New\        Attributes/Properties of Product or Press '1' to Continue :- ")        z = int(input())        if(z == 0):            print("Enter Number of New Attributes/Properties of Product :- ")            n = int(input())            for i in range(n):                print("Enter Attribute Name That you Want To Add :- ")                nam = input()                print("Enter The "+str(nam)+" of Product :- ")                pro = input()                data[id][nam] = pro        print("Product ID "+str(id)+" Added Successfully...!!!")    else:        print("The Product ID you Have Entered Is\        Already Present in DataBase Please Check...!!!")    js = json.dumps(data)    fd = open("data.json", 'w')    fd.write(js)    fd.close()     # add_new() # Uncomment This Line To Run This Functiondef delete_prod():    fd = open("data.json", 'r')    txt = fd.read()    data = json.loads(txt)    fd.close()    print("Enter The Product ID of The Product Which You Want To Delete :- ")    temp = input()    if temp in data.keys():        data.pop(temp)  # here we are removing that particular data        print("Product ID "+str(temp)+" Deleted Successfully...!!!")    else:        print("Invalid Product ID...!!!")    js = json.dumps(data)    fd = open("data.json", 'w')    fd.write(js)    fd.close()     # delete_prod() # Uncomment This Line To Run This Functiondef update_prod_data():    fd = open("data.json", 'r')    txt = fd.read()    data = json.loads(txt)    fd.close()    print("Enter The Product ID of The Product\    Which You Want To Update :- ")    temp = input()         if temp in data.keys():        print("Want to update whole product data\        press '0' else '1' for specific data :- ")        q = int(input())                 if (q == 0):            print("Enter Product Name :- ")            name = input()            print("Enter Price of Product(price for\            product quantity as 1) :- ")            price = input()            print("Enter Category of Product :- ")            category = input()            print("Enter Quantity of Product :- ")            quantity = input()            print("Enter The Date on Which Product\            is Added in Inventory :- ")            date = input()            data[temp] = {'name': name, 'price': price,                          'category': category, 'quantity': quantity,                          'date': date}            print(                "Please Press '0' to Add more Attributes/Properties of Product or Press '1' to Continue :- ")            z = int(input())                         if(z == 0):                print("Enter Number of New Attributes/Properties of Product :- ")                n = int(input())                for i in range(n):                    print("Enter Attribute Name That you Want To Add :- ")                    nam = input()                    print("Enter The "+str(nam)+" of Product :- ")                    pro = input()                    data[temp][nam] = pro            print("Product ID "+str(temp)+" Updated Successfully...!!!")                     elif(q == 1):            print("Enter Which Attribute of Product You want to Update :- ")            p = input()                         if p in data[temp].keys():                print("Enter "+str(p)+" of Product :- ")                u = input()                data[temp][p] = u                print("Product ID "+str(temp)+"'s attribute " +                      str(p)+" is Updated Successfully...!!!")            else:                print("Invalid Product Attribute...!!!")        else:            print("Invalid Choice...!!!")    else:        print("Invalid Product ID...!!!")    js = json.dumps(data)    fd = open("data.json", 'w')    fd.write(js)    fd.close()     # update_prod_data() # Uncomment This Line To Run This Functiondef display_reports_admin():    if (os.path.isfile("user_data.json") is False):        # Check for if file is present or not        # File will be generated only if any user will do some purchase        print("No User Reports are Present")        return    fd = open("user_data.json", 'r')    txt = fd.read()    user_data = json.loads(txt)    fd.close()    print("Enter '0' to Check All Bills/Reports\    and '1' To Check Specific User Bills/Reports :- ")    n = int(input())    if (n == 1):        print("Enter User ID Whoes Details You Want to Have a Look on")        i = input()        temp = pd.DataFrame()        if i in user_data.keys():            for j in user_data[i].keys():                d = dict()                d['User ID'] = i                d['Purchase Number'] = j                for k in user_data[i][j].keys():                    d[k] = user_data[i][j][k]                temp = temp.append(d, ignore_index=True)                d = dict()            temp = temp.reset_index(drop=True)            from IPython.display import display            display(temp)        else:            print("You Have Entered Wrong User ID that is not Present in DataBase...!!!")    elif (n == 0):        table = pd.DataFrame()        for i in user_data.keys():            temp = pd.DataFrame()            for j in user_data[i].keys():                d = dict()                d['User ID'] = i                d['Purchase Number'] = j                for k in user_data[i][j].keys():                    d[k] = user_data[i][j][k]                temp = temp.append(d, ignore_index=True)                d = dict()            table = table.append(temp)        table = table.reset_index(drop=True)        from IPython.display import display        display(table)    else:        print("Please Enter Valid Choice...!!!") # display_reports_admin() # Uncomment This Line To Run This Functiondef delete_all():    fd = open("data.json", 'r')    txt = fd.read()    data = json.loads(txt)    fd.close()    data = {}  # Replacing Data with NULL Dictionary    js = json.dumps(data)    fd = open("data.json", 'w')    fd.write(js)    fd.close()  def user():    print("======= Welcome to the User Inventory Management System ====")    while (1):        print("1)Display All Products With Details")        print("2)Display Specific Product With Details")        print("3)Display All Purchase Bills")        print("4)Buy The Product")        print("5)Exit")        print("Enter Your Choice :- ")        n = int(input())        if (n == 1):            display_data()        elif (n == 2):            display_specific_data()        elif (n == 3):            display_user_data()        elif (n == 4):            buy_product()        elif (n == 5):            break        else:            print("Invalid Choice...!!!")  def display_user_data():     if (os.path.isfile("user_data.json") is False):        print("No User Reports are Present")        return    fd = open("user_data.json", 'r')    txt = fd.read()    user_data = json.loads(txt)    fd.close()    print("Enter your User ID to Display All your Bills :- ")    i = input()    temp = pd.DataFrame()         if i in user_data.keys():        for j in user_data[i].keys():            d = dict()            d['User ID'] = i            d['Purchase Number'] = j            for k in user_data[i][j].keys():                d[k] = user_data[i][j][k]            temp = temp.append(d, ignore_index=True)            d = dict()        temp = temp.reset_index(drop=True)        from IPython.display import display        display(temp)    else:        print("You Have Entered Wrong User ID that is not Present in DataBase...!!!")  def generate_bill(user_id, prod_id, price, time_date, purchase_no,                  name, category, quantity_all, transaction_id):    print("========= Bill ========")    print("#######################")    print("   User ID :-", user_id)    print("#################")    amount = 0    n = len(purchase_no)         for i in range(n):        print("-----------------------------------------")        amount = amount+float(price[i])*float(quantity_all[i])        print("Purchase number", purchase_no[i],              "\nPurchase Time :-", time_date[i], "\nProduct ID :-",              prod_id[i], "\nName Of Product :-",              name[i], "\nCategory Of Product :-", category[i],              "\nPrice of Product per Item :-", price[i],              "\nPurchase Quantity :-", quantity_all[i])        print("-----------------------------------")    print("*****************************************")    print("   Total Payable Bill :-",          amount, "Transaction ID :-", transaction_id)    print("***************************************")  def buy_product():         if (os.path.isfile("user_data.json") is False):        user_data = {}    else:        fd = open("user_data.json", 'r')        txt = fd.read()        user_data = json.loads(txt)        fd.close()    fd = open("data.json", 'r')    txt = fd.read()    data = json.loads(txt)    fd.close()    print("Enter Your User ID if You are Old \    Customer else press '0' To New User ID :- ")    p = int(input())    if (p == 0):        if (len(user_data.keys()) == 0):            user_id = 1000        else:            user_id = int(list(user_data.keys())[-1])+1    else:        if str(p) in user_data.keys():            user_id = p        else:            user_id = -1    if (user_id != -1):        user_id = str(user_id)        price = []        time_date = []        purchase_no = []        name = []        category = []        quantity_all = []        prod_id = []        transaction_id = ''.join(random.choice(            '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ') for i in range(10))        print("Enter Number of Products You Want To Buy :- ")        n = int(input())        print("Enter Data As Follows :- ")        if user_id not in user_data.keys():            user_data[user_id] = {}            g = 0        else:            g = int(list(user_data[user_id].keys())[-1])+1        for i in range(n):            print("Enter Product ID of Product " +                  str(i+1)+" that you want to buy")            id = input()            if id in data.keys():                user_data[user_id][str(i+1+g)] = {}                user_data[user_id][str(i+1+g)]['time_date'] = str(time.ctime())                time_date.append(str(time.ctime()))                if(float(data[id]['quantity']) == 0.0):                    print("Product You Want is Currenty Out Of Stock...!!!")                    continue                purchase_no.append(i+1+g)                name.append(data[id]['name'])                user_data[user_id][str(i+1+g)]['name'] = data[id]['name']                prod_id.append(id)                user_data[user_id][str(i+1+g)]['product_id'] = id                category.append(data[id]['category'])                user_data[user_id][str(                    i+1+g)]['category'] = data[id]['category']                print("For Product "+str(data[id]['name']) +                      " Available Quantity is :- "+str(data[id]['quantity']))                print("Enter Quantity of Product " +                      str(i+1)+" that you want to buy")                quantity = input()                if (float(quantity) <= float(data[id]['quantity'])):                    data[id]['quantity'] = str(                        float(data[id]['quantity'])-float(quantity))                    quantity_all.append(quantity)                    user_data[user_id][str(i+1+g)]['quantity'] = str(quantity)                    price.append(data[id]['price'])                    user_data[user_id][str(i+1+g)]['price'] = data[id]['price']                    user_data[user_id][str(                        i+1+g)]['Transaction ID'] = str(transaction_id)                else:                    print(                        "The Quantity You Have Asked is Quite High Than\                        That is Available in Stock")                    print(                        "Did you Want To buy According to The Quantity\                        Available in Stock then Enter '0' Else '1'\                        to skip This Product")                    key = int(input())                    if (key == 0):                        print("Enter Quantity of Product " +                              str(i+1)+" that you want to buy")                        quantity = intput()                        if (float(quantity) <= float(data[id]['quantity'])):                            data[id]['quantity'] = str(                                float(data[id]['quantity'])-float(quantity))                            quantity_all.append(quantity)                            user_data[user_id][str(                                i+1)]['quantity'] = str(quantity)                            price.append(data[id]['price'])                            user_data[user_id][str(                                i+1)]['price'] = data[id]['price']                            user_data[user_id][str(                                i+1+g)]['Transaction ID'] = str(transaction_id)                        else:                            print("Invalid Operation Got Repeated...!!!")                    elif (key == 1):                        continue                    else:                        print("Invalid Choice...!!!")            else:                print("Invalid Product ID...!!!")        if(len(purchase_no) != 0):            generate_bill(user_id, prod_id, price, time_date, purchase_no,                          name, category, quantity_all, transaction_id)    else:        print("User ID Doesn't Exists...!!!")    js = json.dumps(data)    fd = open("data.json", 'w')    fd.write(js)    fd.close()    js = json.dumps(user_data)    fd = open("user_data.json", 'w')    fd.write(js)    fd.close()  while (1):    print("Choose Any One of The Following :- ")    print("1)Admin")    print("2)User")    print("3)Exit")    print("Enter Your Choice Here :- ")    n = int(input())    if (n == 1):        admin()    elif (n == 2):        user()    elif (n == 3):        break    else:        print("Invalid Choice...!!!")
Output:
simmytarika5
abhishek0719kadiyan
germanshephered48
as5853535
rkbhola5
Picked
Python-json
Python-projects
TrueGeek-2021
Python
TrueGeek
Writing code in comment?
Please use ide.geeksforgeeks.org,
generate link and share the link here.
How to Install PIP on Windows ?
Python Classes and Objects
Python OOPs Concepts
Introduction To PYTHON
Python | os.path.join() method
How to redirect to another page in ReactJS ?
Basics of API Testing Using Postman
How to remove duplicate elements from JavaScript Array ?
How to Convert Char to String in Java?
Types of Internet Protocols