对一个班级学生成绩的管理,使学生了解文件的主要操作。详细的目标如下:
- 通过实验中文件的创建、复制和删除等操作完成对文件管理。
- 了解文件、文件目录的结构。
- 掌握文件的读写、文件指针移动基本操作,并了解文件控制的作用。
编写一个学生成绩管理系统程序,该程序具有创建文件、输入班级成绩、保存文件、复制文件等文件功能,以及查询成绩、修改成绩、显示所有的学生成绩等对学生成绩进行管理的功能。
【代码如下】
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct student {
char name[20];
int id;
float score;
} Student;
// 创建文件
void create_file(char *filename) {
FILE *fp = fopen(filename, "w");
if (fp == NULL) {
printf("无法创建文件!\n");
exit(1);
}
fclose(fp);
printf("文件创建成功!\n");
}
// 输入班级成绩
void input_score(char *filename) {
FILE *fp = fopen(filename, "a");
if (fp == NULL) {
printf("无法打开文件!\n");
exit(1);
}
Student student;
printf("请输入学生信息 (name/id/score):\n");
scanf("%s %d %f", student.name, &student.id, &student.score);
fprintf(fp, "%s %d %.2f\n", student.name, student.id, student.score);
fclose(fp);
printf("输入学生成绩成功!\n");
}
// 保存文件
void save_file(char *filename) {
FILE *fp = fopen(filename, "r");
if (fp == NULL) {
printf("无法打开文件!\n");
exit(1);
}
char new_filename[30];
printf("请输入新文件名: ");
scanf("%s", new_filename);
FILE *new_fp = fopen(new_filename, "w");
if (new_fp == NULL) {
printf("无法创建文件!\n");
exit(1);
}
char buffer[50];
while (fgets(buffer, 50, fp) != NULL) {
fputs(buffer, new_fp);
}
fclose(fp);
fclose(new_fp);
printf("文件保存成功!\n");
}
// 复制文件
void copy_file(char *filename) {
FILE *fp = fopen(filename, "r");
if (fp == NULL) {
printf("无法打开文件!\n");
exit(1);
}
char new_filename[30];
printf("请输入新文件名: ");
scanf("%s", new_filename);
FILE *new_fp = fopen(new_filename, "w");
if (new_fp == NULL) {
printf("无法创建文件!\n");
exit(1);
}
char buffer[50];
while (fgets(buffer, 50, fp) != NULL) {
fputs(buffer, new_fp);
}
fclose(fp);
fclose(new_fp);
printf("文件复制成功!\n");
}
// 查询成绩
void query_score(char *filename) {
FILE *fp = fopen(filename, "r");
if (fp == NULL) {
printf("无法打开文件!\n");
exit(1);
}
int id;
printf("请输入学生id: ");
scanf("%d", &id);
char buffer[50];
int found = 0;
while (fgets(buffer, 50, fp) != NULL) {
Student student;
sscanf(buffer, "%s %d %f", student.name, &student.id, &student.score);
if (id == student.id) {
printf("Name: %s, ID: %d, Score: %.2f\n", student.name, student.id, student.score);
found = 1;
break;
}
}
if (!found) {
printf("未找到该学生!\n");
}
fclose(fp);
}
// 修改成绩
void modify_score(char *filename) {
FILE *fp = fopen(filename, "r");
if (fp == NULL) {
printf("无法打开文件!\n");
exit(1);
}
int id;
printf("请输入学生id: ");
scanf("%d", &id);
char buffer[50];
int found = 0;
FILE *new_fp = fopen("temp.txt", "w");
if (new_fp == NULL) {
printf("创建文件失败!\n");
exit(1);
}
while (fgets(buffer, 50, fp) != NULL) {
Student student;
sscanf(buffer, "%s %d %f", student.name, &student.id, &student.score);
if (id == student.id) {
printf("请输入新分数: ");
scanf("%f", &student.score);
fprintf(new_fp, "%s %d %.2f\n", student.name, student.id, student.score);
found = 1;
} else {
fprintf(new_fp, "%s %d %.2f\n", student.name, student.id, student.score);
}
}
fclose(fp);
fclose(new_fp);
remove(filename);
rename("temp.txt", filename);
if (found) {
printf("分数修改成功!\n");
} else {
printf("未找到该学生!\n");
}
}
// 显示所有学生成绩
void display_score(char *filename) {
FILE *fp = fopen(filename, "r");
if (fp == NULL) {
printf("无法打开文件!\n");
exit(1);
}
char buffer[50];
while (fgets(buffer, 50, fp) != NULL) {
Student student;
sscanf(buffer, "%s %d %f", student.name, &student.id, &student.score);
printf("Name: %s, ID: %d, Score: %.2f\n", student.name, student.id, student.score);
}
fclose(fp);
}
int main() {
char filename[30];
printf("请输入文件名: ");
scanf("%s", filename);
create_file(filename);
int choice;
do {
printf("\nMenu:\n");
printf("1. 输入分数\n");
printf("2. 保存文件\n");
printf("3. 复制文件\n");
printf("4. 查询分数\n");
printf("5. 修改分数\n");
printf("6. 显示分数\n");
printf("0. 退出\n");
printf("请输入您的选择: ");
scanf("%d", &choice);
switch (choice) {
case 1:
input_score(filename);
break;
case 2:
save_file(filename);
break;
case 3:
copy_file(filename);
break;
case 4:
query_score(filename);
break;
case 5:
modify_score(filename);
break;
case 6:
display_score(filename);
break;
case 0:
printf("再见!\n");
break;
default:
printf("无效的选择!\n");
break;
}
} while (choice != 0);
return 0;
}
后续可添加使用文件控制,实现指定班级成绩文件的删除操作,实现目录的管理,创建与删除子目录、搜索指定的文件等功能。