void importScores() //把信息录入文件 { int i; int j; FILE* fp; fp = fopen("scores.txt", "r"); //打开文件 if (fp == NULL) { printf("open scores.txt failed!\n"); return; } fscanf(fp, "%d", &courseCount); //写入课程数目 for (i = 0;i < courseCount;i++) //写入课程信息 { Course course; fscanf(fp, "%s", course.name); courses[i] = course; } fscanf(fp, "%d", &studentCount); for ( i = 0; i < studentCount; i++) { Student stu; fscanf(fp, "%s%s", stu.id, stu.name); //输入学生学号,姓名 for ( j = 0; j < courseCount; j++) //输入课程成绩 { fscanf(fp, "%d", &stu.scores[j]); } students[i] = stu; } fclose(fp); //关闭文件 }
时间: 2024-02-14 20:21:40 浏览: 25
这个函数的作用是从文件中读取学生的信息和成绩,并将其保存在程序中。函数首先打开名为“scores.txt”的文件,然后读取课程数量和每个课程的名称,并将其保存在程序中的“Course”结构体数组中。接下来,函数读取学生数量和每个学生的学号、姓名和每门课程的成绩,并将其保存在程序中的“Student”结构体数组中。最后,函数关闭文件并结束。这个函数是一个非常重要的函数,因为它可以让我们在程序中保存学生的信息和成绩,并在需要时随时进行查询和修改。
相关问题
void initializeData() { // 计算综合成绩和实得学分 for (int i = 0; i < numScores; i++) { Score *score = &scores[i]; int experimentGrade = score->experimentGrade; if (experimentGrade == -1) { score->totalGrade = score->dailyGrade * 0.3 + score->finalGrade * 0.7; } else { score->totalGrade = score->dailyGrade * 0.15 + experimentGrade * 0.15 + score->finalGrade * 0.7; } if (score->totalGrade >= 90) { score->earnedCredit = score->credit; } else if (score->totalGrade >= 80) { score->earnedCredit = score->credit * 0.8; } else if (score->totalGrade >= 70) { score->earnedCredit = score->credit * 0.75; } else if (score->totalGrade >= 60) { score->earnedCredit = score->credit * 0.6; } else { score->earnedCredit = 0; } } printf("数据初始化完成。\n"); }如何将运算得到的综合成绩和实得学分录入到TXT文件中
你可以使用C语言中的文件操作函数将运算得到的综合成绩和实得学分录入到TXT文件中。具体步骤如下:
1. 使用fopen函数打开要写入的TXT文件,可以选择以追加或覆盖的方式打开文件。
2. 在循环中,将每个学生的综合成绩和实得学分写入TXT文件中。可以使用fprintf函数将数据格式化输出到文件中。
3. 循环结束后,使用fclose函数关闭文件。
一段示例代码如下:
```
void writeToFile() {
FILE *fp = fopen("data.txt", "w"); // 打开文件,以覆盖的方式写入数据
if (fp == NULL) {
printf("无法打开文件。\n");
return;
}
// 遍历所有成绩数据,将综合成绩和实得学分写入文件中
for (int i = 0; i < numScores; i++) {
Score *score = &scores[i];
fprintf(fp, "学号:%s,姓名:%s,综合成绩:%f,实得学分:%f\n", score->studentId, score->name, score->totalGrade, score->earnedCredit);
}
fclose(fp); // 关闭文件
printf("数据已写入文件。\n");
}
```
在这个示例代码中,我们使用fprintf函数将每个学生的综合成绩和实得学分格式化输出到文件中。最后关闭文件并打印一条消息。
1. 录入全部歌手的基本信息:歌手编号及姓名。 2. 10 个评委的打分随机生成,分数在 0-100 之间,歌手最后得分去掉一个最高分和最低分,求平均值。 3. 显示全部歌手的信息。 4. 对全部歌手按成绩排序。 5. 根据歌手编号,查询该歌手全部信息。 6. 添加一个歌手。 7. 将全部歌手信息保存到一个文件之中。 8. 建立如图 28.1 所示菜单实现上述功能。编程
好的,以下是 C 语言的代码实现:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
#define MAX_SINGERS 100
#define MAX_NAME_LENGTH 50
// 歌手结构体
typedef struct Singer {
int id;
char name[MAX_NAME_LENGTH];
int scores[10];
float avg_score;
} Singer;
Singer singers[MAX_SINGERS];
int singer_count = 0;
// 随机生成分数
int random_score() {
return rand() % 101;
}
// 计算平均分
void calculate_avg_score(Singer *singer) {
int max_score = -1, min_score = 101, total_score = 0;
for (int i = 0; i < 10; i++) {
int score = singer->scores[i];
if (score > max_score) {
max_score = score;
}
if (score < min_score) {
min_score = score;
}
total_score += score;
}
total_score -= max_score + min_score;
singer->avg_score = total_score / 8.0;
}
// 录入歌手信息
void input_singer() {
if (singer_count >= MAX_SINGERS) {
printf("歌手数量已达到上限,无法添加新歌手!\n");
return;
}
Singer *singer = &singers[singer_count];
printf("请输入歌手编号:");
scanf("%d", &singer->id);
printf("请输入歌手姓名:");
scanf("%s", singer->name);
for (int i = 0; i < 10; i++) {
singer->scores[i] = random_score();
}
calculate_avg_score(singer);
singer_count++;
}
// 显示全部歌手信息
void show_all_singers() {
printf("编号\t姓名\t平均分\n");
for (int i = 0; i < singer_count; i++) {
Singer *singer = &singers[i];
printf("%d\t%s\t%.2f\n", singer->id, singer->name, singer->avg_score);
}
}
// 按成绩排序
int compare_singers(const void *a, const void *b) {
Singer *singer_a = (Singer *)a;
Singer *singer_b = (Singer *)b;
if (singer_a->avg_score < singer_b->avg_score) {
return 1;
} else if (singer_a->avg_score > singer_b->avg_score) {
return -1;
}
return 0;
}
void sort_singers() {
qsort(singers, singer_count, sizeof(Singer), compare_singers);
}
// 根据编号查询
void search_singer_by_id() {
int id;
printf("请输入要查询的歌手编号:");
scanf("%d", &id);
for (int i = 0; i < singer_count; i++) {
Singer *singer = &singers[i];
if (singer->id == id) {
printf("编号:%d\n", singer->id);
printf("姓名:%s\n", singer->name);
printf("成绩:");
for (int j = 0; j < 10; j++) {
printf("%d ", singer->scores[j]);
}
printf("\n");
printf("平均分:%.2f\n", singer->avg_score);
return;
}
}
printf("没有找到编号为 %d 的歌手!\n", id);
}
// 保存到文件
void save_to_file() {
FILE *fp = fopen("singers.txt", "w");
if (fp == NULL) {
printf("保存文件失败!\n");
return;
}
for (int i = 0; i < singer_count; i++) {
Singer *singer = &singers[i];
fprintf(fp, "%d %s ", singer->id, singer->name);
for (int j = 0; j < 10; j++) {
fprintf(fp, "%d ", singer->scores[j]);
}
fprintf(fp, "\n");
}
fclose(fp);
printf("保存文件成功!\n");
}
// 从文件读取
void load_from_file() {
FILE *fp = fopen("singers.txt", "r");
if (fp == NULL) {
printf("读取文件失败!\n");
return;
}
singer_count = 0;
while (!feof(fp)) {
Singer *singer = &singers[singer_count];
fscanf(fp, "%d %s", &singer->id, singer->name);
for (int j = 0; j < 10; j++) {
fscanf(fp, "%d", &singer->scores[j]);
}
calculate_avg_score(singer);
singer_count++;
}
fclose(fp);
printf("读取文件成功!\n");
}
// 菜单
void show_menu() {
printf("***************\n");
printf("1. 录入歌手信息\n");
printf("2. 显示全部歌手信息\n");
printf("3. 按成绩排序\n");
printf("4. 根据编号查询\n");
printf("5. 添加一个歌手\n");
printf("6. 保存到文件\n");
printf("7. 从文件读取\n");
printf("0. 退出程序\n");
printf("***************\n");
}
int main() {
srand((unsigned int)time(NULL));
while (1) {
show_menu();
int choice;
printf("请输入要执行的操作:");
scanf("%d", &choice);
switch (choice) {
case 0:
printf("程序结束,谢谢使用!\n");
return 0;
case 1:
input_singer();
break;
case 2:
show_all_singers();
break;
case 3:
sort_singers();
show_all_singers();
break;
case 4:
search_singer_by_id();
break;
case 5:
input_singer();
break;
case 6:
save_to_file();
break;
case 7:
load_from_file();
break;
default:
printf("无效的操作!\n");
break;
}
}
return 0;
}
```
注:为了方便测试,随机生成分数的代码使用了 `rand()` 函数,需要在代码开头加上 `#include <time.h>` 和 `srand((unsigned int)time(NULL));`。