用c语言写了一个简单的学生成绩管理系统
可以运行但是在选择主界面想要切换模块输入1-5都会显示直接退出
该怎么办
下面是码
#include <stdio.h>
#include <string.h>
#define N 5
struct student
{
char num[10];
char name[10];
float score[5];
float aver;
}stu[N], s[N];
void main()//主函数
{
void menu();//六条函数声明和模块信息
void input();
void display();
float average();
float allacerage();
void sort();
int op;
menu();
scanf_s("%d", &op);
while (op != op)
{
switch (op)
{
case 1:input(); return input;
case 2:display(); break;
case 3:average(); break;
case 4:allacerage(); break;
case 5:sort(); break;
}
menu();
scanf_s("%d", &op);
}
}
void menu()//主控菜单
{
printf("\n 学生成绩管理系统 \n");
printf("\n=============================================\n");
printf("\n 1.学生信息录入 \n");
printf("\n 2.学生信息显示 \n");
printf("\n 3.个人平均成绩计算 \n");
printf("\n 4.格科平均成绩计算 \n");
printf("\n 5.名次排序 \n");
printf("\n 0.退出 \n");
printf("\n=============================================\n");
printf("\n请选择(0~5):\n");
}
void input() //信息录入
{
int i, j;
FILE* fp;
for (i = 0; i < N; i++)
{
printf("\n请输入NO.%d学生信息:\n", i + 1);
printf("学号:");
scanf_s("%s", stu[i].num,40);
printf("姓名");
scanf_s("%s", stu[i].name,40);
for (j = 0; j < 5; j++)
{
printf("成绩%d:", j + 1);
scanf_s("%f", &stu[i].score[j]);
}
}
fp = fopen_s(&fp, "stud", "wb");
for (i = 0; i < N; i++)
fwrite(&stu[i], sizeof(struct student), 1, fp);
fclose(fp);
}
void display()//信息显示
{
int i, j;
FILE* fp;
fp = fopen_s(&fp, "stud", "rb");
for (i = 0; i < N; i++)
fread(&s[i], sizeof(struct student), 1, fp);
printf("\n\n************************学生基本信息表******************\n\n");
printf("学号\t姓名\t成绩\t成绩1\t成绩2\t成绩3\t成绩4\t成绩\t平均成绩\n");
for (i = 0; i < N; i++)
{
printf("%s\t%s\t", s[i].num, s[i].name);
for (j = 0; j < 5; j++)
printf("%f\t", s[i].score[j]);
printf("%.2lf\n", stu[i].aver);
printf("\n");
}
fclose(fp);
}
float average()//个人成绩平均值
{
int i, j;
float sum;
FILE* fp;
fp = fopen_s("FILENAME", 3, "rb", 3);
for (i = 0; i < N; i++)
fwrite(&s[i], sizeof(struct student), 1, fp);
for (i = 0; i < N; i++)
{
sum = 0;
for (j = 0; j < 3; j++)
sum += s[i].score[j];
stu[i].aver = sum / 3;
}
printf("***********************学生平均成绩********************");
printf("学号\t姓名\t成绩\t成绩1\t成绩2\t成绩3\t成绩4\t成绩\t平均成绩\n");
for (i = 0; i < N; i++)
{
printf("%s\t%s\t", s[i].num, s[i].name);
for (j = 0; j < 5; j++)
printf("%d\t", s[i].score[j]);
printf("%.21f\n", stu[i].aver);
}
for (i = 0; i < N; i++)
fwrite(&s[i], sizeof(struct student), 1, fp);
printf("\n\n");
fclose(fp);
}
float allacerage()//各科平均成绩计算
{
int i, j;
float all[5], sum;
FILE* fp;
fp = fopen_s("stud", "rb", 3);
for (i = 0; i < N; i++)
fread(&s[i], sizeof(struct student), 1, fp);
for (i = 0; i < N; i++)
{
sum = 0;
for (j = 0; j < 3; j++)
sum += s[i].score[j];
all[i] = (float)sum / N;
}
printf("*************************各科平均成绩**********************");
printf("学号\t姓名\t成绩\t成绩1\t成绩2\t成绩3\t成绩4\t成绩\t平均成绩\n");
for (i = 0; i < N; i++)
{
printf("%s\t%s\t", s[i].num, s[i].name);
for (j = 0; j < 5; j++)
printf("%d\t", s[i].score);
printf("%.2lf\n", stu[i].aver);
}
printf(" \t \t");
for (i = 0; i < 5; i++)
printf("%.2lf\t", all[i]);
printf("\n\n");
fclose(fp);
}
void sort()//排列名次
{
int i, j, k;
float temp, t;
char str[10] = "";
for (i = 0; i < N - 1; i++)
for (j = i + 1; j < N; j++)
if (s[i].aver < s[j].aver)
{
temp = s[i].aver;
s[i].aver = s[j].aver;
s[j].aver = temp;
strcpy_s(str, stu[i].num, 10);
strcpy_s(stu[i].num, stu[j].num, 10);
strcpy_s(stu[j].num, str, 10);
strcpy_s(str, stu[i].name, 10);
strcpy_s(stu[i].name, stu[j].name, 10);
strcpy_s(stu[j].name, str, 10);
for (k = 0; k < 5; k++)
{
t = s[i].score[k];
s[i].score[k] = s[j].score[k];
s[j].score[k] = t;
}
}
printf("***********************名词********************");
printf("学号\t姓名\t成绩\t成绩1\t成绩2\t成绩3\t成绩4\t成绩\t平均成绩\n");
for (i = 0; i < N; i++)
{
printf("%s\t%s\t", s[i].num, s[i].name);
for (j = 0; j < 5; j++)
printf("%d\t", s[i].score[j]);
printf("%.2lf\n", stu[i].aver);
}
printf("\n\n");
}
while(true){
}