C语言代码实现多功能日历系统

以下实现多功能日历系统代码实现了一个多功能日历系统,主要包含以下功能:

  1. 显示当前月份的日历
  2. 在日历上显示事件
  3. 添加新事件 用户可以根据菜单选择需要的操作,方便地查看日历、添加事件,并在日历上显示事件。此外,代码还可以扩展其他功能,比如修改或删除事件。

以下是一个简单的 C 语言代码示例,用于实现多功能日历系统:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
// 定义事件结构体
struct event {
    int year;  // 年份
    int month;  // 月份
    int day;  // 日期
    char content[1000];  // 事件内容
};
// 全局变量,保存所有事件的数组
struct event events[100];
int event_count = 0;
// 显示日历
void show_calendar(int year, int month) {
    printf("     %d年%d月\n", year, month);
    printf("日 一 二 三 四 五 六\n");
    int days_in_month[] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};  // 每个月的天数
    if ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0) {
        days_in_month[1] = 29;  // 如果是闰年,2月有29天
    }
    int start_day = (year - 1) * 365 + (year - 1) / 4 - (year - 1) / 100 + (year - 1) / 400;  // 当前年份1月1日是星期几
    for (int i = 1; i < month; i++) {
        start_day += days_in_month[i - 1];  // 加上前面的月份天数
    }
    int end_day = start_day + days_in_month[month - 1] - 1;  // 当前月份的最后一天是星期几
    for (int i = 0; i < start_day % 7; i++) {
        printf("   ");  // 打印月份第一天之前的空格
    }
    for (int i = 1; i <= days_in_month[month - 1]; i++) {
        printf("%2d ", i);  // 打印日期
        if ((i + start_day) % 7 == 0) {
            printf("\n");  // 每周换行
        }
    }
    printf("\n");
}
// 显示日历和事件
void show_calendar_with_events(int year, int month) {
    show_calendar(year, month);  // 先打印日历
    printf("事件列表:\n");
    for (int i = 0; i < event_count; i++) {
        if (events[i].year == year && events[i].month == month) {
            printf("%d-%02d-%02d %s\n", events[i].year, events[i].month, events[i].day, events[i].content);
        }
    }
}
// 添加事件
void add_event() {
    // 从用户输入中读取事件的年份、月份、日期和内容
    int year, month, day;
    char content[1000];
    printf("请输入事件的年份:");
    scanf("%d", &year);
    printf("请输入事件的月份:");
    scanf("%d", &month);
    printf("请输入事件的日期:");
    scanf("%d", &day);
    printf("请输入事件的内容:");
    scanf("%s", content);
    // 将事件加入全局数组中
    events[event_count].year = year;
    events[event_count].month = month;
    events[event_count].day = day;
    strcpy(events[event_count].content, content);
    event_count++;
    printf("事件添加成功!\n");
}
int main() {
    while (1) {
        // 显示菜单,让用户选择下一步操作
        printf("\n请选择下一步操作:\n");
        printf("1. 显示当前月份日历\n");
        printf("2. 显示当前月份日历和事件\n");
        printf("3. 添加事件\n");
        printf("4. 退出程序\n");
        int choice;
        scanf("%d", &choice);
        switch (choice) {
            case 1: {
                time_t now = time(NULL);
                struct tm *tm_now = localtime(&now);
                int year = tm_now->tm_year + 1900;
                int month = tm_now->tm_mon + 1;
                show_calendar(year, month);
                break;
            }
            case 2: {
                time_t now = time(NULL);
                struct tm *tm_now = localtime(&now);
                int year = tm_now->tm_year + 1900;
                int month = tm_now->tm_mon + 1;
                show_calendar_with_events(year, month);
                break;
            }
            case 3:
                add_event();
                break;
            case 4:
                printf("感谢使用多功能日历系统,再见!\n");
                return 0;
            default:
                printf("无效的操作!\n");
        }
    }
    return 0;
}

在这个示例中我们定义了一个 event 结构体来表示一个事件,包含年份、月份、日期和事件内容。我们使用全局变量 events 来保存所有事件的数组,以及 event_count 来保存事件的数量。

show_calendar 函数中,我们使用了一个数组 days_in_month 来保存每个月的天数,然后根据当前年份和月份计算出当前月份的第一天是星期几,以及当前月份的最后一天是星期几。然后我们循环打印每个日期,并根据需要换行。

show_calendar_with_events 函数中,我们先调用 show_calendar 函数打印出当前月份的日历,然后遍历所有事件,找到属于当前月份的事件,打印出来。 在 add_event 函数中,我们从用户输入中读取事件的年份、月份、日期和内容,然后将事件加入全局的事件数组中。

main 函数中,我们使用一个 while 循环来让用户反复选择操作。每次循环中,我们打印出菜单,让用户选择要执行的操作。根据用户的选择,我们调用相应的函数来完成操作。

当用户选择退出程序时,我们退出循环,结束程序。 这个多功能日历系统可以让用户方便地查看日历,添加事件,并在日历上显示事件。如果需要扩展功能,比如修改或删除事件,可以在代码中添加相应的函数来实现。

 
  • 万年历代码
  • 万年历功能
  • 数组
  • 日历功能
  • 全局变量