使用c语言实现指针和链表实现学成绩管理系统Word文件下载.docx
- 文档编号:20426042
- 上传时间:2023-01-22
- 格式:DOCX
- 页数:11
- 大小:16.99KB
使用c语言实现指针和链表实现学成绩管理系统Word文件下载.docx
《使用c语言实现指针和链表实现学成绩管理系统Word文件下载.docx》由会员分享,可在线阅读,更多相关《使用c语言实现指针和链表实现学成绩管理系统Word文件下载.docx(11页珍藏版)》请在冰豆网上搜索。
floataverage;
//平均分
structs1*next;
//指向后继结点的指针
}STUDENT;
//定义结构体类型
/********************************全局变量*************************/
structs1*head=NULL;
//链表头结点
/********************************函数声明*************************/
voidInputData(STUDENT*ptr);
//录入信息
voidPrintMenu();
//显示菜单
intMenuSelect();
//选择菜单项
voidInit();
//初始化
voidcreate();
//创建链表
voidprint();
//打印链表数据
voidDelete();
//删除指定学号的记录数据
voidappend();
//追加一个数据到链表尾部
voidcomputer();
//计算链表中所有人的总分和平均分
/***********************************主函数********************************/
voidmain()
intkey;
while
(1){
key=MenuSelect();
switch(key)
{
case1:
Init();
//初试化链表。
也就是若链表不为空则释放链表中所有数据,将head置为空(NULL)
break;
case2:
create();
//创建链表,输入数据
case3:
Delete();
//删除一个指定学号的记录数据
case4:
print();
//打印链表中所有数据
case5:
computer();
case6:
append();
//追加一个数据到链表的尾部
case7:
//释放链表
exit(0);
}
}
}
/*****************************************************************
*函数名:
PrintMenu
*描述:
显示操作菜单*
*入口参数:
无
*出口参数:
******************************************************************/
voidPrintMenu()
inti;
char*menu[]={
"
-----------------------------------------------"
|基于指针和链表的学生成绩管理系统|"
|1.初始化链表|"
|2.创建链表|"
|3.删除指定学号的记录|"
|4.打印学生成绩信息|"
|5.计算学生的总分和平均分|"
|6.插入一条学生记录|"
|7.退出|"
};
printf("
\n\n"
);
for(i=0;
i<
MENU_NUM;
i++)
printf("
%s\n"
menu[i]);
\n输入要进行的操作(1-7):
"
MenuSelect
选择菜单选项,返回选择的选项
整型数据
intMenuSelect()
PrintMenu();
scanf("
%d"
&
key);
returnkey;
Init
初始化单链表。
也就是释放链表中的所有数据
voidInit()
STUDENT*p,*ptr;
//定义两个临时指针变量p,ptr
p=head;
ptr=head;
//将两个临时变量指向头指针head;
while(ptr!
=NULL)
{
ptr=ptr->
next;
//ptr指向下一个结构数据
free(p);
//释放p所指向的结构数据的内存
p=ptr;
//将p指向ptr所指向的数据
head=NULL;
//将head指向NULL
create
创建单链表
voidcreate()
STUDENT*pt,*pth=NULL;
//定义两个指针变量:
pt指向即将申请新的数据内存,pth指向当前数据
while
(1)
pt=(STUDENT*)malloc(sizeof(STUDENT));
//让pt指向新申请的内存空间
InputData(pt);
//输入数据,存放到pt所指向的结构数据。
注意让pt的next指向NULL
if(strcmp(pt->
no,"
@"
)==0)
free(pt);
//释放pt所指向的内存空间
break;
//退出循环
elseif(head==NULL)
pth=pt;
head=pt;
//将头指针head和pth指向pt
else
pth->
next=pt;
//将pth的next指向pt;
//将pth指向pt;
打印单链表中所有数据
voidprint()
{
inti=0;
STUDENT*p;
//第一个指针p
//将p指向head
\n"
******************************STUDENT******************************\n"
|rec|学号|姓名|成绩1|成绩2|成绩3|总成绩|平均成绩|\n"
|---|----------|------------|------|------|------|------|---------|\n"
//打印表头
while(p!
|%3d|%10s|%-12s|%6.1f|%6.1f|%6.1f|%6.2f|%9.1f|\n"
++i,p->
no,p->
name,p->
score[0],p->
score[1],p->
score[2],
p->
sum,p->
average);
//打印p所指向的结构中的所有数据。
注意打印数据间的分隔线
p=p->
//将p指向p的下一个结构数据
********************************END********************************\n"
//打印表尾
Delete
删除指定学号的记录
voidDelete()
STUDENT*p,*pth;
//定义两个指针p,pth
charno[11];
//定义一个整数no(用来存储输入的学号)
输入要删除学生的学号:
%s"
no);
//用输入语句输入一个学号存储到no中
pth=head;
//将p和pth都指向头指针
if(strcmp(p->
no,no)==0)//也就是若头指针指向的数据需要删除
head=head->
//将head指针指向head的下一个数据;
//释放p所指向的数据
else
//将p指向p的下一个数据
while(p!
if(strcmp(p->
no,no)==0)//找到了要删除的数据
{
pth->
next=p->
//将pth的next指向p的next
free(p);
//释放p
}
else
pth=pth->
//将pth指向pth的next或将pth指向p
p=p->
//将p指向p的next
append
增加学生记录
voidappend()
//定义两个指针变量p,pth
pth=head;
//将pth指向head
while(pth->
next!
pth=pth->
//ptr指向ptr的next
p=(STUDENT*)malloc(sizeof(STUDENT));
//将p指向新申请的内存空间
InputData(p);
p->
next=NULL;
//数据数据存储到p所指向的内存空间,注意将p的next置为NULL
pth->
next=p;
//将ptr的next指向p
InputData
输入学生信息
指针
voidInputData(STUDENT*ptr)
输入学号:
ptr->
no);
if(strcmp(ptr->
)==0)
return;
输入姓名:
name);
for(i=0;
3;
输入成绩:
scanf("
%f"
ptr->
score[i]);
ptr->
sum=0;
average=0;
//不要忘记这一步
computer
计算学生总成绩和平均成绩
voidcomputer()
for(;
p;
p=p->
next)
p->
sum=p->
score[0]+p->
score[1]+p->
score[2];
average=(p->
score[2])/3;
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 使用 语言 实现 指针 成绩管理系统