Answered step by step
Verified Expert Solution
Link Copied!

Question

1 Approved Answer

The goal of this project is to create a model that adds People to a database (list). To start with, you have to carefully distinguish

The goal of this project is to create a model that adds People to a database (list).

To start with, you have to carefully distinguish between the person.py file and the persons.py file. The first file is where all the persons basic information are handled, where the second file is there to hold a set of these person's objects.

You should start by implementing the person.py file. Many methods are either implemented for you or you are given a skeleton. Any comment that says "Fix Me" means the method should be reimplemented.

To completely fix the Person class, you have to fix the method in the utility.py file. There is a test file name test_utility.py given just for this task. Also, you are given full instructions on the utility file itself.

Next, you should move to the persons.py file. There two methods that needs fixing. The first is given (remove). Follow the instructions given to implement it correctly. The other methods (append) is not given at all. However, there is a comment that describes what it should do.

Now you have the Model files fixed. Next, you should move to the controller file. You are given an example on how to add a student information. You need to do the same for the faculty case.

The CLI class is almost completely given for you. All you need to add is the key for the fourth case "remove person". Use all the information given to you in the class to understand how the system as a whole works.

person.py :

import utility

from datetime import datetime

class Person:

def __init__(self, firstname: str, lastname: str, date_of_birth: str): """ Initialize a persons object. Although the date_of_birth is of type str, the initializer here should take care of converting it to datetime object.

Hint: Fix what is in the util file!

:param firstname: The person's first name. :param lastname: The person's last name. :param date_of_birth: The person's date of birth as a string. """ self._first_name = firstname self._last_name = lastname # TODO: Fix Me! The _dob should take a datetime object based on the passed string. self._dob = None

def get_name(self) -> str: """ Format the name such that the last name appears before the first name. Example, my name should be written as 'Alsaeed, Ziyad'. :return: A string of the full name where the last name appears first, and they are seperated by a comma. """ # TODO: Fix Me! pass

def get_age(self) -> int: """ Calculate the age of the person given today's date and their date of birth. Hint: there are 365.2425 days in a year! :return: The age of the person in years as an integer. """ # TODO: Fix Me! pass

def __str__(self): """ Format the object to print the full name with the age all together. :return: """ return f"{self.get_name()}: {self.get_age()}"

class Faculty(Person):

def __init__(self, firstname: str, lastname: str, date_of_birth: str, office: int): super().__init__(firstname=firstname, lastname=lastname, date_of_birth=date_of_birth) self._office = office

def get_office_number(self) -> int: """ Get the faculty office number! """ # TODO: Fix Me! pass

def __str__(self): return f"Faculty: {super().__str__()} | Office: {self.get_office_number()}"

class Student(Person):

def __init__(self, firstname: str, lastname: str, date_of_birth: str, sid: int): super().__init__(firstname=firstname, lastname=lastname, date_of_birth=date_of_birth) self._sid = sid

def get_student_id(self) -> int: """ Get the student's id number! """ # TODO: Fix Me! pass

def __str__(self): return f"Student: {super().__str__()} | SID: {self.get_student_id()}"

persons.py :

""" A person list module where we keep track of all the persons added to our database.

The class here should wrap the list class instead of inheriting it.

"""

from typing import List from person import Person

class PersonList: """ A person list class. It wraps the built-in list class to keep track of all the person's information added """

def __init__(self): """ Start by initializing an empty list. Preferably indicate the type of the list and what it takes. """ self.people: List[Person] = []

def get_people(self) -> list: """ Return all the person objects in the listed sorted based on their get_name(). :return: A sorted list of the people variable. """ return sorted(self.people, key=lambda person: person.get_name())

def remove(self, last_name: str): """ Given some person last_name, remove any matches to it. :param last_name: A person(s) last name to be removed if found in the list of people. """ # TODO: Fix Me! this method takes a string as a last_name and remove it from the list if it exist. pass

# TODO: Add an "append" method that takes a Person and add it to the list. No Skeleton given!

controller.py :

""" This is the Controller Module. Although we might not implement it to be perfect, the hope is that most of the methods here will not change with any UI changes.

"""

from cli import CLI from persons import PersonList from person import Student, Faculty

class Controller:

def __init__(self): self._persons = PersonList() self._view = CLI()

def run(self, args: list): """

:param args: :return: """ while True: inp = self._view.show_menu() if inp == "1": # add student self.add_student(self._view.add_student()) elif inp == "2": # add teacher self.add_faculty(self._view.add_faculty()) elif inp == "3": # list people self._view.list_people(self._persons.get_people()) # TODO: Fix Me! Where is case #4? (it is used to remove a person by lastname) elif inp == "5": # exit break else: self._view.show_error("Invalid Input!")

def add_student(self, inp: str): """ Add a student information using the CLI passed inputs. :param inp: the student information as given in the command line. """ data = inp.split(" ") try: p = Student(data[0], data[1], data[2], int(data[3])) self._persons.append(p) except SyntaxError as e: # notify the view of the error! self._view.show_error(f"Unable to parse input! {e}")

def add_faculty(self, inp: str): """ Add a student information using the CLI passed inputs. :param inp: the student information as given in the command line. """ # TODO: Fix Me! same as seen in the add_student function. pass

def remove_person(self, inp: str): """ Remove a person from the list of persons using their last name This should call the remove function on the PersonList class. """ # TODO: Fix Me! pass

utility.py:

""" All the utility functions needed to easily complete this project!

"""

from datetime import datetime

def convert_string_to_datetime(date: str) -> datetime: """ Takes a date in a string format (e.g., `2022-10-05`) and returns a datetime object using the format. If the string given is wrong, it throws and error.

Hint: Search for "python split a string by delimiter"!

:param date: a string representing the date. :return: A datetime object reflecting the date given as a string. """ # TODO: Fix Me! pass

Step by Step Solution

There are 3 Steps involved in it

Step: 1

blur-text-image

Get Instant Access to Expert-Tailored Solutions

See step-by-step solutions with expert insights and AI powered tools for academic success

Step: 2

blur-text-image

Step: 3

blur-text-image

Ace Your Homework with AI

Get the answers you need in no time with our AI-driven, step-by-step assistance

Get Started

Recommended Textbook for

DB2 11 The Database For Big Data And Analytics

Authors: Cristian Molaro, Surekha Parekh, Terry Purcell, Julian Stuhler

1st Edition

1583473858, 978-1583473856

More Books

Students also viewed these Databases questions

Question

5. Describe how contexts affect listening

Answered: 1 week ago