// biaobiao.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include
#include
#include
#define MaxSize 100
typedef struct stud
{
char name[10];
int num;
float c;
float math;
float english;
float zf;
int pnum;
int pzf;
}Stud;
void ReadFile(Stud stud[],int &n)
{
FILE *fp;
long length;
int i;
if((fp=fopen("stud.dat","rb"))==NULL){
n=0;
return;
}
fseek(fp,0,2);
length=ftell(fp);
rewind(fp);
n=length/sizeof(Stud);
if(n!=0)
n--;
else
stud[0].pnum=stud[0].pzf=-1;
for(i=0;i<=n;i++)
fread(&stud[i],sizeof(Stud),1,fp);
fclose(fp);
}
void Clearup(Stud stud[],int &n)
{
FILE *fp;
if((fp=fopen("stud.dat","wb"))==NULL){
printf(">> 文件不能打开\n");
return;
}
stud[0].pnum=stud[0].pzf=-1;
n=0;
fclose(fp);
printf(" ============================================================================\n");
}
void SaveFile(Stud stud[],int &n)
{
int i;
FILE *fp;
if((fp=fopen("stud.dat","wb"))==NULL){
printf(">> 文件不能打开\n");
return;
}
if(n>1)
for(i=0;i<=n;i++)
fwrite(&stud[i],sizeof(Stud),1,fp);
fclose(fp);
printf(" ============================================================================\n");
}
void Input(Stud stud[],int &n)
{
int i;
int flag=0;
printf(">>请输入登记学生 姓名 学号 C语言成绩 数学成绩 英语成绩:\n");
n++;
scanf("%s%d%f%f%f",&stud[n].name,&stud[n].num,&stud[n].c,&stud[n].math,&stud[n].english);
stud[n].zf=stud[n].c+stud[n].math+stud[n].english;
for(i=0;i<=n-2;i++)
{
if(stud[i].num==stud[n].num)
{
flag=flag+1;
}
}
if(flag!=0)
printf("学号输入重复,请检查!!\n");
stud[n].pnum=stud[n].pzf=0;
printf(" ============================================================================\n");
}
void OutputFile(Stud stud[],int n)
{
int i;
if(n<1)
{
printf(">>没任何记录\n");
return;
}
printf(" -----------------------------------------------------------------\n");
printf("| 姓名 | 学号 | C语言成绩 | 数学成绩 | 英语成绩 | 总分 |\n");
printf(" -----------------------------------------------------------------\n");
for(i=1;i<=n;i++)
{
printf("|%10s | %3d | %6.2f | %6.2f | %6.2f | %6.2f |\n",stud[i].name,stud[i].num,stud[i].c,stud[i].math,stud[i].english,stud[i].zf);
printf(" -----------------------------------------------------------------\n");
}
}
void Dispnum(Stud stud[],int n)
{ int i=2,j;
int k=stud[0].pnum;
if(n<1)
{
printf(">>没有这种记录,不能进行排序\n");
return;
}
stud[0].pnum=1;stud[1].pnum=-1;
while(i<=n)
{
j=0;
while(stud[j].pnum!=-1 && stud[stud[j].pnum].num j=stud[j].pnum; stud[i].pnum=stud[j].pnum; stud[j].pnum=i; i++; } printf(" -----------------------------------------------------------------\n"); printf("| 姓名 | 学号 | C语言成绩 | 数学成绩 | 英语成绩 | 总分 |\n"); printf(" -----------------------------------------------------------------\n"); while(k!=-1) { printf("|%10s | %3d | %6.2f | %6.2f | %6.2f | %6.2f |\n",stud[k].name,stud[k].num,stud[k].c,stud[k].math,stud[k].english,stud[k].zf); printf(" -----------------------------------------------------------------\n"); k=stud[k].pnum; } printf(" ============================================================================\n"); } void Dispzf(Stud stud[],int n) { int i=2,j; int k=stud[0].pzf; if(n<1) { printf(">>没有记录,不能进行排序\n"); return; } stud[0].pzf=1;stud[1].pzf=-1; while(i<=n) { j=0; while(stud[j].pzf!=-1 && stud[stud[j].pzf].zf j=stud[j].pzf; stud[i].pzf=stud[j].pzf; stud[j].pzf=i; i++; } printf(" -----------------------------------------------------------------\n"); printf("| 姓名 | 学号 | C语言成绩 | 数学成绩 | 英语成绩 | 总分 |\n"); printf(" -----------------------------------------------------------------\n"); while(k!=-1) { printf("|%10s | %3d | %6.2f | %6.2f | %6.2f | %6.2f |\n",stud[k].name,stud[k].num,stud[k].c,stud[k].math,stud[k].english,stud[k].zf); printf(" -----------------------------------------------------------------\n"); k=stud[k].pzf; } printf(" ============================================================================\n"); } void xuehao(Stud stud[],int n) { int num,i,flag=0; printf("请输入你要查询学生的学号:\n"); scanf("%d",&num); for(i=0;i<=n;i++) { if(stud[i].num==num) { printf(" -----------------------------------------------------------------\n"); printf("| 姓名 | 学号 | C语言成绩 | 数学成绩 | 英语成绩 | 总分 |\n"); printf(" -----------------------------------------------------------------\n"); printf("|%10s | %3d | %6.2f | %6.2f | %6.2f | %6.2f |\n",stud[i].name,stud[i].num,stud[i].c,stud[i].math,stud[i].english,stud[i].zf); printf(" -----------------------------------------------------------------\n"); flag++; } } if(flag==0)printf("查询操作失败,没有你要查询的学生!!!\n"); else printf("查询操作成功!!!\n"); printf(" ============================================================================\n"); } void xingming(Stud stud[],int n) { char name[10]; int i,flag=0; printf("请输入你要查询的学生的姓名:\n"); scanf("%s",&name); for(i=0;i<=n;i++) { if(strcmp(stud[i].name,name)==0) { printf(" -----------------------------------------------------------------\n"); printf("| 姓名 | 学号 | C语言成绩 | 数学成绩 | 英语成绩 | 总分 |\n"); printf(" -----------------------------------------------------------------\n"); printf("|%10s | %3d | %6.2f | %6.2f | %6.2f | %6.2f |\n",stud[i].name,stud[i].num,stud[i].c,stud[i].math,stud[i].english,stud[i].zf); printf(" -----------------------------------------------------------------\n"); flag++; } } if(flag==0)printf("查询操作失败,没有你要查询的学生!!!\n"); else printf("查询操作成功!!!\n"); printf(" ============================================================================\n"); } void Modify(Stud stud[],int n) { int NO,j; int flag=0; float c,math,english; printf("请输入你要修改学生的学号:\n"); scanf("%d",&NO); for(j=0;j<=n;j++) { if(stud[j].num==NO) { printf("请输入你要修改的学生的 C语言成绩 数学成绩 英语成绩:\n"); scanf("%f%f%f",&c,&math,&english); stud[j].c =c;stud[j].math=math;stud[j].english=english; stud[j].zf=stud[j].c+stud[j].math+stud[j].english; flag++; } } if(flag==0)printf("修改操作失败,该学号不存在!!!\n"); else printf("修改操作成功!!!\n"); printf(" ============================================================================\n"); } void Delete(Stud stud[],int &n) { int NO,i,j; int flag=0; printf("请输入你要删除的学生的学号:\n"); scanf("%d",&NO); for(i=0;i<=n;i++) { if(stud[i].num==NO) { for(j=i;j stud[j]=stud[j+1]; flag++; } } if(flag==0)printf("删除操作失败,该学号不存在!!!\n"); else {n--; printf("删除操作成功!!!\n"); } printf(" ============================================================================\n"); } void main() { double dummy=sin(0.0); Stud stud[MaxSize]; int k, n; printf(" 欢迎使用学生成绩管理系统!!!\n"); printf(" ============================================================================\n"); ReadFile(stud,n); do{ printf(" 1:学生登记 2:显示学生信息\n "); printf(" 3:清空记录 4:删除记录\n"); printf(" 5: 按学号排序输出 6:按总分排序输出\n"); printf(" 7:学号查询 8:姓名查询\n"); printf(" 9:修改 0:储存退出\n"); printf("请选择相应的功能:"); scanf("%d",&k); if(k>9&&k<0)printf("操作不当,请重新输入:\n"); switch(k) { case 1:Input(stud,n); break; case 2:OutputFile(stud,n); break; case 3:Clearup(stud,n); break; case 4:Delete(stud,n); break; case 5:Dispnum(stud,n); break; case 6:Dispzf(stud,n); break; case 7:xuehao(stud,n); break; case 8:xingming(stud,n); break; case 9:Modify(stud,n); break; case 0:SaveFile(stud,n); break; } }while(k!=0); } 效果图: