利用指標寫一份學生資訊管理系統
- 前言
- 一、分析題目
- 二、解決步驟
- 1.選單欄
- 2.功能1
- 3.功能2
- 4.功能3
- 5.功能4
- 6.功能5
- 7.主函式
- 總結
前言
因為自己學校實驗室考核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
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/236136.html
標籤:其他
