学生成绩管理系统设计 一、项目描述 高校的学生成绩管理系统功能基本包括录入学生成绩记录、保存所有学生记录、读取所有学生记录、按总成绩递减输出、按学号查询成绩、修改学生成绩记录、删除学生成绩记录和退出操作,主界面如图10-1所示。实例实现过程中最重要的就是文件的读取和保存操作,如何利用文件知识实现学生成绩管理系统设计呢? 图10-1 学生成绩管理系统主界面 二、项目分析 首先,定义学生成绩结构体类型,其中成员包括学号、姓名、性别、数学成绩、英语成绩、C语言成绩和总成绩,并且定义结构体数组,然后,利用文件的读写操作知识,编写函数实现从文件中逐条读取学生成绩信息功能和保存所有学生成绩信息到文件的功能,最后,编写函数实现显示学生全部信息功能、修改某位同学成绩信息功能、删除某位同学成绩信息功能、查询某位同学成绩信息功能和按照总成绩排序的功能。
时间: 2023-07-10 10:04:42 浏览: 112
三、项目实现
1. 定义学生结构体类型
```
struct student {
char id[20]; // 学号
char name[20]; // 姓名
char gender[5]; // 性别
float math; // 数学成绩
float english; // 英语成绩
float c_language; // C语言成绩
float total; // 总成绩
};
```
2. 定义结构体数组
```
struct student stu[1000];
int n = 0; // 学生总数
```
3. 实现从文件中逐条读取学生成绩信息功能
```
void read_file() {
FILE *fp;
fp = fopen("score.txt", "r");
if (fp == NULL) {
printf("File not found!\n");
return;
}
while (!feof(fp)) {
fscanf(fp, "%s%s%s%f%f%f%f", stu[n].id, stu[n].name, stu[n].gender, &stu[n].math, &stu[n].english, &stu[n].c_language, &stu[n].total);
n++;
}
fclose(fp);
}
```
4. 实现保存所有学生成绩信息到文件的功能
```
void save_file() {
FILE *fp;
fp = fopen("score.txt", "w");
if (fp == NULL) {
printf("File cannot be created!\n");
return;
}
for (int i = 0; i < n; i++) {
fprintf(fp, "%s\t%s\t%s\t%.2f\t%.2f\t%.2f\t%.2f\n", stu[i].id, stu[i].name, stu[i].gender, stu[i].math, stu[i].english, stu[i].c_language, stu[i].total);
}
fclose(fp);
}
```
5. 实现显示学生全部信息功能
```
void display() {
printf("ID\tName\tGender\tMath\tEnglish\tC Language\tTotal\n");
for (int i = 0; i < n; i++) {
printf("%s\t%s\t%s\t%.2f\t%.2f\t%.2f\t%.2f\n", stu[i].id, stu[i].name, stu[i].gender, stu[i].math, stu[i].english, stu[i].c_language, stu[i].total);
}
}
```
6. 实现修改某位同学成绩信息功能
```
void modify() {
char id[20];
printf("Please enter the student ID: ");
scanf("%s", id);
for (int i = 0; i < n; i++) {
if (strcmp(stu[i].id, id) == 0) {
printf("Please enter the new math score: ");
scanf("%f", &stu[i].math);
printf("Please enter the new english score: ");
scanf("%f", &stu[i].english);
printf("Please enter the new C language score: ");
scanf("%f", &stu[i].c_language);
stu[i].total = stu[i].math + stu[i].english + stu[i].c_language;
printf("Modify successfully!\n");
return;
}
}
printf("Student not found!\n");
}
```
7. 实现删除某位同学成绩信息功能
```
void delete() {
char id[20];
printf("Please enter the student ID: ");
scanf("%s", id);
for (int i = 0; i < n; i++) {
if (strcmp(stu[i].id, id) == 0) {
for (int j = i; j < n - 1; j++) {
stu[j] = stu[j + 1];
}
n--;
printf("Delete successfully!\n");
return;
}
}
printf("Student not found!\n");
}
```
8. 实现查询某位同学成绩信息功能
```
void search() {
char id[20];
printf("Please enter the student ID: ");
scanf("%s", id);
for (int i = 0; i < n; i++) {
if (strcmp(stu[i].id, id) == 0) {
printf("ID\tName\tGender\tMath\tEnglish\tC Language\tTotal\n");
printf("%s\t%s\t%s\t%.2f\t%.2f\t%.2f\t%.2f\n", stu[i].id, stu[i].name, stu[i].gender, stu[i].math, stu[i].english, stu[i].c_language, stu[i].total);
return;
}
}
printf("Student not found!\n");
}
```
9. 实现按照总成绩排序的功能
```
void sort() {
for (int i = 0; i < n - 1; i++) {
for (int j = i + 1; j < n; j++) {
if (stu[i].total < stu[j].total) {
struct student temp = stu[i];
stu[i] = stu[j];
stu[j] = temp;
}
}
}
printf("Sort successfully!\n");
}
```
10. 主程序实现
```
int main() {
read_file(); // 读取文件中的学生信息
int choice = 0;
while (1) {
printf("\n");
printf("=============== Student Score Management System ===============\n");
printf("1. Display all students' information\n");
printf("2. Modify a student's score\n");
printf("3. Delete a student's information\n");
printf("4. Search a student's information\n");
printf("5. Sort by total score\n");
printf("6. Exit\n");
printf("Please enter your choice: ");
scanf("%d", &choice);
switch (choice) {
case 1:
display();
break;
case 2:
modify();
save_file(); // 保存修改后的信息到文件
break;
case 3:
delete();
save_file(); // 保存删除后的信息到文件
break;
case 4:
search();
break;
case 5:
sort();
display(); // 显示排序后的信息
break;
case 6:
return 0;
default:
printf("Invalid choice!\n");
break;
}
}
return 0;
}
```
阅读全文