编写了一个学生成绩管理系统,但总是报错,求各路大佬指教
之前全部定义为int的时候代码可以运行,但老师要求用double,改了之后就一直报错,还有一个用学生姓名排序的代码不会,望各位大佬指点//添加头文件
#include <stdio.h>
#include <string.h>
#include <stdlib.h>//标准裤头文件
//先做一个宏定义,定义十个学生的信息
#define STUDENT_COUNT 10
void InPut_Student_Inf(double n);
void OutPut_Student_Inf(double n);
int Find_Accord_Num(int n);
double Find_Accord_Name(double n);
void Rank_Accord_Num(int n);
//void Rank_Accord_Name(int n);
void Rank_Accord_Sum(double n);
int Change_Student_Inf(int n);
int Delete_Student_Inf(int n);
//全局数组变量,用于存储学生信息
char names[STUDENT_COUNT][50];
double matchs[STUDENT_COUNT];
double english[STUDENT_COUNT];
double computer[STUDENT_COUNT];
double sum[STUDENT_COUNT];
int num[STUDENT_COUNT];
//以下变量用于学生信息数组排序,作为临时数组
int temp_num[STUDENT_COUNT];
char temp_names[STUDENT_COUNT][50];
double temp_matchs[STUDENT_COUNT];
double temp_english[STUDENT_COUNT];
double temp_computer[STUDENT_COUNT];
double temp_sum[STUDENT_COUNT];
//sort数组存储排好序的学号或姓名下标
double sort[STUDENT_COUNT];
double i, j;//设置全局变量
//写main函数
double main(void)
{
int choice, n;//定义用户输入的菜单项
//显示菜单,直到用户输入0为止
while(1)
{
printf("*********************\n");
printf("欢迎使用学生成绩管理系统\n");
printf("[1]输入学生信息\n");
printf("[2]输出学生成绩\n");
printf("[3]按照学号查找某个学生的信息\n");
printf("[4]按照姓名查找某个学生的信息\n");
printf("[5]按照学号对学生排序\n");
printf("[6]按照姓名对学生排序\n");
printf("[7]按照总成绩对学生排序\n");
printf("[8]修改学生信息\n");
printf("[9]删除学生信息\n");
printf("[0]退出程序\n");
printf("请输入您的选择(0-9):\n");
//接受用户的输入
scanf("%d",&choice);
printf("**************************************\n");
switch(choice)
{
case 1:
//函数功能:输入学生信息
printf("请输入录入学生数(最大值为10):\n");
scanf("%d", &n);
InPut_Student_Inf (n);
break;
case 2:
OutPut_Student_Inf(n);//输出学生信息
break;
case 3:
Find_Accord_Num(n); //按照学号查找某个学生信息
break;
case 4:
Find_Accord_Name(n); //按照姓名查找某个学生信息
break;
case 5:
Rank_Accord_Num(n);//按照学号对学生排序
break;
case 6:
//Rank_Accord_Name(n);//按照姓名对学生排序
break;
case 7:
Rank_Accord_Sum (n);//按照总成绩对学生排序
break;
case 8:
Change_Student_Inf(n);//修改学生信息
break;
case 9:
Delete_Student_Inf(n);//删除学生信息
break;
case 0:
//退出程序
printf("程序结束,谢谢使用!\n");
exit(0);
default :
printf("您+输入的菜单项有误,请重新输入!\n");
}
}
return 0;
}
//1.函数功能:输入学生信息
void InPut_Student_Inf(double n)
{
printf("现在开始输入学生信息\n");
for (i = 0; i<n; ++i)
{
printf("\n请输入第%d个学生的信息:\n", i + 1);
printf("\n学号:");
scanf("%d", &num[i]);
printf("\n姓名:");
scanf("%s", names[i]);
printf("\n数学成绩:");
scanf("%f", &matchs[i]);
printf("\n英语成绩:");
scanf("%f", &english[i]);
printf("\n计算机成绩:");
scanf("%f", &computer[i]);
//计算总成绩
sum[i] = matchs[i] + english[i] + computer[i];
}
}
//2.输出学生成绩
void OutPut_Student_Inf(double n)
{
printf("\n学号\t姓名\t数学成绩\t英语成绩\t计算机成绩\t总成绩\n");
printf("----------------------------------------------------------\n");
for (i = 0; i<n; ++i)
{
printf("%d\t%s\t%f\t\t%f\t\t%f\t\t%f\n", num[i], names[i], matchs[i], english[i], computer[i], sum[i]);
}
printf("-------------------------------------------------------\n");
}
//3.按照学号查找某个学生信息
int Find_Accord_Num(int n)
{
int nums;
double result;
printf("请输入待查找的学生学号:");
scanf("%d",&nums);
result= -1;
for (i = 0; i<n; ++i)
{
if (nums == num[i])
{
result = i;
break;
}
}
//最后判断q值
if (result == -1)
{
printf("没有该学生信息!\n");
return 0;
}
else
{
//先打印表头
printf("\n学号\t\t姓名\t\t数学成绩\t英语成绩\t计算机成绩\t总成绩\n");
//再打印数据
printf("%d\t%s\t%f\t\t%f\t\t%f\t\t%f\n", num[i], names[i], matchs[i], english[i], computer[i], sum[i]);
printf("打印出查找结果!\n");
}
return 1;
}
//4.按照姓名查找某个学生的信息
double Find_Accord_Name(double n)
{
char name[200];
double result;
printf("请输入待查找的学生姓名:");
scanf("%s", name);
result = -1;
for (i = 0; i<n; ++i)
{
if (strcmp(name, names[i]) == 0)
{
result = i;
break;
}
}
if (result == -1)
{//未找到结果
printf("没有该学生信息!\n");
return 0;
}
else//找到结果
{
printf("\n学号\t姓名\t数学成绩\t英语成绩\t计算机成绩\t总成绩\n");
printf("%d\t%s\t%f\t\t%f\t\t%f\t\t%f\n", num[i], names[i], matchs[i], english[i], computer[i], sum[i]);
printf("已完成查找!\n");
}
return 1;
}
//5.按照学号对学生排序
void Rank_Accord_Num(int n)
{
int min,max;
for(i=0; i<n; ++i) //复制临时数组
{
temp_num[i] = num[i];
}
max = 0; //查找学号最大值,将其下标存至sort数组的最后一个值中
for(j=1; j<n; j++)
{
if(temp_num[max]<temp_num[j])
max = j;
}
sort[n-1] = max; //sort数组的最后一个数
for(i=0; i<n-1; ++i)
{
min = i; //查找学号最小值
for(j=0; j<n; ++j)
{
if(temp_num[min]>temp_num[j])
min = j;
}
//sort数组记录排序的学生信息的下标
sort[i] = min;
temp_num[min] = temp_num[max]; //利用临时数组将查找过的学生信息的学号设为最大值,排除查找干扰
}
for(i=0; i<n; ++i) //再复制一次临时数组
{
temp_num[i] = num[i];
strcpy(temp_names[i],names[i]);
temp_matchs[i] = matchs[i];
temp_english[i] = english[i];
temp_computer[i] = computer[i];
temp_sum[i] = sum[i];
}
for(i=0; i<n; i++) //按照下标对原数组进行修改
{
num[i] = temp_num[sort[i]];
strcpy(names[i],temp_names[sort[i]]);
matchs[i] = temp_matchs[sort[i]];
english[i] = temp_english[sort[i]];
computer[i] = temp_computer[sort[i]];
sum[i] = temp_sum[sort[i]];
}
printf("排序完毕,请按菜单键2查看排序结果!\n");
return 1;
}
//6.按照姓名对学生排序
//7.按照总成绩对学生排序
void Rank_Accord_Sum(double n)
{
double min,max;
for(i=0; i<n; ++i) //复制临时数组
{
temp_sum[i] = sum[i];
}
max = 0; //查找总成绩最大值,将其下标存至sort数组的最后一个值中
for(j=1; j<n; j++)
{
if(temp_sum[max]<temp_sum[j])
max = j;
}
sort[n-1] = max; //sort数组的最后一个数
for(i=0; i<n-1; ++i)
{
min = i; //查找总成绩最小值
for(j=0; j<n; ++j)
{
if(temp_sum[min]>temp_sum[j])
min = j;
}
//sort数组记录排序的学生信息的下标
sort[i] = min;
temp_sum[min] = temp_sum[max]; //利用临时数组将查找过的学生信息的总成绩设为最大值,排除查找干扰
}
for(i=0; i<n; ++i) //再复制一次临时数组
{
temp_num[i] = num[i];
strcpy(temp_names[i],names[i]);
temp_matchs[i] = matchs[i];
temp_english[i] = english[i];
temp_computer[i] = computer[i];
temp_sum[i] = sum[i];
}
for(i=0; i<n; i++) //按照下标对原数组进行修改
{
num[i] = temp_num[sort[i]];
strcpy(names[i],temp_names[sort[i]]);
matchs[i] = temp_matchs[sort[i]];
english[i] = temp_english[sort[i]];
computer[i] = temp_computer[sort[i]];
sum[i] = temp_sum[sort[i]];
}
printf("排序完毕,请按菜单键2查看排序结果!\n");
return 1;
}
//8.修改学生信息
int Change_Student_Inf(int n)
{
int nums;
double result;
printf("请输入待修改的学生学号:");
scanf("%d",&nums);
result= -1;
for (i = 0; i<n; ++i)
{
if (nums == num[i])
{
result = i;
break;
}
}
//最后判断q值
if (result == -1)
{
printf("没有该学生信息!\n");
return 0;
}
else //修改信息值
{
printf("请重新输入该学生信息:\n");
printf("学号:\n");
scanf("%d",&num[result]);
printf("姓名:\n");
scanf("%s",names[result]);
printf("数学成绩:\n");
scanf("%f",&matchs[result]);
printf("英语成绩:\n");
scanf("%f",&english[result]);
printf("计算机成绩:\n");
scanf("%f",&computer[result]);
sum[result] = matchs[result] + english[result] + computer[result];
}
return 1;
}
//9.删除学生信息
int Delete_Student_Inf(int n)
{
int nums;
double result;
printf("请输入待删除的学生学号:");
scanf("%d",&nums);
result= -1;
for (i = 0; i<n; ++i)
{
if (nums == num[i])
{
result = i;
break;
}
}
//最后判断q值
if (result == -1)
{
printf("没有该学生信息!\n");
return 0;
}
else //删除当前学生信息即为将数组从result的位置依次前挪一个位置
{
for(i=result; i<n-1; ++i) //最后在main函数中,要将n的值减1
{
num[i] = num[i+1];
strcpy(names[i],names[i+1]);
matchs[i] = matchs[i+1];
english[i] = english[i+1];
computer[i] = computer[i+1];
sum[i] = sum[i+1];
}
}
return 1;
}