Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import json
- from abc import ABC, abstractmethod
- import csv
- import pprint
- class Handler:
- def __init__(self):
- self.content = None
- @abstractmethod
- def read(self):
- pass
- @abstractmethod
- def store(self,es,fname,path):
- pass
- def getContent(self): # Check: why this is not abstract?
- return self.content
- class JSONHandler(Handler):
- def __init__(self, filename, path=''):
- super().__init__() # Check: why do we call parent's initializer?
- self.jsonFile = path+filename # Check: specialization - behaviour/property that the child adds to the parent
- def read(self): # Check: why do1 we provide implementation here?
- fo = open(self.jsonFile,'r')
- c = fo.read()
- self.content = json.loads(c) # Check: deserialize json content
- fo.close()
- def store(self, es, fname, path):
- #this method to store given list of elements as es in a json file
- # and serialize es and save it in the file
- savepath = path + "/"+fname
- with open(savepath, 'w+') as outfile:
- data = []
- for elements in es:
- #json.dump(ele.__dict__, outfile)
- #data.append(elements.__dict__)
- data.append(elements.__dict__)
- json.dump(data, outfile, indent=2, sort_keys=False )
- class CSVHandler(Handler):
- def __init__(self, filename, path=''): # Check: looks very similar to the init of JSONHandler. Any suggestion?
- super().__init__()
- self.csvFile = path+filename
- def read(self):
- # fo = open(self.csvFile, 'r')
- # c = fo.read()
- # self.content = csv.DictReader(c) # Check: deserialize json content
- with open(self.csvFile) as file:
- csv_reader = csv.reader(file, delimiter='\t')
- dict_list=[]
- for row in csv_reader:
- dict_list.append(row)
- self.content = dict_list
- # fo.close()
- # with open(self.csvFile, 'r') as csv_file:
- # csv_reader = csv.DictReader(csv_file, delimiter=',')
- # dict_list=[]
- # for row in csv_reader:
- # dict_list.append(row)
- # self.content = dict_list
- ##pprint.pprint(self.content)
- print('csv file content is being read here ...')
- def store(self,es,fname,path):
- # this method to store given list of elements as es in a json file
- # and serialize es and save it in the file
- savepath = path + "/" + fname
- with open(savepath, 'w+') as outfile:
- data = []
- for elements in es:
- # json.dump(ele.__dict__, outfile)
- # data.append(elements.__dict__)
- data.append(elements.__dict__)
- json.dump(data, outfile, indent=2, sort_keys=False)
- # print('csv file content is being written here ...')
- #parentclass
- class ToString:
- @abstractmethod
- def __str__(self):
- pass
- #child class
- class Book(ToString):
- lastId = 0 # Check: why do we need this static member?
- status = ""
- @staticmethod # Check: why static method?
- def __nextId():
- Book.lastId = Book.lastId + 1
- return Book.lastId
- def __init__(self,author='',country='',imageLink='',language = '',link='',pages='',title='' , year='', status=''):
- self.author = author
- self.country = country
- self.imageLink = imageLink
- self.language = language
- self.link = link
- self.pages = pages
- self.title = title
- self.year = year
- self.status = status
- self.BookID = Book.__nextId()
- def lend(self):
- self.status = "lend"
- def not_lend(self):
- self.status = "not lend"
- def __str__(self):
- return "ID: "+str(self.BookID)+"\nAuthor: "+self.author +". "+"\nCountry:"+self.country+". "+ "\nImageLink: "+self.imageLink+"\nLanguage:"+self.language+". "+"\nLink:"+self.link+ "\nPages:"+str(self.pages)+". "+"\nTitle:"+self.title+". "+"Year:"+str(self.year)+". " +"\nStatus:"+self.status+". "
- class BookManager:
- def __init__(self, handler):
- self.handler = handler
- self.books = []
- def loadBooks(self):
- self.handler.read()
- booksList = self.handler.getContent()
- for u in booksList:
- auth = u['author']
- country = u['country']
- imageLink = u['imageLink']
- language = u['language']
- link = u['link']
- pages = u['pages']
- title = u['title']
- year = u['year']
- status = u['status']
- self.books.append(Book(auth,country,imageLink,language,link,pages,title,year,status))
- def storeBooks(self,fn,path):
- self.handler.store(self.books,fn,path)
- def getBooks(self):
- return self.books
- class Person(ToString):
- firstName = ""
- surName = ""
- gender = ""
- emailAddress = ""
- userName = ""
- personType = ""
- idRegNum = 0
- @staticmethod # Check: why static method?
- def __nextId():
- Person.idRegNum = Person.idRegNum + 1
- return Person.idRegNum
- def __init__(self,fn,ln,gender,emailAddress,userName,personType):
- self.firstName= fn
- self.surName= ln
- self.gender= gender
- self.emailAddress = emailAddress
- self.userName = userName
- self.personType = personType
- self.PersonId = Person.__nextId()
- def __str__(self):
- return "RegId"+str(self.PersonId)+"Firstname" + self.firstName + "Surname" + self.surName +"gender"+self.gender+"email adress"+self.emailAddress+"Username"+self.userName
- class Customer(Person):
- nameSet = ""
- streetAddress = ""
- zipCode = ""
- city = ""
- telephoneNumber = ""
- def __init__(self,fn,ln,gender,emailAddress,nameSet,streetAddress,zipCode,city,userName,telephoneNumber,personType):
- super().__init__(fn,ln,gender,emailAddress,userName,personType)
- self.nameSet = nameSet
- self.streetAddress = streetAddress
- self.zipCode = zipCode
- self.city = city
- self.telephoneNumber = telephoneNumber
- def __str__(self):
- super().__str__()
- return "\nNameset"+self.nameSet+"Street Address"+self.streetAddress+"Zipcode"+self.zipCode+"City"+self.city+"Telephone Number"+self.telephoneNumber
- class Student(Customer):
- rollNumber=0
- department=""
- semester=""
- batch=""
- @staticmethod # Check: why static method?
- def __nextId():
- Student.rollNumber = Student.rollNumber + 1
- return Student.rollNumber
- def __init__(self,fn,ln,gender,emailAddress,nameSet,streetAddress,zipCode,city,userName,telephoneNumber,personType, rollNumber, department, semester, batch):
- super().__init__(fn,ln,gender,emailAddress,nameSet,streetAddress,zipCode,city,userName,telephoneNumber,personType)
- self.rollNumber= rollNumber
- self.department= department
- self.semester= semester
- self.batch = batch
- def __str__(self):
- super().__str__()
- return "\nRollnumber"+self.rollNumber+"department"+self.department+"semester"+self.semester+"batch"+self.batch
- class PersonManager:
- def __init__(self, handler):
- self.handler = handler
- self.persons = []
- def loadStudents(self):
- self.handler.read()
- personsList = self.handler.getContent()
- for u in personsList:
- print(u[0])
- #print(u[1])
- #number = u[0]
- # gender = u[1]
- # nameSet = u[2]
- # fn = u[3]
- # ln = u[4]
- # streetAddress = u[5]
- # zipCode = u[6]
- # city = u[7]
- # emailAddress = u[8]
- # userName = u[9]
- # telephoneNumber = u[10]
- # #personType = u[11]
- # rollNumber = u[11]
- # department = u[12]
- # semester = u[13]
- # batch = u[14]
- # self.persons.append(Student(number,gender,nameSet,fn,ln,streetAddress,zipCode,city,emailAddress,userName,telephoneNumber,rollNumber,department,semester,batch))
- def storePersons(self,fn,path):
- self.handler.store(self.persons,fn,path)
- def getPersons(self):
- return self.persons
- if __name__ == '__main__':
- #this is where the json file is imported
- h = JSONHandler('booksset1.json')
- # h = CSVHandler('booksset1.csv')
- bookManager = BookManager(h)
- bookManager.loadBooks()
- booksInfo = bookManager.getBooks()
- # c = CSVHandler('FakeNameSet20.csv')
- # personManager = PersonManager(c)
- # personManager.loadStudents()
- # personsInfo = personManager.getPersons()
- # print(personsInfo)
- # 1. Login as customer
- ##1. View All Books
- ##2. Choose Books by Number to lend
- ##3. Choose Books by Number to give back
- # 2. Login as Administrator
- ##1. Add Book
- ##2. Remove Book
- ##3. Make a JSON BACKUP for Books
- ##4. Make a CSV BACKUP for Customers & Administrators
- #Menu
- while True:
- print("""\n MENU
- 1. View All Books
- 2. Choose Books by Number to lend
- 3. Choose Books by Number to give back
- 4. Add Book
- 5. Remove Book
- 6. Make a JSON BACKUP
- 7.
- 8.
- 9.
- 10. Exit
- """)
- chosenMenu=int(input("Make a choice of menu\n"))
- if chosenMenu==1:
- for u in booksInfo:
- print("------****-----\n")
- print(u)
- print("------****-----\n")
- elif chosenMenu==2:
- n=int(input("Enter id. of book you want to lend:"))
- print(booksInfo[n-1])
- booksInfo[n - 1].lend()
- print(booksInfo[n - 1])
- elif chosenMenu==3:
- n = int(input("Enter id. of book you want to give back:"))
- print(booksInfo[n - 1])
- booksInfo[n - 1].not_lend()
- print(booksInfo[n - 1])
- elif chosenMenu==4:
- print("Welcome you want to add a book Go ahead!\n")
- authorfield = input("Enter the author name:")
- countryfield = input("Enter the country:")
- imageLink = input("Enter the Imagelink:")
- language = input("Enter the language:")
- link = input("Enter the link:")
- while True:
- try:
- pages = int(input("Enter the pages - number:"))
- break
- except:
- print("Enter a valid number only...!")
- continue
- title = input("Enter the title:")
- while True:
- try:
- year = int(input("Enter year - number:"))
- break
- except:
- print("Enter a valid number only...!")
- continue
- status = "not lend"
- booksInfo.append(Book(authorfield,countryfield,imageLink,language,link,pages,title,year,status))
- elif chosenMenu==5:
- isremoved = False
- givenId = int(input("Enter id. of book you want to remove:"))
- indexToBeDeleted = 0
- for e in booksInfo:
- if(e.BookID == givenId):
- isremoved = True
- booksInfo.pop(indexToBeDeleted)
- break
- indexToBeDeleted = indexToBeDeleted + 1
- if(isremoved == False):
- print("Given ID doesn't exist")
- else:
- print("ID "+str(givenId)+" is successfully removed from the libary")
- elif chosenMenu==6:
- #bookManager.storeBooks("backup1.json","C:/Users/rahul/Documents/School/Analyse/analyses 3/assignment3/PLS3")
- bookManager.storeBooks("backup1.json","../../PLS3/")
- print("File is backed up at PLS3 folder\n")
- elif chosenMenu==7:
- print("\nTill Next Time!")
- sys.exit()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement