学生成绩管理系统数据结构C语言版源代码.docx
《学生成绩管理系统数据结构C语言版源代码.docx》由会员分享,可在线阅读,更多相关《学生成绩管理系统数据结构C语言版源代码.docx(38页珍藏版)》请在冰豆网上搜索。
学生成绩管理系统数据结构C语言版源代码
只要你有能力去做的事就一定要去做,不要给自己留下任何遗憾,人生最重要的不是所站的位置,而是所朝的方向。
#include
#include
#include
structstudents{
charNum[10];/*字符型学生学号*/
charName[20];/*字符型学生姓名*/
charSex[3];/*字符型学生性别*/
doubleEnglish;/*双精度实型英语成绩*/
doubleJava;/*双精度实型Java成绩*/
doubleSjjg;/*双精度实数据结构*/
doubleSzdl;/*双精度实型数字电路*/
doubleJsj;/*计算机组成原理*/
structstudents*next;/*用与构建连表指向下一结点*/
};
FILE*fp;/*定义全局变量fp*/
voidRevisemenu();/*修改菜单*/
voidSortmenu();/*排序菜单*/
voidmenu();/*主菜单*/
voidsecret();/*安全验证*/
structstudents*Input();/*新建学生信息*/
voidfprint(structstudents*head);/*将信息导入文件可追加*/
voidfprint_(structstudents*head);/*将信息导入文件并覆盖*/
voidBrowse(structstudents*head);/*浏览全部学生信息*/
structstudents*create(structstudents*head
int*n);/*从tushu_list中读取数据构建链表*/
voidFindofNum(structstudents*head);/*按学号查询学生信息*/
voidFindofNname(structstudents*head);/*按姓名查询学生信息*/
voidSortEnglish(structstudents*head);/*按英语成绩排序*/
voidSortJava(structstudents*head);/*按Java成绩排序*/
voidSortSjjg(structstudents*head);/*按数据结构成绩排序*/
voidSortSzdl(structstudents*head);/*按数字逻辑电路成绩排序*/
voidSortJsj(structstudents*head);/*按计算机组成原理成绩排序*/
structstudents*Delete(structstudents*head
charm[15]);/*按学号删除学生成绩信息*/
structstudents*Revise();/*修改学生信息(按编号修改)*/
/*主菜单*/
voidmenu()
{
printf("\n\n");
printf("***************************************************\n");
printf("学生成绩管理系统\n");
printf("---------------------------------------------------\n");
printf("1-添加新同学2-浏览学生信息\n");
printf("3-按学号查询4-按姓名查询\n");
printf("5-按成绩排序6-修改学生信息\n");
printf("7-删除学生信息0-退出系统\n");
printf("---------------------------------------------------\n");
printf("___________________________________________________\n");
}
/*排序菜单*/
voidSortmenu()
{
printf("\n\n");
printf("***************************************************\n");
printf("按成绩排序\n");
printf("1-大学英语2-JAVA编程\n");
printf("3-数据结构4-数字逻辑电路\n");
printf("5-计算机组成原理0-返回上级菜单\n");
printf("***************************************************\n");
}
/*修改菜单*/
voidRevisemenu()
{
printf("\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n");
printf("1--修改学生姓名2--修改学生学号\n");
printf("3--修改学生性别4--修改英语成绩\n");
printf("5--修改JAVA成绩6--修改数据结构\n");
printf("7--修改数字电路8--修改计算计\n");
printf("0--返回上级菜单\n");
printf("\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n");
}
/*安全验证*/
voidsecret()
{
chara[20];
printf("**欢迎来到学生信息管理系统
进入系统前请先进行密码验证---");
printf("");
do{
gets(a);/*输入密码*/
system("cls");/*调用库函数清屏*/
printf("对不起!
您输入的密码有误
请重新输入---");
}while(strcmp(a
"0605")!
=0);/*单一密码"0605"*/
system("cls");
}
/*新建学生信息*/
structstudents*Input()
{
structstudents*p1
*p2
*head;/*建立辅助结点及头结点*/
charName;
intn=0
x;
printf("\n请按对应项输入学生信息以#结束:
\n");
printf("姓名学号性别英语Java数据结构数字电路计算机组成原理\n");
p1=(structstudents*)malloc(sizeof(structstudents));
head=p2=p1;
do{/*使用dowhile语句输入学生信息*/
scanf("%s"
&p1->Name);
if(strcmp(p1->Name
"#")==0)break;/*判断结束符*/
else
scanf("%s%s%lf%lf%lf%lf%lf"
p1->Num
p1->Sex
&p1->English
&p1->Java
&p1->Sjjg
&p1->Szdl
&p1->Jsj);
Name='#';
p1=(structstudents*)malloc(sizeof(structstudents));
p2->next=p1;
p2=p1;
n++;
}while
(1);
p1->next=NULL;
printf("学生信息输入结束!
\n");
getchar();
printf("是否保存学生信息?
(1.是/2.否):
");
scanf("%d"
&x);
if(x==1)
fprint(head);/*调用函数保存至文件*/
else
printf("\n文件没有被保存!
\n");
returnhead;/*返回头指针*/
}
/*将信息导入文件可追加*/
voidfprint(structstudents*head)
{
structstudents*p1;
if((fp=fopen("students_list.txt"
"a"))==NULL)
{
printf("Fileopenerror!
\n");
exit(0);
}
for(p1=head;p1->next!
=NULL;p1=p1->next)/*遍历*/
fprintf(fp
"%s\t%s\t%s\t%.1lf\t%.1lf\t%.1lf\t%.1lf\t%.1lf\n"
p1->Name
p1->Num
p1->Sex
p1->English
p1->Java
p1->Sjjg
p1->Szdl
p1->Jsj);/*将学生信息写入文件*/
fclose(fp);/*关闭文件*/
printf("\n学生信息已成功保存到文件students_list.txt中!
\n");
getchar();
}
/*将信息导入文件并覆盖*/
voidfprint_(structstudents*head)
{
structstudents*p1;
if((fp=fopen("students_list.txt"
"w"))==NULL)
{
printf("Fileopenerror!
\n");
exit(0);
}
for(p1=head;p1!
=NULL;p1=p1->next)/*遍历*/
fprintf(fp
"%s\t%s\t%s\t%.1lf\t%.1lf\t%.1lf\t%.1lf\t%.1lf\n"
p1->Name
p1->Num
p1->Sex
p1->English
p1->Java
p1->Sjjg
p1->Szdl
p1->Jsj);/*将学生信息写入文件*/
fclose(fp);/*关闭文件*/;
getchar();
}
/*浏览全部学生信息*/
voidBrowse(structstudents*head)
{
charNum[10];/*字符型学生学号*/
charName[20];/*字符型学生姓名*/
charSex[3];/*字符型学生性别*/
doubleEnglish;/*双精度实型英语成绩*/
doubleJava;/*双精度实型Java成绩*/
doubleSjjg;/*双精度实数据结构*/
doubleSzdl;/*双精度实型数字电路*/
doubleJsj;/*计算机组成原理*/
if((fp=fopen("students_list.txt"
"a+"))==NULL)
{
printf("Fileopenerror!
\n");
exit(0);
}
printf("-------------------------------------------------------------\n");
printf("姓名学号性别英语Java数据结构数字电路计算机\n");
while(!
feof(fp))/*读取并输出*/{
fscanf(fp
"%s%s%s%lf%lf%lf%lf%lf"
Name
Num
Sex
&English
&Java
&Sjjg
&Szdl
&Jsj);
printf("%s\t%s\t%s\t%.1lf\t%.1lf\t%.1lf\t%.1lf\t%.1lf\n"
Name
Num
Sex
English
Java
Sjjg
Szdl
Jsj);
};
if(fclose(fp))
{
printf("Cannotclosethefile!
\n");
exit(0);
}
}
/*从tushu_list中读取数据构建链表*/
structstudents*create(structstudents*head
int*n)
{
FILE*fp;
structstudents*p
*p1
*p2;
if((fp=fopen("students_list.txt"
"a+"))==NULL)
{
printf("Fileopenerror!
\n");
exit(0);
}
while(!
feof(fp))
{
(*n)++;
p=(structstudents*)malloc(sizeof(structstudents));
fscanf(fp
"%s%s%s%lf%lf%lf%lf%lf"
p->Name
p->Num
p->Sex
&p->English
&p->Java
&p->Sjjg
&p->Szdl
&p->Jsj);
if(head==NULL)
{
head=p;
p1=p;
}
else
{
p1->next=p;
p2=p1;
p1=p;
}
}
p2->next=NULL;
free(p);
(*n)--;
fclose(fp);
returnhead;
}
/*按姓名查询学生信息*/
voidFindofName(structstudents*head)
{
inti=0
n=0;
charb[20];
structstudents*p;
head=create(head
&n);
p=head;
printf("\n请输入要查询的学生姓名:
");
scanf("%s"
b);
while(p!
=NULL){
if(strcmp(p->Name
b)==0){
printf("姓名学号性别英语Java数据结构数字电路计算机\n");
printf("%s\t%s\t%s\t%.1lf\t%.1lf\t%.1lf\t%.1lf\t%.1lf\n"
p->Name
p->Num
p->Sex
p->English
p->Java
p->Sjjg
p->Szdl
p->Jsj);
i++;
}
p=p->next;
}
if(i==0)
printf("\n对不起!
没有找到名为"%s"的学生信息!
\n"
b);
}
/*按学号查询学生信息*/
voidFindofNum(structstudents*head)
{
inti=0
n;
charb[20];
structstudents*p;
head=create(head
&n);
p=head;
printf("\n请输入要查询的学生学号:
");
scanf("%s"
b);
while(p!
=NULL){
if(strcmp(p->Num
b)==0){
printf("姓名学号性别英语Java数据结构数字电路计算机\n");
printf("%s\t%s\t%s\t%.1lf\t%.1lf\t%.1lf\t%.1lf\t%.1lf\n"
p->Name
p->Num
p->Sex
p->English
p->Java
p->Sjjg
p->Szdl
p->Jsj);
i++;
}
p=p->next;
}
if(i==0)
printf("\n对不起!
没有找到学号为"%s"学生信息!
\n"
b);
}
/*按英语成绩排序*/
voidSortEnglish(structstudents*head)
{
structstudents*p
*tail;/*定义中间变量*/
intn;
doubleEnglish;
p=(structstudents*)malloc(sizeof(structstudents));
head=create(head
&n);
printf("姓名学号性别英语Java数据结构数字电路计算机\n");
while(head->next!
=NULL)/*利用选择法排序*/
{
tail=NULL;
p=head;
English=p->English;/*将链表中第一个成绩赋给English*/
while(p!
=NULL)
{
if((p->English)>English)/*比较*/
English=p->English;
tail=p;
p=p->next;
}
tail=NULL;
p=head;
while(p->next!
=NULL)
{
if(p->English==English){
printf("%s\t%s\t%s\t%.1lf\t%.1lf\t%.1lf\t%.1lf\t%.1lf\n"
p->Name
p->Num
p->Sex
p->English
p->Java
p->Sjjg
p->Szdl
p->Jsj);
if(p==head)
head=head->next;
else
tail->next=p->next;
}
tail=p;
p=p->next;
}
if(p->English==English){/*分数相同时无需比较*/
printf("%s\t%s\t%s\t%.1lf\t%.1lf\t%.1lf\t%.1lf\t%.1lf\n"
p->Name
p->Num
p->Sex
p->English
p->Java
p->Sjjg
p->Szdl
p->Jsj);
tail->next=NULL;
}
}
p=head;/*将链表赋给结构体指针*/
printf("%s\t%s\t%s\t%.1lf\t%.1lf\t%.1lf\t%.1lf\t%.1lf\n"
p->Name
p->Num
p->Sex
p->English
p->Java
p->Sjjg
p->Szdl
p->Jsj);/*浏览排序后的信息*/
printf("按英语成绩排序后输出如上(注:
此过程不保存至文件):
\n");
return;
}
/*按JAVA成绩排序*/
voidSortJava(structstudents*head)
{
structstudents*p
*tail;/*定义中间变量*/
intn;
doubleJava;
p=(structstudents*)malloc(sizeof(structstudents));
head=create(head
&n);
printf("姓名学号性别英语Java数据结构数字电路计算机\n");
while(head->next!
=NULL)/*利用选择法排序*/
{
tail=NULL;
p=head;
Java=p->Java;/*将链表中第一个成绩赋给Java*/
while(p!
=NULL)
{
if((p->Java)>Java)/*比较*/
Java=p->Java;
tail=p;
p=p->next;
}
tail=NULL;
p=head;
while(p->next!
=NULL)
{
if(p->Java==Java){
printf("%s\t%s\t%s\t%.1lf\t%.1lf\t%.1lf\t%.1lf\t%.1lf\n"
p->Name
p->Num
p->Sex
p->English
p->Java
p->Sjjg
p->Szdl
p->Jsj);
if(p==head)
head=head->next;
else
tail->next=p->next;
}
tail=p;
p=p->next;
}
if(p->Java==Java){/*成绩相同时无需比较*/
printf("%s\t%s\t%s\t%.1lf\t%.1lf\t%.1lf\t%.1lf\t%.1lf\n"
p->Name
p->Num
p->Sex
p->English
p->Java
p->Sjjg
p->Szdl
p->Jsj);
tail->next=NULL;
}
}
p=head;/*将链表赋给结构体指针*/
printf("%s\t%s\t%s\t%.1lf\t%.1lf\t%.1lf\t%.1lf\t%.1lf\n"
p->Name
p->Num
p->Sex
p->English
p->Java
p->Sjjg
p->Szdl
p->Jsj);/*浏览排序后的信息*/
printf("按Java成绩排序后输出如上(注:
此过程不保存至文件):
\n");
return;
}
/*按数据结构排序*/
voidSortSjjg(structstudents*head)
{
structstudents*p
*tail;/*定义中间变量*/
intn;
doubleSjjg;
p=(structstudents*)malloc(sizeof(structstudents));
head=create(head
&n);
printf("姓名学号性别英语Java数据结构数字电路计算机\n");
while(head->next!
=NULL)/*利用选择法排序*/
{
tail=NULL;
p=head;
Sjjg=p->Sjjg;/*将链表中第一个成绩赋给Sjjg*/
while(p!
=NULL)
{
if((p->Sjjg)>Sjjg)/*比较*/
Sjjg=p->Sjjg;
tail=p;
p=p->next;
}
tail=NULL;
p=head;
while(p->next!
=NULL)
{
if(p->Sjjg==Sjjg){
printf("%s\t%s\t%s\t%.1lf\t%.1lf\t%.1lf\t%.1lf\t%.1lf\n"