使用c语言实现指针和链表实现学成绩管理系统讲解学习.docx
- 文档编号:24268456
- 上传时间:2023-05-25
- 格式:DOCX
- 页数:14
- 大小:18.45KB
使用c语言实现指针和链表实现学成绩管理系统讲解学习.docx
《使用c语言实现指针和链表实现学成绩管理系统讲解学习.docx》由会员分享,可在线阅读,更多相关《使用c语言实现指针和链表实现学成绩管理系统讲解学习.docx(14页珍藏版)》请在冰豆网上搜索。
使用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;//不要忘记这一步 } 2、Google网站www。 people。 com。 cn 2、传统文化对大学生饰品消费的影响 (2)文化优势 /***************************************************************** *函数名: computer 可见“体验化消费”广受大学生的欢迎、喜欢,这是我们创业项目是否成功的关键,必须引起足够的注意。 * *描述: 计算学生总成绩和平均成绩 beadorks公司成功地创造了这样一种气氛: 商店和顾客不再是单纯的买卖关系,营业员只是起着参谋的作用,顾客成为商品或者说是作品的作参与者,营业员和顾客互相交流切磋,成为一个共同的创作体* *入口参数: 无 “碧芝”最吸引人的是那些小巧的珠子、亮片等,都是平日里不常见的。 店长梁小姐介绍,店内的饰珠有威尼斯印第安的玻璃珠、秘鲁的陶珠、奥利的施华洛世奇水晶、法国的仿金片、日本的梦幻珠等,五彩缤纷,流光异彩。 按照饰珠的质地可分为玻璃、骨质、角质、陶制、水晶、仿金、木制等种类,其造型更是千姿百态: 珠型、圆柱型、动物造型、多边形、图腾形象等,美不胜收。 全部都是进口的,从几毛钱一个到几十元一个的珠子,做一个成品饰物大约需要几十元,当然,还要决定于你的心意。 “碧芝”提倡自己制作: 端个特制的盘子到柜台前,按自己的构思选取喜爱的饰珠和配件,再把它们串成成品。 这里的饰珠和配件的价格随质地而各有同,所用的线绳价格从几元到一二十元不等,如果让店员帮忙串制,还要收取10%~20%的手工费。 * (2)东西全*出口参数: 无 ******************************************************************/ voidcomputer() “碧芝自制饰品店”拥有丰富的不可替代的异国风采和吸引人的魅力,理由是如此的简单: 世界是每一个国家和民族都有自己的饰品文化,将其汇集进行再组合可以无穷繁衍。 { (1)位置的优越性STUDENT*p; p=head; for(;p;p=p->next) { 与此同时,上海市工商行政管理局也对大学生创业采取了政策倾斜: 凡高校毕业生从事个体经营的,自批准经营日起,1年内免交登记注册费、个体户管理费、集贸市场管理费、经济合同鉴证费、经济合同示范文本工本费等,但此项优惠不适用于建筑、娱乐和广告等行业。 p->sum=p->score[0]+p->score[1]+p->score[2]; p->average=(p->score[0]+p->score[1]+p->score[2])/3; } }
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 使用 语言 实现 指针 成绩管理系统 讲解 学习