C语言成绩管理简易模块

C语言成绩管理简易模块

/*********************************************************************
运行环境  :VS2019
名称      :成绩管理系统
功能      :对成绩进行排序等处理
所需知识点:接受字符的使用、成绩排序的算法、
            for语句的灵活使用、全局flag的使用、
			循环的break
制作人    :霍俊良
制作日期  :2021年3月17日
**********************************************************************/

#include <stdio.h>
#include <stdlib.h>

int flag = NULL;/*定义一个全局变量判断是否已有成绩录入(尽量避免使用)*/
int main(void)
{/*对函数定义*/
	void initialize();
	void function(int* q, float* w);
	float a[10] = { NULL };//取消垃圾值(填充空间)
	int b=0;
	initialize();
	while (1)
	{
		if (flag != 2)
		{
			printf("您要使用的功能:\n");
			b = getchar();
			//rewind(stdin);//清空缓存区便于getchar();下次的使用
			// 未能实现
			//fflush(stdin);
			function(&b, a);
		}
		else
		{
			while(1)
			{ }
		}
	}
	return 0;
}
//*****************初始化界面****************//
void initialize()
{
	printf("******************学生成绩综合管理系统***************\n");
	printf("\t\t  1 成绩录入\n\t\t  2 计算平均分\n\t\t  3 计算最高分\n");
	printf("\t\t  4 成绩排序\n\t\t  5 退出\n");
	printf("*****************************************************\n");
	
}
/***********总执行函数***********************
     利用基本switch {case}语句选择功能模块
     将数组a的地址和选择标志值的地址送入函数内
     实现选择语句模块并通过地址对成绩进行管理
*********************************************/

void function(int * q, float * w)
{
	void function1(float* p);
	void function2(float* p);
	void Max(float* p);
	void decline(float* p);
	void Esc();
	
		if ((*q != 49) && (*q != 50) && (*q != 51) && (*q != 52)&& (*q != 53))
		{
			printf("输入错误,请重新输入\n");
		}
		else
		{
			switch (*q)
			{
			case 49:function1(w); break;
			case 50:function2(w); break;
			case 51:Max(w); break;
			case 52:decline(w); break;
			case 53:Esc(); break;
			}
		}
	
}
/***********功能模块1*************************
           成绩录入
*********************************************/
void function1(float* p)
{

	int i = 0;
	printf("你选择的是第1项功能:成绩录入\n");
	if (flag != 1)//判断是否已有成绩录入
	{
		printf("未输入成绩是否现在输入,输入请按1  否则按任意键\n");

		while (getchar() != '\n')					//通过while循环删除缓存
			continue;

			i = getchar();
			//rewind(stdin);//清空缓存区便于getchar();下次的使用
		if (i == 49)
		{
			printf("输入四个成绩:\n");
			scanf_s("%f%f%f%f", p, (p + 1), (p + 2), (p + 3));
			printf("四名同学的成绩分别为:%6.2f%6.2f%6.2f%6.2f\n", *p, *(p + 1), *(p + 2), *(p + 3));

			while (getchar() != '\n')					//通过while循环删除缓存
				continue;

			flag = 1;
		}
		else 
		{
			printf("结束\n");

			while (getchar() != '\n')					//通过while循环删除缓存
				continue;
		}
	}
	else
	{
		printf("已输入成绩是否修改成绩,修改请按1  否则按任意键\n");

		while (getchar() != '\n')					//通过while循环删除缓存
			continue;
			i = getchar();
		
		if (i == 49)
		{
			printf("输入四个成绩:\n");
			scanf_s("%f%f%f%f", p, (p + 1), (p + 2), (p + 3));
			printf("四名同学的成绩分别为:\n%6.2f%6.2f%6.2f%6.2f", *p, *(p + 1), *(p + 2), *(p + 3));

			while (getchar() != '\n')					//通过while循环删除缓存
				continue;

		}
		else 
		{
			printf("结束\n");

			while (getchar() != '\n')					//通过while循环删除缓存
				continue;
		}
	}
}
/***********功能模块2*************************
		   计算平均分
*********************************************/
void  function2(float* p)
{
	printf("你选择的是第2项功能:计算平均分\n");
	int i = 0;
	if (flag == 0)
	{
		printf("\n暂无学生成绩是否需要输入,输入请按1  否则按任意键退出\n");

		while (getchar() != '\n')					//通过while循环删除缓存
			continue;

			i = getchar();
		
		if (i == 49)
		{
			printf("输入四个成绩:\n");
			scanf_s("%f%f%f%f", p, (p + 1), (p + 2), (p + 3));
			flag = 1;//成绩录入标志位
			printf("四位同学的平均分:%7.2f\n", (*p + *(p + 1) + *(p + 2) + *(p + 3))/4);

			while (getchar() != '\n')					//通过while循环删除缓存
				continue;

		}
		else
		{
			printf("结束\n");

			while (getchar() != '\n')					//通过while循环删除缓存
				continue;
		}
	}
	else
	{
		printf("\n已有学生成绩是否需要修改,修改请按1  否则按任意键直接得出平均分\n");

		while (getchar() != '\n')					//通过while循环删除缓存
			continue;

			i = getchar();
			
		if (i == 49)
		{
			printf("输入四个成绩:\n");
			scanf_s("%f%f%f%f", p, (p + 1), (p + 2), (p + 3));
			flag = 1;//成绩录入标志位
			printf("四位同学的平均分:%7.2f\n", (*p + *(p + 1) + *(p + 2) + *(p + 3)) / 4);

			while (getchar() != '\n')					//通过while循环删除缓存
				continue;
		}
		else
		{
			printf("四位同学的平均分:%7.2f\n", (*p + *(p + 1) + *(p + 2) + *(p + 3)) / 4);

			while (getchar() != '\n')					//通过while循环删除缓存
				continue;
		}
	}
}
/***********功能模块3*************************
		   计算最高分
*********************************************/
void Max(float * p)
{
	printf("你选择的是第3项功能:计算最高分\n");
	int i;
	float max;
	if (flag == 0)
	{
		printf("\n暂无学生成绩是否需要输入,输入请按1  否则按任意键退出\n");

		while (getchar() != '\n')					//通过while循环删除缓存
			continue;

		i = getchar();

		if (i == 49)
		{
			i = 1;
			printf("输入四个成绩:\n");
			scanf_s("%f%f%f%f", p, (p + 1), (p + 2), (p + 3));
			flag = 1;//成绩录入标志位
			for (int l = 0; l < 3; l++)//偷懒一个小步骤利用冒泡模块实现最大值da
				for (int m = 0; m < 3 - l; m++)
					if (*(p + m) < *(p + m + 1))
					{
						max = *(p+m); *(p + m) = *(p +1+ m); *(p +1+ m) = max;
					}
			printf("四个成绩中的最大值Max = %5.2f\n", *p);

			while (getchar() != '\n')					//通过while循环删除缓存
				continue;

		}
		else
		{
			printf("结束\n");

			while (getchar() != '\n')					//通过while循环删除缓存
				continue;
		}
	}
	else
	{
		printf("\n已有学生成绩是否需要修改,修改请按1  否则按任意键直接得出最大值\n");

		while (getchar() != '\n')					//通过while循环删除缓存
			continue;

		i = getchar();

		if (i == 49)
		{
			printf("输入四个成绩:\n");
			scanf_s("%f%f%f%f", p, (p + 1), (p + 2), (p + 3));
			flag = 1;//成绩录入标志位
			for (int l = 0; l < 3; l++)//偷懒一个小步骤利用冒泡模块实现最大值到达头部
				for (int m = 0; m < 3 - l; m++)
					if (*(p + m) < *(p + m + 1))
					{
						max = *(p + m); *(p + m) = *(p + 1 + m); *(p + 1 + m) = max;
					}
			max = *p;
			printf("四个成绩中的最大值Max = %5.2f\n", max);

			while (getchar() != '\n')					//通过while循环删除缓存
				continue;
		}
		else
		{
			printf("四位同学的平均分:%7.2f\n", (*p + *(p + 1) + *(p + 2) + *(p + 3)) / 4);

			while (getchar() != '\n')					//通过while循环删除缓存
				continue;
		}
	}
}
/***********功能模块4*************************
		    成绩排序
**********************************************/
void decline(float* p)
{
	printf("你选择的是第4项功能: 成绩排序\n");
	int i;
	float max;
	if (flag == 0)
	{
		printf("\n暂无学生成绩是否需要输入,输入请按1  否则按任意键退出\n");

		while (getchar() != '\n')					//通过while循环删除缓存
			continue;

		i = getchar();
		if (i == 49)
		{
			i = 1;
			printf("输入四个成绩:\n");
			scanf_s("%f%f%f%f", p, (p + 1), (p + 2), (p + 3));
			flag = 1;//成绩录入标志位
			for (int l = 0; l < 3; l++)//偷懒一个小步骤利用冒泡模块实现最大值到达头部
				for (int m = 0; m < 3 - l; m++)
					if (*(p + m) < *(p + m + 1))
					{
						max = *(p + m); *(p + m) = *(p + 1 + m); *(p + 1 + m) = max;
					}
			printf("排好的降序成绩为:\n");
			for (i = 0; i < 4; i++)
				printf("%5.2f  ",*(p+i));
			printf("\n");

			while (getchar() != '\n')					//通过while循环删除缓存
				continue;

		}
		else
		{
			printf("结束\n");

			while (getchar() != '\n')					//通过while循环删除缓存
				continue;
		}
	}
	else
	{
		printf("\n已有学生成绩是否需要修改,修改请按1  否则按任意键直接得出排序结果\n");

		while (getchar() != '\n')					//通过while循环删除缓存
			continue;

		i = getchar();
		if (i == 49)
		{
			printf("输入四个成绩:\n");
			scanf_s("%f%f%f%f", p, (p + 1), (p + 2), (p + 3));
			flag = 1;//成绩录入标志位
			for (int l = 0; l < 3; l++)//利用冒泡模块实现排序
				for (int m = 0; m < 3 - l; m++)
					if (*(p + m) < *(p + m + 1))
					{
						max = *(p + m); *(p + m) = *(p + 1 + m); *(p + 1 + m) = max;
					}
			printf("排好的降序成绩为:\n");
			for (i = 0; i < 4; i++)
				printf("%5.2f  ", *(p + i));
			printf("\n");

			while (getchar() != '\n')					//通过while循环删除缓存
				continue;
		}
		else
		{
			printf("排好的降序成绩为:\n");
			for (i = 0; i < 4; i++)
				printf("%5.2f  ", *(p + i));
			printf("\n");

			while (getchar() != '\n')					//通过while循环删除缓存
				continue;
		}
	}
}
/***********功能模块5*************************
			  退出
*********************************************/
void Esc()
{
	printf("正在退出系统……");
	flag = 2;

	while (getchar() != '\n')					//通过while循环删除缓存
		continue;
}

可根据使用自行更改模块,重点是一些函数模块的联合使用,指针的基础使用

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值