学生信息统计(链表)
实验目的 :
1 、掌握线性表的定义;
2 、掌握线性表的基本操作,如建立、查找、插入和删除等。
实验内容:
定义一个包含学生信息(学号,姓名,成绩)的的 顺序表和链表,使其具有如下功能:
(1) 根据指定学生个数,逐个输入学生信息;
(2) 逐个显示学生表中所有学生的相关信息;
(3) 根据姓名进行查找,返回此学生的学号和成绩;
(4) 根据指定的位置可返回相应的学生信息(学号,姓名,成绩);
(5) 给定一个学生信息,插入到表中指定的位置;
(6) 删除指定位置的学生记录;
(7) 统计表中学生个数。
参考信息 :
Definition of structure student :
typedef struct {
char no[8]; //8 位学号
char name[20]; // 姓名
int price; // 成绩
}Student;
Definition of sequential list:
typedef struct {
Student *elem; // 指向数据元素的基地址
int length; // 线性表的当前长度
}SqList ;
Definition of linked list :
typedef struct LNode{
Student data; // 数据域
struct LNode *next; // 指针域
}LNode,*LinkList;
实验要求 :
(1) 程序要添加适当的注释,程序的书写要采用 缩进格式 。
(2) 程序要具在一定的 健壮性,即当输入数据非法时, 程序也能适当地做出反应,如 插入删除时指定的位置不对 等等。
(3) 程序要做到 界面友好,在程序运行时用户可以根据相应的提示信息进行操作。
(4) 根据实验报告模板详细书写实验报告,在实验报告中给出链表 根据姓名进行查找的算法和插入算法的流程图 。
代码如下:
2016.9.17 11:55第一次上传。
2016.9.17 15:13修改:增加了空链表删除操作的特判。
2016.9.18 18:34修改:增加多个操作的模块化处理(子函数),增加可读性。
2016.9.19 17:01修改:删除多余的初始化过程。
#include <stdio.h>
#include <string.h>
#include <malloc.h>
#include <stdlib.h>
#define CLR(a,b) memset(a,b,sizeof(a)) //初始化
#define printOK printf("****OK****\n")
#define OK 1
#define FALL 0
#define ERROR -2
typedef struct Lnode
{char num[20]; //学号 char name[20]; //姓名int grade; //成绩struct Lnode *next; //指针域
}Lnode,*Linklist;
int ant = -1; //学生人数 void Welcome()
{puts("");puts("");puts("\t\t\t\t********欢迎使用学生成绩管理系统********");puts("\t\t\t\t* 1.输入学生人数与信息 *");puts("\t\t\t\t* 2.显示学生信息 *");puts("\t\t\t\t* 3.根据姓名查找学生信息 *");puts("\t\t\t\t* 4.显示指定学生的信息 *");puts("\t\t\t\t* 5.在指定位置插入学生信息 *");puts("\t\t\t\t* 6.删除指定位置的学生信息 *");puts("\t\t\t\t* 7.统计学生个数 *");puts("\t\t\t\t* 8.退出程序 *");puts("\t\t\t\t* \t\t----制作by——王迎港 *");puts("\t\t\t\t****************************************");puts("");puts("");
}void LnodeInit(Linklist &p) //链节初始化
{p = (Lnode *)malloc(sizeof(Lnode));p->next = NULL;
}void LnodeInsert(int pos,Linklist L,Linklist p) //在第pos个节点后插入p链节
{int i = 0;Linklist t;t = L;while (i != pos){t = t->next;i++;}p->next = t->next;t->next = p;
}void Query(int pos,Linklist L,Linklist &p) //查询第pos位置的链节赋值给p
{int i = 1;p = L->next;while (i != pos){p = p->next;i++;}
}int SearchName(char cmp[],Lnode L,Linklist &p) //匹配名字,成功返回OK,失败返回FALL,赋值给p
{p = L.next;while (p != NULL){if (strcmp(p->name,cmp) == 0)return OK;p = p->next;}return FALL;
}void LnodeDelete(int pos,Linklist t) //删除L中第pos个节点
{int i = 0;while (i != pos-1){t = t->next;i++;}Linklist q;q = t->next;t->next = t->next->next;free(q);
}int main()
{Welcome();int op,i;int x,pos;Lnode L;L.next = NULL;Linklist p;while (1){printf ("请输入您的选择:");scanf ("%d",&op);if (op == 8)break;if (op < 1 || op > 8){puts("对不起,输入非法!");puts("");continue;}if ((op != 1 && op != 8) && ant == -1) //检查是否录入了学生信息 {puts("对不起,您还未输入学生信息,无法进行操作!");puts("");continue;}switch (op){case 1:if (ant != -1){printf ("您已经输入过学生信息!\n\n");break;}printf ("请输入学生人数:");scanf ("%d",&ant);if (ant <= 0){printf ("输入非法,请重新输入!\n\n");continue;}for (i = 1 ; i <= ant ; i++){LnodeInit(p);printf ("请输入第%d个学生的学号(8位): ",i);scanf ("%s",p->num);printf ("请输入第%d个学生的姓名: ",i);scanf ("%s",p->name);printf ("请输入第%d个学生的成绩: ",i);scanf ("%d",&p->grade);LnodeInsert(i-1,&L,p);printOK;}puts("");break;case 2:printf ("学号\t\t姓名\t\t成绩\n");for (i = 1 ; i <= ant ; i++){Query(i,&L,p);printf ("%s\t\t%s\t\t%d\n",p->num,p->name,p->grade);}printOK;puts("");break;case 3:char cmp[20];printf ("请输入要查找的姓名:");scanf ("%s",cmp);if (SearchName(cmp,L,p)) //查找成功 {puts("查找成功,该学生的信息为:");printf ("学号:%s\t\t姓名:%s\t\t成绩:%d\n",p->num,p->name,p->grade);}elseprintf ("对不起,查无此人!\n");printOK;puts("");break;case 4:printf ("请输入要查询第几人的信息:");pos = 1;scanf ("%d",&x);if (x > ant || x <= 0){puts ("对不起,输入非法!");puts("");break;}puts("查找成功,该学生的信息为:");Query(x,&L,p);printf ("学号:%s\t\t姓名:%s\t\t成绩:%d\n",p->num,p->name,p->grade);printOK;puts("");break;case 5:printf ("请输入要插入的位置(在之后插入)(0 ~ 学生总数):");while (scanf ("%d",&x)){if (x <= ant && x >= 0)break;elseprintf ("输入非法,请重新输入您要插入的位置:");}LnodeInit(p);printf ("请输入学号(8位): ");scanf ("%s",p->num);printf ("请输入姓名: ");scanf ("%s",p->name);printf ("请输入成绩: ");scanf ("%d",&p->grade);LnodeInsert(x,&L,p);ant++;printOK;puts("");break;case 6:if (ant == 0){puts("对不起,链表已空,无法删除!");puts("");continue;}printf ("请输入要删除第几个学生:");while (scanf ("%d",&x)){if (x <= ant && x >= 1)break;elseprintf ("输入非法,请重新输入您要删除的位置:");}LnodeDelete(x,&L);ant--;printOK;puts("");break;case 7:printf ("表中学生个数为:%d\n",ant);printOK;puts("");break;}}printf ("谢谢您的使用,请按任意键退出。\n\n");system("pause");return 0;
}
学生信息统计(链表)相关推荐
- PTA: 6-4建立学生信息链表(20分)
大一下半期数据结构 数据结构题目集 pta:建立学生信息链表 本题要求实现一个将输入的学生成绩组织成单向链表的简单函数. 函数接口定义: void input(); 该函数利用scanf从输入中获取学 ...
- 2-2 学生成绩链表处理 (20 分)
2-2 学生成绩链表处理 (20 分) 本题要求实现两个函数,一个将输入的学生成绩组织成单向链表:另一个将成绩低于某分数线的学生结点从链表中删除. 函数接口定义: struct stud_node * ...
- 统计专业人数。本题要求实现一个函数,统计学生学号链表中专业为计算机的学生人数。
统计专业人数 本题要求实现一个函数,统计学生学号链表中专业为计算机的学生人数.链表结点定义如下: struct ListNode {char code[8];struct ListNode *next ...
- 6-4 学生成绩链表处理 (20分) 本题要求实现两个函数,一个将输入的学生成绩组织成单向链表;另一个将成绩低于某分数线的学生结点从链表中删除。 函数接口定义: ```cpp struct stu
6-4 学生成绩链表处理 (20分) 本题要求实现两个函数,一个将输入的学生成绩组织成单向链表:另一个将成绩低于某分数线的学生结点从链表中删除. 函数接口定义: struct stud_node *c ...
- 实验11.2 链表 6-1 建立学生信息链表
本题要求实现一个将输入的学生成绩组织成单向链表的简单函数. 函数接口定义: void input(); 该函数利用scanf从输入中获取学生的信息,并将其组织成单向链表.链表节点结构定义如下: str ...
- 学生信息链表,建立,插入,删除,遍历,查找,修改,最大(小)值,平均...
/[例11-10]建立一个学生成绩信息(包括学号.姓名.成绩)的单向链表,学生数据按学号由小到大顺序排列,要求实现对成绩信息的插入.修改.删除和遍历操作./ /* 用链表实现学生成绩信息的管理 */ ...
- 6-4 建立学生信息链表 (20 分)
本题要求实现一个将输入的学生成绩组织成单向链表的简单函数. 函数接口定义: void input(); 该函数利用scanf从输入中获取学生的信息,并将其组织成单向链表.链表节点结构定义如下: str ...
- C程序范例(2)——学生管理系统”链表“实现
1.对于学生管理系统,能够实现的方法有许多,但是今天我们用链表的方法来实现.虽然初学者很可能看不懂,但是不要紧,这是要在整体的系统的学习完C语言之后,我才编写出的程序.所以大家不必要担心.在这里与大家 ...
- python列表输出学生姓名学号链表_c语言!!!程序设计:建立一个学生信息链表,包括学号,姓名,成绩.(实现添加,删除,查询,排序,平均)...
展开全部 代码如下: /*用c语言链表编写一个学生信息系统程序,62616964757a686964616fe4b893e5b19e31333365656636要求输出学生的学号,姓名,性别, 学号, ...
最新文章
- 2021年大数据Spark(四十二):SparkStreaming的Kafka快速回顾与整合说明
- 常量池之字符串常量池String.intern()
- 2010年第一届蓝桥杯省赛 —— 第二题
- 命令行下安装的tensorflow怎么打开_CourseMaker微课制作教程18:录ppt一直“正在打开……”及WPS下ppt满屏放映怎么办?...
- Win XP2实用的修复工具
- java IO流小结
- java文件上传maven_ssm+maven框架搭建实现ajax多文件上传功能
- java处理表单变量_Java自学之SpringMVC:接收表单数据
- 百年古董电影秒变4K高清、60FPS,AI插值,还能着色
- CentOS 7.2安装zabbix 3.0 LTS
- ANSYS18的简略安装教程
- BUUCTF-MISC(1)
- 【观察】重塑质量管理体系,筑起车企数字化转型“护城河”
- 带附件/密送/抄送的 javaMail 邮件发送 -- java_demo(两种实现方式)
- 利用 BBED 恢复非归档模式下 OFFLINE 数据文件
- 推特营销引流入门指南
- PKI体系简易JAVA实现(一):时间戳服务器TSA
- linux中集计和集约的区别,粗放型经济与集约型经济的区别是什么?
- Cypher语句总结
- [渝粤教育] 山东财经大学 数据库原理及应用 参考 资料
热门文章
- 粗糙集分类算法c语言实现,基于粗糙集分类算法的研究及应用
- 大学生常用软件和资源分享
- 北大青鸟,学生:郜龙飞,作业笔记,第二章变量、常量、算术运算符
- vivos9平行空间怎样切换(2021教程)
- Android自定义View课程表,Android 自定义View课程表表格
- ACM练级日志: CodeForces 414C 归并排序、逆序数和栈内存
- Deeper GNN
- pythonorm_python中ORM是什么?
- pytest学习和使用20-pytest如何进行分布式测试?(pytest-xdist)
- 淘宝小程序 九宫格抽奖