发代码出来看看,看程序结果是正常退出的。
#include<stdio.h>
#include <stdlib.h>
#include <string.h>
#include <windows.h>
#define N 3 //宏定义学生个数
#define M 3 //宏定义课程个数
struct student //定义结构体
{
char num[12];
char name[20];
int score[3];
float ave;
}stu[N];
int student_number = 0;
int menu() //主菜单
{
int a;
do {
system("cls"); //运行前清屏,把选择清掉
printf("**********************************************************\n");
printf("* 欢迎使用高校学生成绩管理系统V1.0 *\n");
printf("* 请选择功能 *\n");
printf("**********************************************************\n");
printf("* 1.录入学生成绩计算学生总平均分 *\n");
printf("* 2.查找学生成绩 *\n");
printf("* 3.修改学生成绩 *\n");
printf("* 4.计算学生每门课平均分最高分最低分 *\n");
printf("* 5.划分学生成绩等级 *\n");
printf("* 6.根据学生总平均分从高到低排序 *\n");
printf("* 0.退出系统 *\n");
printf("**********************************************************\n");
printf("请输入所选功能前的序号:");
scanf_s("%d", &a);
if (a < 0 || a>6)
{
printf("错误选择");
system("pause");
}
} while (a < 0 || a>10);
return a;
}
void input() //定义录入学生成绩函数
{
int i;
float sum[N];
printf("请输入学生学号、姓名及高数、C语言、数据结构的成绩\n");
for (i = 0; i < N; i++)
{
scanf_s("%s %s %d %d %d", stu[i].num, 12, stu[i].name, 20, &stu[i].score[0], &stu[i].score[1], &stu[i].score[2]);
sum[i] = stu[i].score[0] + stu[i].score[1] + stu[i].score[2];
stu[i].ave = sum[i] / 3.0; //计算平均值
}
printf("\n学号\t姓名\t高数\tc语言\t数据结构\t平均分\n");
for (i = 0; i < N; i++)
{
printf("%s\t%s\t%d\t%d\t%d\t%f\n", stu[i].num, stu[i].name, stu[i].score[0], stu[i].score[1], stu[i].score[2], stu[i].ave);
}
}
void search() //定义查找学生的函数
{
char num[12];
int i;
printf("请输入要查找的学生学号:\n");
scanf_s("%s", num, 12);
for (i = 0; i < 3; i++)
{
if (memcmp(num, stu[i].num, strlen(num)) == 0)//将输入的数字与结构体中学号相匹配
{
printf("\n学号\t姓名\t高数\tc语言\t数据结构\t平均分\n");
printf("%s\t%s\t%d\t%d\t%d\t%f\n", stu[i].num, stu[i].name, stu[i].score[0], stu[i].score[1], stu[i].score[2], stu[i].ave);
break;
}
else
printf("未找到\n");
}
}
void change() //定义修改学生信息的函数
{
int i = 0;
char testnum[12];
printf("请输入要修改学生的学号:");
scanf_s("%s", testnum, 12);
while (strcmp(testnum, stu[i].num) != 0 && i < N) //将输入的数字与结构体中学号相匹配
{
i++;
}
if (i < N)
{
printf("开始修改\n");
printf("学号\t:");
scanf_s("%s", stu[i].num, 12);
printf("姓名\t:");
scanf_s("%s", stu[i].name, 20);
printf("高数\t:");
scanf_s("%d", &stu[i].score[0]);
printf("c语言\t:");
scanf_s("%d", &stu[i].score[1]);
printf("数据结构\t:");
scanf_s("%d", &stu[i].score[2]);
stu[i].ave = (float)(stu[i].score[0] + stu[i].score[1] + stu[i].score[2]) / 3.0;
printf("\n学号\t姓名\t高数\tc语言\t数据结构\t平均分\n");
printf("%s\t%s\t%d\t%d\t%d\t%f\n", stu[i].num, stu[i].name, stu[i].score[0], stu[i].score[1], stu[i].score[2], stu[i].ave);
printf("修改成功");
}
}
void zg()
{
int i = 0, j, min = stu[0].score[i], b[3], s[3];
float sum[M];
float ave1[3];
for (i = 0; i < N; i++)
{
sum[i] = stu[0].score[i] + stu[1].score[i] + stu[2].score[i];
ave1[i] = sum[i] / 3.0; //计算各科平均分
}
printf("各科的平均分分别为:%f %f %f\n", ave1[0], ave1[1], ave1[2]);
printf("\n");
for (i = 0; i < N; i++)
{
b[i] = stu[0].score[i];
for (j = 1; j < 3; j++)
{
if (stu[j].score[i] > b[i])
{
b[i] = stu[j].score[i];
}
} //计算各科最高分
}printf("各科最高分分别为:%d %d %d \n", b[0], b[1], b[2]);
printf("\n");
for (i = 0; i < N; i++)
{
min = stu[0].score[i];
for (j = 0; j < 3; j++)
{
if (min > stu[j].score[i])
{
min = stu[j].score[i];
s[i] = min;
}
} //计算各科最低分
}printf("各科最低分分别为:%d %d %d \n", s[0], s[1], s[2]);
}
void dj()
{
int i, j, t;
float sum[M];
float ave1[3];
for (i = 0; i < N; i++)
{
sum[i] = stu[0].score[i] + stu[1].score[i] + stu[2].score[i];
ave1[i] = sum[i] / 3;
}
for (j = 0; j < 3; j++)
{
for (i = 0; i < 2 - j; i++)
if (stu[i].ave > stu[i + 1].ave)
{
t = stu[i].ave; stu[i].ave = stu[i + 1].ave; stu[i + 1].ave = t; //将平均分从高到低排序
}printf("根据平均分从高到低排序后: %.2f\n", stu[i].ave);
}
printf("\n");
}
void di()
{
int i = 0;
char testnum[12];
printf("请输入要划分等级的学生的学号:");
scanf_s("%s", testnum, 12);
while (strcmp(testnum, stu[i].num) != 0 && i < N) //将输入的数字与结构体中学号相匹配
{
i++;
}
if (i < N)
{
if (stu[i].ave >= 90)
printf("优\n");
else if (stu[i].ave >= 80 && stu[i].ave < 90)
printf("良\n");
else if (stu[i].ave >= 60 && stu[i].ave < 80)
printf("中\n");
else
printf("差\n");
}
}
void AddFromText() //定义读取文件的函数
{
FILE* fp;
int i = 0;
if ((fp = fopen("D:\\student.txt", "r")) == NULL)
{
printf("打开文件失败,无读取数据");
}
else
{
fscanf(fp, "%s", &student_number);
while (i < student_number)
{
fscanf(fp, "%s%s%d%d%d%f", stu[i].num, stu[i].name, stu[i].score[0], stu[i].score[1], stu[i].score[2], stu[i].ave);
i++;
}
fclose(fp);
exit(0);
}
}
void Write() //定义录入文件的函数
{
int i = 0;
FILE* fp;
if ((fp = fopen("D:\\student.txt", "w")) == NULL)
{
printf("保存失败");
}
else
{
fprintf(fp, "%d", student_number);
while (i < student_number)
{
fprintf(fp, "%s%d%d%d%d%f", stu[i].num, stu[i].name, stu[i].score[0], stu[i].score[1], stu[i].score[2], stu[i].ave);
i++;
}
fclose(fp);
printf("保存成功");
exit(0);
}
}
int main() //定义主函数
{
AddFromText();
for (;;)
{
switch (menu())
{
case 1:input(); system("pause"); continue;
case 2:search(); system("pause"); continue;
case 3:change(); system("pause"); continue;
case 4:zg(); system("pause"); continue;
case 5:di(); system("pause"); continue;
case 6:dj(); system("pause"); continue;
case 0:Write();
}
}
}