系统分析
1. 主菜单的实现
2. 增加人员功能的实现
3. 删除数据功能的实现
4. 编辑人员功能的实现
5. 排序功能的实现
6. 输出功能
7. 查找信息功能
具体代码
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define SIZE 100000typedef 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;}}
}