帮我使用c语言完成以下任务下面的课程表记录的是一周从周一到周五每天的课程,编写程序,完成以下功能: (1) 课程表设置,将一个星期的课程数据写入到文件中 table.txt。 (2) 查阅某天课程,随机读取文件中的相关数据。 (3) 查阅整个课程表,读取全部数据。
时间: 2024-12-12 15:16:27 浏览: 7
为了在C语言中完成上述课程表管理的任务,你可以使用标准库函数`fopen`, `fwrite`, 和`fgets`来操作文件。这里是一个简单的示例代码:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_SUBJECTS 5 // 每日课程数最大值
// 结构体用于存储课程信息
typedef struct {
char day[10]; // 课程日期
char subject[MAX_SUBJECTS][50]; // 课程列表
} Course;
// 函数:写入课程表到文件
void write_table(const Course* courses, int days) {
FILE *file = fopen("table.txt", "w");
if (file == NULL) {
printf("Failed to open file.\n");
return;
}
for (int i = 0; i < days; i++) {
fprintf(file, "%s: ", courses[i].day);
for (int j = 0; j < MAX_SUBJECTS && courses[i].subject[j][0] != '\0'; j++) {
fprintf(file, "%s, ", courses[i].subject[j]);
}
fprintf(file, "\n"); // 换行
}
fclose(file);
printf("Table written successfully.\n");
}
// 函数:随机查阅某天课程
Course read_random_course() {
FILE *file = fopen("table.txt", "r");
if (file == NULL) {
printf("File not found or cannot open.\n");
return Course{'', {""}};
}
Course random_course;
srand(time(0)); // 初始化随机种子
int random_day_index = rand() % 5; // 随机选择一天
fseek(file, (random_day_index * sizeof(random_course)) + sizeof(random_course.day), SEEK_SET); // 跳转到相应行
fgets(random_course.day, sizeof(random_course.day), file); // 读取日期
int subjects_read = 0;
while (subjects_read < MAX_SUBJECTS && fgets(random_course.subject[subjects_read], sizeof(random_course.subject[subjects_read]), file)) { // 逐课读取
subjects_read++;
}
random_course.subject[subjects_read] = '\0'; // 添加结束符
fclose(file);
return random_course;
}
// 函数:查阅整个课程表
void read_full_table() {
FILE *file = fopen("table.txt", "r");
if (file == NULL) {
printf("File not found or cannot open.\n");
return;
}
printf("Full course table:\n");
Course full_table[5];
for (int i = 0; i < 5; i++) {
fgets(full_table[i].day, sizeof(full_table[i].day), file);
for (int j = 0; j < MAX_SUBJECTS; j++) {
if (fgets(full_table[i].subject[j], sizeof(full_table[i].subject[j]), file) == NULL) break; // 结束循环
}
printf("%s: ", full_table[i].day);
for (int j = 0; j < MAX_SUBJECTS && full_table[i].subject[j][0] != '\0'; j++) {
printf("%s, ", full_table[i].subject[j]);
}
printf("\n");
}
fclose(file);
}
int main() {
Course mon_to_fri[5] = {
{"Monday", {"Math", "English", "Science", "", ""}},
{"Tuesday", {"History", "Physics", "Chemistry", "", ""}},
{"Wednesday", {"Biology", "Computer Science", "Geography", "", ""}},
{"Thursday", {"Math", "English", "Art", "", ""}},
{"Friday", {"Music", "PE", "Philosophy", "", ""}}
};
write_table(mon_to_fri, 5);
Course random_course = read_random_course();
read_full_table();
return 0;
}
```
在这个例子中,我们首先定义了一个结构体`Course`来表示课程,并提供了几个函数来处理文件操作。`write_table()`函数负责写入课程表,`read_random_course()`随机查询一天的课程,而`read_full_table()`则完整地显示一周的课程。
注意,这个代码假设课程表每个日期下都有固定的课程数目,实际应用中可能需要额外处理空格或其他特殊情况。在运行此代码之前,确保`table.txt`文件不存在,或者清空其中的内容。
阅读全文