学生成绩管理系统源代码知识讲解.docx
《学生成绩管理系统源代码知识讲解.docx》由会员分享,可在线阅读,更多相关《学生成绩管理系统源代码知识讲解.docx(24页珍藏版)》请在冰豆网上搜索。
学生成绩管理系统源代码知识讲解
学生成绩管理系统源代码
#include
#include
#include
#include
structstudent//结构体定义
{
intnum;
charname[10];
charbirthday[10];
intCyuyan;
intshujujiegou;
structstudent*next;
};
structstudent*creat_by_input();
structstudent*get_last_student(structstudent*head);
structstudent*Print_menu_main()//主菜单
{
printf("*********************************************************************\n");
printf("|1.........输入学生信息|\n");
printf("|2.........输出学生信息|\n");
printf("|3.........查找学生信息|\n");
printf("|4.........修改学生信息|\n");
printf("|5.........插入学生信息|\n");
printf("|6.........删除学生信息|\n");
printf("|7.........排序学生信息|\n");
printf("|0.........退出系统|\n");
printf("|_____________|\n");
}
structstudent*print_table_head()
{
printf("+----------+----------+----------+----------+-------------+\n");
printf("|学号|姓名|出生日期|c成绩|数据结构成绩|\n");
printf("+----------+----------+----------+----------+-------------+\n");
}
structstudent*print_table_row(structstudent*p)
{
printf("|%10d|%10s|%10s|%10d|%10d|\n",p->num,p->name,p->birthday,p->Cyuyan,p->shujujiegou);
}
voidprint_table_bottom()
{
printf("+----------+----------+----------+----------+-------------+\n");
}
structstudent*Creat_stu_record()//建立链表
{
structstudent*plaststu=NULL,*pnewstu;
charcontinue_input='N';
structstudent*head=NULL;
while
(1)
{
if(head==NULL)
{
head=creat_by_input();
print_table_head();
print_table_row(head);
print_table_bottom();
}
else
{
pnewstu=creat_by_input();
print_table_head();
print_table_row(pnewstu);
print_table_bottom();
plaststu=get_last_student(head);
plaststu->next=pnewstu;}
printf("是否继续输入学生信息?
(Y继续,N返回菜单)\n");
getchar();
continue_input=getchar();
if(continue_input=='n'||continue_input=='N')
{
system("cls");
Print_menu_main();
break;
}
}
returnhead;
}
structstudent*creat_by_input()
{
structstudent*pnewstu=(structstudent*)malloc(sizeof(structstudent));
printf("请输入学生信息\n");
printf("学号:
");scanf("%d",&pnewstu->num);
printf("姓名:
");scanf("%s",pnewstu->name);
printf("出生年月:
");scanf("%s",pnewstu->birthday);
printf("请输入学生成绩\n");
printf("C语言:
");scanf("%d",&(pnewstu->Cyuyan));
printf("数据结构:
");scanf("%d",&(pnewstu->shujujiegou));
pnewstu->next=NULL;
returnpnewstu;
}
structstudent*get_last_student(structstudent*p)
{
if(p->next==NULL)
returnp;
else
returnget_last_student(p->next);
}
voidPrint_Stu_Doc(structstudent*head)
{
structstudent*p;
charr;
print_table_head();
if(head==NULL)
{
printf("\nNoRecords\n");
}
for(p=head;p;p=p->next)
{
printf("|%10d|%10s|%10s|%10d|%10d|\n",p->num,p->name,p->birthday,p->Cyuyan,p->shujujiegou);
printf("+----------+----------+----------+----------+-------------+\n");}
printf("(按Enter键返回主菜单)\n");
getchar();
r=getchar();
if(r!
='1')
{
system("cls");
Print_menu_main();
}
else
{
system("cls");
Print_menu_main();
}
}
structstudent*search_by_name(structstudent*head)//按姓名查找
{
charname[10];
structstudent*p=head;
charcontinue_input;
/*intisfound=0;*/
printf("请输入要查找的姓名:
");
scanf("%s",name);
printf("查找%s\n",name);
print_table_head();
while(p!
=NULL)
{
if(strcmp(p->name,name)==0)
{
print_table_row(p);
p=p->next;
/*isfound=1;*/
break;
}
p=p->next;
}
print_table_bottom();
printf("是否继续查找?
(Y继续;N返回主菜单)\n");
getchar();
continue_input=getchar();
if(continue_input=='n'||continue_input=='N')
{
system("cls");
Print_menu_main();
}
else
search_by_name(head);
}
structstudent*search_by_id(structstudent*head)//按学号查找
{
intid;
structstudent*p=head;
charcontinue_input;
/*intisfound=0;*/
printf("请输入要查找的学号:
");
scanf("%d",&id);
printf("查找%d\n",id);
print_table_head();
while(p!
=NULL)
{
if(p->num==id)
{
print_table_row(p);
p=p->next;
/*isfound=1;*/
break;
}
p=p->next;
}
print_table_bottom();
printf("是否继续查找?
(Y继续;N返回主菜单)\n");
getchar();
continue_input=getchar();
if(continue_input=='n'||continue_input=='N')
{
system("cls");
Print_menu_main();
}
else
search_by_id(head);
returnhead;
}
structstudent*modify_record_by_id(structstudent*head)//按学号修改
{
structstudent*p=head;
intid;
charcontinue_input;
printf("请输入要修改的学生的学号:
\n");
scanf("%d",&id);
while(p!
=NULL)
{
if(p->num==id)
break;
p=p->next;
}
if(p==NULL)
printf("抱歉,没有学号为%d的学生\n",id);
else
{
printf("请输入学生信息:
\n");
printf("学号:
");scanf("%d",&(p->num));
printf("姓名:
");scanf("%s",&(p->name));
printf("出生年月:
");scanf("%s",&(p->birthday));
printf("请输入学生成绩:
\n");
printf("C语言:
");scanf("%d",&(p->Cyuyan));
printf("数据结构:
");scanf("%d",&(p->shujujiegou));
print_table_head();print_table_row(p);print_table_bottom();}
printf("继续修改学生信息吗?
Y继续;N返回主菜单\n");
getchar();
continue_input=getchar();
if(continue_input=='y'||continue_input=='Y')
creat_by_input();
else
{
system("cls");
Print_menu_main();
}
returnhead;
}
structstudent*modify_record_by_name(structstudent*head)//按姓名修改
{
structstudent*p=head;
charname[10];
charcontinue_input;
printf("请输入要修改的学生的姓名:
\n");
scanf("%s",name);
while(p!
=NULL)
{
if(strcmp(p->name,name)==0)
break;
p=p->next;
}
if(p==NULL)
printf("抱歉,没有姓名为%s的学生\n",name);
else
{
printf("请输入学生信息:
\n");
printf("学号:
");scanf("%d",&(p->num));
printf("姓名:
");scanf("%s",&(p->name));
printf("出生年月:
");scanf("%s",&(p->birthday));
printf("请输入学生成绩:
\n");
printf("C语言:
");scanf("%d",&(p->Cyuyan));
printf("数据结构:
");scanf("%d",&(p->shujujiegou));
print_table_head();print_table_row(p);print_table_bottom();}
printf("继续修改学生信息吗?
Y继续;N返回主菜单\n");
getchar();
continue_input=getchar();
if(continue_input=='y'||continue_input=='Y')
creat_by_input();
else
{
system("cls");
Print_menu_main();
}
returnhead;
}
structstudent*insert_record(structstudent*head)//插入
{
structstudent*ptr1;
structstudent*ptr,*stud;
structstudent*ptr2=head;
charcontinue_input='N';
intid;
printf("请输入一个学号,在此之前插入学生信息:
");
scanf("%d",&id);
stud=creat_by_input();
ptr=stud;
if(head==NULL)
{
head=ptr;head->next=NULL;
}
elseif(head->num==id)
{
ptr->next=head;
head=ptr;
}
else
{
while(ptr2!
=NULL)
{
ptr1=ptr2;
ptr2=ptr1->next;
if(ptr2->num==id)
{
ptr1->next=ptr;
ptr->next=ptr2;
break;
}
}
}
print_table_head();
print_table_row(ptr);
print_table_bottom();
printf("是否继续插入学生信息?
(Y继续N返回主菜单)\n");
getchar();
continue_input=getchar();
if(continue_input=='y'||continue_input=='Y')
returninsert_record(head);
else
{
system("cls");
Print_menu_main();
returnhead;
}
}
structstudent*Delete_record_by_id(structstudent*head)//按学号删除
{
structstudent*p=head,*ppre=NULL;
intid;
charcontinue_input;
printf("请输入要删除的学号:
");
scanf("%d",&id);
while(p!
=NULL)
{
if(p->num==id)
break;
p=p->next;
}
if(p==NULL)
printf("抱歉,没有该学号的学生信息!
\n");
else
{
printf("确定要删除学号为%d的学生的信息吗?
(Y确定;N返回主菜单)\n",p->num);
getchar();
continue_input=getchar();
if(continue_input=='y'||continue_input=='Y')
{
ppre=head;
if(ppre==p)
{
head=p->next;
printf("\n");
free(p);
}
else
{
while(ppre!
=NULL)
{
if(ppre->next==p)
{
ppre->next=p->next;
free(p);
break;
}
ppre=ppre->next;
}
}
printf("删除成功!
");
}
//Print_menu_main();
}
printf("继续删除学生信息吗?
(Y继续;N返回主菜单)");
getchar();
continue_input=getchar();
if(continue_input=='y'||continue_input=='Y')
Delete_record_by_id(head);
else
{
system("cls");
Print_menu_main();
returnhead;
}
return0;
}
structstudent*Delete_record_by_name(structstudent*head)//按姓名删除
{
structstudent*p=head,*ppre=NULL;
charname[10];
charcontinue_input;
printf("请输入要删除的姓名:
");
scanf("%s",name);
while(p!
=NULL)
{
if(strcmp(p->name,name)==0)break;
p=p->next;
}
if(p==NULL)
{
printf("抱歉,没有该姓名的学生信息!
\n");
gotoend;
}
else
printf("确定要删除姓名为%s的学生的信息吗?
(Y确定;N返回主菜单)",p->name);
printf("\n");
getchar();
continue_input=getchar();
if(continue_input=='y'||continue_input=='Y')
{
ppre=head;
if(ppre==p)
{
head=p->next;
free(p);
}
else
{
while(ppre!
=NULL)
{
if(ppre->next==p)
{
ppre->next=p->next;
free(p);
break;
}
ppre=ppre->next;
}
}
printf("删除成功!
");
}
//elsePrint_menu_main();
end:
printf("继续删除学生信息吗?
(Y继续;N返回主菜单)");
printf("\n");
getchar();
continue_input=getchar();
if(continue_input=='Y'||continue_input=='y')
Delete_record_by_name(head);
else
{
system("cls");
Print_menu_main();returnhead;
}
return0;
}
structstudent*Sorting_record_by_id(structstudent*head)//按学号排序
{
inti=0,j,k,r;
structstudent*pt1,*pt2,*pt,m;
if(head==NULL)
{
printf("现在无同学记录\n");
printf("(按Enter键返回主菜单)\n");
getchar();
r=getchar();
if(r!
='1')
{
system("cls");
Print_menu_main();
}
else
{
system("cls");
Print_menu_main();
}
}
else
{
pt1=head;
pt2=head->next;
for(pt=head;pt;pt=pt->next)
i++;
for(j=1;j
{
pt1=head;
pt2=head->next;
for(k=1;k{
if(pt1->num>pt2->num)
{
m=*pt1;
*pt1=*pt2;
*pt2=m;
pt2->next=pt1->next;
pt1->next=pt2;
}
pt1=pt2;
pt2=pt1->next;
}
}
}
print_table_head();
for(pt=head;pt;pt=pt->next)
{
pr