利用指針寫一份學生信息管理系統


前言

由於本身學校實驗室考覈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

相關文章
相關標籤/搜索