把代码贴出来,否则没法帮你运行调试。对了,你的开发环境是?
#include <stdio.h>
#include <stdlib.h>
#define MAX_STUDENTS 10
#define MAX_SUBJECTS 3
struct Student {
int studentID;
char name[50];
char className[50];
int scores[MAX_SUBJECTS];
float averageScore;
};
void inputStudentInfo(struct Student* student) {
printf("Enter student ID: ");
scanf("%d", &(student->studentID));
printf("Enter student name: ");
scanf("%s", student->name);
getchar(); // 修改
printf("Enter student class name: ");
scanf("%s", student->className);
getchar(); // 修改
printf("Enter scores for C Language, Advanced Math, and English:\n");
for (int i = 0; i < MAX_SUBJECTS; i++) {
scanf("%d", &(student->scores[i]));
}
}
void displayStudentInfo(struct Student student) {
printf("Student ID: %d\n", student.studentID);
printf("Student Name: %s\n", student.name);
printf("Class Name: %s\n", student.className);
printf("Scores: C Language - %d, Advanced Math - %d, English - %d\n",
student.scores[0], student.scores[1], student.scores[2]);
printf("Average Score: %.2f\n", student.averageScore);
printf("-----------------------------\n");
}
void calculateAverageScore(struct Student* student) {
int sum = 0;
for (int i = 0; i < MAX_SUBJECTS; i++) {
sum += student->scores[i];
}
student->averageScore = (float)sum / MAX_SUBJECTS;
}
void displayAllStudents(struct Student students[], int count) {
for (int i = 0; i < count; i++) {
displayStudentInfo(students[i]);
}
}
struct Student* findStudentByID(struct Student students[], int count, int studentID) {
for (int i = 0; i < count; i++) {
if (students[i].studentID == studentID) {
return &(students[i]);
}
}
return NULL;
}
int compareStudents(const void* a, const void* b) {
struct Student* studentA = (struct Student*)a;
struct Student* studentB = (struct Student*)b;
return (studentA->averageScore > studentB->averageScore) -
(studentA->averageScore < studentB->averageScore);
}
void Savetofile(struct Student students[], int count) // 修改
{
FILE* fp;
int i;
if (!count) {
printf("Record is NULL.\n");
return;
}
fp = fopen("student.txt", "w");
if (fp) {
for (i = 0; i < count; i++)
fprintf(fp, "%d %s %s %d %d %d %f\n", students[i].studentID, students[i].name, students[i].className,
students[i].scores[0], students[i].scores[1], students[i].scores[2], students[i].averageScore);
fclose(fp);
printf("Save file successfully!\n");
}
else
printf("Save file fail.\n");
return;
}
int main() {
struct Student students[MAX_STUDENTS], * studentToModify, * foundStudent, * studentToCalculate; // 修改
int studentCount = 0;
int choice, studentID, deleteIndex = -1; // 修改
while (1) {
printf("----- Student Management System -----\n");
printf("1. Add Student\n");
printf("2. Modify Student\n");
printf("3. Delete Student\n");
printf("4. Display All Students\n");
printf("5. Calculate Average Score\n");
printf("6. Find Student by ID\n");
printf("7. Sort Students by Average Score\n");
printf("8. Save to File\n");
printf("9. Exit\n");
printf("Enter your choice: ");
scanf("%d", &choice);
switch (choice) {
case 1:
if (studentCount < MAX_STUDENTS) {
printf("--- Add Student ---\n");
inputStudentInfo(&(students[studentCount]));
calculateAverageScore(&(students[studentCount]));
studentCount++;
printf("Student added successfully!\n");
}
else {
printf("Maximum number of students reached. Cannot add more students.\n");
}
break;
case 2:
printf("--- Modify Student ---\n");
printf("Enter the student ID to modify: ");
scanf("%d", &studentID);
studentToModify = findStudentByID(students,studentCount, studentID); //struct Student* 修改
if (studentToModify != NULL) {
inputStudentInfo(studentToModify);
calculateAverageScore(studentToModify);
printf("Student modified successfully!\n");
}
else {
printf("Student not found.\n");
}
break;
case 3:
printf("--- Delete Student ---\n");
printf("Enter the student ID to delete: ");
scanf("%d", &studentID);
//int deleteIndex = -1; 修改
for (int i = 0; i < studentCount; i++) {
if (students[i].studentID == studentID) {
deleteIndex = i;
break;
}
}
if (deleteIndex != -1) {
for (int i = deleteIndex; i < studentCount - 1; i++) {
students[i] = students[i + 1];
}
studentCount--;
printf("Student deleted successfully!\n");
}
else {
printf("Student not found.\n");
}
break;
case 4:
printf("--- Display All Students ---\n");
displayAllStudents(students, studentCount);
break;
case 5:
printf("--- Calculate Average Score ---\n");
printf("Enter the student ID: ");
scanf("%d", &studentID);
studentToCalculate = findStudentByID(students, studentCount, studentID); //struct Student* 修改
if (studentToCalculate != NULL) {
calculateAverageScore(studentToCalculate);
printf("Average score calculated successfully!\n");
}
else {
printf("Student not found.\n");
}
break;
case 6:
printf("--- Find Student by ID ---\n");
printf("Enter the student ID to find: ");
scanf("%d", &studentID);
foundStudent = findStudentByID(students, studentCount, studentID); //struct Student* 修改
if (foundStudent != NULL) {
displayStudentInfo(*foundStudent);
}
else {
printf("Student not found.\n");
}
break;
case 7:
printf("--- Sort Students by Average Score ---\n");
qsort(students, studentCount, sizeof(struct Student), compareStudents);
printf("Students sorted successfully!\n");
break;
case 8: // 修改
printf("--- Save to File. ---\n"); // 修改
Savetofile(students, studentCount); // 修改
break;
case 9:
printf("Exiting the program...\n");
return 0;
default:
printf("Invalid choice. Please try again.\n");
break;
}
}
}
intBianli(student Information[])
{
int caozuo = 0;
printf("请选择确定学生的方式\n");
printf("1.按学号:\n");
printf("2.按姓名:\n");
scanf_s("%d", &caozuo);
switch (caozuo)
{
case 1:
{
intemt_Information1 = 666; //当Bianlian()未查到相应的学生信息时,返回emt_Information1,值为666;
charnum[8];
printf_s("请输入学号\n");
getchar();
gets_s(num);
intj;
intstop1 = 0;
for(j = 0; stop1 == 0; j++)
{
/*printf_s("按学号查询计数j的显示 %d\n", j);*/
if (strcmp(Information[j].num, num) == 0)
{
stop1++;
returnj;
}
if (stop1 == 1)
break;
if (j == N - 1)
break;
}
if(Information[j].n == 0)
{
printf("此学生不存在");
return emt_Information1;
}
}
break;
case 2:
{
intemt_Information2 = 666;
charname[8];
printf_s("请输入姓名\n");
getchar();
gets_s(name);
intL;
intstop2 = 0;
for(L = 0; stop2 == 0; L++)
{==
printf_s("按学号查询计数j的显示 %d\n", L);
if (strcmp(Information[L].name, name) ==0)
{
stop2++;
returnL;
}
if (stop2 == 1)
break;
if (L == N - 1)
break;
}
if(Information[L].n == 0)
{
printf("此学生不存在");
return emt_Information2;
}
}
}
}