以下实现多功能日历系统代码实现了一个多功能日历系统,主要包含以下功能:
- 显示当前月份的日历
- 在日历上显示事件
- 添加新事件 用户可以根据菜单选择需要的操作,方便地查看日历、添加事件,并在日历上显示事件。此外,代码还可以扩展其他功能,比如修改或删除事件。
以下是一个简单的 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
循环来让用户反复选择操作。每次循环中,我们打印出菜单,让用户选择要执行的操作。根据用户的选择,我们调用相应的函数来完成操作。
当用户选择退出程序时,我们退出循环,结束程序。 这个多功能日历系统可以让用户方便地查看日历,添加事件,并在日历上显示事件。如果需要扩展功能,比如修改或删除事件,可以在代码中添加相应的函数来实现。
评论