C语言学生系统增删排序查功能Word格式文档下载.docx
- 文档编号:17591209
- 上传时间:2022-12-07
- 格式:DOCX
- 页数:14
- 大小:26.03KB
C语言学生系统增删排序查功能Word格式文档下载.docx
《C语言学生系统增删排序查功能Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《C语言学生系统增删排序查功能Word格式文档下载.docx(14页珍藏版)》请在冰豆网上搜索。
2、数据定义为:
structstudent
{
charname[20];
charnum[20];
intmath;
//高等数学
intEnglish_rw;
//大学英语读写
intEnglish_ls;
//大学英语听说
intdl;
//计算机导论
intpdb;
//程序设计基础
structstudent*next;
};
3、建立链表
函数:
node*input(node*head)
功能:
建立链表,向链表中输入信息
4、显示链表
voidoutput(node*head)
显示链表中的内容
5、添加节点
node*insert(node*head)
向链表中插入一条记录
6、删除节点
node*del(node*head)
按照学号方式删除一条记录
7、查找节点
node*search(node*head)
按照学号的方式对学生信息进行查找,并将该信息输出
8、节点排序
node*sort(node*head)
按照总分的方式对链表中的节点进行排序
9、保存到文件
node*save(node*head)
将链表中各记录的内容保存到指定文件中
.源程序
#include<
stdio.h>
#include<
stdlib.h>
string.h>
#defineN3
#defineMAXSIZE1000
structstudent*next;
voidmenuname();
typedefstructstudentnode;
voidsa(int*a,int*b)
{
inttemp;
temp=*a;
*a=*b;
*b=temp;
}
voidmenuname()/*定义菜单函数*/
printf("
\n*****************************功能菜单******************************\n\n"
);
\n输入学生信息--1\n"
\n输出学生信息--2\n"
\n添加新的学生--3\n"
\n删除某学生信息--4\n"
\n查找某学生信息--5\n"
\n将学生按总分排序--6\n"
\n将学生信息保存到文件中--7\n"
\n退出--0\n"
\n\n"
}
node*input(node*head)//输入学生信息
{
node*p,*pri;
//定义一个指向链表结构的指针变量
inti=0;
/*定义一个整形变量i并赋值0*/
\n\n———————————————请输入学生成绩信息:
———————————————\n\n"
p=(node*)malloc(sizeof(node));
/*分配存储空间,生成头结点,malloc返回值赋给p*/
if(p!
=NULL)
姓名:
"
getchar();
scanf("
%s"
p->
name);
学号:
num);
高等数学:
%d"
&
(p->
math));
大学英语读写:
English_rw));
大学英语听说:
English_ls));
计算机导论:
dl));
程序设计基础:
pdb));
p->
next=NULL;
head=p;
pri=p;
printf("
\n"
for(inti=0;
i<
N-1;
i++)
pri->
next=p;
pri=p;
next=NULL;
\n\n"
添加信息结束!
按2键可查看学生信息!
returnhead;
else
outofmemory!
!
\n"
exit(-1);
voidoutput(node*head)//输出学生信息
node*p;
/*定义一个指向链表结构的指针变量*/
p=head;
/*将head的值赋给p,使p指向head所指的结点*/
if(p==NULL)/*如果头指针为空,则链表为空*/
\n学生信息为空!
请先输入或添加学生信息!
\n\n---------------学生成绩信息--------------\n\n"
while(p!
=NULL)/*按链表顺序输出各结点数据域信息*/
{
printf("
姓名学号高等数学大学英语读写大学英语听说计算机导论程序设计基础\n\n"
printf("
%s\t%s\t%d\t%6d\t%8d\t%7d\t%6d\n"
name,p->
num,p->
math,p->
English_rw,p->
English_ls,p->
dl,p->
pdb);
p=p->
next;
/*将p->
next的值赋给p,使p指向下一结点*/
}
node*insert(node*head)/*定义插入函数*/
/*分配存储空间,生成新结点,malloc返回值赋给p*/
\n\n——————————请输入新添加的学生信息————————————\n\n"
姓名:
//输入新结点信息
学号:
高等数学:
大学英语读写:
大学英语听说:
计算机导论:
程序设计基础:
next=head;
/*新结点插入头结点之前*/
/*记录新的头指针*/
添加学生信息成功,按2键可查看!
\n\n"
/*返回头指针*/
node*del(node*head)/*定义删除函数*/
node*p1,*p2;
/*定义两个指向链表结构的指针变量*/
char*num;
/*定义一个指向字符的指针变量name*/
num=(char*)malloc(sizeof(char));
/*分配字符存储空间,malloc返回值赋给name*/
if(head==NULL)/*如果头指针为空,则链表为空*/
\n成绩系统无信息!
returnNULL;
/*返回空指针*/
请输入要删除的学生学号:
scanf("
num);
p1=head;
/*将head的值赋给p1,使p1指向head所指的结点*/
while(strcmp(p1->
num,num)!
=0&
&
p1->
next!
=NULL)/*如果p1->
num不是要删除成员学号并且后面还有结点*/
{
p2=p1;
/*将p1的值赋给p2,使p2指向p1所指,记录p1*/
p1=p1->
/*p1后移一个结点*/
}
if(strcmp(p1->
num,num)==0)/*找到要删除的结点(学号)*/
————————您要删除的学生信息为:
————————\n\n"
/*输出要删除结点数据域信息*/
姓名学号高等数学大学英语读写大学英语听说计算机导论程序设计基础\n"
%s\t%s\t%d\t%d\t%3d\t%5d\t%7d\n"
p1->
name,p1->
num,p1->
math,p1->
English_rw,p1->
English_ls,p1->
dl,p1->
if(p1==head)/*如果要删除结点是头结点*/
head=p1->
/*则把第2个结点地址赋给head*/
else
p2->
next=p1->
/*否则将下一个结点地址赋给前一结点地址*/
\n删除成功!
要查看删除后的学生信息请按2!
free(p1);
/*释放p1所指空间*/
else
\n对不起,删除失败!
!
node*search(node*head)/*定义查找函数*/
/*定义一个指向链表结构的指针变量p*/
/*定义一个指向字符的字符指针变量name*/
/*将head的值赋给p,使p指向头结点*/
\n该学生信息系统为空!
\n请输入要查找的学生学号:
scanf("
while(p!
=NULL)/*p非空*/
if(strcmp(p->
num,num)==0)/*找到要查找的结点(姓名)*/
\n——————————您要查找的学生信息为————————\n\n"
/*输出要查找结点数据域信息*/
returnhead;
/*p后移一个结点*/
}
if(p==NULL)/*p为空*/
\n对不起,查无此人!
returnhead;
node*sort(node*head)/*定义排序函数*/
intscore1,score2;
charname1[20],num1[20];
node*p,*q;
/*定义三个指向链表结构的指针变量和一个结构体变量t*/
for(p=head;
p;
p=p->
next)/*冒泡排序*/
score1=p->
math+p->
English_rw+p->
English_ls+p->
dl+p->
pdb;
for(q=p->
q;
q=q->
next)
score2=q->
math+q->
English_rw+q->
English_ls+q->
dl+q->
if(score1<
score2)
{
strcpy(name1,p->
strcpy(p->
name,q->
strcpy(q->
name,name1);
strcpy(num1,p->
num,q->
num,num1);
sa(&
(q->
math),&
English_rw),&
sa(&
English_ls),&
dl),&
pdb),&
}
\n\n已按学号排序!
要查看按学号的顺序重新排序后学生管理系统的信息请按2!
}
node*save(node*head)/*定义保存文件函数*/
node*p=head;
/*定义一个指向SNODE结构体的指针p,并赋给头指针的值*/
FILE*fp;
/*定义文件指针fp*/
if((fp=fopen("
成绩管理.txt"
"
w"
))==NULL)/*以写的方式打开record.txt文件且其为空*/
{printf("
Cannotopenthefile!
exit(0);
/*退出*/
if(p==NULL)
\n该学生管理系统为空!
没有学生信息!
while(p)/*结点数据域信息顺序写入文件*/
fprintf(fp,"
姓名:
%s学号:
%s高等数学:
%d大学英语读写:
%d大学英语听说:
%d计算机导论:
%d程序设计基础:
%d\n\n"
English_rw,p->
English_ls,p->
pdb);
/**/
p=p->
\n已将学生的信息保存到文件中!
fclose(fp);
/*关闭文件*/
voidmain()
intkey;
structstudent*head=NULL;
while(key!
=0)
menuname();
请输入相应的功能键:
key);
switch(key)
case1:
head=input(head);
/*调用输入函数返回值赋给head*/
break;
case2:
output(head);
/*调用输入函数*/
case3:
head=insert(head);
/*调用插入函数返回值赋给head*/
case4:
head=del(head);
/*调用删除函数返回值赋给head*/
case5:
head=search(head);
/*调用查找函数返回值赋给head*/
case6:
head=sort(head);
/*调用排序函数返回值赋给head*/
case7:
head=save(head);
/*调用保存文件函数返回值赋给head*/
case0:
Thanks!
return;
/*返回*/
}}
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言 学生 系统 增删 排序 功能