c语言设计一个学生成绩查询系统,提供1.录入数据功能(学号,姓名,一门成绩),2.查询成绩功能(输入学号和姓名,将成绩打印输出) 要求最多可以存储100个学生的成绩,数据需要写入文件
时间: 2024-09-23 12:02:56 浏览: 76
C语言课程设计 学生成绩管理系统
要设计一个简单的学生成绩查询系统,我们可以采用以下几个步骤:
1. **文件操作**:
- 创建一个文本文件用于存储学生信息。假设名为"student_scores.txt",它会存储每行一个学生的信息,格式为学号、姓名和成绩,用逗号分隔。
2. **结构体定义**:
- 使用一个结构体(struct)来表示每个学生,包含学号(int)、姓名(char*)和成绩(float)。
```c
typedef struct {
int student_id;
char name[50];
float grade;
} Student;
```
3. **读写文件函数**:
- `write_score_to_file()` 函数用于向文件写入学生信息。
- `read_score_from_file()` 函数从文件读取学生信息并添加到数组中。
```c
void write_score_to_file(Student* students, int num_students) {
FILE *fp = fopen("student_scores.txt", "a");
for (int i = 0; i < num_students; i++) {
fprintf(fp, "%d,%s,%f\n", students[i].student_id, students[i].name, students[i].grade);
}
fclose(fp);
}
void read_score_from_file(Student** students, int* num_students) {
FILE *fp = fopen("student_scores.txt", "r");
if (!fp) {
printf("Error opening file.\n");
return;
}
rewind(fp); // 移动到文件开头
while (fgets(*students->name, sizeof(*students->name), fp)) { // 逐行读取
sscanf(*students->name, "%d,%[^,],%f", &(*students)->student_id, (*students)->name, &(*students)->grade);
(*students)++;
if ((*students) == (*num_students) + 1) {
break; // 达到最大容量
}
}
fclose(fp);
// 如果读取的数据小于100,填充剩余位置
if (*num_students < 100) {
memset(students[*num_students], 0, sizeof(Student));
}
}
```
4. **主函数**:
- 提供入口点,用户可以选择录入新成绩或查询成绩。
- 对于录入功能,提示用户输入相关信息,并通过`write_score_to_file()`写入文件。
- 对于查询功能,使用`read_score_from_file()`获取所有数据,然后根据输入的学号和姓名查找成绩并输出。
```c
int main() {
Student students[100]; // 存储数组
int num_students = 0;
while (num_students < 100) {
int choice;
printf("1. 添加成绩\n2. 查询成绩\nYour choice: ");
scanf("%d", &choice);
switch (choice) {
case 1:
printf("请输入学号、姓名和成绩:\n");
scanf("%d", &students[num_students].student_id);
fgets(students[num_students].name, sizeof(students[num_students].name), stdin);
students[num_students].grade = atof(gets(stdin)); // 读取浮点数
write_score_to_file(&students, &num_students);
break;
case 2:
read_score_from_file(&students, &num_students);
printf("请输入要查询的学生学号和姓名:\n");
// 这里可以编写代码来按输入查询和显示成绩
break;
default:
printf("Invalid choice.\n");
}
}
return 0;
}
```
阅读全文