c语言学生管理系统.docx
《c语言学生管理系统.docx》由会员分享,可在线阅读,更多相关《c语言学生管理系统.docx(30页珍藏版)》请在冰豆网上搜索。
![c语言学生管理系统.docx](https://file1.bdocx.com/fileroot1/2022-12/14/beedafd7-42b1-4065-9351-2cf93bf4ae10/beedafd7-42b1-4065-9351-2cf93bf4ae101.gif)
c语言学生管理系统
#include
#include
#include
typedefstructlink
{
intnumber;
charname[10];
charsex[4];
intscore[10];
floatsum;
floatave;
structlink*next;
}link;
intm,n;
link*h;
//菜单
voidmenu()
{
printf("\n\n\n\t\t\t*************菜单*************\n");
printf("\n\t\t\t\t1从文件读取学生信息\n");
printf("\t\t\t\t2显示所有学生信息\n");
printf("\t\t\t\t3进入成绩管理系统\n");
printf("\t\t\t\t4进入学生信息维护系统\n");
printf("\t\t\t\t5显示菜单\n");
printf("\t\t\t\t6将学生信息写入新的文件\n");
printf("\t\t\t\t7返回主菜单\n");
printf("\t\t\t\t8退出系统\n");
}
//排序菜单
voidmenupx()
{
printf("\n\n\n\t\t\t\*************排序*************\n");
printf("\n\t\t\t\t1按总分顺序排序\n");
printf("\t\t\t\t2按总分降序排序\n");
printf("\t\t\t\t3按一门课成绩顺序排序\n");
printf("\t\t\t\t4按一门课成绩降序排序\n");
printf("\t\t\t\t5返回上级菜单\n");
printf("\t\t\t\t6返回主系统\n");
}
//按某门课成绩排序菜单
voidmenupx3()
{
inti;
for(i=1;i<=n;i++)
printf("*%d按科目%d的成绩排序\n",i,i);
}
//学生信息维护菜单
voidmenuxxwh()
{
printf("\n\n\n\t\t\t\*************学生信息维护*************\n");
printf("\n\t\t\t\t1显示所有学生信息\n");
printf("\t\t\t\t2计算每个学生的总分和平均分\n");
printf("\t\t\t\t3按学号查找一个同学\n");
printf("\t\t\t\t4按姓名查找一个同学\n");
printf("\t\t\t\t5按学号删除一个同学的信息\n");
printf("\t\t\t\t6按姓名删除一个同学的信息\n");
printf("\t\t\t\t7添加一个同学的信息\n");
printf("\t\t\t\t8修改一个同学的信息\n");
printf("\t\t\t\t9返回上级菜单\n");
printf("\t\t\t\t10返回主系统\n");
}
//链表
link*creat()
{
link*head,*p;
inti,j=0;
FILE*fp1;
head=NULL;
p=(link*)malloc(sizeof(link));
if(p==NULL)
printf("申请内存出错!
!
!
");
else
head=p;
printf("已正确读取文件\n",m,n);
fp1=fopen("输入.txt","r");
if(fp1==NULL)
printf("读取文件失败!
!
!
");
while(j{
j++;
fscanf(fp1,"%d%s%s",&p->number,p->name,p->sex);
for(i=0;i{
fscanf(fp1,"%d",&p->score[i]);
}
p->next=(link*)malloc(sizeof(link));
if(p->next==NULL)
printf("申请内存出错!
!
!
");
if(j==m)
p->next=NULL;
else
p=p->next;
}
fclose(fp1);
returnhead;
}
//信息输入到文件
voidfscan(link*head)
{
FILE*fp;
link*t;
inti,j;
t=head;
fp=fopen("输出.txt","w+");
if(fp==NULL)
{
printf("文件处理错误!
!
!
");
}
else
{
fprintf(fp,"学号姓名性别");
for(j=1;j<=n;j++)
{
fprintf(fp,"科目%d",j);
}
fprintf(fp,"\n");
while(t!
=NULL)
{
fprintf(fp,"%4d%s%s",t->number,t->name,t->sex);
for(i=0;ifprintf(fp,"%4d",t->score[i]);
fprintf(fp,"\n");
t=t->next;
}
fclose(fp);
printf("信息已写入文件!
!
");
}
}
/*//链表复制
link*copcreat(link*head)
{
link*p,*q,*h,*t=NULL;
inti;
p=head;
h=NULL;
q=(link*)malloc(sizeof(link));
if(q==NULL)
printf("申请内存出错!
!
!
");
else
h=q;
while(p!
=NULL)
{
q->ave=p->ave;
q->number=p->number;
for(i=0;i{
q->score[i]=p->score[i];
}
q->sum=p->sum;
strcpy(q->name,p->name);
strcpy(q->sex,p->sex);
q->next=(link*)malloc(sizeof(link));
if(q->next==NULL)
printf("申请内存出错!
!
!
");
else
{p=p->next;
t=q;
q=q->next;
}
}
t->next=NULL;
returnh;
}
*/
//显示学生信息
voidprint(link*head)
{
inti,j;
link*t,*h;
t=h=head;
printf("");
for(j=1;j<=n;j++)
{
printf("****");
}
printf("学生信息");
for(j=1;j<=n;j++)
{
printf("****");
}
printf("\n");
printf("学号姓名性别");
for(j=1;j<=n;j++)
{
printf("科目%d",j);
}
printf("\n");
while(t!
=NULL)
{
printf("%4d%s%s",t->number,t->name,t->sex);
for(i=0;iprintf("%4d",t->score[i]);
printf("\n");
t=t->next;
}
}
//计算每个同学的总分、平均分
link*sum(link*head)
{
link*p;
inti;
p=head;
while(p!
=NULL)
{
p->sum=0;
p->ave=0;
for(i=0;ip->sum+=p->score[i];
p->ave=p->sum/n;
p=p->next;
}
returnhead;
}
//输出成绩、总分、平均分
voidprint1(link*head)
{
inti,j;
link*t,*h;
t=h=head;
printf("");
for(j=1;j<=n;j++)
{
printf("*****");
}
printf("学生成绩和总分");
for(j=1;j<=n;j++)
{
printf("*****");
}
printf("\n");
printf("学号姓名性别");
for(j=1;j<=n;j++)
{
printf("科目%d",j);
}
printf("总分平均分\n");
while(t!
=NULL)
{
printf("%4d%s%s",t->number,t->name,t->sex);
for(i=0;iprintf("%4d",t->score[i]);
printf("%.2f",t->sum);
printf("%.2f",t->ave);
printf("\n");
t=t->next;
}
}
//排序
//按总分顺序排序
link*sumsxpx(link*head)
{
inti;
link*p,*q,*temp;
temp=(link*)malloc(sizeof(link));
for(p=head;p!
=NULL;p=p->next)
{
for(q=p->next;q!
=NULL;q=q->next)
{
if(p->sum>q->sum)
{
temp->sum=p->sum;
temp->ave=p->ave;
temp->number=p->number;
for(i=0;i{
temp->score[i]=p->score[i];
}
strcpy(temp->name,p->name);
strcpy(temp->sex,p->sex);
p->sum=q->sum;
p->ave=q->ave;
p->number=q->number;
for(i=0;i{
p->score[i]=q->score[i];
}
strcpy(p->name,q->name);
strcpy(p->sex,q->sex);
q->sum=temp->sum;
q->ave=temp->ave;
q->number=temp->number;
for(i=0;i{
q->score[i]=temp->score[i];
}
strcpy(q->name,temp->name);
strcpy(q->sex,temp->sex);
}
}
}
returnhead;
}
//按总分降序排序
link*sumjxpx(link*head)
{
inti;
link*p,*q,*temp;
temp=(link*)malloc(sizeof(link));
for(p=head;p!
=NULL;p=p->next)
{
for(q=p->next;q!
=NULL;q=q->next)
{
if(p->sumsum)
{
temp->sum=p->sum;
temp->ave=p->ave;
temp->number=p->number;
for(i=0;i{
temp->score[i]=p->score[i];
}
strcpy(temp->name,p->name);
strcpy(temp->sex,p->sex);
p->sum=q->sum;
p->ave=q->ave;
p->number=q->number;
for(i=0;i{
p->score[i]=q->score[i];
}
strcpy(p->name,q->name);
strcpy(p->sex,q->sex);
q->sum=temp->sum;
q->ave=temp->ave;
q->number=temp->number;
for(i=0;i{
q->score[i]=temp->score[i];
}
strcpy(q->name,temp->name);
strcpy(q->sex,temp->sex);
}
}
}
returnhead;
}
//按一门课顺序排序
link*scoresxpx(link*head)
{
link*h=head;
link*p,*q,*temp;
inta,i;
printf("请选择一门课科目:
");
scanf("%d",&a);
temp=(link*)malloc(sizeof(link));
for(p=head;p!
=NULL;p=p->next)
{
for(q=p->next;q!
=NULL;q=q->next)
{
if(p->score[a-1]>q->score[a-1])
{
temp->sum=p->sum;
temp->ave=p->ave;
temp->number=p->number;
for(i=0;i{
temp->score[i]=p->score[i];
}
strcpy(temp->name,p->name);
strcpy(temp->sex,p->sex);
p->sum=q->sum;
p->ave=q->ave;
p->number=q->number;
for(i=0;i{
p->score[i]=q->score[i];
}
strcpy(p->name,q->name);
strcpy(p->sex,q->sex);
q->sum=temp->sum;
q->ave=temp->ave;
q->number=temp->number;
for(i=0;i{
q->score[i]=temp->score[i];
}
strcpy(q->name,temp->name);
strcpy(q->sex,temp->sex);
}
}
}
returnhead;
}
//按一门课降序排序
link*scorejxpx(link*head)
{
link*h=head;
link*p,*q,*temp;
inta,i;
printf("请选择一门课科目:
");
scanf("%d",&a);
temp=(link*)malloc(sizeof(link));
for(p=head;p!
=NULL;p=p->next)
{
for(q=p->next;q!
=NULL;q=q->next)
{
if(p->score[a-1]score[a-1])
{
temp->sum=p->sum;
temp->ave=p->ave;
temp->number=p->number;
for(i=0;i{
temp->score[i]=p->score[i];
}
strcpy(temp->name,p->name);
strcpy(temp->sex,p->sex);
p->sum=q->sum;
p->ave=q->ave;
p->number=q->number;
for(i=0;i{
p->score[i]=q->score[i];
}
strcpy(p->name,q->name);
strcpy(p->sex,q->sex);
q->sum=temp->sum;
q->ave=temp->ave;
q->number=temp->number;
for(i=0;i{
q->score[i]=temp->score[i];
}
strcpy(q->name,temp->name);
strcpy(q->sex,temp->sex);
}
}
}
returnhead;
}
//按学号查找一个同学信息
link*findxh(link*head)
{
intx;
link*h,*t=NULL;
printf("请输入学生的学号\n");
scanf("%d",&x);
for(h=head;h!
=NULL;h=h->next)
{
if(x==h->number)
{
t=h;
break;
}
}
returnt;
}
//按姓名查找一个同学
link*findxm(link*head)
{
charstr[10];
link*h,*t=NULL;
printf("请输入学生的姓名\n");
getchar();
gets(str);
for(h=head;h!
=NULL;h=h->next)
{
if(strcmp(h->name,str)==0)
{
t=h;
break;
}
}
returnt;
}
//按学号删除一个同学
link*delxh(link*head)
{
intkey,k=0;
link*h,*t,*p;
h=t=p=head;
printf("请输入要删除的学生的学号:
");
scanf("%d",&key);
for(;p!
=NULL;p=p->next)
{
k++;
if(k>2)
{
t=t->next;
}
if((key==p->number)&&(k==1))
{
h=p->next;
}
elseif(key==p->number&&k>1)
{
t->next=p->next;
}
elseif(key==p->number&&p->next==NULL)
{
t=NULL;
}
}
returnh;
}
//按姓名删除一个同学
link*delxm(link*head)
{
intk=0;
charstr[10];
link*h,*t,*p;
h=t=p=head;
printf("请输入要删除的学生的姓名:
");
getchar();
gets(str);
for(;p!
=NULL;p=p->next)
{
k++;
if(k>2)
{
t=t->next;
}
if((strcmp(p->name,str)==0)&&(k==1))
{
h=p->next;
}
elseif(strcmp(p->name,str)==0&&k>1)
{
t->next=p->next;
}
elseif(strcmp(p->name,str)==0&&p->next==NULL)
{
t=NULL;
}
}
returnh;
}
//添加一个学生信息
link*add(link*head)
{
link*h,*h1;
inti,k=0;
h1=(link*)malloc(sizeof(link));
printf("请输入要添加学生的信息:
\n");
printf("学号姓名性别");
for(i=0;i{
printf("科目%d",i+1);
}
printf("\n");
scanf("%d%s%s",&h1->number,h1->name,h1->sex);
for(i=0;i{
scanf("%d",&h1->score[i]);
}
h1->next=head;
h=h1;
returnh;
}
//修改一个同学的信息
link*xg(link*t)
{
link*p=t;
inti;
printf("请输入这个同学的所有信息:
\n");
scanf("%d%s%s",&p->number,p->name,p->sex);
for(i=0;i{
scanf("%d",&p->score[i]);
}
returnp;
}
//主函数
main()
{
inta,b,c,i,j;
link*h,*t,*d;
link*f,*p;
L:
printf("\n\n\n\n\n\n\t\t\t\********欢迎使用学生信息管理系统********\n");
printf("\n\n\t\t\t\t制作人:
");
printf("\n\n\t\t\t\t请输入学生数和科目数:
");
scanf("%d%d",&m,&n);
H:
system("cls");
menu();
while
(1)
{
scanf("%d",&a);
switch(a)
{
case1:
{
h=creat();
}
break;
case2:
{
print(h);
}break;
case3:
{system("c