使用c语言实现指针和链表实现学成绩管理系统.doc_第1页
使用c语言实现指针和链表实现学成绩管理系统.doc_第2页
使用c语言实现指针和链表实现学成绩管理系统.doc_第3页
使用c语言实现指针和链表实现学成绩管理系统.doc_第4页
使用c语言实现指针和链表实现学成绩管理系统.doc_第5页
已阅读5页,还剩5页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

* 文件名称:指针和链表实现2.cpp* 文件标识:* 摘 要:指针和链表实现学生成绩管理系统* 要求有:初始化链表,创建链表,删除指定学号的记录,打印学生成绩信息, 计算学生成绩的总分平均分,插入一条学生记录,退出。*/*头文件*/#include #include #include /*常量*/#define MENU_NUM 10#define N 3/*结构体*/typedef struct s1char no10 ; /学号由10个字符组成char name15 ; /学生姓名float scoreN ; /各门课成绩float sum ; /总分float average ; /平均分struct s1 *next ; /指向后继结点的指针STUDENT; /定义结构体类型/*全局变量*/struct s1 * head=NULL; /链表头结点/*函数声明*/void InputData( STUDENT * ptr ); /录入信息void PrintMenu( ); /显示菜单int MenuSelect( ); /选择菜单项void Init( ); /初始化void create( ); /创建链表void print( ) ; /打印链表数据void Delete( ); /删除指定学号的记录数据void append(); /追加一个数据到链表尾部void computer(); /计算链表中所有人的总分和平均分/*主函数*/void main()int key;while(1) key=MenuSelect();switch(key)case 1:Init(); /初试化链表。也就是若链表不为空则释放链表中所有数据,将head置为空(NULL)break;case 2:create(); /创建链表,输入数据break;case 3:Delete(); /删除一个指定学号的记录数据break;case 4:print(); /打印链表中所有数据break;case 5:computer(); /计算链表中所有人的总分和平均分break;case 6:append(); /追加一个数据到链表的尾部break;case 7:Init(); /释放链表exit(0);/*函数名:PrintMenu*描 述:显示操作菜单*入口参数:无*出口参数:无*/void PrintMenu( )int i;char * menu=-,| 基于指针和链表的学生成绩管理系统 |,| 1. 初始化链表 |,| 2. 创建链表 |,| 3. 删除指定学号的记录 |,| 4. 打印学生成绩信息 |,| 5. 计算学生的总分和平均分 |,| 6. 插入一条学生记录 |,| 7. 退出 |,-,;printf(nn);for (i=0;inext; /ptr指向下一个结构数据free(p); /释放p所指向的结构数据的内存p=ptr; /将p指向ptr所指向的数据head=NULL; /将head指向NULL/*函数名:create*描 述:创建单链表*入口参数:无*出口参数:无*/void create( ) STUDENT *pt, *pth=NULL; /定义两个指针变量:pt指向即将申请新的数据内存,pth指向当前数据while(1) pt=(STUDENT *)malloc(sizeof(STUDENT); /让pt指向新申请的内存空间InputData(pt); /输入数据,存放到pt所指向的结构数据。注意让pt的next指向NULLif (strcmp(pt-no,)=0)free(pt); /释放pt所指向的内存空间break; /退出循环else if (head=NULL)pth=pt;head=pt; /将头指针head和pth指向ptelse pth-next=pt; /将pth的next指向pt;pth=pt; /将pth指向pt;/*函数名:print*描 述:打印单链表中所有数据*入口参数:无*出口参数:无*/void print( ) int i=0;STUDENT *p; /第一个指针pp=head; /将p指向headprintf(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-score0,p-score1,p-score2,p-sum,p-average); /打印p所指向的结构中的所有数据。注意打印数据间的分隔线 p=p-next; /将p指向p的下一个结构数据printf(*END*n); /打印表尾/*函数名:Delete*描 述:删除指定学号的记录*入口参数:无*出口参数:无*/void Delete( ) STUDENT *p,*pth; /定义两个指针p,pthchar no11; /定义一个整数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所指向的数据 elsep=p-next; /将p指向p的下一个数据while ( p!=NULL)if (strcmp(p-no,no)=0) /找到了要删除的数据pth-next=p-next; /将pth的next指向p的nextfree(p); /释放pbreak; /退出循环elsepth=pth-next; /将pth指向pth的next 或 将pth指向pp=p-next; /将p指向p的next/*函数名:append*描 述:增加学生记录*入口参数:无*出口参数:无*/void append()STUDENT *p,*pth; /定义两个指针变量p,pthpth=head; /将pth指向headwhile ( pth-next!=NULL)pth=pth-next; /ptr指向ptr的nextp=(STUDENT *)malloc(sizeof(STUDENT); /将p指向新申请的内存空间InputData(p);p-next=NULL; /数据数据存储到p所指向的内存空间,注意将p的next置为NULLpth-next=p; /将ptr的next指向p/*函数名:InputData*描 述:输入学生信息*入口参数:指针*出口参数:无*/void InputData( STUDENT *ptr ) int i;printf(输入学号:);scanf(%s,ptr-no);if (strcmp(ptr-no,)=0 ) return;printf(输入姓名:);scanf(%s,ptr-name);for(i=0;iscorei);ptr-sum=0;ptr-average=0;ptr-next=NULL; /不要忘记这一步/*函数名:c

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论