学生成绩管理系统数据结构C语言版源代码.docx
- 文档编号:20116951
- 上传时间:2023-04-25
- 格式:DOCX
- 页数:39
- 大小:20.41KB
学生成绩管理系统数据结构C语言版源代码.docx
《学生成绩管理系统数据结构C语言版源代码.docx》由会员分享,可在线阅读,更多相关《学生成绩管理系统数据结构C语言版源代码.docx(39页珍藏版)》请在冰豆网上搜索。
学生成绩管理系统数据结构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"
p->Name
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 学生 成绩管理系统 数据结构 语言版 源代码
![提示](https://static.bdocx.com/images/bang_tan.gif)