1、使用c语言实现指针和链表实现学成绩管理系统* 文件名称:指针和链表实现2.cpp* 文件标识:* 摘 要:指针和链表实现学生成绩管理系统* 要求有:初始化链表,创建链表,删除指定学号的记录,打印学生成绩信息, 计算学生成绩的总分平均分,插入一条学生记录,退出。*/*头文件*/#include #include #include /*常量*/#define MENU_NUM 10#define N 3/*结构体*/typedef struct s1 char no10 ; /学号由10个字符组成 char name15 ; /学生姓名 float scoreN ; /各门课成绩 float su
2、m ; /总分 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
3、 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; c
4、ase 5: computer(); /计算链表中所有人的总分和平均分 break; case 6: append(); /追加一个数据到链表的尾部 break; case 7: Init(); /释放链表 exit(0); /*函数名:PrintMenu*描 述:显示操作菜单*入口参数:无*出口参数:无*/void PrintMenu( ) int i; char * menu= -, | 基于指针和链表的学生成绩管理系统 |, | 1. 初始化链表 |, | 2. 创建链表 |, | 3. 删除指定学号的记录 |, | 4. 打印学生成绩信息 |, | 5. 计算学生的总分和平均分 |,
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(STUDEN
6、T); /让pt指向新申请的内存空间 InputData(pt); /输入数据,存放到pt所指向的结构数据。注意让pt的next指向NULL if (strcmp(pt-no,)=0) free(pt); /释放pt所指向的内存空间 break; /退出循环 else if (head=NULL) pth=pt; head=pt; /将头指针head和pth指向pt else pth-next=pt; /将pth的next指向pt; pth=pt; /将pth指向pt; /*函数名:print*描 述:打印单链表中所有数据*入口参数:无*出口参数:无*/void print( ) int i=
7、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-score0,p-score1,p-score2, p-sum,p-average); /打印p所指向的结构
8、中的所有数据。注意打印数据间的分隔线 p=p-next; /将p指向p的下一个结构数据 printf(*END*n); /打印表尾/*函数名:Delete*描 述:删除指定学号的记录*入口参数:无*出口参数:无*/void Delete( ) STUDENT *p,*pth; /定义两个指针p,pth char no11; /定义一个整数no(用来存储输入的学号) printf(输入要删除学生的学号:); scanf(%s,no); /用输入语句输入一个学号存储到no中 p=head;pth=head; /将p和pth都指向头指针 if (strcmp(p-no,no)=0) /也就是若头指针
9、指向的数据需要删除 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*描 述:增加学生记录
10、*入口参数:无*出口参数:无*/void append() 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*描 述:输入学生信息
11、*入口参数:指针*出口参数:无*/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; /不要忘记这一步/*函数名:computer*描 述:计算学生总成绩和平均成绩*入口参数:无*出口参数:无*/void computer() STUDENT *p; p=head; for(;p;p=p-next) p-sum=p-score0+p-score1+p-score2; p-average=(p-score0+p-score1+p-score2)/3;
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1