#include <stdio.h>
#include <stdlib.h>
struct student
{
int no; //學號
char name[10];
float math,chinese,english; //三門課程的成績
double avr; //平均成績
};
struct student STU[50];
int input(int n) //錄入信息函數
{
char ch = 'y';
printf("\n\n請按以下格式輸入學生信息(可用Tab鍵對齊):\n");
while ((ch=='y') || (ch=='Y'))
{
printf("學號\t姓名\t數學\t語文\t英語\n");
scanf("%d%s%f%f%f",&STU[n].no,STU[n].name,&STU[n].math,&STU[n].chinese,&STU[n].english);
printf("\n是否繼續?(按Y繼續,其它結束)");
scanf(" %c",&ch);
STU[n].avr = (STU[n].math+STU[n].chinese+STU[n].english)/3.0;
n++;
}
return n;
}
void display(int count) //顯示信息函數
{
int i;
printf("\n學號\t姓名\t數學\t語文\t英語\t平均分");
printf("\n");
for(i=0;i<count;i++)
{
printf("%d",STU[i].no);
printf("\t%s",STU[i].name);
printf("\t%.1f",STU[i].math);
printf("\t%.1f",STU[i].chinese);
printf("\t%.1f",STU[i].english);
printf("\t%.2f",STU[i].avr);
printf("\n");
}
}
void sort(int count) //排序函數
{
int i,j;
/* 冒泡排序法*/
struct student t;
for(i=0;i<count;i++)
for(j=0;j<count-i-1;j++) //比較元素
{
if(STU[j].avr<STU[j+1].avr)
{
t=STU[j];
STU[j]=STU[j+1];
STU[j+1]=t;
}
}
}
int readDat(char file[],int n) //讀取文件函數
{
FILE *fp;
if((fp = fopen(file,"r")) == NULL)
{
printf("文件打開錯誤!\n");
exit(1);
}
printf("文件打開成功!\n");
fscanf(fp,"學號\t姓名\t數學\t語文\t英語\t平均\n");
while(!feof(fp))
{
fscanf(fp,"%d%s%f%f%f",&STU[n].no,STU[n].name,&STU[n].math,&STU[n].chinese,&STU[n].english);
STU[n].avr = (STU[n].math+STU[n].chinese+STU[n].english)/3.0;
n++;
}
fclose(fp);
return n-1;
}
void writeDat(char file[],int n) //寫入文件函數
{
FILE *fp;
int i;
if((fp = fopen(file,"w")) == NULL)
{
printf("文件打開錯誤!\n");
exit(1);
}
fprintf(fp,"學號\t姓名\t數學\t語文\t英語\t平均\n");
for(i=0; i<n; i++)
fprintf(fp,"%d\t%s\t%.1f\t%.1f\t%.1f\t%.2f\n",STU[i].no,STU[i].name,STU[i].math,STU[i].chinese,STU[i].english,STU[i].avr);
printf("文件保存成功!\n");
fclose(fp);
}
void main()
{
int num=0;
char filename[10];
char key;
while(1)
{
system("CLS");
printf("\t\t*******歡迎使用C語言成績管理系統*******\n");
printf("\t\t* 1、成績錄入 *\n");
printf("\t\t* 2、保存成績 *\n");
printf("\t\t* 3、讀取成績 *\n");
printf("\t\t* 4、排序功能 *\n");
printf("\t\t* 5、成績顯示 *\n");
printf("\t\t* 0、退出 *\n");
printf("\t\t***************************************\n");
printf("請選擇:\n");
scanf(" %c",&key);
switch(key)
{
case '1': //成績錄入
num = input(num);
break;
case '2': //保存成績
if(num == 0)
printf("請先輸入或讀取數據!\n");
else
{
printf("請輸入文件名:");
scanf("%s",filename);
writeDat(filename,num);
}
break;
case '3': //讀取成績
printf("請輸入文件名:");
scanf("%s",filename);
num = readDat(filename,num);
break;
case '4': //排序功能
if(num == 0)
printf("請先輸入或讀取數據!\n");
else
{
sort(num);
printf("排序完成!\n");
}
break;
case '5': //成績顯示
if(num == 0)
printf("請先輸入或讀取數據!\n");
else
display(num);
break;
case '0': //退出
exit(0);
default:
printf("輸入錯誤!\n");
break;
}
system("PAUSE");
}
}