学生成绩管理系统c,能够从xlsx文件中读取课程类别为必修课的数据:序号、课程名称、成绩,然后实现以下几个功能:根据课程名称显示对应的序号和成绩,然后对成绩进行排序并显示
时间: 2024-05-09 12:16:43 浏览: 93
以下是一个实现该功能的示例代码:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <libxlsxwriter.h>
#define MAX_LEN 50
typedef struct {
int id;
char name[MAX_LEN];
int score;
} Course;
int compare(const void* a, const void* b) {
return (*(Course*)a).score - (*(Course*)b).score;
}
int main() {
Course courses[100];
char filename[MAX_LEN];
char course_name[MAX_LEN];
printf("请输入文件名: ");
scanf("%s", filename);
printf("请输入课程名称: ");
scanf("%s", course_name);
// 打开 Excel 文件
lxw_workbook *workbook = workbook_new(filename);
if (!workbook) {
printf("无法打开文件 %s\n", filename);
return 1;
}
// 读取数据
int row = 0;
lxw_worksheet *worksheet = workbook_get_worksheet_by_name(workbook, "Sheet1");
while (1) {
char* cell = worksheet_get_string(worksheet, row, 1, NULL);
if (cell == NULL) {
break;
}
if (strcmp(cell, course_name) == 0) {
courses[row].id = worksheet_get_number(worksheet, row, 0, NULL);
strcpy(courses[row].name, cell);
courses[row].score = worksheet_get_number(worksheet, row, 2, NULL);
row++;
}
}
// 根据成绩排序
qsort(courses, row, sizeof(Course), compare);
// 显示结果
printf("序号\t课程名称\t成绩\n");
for (int i = 0; i < row; i++) {
printf("%d\t%s\t\t%d\n", courses[i].id, courses[i].name, courses[i].score);
}
// 关闭 Excel 文件
workbook_close(workbook);
return 0;
}
```
该程序使用 libxlsxwriter 库来读取 Excel 文件,并根据课程名称过滤出必修课的数据。然后,使用快速排序算法对成绩进行排序,并输出结果。请注意,由于该代码是示例代码,可能需要根据具体情况进行修改。
阅读全文