(详细版)学生管理系统(姓名、成绩、学号)---顺序表

news2024/11/13 11:31:35

//1:创建顺序表
//2:判满
//3:判空
//4:插入学生信息
//5:输出学生信息
//6:按位置插入学生信息
//7:按位置删除学生信息
//8:按位置修改学生信息
//9:按学号查找学生信息
//10:顺序表去重
//11:销毁顺序表

main.c:

int main(int argc, const char *argv[])
{
	seq_p H=seq_create();//--1创建
	seq_full(H);         //--2判满
	seq_empty(H);        //--3判空
	seq_input(H);        //--4插入学生信息
	seq_show(H);         //--5输出
	insert_pos(H,2);     //--6按位置插入学生信息
	seq_show(H);         //--5输出
	del_pos(H,3);        //--7按位置删除学生信息  
	change_pos(H,3);     //--8按位置修改学生信息
	seq_show(H);         //--5输出
	find_id(H,1001);	 //--9按学号查找学生信息
	del_same(H);	     //--10去重
	seq_free(&H);	
	return 0;
}

seq.c:

#include"seq.h"
//1:创建顺序表
seq_p seq_create()
{
	seq_p H=(seq_p)malloc(sizeof(seq));
	if(H==NULL)
	{
		printf("---顺序表创建失败---\n");
		return 0;
	}
	H->len=0;
	memset(H->data,0,sizeof(H->data));
	printf("---顺序表创建成功---\n");
	return H;
}
//2:判满
int seq_full(seq_p H)
{
	if(H==NULL)
	{
		printf("---2入参为空,请检查---\n");
		return 0;
	}
	return H->len==MAX;
}
//3:判空
int seq_empty(seq_p H)
{
	if(H==NULL)
	{
		printf("---3入参为空,请检查---\n");
		return 0;
	}
	return H->len==0;
}
//4:插入学生信息
int seq_input(seq_p H)
{
	if(H==NULL||seq_full(H))
	{
		printf("---学生信息输入失败---\n");
		return 0;
	}
	int x=0; 
 	printf("请输入学生的数量:"); 
 	scanf("%d",&x);
 	printf("\n");
 	for(int i=0;i<x;i++)
 	{
     	printf("第%d位学生信息\n",i+1);
     	printf("姓名:");
     		scanf("%s",H->data[i].name);
        printf("成绩:");
     		scanf("%d",&H->data[i].sorce);
     	printf("学号:");
     		scanf("%d",&H->data[i].id);
  	} 
 	H->len=x;
	return 1;
}
//5:输出学生信息
int seq_show(seq_p H)
{
	if(H==NULL||seq_empty(H))
	{
		printf("---输出有误,请检查---\n");
		return 0;
	}
	printf("%d名学生信息如下:\n",H->len);
	printf("-------------------------\n");
	printf("姓名\t成绩\t学号\n");
	for(int i=0;i<H->len;i++)
	{
		printf("%s\t%d\t%d\n",H->data[i].name,H->data[i].sorce,H->data[i].id);
	}
}
//6:按位置插入学生信息
int insert_pos(seq_p H,int pos)
{
	if(H==NULL||seq_full(H))
	{
		printf("---不可插入学生信息---\n");
		return 0;
	}
	if(pos<=0||pos>H->len)
	{
		printf("---位置有误---\n");
		return 0;
	}
	for(int i=H->len-1;i>=pos-1;i--)
	{
		H->data[i+1]=H->data[i];
	}
	printf("\n");
  	printf("插入学生信息为:\n");
    printf("姓名:");
  	scanf("%s",H->data[pos-1].name);
    printf("成绩:");
  	scanf("%d",&H->data[pos-1].sorce);
  	printf("学号:");
    scanf("%d",&H->data[pos-1].id);
	H->len++;
	return 1;
}
//7:按位置删除学生信息
int del_pos(seq_p H,int pos)
{
	if(H==NULL||seq_empty(H))
	{
		printf("---不可删除学生信息---\n");
		return 0;
	}
	if(pos<=0||pos>H->len)
	{
		printf("---位置有误---\n");
		return 0;
	}
	for(int i=pos-1;i<H->len;i++)
	{
		H->data[i]=H->data[i+1];
	}
	H->len--;
	return 1;
}
//8:按位置修改学生信息
int change_pos(seq_p H,int pos)
{
	if(H==NULL||seq_empty(H))
	{
		printf("---不可修改学生信息---\n");
		return 0;
	}
	if(pos<=0||pos>H->len)
	{
		printf("---位置有误---\n");
		return 0;
	}
    printf("修改第%d位学生信息\n",pos);
    printf("姓名:");
    scanf("%s",H->data[pos-1].name);
    printf("成绩:");
    scanf("%d",&H->data[pos-1].sorce);
    printf("学号:");
    scanf("%d",&H->data[pos-1].id);
	return 1;
}
//9:按学号查找学生信息
int find_id(seq_p H,int id)
{
	if(H==NULL||seq_empty(H))
	{
		printf("---不可查找学生信息---\n");
		return 0;
	}
	for(int i=0;i<H->len;i++)
	{
		if(H->data[i].id==id)
		{
			printf("学号为%d的学生信息为:姓名:%s 成绩:%d 学号:%d\n",id,H->data[i].name,H->data[i].sorce,H->data[i].id);
			return 1; 
		}
	}
	printf("---没有该学号---\n");
	return 1;
}
//10:顺序表去重
int del_same(seq_p H)
{
	if(H==NULL||seq_empty(H))                             
    {                                                     
        printf("---入参为空,请检查---\n");             
        return 0;                                         
    }                                                     
    for(int i=0;i<H->len;i++)                             
    {                                                     
        for(int j=i+1;j<H->len;j++)                       
        {                                                 
            if(H->data[i].name==H->data[j].name)                    
            {                                             
                del_pos(H,j+1);//传的是位置,不是下标     
                j--;//防止漏删                            
            }                                             
        }                                                 
    }                                                     
    return 1;                                             
}
//11:销毁顺序表
void seq_free(seq_p *H)
{
    if(*H==NULL)                              
    {                                         
        printf("---入参为空,请检查---\n"); 
        return;                               
    }                                                                     
    free(*H);                                 
    *H=NULL;                                  
    printf("---顺序表空间已释放---\n");       

}

seq.h:

#ifndef __SEQ_H__
#define __SEQ_H__

#include<stdio.h>
#include<stdlib.h>
#include<string.h>

#define MAX 30
typedef char Datatype;

typedef struct stu
{
	Datatype name[32];
	int sorce;
	int id;
}student;

typedef struct seq
{
	student data[MAX];
	int len;
}seq,*seq_p;

//1:创建顺序表
seq_p seq_create();
//2:判满
int seq_full(seq_p H);
//3:判空
int seq_empty(seq_p H);
//4:插入学生信息
int seq_input(seq_p H);
//5:输出学生信息
int seq_show(seq_p H);
//6:按位置插入学生信息
int insert_pos(seq_p H,int pos);
//7:按位置删除学生信息
int del_pos(seq_p H,int pos);
//8:按位置修改学生信息
int change_pos(seq_p H,int pos);
//9:按学号查找学生信息
int find_id(seq_p H,int id);
//10:顺序表去重
int del_same(seq_p H);
//11:销毁顺序表
void seq_free(seq_p *H);


 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1904586.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

第一周周日总结

题目总结 1.给你一个整数数组 hours&#xff0c;表示以 小时 为单位的时间&#xff0c;返回一个整数&#xff0c;表示满足 i < j 且 hours[i] hours[j] 构成 整天 的下标对 i, j 的数目。 整天 定义为时间持续时间是 24 小时的 整数倍 。 例如&#xff0c;1 天是 24 小时…

DHCP的原理及配置

目录 一、了解DHCP服务 1.什么是DHCP 1.1DHCP广播 2.使用DHCP的好处 2.1为什么使用DHCP 3.DHCP的模式与分配方式 3.1分配方式 3.2模式 二、DHCP工作原理 1.四次回话 2.重新登录 3.更新租约 4.扩展 三、安装DHCP服务 四、DHCP局部配置并且测试 五、使用…

PyQt5中如何实现指示灯点亮和指示灯熄灭功能

一般上位机界面都会涉及指示灯点亮和指示灯熄灭功能&#xff0c;从网上下载该功能的上位机界面&#xff0c;学习如何使用PyQt5搭建具备指示灯点亮和指示灯熄灭效果的界面。 1. 上位机界面的效果展示 使用PyQt5实现以下界面&#xff0c;界面效果如下&#xff0c;界面图片是从网…

【CUDA】

笔者在学习Softmax实现时遇到了一个问题&#xff0c;很多文章直接将softmax的计算分成了五个过程&#xff0c;而没有解释每个过程的含义&#xff0c;尤其是在阅读这篇文章时&#xff0c;作者想计算最基本的softmax的效率&#xff0c;以展示可行的优化空间&#xff1a; 贴一个g…

相见恨晚的《新程序员》 AI 专辑

声明&#xff1a;本文并不什么“软文”&#xff0c;是我的真实感受分享。本人和《新程序员》无任何利益关系&#xff0c;读者购买专栏我不会获得任何分成。 一、前言 前不久有位朋友送我一本 CSDN 出品的 《新程序员 006&#xff1a;人工智能新十年》 的杂志。 说实话&#x…

昇思25天学习打卡营第12天|FCN图像语义分割

文章目录 昇思MindSpore应用实践基于MindSpore的FCN图像语义分割1、FCN 图像分割简介2、构建 FCN 模型3、数据预处理4、模型训练自定义评价指标 Metrics 5、模型推理结果 Reference 昇思MindSpore应用实践 本系列文章主要用于记录昇思25天学习打卡营的学习心得。 基于MindSpo…

谷粒商城学习笔记-16-人人开源搭建后台管理系统

文章目录 一&#xff0c;克隆前/后端代码1&#xff0c;克隆前端工程renren-fast-value2&#xff0c;克隆后端工程renren-fast 二&#xff0c;集成后台管理系统的后端代码三&#xff0c;启动后台管理系统四&#xff0c;前端系统的安装和运行1&#xff0c;下载安装VSCode2&#x…

【TB作品】51单片机 Proteus仿真 超声波LCD1602ADC0832 身高体重测量仪

00024 超声波LCD1602ADC0832 实验报告&#xff1a;基于51单片机的身高体重测量仪设计 背景介绍 本实验设计并实现了一个基于51单片机的身高体重测量仪。该系统利用超声波传感器测量高度&#xff0c;通过ADC0832模数转换芯片获取重量数据&#xff0c;并使用LCD1602显示屏显示…

26_嵌入式系统网络接口

以太网接口基本原理 IEEE802标准 局域网标准协议工作在物理层和数据链路层&#xff0c;其将数据链路层又划分为两层&#xff0c;从下到上分别为介质访问控制子层(不同的MAC子层&#xff0c;与具体接入的传输介质相关),逻辑链路控制子层(统一的LLC子层&#xff0c;为上层提供统…

【JavaSE复习】数据结构、集合

JavaSE 复习 1.数据结构1.1 查找1.1.1 基本查找1.1.2 二分查找1.1.3 插值查找1.1.4 斐波那契查找1.1.5 分块查找1.1.6 分块查找的扩展&#xff08;无规律数据&#xff09; 1.2 排序1.2.1 冒泡排序1.2.2 选择排序1.2.3 插入排序1.2.4 快速排序 2. 集合2.1 基础集合2.1.1 集合和数…

MATLAB制作一个简单的函数绘制APP

制作一个函数绘制APP&#xff0c;输入函数以及左右端点&#xff0c;绘制出函数图像。 编写回调函数&#xff1a; 结果&#xff1a;

D1.排序

1.快速排序 双指针 采用分治的思想&#xff0c;基于一个数作为标准&#xff0c;进行分治 步骤&#xff1a; 确定分界点的值。x q[l]、q[(lr)/2]、q[r]、随机 都可以&#xff1b;划分区间&#xff1a;使得小于等于x的数放在数组的左边&#xff1b;大于等于x的数放在数组的右边…

【C语言】 —— 编译和链接

【C语言】 —— 编译和链接 一、编译环境和运行环境二、翻译环境2.1、 预处理2.2、 编译&#xff08;1&#xff09;词法分析&#xff08;2&#xff09;语法分析&#xff08;3&#xff09;语义分析 2.3、 汇编2.4、链接 三、运行环境 一、编译环境和运行环境 平时我们说写 C语言…

【电机控制】EG2134无刷电机驱动、控制一体板——开环、无感SMO验证

【电机控制】EG2134无刷电机驱动、控制一体板——开环、无感SMO验证 文章目录 前言一、硬件二、软件三、开环SVPWM四、SMO无感观测器闭环控制五、参考文献总结 前言 【电机控制】直流有刷电机、无刷电机汇总——持续更新 【电机控制】EG2134无感FOC驱控一体板-滑模观测器 使用…

详解Linux的shell脚本基础指令

一、shell简介 是Linux系统的用户界面&#xff0c;它提供用户与内核的一种交互方式。它接收用户输入的命令&#xff0c;并把它送入内核去执行&#xff0c;是一个命令解释器。 脚本&#xff1a;本质是一个文件&#xff0c;文件里面存放的是 特定格式的指令&#xff0c;系统可以…

数学系C++(六七)

目录 * &指针与地址 void指针 指针可以等于&#xff1a; const 指向常量的指针 const int *px 常指针 int * const px 指向常量的常指针const 类型标识符 * const 指针名 指针加减&#xff1a; 指针恒等式 函数指针【待续】 指针型函数&#xff1a; 指向函数的…

【mindspore进阶】02-ResNet50迁移学习

Mindspore 应用&#xff08;2&#xff09;ResNet50迁移学习 在实际应用场景中&#xff0c;由于训练数据集不足&#xff0c;所以很少有人会从头开始训练整个网络。普遍的做法是&#xff0c;在一个非常大的基础数据集上训练得到一个预训练模型&#xff0c;然后使用该模型来初始化…

关于Python的电影信息爬取与数据可视化分析报告

目录 1 引言 1.1 研究背景 1.2 研究目的 1.3 研究意义 2 相关技术介绍 2.1 Python语言及其应用领域 2.2 网络爬虫技术 2.3 数据可视化技术 2.4 PyCharm 2.5 Jupyter Notebook 3 数据爬取 4 数据预处理 5 数据分析及可视化 5.1数据分析背景 5.2从电影评分角度分析…

嵌入式开发SPI基本介绍与应用

目录 #SPI通信协议 #SPI基础概念 #SPI通信模式 #SPI通信时序类型 前言&#xff1a;本篇笔记参考嘉立创的开发文档&#xff0c;连接放在最后。 #SPI通信协议 #SPI基础概念 Serial Peripheral Interface 缩写SPI 翻译&#xff1a;串行外设接口 同步串行通信协议&…

运维系列.Nginx配置中的高级指令和流程控制

运维专题 Nginx配置中的高级指令和流程控制 - 文章信息 - Author: 李俊才 (jcLee95) Visit me at CSDN: https://jclee95.blog.csdn.netMy WebSite&#xff1a;http://thispage.tech/Email: 291148484163.com. Shenzhen ChinaAddress of this article:https://blog.csdn.net/…