古詩詞大全網 - 成語查詢 - c語言課程設計 學生成績管理系統

c語言課程設計 學生成績管理系統

樓主笑納

#include <stdio.h>

#include <stdlib.h>

#define SIZE 10 /*定義常量SIZE便於以後的修改*/

struct student /*定義壹個結構體數組存放學生的信息*/

{

int number; /*學號*/

char name[20];/*名字*/

float score[3];/*分數*/

float average;/*平均分*/

}stu[SIZE];

void menu();/*調用菜單函數*/

void write();/*讀入信息*/

void save();/*保存stud.dat文件函數*/

void open();/*檢查是否正確保存*/

void inturn (struct student c[]);/*用於對學生的信息按平均分排序的函數*/

void save2();/*將排序後的信息存入studsort.dat文件中*/

void read();/*讀取studsort.dat文件文件中第2 4 6 8 10個學生的信息*/

void main()

{

int choice;/*用戶選擇變量*/

printf("*******************************************************************************\n");

printf("* *\n");

printf("* Hwadee &學生成績文件管理& Hwadee *\n");

printf("* *\n");

printf("*******************************************************************************\n\n\n");

printf("******************************●●歡迎使用●●*********************************");

system("pause");

while (1)

{

menu();/*調用菜單函數形成操作界面*/

printf("請選擇:\t");

scanf("%d", &choice);

if ( choice == 0 )

{

system("cls");

printf("\n\n\t\t\t\t謝謝使用!!!);

break;

}

switch(choice) /*多重選擇實現功能不同的功能*/

{

case 1:

write();

break;

case 2:

system("cls");

save();

break;

case 3:

system("pause");

system("cls");

open();

break;

case 4:

system("cls");

printf("排序前的學生信息:\n");

open();

inturn(stu);

save2();

break;

case 5:

system("cls");

read();

break;

default:

printf("\n無此項功能!\n請重新輸入\n");

}

}

}

void menu()

{

printf("\n1*****輸入學生信息\t\t2*****將信息存入文件stud.dat中\n");

printf("3*****檢查文件數據\t\t4*****將學生信息排序並存入文件studsort.dat中\n");

printf("5*****讀取文件studsort.dat中的第 2 4 6 8 10個學生的信息\n");

printf("0*****退出系統\n\n\n");

}

/**********************************************************************\

函數名稱:

write

功能描述:

完成將學生信息寫入

函數參數:

i stu

返回值:

模塊歷史:

\*********************************************************************/

void write()

{

int i;/*計數變量*/

stu[i].average = 0;/*初始化結構體成員 average*/

printf("請妳輸入學生的信息\n");

printf("學號\t姓名\t語文\t數學\t英語\t\n");

for (i=0; i<SIZE;i++)

{

scanf("%d\t",&stu[i].number);

if (stu[i].number == 0)/*不需輸入信息時輸入0即可*/

break;

scanf("%s\t%f\t%f\t%f",&stu[i].name, &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;/*計算平均成績*/

}

}

/**********************************************************************\

函數名稱:

save

功能描述:

將寫入的信息讀入文件中

函數參數:

FILE *fp i

返回值:

模塊歷史:

\*********************************************************************/

void save()

{

FILE *fp;/*定義文件指針用於向文件讀入數據*/

int i;

if ((fp=fopen("stud.dat","wb")) == NULL)

{

printf("cannot open file\n");

return;

}

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\n");

}

/**********************************************************************\

函數名稱:

open

功能描述:

用於檢查讀入文件的數據是否正確

函數參數:

FILE *cp i

返回值:

模塊歷史:

\*********************************************************************/

void open()

{

int i;

FILE *cp;

cp = fopen ("stud.dat","rb");

printf("保存在stud.dat文件中的信息:\n\n");

printf("學號\t姓名\t數學\t語文\t英語\t平均分\n\n");

for (i=0;i<SIZE;i++)

{

fread(&stu[i],sizeof(struct student),1,cp);

printf("%d\t%s\t%.1f\t%.1f\t%.1f\t%.1f\n\n\n",stu[i].number, stu[i].name, stu[i].score[0], stu[i].score[1], stu[i].score[2], stu[i].average );

}

fclose (cp);

}

/**********************************************************************\

函數名稱:

inturn

功能描述:

用於對結構體數組中的元素排序

函數參數:

into i,j,k

struct student temp

返回值:

模塊歷史:

\*********************************************************************/

void inturn(struct student m[])

{

int i,j,k;/*計數變量*/

struct student temp;/*中間變量 類型為結構體*/

for(i=0; i<SIZE-1; i++) /*運用冒泡排序對結構體數組進行排序*/

for (j=i+1; j<SIZE; j++)

{

if( m[i].average < m[j].average )

{

temp = m[i];

m[i] = m[j];

m[j] = temp;

}

}

printf("\n排序後的學生信息:\n\n");

printf(" 學號\t姓名\t數學\t語文\t英語\t平均分\n");

for (i=0; i<SIZE; i++)

{

printf("第%d名 %d\t%s\t%.1f\t%.1f\t%.1f\t%.1f\n\n\n",i+1, stu[i].number, stu[i].name, stu[i].score[0], stu[i].score[1], stu[i].score[2], stu[i].average );

}/*輸出排序後的學生信息*/

}

/**********************************************************************\

函數名稱:

save2

功能描述:

將排序後的學生信息讀入到另外的文件中

函數參數:

FILE *mp

i

返回值:

模塊歷史:

\*********************************************************************/

void save2()

{

FILE *mp;

int i;

if ((mp=fopen("studsort.dat","wb"))==NULL)

{

printf("cannot open file\n");

return;

}

for (i=0;i<SIZE;i++)

if (fwrite(&stu[i], sizeof(struct student), 1, mp) != 1)

printf("file write error\n");

fclose(mp);/*讀取完畢關閉文件*/

}

/**********************************************************************\

函數名稱:

read

功能描述:

讀出另外文件中的信息

函數參數:

FILE *tp

i

返回值:

模塊歷史:

\*********************************************************************/

void read()

{

int i=1;

FILE *tp;

tp = fopen ("studsort.dat", "rb" );

printf("studsort.dat文件中偶數號碼學生的信息如下:\n\n");

printf("學號\t姓名\t數學\t語文\t英語\t平均分\n\n");

for (i = 1;i<SIZE;i += 2)

{

fseek(tp,i*sizeof(struct student),0);/*fseek函數可以根據用戶所需對文件開頭的偏移量來讀取文件的數據。

k*sizeof(struct student)是指將位置指針移到當前位置k個字節處*/

fread(&stu[i],sizeof(struct student),1,tp);

/*註意:必須使用fseek函數定位後才能根據自己所需讀出數據,但是只用fseek函數不用fread,

只是把數據打印到屏幕上而並沒有從文件中讀取。這是壹個常見性問題*/

printf("%d\t%s\t%.1f\t%.1f\t%.1f\t%.1f\n", stu[i].number, stu[i].name, stu[i].score[0], stu[i].score[1], stu[i].score[2], stu[i].average );

}

fclose (tp);/*讀取完畢關閉文件*/

}