day 14 c语言综合练习----学生成绩管理系统

   这个管理系统需用到之前学习的所有的知识,系统的联系起来来做。需要用到的知识由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用来判断输出的数据。总之,还需多加练习,多多熟悉。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值