对下面万年历代码用面向对象编程设计进行改写(不使用calendar库)

对下面万年历代码用面向对象编程设计进行改写(不使用calendar库)

MonthDays_year = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
MonthDays_leapy = [31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
twelfthMonth = [1, 3, 5, 7, 8, 10, 12]
weeklist = {0: 'Monday', 1: 'Tuesday', 2: 'Wednesday', 3: 'Thursday', 4: 'Frindy', 5: 'Saturday', 6: 'Sunday'}
def leapyear(year):
    if year % 4 == 0 and year % 100 != 0 or year % 400 == 0:
        l = 1
    else:
        l = 0
    return l
def yeardays(year):
    day1 = 0
    if year >= 1900:
        for i in range(1900, year):
            if leapyear(i) == 1:
                day1 += 366
            else:
                day1 += 365
    else:
        for i in range(year, 1900):
            if leapyear(i) == 1:
                day1 += 366
            else:
                day1 += 365
    return day1
def monthdays(year, month):
    day2 = 0
    if leapyear(year) == 1:
        for i in range(0, month):
            day2 = day2 + MonthDays_leapy[i]
    else:
        for i in range(0, month):
            day2 = day2 + MonthDays_year[i]
    return day2
def monthdays1(year, month):
    day2 = 0
    if leapyear(year) == 1:
        for i in range(0, month - 1):
            day2 = day2 + MonthDays_leapy[i]
    else:
        for i in range(0, month - 1):
            day2 = day2 + MonthDays_year[i]
    return day2
def thisMonthDays(year, month):
    if month in twelfthMonth:
        return 31
    elif leapyear(year) == 1 and month == 2:
        return 29
    elif leapyear(year) == 0 and month == 2:
        return 28
    else:
        return 30
def CaculateWeekDay(year, month, days):
    m = 0
    yeardays(year)
    monthdays(year, month)
    m = yeardays(year) + monthdays1(year, month) + days - 1
    print('输入日期为:', weeklist[m % 7])
def printTitle(year, month):
    print("-" * 36, "%s年%d月" % (year, month), "-" * 36)
    s = ("星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六")
    for i in s:
        print("%-10s" % i, end="")
    print()
def week(year, month):
    thisDay = 0
    yDays = yeardays(year)
    mDays = monthdays1(year, month)
    if year >= 1900:
        sumDays = yDays + mDays
        thisDay = (sumDays % 7) + 1
    else:
        sumDays = yDays - mDays
        thisDay = 7 - (sumDays % 7)
    return thisDay
def Calendarmonth(year, month):
    printTitle(year, month)
    day1 = week(year, month)
    day2 = thisMonthDays(year, month)
    if day1 != 7:
        for i in range(1, day1 + 1):
            s = " "
            print("%-13s" % s, end="")
    for j in range(day1 + 1, day1 + day2 + 1):

        if j % 7 == 0:
            print("%-13d" % (j - day1))
        else:
            print("%-13d" % (j - day1), end="")
def Calendaryear(year):
    for i in range(1, 13):
        Calendarmonth(year, i)
        print()
def Calendar():
    year = int(input('请输入要查询的年份:'))
    month = int(input('请输入要查询的月份,若仅查年请输入0:'))
    days = int(input('请输入要查询的日期,若仅查月历或年历输入0:'))
    if year != 0 and month != 0 and days != 0:
        CaculateWeekDay(year, month, days)
    elif year != 0 and month != 0 and days == 0:
        Calendarmonth(year, month)
    else:
        Calendaryear(year)
Calendar()

MonthDays_year = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
MonthDays_leapy = [31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
twelfthMonth = [1, 3, 5, 7, 8, 10, 12]
weeklist = {0: 'Monday', 1: 'Tuesday', 2: 'Wednesday', 3: 'Thursday', 4: 'Frindy', 5: 'Saturday', 6: 'Sunday'}

class Caculate():
    def __init__(self,year,month,days):
        self.year = year
        self.month = month
        self.days = days

    def leapyear(self,year):
        if year % 4 == 0 and year % 100 != 0 or year % 400 == 0:
            l = 1
        else:
            l = 0
        return l

    def yeardays(self):
        day1 = 0
        if self.year >= 1900:
            for i in range(1900, self.year):
                if self.leapyear(i) == 1:
                    day1 += 366
                else:
                    day1 += 365
        else:
            for i in range(self.year, 1900):
                if self.leapyear(i) == 1:
                    day1 += 366
                else:
                    day1 += 365
        return day1

    def monthdays(self):
        day2 = 0
        if self.leapyear(self.year) == 1:
            for i in range(0, self.month):
                day2 = day2 + MonthDays_leapy[i]
        else:
            for i in range(0, self.month):
                day2 = day2 + MonthDays_year[i]
        return day2
    def monthdays1(self):
        day2 = 0
        if self.leapyear(self.year) == 1:
            for i in range(0,self.month - 1):
                day2 = day2 + MonthDays_leapy[i]
        else:
            for i in range(0, self.month - 1):
                day2 = day2 + MonthDays_year[i]
        return day2
    def thisMonthDays(self):
        if self.month in twelfthMonth:
            return 31
        elif self.leapyear(self.year) == 1 and self.month == 2:
            return 29
        elif self.leapyear(self.year) == 0 and self.month == 2:
            return 28
        else:
            return 30
    def CaculateWeekDay(self):
        m = 0
        self.monthdays()
        m = self.yeardays() + self.monthdays1() + self.days - 1
        print('输入日期为:', weeklist[m % 7])
    def printTitle(self):
        print("-" * 36, "%s年%d月" % (self.year, self.month), "-" * 36)
        s = ("星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六")
        for i in s:
            print("%-10s" % i, end="")
        print()
    def week(self):
        thisDay = 0
        yDays = self.yeardays()
        mDays = self.monthdays1()
        if self.year >= 1900:
            sumDays = yDays + mDays
            thisDay = (sumDays % 7) + 1
        else:
            sumDays = yDays - mDays
            thisDay = 7 - (sumDays % 7)
        return thisDay

    def Calendarmonth(self):
        day1 = self.week()
        day2 = self.thisMonthDays()
        if day1 != 7:
            for i in range(1, day1 + 1):
                s = " "
                print("%-13s" % s, end="")
        for j in range(day1 + 1, day1 + day2 + 1):
            if j % 7 == 0:
                print("%-13d" % (j - day1))
            else:
                print("%-13d" % (j - day1), end="")

    def Calendaryear(self):
        for i in range(1, 13):
            self.Calendarmonth()
            print()


if __name__ == "__main__":
    year = int(input('请输入要查询的年份:'))
    month = int(input('请输入要查询的月份,若仅查年请输入0:'))
    days = int(input('请输入要查询的日期,若仅查月历或年历输入0:'))

    if year != 0 and month != 0 and days != 0:
        Caculate(year,month,days).CaculateWeekDay()
    elif year != 0 and month != 0 and days == 0:
        Caculate(year, month, days).Calendarmonth()
    else:
        Caculate(year, month, days).Calendaryear()