C语言学生管理系统源代码.docx
《C语言学生管理系统源代码.docx》由会员分享,可在线阅读,更多相关《C语言学生管理系统源代码.docx(21页珍藏版)》请在冰豆网上搜索。
C语言学生管理系统源代码
C语言学生成绩管理系统源代码,保证能用……
#include”malloc.h”
#include"stdio。
h"
#include”stdlib.h"
#include”string.h”
charfilename[30];
intn=0,d;
FILE*fp;
typedefstructstudent
{
intnum;
charname[10];
intyuwen;
intshuxue;
intyingyu;
intcount;
floataver;
structstudent*next;
}aaa;
typedefstructstu
{
intnum;
charname[10];
intyuwen,shuxue,yingyu;
intcount;
floataver;
}aaaa;
aaa*head;
/*浏览*/
voidliulan(aaa*head)
{
aaa*p;
if(head==NULL)
printf("\n没有任何学生资料!
\n");
else
{
printf(”\t\t\t考试成绩管理系统\n”);
printf("————-—----———----——--—----————-—-—----———-—----—————\n");
printf(”|学号\t|姓名\t|语文\t|数学\t|英语\t|总分\t|平均分|\n”);
printf(”---——--—----——-—-———--————-————————-——-—-——-——---——-\n”);
p=head—〉next;
do{
printf("|%d\t|%s\t|%d\t|%d\t|%d\t|%d\t|%.1f\t|\n”,p-〉num,p—>name,p—>yuwen,p—〉shuxue,p—>yingyu,p—〉yuwen+p—>shuxue+p-〉yingyu,p—>count/3。
0);
printf(”-—--—-——-————-—-----———-—---———---—-—-——-—-——---—---\n");
p=p—〉next;
}while(p!
=NULL);
}
}
/*读取*/
aaa*duqu()
{
aaa*s,*head,*p,*q;
n=0;
if((fp=fopen(filename,”rb”))==NULL)
{
printf("不能读取文件!
\n”);
returnNULL;
}
head=malloc(sizeof(aaa));
if(head==NULL)
{
printf(”内存空间不足,文件读取失败!
\n”);
returnNULL;
}
head-〉next=NULL;
p=head;
q=malloc(sizeof(aaa));
if(!
feof(fp))
{
fread(q,sizeof(aaaa),1,fp);
q->next=NULL;
}
while(!
feof(fp))
{
s=malloc(sizeof(aaa));
fread(s,sizeof(aaaa),1,fp);
s->next=NULL;
p—>next=q;
p=q;
q=s;
n++;
}
returnhead;
}
/*输入函数*/
aaa*shuru(aaa*head)
{
aaa*q,*p,*s;
aaanewstd;
n=0;
q=head;
do{
q=head;
s=malloc(sizeof(aaa));
if(s==NULL)
{
printf(”内存不足,添加学生成绩失败!
\07\n");
break;
}
printf(”请输入学号(输入0退出):
");
scanf(”%d”,&newstd.num);
if(newstd.num==0)
break;
if(newstd.num〈0)
{
printf("输入学号有误,请重新输入\n”);
break;
}
p=head—〉next;
while(p!
=NULL)
{
if(p—〉num==newstd.num)
{
printf("输入学号重复,请重新输入!
\n");
break;
}
p=p—>next;
q=q—>next;
}
if(p==NULL)
{
printf(”姓名:
");
scanf("%s",newstd.name);
printf("语文:
");
scanf(”%d",&newstd.yuwen);
printf("数学:
”);
scanf(”%d”,&newstd.shuxue);
printf("英语:
”);
scanf("%d",&newstd.yingyu);
strcpy(s—〉name,newstd。
name);
s—>num=newstd。
num;
s—>yuwen=newstd。
yuwen;
s-〉shuxue=newstd.shuxue;
s->yingyu=newstd.yingyu;
s-〉count=s—〉yuwen+s—>shuxue+s->yingyu;
s—〉aver=(float)(s-〉count/3.0);
s—>next=NULL;
q-〉next=s;
n++;
}
}while
(1);
printf(”输入完毕,%d个学生成绩已输入(已插入)\n”,n);
returnhead;
}
/*保存*/
intbaocun(aaa*head)
{
aaa*s;
s=head—>next;
if((fp=fopen(filename,”wb”))==NULL)
{
printf("不能写入文件!
保存失败!
\n");
return0;
}
while(s!
=NULL)
{
fwrite(s,sizeof(aaaa),1,fp);
s=s->next;
}
fclose(fp);
return1;
}
/*保存文件*/
intsave(aaa*head)
{
inti=0;
aaa*s;
s=head—>next;
printf("请输入文件路径及文件名:
”);
scanf("%s”,filename);
if((fp=fopen(filename,”wb"))==NULL)
{
printf("不能建立文件!
\n");
return0;
}
while(s!
=NULL)
{
fwrite(s,sizeof(aaaa),1,fp);
s=s->next;
i++;
}
fclose(fp);
printf("%d名学生成绩记录写入%s中!
\n”,i,filename);
printf(”文件保存成功!
\n”);
return1;
}
/*打开文件*/
aaa*dakai(void)
{
aaa*s,*head,*p,*q;
n=0;
printf(”请输入文件路径及文件名:
”);
scanf("%s”,filename);
if((fp=fopen(filename,"rb”))==NULL)
{
printf("不能读取文件!
\n”);
returnNULL;
}
head=malloc(sizeof(aaa));
if(head==NULL)
{
printf(”内存空间不足,文件打开失败!
\n”);
returnNULL;
}
head-〉next=NULL;
p=head;
q=malloc(sizeof(aaa));
if(!
feof(fp))
{
fread(q,sizeof(aaaa),1,fp);
q-〉next=NULL;
}
while(!
feof(fp))
{
s=malloc(sizeof(aaa));
fread(s,sizeof(aaaa),1,fp);
s—>next=NULL;
p-〉next=q;
p=q;
q=s;
n++;
}
liulan(head);
printf(”-—-———--——-———---—-—-----—-——-———--—----—--———-——---\n”);
printf("文件已打开,%d个记录已读取\n",n);
d=baocun(head);
getchar();
returnhead;
}
/*建立*/
aaa*great()
{
aaa*head;
head=malloc(sizeof(aaa));
if(head==NULL)
{
printf(”内存空间不足,链表建立失败!
\07\n");
returnNULL;
}
head->next=NULL;
head->num=0;
head=shuru(head);
d=save(head);
returnhead;
}
/*查询*/
intchaxun(aaa*head)
{
aaa*q;
inti;
if(head==NULL)
{
printf(”\n没有任何的学生资料!
\n");
return0;
}
printf("需要查询的学号:
");
scanf(”%d”,&i);
q=head—〉next;
while(q—>num!
=i&&q!
=NULL)
q=q->next;
if(q!
=NULL)
{
printf(”学号\t姓名\t语文\t数学\t英语\t总分\t平均分\n");
q—〉count=q—>yuwen+q—>shuxue+q—>yingyu;
q->aver=(float)(q-〉count/3。
0);
printf("%d\t%s\t%d\t%d\t%d\t%d\t%。
1f\n",q—〉num,q—〉name,q-〉yuwen,q—>shuxue,q->yingyu,q->count,q-〉aver);
return0;
}
else
{
printf(”查无此人!
\n");
return0;
}
}
/*删除*/
aaa*shanchu(aaa*head)
{
aaa*s,*q;
intm;
head=duqu();
if(head==NULL)
{
printf(”没有任何学生记录!
\n”);
exit(0);
}
printf(”请输入要删除的学生学号”);
scanf(”%d",&m);
if(m==0)
returnhead;
s=head;
q=s—〉next;
while(q->num!
=m&&q!
=NULL)
{
q=q—>next;
s=s->next;
}
if(q!
=NULL)
{
printf("学号:
%d姓名:
%s语文:
%d数学:
%d英语:
%d总分:
%d平均分:
%。
1f\n”,q->num,q—〉name,q-〉yuwen,q-〉shuxue,q->yingyu,q-〉yingyu+q—〉shuxue+q->yuwen,q-〉count/3.0);
s—〉next=q->next;
free(q);
printf(”删除学号为%d学生记录成功!
\n",m);
}
else
printf("查无此人!
\n");
liulan(head);
d=baocun(head);
returnhead;
}
/*排序*/
aaa*paixu(aaa*head)
{
aaa*p,*max,*q;
inti,j,m;
chart[10];
head=duqu();
if(head==NULL)
{
printf("\n没有任何学生资料!
\07\n”);
returnNULL;
exit(0);
}
q=head;
printf(”按总成绩排序所有学生\n”);
for(i=0;i{
max=p=q=q->next;
for(j=i+1;j〈n;j++)
{
p=p->next;
if(max—>count
count)
max=p;
}
if(max!
=q)
{
m=max->num;
max—〉num=q-〉num;
q->num=m;
strcpy(t,max—>name);
strcpy(max—>name,q->name);
strcpy(q—〉name,t);
m=max->yuwen;
max->yuwen=q—>yuwen;
q—>yuwen=m;
m=max-〉shuxue;
max->shuxue=q—〉shuxue;
q-〉shuxue=m;
m=max—>yingyu;
max—>yingyu=q—>yingyu;
q-〉yingyu=m;
q-〉count=q—>yuwen+q—>shuxue+q—〉yingyu;
q—〉aver=(float)(q->count/3.0);
}
}
d=baocun(head);
returnhead;
}
/*插入*/
aaa*charu(aaa*head)
{
aaa*s,*p;
s=p=head;
p=shuru(s);
p=paixu(p);
printf("插入完毕!
\n”);
liulan(head);
d=baocun(head);
returnhead;
}
/*修改*/
aaa*xiugai(aaa*head)
{
aaa*q;
intm;
if(head==NULL)
{
printf("\n没有任何学生记录!
\n”);
returnNULL;
}
q=head-〉next;
printf("请输入要修改的学生的学号:
");
scanf(”%d",&m);
while(q-〉num!
=m&&q!
=NULL)
q=q-〉next;
if(q==NULL)
printf(”查无此人!
\n");
printf(”学号:
%d姓名:
%s语文:
%d数学:
%d英语:
%d总分:
%d平均分:
%.1f\n”,q->num,q->name,q—〉yuwen,q->shuxue,q—〉yingyu,q—>yuwen+q—〉shuxue+q—>yingyu,q—〉count/3.0);
printf("请输入修改之后的学号:
”);
scanf("%d”,&q—>num);
printf("请输入修改之后的姓名:
”);
scanf(”%s",q—〉name);
printf("请输入修改之后的语文:
");
scanf(”%d”,&q—>yuwen);
printf(”请输入修改之后的数学:
”);
scanf("%d”,&q->shuxue);
printf("请输入修改之后的英语:
");
scanf("%d”,&q—〉yingyu);
printf("修改成功\n");
q->count=q-〉yuwen+q->shuxue+q-〉yingyu;
q->aver=(float)(q->count/3。
0);
printf("学号:
%d姓名:
%s语文:
%d数学:
%d英语:
%d总分:
%d平均分:
%.1f\n”,q->num,q-〉name,q—〉yuwen,q->shuxue,q—>yingyu,q->count,q->aver);
d=baocun(head);
head=duqu();
head=paixu(head);
printf("学号为%d学生数据修改成功!
\n",m);
liulan(head);
returnhead;
}
/*主函数*/
main()
{
aaa*head;
intm;
do{
printf("\n");
printf("\t************************************************\n");
printf("\t***======================***\n”);
printf("\t***学生成绩管理系统***\n");
printf("\t***======================***\n");
printf("\t******\n");
printf(”\t***1.输入学生成绩***\n”);
printf(”\t***2.打开记录文件***\n”);
printf(”\t***3.查找学生成绩***\n");
printf("\t***4。
修改学生信息***\n");
printf("\t***5。
删除学生信息***\n");
printf(”\t***6。
插入学生信息***\n");
printf(”\t***7.学生成绩排序***\n”);
printf(”\t***8。
浏览学生信息***\n”);
printf(”\t***9.保存输入数据***\n”);
printf(”\t***0退出***\n”);
printf("\t******\n”);
printf(”\t************************************************\n”);
printf("请输入选项(0—-9):
”);
scanf(”%d”,&m);
switch(m)
{
case1:
{
printf(”执行输入学生成绩命令!
\n");
head=great();
};
break;
case2:
{
printf("执行打开文件命令!
\n");
head=dakai();
};
break;
case3:
{
printf(”执行查找学生信息命令!
\n");
d=chaxun(head);
};
break;
case4:
{
printf("执行修改学生信息命令!
\n”);
head=xiugai(head);
};
break;
case5:
{
printf("执行删除学生信息命令!
\n");
head=shanchu(head);
};
break;
case6:
{
printf(”执行插入学生信息命令!
\n");
head=charu(head);
};
break;
case7:
{
printf("执行学生成绩排序命令!
\n");
head=paixu(head);
printf("已成功排序,输入任意键查看!
\n");
getchar();
liulan(head);
};
break;
case8:
{
printf("执行浏览学生信息命令!
\n”);
liulan(head);
};
break;
case9:
{
printf(”执行保存学生信息命令!
\n");
d=save(head);
};
break;
case0:
gotoAAAA;
default:
printf("输入错误!
(请输入0——9选项)\07\n");
break;
}
}while
(1);
AAAA:
if(head!
=NULL)
d=baocun(head);
getchar();