• 万年历制作


    #include<iostream>
    #include<iomanip>

    using namespace std;

    void printMonth(int year, int month);
    void printMonthTitle(int year, int month);
    void printMonthName(int month);
    void printMonthBody(int year, int month);
    int getStartDay(int year, int month);
    int getTotalNumberOfDays(int year, int month);
    int getNumberOfDaysInMonth(int year, int month);
    bool isLeapYear(int year);

    int main() {
      cout << "Enter full year (e.g., 2001) : ";
      int year;
      cin >> year;

      cout << "Enter month in number between 1 and 12 : ";
      int month;
      cin >> month;

      printMonth(year, month);

      return 0;
    }

    void printMonth(int year, int month) {
      printMonthTitle(year, month);
      printMonthBody(year, month);
    }

    void printMonthTitle(int year, int month) {
      printMonthName(month);
      cout << " " << year << endl;
      cout << "----------------------------" << endl;
      cout << " Sun Mon Tus Wed Thu Fri Sat" << endl;
    }

    void printMonthName(int month) {
      switch(month) {
        case 1: cout << setw(16) << "Junuary"; break;
        case 2: cout << setw(16) << "February"; break;
        case 3: cout << setw(16) << "March"; break;
        case 4: cout << setw(16) << "April"; break;
        case 5: cout << setw(16) << "May"; break;
        case 6: cout << setw(16) << "June"; break;
        case 7: cout << setw(16) << "July"; break;
        case 8: cout << setw(16) << "August"; break;
        case 9: cout << setw(16) << "September"; break;
        case 10: cout << setw(16) << "October"; break;
        case 11: cout << setw(16) << "November"; break;
        case 12: cout << setw(16) << "December";
      }
    }

    void printMonthBody(int year, int month) {
      int startDay = getStartDay(year, month);
      int numberOfDaysInMonth = getNumberOfDaysInMonth(year, month);
      for (int i = 0; i < startDay; i++) {
        cout << " ";
      }
      for (int i = 1; i <= numberOfDaysInMonth; i++) {
        cout << setw(4) << i;
        if ((i+startDay) % 7 == 0) cout << endl;
      }
    }

    int getStartDay(int year, int month) {
      int startDay1800 = 3;
      int totalNumberOfDays = getTotalNumberOfDays(year, month);
      return (totalNumberOfDays + startDay1800) % 7;
    }

    int getTotalNumberOfDays(int year, int month) {
      int total = 0;
      for (int i = 1800; i < year; i++) {
        if (isLeapYear(i)) total += 366;
        else total += 365;
      }
      for (int i = 1; i < month; i++) {
        total += getNumberOfDaysInMonth(year, i);
      }
      return total;
    }

    int getNumberOfDaysInMonth(int year, int month) {
      if (month == 4 || month == 6 || month == 9 || month == 11) return 30;
      if (month == 2) return isLeapYear(year) ? 29 : 28;
      else return 31;
    }

    bool isLeapYear(int year) {
      return year%4 == 0 && year%100 != 0 || year %400 == 0;
    }

  • 相关阅读:
    【C#/WPF】限制GridSplitter分隔栏的滑动范围
    【C#】访问泛型中的List列表数据
    【C#学习笔记】反射的简单用法
    【C#】获取泛型<T>的真实类型
    【Unity】关于发射子弹、导弹追踪的逻辑
    【转】【Unity】四元数(Quaternion)和旋转
    【Unity】UGUI的Text各种小问题
    【火狐FireFox】同步失败后,书签被覆盖,如何恢复书签
    【转】【Unity】实现全局管理类的几种方式
    【Unity】动态调用其他脚本的函数
  • 原文地址:https://www.cnblogs.com/sysu-zhengwsh/p/3698236.html
Copyright © 2020-2023  润新知