怎样用C语言编程解决这个问题?

假设收集到了一个班学生的所有成绩信息(不低于20人),要求用C语言编写一个简单的成绩管理系统,对学生个人信息进行管理,可进行录入、浏览、查询、修改、排序、统计的功能。信息内容包含:(1)学生的学号(2)学生的姓名(3)学生的成绩(语文、数学、英语、计算机,课程平均分)。
1.录入、浏览功能:
按学号顺序录入学生信息(学号、姓名、语文、数学、英语、计算机),显示系统中的所有信息。
2.查询功能:
查询学号尾号为09的学生的所有信息并显示。
3.修改功能:
修改学号尾号为12的学生的成绩信息(任意两项即可),并显示该学生的全部信息。
4.排序功能:
按语文成绩的顺序,由高到低显示所有学生的信息。
5.统计功能:
统计学生的平均成绩,并输出(学号,姓名,平均成绩)。

我码了5个小时……看来我还是不熟练啊……
而且这些还没有涉及到文件的输入与输出……

#include<stdio.h>
#include<string.h>
struct Student
{
int number=0;//学生的学号
char name[50];//学生的姓名
float ChineseScore, MathScore, EnglishScore, ComputerScore;//语文、数学、英语、计算机成绩
};
Student Scorelist[100];
int i = 0;//i是Scorelist数组的下标序号,0<i<99

int main()
{
void Enter(Student Scorelist[]);
void Show(Student Scorelist[]);
void Search(Student Scorelist[]);
void Modify(Student Scorelist[]);
void Arrange(Student Scorelist[]);
void Count(Student Scorelist[]);
printf("接下来的操作是:\n");
printf("A.录入浏览 B.查询 C.修改 D.排序 E.统计 F.结束\n");
char answer1;
rewind(stdin);
answer1=getchar();
if (answer1 == 'A' || answer1 == 'a')
{
Enter(Scorelist);
Show(Scorelist);
return main();
}
else if (answer1 == 'B' || answer1 == 'b')
{
Search(Scorelist);
return main();
}
else if (answer1 == 'C' || answer1 == 'c')
{
Modify(Scorelist);
return main();
}
else if (answer1 == 'D' || answer1 == 'd')
{
Arrange(Scorelist);
return main();
}
else if (answer1 == 'E' || answer1 == 'e')
{
Count(Scorelist);
return main();
}
else if (answer1 == 'F' || answer1 == 'f')
{
return 0;
}
else
{
printf("输入错误!\n");
printf("\n");
return main();
}
}

void Enter(Student Scorelist[])
{
for (; i < 100; i++)
{
printf("确定要录入第%d个学生的信息吗?请输入Y(是)/N(否)\n", i + 1);
char answer2;
rewind(stdin);
answer2=getchar();
if (answer2 == 'N' || answer2 == 'n')
{
printf("\n");
return;
}
printf("请输入学生的学号:");
scanf_s("%d", &Scorelist[i].number);
rewind(stdin);
printf("请输入学生的姓名:");
gets_s(Scorelist[i].name,50);
printf("请输入学生的语文成绩:");
scanf_s("%f", &Scorelist[i].ChineseScore);
printf("请输入学生的数学成绩:");
scanf_s("%f", &Scorelist[i].MathScore);
printf("请输入学生的英语成绩:");
scanf_s("%f", &Scorelist[i].EnglishScore);
printf("请输入学生的计算机成绩:");
scanf_s("%f", &Scorelist[i].ComputerScore);

}
}

void Show(Student Scorelist[])
{
if (Scorelist[0].number == 0)
{
printf("无录入信息!\n");
printf("\n");
return;
}
int j;
for (j = 0; j <= i-1; j++)
{
printf("学生的学号:%d\n", Scorelist[j].number);
printf("学生的姓名:%s\n", Scorelist[j].name);
printf("学生的语文成绩:%f\n", Scorelist[j].ChineseScore);
printf("学生的数学成绩:%f\n", Scorelist[j].MathScore);
printf("学生的英语成绩:%f\n", Scorelist[j].EnglishScore);
printf("学生的计算机成绩:%f\n", Scorelist[j].ComputerScore);
printf("\n");
}
printf("以上录入的学生的全部信息。\n");
printf("\n");
}

void Search(Student Scorelist[])
{
printf("\n");
if (Scorelist[0].number == 0)
{
printf("无录入信息!\n");
printf("\n");
return;
}
int j, a;
for (j = 0,a = 1; j <= i-1; j++)
{
if (Scorelist[j].number % 100 == 9)
{
printf("第%d个尾号为09的学生的学号:%d\n", a, Scorelist[j].number);
printf("第%d个尾号为09的学生的姓名:%s\n", a, Scorelist[j].name);
printf("第%d个尾号为09的学生的语文成绩:%f\n", a, Scorelist[j].ChineseScore);
printf("第%d个尾号为09的学生的数学成绩:%f\n", a, Scorelist[j].MathScore);
printf("第%d个尾号为09的学生的英语成绩:%f\n", a, Scorelist[j].EnglishScore);
printf("第%d个尾号为09的学生的计算机成绩:%f\n", a, Scorelist[j].ComputerScore);
printf("\n");
a++;
}
}
printf("以上为尾号为09的学生的全部信息。\n");
printf("\n");
}

void Modify(Student Scorelist[])
{
printf("\n");
if (Scorelist[0].number == 0)
{
printf("无录入信息!\n");
printf("\n");
return;
}
int j, order;
int p[100];
for (j = 0, order = 1; j <= i-1; j++)
{
if (Scorelist[j].number % 100 == 12)
{
printf("第%d个尾号为12的学生的学号:%d\n", order, Scorelist[j].number);
printf("第%d个尾号为12的学生的姓名:%s\n", order, Scorelist[j].name);
printf("第%d个尾号为12的学生的语文成绩:%f\n", order, Scorelist[j].ChineseScore);
printf("第%d个尾号为12的学生的数学成绩:%f\n", order, Scorelist[j].MathScore);
printf("第%d个尾号为12的学生的英语成绩:%f\n", order, Scorelist[j].EnglishScore);
printf("第%d个尾号为12的学生的计算机成绩:%f\n", order, Scorelist[j].ComputerScore);
p[order] = j;
printf("\n");
order++;
}
}
printf("要修改哪一位尾号为12的学生的成绩(请输入上述顺序中的数字序号):");
int ordernumber;
scanf_s("%d", &ordernumber);
printf("\n");
char answer3;
while(1)
{
printf("要修改该学生的成绩吗?请输入Y(是)/N(否)\n");
rewind(stdin);
answer3 = getchar();
if (answer3 == 'N' || answer3 == 'n')
break;
printf("要修改该学生的哪一门成绩?\n");
printf("A.语文 B.数学 C.英语 D.计算机\n");
rewind(stdin);
answer3 = getchar();
if (answer3 == 'A' || answer3 == 'a')
{
printf("该学生新的语文成绩为:");
scanf_s("%f", &Scorelist[p[ordernumber]].ChineseScore);
}
else if (answer3 == 'B' || answer3 == 'b')
{
printf("该学生新的数学成绩为:");
scanf_s("%f", &Scorelist[p[ordernumber]].MathScore);
}
else if (answer3 == 'C' || answer3 == 'c')
{
printf("该学生新的英语成绩为:");
scanf_s("%f", &Scorelist[p[ordernumber]].EnglishScore);
}
else if (answer3 == 'D' || answer3 == 'd')
{
printf("该学生新的计算机成绩为:");
scanf_s("%f", &Scorelist[p[ordernumber]].ComputerScore);
}
printf("\n");
printf("学生的学号:%d\n", Scorelist[p[ordernumber]].number);
printf("学生的姓名:%s\n", Scorelist[p[ordernumber]].name);
printf("学生的语文成绩:%f\n", Scorelist[p[ordernumber]].ChineseScore);
printf("学生的数学成绩:%f\n", Scorelist[p[ordernumber]].MathScore);
printf("学生的英语成绩:%f\n", Scorelist[p[ordernumber]].EnglishScore);
printf("学生的计算机成绩:%f\n", Scorelist[p[ordernumber]].ComputerScore);
printf("\n");
}
}

void Arrange(Student Scorelist[])
{
printf("\n");
if (Scorelist[0].number == 0)
{
printf("无录入信息!\n");
printf("\n");
return;
}
Student temp;//Student类型变量temp用来存放每次比对得到的语文成绩最高分的Student数组Scorelist中的元素
int number;//number用来存放每次比对得到的语文成绩最高分的Student数组Scorelist中的元素d的下标序号
int m, n;//m为待整理Student数组p的下标序号,n为一轮比对最大值中每一次得到的Student数组Scorelist的下标序号
for (m = 0; m <= i-1; m++)
{
temp = Scorelist[m];
number = m;
for (n = m; n <= i-1; n++)
{
if (temp.ChineseScore < Scorelist[n].ChineseScore)
{
temp = Scorelist[n];
number = n;
}
}
Scorelist[number] = Scorelist[m];//不是最大值的,待整理的Student数组p中的元素换给每次比对得到的语文成绩最高分的Student数组p中的元素
Scorelist[m] = temp;//每次比对得到的语文成绩最高分的Student数组p中的元素换给不是最大值的,待整理的Student数组p中的元素
}
Show(Scorelist);
}
void Count(Student Scorelist[])
{
printf("\n");
if (Scorelist[0].number == 0)
{
printf("无录入信息!\n");
printf("\n");
return;
}
int j;
for (j = 0; j <= i-1; j++)
{
printf("学生的学号:%d\n", Scorelist[j].number);
printf("学生的姓名:%s\n", Scorelist[j].name);
printf("学生的平均成绩成绩:%f\n", (Scorelist[j].ChineseScore + Scorelist[j].MathScore + Scorelist[j].EnglishScore + Scorelist[j].ComputerScore) / 4.0);
printf("\n");
}
printf("以上录入的学生的全部信息。\n");
printf("\n");
}
温馨提示:答案为网友推荐,仅供参考
相似回答