|
本帖最后由 rosynirvana 于 2014-10-8 11:33 编辑
- #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请输入物理成绩(~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("[url=file://\\******************************************/\n\n]\\******************************************/\n\n[/url]");
- 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;
- }
- }
- }
复制代码 |
|