前言
因为自己学校实验室考核C语言要求写一份学生信息管理系统,当然是简易的那种,话不多说先上题目
提示:以下是本篇文章正文内容,下面案例可供参考
一、分析题目
要求有一个菜单栏,可以考虑创建一个menu函数。
到目前为止的要求都还挺容易的,根据要求,创建相应的Function函数就行了
其实我认为注意事项1,2才是本程序的难点之处,一开始的想法是再创建一个函数来专门判断是否进行了程序录入,但是在却卡在了switch,于是我觉得先给二维数组的第一个数赋值为101,通过判断它是否为101来判断是否录入
grade[0][0]=101;
而二维数组在引用它时增加了一定难度,不过还好
二、解决步骤
1.菜单栏
代码如下:
void menu()
{
printf("\n*******************学生成绩综合管理系统***************\n");
printf(" 1 成绩录入\n");
printf(" 2 计算平均分\n");
printf(" 3 计算最高分\n");
printf(" 4 成绩排序\n");
printf(" 5 退出\n");
printf("*******************************************************\n");
}
2.功能1
这里我直接用for语句实现了数据的录入,用if实现判断是否为0~100代码如下:
int Function_One()
{
int a,b;
grade_p=grade[0];
printf("Function_One....\n");
printf("直接按照顺序写下这20个成绩\n");
for(a=0;a<4;a++)
for(b=0;b<5;b++)
{
scanf("%d",&grade[a][b]);
/*判断成绩是否为0~100*/
if(*(grade_p+a*5+b)>100||*(grade_p+a*5+b)<0)
{
printf("成绩应为0~100之间的数值\n");
b--;//如果不是,重新输入并覆盖刚刚的成绩
if(b<0)/*这一步就是为了使指针能够重新指向上一个地址
其实如果直接用grade_p++这里就能直接写它--,
但是这样容易出错,我还是选择了*(grade_p+a*5+b)
这种方式*/
{
b=4;
a--;
if(a<0)
{
a=0;
}
}
}
}
printf("成绩成功录入!\n");
}
3.功能2
代码如下:
int Function_Two()
{
int a,b;
float c,d;
grade_p=grade[0];
c=0;
printf("Function_Two....\n");
printf("正在计算平均数\n");
for(a=0;a<4;a++)/*这里也没什么难处,进行20次相加就直接除以20*/
for(b=0;b<5;b++)
{
c=c+*(grade_p+a*5+b);
}
d=c/20;
printf("平均数为%.2f\n",d);/*对数进行修饰 %.2f 修饰成保留两位小数*/
}
4.功能3
代码如下:
int Function_Three()
{
int m,a,b;
grade_p=grade[0];
for(a=0;a<4;a++)/*同样的,进行20次判断,有更大的就赋值给m*/
for(b=0;b<5;b++)
{
if(m<*(grade_p+a*5+b))
{
m=*(grade_p+a*5+b);
}
}
printf("最大值为%d\n",m);
}
5.功能4
代码如下:
/*这段代码我是改了又改,最后发现大循环得用20次,小循环得用
19次,数学很重要/doge哈哈*/
int Function_Four()
{
int grade1[20];
int *grade1_p=grade1;
int m,a,b,n,x;
grade_p=grade[0];
m=0;
for(a=0;a<4;a++)/*二维数组实在是太难写了
这里将它重新改为一维数组进行运算*/
for(b=0;b<5;b++,m++)
{
*(grade1_p+m)=*(grade_p+a*5+b);
}
for(m=0;m<20;m++)/*就是这个地方,是将每个数进行20次判断,才能得到
最终的排位顺序*/
{
for(x=0;x<19;x++)
{
if (*(grade1_p+x)<*(grade1_p+x+1))
{
n=*(grade1_p+x+1);
*(grade1_p+x+1)=*(grade1_p+x);
*(grade1_p+x)=n;
}
}
}
for(m=0;m<20;m++)
{
printf("%d\n",*(grade1_p+m));
}
}
6.功能5
代码如下:
int Function_Five()
{
printf("正在退出系统……\n");
exit(0);
}
7.主函数
代码如下:
int main()
{
int t,x;
int *t_p=&t;
grade[0][0]=101;
grade_p=grade[0];
for(x=0;x<13;x++)
printf("%c",*(a_p+x));
while(1)
{
menu();
printf("选择:");
scanf("%d",t_p);
switch(*t_p)
{
case 1:
Function_One();
break;
case 2:
if(grade[0][0]==101)
{
printf("请先输入成绩~\n");
}
else Function_Two();
break;
case 3:
if(grade[0][0]==101)
{
printf("请先输入成绩~\n");
}
else Function_Three();
break;
case 4:
if(grade[0][0]==101)
{
printf("请先输入成绩~\n");
}
else Function_Four();
break;
case 5:
Function_Five();
break;
default:
printf("输入错误\n");
break;
}
}
}
包涵的头文件为
#include "stdio.h"
#include "stdlib.h"
使用的全局变量有
int grade[4][5];
int *grade_p=grade[0];
char a[13]={64,82,97,105,108,103,117,110,66,111,111,109,126};
char *a_p=a;
总结
以上就是今天要讲的内容,本文仅仅简单介绍了本题目该如何解决,大家可以举一反三运用到其他地方。
欢迎大家关注我
微信公众号:小白写编程
交流群:1033131250