一、結構體
數組中的各元素是屬於同一個類型的。有時需要將不同類型的數據組合成一個整體,以便於引用。如,一個學生的學號、姓名、性別、年齡、成績、家庭地址等項。這些項都與某一學生相聯繫。如果分別定義爲互相獨立的簡單變量,是難以反映它們之間的內在聯繫的。應當把它們組織成一個組合項,在一個組合項中包含若干個類型不同(當然也可以相同)的數據項。C語言提供了這樣一種數據結構,它稱爲結構體(structure)。它相當於其它高級語言中的“記錄”。
在定義了結構體變量以後,當然可以引用這個變量。
應遵守以下規則:
1·不能將一個結構體變量作爲一個整體進行輸入和輸出。
例如: 已定義:student1和student2爲結構體變量並且它們已有值。不能這樣引用:
printf(”%d,%s,%c,%d,%f,%s\n,”,student1);
只能對結構體變量中的各個成員分別輸出。
引用方式爲:結構體變量名.成員名
student1.num
可以對變量的成員賦值,例如: student.num=10010;
賦值語句的作用是將整數10010賦給student1變量中的成員num。
2·如果成員本身又屬一個結構體類型,則要用若干個成員運算符,一級一級地找到最低的一級的成員.
例如,對上面定義的結構體變量student1,可以這樣訪問各成員:
student1.num
student1.name
student1.birthday.month
student1.birthday.day
student1.birthday.year
注意:不能用student1.birthday來訪問student1變量中的成員birthday,因爲birthday本身是一個結構體變量。
3.對成員變量可以像普通變量一樣進行各種運算(根據其類型決定可以進行的運算)。
例如:
student2.score=student1.score;
sum=student1.score+student2.score;
student1.age++;
++student1.age;
由於'.”運算符的優先級最高,因此student1.age++是對student1.age進行自加運算,而不是先對age進行自加運算。
4.可以引用成員的地址,也可以引用結構體變量的地址。如:
scanf("%d”,&student1.num);
(輸入student1.num的值)
printf(”%o”,&student1);
(輸出student1的首地址)
但不能用以下語句整體讀入結構體變量,如
scanf(“%d,%s,%c,%d,%f,%s”,&student1);
結構體變量的地址主要用於作函數參數,傳遞結構體的地址。
二、設計:學生考勤系統設計
1.設計方案:
該系統能考察學生的出勤情況,所以包括每個班學生的全部信息。每個學生是一條記錄,包括姓名﹑性別﹑學號,對應於某天某門課程的出勤情況等。該系統可模擬考勤過程,記錄考勤結果,並能在課程結束後按照設定的考勤評分標準自動給出每個學生的考勤分數。
其中,學生可在本系統在線請假以及查看學期內的上課出勤信息。在線請假中,學生可以隨時查看到請假的詳細進展情況。同時,學生可以查看本期內上課出勤的詳細信息,如:查看某個課程在整個學期內的出勤情況——請假、曠課、遲到、早退了多少次,以及具體的時間、任課老師姓名、第幾節可等詳細信息。學生還可以查看本人的基本信息,如:所在院系、年級、專業、班級、學號、姓名、性別等,以及修改個人用戶密碼,查看本班的課表。
對於任課老師,其使用本系統時,管理所教班級學生的上課出勤信息以及查看所教學生的上課出勤信息。老師自動列出還沒有在網上公佈的學生上課出勤信息,系統依據學生請假系統,決定學生上課出勤的最終結果。並且查看自己所教課程、所教班級學生整個上課出勤統計信息以及詳細信息。
2、源程序清單:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define SIZE 3 /*定義常量SIZE便於以後的修改*/
struct student /*定義一個結構體數組存放學生的信息*/
{
int number; /*學號*/
char name[20];/*名字*/
char xueyuan[20];/*學院*/
int cla;/*班級*/
int score[3];/*分數*/
int sum;/*總分*/
int average;/*平均分*/
}stu[SIZE];
void menu();/*調用菜單函數*/
void write();/*讀入信息*/
void save(int x);/*保存stud.dat文件函數*/
void SaveOneStudent(int i);/*保存一個學生信息*/
void SaveAllStudent(int n);/*保存全部學生信息*/
void inturn (struct student c[]);/*用於對學生的信息按學號排序的函數*/
void save2();/*將排序後的信息存入student.dat文件中*/
int AddStudent(int n);/*增加學生信息*/
void InputOnestudent(int i);/*輸入一個同學信息*/
int DelStudent(int n);/*刪除學生信息*/
void ModifyStudent(int n);/*修改學生信息*/
void OutputOneStudent(int i);/*查詢一個學生信息*/
void SearchMenu(int n);/*查詢學生信息操作*/
void SearchNumber(int n);/*按學號查詢學生信息*/
void SearchName(int n);/*按姓名查詢學生信息*/
void SearchXueyuan(int n);/*按所在學院查詢學生信息*/
void SearchCla(int n);/*按所在班級查詢學生信息*/
void tongji();/*學生信息統計操作*/
void tongji2();/*統計不及格率操作*/
void zfsc();/*總分排序操作*/
void avecz();/*按平均分統計人數操作*/
void avecz();/*按平均分統計人數操作*/
void search();/*查找最高成績操作*/
void tongji2();/*統計不及格率操作*/
void read();/*讀取student.dat文件文件中學生的信息*/
/*主函數************************************************************************************/
int main()
{
int n=SIZE;
int choice;/*用戶選擇變量*/
printf("*******************************************************************************\n");
printf("* *\n");
printf("* Hwadee &學生成績文件管理& Hwadee *\n");
printf("* *\n");
printf("*******************************************************************************\n\n\n");
printf("******************************●●歡迎使用●●*********************************");
while (1)
{
menu();/*調用菜單函數形成操作界面*/
printf("請選擇:");
scanf("%d", &choice);
if ( choice==0 )
{
printf("\t\t\t\t謝謝使用!!!");
break;
}
switch(choice) /*多重選擇實現功能不同的功能*/
{
case 1:
write();
inturn(stu);
save(SIZE);
break;
case 2:
AddStudent(n);
break;
case 3:
DelStudent(n);
break;
case 4:
ModifyStudent(n);
break;
case 5:
SearchMenu(n);
break;
case 6:
tongji();
break;
case 0:
printf("\n謝謝使用!再見!\n");
default:
printf("\n按鍵錯誤!請重新選擇!\n");
}/*結束switch*/
}/*結束while*/
}
/*菜單函數*************************************************************************************/
void menu()
{
printf("************請輸入所需操作***********\n");/*選擇功能菜單*/
printf("*************************************\n");
printf("1.學生成績寫入及排序\n");
printf("2.增加學生信息\n");
printf("3.刪除學生信息\n");
printf("4.修改學生信息\n");
printf("5.查詢學生信息\n");
printf("6.學生成績統計操作\n");
printf("0.退出系統\n");
printf("**************************************\n");
}
/*寫入函數*************************************************************************************/
void write()
{
int i;/*計數變量*/
for(i=0;i<SIZE;i++)
{
printf("學號:");
scanf("%d",&stu[i].number);
printf("姓名:");
scanf("%s",&stu[i].number);
printf("學院:");
scanf("%s",&stu[i].xueyuan);
printf("班級:");
scanf("%d",&stu[i].cla);
printf("高數:");
scanf("%d",&stu[i].score[0]);
printf("英語:");
scanf("%d",&stu[i].score[1]);
printf("C語言:");
scanf("%d",&stu[i].score[2]);
stu[i].sum=(stu[i].score[0]+stu[i].score[1]+stu[i].score[2]);/*計算總成績*/
printf("總成績:%d",stu[i].sum);
stu[i].average=(stu[i].score[0]+stu[i].score[1]+stu[i].score[2])/3;/*計算平均成績*/
printf("平均成績:%d\n",stu[i].average);
}
}
/*排序函數**************************************************************************************/
void inturn(struct student m[])
{
int i,j;/*計數變量*/
struct student temp;/*中間變量 類型爲結構體*/
for(i=0;i<SIZE-1;i++) /*運用冒泡排序對結構體數組進行排序*/
for (j=i+1;j<SIZE-i-1;j++)
{
if(m[i].number>m[j].number)
{
temp=m[i];
m[i]=m[j];
m[j]=temp;
}
}
printf("\n排序後的學生信息:\n\n");
for (i=0;i<SIZE;i++)
{
printf("學號%d\t姓名%s\t學院%s\t班級%d\t高數%d\t英語%d\tC語言%d\t總成績%d\t平均成績%d\n\n",i+1,stu[i].number,stu[i].name,stu[i].xueyuan,stu[i].cla,stu[i].score[0],stu[i].score[1],stu[i].score[2],stu[i].sum,stu[i].average);
}/*輸出排序後的學生信息*/
}
/*寫入文件*************************************************************************************/
void save(int x)
{
FILE *fp;/*定義文件指針用於向文件讀入數據*/
int i;
if((fp=fopen("student.dat","rb+"))==NULL)/*以二進制讀,寫方式打開文件*/
{
printf("cannot open file\n");
exit(1);
}
for(i=0;i<SIZE;i++)
if(fwrite(&stu[i],sizeof(struct student),1,fp)!=1)
printf("file write error\n");
fclose(fp);
printf("\n信息保存成功!恭喜!!\n");
}
/*保存一個學生信息******************************************************************************/
void SaveOneStudent(int i)
{
FILE *fp;
if((fp=fopen("student.dat","rb+"))==NULL)/*以二進制讀,寫方式打開文件*/
{
printf("文件打開失敗!\n");
exit(1);
}
fseek(fp,i,0);/*文件指針定位到第i個學生*/
fwrite(&stu[i],sizeof(struct student),1,fp);/*將第i個學生信息寫入文件*/
fclose(fp);
}
/*保存全部學生信息******************************************************************************/
void SaveAllStudent(int n)/*保存全部學生信息*/
{
FILE *fp;
if((fp=fopen("student.dat","wb"))==NULL)/*以二進制寫方式打開文件*/
{
printf("文件打開失敗!\n");
exit(1);
}
fwrite(stu,sizeof(struct student),n,fp);/*將數組stu中全部學生信息寫入文件*/
fclose(fp);
}
/*將排序後的學生信息讀入到另外的文件中**********************************************************/
void save2()
{
FILE *fp;
int i;
if((fp=fopen("stud.dat","rb+"))==NULL)/*以二進制讀,寫方式打開文件*/
{
printf("文件打開失敗!\n");
exit(1);
}
for (i=0;i<SIZE;i++)
if (fwrite(&stu[i],sizeof(struct student),1,fp)!=1)
printf("file write error\n");
fclose(fp);/*讀取完畢關閉文件*/
}
/*增加學生信息*********************************************************************************/
int AddStudent(int n)
{
char c='y';
FILE *fp;
if((fp=fopen("student.dat","ab"))==NULL)/*以二進制追加方式打開文件*/
{
printf("文件打開失敗!\n");
exit(1);
}
while(c=='y')
{
printf("\n請輸入要增加的同學的信息:");
InputOnestudent(n);/*調用函數輸入第n個學生信息*/
fwrite(&stu[n],sizeof(struct student),1,fp);/*將第n個學生信息保存至文件*/
n++;/*學生數量增加1*/
printf("\n繼續輸入其他同學信息嗎?\n");
printf("確定進行刪除請按y;不進行刪除請按n\n");
c=getchar();
getchar();
}/*結束while*/
printf("\n按任意鍵繼續!\n");
getchar();
fclose(fp);
return(n);
}
/*輸入一個同學信息*****************************************************************************/
void InputOnestudent(int i)
{
printf("學號\t姓名\t學院\t班級\t高數\t英語\tC語言\n");
scanf("%d\t%s\t%s\t%d\t%d\t%d\t%d\t\n",&stu[i].number,stu[i].name,stu[i].xueyuan,&stu[i].cla,&stu[i].score[0],&stu[i].score[1],&stu[i].score[2]);
stu[i].sum=(stu[i].score[0]+stu[i].score[1]+stu[i].score[2]);/*計算總成績*/
stu[i].average=(stu[i].score[0]+stu[i].score[1]+stu[i].score[2])/3;/*計算平均成績*/
}
/*刪除學生信息*********************************************************************************/
int DelStudent(int n)
{
int i,k=-1,x;
char c1='y',c2;
while(c1=='y')
{
c2='n';
printf("\n請輸入要刪除的同學的學號:");
scanf("%d",&x);
for(i=0;i<n;i++)
if(x==stu[i].number)
{
k=i;/*找到要刪除的同學學號,並用k記下其下標*/
break;
}
if(k<0)/*k<0表示在數組中沒有找到輸入學號對應的學生*/
printf("\n輸入學號有誤,請重新輸入!");
else
{
printf("\n該同學信息如下:\n");
InputOnestudent(k);
printf("\n確定刪除?\n");
printf("確定進行刪除請按y;不進行刪除請按n\n");
c2=getchar();
getchar();
if(c2=='y')/*c2爲y,表示確定進行刪除操作*/
{
for(i=k;i<n;i++)
stu[i]=stu[i+1];/*刪除第k個學生信息*/
n--;/*學生人數減1*/
printf("刪除成功!恭喜!!\n");
}
else
printf("\n取消刪除!\n");
printf("\n繼續刪除操作嗎?");
printf("\n繼續刪除請按y;不進行刪除請按n\n");
c1=getchar();
getchar();
}
}/*結束while*/
save(n);
printf("\n按任意鍵繼續!\n");
getchar();
return(n);
}
/*修改學生信息********************************************************************************/
void ModifyStudent(int n)
{
struct student temp;
int k=-1,x,i;
char c1='y',c2;
while(c1=='y')
{
c2='y';
printf("\n請輸入要修改的同學的學號:");
scanf("%d",&x);
for(i=0;i<n;i++)
if(x==stu[i].number)
{
k=i;/*找到要修改的同學學號,並用k記下其下標*/
break;
}
if(k<0)/*k<0表示在數組中沒有找到輸入學號對應的學生*/
printf("\n輸入學號有誤,請重新輸入!");
else
{
printf("請輸入要修改學生修改後的的信息\n");
printf("學號\t姓名\t學院\t班級\t高數\t英語\tC語言\t\n");
scanf("%d\t%s\t%s\t%d\t%d\t%d\t%d\t\n",&temp.number,stu[i].name,temp.xueyuan,&temp.cla,&temp.score[0],&temp.score[1],&temp.score[2]);
temp.sum=(temp.score[0]+temp.score[1]+temp.score[2]);/*計算總成績*/
temp.average=(temp.score[0]+temp.score[1]+temp.score[2])/3;/*計算平均成績*/
stu[k]=temp;/*修改該學生信息*/
printf("\n修改成功!恭喜!!\n");
break;
}
SaveAllStudent(k);/*保存修改後的學生信息*/
printf("\n繼續修改操作嗎?");
printf("\n繼續修改請按y;不進行修改請按n\n");
c1=getchar();
getchar();
}/*結束while*/
printf("\n按任意鍵繼續!\n");
getchar();
}
/*查詢一個學生信息**********************************************************************************/
void OutputOneStudent(int i)
{
printf("學號:%d 姓名:%s 學院:%s 班級:%d\n",stu[i].number,stu[i].name,stu[i].xueyuan,stu[i].cla);
printf("高數:%d 英語:%d C語言:%d 總分:%d 平均分:%d\n",stu[i].score[0],stu[i].score[1],stu[i].score[2],stu[i].sum,stu[i].average);
}
/*查詢學生信息操作*********************************************************************************/
void SearchMenu(int n)
{
int selet;
while(1)
{
printf("**********************************************************\n");
printf("******************** 歡迎進入查詢系統 *******************\n");
printf("**********************************************************\n");
printf("\n");
printf("********************* 請輸入所需操作 *******************\n");/*選擇功能菜單*/
printf("**********************************************************\n");
printf("1.按學號查詢\n");
printf("2.按姓名查詢\n");
printf("3.按學院查詢\n");
printf("4.按班級查詢\n");
printf("0.返回主菜單\n");
printf("**********************************************************\n");
printf("請輸入操作選項:");
scanf("%d",&selet);
getchar();
switch(selet)
{
case 1:
SearchNumber(n);
break;
case 2:
SearchName(n);
break;
case 3:
SearchXueyuan(n);
break;
case 4:
SearchCla(n);
break;
case 0:
return;
default:
printf("輸入錯誤!請重新輸入!\n");
}
}/*結束while*/
}
/*按姓名查詢學生信息*******************************************************************************/
void SearchName(int n)
{
int i,j,k;
char xname[20],c='y';
while(c=='y')
{
k=-1;
printf("\n請輸入學生姓名:");
gets(xname);
for(i=0,j=1;i<n;i++)/*精確查詢*/
if(strcmp(stu[i].name,xname)==0)
{
k=i;/*找到要查詢的同學姓名,並用k記下其下標*/
printf("學生%d的信息:\n",j++);
OutputOneStudent(k);
printf("\n按任意鍵繼續!\n");
getchar();
}
if(k==-1)/*k表示沒有精確查詢結果*/
{
printf("\n模糊查詢結果如下:\n");
for(i=0,j=1;i<n;i++)
if(strstr(stu[i].name,xname)!=NULL)/*模糊查詢*/
{
k=1;
printf("學生%d的信息:\n",j++);
OutputOneStudent(k);
printf("\n按任意鍵繼續!\n");
getchar();
}
if(j==1)
printf("\n抱歉!沒有該學生信息!\n");
}
printf("繼續查詢其他學生信息嗎?");
printf("\n繼續修改請按y;不進行修改請按n\n");
c=getchar();
getchar();
}/*結束while*/
printf("\n按任意鍵繼續!\n");
getchar();
}
/*按學號查詢學生信息*******************************************************************************/
void SearchNumber(int n)
{
int i,j,k,x;
char c='y';
while(c=='y')
{
k=-1;
printf("\n請輸入學生學號:");
scanf("%d",&x);
for(i=0,j=1;i<n;i++)
if(stu[i].number==x)
{
k=i;/*找到要查詢的同學學號,並用k記下其下標*/
printf("學生%d的信息:\n",j++);
OutputOneStudent(k);
printf("\n按任意鍵繼續!\n");
getchar();
}
printf("繼續查詢其他學生信息嗎?");
printf("\n繼續修改請按y;不進行修改請按n\n");
c=getchar();
getchar();
}/*結束while*/
printf("\n按任意鍵繼續!\n");
getchar();
}
/*按所在學院查詢學生信息***************************************************************************/
void SearchXueyuan(int n)
{
int i,j,k;
char xxueyuan[20],c='y';
while(c=='y')
{
k=-1;
printf("\n請輸入學生所在學院:");
gets(xxueyuan);
for(i=0,j=1;i<n;i++)
if(strcmp(stu[i].xueyuan,xxueyuan)==0)
{
k=i;/*找到要查詢的同學所在學院,並用k記下其下標*/
printf("學生%d的信息:\n",j++);
OutputOneStudent(k);
printf("\n按任意鍵繼續!\n");
getchar();
}
printf("繼續查詢其他學生信息嗎?");
printf("\n繼續修改請按y;不進行修改請按n\n");
c=getchar();
getchar();
}/*結束while*/
printf("\n按任意鍵繼續!\n");
getchar();
}
/*按所在班級查詢學生信息***************************************************************************/
void SearchCla(int n)
{
int i,j,k,x;
char c='y';
while(c=='y')
{
k=-1;
printf("\n請輸入學生所在班級:");
scanf("%d",&x);
for(i=0,j=1;i<n;i++)
if(stu[i].cla==x)
{
k=i;/*找到要查詢的同學所在班級,並用k記下其下標*/
printf("學生%d的信息:\n",j++);
OutputOneStudent(k);
printf("\n按任意鍵繼續!\n");
getchar();
}
printf("繼續查詢其他學生信息嗎?");
printf("\n繼續修改請按y;不進行修改請按n\n");
c=getchar();
getchar();
}/*結束while*/
printf("\n按任意鍵繼續!\n");
getchar();
}
/*學生信息統計操作*********************************************************************************/
void tongji()
{
int x;
printf("**********************************************************\n");
printf("******************** 歡迎進入統計系統 *****************++\n");
printf("**********************************************************\n");
printf("\n");
printf("************請輸入所需操作***********\n");/*選擇功能菜單*/
printf("*************************************\n");
printf("1.按總分排序操作\n");
printf("2.按平均分統計人數操作\n");
printf("3.按查找最高成績操作\n");
printf("4.按統計部及格率操作\n");
printf("0.返回主菜單\n");
printf("**************************************\n");
printf("請輸入操作選項:");
scanf("%d",&x);/*用戶選擇變量*/
while(x>0&&x<6)
{
switch(x)
{
case 1:
zfsc();break;/*選擇按總分排序操作*/
case 2:
avecz();break;/*選擇按平均分統計人數操作*/
case 3:
search();break;/*選擇按查找最高成績操作*/
case 4:
tongji();break;/*選擇按統計部及格率操作*/
case 0:
printf("謝謝使用!再見!\n");
return;/*選擇退出操作*/
default:
printf("輸入錯誤!請重新輸入\n");/*提示錯誤信息*/
}
}
}
/*總分排序操作*************************************************************************************/
void zfsc()
{
FILE *wj,*fp;
int i,j;
struct student temp;
if((fp=fopen("student.dat","wb"))==NULL)
{
printf("文件打開失敗!\n");
exit(1);
}
for(i=0;i<SIZE-1;i++)
for(j=0;j<SIZE-i-1;j++)
if(stu[i].sum<stu[j].sum)/*冒泡法排序*/
{
temp=stu[j];
stu[j]=stu[i];
stu[i]=temp;
}
if((wj=fopen("student1.dat","wb+"))==NULL)
{
printf("文件打開失敗!\n");
exit(1);
}
else
{
for(i=0;i<SIZE;i++)
fwrite(&stu[i],sizeof(struct student),1,wj);/*寫入文件*/
}
fclose(fp);
fclose(wj);
}
/*按平均分統計人數操作*****************************************************************************/
void avecz()
{
int i=0,k,m;
printf("平均分不及格的同學有:\n");
for(i=0;i<SIZE;i++)/*統計平均分不及格人數*/
{
k=0;
if(stu[i].average<60)
{
m=i;/*找到平均分不及格學生,並用m記下其下標*/
OutputOneStudent(m);
k++;/*k爲平均分不及格人數*/
}
printf(" 平均分不及格的同學信息輸出結束\n");
printf("共%d人\n",k);
printf(" **********************************************************");
}
printf("平均分60~69分的同學有:\n");
for(i=0;i<SIZE;i++)/*統計平均分60~69分人數*/
{
k=0;
if(stu[i].average>59&&stu[i].average<70)
{
m=i;/*找到平均分69~69學生,並用m記下其下標*/
OutputOneStudent(m);
k++;/*k爲平均分60~69分人數*/
}
printf(" 平均分60~69分的同學信息輸出結束\n");
printf("共%d人\n",k);
printf(" **********************************************************");
}
printf("平均分70~79分的同學有:\n");
for(i=0;i<SIZE;i++)/*統計平均分70~79分人數*/
{
k=0;
if(stu[i].average>69&&stu[i].average<80)
{
m=i;/*找到平均分70~79學生,並用m記下其下標*/
OutputOneStudent(m);
k++;/*k爲平均分70~79分人數*/
}
printf(" 平均分70~79分的同學信息輸出結束\n");
printf("共%d人\n",k);
printf(" **********************************************************");
}
printf("平均分80~89分的同學有:\n");
for(i=0;i<SIZE;i++)/*統計平均分80~89分人數*/
{
k=0;
if(stu[i].average>79&&stu[i].average<90)
{
m=i;/*找到平均分80~89學生,並用m記下其下標*/
OutputOneStudent(m);
k++;/*k爲平均分80~89分人數*/
}
printf(" 平均分80~89分的同學信息輸出結束\n");
printf("共%d人\n",k);
printf(" **********************************************************");
}
printf("平均分90~100分的同學有:\n");
for(i=0;i<SIZE;i++)/*統計平均分90~100分人數*/
{
k=0;
if(stu[i].average>89&&stu[i].average<=100)
{
m=i;/*找到平均分90~100學生,並用m記下其下標*/
OutputOneStudent(m);
k++;/*k爲平均分90~100分人數*/
}
printf(" 平均分90~100分的同學信息輸出結束\n");
printf("共%d人\n",k);
printf(" **********************************************************");
}
}
/*查找最高成績操作****************************************************************************/
void search()
{
int i=0,x,k=0;
printf("********************輸入查找選項**********************\n");/*選擇功能菜單*/
printf(" 查找高數成績最高學生請按:1\n");
printf(" 查找英語成績最高學生請按:2\n");
printf(" 查找C語言成績最高學生請按:3\n");
scanf("%d",&x);/*用戶選擇變量*/
if(x==1)
{
for(i=0;i<SIZE;i++)/*查找高數成績最高學生*/
{ if(stu[i].score[0]>stu[k].score[0])
i=k;
}
printf("高數成績最高學生信息如下:\n");
OutputOneStudent(k);
printf(" 輸出結束\n");
printf(" **********************************************************");
}
if(x==2)
{
for(i=0;i<SIZE;i++)/*查找英語成績最高學生*/
{ if(stu[i].score[1]>stu[k].score[1])
i=k;
}
printf("英語成績最高學生信息如下:\n");
OutputOneStudent(k);
printf(" 輸出結束\n");
printf(" **********************************************************");
}
if(x==3)
{
for(i=0;i<SIZE;i++)/*查找C語言成績最高學生*/
{ if(stu[i].score[2]>stu[k].score[2])
i=k;
}
printf("C語言成績最高學生信息如下:\n");
OutputOneStudent(k);
printf(" 輸出結束\n");
printf(" **********************************************************");
}
}
/*統計不及格率操作*****************************************************************************/
void tongji2()
{
int x,i,k;
printf("********************輸入統計選項**********************\n"); /*選擇功能菜單*/
printf("統計高數成績不及格率請按:1\n");
printf("統計英語成績不及格率請按:2\n");
printf("統計C語言成績不及格率請按:3\n");
scanf("%d",&x);/*用戶選擇變量 */
if(x==1)
{
for(i=0;i<SIZE;i++)/*統計高數成績不及格率*/
{
k=0;
if(stu[i].score[0]<60)
k++;/*k爲高數成績不及格人數*/
printf("共%d人高數未及格\n",k);
printf("不及格率爲%f\n",k/SIZE);
printf(" **********************************************************");
}
}
if(x==2)
{
for(i=0;i<SIZE;i++)/*統計英語成績不及格率*/
{
k=0;
if(stu[i].score[1]<60)
k++;/*k爲英語成績不及格人數*/
printf("共%d人英語不及格\n",k);
printf("不及格率爲%f\n",k/SIZE);
printf(" **********************************************************");
}
}
if(x==3)
{
for(i=0;i<SIZE;i++)/*統計C語言成績不及格率*/
{
k=0;
if(stu[i].score[2]<60)
k++;/*k爲C語言成績不及格人數*/
printf("共%d人C語言不及格\n",k);
printf("不及格率爲%f\n",k/SIZE);
printf(" **********************************************************");
}
}
}