Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import random
- import string
- from datetime import datetime, timedelta
- class LibraryRecord:
- def __init__(self, first_name, last_name, email, address, city, state, zip_code, phone_number):
- self.first_name = first_name
- self.last_name = last_name
- self.email = email
- self.address = address
- self.city = city
- self.state = state
- self.zip_code = zip_code
- self.phone_number = phone_number
- self.books_checked_out = {}
- def generate_library_records(self, num_records):
- library_records = []
- for _ in range(num_records):
- first_name = ''.join(random.choices(string.ascii_uppercase + string.ascii_lowercase, k=8))
- last_name = ''.join(random.choices(string.ascii_uppercase + string.ascii_lowercase, k=8))
- email = first_name.lower() + last_name.lower() + '@example.com'
- address = ''.join(random.choices(string.ascii_uppercase + string.ascii_lowercase + '0123456789', k=10))
- city = ''.join(random.choices(string.ascii_uppercase + string.ascii_lowercase, k=6))
- state = ''.join(random.choices(string.ascii_uppercase, k=2))
- zip_code = ''.join(random.choices(string.digits, k=5))
- phone_number = ''.join(random.choices(string.digits, k=10))
- record = LibraryRecord(first_name, last_name, email, address, city, state, zip_code, phone_number)
- record.generate_books_checked_out(random.randint(1, 5))
- library_records.append(record)
- return library_records
- def generate_books_checked_out(self, num_books):
- for _ in range(num_books):
- book_title = 'Book ' + ''.join(random.choices(string.ascii_uppercase + string.ascii_lowercase, k=8))
- book_author = 'Author ' + ''.join(random.choices(string.ascii_uppercase + string.ascii_lowercase, k=8))
- book_publisher = 'Publisher ' + ''.join(random.choices(string.ascii_uppercase + string.ascii_lowercase, k=8))
- publication_date = ''.join(random.choices(string.digits, k=4))
- edition = random.randint(1, 10)
- isbn = ''.join(random.choices(string.digits, k=10))
- subject_classification_number = ''.join(random.choices(string.ascii_uppercase + string.digits, k=4))
- number_of_copies = random.randint(1, 5)
- barcode_number = ''.join(random.choices(string.digits, k=8))
- shelf_location = 'Shelf ' + ''.join(random.choices(string.ascii_uppercase + string.digits, k=4))
- status = random.choice(['available', 'checked out', 'lost', 'on hold'])
- book = Book(book_title, book_author, book_publisher, publication_date, edition, isbn,
- subject_classification_number, number_of_copies, barcode_number, shelf_location, status)
- book.generate_books_borrow_history(random.randint(1, 3))
- book.generate_book_acquisition_records()
- book.generate_book_condition_details()
- book.generate_book_reviews()
- self.books_checked_out[book_title] = book
- class Book:
- def __init__(self, title, author, publisher, publication_date, edition, isbn,
- subject_classification_number, number_of_copies, barcode_number, shelf_location, status):
- self.title = title
- self.author = author
- self.publisher = publisher
- self.publication_date = publication_date
- self.edition = edition
- self.isbn = isbn
- self.subject_classification_number = subject_classification_number
- self.number_of_copies = number_of_copies
- self.barcode_number = barcode_number
- self.shelf_location = shelf_location
- self.status = status
- self.books_borrow_history = {}
- self.book_acquisition_records = {}
- self.book_condition_details = {}
- self.book_reviews = {}
- def generate_books_borrow_history(self, num_events):
- for _ in range(num_events):
- checkout_date = datetime.now() - timedelta(days=random.randint(1, 365))
- return_date = checkout_date + timedelta(days=random.randint(1, 30))
- borrower_info = BorrowerInfo(''.join(random.choices(string.digits, k=6)), random.randint(0, 50))
- self.books_borrow_history[checkout_date.strftime('%Y-%m-%d %H:%M:%S')] = {'checkout_date': checkout_date.strftime('%Y-%m-%d %H:%M:%S'), 'return_date': return_date.strftime('%Y-%m-%d %H:%M:%S'), 'borrower_info': borrower_info}
- def generate_book_acquisition_records(self):
- acquisition_method = random.choice(['purchase', 'donation'])
- purchase_info = {'purchase_method': acquisition_method, 'purchase_info': None, 'donation_info': None, 'book_cost': random.randint(1, 50), 'acquisition_date': datetime.now().strftime('%Y-%m-%d %H:%M:%S')}
- if acquisition_method == 'purchase':
- purchase_info['purchase_info'] = ''.join(random.choices(string.ascii_uppercase + string.ascii_lowercase, k=8))
- else:
- purchase_info['donation_info'] = ''.join(random.choices(string.ascii_uppercase + string.ascii_lowercase, k=8))
- self.book_acquisition_records = purchase_info
- def generate_book_condition_details(self):
- physical_condition = random.choice(['good', 'fair', 'poor'])
- damages = ''.join(random.choices(string.ascii_lowercase, k=random.randint(0, 20)))
- self.book_condition_details = {'physical_condition': physical_condition, 'damages': damages, 'repairs': {}}
- if damages:
- self.generate_repairs(random.randint(0, 3))
- def generate_repairs(self, num_repairs):
- for _ in range(num_repairs):
- repair_date = datetime.now() - timedelta(days=random.randint(1, 365))
- repair_amount = random.randint(1, 10)
- repair_details = ''.join(random.choices(string.ascii_lowercase, k=random.randint(0, 20)))
- self.book_condition_details['repairs'][repair_date.strftime('%Y-%m-%d %H:%M:%S')] = {'repair_date': repair_date.strftime('%Y-%m-%d %H:%M:%S'), 'repair_amount': repair_amount, 'repair_details': repair_details}
- def generate_book_reviews(self):
- for _ in range(random.randint(0, 3)):
- review_date = datetime.now() - timedelta(days=random.randint(1, 365))
- username = ''.join(random.choices(string.ascii_lowercase, k=8))
- details = ''.join(random.choices(string.ascii_lowercase, k=random.randint(0, 50)))
- star_rating = random.randint(1, 5)
- self.book_reviews[review_date.strftime('%Y-%m-%d %H:%M:%S')] = {'review_date': review_date.strftime('%Y-%m-%d %H:%M:%S')}
- class BorrowerInfo:
- def __init__(self, library_card_number, book_fines):
- self.library_card_number = library_card_number
- self.book_fines = book_fines
Advertisement
Add Comment
Please, Sign In to add comment