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;
}
可根据使用自行更改模块,重点是一些函数模块的联合使用,指针的基础使用