11. 保存班级信息功能的实现
保存班级信息功能是将 class_rooms 结构体数据存储于某个文件中。文件格式指定为 CSV 文件格式。
其默认的存档文件定义如下:
// 默认的文档存储路径
#define DEFAULT_DOC_PATHNAME "./students.csv"
存档后的 csv文件格式如下:
班级名称
学生姓名
语文成绩
数学成绩
一年1班
张三
100
99
一年1班
李四
98
97
一年2班
王五
96
95
一年2班
赵六
94
93
从上述表格可以看出,班级名称相同,则属于一个班内的学生。
具体实现方法分为两部分,第一部分 school 模块中的 save_to_csv_file 负责打开文件,然后遍历每一个班级。第二部分再由各个班级模块 class_room 中的 writer_to_csv_writer 负责自己班级的学生信息写入文件中。
具体代码如下
文件 school.c
// 保存班级信息,成功返回 1,失败返回 0;
int save_to_csv_file(const char *path_name)
{
const char * header = "班级名称,学生姓名,语文成绩,数学成绩";
FILE * file = fopen(path_name, "w"); // 打开文件
int i;
if (NULL == file) {
printf("打开文件失败,保存文件失败!\n");
return 0;
}
fprintf(file, "%s\r\n", header);
for (i = 0; i < class_room_count; i++) {
writer_to_csv_writer(&class_rooms[i], file);
}
fclose(file);
return 1;
}
文件 class_room.c
// 写入一个班级的学生数据
void writer_to_csv_writer(class_room_t *aclass, FILE *csv_file)
{
int i;
for (i = 0; i < aclass->student_count; i++) {
student_t *astu = &aclass->student[i];
fprintf(csv_file, "%s,%s,%d,%d\r\n", aclass->class_title,
astu->name, astu->chinese_score, astu->math_score);
}
}