#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
typedef struct {
char name[50];
int id;
int age;
float grade;
} Student;
//1.添加学生信息:包括学生的姓名、学号、年龄、成绩等。
//count指针定义学生数量
void addStudent(Student* students, int* count)
{
//Student addstudent;
printf("请输入所添加学生的姓名:");
scanf("%s", students[*count].name);
printf("请输入所添加学生的学号:");
scanf("%d", &students[*count].id);
printf("请输入所添加学生的年龄:");
scanf("%d", &students[*count].age);
printf("请输入所添加学生的成绩:");
scanf("%f", &students[*count].grade);
(*count)++;
}
//2.删除学生信息:通过学号删除学生信息
void deleteStudent(Student* students, int* count, int id)
{
for (int i = 0; i < *count; i++)
{
if (students[i].id == id)
{
for (int j = i; j < *count; j++)
{
students[j] = students[j + 1];
}
(*count)--;
break;
}
else
{
printf("没有这个学号的学生\n");
}
}
}
//3.修改学生信息:修改已有的学生信息。
void modifyStudent(Student* students, int count, int id)
{
Student newstudent;
printf("依次输入新学生的姓名,年龄和成绩:\n");
scanf("%s",newstudent.name);
scanf("%d",&newstudent.age);
scanf("%f",&newstudent.grade);
//scanf("%s %d %.2f", newstudent.name, &newstudent.id, &newstudent.grade);
newstudent.id = id;
for (int i = 0; i < count; i++)
{
if (students[i].id == id)
{
students[i] = newstudent;
break;
}
}
}
//4.查找学生信息:通过学号查找学生信息。
void findStudentById(Student* students, int count, int id)
{
for (int i = 0; i < count; i++)
{
if (students[i].id == id)
{
printf("学生姓名:%s\n", students[i].name);
printf("学生ID:%d\n", students[i].id);
printf("学生年龄:%d\n", students[i].age);
printf("学生成绩:%.2f\n", students[i].grade);
}
else
{
printf("没有这个学号的学生\n");
}
}
}
//5.查找学生信息:通过姓名查找学生信息。
void findStudentByName(Student* students, int count, char* name)
{
for (int i = 0; i < count; i++)
{
int compare=strcmp(students[i].name,name);
if (compare==0)
{
printf("学生姓名:%s\n", students[i].name);
printf("学生ID:%d\n", students[i].id);
printf("学生年龄:%d\n", students[i].age);
printf("学生成绩:%.2f\n", students[i].grade);
}
else
{
printf("没有这个姓名的学生\n");
}
}
}
//6.显示所有学生信息
void displayAllStudents(Student* students, int count)
{
for (int i = 0; i < count; i++)
{
printf("学生姓名:%s\n", students[i].name);
printf("学生ID:%d\n", students[i].id);
printf("学生年龄:%d\n", students[i].age);
printf("学生成绩:%.2f\n", students[i].grade);
printf("\n");
}
}
//7.对学生成绩进行排序
void sortStudentsByGrade(Student* students, int count)
{
for (int i = 0; i < count; i++)
{
for (int j = 0; j < count - 1 - i; j++)
{
if (students[j].grade < students[j + 1].grade)
{
Student temp = students[j];
students[j] = students[j + 1];
students[j + 1] = temp;
}
}
}
}
//8.把学生信息保存到文件中
void saveToFile(Student * students, int count, const char* filename)
{
FILE* file = fopen("students.txt", "w");
if (file == NULL)
{
printf("Error opening file.\n");
return;
}
for (int i = 0; i <count; i++)
{
fprintf(file, "%s %d %d %.2f",
students[i].name, students[i].id,
students[i].age, students[i].grade);
}
fclose(file);
}
//从文件中加载学生信息
//Student* students, int* count, const char* filename
void loadFromFile(Student* students, int* count, const char* filename)
{
FILE* file = fopen("students.txt", "r");
if (file == NULL)
{
printf("Error opening file.\n");
return;
}
while (fscanf(file, "%s %d %d %f",
students[*count].name, &students[*count].id,
&students[*count].age, &students[*count].grade) != EOF)
{
count++;
}
fclose(file);
}
int main()
{
int choice;
char students[100];
int count = 0;
char name[50];
int id;
char filename;
while (1)
{
printf("1.Add Student\n");
printf("2.Delete Student\n");
printf("3.Modify Student\n");
printf("4.Find Student by ID\n");
printf("5.Find Student by Name\n");
printf("6.Display All Students\n");
printf("7.Sort Student by Grade\n");
printf("8.save to file\n");
printf("9.load From file\n");
printf("10.Exit\n");
printf("Enter your choice\n");
scanf("%d", &choice);
switch (choice)
{
case 1:
{
addStudent(students, &count);
break;
}
case 2:
{
printf("请输入所要删除学生的学号:");
scanf("%d", &id);
deleteStudent(students, &count, id);
break;
}
case 3:
{
printf("请输入所要修改学生的学号:");
scanf("%d", &id);
modifyStudent(students, count, id);
break;
}
case 4:
{
printf("请输入所要查找学生的学号:");
scanf("%d", &id);
findStudentById(students, count, id);
break;
}
case 5:
{
printf("请输入所要查找学生的姓名:");
scanf("%s", name);
findStudentByName(students, count, name);
break;
}
case 6:
{
displayAllStudents(students, count);
break;
}
case 7:
{
sortStudentsByGrade(students, count);
break;
}
case 8:
{
saveToFile(students, count, filename);
break;
}
case 9:
{
loadFromFile(students, &count, filename);
break;
}
case 10:
break;
default:
{
printf("It donot have this choice.\n");
}
}
if (choice == 10)
break;
}
return;
}