这个管理系统需用到之前学习的所有的知识,系统的联系起来来做。需要用到的知识由if...else判断,for循环,二维数组,函数的定义声明等知识,综合性很强。
问题是:
************欢迎进入海峰考务系统****************
1.添加学生成绩
2.查看所有学生成绩
3.根据学号查看成绩
4.查看成绩最高分和学号
5.查看成绩最低分和学号
6.查看成绩平均分
7.根据学号修改成绩
8.退出
*************************************************
请选择:
代码如下:
// stu[学生数量][2] 第一列保存学号,第二列保存成绩
#include<stdio.h>
#define INCREASE_SCORE 1
#define SEARCH_ALL 2
#define SEARCH_SCORE 3
#define MAX_SCORE 4
#define MIN_SCORE 5
#define AVE_SCORE 6
#define MODIFY_SCORE 7
#define EXIT 8
int stu[10][2] = {0};
int index = 0;//表示当前学生个数
//打印系统菜单函数
int menu();
void increase_score();
void print_score();
void serch_score();
void high_score();
void low_score();
void ave();
void ex();
int main()
{
int option;
char ch;
while(option!=8)
{
option = menu();
switch(option)
{
case INCREASE_SCORE:
increase_score();
print_score();
break;
case SEARCH_ALL:
print_score();
break;
case SEARCH_SCORE:
serch_score();
break;
case MAX_SCORE:
high_score();
break;
case MIN_SCORE:
low_score();
break;
case AVE_SCORE:
ave();
break;
case MODIFY_SCORE:
ex();
break;
case EXIT:
break;
default:
printf("输入错误\n");
break;
}
printf("是否继续?(y/n):");
getchar();
scanf("%c",&ch);
if(ch == 'y')
{
continue;
}
else
{
printf("感谢使用,再见");
break;
}
}
return 0;
}
int menu()
{
int option;
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("*************************************************\n");
printf("请选择:");
scanf("%d",&option);
return option;
}
void increase_score()
{
int id; //学生学号变量
int score; //学生成绩的变量
printf("请输入学生的学号:") ;
scanf("%d",&id);
printf("请输入学生的成绩:") ;
scanf("%d",&score);
if(index>=10)
{
printf("数组已满\n");
}
else
{
stu[index][0] = id;
stu[index][1] = score;
index++;
printf("添加成功\n");
}
}
void print_score()
{
int i;
for(i=0;i<index;i++)
{
printf("学生的学号:%d,学生的成绩%d\n",stu[i][0],stu[i][1]);
}
}
void serch_score()
{
int i,j,k;
printf("请输入学号:\n");
scanf("%d",&i);
for(j=0;j<10;j++){
if(stu[j][0] == i){
printf("该学生成绩为:%d\n",stu[j][1]);
}
}
}
void high_score()
{
int a,b;
int h = stu[0][0];
for(a=0;a<10;a++){
if(h<stu[a][1]){
h = stu[a][1];
}
}
printf("最高分为:%d\n",h);
for(a=0;a<10;a++){
for(b=0;b<2;b++){
if(h == stu[a][b]){
printf("学号为:%d\n",stu[a][0]);
}
}
}
}
void low_score()
{
int i;
int min = stu[0][1];
for(i = 0; i < index; i++)
{
if(min > stu[i][1])
{
min = stu[i][1];
}
}
printf("这次考试的最低成绩是%d\n", min);
printf("成绩最低的同学是:\n");
for(i = 0; i < index; i++)
{
if(min == stu[i][1])
{
printf("%d\n", stu[i][0]);
}
}
}
void ave()
{
int a;
int sum = 0;
for(a=0;a<10;a++){
sum =sum + stu[a][1];
if(stu[a][1] == 0){
break;
}
}
printf("平均成绩为:%d\n",sum/(a+1));
}
void ex()
{
int a,b,c;
printf("请输入要改的同学的学号:\n");
scanf("%d",&a);
for(b=0;b<10;b++){
if(a == stu[b][0]){
printf("请输入修改的成绩:\n");
scanf("%d",&c);
stu[b][1] = c;
}
}
}
运行结果如下:
其中,1号功能是分别将学号和成绩赋值给数组;2号功能是遍历数组,打印出所有的数组元素;3号功能是先找出学号所在的行,然后查同一行的第二列的元素;4号功能是先找到第一列最大的元素,然后查那一行对应的第二列的元素;5号功能是类似于4号的,先查第一列最小的元素,然后查对应的第二列的元素;6号是先求出第二列的元素的和,再除以元素的个数;7号是先输入数据,然后根据数据找到对应的行,然后改变这一行第二列的元素。
总结:每一个功能都比较简单,但是代码量较大,比较繁琐。其中,数组是用来存储数据,函数用来减少代码量,if...else用来判断输出的数据。总之,还需多加练习,多多熟悉。