学生成绩管理系统
在1.0的基础上找了部分问题
版本2.0
#include <stdio.h>
#include <string.h>
#include <windows.h>
#define N 30
#define M 10
typedef struct date
{
int year;
int month;
int day;
}D;
typedef struct student
{
long ID; //学号
char name[10]; //姓名
char sex; //性别 男:M 女:F
D birthday; //出生日期
int score[M]; //课程成绩
int sum; //总分
float aver; //平均分
}STUDENT;
void Wolcome();
void gotoxy(int,int);
void Read(STUDENT stu[],int n,int m);
void Sum_Aver(STUDENT stu[],int n,int m);
void Total_Aver(STUDENT stu[],int n,int m);
void SdudentTotal_Aver(STUDENT stu[],int n,int m);
void SelectionSort(STUDENT stu[],int n,int m,int (*compare)(int a,int b));
int DescendingScoreSort(int a,int b);
int AscendingScoreSort(int a,int b);
void Print(STUDENT stu[],int n,int m);
void IDSort(STUDENT stu[],int n,int m);
void SortString(STUDENT stu[],int n,int m);
int LinSearch(STUDENT stu[],int n,int x);
int NameSearch(STUDENT stu[],char Name[],int n);
void StatisticAnalysis(STUDENT stu[],int n,int m);
void WritetoFile(STUDENT stu[],int n,int m);
void ReadfromFile(STUDENT stu[],int *n,int *m);
void Fanhui();
int main()
{
Wolcome();
}
void gotoxy(int x, int y) //定位坐标
{
COORD pos;
pos.X = x;
pos.Y = y;
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), pos);
}
void Fanhui()
{
char p; //用于按成绩排序,按任意键结束
printf("按任意键返回菜单");
while(getchar()!='\n');
{
scanf("%c",&p);
}
system("cls");
Wolcome();
}
void Wolcome() //欢迎界面
{
int i,j;
static STUDENT stu[N];
int ret; //查找学生成绩时的返回值,若为-1则未找到,否则找到
long x; //被搜索学生学号
char Name[10];//被搜索学生姓名
int p; //选择序号
static int n,m; //输入学生人数
gotoxy(46,2);
printf("学 生 成 绩 管 理 系 统");
gotoxy(25,4);
for(i=0;i<35;i++)
{
printf("* ");
}
gotoxy(25,21);
for(i=0;i<35;i++)
{
printf("* ");
}
gotoxy(25,25);
for(i=0;i<35;i++)
{
printf("* ");
} //横框
for(j=5;j<25;j++)
{
gotoxy(25,j);
printf("*");
}
for(j=5;j<25;j++)
{
gotoxy(93,j);
printf("*");
} //竖框
gotoxy(32,6);
printf("1.录入每个学生的学号、姓名和各科考试成绩");
gotoxy(32,7);
printf("2.计算每门课程的总分和平均分");
gotoxy(32,8);
printf("3.计算每个学生的总分和平均分");
gotoxy(32,9);
printf("4.按每个学生的总分由高到低排出名次表");
gotoxy(32,10);
printf("5.按每个学生的总分由低到高排出名次表");
gotoxy(32,11);
printf("6.按学号由小到大排出成绩表");
gotoxy(32,12);
printf("7.按姓名的字典顺序排出成绩表");
gotoxy(32,13);
printf("8.按学号查找学生排名及其考试成绩");
gotoxy(32,14);
printf("9.按姓名查找学生排名及其考试成绩");
gotoxy(32,15);
printf("10.对每门课程分别统计每个类别的人数及其所占百分比");
gotoxy(32,16);
printf("11.输出每个学生的名次学号姓名性别出生日期各科分数总分平均分");
gotoxy(32,17);
printf("12.将每个学生的记录信息写入文件");
gotoxy(32,18);
printf("13.从文件中读出每个学生的记录信息并显示");
gotoxy(32,19);
printf("0.Exit");
gotoxy(32,23);
printf("Please enter your choice[ ]\b\b\b");
scanf("%d",&p);
switch(p)
{
case 1:
system("cls");
printf("输入学生人数和考试科目数:");
scanf("%d %d",&n,&m);
Read(stu,n,m);
system("cls");
Wolcome();
break;
case 2:
system("cls");
Total_Aver(stu,n,m);
break;
case 3:
system("cls");
SdudentTotal_Aver(stu,n,m);
break;
case 4:
system("cls");
printf("按每个学生的总分由高到低排出名次表:\n");
SelectionSort(stu,n,m,DescendingScoreSort);
Print(stu,n,m);
break;
case 5:
system("cls");
printf("按每个学生的总分由低到高排出名次表:\n");
SelectionSort(stu,n,m,AscendingScoreSort);
Print(stu,n,m);
break;
case 6:
system("cls");
printf("按学号由小到大排出成绩表:\n");
IDSort(stu,n,m);
Print(stu,n,m);
Fanhui();
break;
case 7:
system("cls");
printf("按姓名的字典顺序排出成绩表:\n");
SortString(stu,n,m);
Print(stu,n,m);
Fanhui();
break;
case 8:
system("cls");
SelectionSort(stu,n,m,DescendingScoreSort);
printf("Input the search ID:");
scanf("%ld",&x);
ret=LinSearch(stu,n,x);
if(ret != -1)
{
printf("排名 : %d 姓名: %s 成绩 : %d\n",ret+1,stu[ret].name,stu[ret].sum);
}
else
{
printf("Not found!\n");
Fanhui();
}
break;
case 9:
system("cls");
SelectionSort(stu,n,m,DescendingScoreSort);
printf("Input the search name:");
while(getchar()!='\n');
gets(Name);
ret=NameSearch(stu,Name,n);
if(ret != -1)
{
printf("排名 : %d 成绩 : %d\n",ret+1,stu[ret].sum);
}
else
{
printf("Not found!\n");
}
printf("任意键加回车结束");
Fanhui();
break;
case 10:
system("cls");
printf("等级分析:\n");
StatisticAnalysis(stu,n,m);
break;
case 11:
system("cls");
Print(stu,n,m);
break;
case 12:
system("cls");
WritetoFile(stu,n,m);
break;
case 13:
system("cls");
ReadfromFile(stu,&n,&m);
break;
case 0:
exit(0);
}
}
void Sum_Aver(STUDENT stu[],int n,int m)
{
int i,j;
int sum;
for(i=0;i<n;i++)
{
sum=0;
for(j=0;j<m;j++)
{
sum=sum+stu[i].score[j];
}
stu[i].sum=sum;
stu[i].aver=(float)sum/m;
}
}
/*
1.录入每个学生的学号、姓名和各科考试成绩
*/
void Read(STUDENT stu[],int n,int m)
{
int i,j;
for(i=0;i<n;i++)
{
printf("输入第%d个学生的 学号 姓名 性别 出生日期 各科分数:\n",i+1);
scanf("%ld",&stu[i].ID);
scanf("%s",&stu[i].name);
scanf(" %c",&stu[i].sex);
scanf("%d",&stu[i].birthday.year);
scanf("%d",&stu[i].birthday.month);
scanf("%d",&stu[i].birthday.day);
for(j=0;j<m;j++)
{
scanf("%d",&stu[i].score[j]);
}
}
Sum_Aver(stu,n,m);
}
/*
2.计算每门课程的总分和平均分
*/
void Total_Aver(STUDENT stu[],int n,int m)
{
int i,j;
int sum;
for(i=0;i<m;i++)
{
sum=0;
for(j=0;j<n;j++)
{
sum=sum+stu[j].score[i];
}
printf("第%d门课:\tsum=%6d\taver=%6.1f\n",i+1,sum,(float)sum/n);
}
Fanhui();
}
/*
3.计算每个学生的总分和平均分
*/
void SdudentTotal_Aver(STUDENT stu[],int n,int m)
{
Sum_Aver(stu,n,m);
Print(stu,n,m);
Fanhui();
}
/*
调用函数指针compare指向的函数排序
*/
void SelectionSort(STUDENT stu[],int n,int m,int (*compare)(int a,int b))
{
int i,j,k;
STUDENT temp;
for(i=0;i<n-1;i++)
{
k=i;
for(j=i+1;j<n;j++)
{
if((*compare)(stu[j].sum,stu[k].sum))
{
k=j;
}
}
if(k!=i)
{
temp=stu[i];
stu[i]=stu[k];
stu[k]=temp;
}
}
}
/*
由高到低排序(4)
*/
int DescendingScoreSort(int a,int b)
{
return a>b;
}
/*
由低到高排序 (5)
*/
int AscendingScoreSort(int a,int b)
{
return a<b;
}
/*
打印 名次 学号 姓名 性别 出生日期 各科分数 总分 平均分
*/
void Print(STUDENT stu[],int n,int m)
{
int i,j;
for(i=0;i<n;i++)
{
printf("%d %10ld %s %c %6d/%02d/%02d",i+1,stu[i].ID,stu[i].name,stu[i].sex,stu[i].birthday.year,stu[i].birthday.month,stu[i].birthday.day);
for(j=0;j<m;j++)
{
printf("\t%d",stu[i].score[j]);
}
printf("\t%d\t%6.2f\n",stu[i].sum,stu[i].aver);
}
Fanhui();
}
/*
6.按学号由小到大排列
*/
void IDSort(STUDENT stu[],int n,int m)
{
int i,j,k;
STUDENT temp;
for(i=0;i<n-1;i++)
{
k=i;
for(j=i+1;j<n;j++)
{
if(stu[j].ID<stu[i].ID)
{
k=j;
}
}
if(k!=i)
{
temp=stu[i];
stu[i]=stu[k];
stu[k]=temp;
}
}
}
/*
7.按姓名的字典顺序排出成绩表 //按字符串由小到大排列
*/
void SortString(STUDENT stu[],int n,int m)
{
int i,j;
STUDENT temp;
for(i=0;i<n-1;i++)
{
for(j=i+1;j<n;j++)
{
if(strcmp(stu[j].name,stu[i].name)<0)
{
temp=stu[i];
stu[i]=stu[j];
stu[j]=temp;
}
}
}
}
/*
8.按学号查找学生排名及其考试成绩
*/
int LinSearch(STUDENT stu[],int n,int x)
{
int i;
for(i=0;i<n;i++)
{
if(stu[i].ID==x)
{
return i;
}
}
return -1;
}
/*
9.按姓名查找学生排名及其考试成绩
*/
int NameSearch(STUDENT stu[],char Name[],int n)
{
int i;
for(i=0;i<n;i++)
{
if(strcmp(stu[i].name,Name)==0)
{
return i;
}
}
return -1;
}
/*
各等级人数及百分比
*/
void StatisticAnalysis(STUDENT stu[],int n,int m)
{
int A=0,B=0,C=0,D=0,E=0;
int i,j;
for(i=0;i<m;i++)
{
for(j=0;j<n;j++)
{
if(stu[j].score[i]>=90 && stu[j].score[i]<=100)
{
A++;
}
if(stu[j].score[i]>=80 && stu[j].score[i]<=89)
{
B++;
}
if(stu[j].score[i]>=70 && stu[j].score[i]<=79)
{
C++;
}
if(stu[j].score[i]>=60 && stu[j].score[i]<=69)
{
D++;
}
if(stu[j].score[i]>=0 && stu[j].score[i]<=59)
{
E++;
}
}
printf("第%d门课等级分析:\n",i+1);
printf("优秀(A)\t良好(B)\t中等(C)\t及格(D)\t不及格(E)\n %2d\t %2d\t %2d\t %2d\t %2d\n%5.2f%% %5.2f%% %5.2f%% %5.2f%% %5.2f%%\n",A,B,C,D,E,(float)A*100/n,(float)B*100/n,(float)C*100/n,(float)D*100/n,(float)E*100/n);
A=0;
B=0;
C=0;
D=0;
E=0;
}
Fanhui();
}
/*
12.将每个学生的记录信息写入文件
*/
void WritetoFile(STUDENT stu[],int n,int m)
{
FILE *fp;
int i,j;
if((fp=fopen("student.txt","w"))==NULL)
{
printf("Failure to open student.txt!\n");
exit(0);
}
fprintf(fp,"%d\t%d\n",n,m);
for(i=0;i<n;i++)
{
fprintf(fp,"%10ld%8s%3c%6d/%02d/%02d",stu[i].ID,stu[i].name,stu[i].sex,stu[i].birthday.year,stu[i].birthday.month,stu[i].birthday.day);
for(j=0;j<m;j++)
{
fprintf(fp,"%4d",stu[i].score[j]);
}
fprintf(fp,"%4d%6.1f\n",stu[i].sum,stu[i].aver);
}
fclose(fp);
Fanhui();
}
/*
13.从文件中读出每个学生的记录信息并显示
*/
void ReadfromFile(STUDENT stu[],int *n,int *m)
{
FILE *fp;
int i,j;
if((fp=fopen("student.txt","r"))==NULL)
{
printf("Failure to open student.txt!\n");
exit(0);
}
fscanf(fp,"%d\t%d",n,m);
for(i=0;i<*n;i++)
{
fscanf(fp,"%10ld",&stu[i].ID);
fscanf(fp,"%8s",&stu[i].name);
fscanf(fp," %c",&stu[i].sex);
fscanf(fp,"%6d/%02d/%02d",&stu[i].birthday.year,&stu[i].birthday.month,&stu[i].birthday.day);
for(j=0;j<*m;j++)
{
fscanf(fp,"%4d",&stu[i].score[j]);
}
fscanf(fp,"%4d\n",&stu[i].sum);
fscanf(fp,"%f\n",&stu[i].aver);
}
fclose(fp);
Print(stu,*n,*m);
Fanhui();
}
有些问题可能没有测试出来
版本1.0
#include <stdio.h>
#include <string.h>
#include <windows.h>
#define N 30
#define M 10
typedef struct date
{
int year;
int month;
int day;
}D;
typedef struct student
{
long ID; //学号
char name[10]; //姓名
char sex; //性别 男:M 女:F
D birthday; //出生日期
int score[M]; //课程成绩
int sum; //总分
float aver; //平均分
}STUDENT;
void Wolcome();
void gotoxy(int,int);
void Read(STUDENT stu[],int n,int m);
void Sum_Aver(STUDENT stu[],int n,int m);
void Total_Aver(STUDENT stu[],int n,int m);
void SdudentTotal_Aver(STUDENT stu[],int n,int m);
void SelectionSort(STUDENT stu[],int n,int m,int (*compare)(int a,int b));
int DescendingScoreSort(int a,int b);
int AscendingScoreSort(int a,int b);
void Print(STUDENT stu[],int n,int m);
void IDSort(STUDENT stu[],int n,int m);
void SortString(STUDENT stu[],int n,int m);
int LinSearch(STUDENT stu[],int n,int x);
int NameSearch(STUDENT stu[],char Name[],int n);
void StatisticAnalysis(STUDENT stu[],int n,int m);
void WritetoFile(STUDENT stu[],int n,int m);
void ReadfromFile(STUDENT stu[],int *n,int *m);
void Fanhui();
int main()
{
Wolcome();
}
void gotoxy(int x, int y) //定位坐标
{
COORD pos;
pos.X = x;
pos.Y = y;
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), pos);
}
void Fanhui()
{
char p; //用于按成绩排序,按任意键结束
printf("按任意键返回菜单");
while(getchar()!='\n');
{
scanf("%c",&p);
}
system("cls");
Wolcome();
}
void Wolcome() //欢迎界面
{
int i,j;
static STUDENT stu[N];
int ret; //查找学生成绩时的返回值,若为-1则未找到,否则找到
long x; //被搜索学生学号
char Name[10];//被搜索学生姓名
int p; //选择序号
static int n,m; //输入学生人数
gotoxy(46,2);
printf("学 生 成 绩 管 理 系 统");
gotoxy(25,4);
for(i=0;i<35;i++)
{
printf("* ");
}
gotoxy(25,21);
for(i=0;i<35;i++)
{
printf("* ");
}
gotoxy(25,25);
for(i=0;i<35;i++)
{
printf("* ");
} //横框
for(j=5;j<25;j++)
{
gotoxy(25,j);
printf("*");
}
for(j=5;j<25;j++)
{
gotoxy(93,j);
printf("*");
} //竖框
gotoxy(32,6);
printf("1.录入每个学生的学号、姓名和各科考试成绩");
gotoxy(32,7);
printf("2.计算每门课程的总分和平均分");
gotoxy(32,8);
printf("3.计算每个学生的总分和平均分");
gotoxy(32,9);
printf("4.按每个学生的总分由高到低排出名次表");
gotoxy(32,10);
printf("5.按每个学生的总分由低到高排出名次表");
gotoxy(32,11);
printf("6.按学号由小到大排出成绩表");
gotoxy(32,12);
printf("7.按姓名的字典顺序排出成绩表");
gotoxy(32,13);
printf("8.按学号查找学生排名及其考试成绩");
gotoxy(32,14);
printf("9.按姓名查找学生排名及其考试成绩");
gotoxy(32,15);
printf("10.对每门课程分别统计每个类别的人数及其所占百分比");
gotoxy(32,16);
printf("11.输出每个学生的名次学号姓名性别出生日期各科分数总分平均分");
gotoxy(32,17);
printf("12.将每个学生的记录信息写入文件");
gotoxy(32,18);
printf("13.从文件中读出每个学生的记录信息并显示");
gotoxy(32,19);
printf("0.Exit");
gotoxy(32,23);
printf("Please enter your choice[ ]\b\b\b");
scanf("%d",&p);
switch(p)
{
case 1:
system("cls");
printf("输入学生人数和考试科目数:");
scanf("%d %d",&n,&m);
Read(stu,n,m);
system("cls");
Wolcome();
break;
case 2:
system("cls");
Total_Aver(stu,n,m);
break;
case 3:
system("cls");
SdudentTotal_Aver(stu,n,m);
break;
case 4:
system("cls");
printf("按每个学生的总分由高到低排出名次表:\n");
SelectionSort(stu,n,m,DescendingScoreSort);
Print(stu,n,m);
break;
case 5:
system("cls");
printf("按每个学生的总分由低到高排出名次表:\n");
SelectionSort(stu,n,m,AscendingScoreSort);
Print(stu,n,m);
break;
case 6:
system("cls");
printf("按学号由小到大排出成绩表:\n");
IDSort(stu,n,m);
Print(stu,n,m);
Fanhui();
break;
case 7:
system("cls");
printf("按姓名的字典顺序排出成绩表:\n");
SortString(stu,n,m);
Print(stu,n,m);
Fanhui();
break;
case 8:
system("cls");
SelectionSort(stu,n,m,DescendingScoreSort);
printf("Input the search ID:");
scanf("%ld",&x);
ret=LinSearch(stu,n,x);
if(ret != -1)
{
printf("排名 : %d 姓名: %s 成绩 : %d\n",ret+1,stu[i].name,stu[ret].sum);
}
else
{
printf("Not found!\n");
Fanhui();
}
break;
case 9:
system("cls");
SelectionSort(stu,n,m,DescendingScoreSort);
printf("Input the search name:");
while(getchar()!='\n');
gets(Name);
ret=NameSearch(stu,Name,n);
if(ret != -1)
{
printf("排名 : %d 成绩 : %d\n",ret+1,stu[ret].sum);
}
else
{
printf("Not found!\n");
}
printf("任意键加回车结束");
Fanhui();
break;
case 10:
system("cls");
printf("等级分析:\n");
StatisticAnalysis(stu,n,m);
break;
case 11:
system("cls");
Print(stu,n,m);
break;
case 12:
system("cls");
WritetoFile(stu,n,m);
break;
case 13:
system("cls");
ReadfromFile(stu,&n,&m);
break;
case 0:
exit(0);
}
}
void Sum_Aver(STUDENT stu[],int n,int m)
{
int i,j;
int sum;
for(i=0;i<n;i++)
{
sum=0;
for(j=0;j<m;j++)
{
sum=sum+stu[i].score[j];
}
stu[i].sum=sum;
stu[i].aver=(float)sum/m;
}
}
/*
1.录入每个学生的学号、姓名和各科考试成绩
*/
void Read(STUDENT stu[],int n,int m)
{
int i,j;
for(i=0;i<n;i++)
{
printf("输入第%d个学生的 学号 姓名 性别 出生日期 各科分数:\n",i+1);
scanf("%ld",&stu[i].ID);
scanf("%s",&stu[i].name);
scanf(" %c",&stu[i].sex);
scanf("%d",&stu[i].birthday.year);
scanf("%d",&stu[i].birthday.month);
scanf("%d",&stu[i].birthday.day);
for(j=0;j<m;j++)
{
scanf("%d",&stu[i].score[j]);
}
}
Sum_Aver(stu,n,m);
}
/*
2.计算每门课程的总分和平均分
*/
void Total_Aver(STUDENT stu[],int n,int m)
{
int i,j;
int sum;
for(i=0;i<m;i++)
{
sum=0;
for(j=0;j<n;j++)
{
sum=sum+stu[j].score[i];
}
printf("第%d门课:\tsum=%6d\taver=%6.1f\n",i+1,sum,(float)sum/n);
}
Fanhui();
}
/*
3.计算每个学生的总分和平均分
*/
void SdudentTotal_Aver(STUDENT stu[],int n,int m)
{
Sum_Aver(stu,n,m);
Print(stu,n,m);
Fanhui();
}
/*
调用函数指针compare指向的函数排序
*/
void SelectionSort(STUDENT stu[],int n,int m,int (*compare)(int a,int b))
{
int i,j,k;
STUDENT temp;
for(i=0;i<n-1;i++)
{
k=i;
for(j=i+1;j<n;j++)
{
if((*compare)(stu[j].sum,stu[k].sum))
{
k=j;
}
}
if(k!=i)
{
temp=stu[i];
stu[i]=stu[k];
stu[k]=temp;
}
}
}
/*
由高到低排序(4)
*/
int DescendingScoreSort(int a,int b)
{
return a>b;
}
/*
由低到高排序 (5)
*/
int AscendingScoreSort(int a,int b)
{
return a<b;
}
/*
打印 名次 学号 姓名 性别 出生日期 各科分数 总分 平均分
*/
void Print(STUDENT stu[],int n,int m)
{
int i,j;
for(i=0;i<n;i++)
{
printf("%d %10ld %s %c %6d/%02d/%02d",i+1,stu[i].ID,stu[i].name,stu[i].sex,stu[i].birthday.year,stu[i].birthday.month,stu[i].birthday.day);
for(j=0;j<m;j++)
{
printf("\t%d",stu[i].score[j]);
}
printf("\t%d\t%6.2f\n",stu[i].sum,stu[i].aver);
}
Fanhui();
}
/*
6.按学号由小到大排列
*/
void IDSort(STUDENT stu[],int n,int m)
{
int i,j,k;
STUDENT temp;
for(i=0;i<n-1;i++)
{
k=i;
for(j=i+1;j<n;j++)
{
if(stu[j].ID<stu[i].ID)
{
k=j;
}
}
if(k!=i)
{
temp=stu[i];
stu[i]=stu[k];
stu[k]=temp;
}
}
}
/*
7.按姓名的字典顺序排出成绩表 //按字符串由小到大排列
*/
void SortString(STUDENT stu[],int n,int m)
{
int i,j;
STUDENT temp;
for(i=0;i<n-1;i++)
{
for(j=i+1;j<n;j++)
{
if(strcmp(stu[j].name,stu[i].name)<0)
{
temp=stu[i];
stu[i]=stu[j];
stu[j]=temp;
}
}
}
}
/*
8.按学号查找学生排名及其考试成绩
*/
int LinSearch(STUDENT stu[],int n,int x)
{
int i;
for(i=0;i<n;i++)
{
if(stu[i].ID==x)
{
return i;
}
}
return -1;
}
/*
9.按姓名查找学生排名及其考试成绩
*/
int NameSearch(STUDENT stu[],char Name[],int n)
{
int i;
for(i=0;i<n;i++)
{
if(strcmp(stu[i].name,Name)==0)
{
return i;
}
}
return -1;
}
/*
各等级人数及百分比
*/
void StatisticAnalysis(STUDENT stu[],int n,int m)
{
int A=0,B=0,C=0,D=0,E=0;
int i,j;
for(i=0;i<m;i++)
{
for(j=0;j<n;j++)
{
if(stu[j].score[i]>=90 && stu[j].score[i]<=100)
{
A++;
}
if(stu[j].score[i]>=80 && stu[j].score[i]<=89)
{
B++;
}
if(stu[j].score[i]>=70 && stu[j].score[i]<=79)
{
C++;
}
if(stu[j].score[i]>=60 && stu[j].score[i]<=69)
{
D++;
}
if(stu[j].score[i]>=0 && stu[j].score[i]<=59)
{
E++;
}
}
printf("第%d门课等级分析:\n",i+1);
printf("优秀(A)\t良好(B)\t中等(C)\t及格(D)\t不及格(E)\n %2d\t %2d\t %2d\t %2d\t %2d\n%5.2f%% %5.2f%% %5.2f%% %5.2f%% %5.2f%%\n",A,B,C,D,E,(float)A*100/n,(float)B*100/n,(float)C*100/n,(float)D*100/n,(float)E*100/n);
A=0;
B=0;
C=0;
D=0;
E=0;
}
Fanhui();
}
/*
12.将每个学生的记录信息写入文件
*/
void WritetoFile(STUDENT stu[],int n,int m)
{
FILE *fp;
int i,j;
if((fp=fopen("student.txt","w"))==NULL)
{
printf("Failure to open student.txt!\n");
exit(0);
}
fprintf(fp,"%d\t%d\n",n,m);
for(i=0;i<n;i++)
{
fprintf(fp,"%10ld%8s%3c%6d/%02d/%02d",stu[i].ID,stu[i].name,stu[i].sex,stu[i].birthday.year,stu[i].birthday.month,stu[i].birthday.day);
for(j=0;j<m;j++)
{
fprintf(fp,"%4d",stu[i].score[j]);
}
fprintf(fp,"%6.1f\n",stu[i].aver);
}
fclose(fp);
Fanhui();
}
/*
13.从文件中读出每个学生的记录信息并显示
*/
void ReadfromFile(STUDENT stu[],int *n,int *m)
{
FILE *fp;
int i,j;
if((fp=fopen("student.txt","r"))==NULL)
{
printf("Failure to open student.txt!\n");
exit(0);
}
fscanf(fp,"%d\t%d",n,m);
for(i=0;i<*n;i++)
{
fscanf(fp,"%10ld",&stu[i].ID);
fscanf(fp,"%8s",stu[i].name);
fscanf(fp," %c",&stu[i].sex);
fscanf(fp,"%6d/%02d/%02d",&stu[i].birthday.year,&stu[i].birthday.month,&stu[i].birthday.day);
for(j=0;j<*m;j++)
{
fscanf(fp,"%4d",&stu[i].score[j]);
}
fscanf(fp,"%f\n",&stu[i].aver);
}
fclose(fp);
Print(stu,*n,*m);
Fanhui();
}