利用指针写一份学生信息管理系统


前言

由于本身学校实验室考核C语言要求写一份学生信息管理系统,固然是简易的那种,话很少说先上题目一个简单的题目

数组


提示:如下是本篇文章正文内容,下面案例可供参考函数

1、分析题目

要求有一个菜单栏,能够考虑建立一个menu函数。spa

要求
到目前为止的要求都还挺容易的,根据要求,建立相应的Function函数就好了
注意

指针

其实我认为注意事项1,2才是本程序的难点之处,一开始的想法是再建立一个函数来专门判断是否进行了程序录入,可是在却卡在了switch,因而我以为先给二维数组的第一个数赋值为101,经过判断它是否为101来判断是否录入code

grade[0][0]=101;

而二维数组在引用它时增长了必定难度,不过还好blog

2、解决步骤

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

代码以下:it

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

代码以下:io

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

相关文章
相关标签/搜索