Question: # [Gavin Lewis] # P9 - Employee Hash Table # The Hash Dictionary points to the first element of the Employee Linked List with its

# [Gavin Lewis]

# P9 - Employee Hash Table

# The Hash Dictionary points to the first element of the Employee Linked List with its hash (0-11)

class HashDictionary:

def __init__(self, hashLength):

self.beginChain = []

self.endChain = []

for n in range(hashLength):

self.beginChain.append(None)

self.endChain.append(None)

# Employee Linked List

class Employee:

def __init__(self, empID, empLastName, empFirstName, empPhone):

self.empID = empID

self.LastName = empLastName

self.FirstName = empFirstName

self.phone = empPhone

self.nextEmployee = None # corrected variable name

self.deleted = False # added deleted flag to mark deleted employees

def __str__(self): # added string representation for Employee

return "Employee ID: {}, Last Name: {}, First Name: {}, Phone: {}".format(

self.empID, self.LastName, self.FirstName, self.phone)

class EmployeeHashTable:

def __init__(self, hashLength):

self.hashDict = HashDictionary(hashLength)

def insertEmployee(self, empID, empLastName, empFirstName, empPhone):

position = empID % 12

currentNode = self.hashDict.beginChain[position]

prevNode = None

while currentNode is not None:

prevNode = currentNode

currentNode = currentNode.nextEmployee

emp = Employee(empID, empLastName, empFirstName, empPhone)

if prevNode is None:

self.hashDict.beginChain[position] = emp

else:

prevNode.nextEmployee = emp

print("Employee with ID {} added to database".format(emp.empID))

def searchEmployee(self, empID):

position = empID % 12

currentNode = self.hashDict.beginChain[position]

while currentNode is not None:

if currentNode.empID == empID and not currentNode.deleted: # check for deleted flag

print("Employee Found: ", currentNode)

return currentNode

currentNode = currentNode.nextEmployee

print("Employee with ID {} not found".format(empID))

return None

def deleteEmployee(self, empID):

position = empID % 12

currentNode = self.hashDict.beginChain[position]

while currentNode is not None:

if currentNode.empID == empID and not currentNode.deleted: # check for deleted flag

currentNode.deleted = True

print("Employee with ID {} marked as deleted".format(empID))

return

currentNode = currentNode.nextEmployee

print("Employee with ID {} not found".format(empID))

def traverseChain(self, startEMP):

print("Employee Chain:")

print(" ", startEMP)

node = startEMP.nextEmployee

while node is not None:

print(" ", node)

node = node.nextEmployee

# main program

from random import randint

import csv

hashLength = 12

empList = []

file = open('EmployeeDB.csv')

csvreader = csv.reader(file)

header = next(csvreader)

for employee in csvreader:

empList.append(employee)

HD = HashDictionary(hashLength)

for empRecord in empList:

empID = int(empRecord[0])

empLastName = empRecord[1]

empFirstName = empRecord[2]

empPhone = empRecord[3]

EMP = Employee(empID, empLastName, empFirstName, empPhone)

HD.insertEmployee(EMP)

empIDin = input("Enter Employee ID (001-999, 0 to Exit): ")

empID = int(empIDin)

while (empID > 0 and empID < 1000):

oper = input("Enter Operation Type (S)earch, (I)nsert, (D)elete: ")

if (oper == "S"):

E = HD.searchEmployee(empID)

if (E != None):

print(E.empID, E.FirstName, E.LastName, E.phone)

else:

print(empID, " Doesn't Exist")

elif (oper == "I"):

E = HD.searchEmployee(empID)

if (E != None):

print (empID, " Already Exists.", E.LastName, " Cannot Have Duplicates")

else:

fName = input("Enter Employee First Name: ")

lName = input("Enter Employee Last Name: ")

phoneNum = input("Enter Employee Phone Number: ")

EMP = Employee(empID, lName, fName, phoneNum)

HD.insertEmployee(EMP)

print (EMP.empID, EMP.LastName, " Record Inserted")

elif (oper == "D"):

E = HD.searchEmployee(empID)

if (E != None):

HD.deleteEmployee(empID, E)

print (E.empID, E.LastName, " Deleted")

else:

print(empID, " Not Found. Cannot Delete")

empIDin = input("Enter Employee ID (001-999, 0 to Exit): ")

empID = int(empIDin)

for n in range(hashLength):

print (n)

if (HD.beginChain[n] != None):

traverseChain(HD.beginChain[n])

Step by Step Solution

There are 3 Steps involved in it

1 Expert Approved Answer
Step: 1 Unlock blur-text-image
Question Has Been Solved by an Expert!

Get step-by-step solutions from verified subject matter experts

Step: 2 Unlock
Step: 3 Unlock

Students Have Also Explored These Related Databases Questions!