cpp
复制代码
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define SIZE 100000
typedef struct tagStudent
{
int n; /*顺序号*/
int nNum; /*学号*/
char name[10]; /*姓名*/
int iCn; /*语文成绩*/
int iMaths; /*数学成绩*/
int iEn; /*英语成绩*/
int iPhy; /*物理成绩*/
int iCom; /*计算机成绩*/
float fAvage; /*平均成绩*/
} Student;
Student stu[SIZE];
/*录入数据*/
void Student_Input()
{
int i,p;
FILE *fp;
fp=fopen("studentfile.dat","wb");
for(i=0;i<SIZE;i++)
{
printf("\n\r请输入序号i(当输入i=-1时,返回),i=",i++);
scanf("%d",&i);
if(i==-1|| i ==0)
{
fclose(fp);
return;
}
else
{
printf("\n\r请输入学号(数字型):");
scanf("%d",&stu[i].nNum);
printf("\n\r请输入姓名(字符型):");
scanf("%s",stu[i].name);
printf("\n\r请输入语文成绩(0~100):");
scanf("%d",&stu[i].iCn);
printf("\n\r请输入数学成绩(0~100):");
scanf("%d",&stu[i].iMaths);
printf("\n\r请输入英语成绩:(0~100)");
scanf("%d",&stu[i].iEn);
printf("\n\r请输入物理成绩:(0~100)");
scanf("%d",&stu[i].iPhy);
printf("\n\r请输入计算机成绩(0~100):");
scanf("%d",&stu[i].iCom);
stu[i].fAvage=(stu[i].iCn+stu[i].iMaths+stu[i].iEn+stu[i].iPhy+stu[i].iCom)/5.0;
stu[i].n=i+1;
fwrite(&stu[i],sizeof(Student),1,fp);
}
}
fclose(fp);
}
/*输出数据*/
void Student_ListOut()
{
FILE *fp;
int i;
fp=fopen("studentfile.dat","rb");
printf("***********************************************************************\n");
printf(" 成绩列表\n");
printf("-----------------------------------------------------------------------\n");
printf("序号 学号 姓名 语文 数学 英语 物理 计算机 平均\n");
printf("-----------------------------------------------------------------------\n");
for(i=0;fread(&stu[i],sizeof(Student),1,fp)==1;i++)
{
printf("%d%8d%8s%8d%8d%8d%8d%8d%10.2f\n",stu[i].n,stu[i].nNum,stu[i].name,stu[i].iCn,
stu[i].iMaths,stu[i].iEn,stu[i].iPhy,stu[i].iCom,stu[i].fAvage);
}
printf("-----------------------------------------------------------------------\n");
fclose(fp);
}
/*查找数据*/
void Student_Search()
{
FILE *fp;
int i,num;
fp=fopen("studentfile.dat","rb");
rewind(fp);
printf("请输入要查找的学号:");
scanf("%d",&num);
printf("***********************************************************************\n");
printf(" 查询结果\n");
printf("-----------------------------------------------------------------------\n");
printf("序号 学号 姓名 语文 数学 英语 物理 计算机 平均\n");
printf("-----------------------------------------------------------------------\n");
for(i=0;i<=SIZE;i++)
if(stu[i].nNum==num)
{
printf("%d%8d%8s%8d%8d%8d%8d%8d%10.2f\n",stu[i].n,stu[i].nNum,stu[i].name,stu[i].iCn,
stu[i].iMaths,stu[i].iEn,stu[i].iPhy,stu[i].iCom,stu[i].fAvage);
}
printf("-----------------------------------------------------------------------\n");
printf("***********************************************************************\n");
fclose(fp);
}
/*增加数据*/
void Student_Add()
{
int i,s;
FILE *fp;
fp=fopen("studentfile.dat","ab+");
rewind(fp);
printf("***********************************************************************\n");
printf(" 成绩列表\n");
printf("-----------------------------------------------------------------------\n");
printf("序号 学号 姓名 语文 数学 英语 物理 计算机 平均\n");
printf("-----------------------------------------------------------------------\n");
for(i=0;fread(&stu[i],sizeof(Student),1,fp)==1;i++)
{
printf("%d%8d%8s%8d%8d%8d%8d%8d%10.2f\n",stu[i].n,stu[i].nNum,stu[i].name,stu[i].iCn,
stu[i].iMaths,stu[i].iEn,stu[i].iPhy,stu[i].iCom,stu[i].fAvage);
}
printf("***********************************************************************\n");
s=i;
for(i=s;i<SIZE;i++)
{
printf("输入序号i(当输入i=-1时,返回),i=",i);
scanf("%d",&i);
if(i==-1|| i ==0)
{
fclose(fp);
return;
}
else
{
printf("\n\r请输入学号(数字型):");
scanf("%d",&stu[i].nNum);
printf("\n\r请输入姓名(字符型):");
scanf("%s",stu[i].name);
printf("\n\r请输入语文成绩(0~100):");
scanf("%d",&stu[i].iCn);
printf("\n\r请输入数学成绩(0~100):");
scanf("%d",&stu[i].iMaths);
printf("\n\r请输入英语成绩:(0~100)");
scanf("%d",&stu[i].iEn);
printf("\n\r请输入物理成绩:(0~100)");
scanf("%d",&stu[i].iPhy);
printf("\n\r请输入计算机成绩(0~100):");
scanf("%d",&stu[i].iCom);
stu[i].fAvage=(stu[i].iCn+stu[i].iMaths+stu[i].iEn+stu[i].iPhy+stu[i].iCom)/5.0;
stu[i].n=i+1;
fwrite(&stu[i],sizeof(Student),1,fp);
printf("%d%8d%8s%8d%8d%8d%8d%8d%10.2f\n",stu[i].n,stu[i].nNum,stu[i].name,stu[i].iCn,
stu[i].iMaths,stu[i].iEn,stu[i].iPhy,stu[i].iCom,stu[i].fAvage);
}
}
fclose(fp);
}
/*删除数据*/
void Student_Delete()
{
FILE *fp;
int i,num,n;
int total =0;
int flag=0;
fp=fopen("studentfile.dat","rb");
printf("***********************************************************************\n");
printf(" 成绩列表\n");
printf("-----------------------------------------------------------------------\n");
printf("序号 学号 姓名 语文 数学 英语 物理 计算机 平均\n");
printf("-----------------------------------------------------------------------\n");
for(i=0;fread(&stu[i],sizeof(Student),1,fp)==1;i++)
{
printf("%d%8d%8s%8d%8d%8d%8d%8d%10.2f\n",stu[i].n,stu[i].nNum,stu[i].name,stu[i].iCn,
stu[i].iMaths,stu[i].iEn,stu[i].iPhy,stu[i].iCom,stu[i].fAvage);
}
printf("-----------------------------------------------------------------------\n");
printf("***********************************************************************\n");
fclose(fp);
total = i-1;
printf("请输入要删除学生的学号:");
scanf("%d",&num);
for(i=0;i<=SIZE;i++)
if(stu[i].nNum==num)
{
printf("***********************************************************************\n");
printf("要删除的学生信息\n");
printf("-----------------------------------------------------------------------\n");
printf("序号 学号 姓名 语文 数学 英语 物理 计算机 平均\n");
printf("-----------------------------------------------------------------------\n");
printf("%d%8d%8s%8d%8d%8d%8d%8d%10.2f\n",stu[i].n,stu[i].nNum,stu[i].name,stu[i].iCn,
stu[i].iMaths,stu[i].iEn,stu[i].iPhy,stu[i].iCom,stu[i].fAvage);
printf("-----------------------------------------------------------------------\n");
printf("***********************************************************************\n");
n=i+1;
flag=1;
break;
}
if(flag==0)
{
printf("***********************************************************************\n");
printf(" 输入错误!\n");
printf(" 请返回!\n");
printf("***********************************************************************\n");
return;
}
printf("\n\n\n");
for(i=n;i<=total;i++)
{
memcpy(&stu[i-1],&stu[i],sizeof(Student));
}
memset(&stu[total],0,sizeof(Student));
fp=fopen("studentfile.dat","wb+");
for(i=0;i<total;i++)
{
fwrite(&stu[i],sizeof(Student),1,fp);
}
fclose(fp);
fp=fopen("studentfile.dat","rb");
printf("***********************************************************************\n");
printf("当前成绩列表\n");
printf("-----------------------------------------------------------------------\n");
printf("序号 学号 姓名 语文 数学 英语 物理 计算机 平均\n");
printf("-----------------------------------------------------------------------\n");
for(i=0;fread(&stu[i],sizeof(Student),1,fp)==1;i++)
{
printf("%d%8d%8s%8d%8d%8d%8d%8d%10.2f\n",stu[i].n,stu[i].nNum,stu[i].name,stu[i].iCn,
stu[i].iMaths,stu[i].iEn,stu[i].iPhy,stu[i].iCom,stu[i].fAvage);
}
printf("-----------------------------------------------------------------------\n");
printf("***********************************************************************\n");
fclose(fp);
}
/*修改数据*/
void Student_Change()
{
FILE *fp;
int i,num,n;
int flag=0;
printf("请输入要修改学生的学号:");
scanf("%d",&num);
for(i=0;i<=SIZE;i++)
if(stu[i].nNum==num)
{
printf("***********************************************************************\n");
printf(" 成绩列表\n");
printf("-----------------------------------------------------------------------\n");
printf("序号 学号 姓名 语文 数学 英语 物理 计算机 平均\n");
printf("-----------------------------------------------------------------------\n");
printf("%d%8d%8s%8d%8d%8d%8d%8d%10.2f\n",stu[i].n,stu[i].nNum,stu[i].name,stu[i].iCn,
stu[i].iMaths,stu[i].iEn,stu[i].iPhy,stu[i].iCom,stu[i].fAvage);
printf("-----------------------------------------------------------------------\n");
printf("***********************************************************************\n");
n=i+1;
flag=1;
break;
}
if(flag==0)
{
printf("***********************************************************************\n");
printf(" 输入错误!\n");
printf(" 请返回!\n");
printf("***********************************************************************\n");
return;
}
printf("\n\n\n");
fp=fopen("studentfile.dat","rb+");
fseek(fp,n*sizeof(Student),0);
printf("\n\r请输入学号(数字型):");
scanf("%d",&stu[i].nNum);
printf("\n\r请输入姓名(字符型):");
scanf("%s",stu[i].name);
printf("\n\r请输入语文成绩(0~100):");
scanf("%d",&stu[i].iCn);
printf("\n\r请输入数学成绩(0~100):");
scanf("%d",&stu[i].iMaths);
printf("\n\r请输入英语成绩:(0~100)");
scanf("%d",&stu[i].iEn);
printf("\n\r请输入物理成绩:(0~100)");
scanf("%d",&stu[i].iPhy);
printf("\n\r请输入计算机成绩(0~100):");
scanf("%d",&stu[i].iCom);
stu[i].fAvage=(stu[i].iCn+stu[i].iMaths+stu[i].iEn+stu[i].iPhy+stu[i].iCom)/5.0;
stu[i].n=i+1;
fwrite(&stu[i],sizeof(Student),1,fp);
fclose(fp);
fp=fopen("studentfile.dat","rb");
printf("***********************************************************************\n");
printf(" 成绩列表\n");
printf("-----------------------------------------------------------------------\n");
printf("序号 学号 姓名 语文 数学 英语 物理 计算机 平均\n");
printf("-----------------------------------------------------------------------\n");
for(i=0;fread(&stu[i],sizeof(Student),1,fp)==1;i++)
{
printf("%d%8d%8s%8d%8d%8d%8d%8d%10.2f\n",stu[i].n,stu[i].nNum,stu[i].name,stu[i].iCn,
stu[i].iMaths,stu[i].iEn,stu[i].iPhy,stu[i].iCom,stu[i].fAvage);
}
printf("-----------------------------------------------------------------------\n");
printf("***********************************************************************\n");
fclose(fp);
}
/*成绩排序*/
void Student_Order()
{
int i,j,n;
FILE *fp;
Student t;
fp=fopen("studentfile.dat","rb");
printf("***********************************************************************\n");
printf(" 成绩列表\n");
printf("-----------------------------------------------------------------------\n");
printf("序号 学号 姓名 语文 数学 英语 物理 计算机 平均\n");
printf("-----------------------------------------------------------------------\n");
for(i=0;fread(&stu[i],sizeof(Student),1,fp)==1;i++)
{
printf("%d%8d%8s%8d%8d%8d%8d%8d%10.2f\n",stu[i].n,stu[i].nNum,stu[i].name,stu[i].iCn,
stu[i].iMaths,stu[i].iEn,stu[i].iPhy,stu[i].iCom,stu[i].fAvage);
}
printf("-----------------------------------------------------------------------\n");
printf("***********************************************************************\n");
fclose(fp);
n=i;
for(i=0;i<n;i++)
for(j=i+1;j<n;j++)
if(stu[i].fAvage<stu[j].fAvage)
{
t=stu[i];
stu[i]=stu[j];
stu[j]=t;
}
fp=fopen("studentfile.dats","wb");
printf("\n\n\n");
printf("***********************************************************************\n");
printf(" 成绩列表\n");
printf("-----------------------------------------------------------------------\n");
printf("序号 学号 姓名 语文 数学 英语 物理 计算机 平均\n");
printf("-----------------------------------------------------------------------\n");
for(i=0;i<n;i++)
{
printf("%d%8d%8s%8d%8d%8d%8d%8d%10.2f\n",stu[i].n,stu[i].nNum,stu[i].name,stu[i].iCn,
stu[i].iMaths,stu[i].iEn,stu[i].iPhy,stu[i].iCom,stu[i].fAvage);
fwrite(&stu[i],sizeof(Student),1,fp);
}
printf("***********************************************************************\n");
fclose(fp);
}
/*主函数*/
main()
{
int n;
for(;;)
{
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("* 5.增加数据 *\n");
printf("* 6.修改数据 *\n");
printf("* 7.成绩排序 *\n");
printf("* 8.退出系统 *\n");
printf("* *\n");
printf("\\******************************************/\n\n");
printf("请输入选择项(1-8):");
scanf("%d",&n);
printf("\n\n\n\n");
if(n>0&&n<=8)
{
switch(n)
{
case 1:Student_Input();break;
case 2:Student_Delete();break;
case 3:Student_ListOut();break;
case 4:Student_Search();break;
case 5:Student_Add();break;
case 6:Student_Change();break;
case 7:Student_Order();break;
case 8:exit(0);
}
}
else
{
printf("***********************************************************************\n");
printf("* *\n");
printf("* 按任意键 *\n");
printf("* 退出! *\n");
printf("* *\n");
printf("***********************************************************************\n");
break;
}
}
}