你看看我以前写的这个,应该基本符合吧,你改改
#include<time.h>
#include<conio.h>
#include<stdio.h>
#include<string.h>
#include<malloc.h>
#define L 100
#define M (struct stu *)malloc(sizeof(struct stu))
FILE *p;
FILE *q;
int i;
int tn;
char pw[L]="l";
float tm,chi,eng,math,phi,che,bio;
struct achi
{
float chi;
float eng;
float math;
float phi;
float bio;
float che;
};
struct stu
{
int age;
int num;
char name[L];
struct achi mark;
struct stu *lt;
struct stu *rt;
};
int chk();
int chf();
int pass();
void fj();
void pr();
void fd();
void cg();
void add();
void del();
void cpass();
void marks();
void choose();
void ge_t(struct stu *);
void plus(struct stu *);
void fprin(struct stu *);
void prin(struct stu *);
void dele(struct stu *,int);
void chge(struct stu *,int);
struct stu *got();
struct stu *rad(struct stu *,int);
struct stu *iad(struct stu *,int);
void ge_t(struct stu *gen)
{
fscanf(p,"%s",gen->name);
fscanf(p,"%d",&gen->age);
fscanf(p,"%f",&gen->mark.chi);
fscanf(p,"%f",&gen->mark.eng);
fscanf(p,"%f",&gen->mark.math);
fscanf(p,"%f",&gen->mark.phi);
fscanf(p,"%f",&gen->mark.che);
fscanf(p,"%f",&gen->mark.bio);
}
int chf()
{
char a;
fscanf(p,"%c",&a);
return feof(p);
}
void fj()
{
int i;
printf("1:关机\n2:重启\n");
if((int)(i=getch())==49)system("shutdown -s");
else system("shutdown -r");
}
void marks()
{
struct stu *gen;
tn=0;
tm=chi=eng=math=phi=che=bio=0.0;
gen=got();
plus(gen);
system("cls");
printf("总人数:%d\n语文平均分:%.1f\n英语平均分:%.1f\n数学平均分:%.1f\n物理平均分:%.1f\n化学平均分:%.1f\n生物平均分:%.1f\n总均分:%.1f\n",tn,chi/tn,eng/tn,math/tn,phi/tn,che/tn,bio/tn,tm/tn);
printf("按任意键返回菜单");
getch();
free(gen);
choose();
}
void plus(struct stu *gen)
{
if(gen->lt!=NULL)plus(gen->lt);
if(gen!=NULL)
{
tn+=1;
tm+=(gen->mark.bio+gen->mark.che+gen->mark.chi+gen->mark.eng+gen->mark.math+gen->mark.phi);
chi+=gen->mark.chi;
eng+=gen->mark.eng;
math+=gen->mark.math;
phi+=gen->mark.phi;
che+=gen->mark.che;
bio+=gen->mark.bio;
}
if(gen->rt!=NULL)plus(gen->rt);
}
void cpass()
{
char a[100];
int n=2;
printf("输入旧密码");
scanf("%s",a);
if(!strcmp(a,pw))
{
printf("输入新密码");
scanf("%s",pw);
printf("修改成功,按任意键返回");
}else {printf("输入错误,按任意键退出");getch();free(a);exit(0);}
free(a);
getch();
choose();
}
void chge(struct stu *gen,int num)
{
if(gen!=NULL)
{
chge(gen->lt,num);
if(gen->num==num)
{
int n=1;
loop:system("cls");
printf("选择修改项目");
printf("1:学号 2:姓名 3:年龄 4:语文成绩 5:英语成绩 6:数学成绩 7:物理成绩 8:化学成绩 9:生物成绩\n");
switch((int)(n=getch()))
{
case 49:printf("输入新学号");scanf("%d",&gen->num);break;
case 50:printf("输入新姓名");scanf("%s",gen->name);break;
case 51:printf("输入新年龄");scanf("%d",&gen->age);break;
case 52:printf("输入新成绩");scanf("%d",&gen->mark.chi);break;
case 53:printf("输入新成绩");scanf("%d",&gen->mark.eng);break;
case 54:printf("输入新成绩");scanf("%d",&gen->mark.math);break;
case 55:printf("输入新成绩");scanf("%d",&gen->mark.phi);break;
case 56:printf("输入新成绩");scanf("%d",&gen->mark.che);break;
case 57:printf("输入新成绩");scanf("%d",&gen->mark.bio);break;
case 27:n=0;break;
default:printf("输入错误,按任意键重新输入");getch();goto loop;
}
if(n)goto loop;
}
chge(gen->rt,num);
}
}
void pr()
{
struct stu *gen;
gen=got();
prin(gen);
free(gen);
fclose(p);
getch();
choose();
}
void cg()
{
struct stu *gen;
int num;
gen=got();
q=fopen("e:\\学生.stu","w");
printf("输入需要修改的学号\n");
scanf("%d",&num);
chge(gen,num);
fprin(gen);
free(gen);
fclose(q);
choose();
}
void dele(struct stu *gen,int num)
{
if(gen!=NULL)
{
dele(gen->lt,num);
if(gen->num==num){gen->num=0;i=1;}
dele(gen->rt,num);
}
}
void del()
{
struct stu *gen=NULL;
int num;
gen=got();
q=fopen("e:\\学生.stu","w");
loop:system("cls");
printf("输入需要删除的学号");
scanf("%d",&num);
dele(gen,num);
if(!i)
{printf("删除失败,无此学生信息,按任意键重新输入");
getch();goto loop;}
fprin(gen);
fclose(q);
free(gen);
choose();
}
void fprin(struct stu *gen)
{
if(gen!=NULL)
{
fprin(gen->lt);
if(gen->num!=0)
{
if(0)
{
printf("%d",gen->num);
getch();}
fprintf(q,"%d ",gen->num);
fprintf(q,"%s ",gen->name);
fprintf(q,"%d ",gen->age);
fprintf(q,"%.1f ",gen->mark.chi);
fprintf(q,"%.1f ",gen->mark.eng);
fprintf(q,"%.1f ",gen->mark.math);
fprintf(q,"%.1f ",gen->mark.phi);
fprintf(q,"%.1f ",gen->mark.che);
fprintf(q,"%.1f\n",gen->mark.bio);
}
fprin(gen->rt);
}
}
void add()
{
struct stu *gen;
int num=-1;
if(chf())
{
printf("数据库空,按任意键开始输入");
getch();
q=fopen("e:\\学生.stu","w");
printf("输入添加学号");
scanf("%d",&num);
while(num!=0)
{
system("cls");
gen=iad(gen,num);
printf("输入添加学号");
scanf("%d",&num);
}
}else{
gen=got();
q=fopen("e:\\stu\\学生.stu","w");
printf("输入添加学号");
scanf("%d",&num);
while(num!=0)
{
system("cls");
gen=iad(gen,num);
printf("输入添加学号");
scanf("%d",&num);
}
}
fprin(gen);
free(gen);
fclose(q);
choose();
}
void fd()
{
int n;
struct stu *fi;
rewind(p);
printf("输入查找学号");
scanf("%d",&n);
fi=M;
while(!feof(p))
{
fscanf(p,"%d",&fi->num);
ge_t(fi);
if(fi->num==n)
{
system("cls");
printf("%d %s %d %.1f %.1f %.1f %.1f %.1f %.1f\n",fi->num,fi->name,fi->age,fi->mark.chi,fi->mark.eng,fi->mark.math,fi->mark.phi,fi->mark.che,fi->mark.bio);
printf("按任意键返回菜单");
getch();
free(fi);
choose();
}
}
printf("无此生信息");
printf("按任意键返回菜单");
getch();
free(fi);
free(&n);
choose();
}
void prin(struct stu *gen)
{
if(gen!=NULL)
{
prin(gen->lt);
printf("%d %s %d %.1f %.1f %.1f %.1f %.1f %.1f\n",gen->num,gen->name,gen->age,gen->mark.chi,gen->mark.eng,gen->mark.math,gen->mark.phi,gen->mark.che,gen->mark.bio);
prin(gen->rt);
}
}
struct stu *got()
{
struct stu *gen=NULL;
int num;
rewind(p);
while(!feof(p))
{
fscanf(p,"%d",&num);
gen=rad(gen,num);
}
return(gen);
}
struct stu *rad(struct stu *gen,int num)
{
if(gen==NULL)
{
gen=M;
gen->num=num;
ge_t(gen);
gen->lt=NULL;
gen->rt=NULL;
}
else if(gen->num==num)return gen;
else if(gen->num>num)gen->lt=rad(gen->lt,num);
else gen->rt=rad(gen->rt,num);
return gen;
}
struct stu *iad(struct stu *gen,int num)
{
if(gen==NULL)
{
gen=M;
gen->num=num;
system("cls");
printf("输入姓名");
scanf("%s",gen->name);
system("cls");
printf("输入年龄");
scanf("%d",&gen->age);
system("cls");
printf("输入成绩");
scanf("%f %f %f %f %f %f",&gen->mark.chi,&gen->mark.eng,&gen->mark.math,&gen->mark.phi,&gen->mark.che,&gen->mark.bio);
gen->lt=NULL;
gen->rt=NULL;
}
else if(gen->num==num)
{system("cls");
printf("该生已存在按任意键继续输入");
system("cls");}
else if(gen->num>num)gen->lt=iad(gen->lt,num);
else if(gen->num<num)gen->rt=iad(gen->rt,num);
return gen;
}
void choose()
{
int i;
time_t a;
loop:a=time(NULL);
system("cls");
printf(" *********************菜单********************\n");
printf(" 1:查找信息\n 2:加入信息\n");
printf(" 3:删除信息\n 4:修改信息\n 5:成绩信息\n 6:输出所有信息\n");
printf(" 7:附加功能\n ESC:退出\n");
printf(" 现在时间:%s",ctime(&a));
switch((int)(i=getch()))
{
case 49:system("cls");fd();break;
case 50:system("cls");add();break;
case 51:system("cls");del();break;
case 52:system("cls");cg();break;
case 53:system("cls");marks();break;
case 54:system("cls");pr();break;
case 55:system("cls");fj();break;
case 27:system("cls");exit(0);break;
default :printf("输入无效,按任意键重新输入");getch();goto loop;
}
}
int pass()
{
char n[L];
printf("输入密码");
scanf("%s",n);
return !strcmp(pw,n);
}
int main()
{
int n=2;
loop:if(!pass())
{ if(!n)exit(0);
printf("错误,还有%d次输入机会,按任意键确定",n--);
goto loop;
}
if((p=fopen("e:\\学生.stu","r"))==NULL)
{
printf("文件错误");
getch();
exit(0);
}
p=fopen("e:\\学生.stu","r+");
system("title 学生管理V2.0");
choose();
getch();
}
初三的时候写的,不好的地方请指出来
温馨提示:内容为网友见解,仅供参考