使用c语言实现指针和链表实现学成绩管理系统.docx

上传人:b****6 文档编号:7317710 上传时间:2023-01-22 格式:DOCX 页数:11 大小:16.99KB
下载 相关 举报
使用c语言实现指针和链表实现学成绩管理系统.docx_第1页
第1页 / 共11页
使用c语言实现指针和链表实现学成绩管理系统.docx_第2页
第2页 / 共11页
使用c语言实现指针和链表实现学成绩管理系统.docx_第3页
第3页 / 共11页
使用c语言实现指针和链表实现学成绩管理系统.docx_第4页
第4页 / 共11页
使用c语言实现指针和链表实现学成绩管理系统.docx_第5页
第5页 / 共11页
点击查看更多>>
下载资源
资源描述

使用c语言实现指针和链表实现学成绩管理系统.docx

《使用c语言实现指针和链表实现学成绩管理系统.docx》由会员分享,可在线阅读,更多相关《使用c语言实现指针和链表实现学成绩管理系统.docx(11页珍藏版)》请在冰豆网上搜索。

使用c语言实现指针和链表实现学成绩管理系统.docx

使用c语言实现指针和链表实现学成绩管理系统

*文件名称:

指针和链表实现2.cpp

*文件标识:

*摘要:

指针和链表实现学生成绩管理系统

*

*要求有:

初始化链表,创建链表,删除指定学号的记录,打印学生成绩信息,

计算学生成绩的总分平均分,插入一条学生记录,退出。

*/

/***************************头文件*********************************/

#include

#include

#include

/***************************常量***********************************/

#defineMENU_NUM10

#defineN3

/****************************结构体********************************/

typedefstructs1

{

charno[10];//学号由10个字符组成

charname[15];//学生姓名

floatscore[N];//各门课成绩

floatsum;//总分

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();//创建链表,输入数据

break;

case3:

Delete();//删除一个指定学号的记录数据

break;

case4:

print();//打印链表中所有数据

break;

case5:

computer();//计算链表中所有人的总分和平均分

break;

case6:

append();//追加一个数据到链表的尾部

break;

case7:

Init();//释放链表

exit(0);

}

}

}

/*****************************************************************

*函数名:

PrintMenu

*

*描述:

显示操作菜单*

*

*入口参数:

*

*出口参数:

******************************************************************/

voidPrintMenu()

{

inti;

char*menu[]={

"-----------------------------------------------",

"|基于指针和链表的学生成绩管理系统|",

"|1.初始化链表|",

"|2.创建链表|",

"|3.删除指定学号的记录|",

"|4.打印学生成绩信息|",

"|5.计算学生的总分和平均分|",

"|6.插入一条学生记录|",

"|7.退出|",

"-----------------------------------------------",

};

printf("\n\n");

for(i=0;i

printf("%s\n",menu[i]);

printf("\n输入要进行的操作(1-7):

");

}

/*****************************************************************

*函数名:

MenuSelect

*

*描述:

选择菜单选项,返回选择的选项

*

*入口参数:

*

*出口参数:

整型数据

******************************************************************/

intMenuSelect()

{

intkey;

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;//将pth指向pt;

}

}

}

/*****************************************************************

*函数名:

print

*

*描述:

打印单链表中所有数据

*

*入口参数:

*

*出口参数:

******************************************************************/

voidprint()

{

inti=0;

STUDENT*p;//第一个指针p

p=head;//将p指向head

printf("\n");

printf("******************************STUDENT******************************\n");

printf("|rec|学号|姓名|成绩1|成绩2|成绩3|总成绩|平均成绩|\n");

printf("|---|----------|------------|------|------|------|------|---------|\n");

//打印表头

while(p!

=NULL)

{

printf("|%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->next;//将p指向p的下一个结构数据

}

printf("********************************END********************************\n");

//打印表尾

}

/*****************************************************************

*函数名:

Delete

*

*描述:

删除指定学号的记录

*

*入口参数:

*出口参数:

******************************************************************/

voidDelete()

{

STUDENT*p,*pth;//定义两个指针p,pth

charno[11];//定义一个整数no(用来存储输入的学号)

printf("输入要删除学生的学号:

");

scanf("%s",no);//用输入语句输入一个学号存储到no中

p=head;pth=head;//将p和pth都指向头指针

if(strcmp(p->no,no)==0)//也就是若头指针指向的数据需要删除

{

head=head->next;//将head指针指向head的下一个数据;

free(p);//释放p所指向的数据

}

else

{

p=p->next;//将p指向p的下一个数据

while(p!

=NULL)

{

if(strcmp(p->no,no)==0)//找到了要删除的数据

{

pth->next=p->next;//将pth的next指向p的next

free(p);//释放p

break;//退出循环

}

else

{

pth=pth->next;//将pth指向pth的next或将pth指向p

p=p->next;//将p指向p的next

}

}

}

}

/*****************************************************************

*函数名:

append

*

*描述:

增加学生记录

*

*入口参数:

*

*出口参数:

******************************************************************/

voidappend()

{

STUDENT*p,*pth;//定义两个指针变量p,pth

pth=head;//将pth指向head

while(pth->next!

=NULL)

{

pth=pth->next;//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)

{

inti;

printf("输入学号:

");

scanf("%s",ptr->no);

if(strcmp(ptr->no,"@")==0)

return;

printf("输入姓名:

");

scanf("%s",ptr->name);

for(i=0;i<3;i++)

{

printf("输入成绩:

");

scanf("%f",&ptr->score[i]);

}

ptr->sum=0;

ptr->average=0;

ptr->next=NULL;//不要忘记这一步

}

/*****************************************************************

*函数名:

computer

*

*描述:

计算学生总成绩和平均成绩

*

*入口参数:

*

*出口参数:

******************************************************************/

voidcomputer()

{

STUDENT*p;

p=head;

for(;p;p=p->next)

{

p->sum=p->score[0]+p->score[1]+p->score[2];

p->average=(p->score[0]+p->score[1]+p->score[2])/3;

}

}

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 小学教育 > 语文

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1