顺序表:学生信息管理系统

一、头文件

#ifndef __LIST_H__
#define __LIST_H__#include <myhead.h>
#define MAX 30typedef struct
{int id;char name[20];char major[20];int age;
}Student;typedef struct
{Student data[MAX];int count; //学生人数
}List,*Plist;/**********函数声明**********/
//申请空间
Plist create_room(); 	
//输入插入的位置
int input_pos();
//判满
int full_empty(Plist L);
//判断位置是否范围内
int pos_YN(Plist L, int pos);
//1.输入学生信息
void list_input(Plist L);	
//2.输出学生信息
void list_output(Plist L);
//3.任意位置插入一个学生
void any_sert(Plist L, int pos, Student k);
//4.任意位置删除一个学生
void any_delete(Plist L, int pos);
//5.任意位置查找一个学生
void any_search(Plist L, int pos);
//6.任意位置修改一个学生
void any_change(Plist L, int pos, Student k);
//7.去除学号重复的学生
void cut_repeat(Plist L);
//8.按照姓名查找返回位置(顺序查找)
int find_name(Plist L,char *name);
//9.按照学号从小到大排序(冒泡排序)
void bubble_sord(Plist L);
//10.按照学号查找返回位置(二分查找法)
int find_id(Plist L,int id);
#endif 

二、功能函数

1、申请空间

//申请空间 
Plist create_room()
{Plist L = malloc(sizeof(List)*MAX); //申请空间if(NULL == L){printf("申请失败!");return NULL;}else{L->count = 0; //学生人数初始化为0return L;}
}
//输入插入的位置
int input_pos()
{int pos;printf("请输入插入/删除/查找/修改的位置:");scanf("%d",&pos);return pos;
}
//判满or空
int full_empty(Plist L)
{//判满if(L->count == MAX){return 1;}//判空else if(L->count == 0){return -1;}else{return 0;}
}//判断位置是否范围内
int pos_YN(Plist L, int pos)
{if(NULL == L || pos-1<0 || pos-1>L->count || full_empty(L) != 0){printf("访问失败!\n");return 1;}return 0;
}	

2、输入输出学生信息

//1.输入学生信息
void list_input(Plist L)
{int n;printf("请输入人数:");scanf("%d",&n);for(int i=0; i<n; i++){printf("请输入第%d个学生信息\n",i+1);printf("学号:");scanf("%d",&L->data[i].id);printf("姓名:");scanf("%s",L->data[i].name);printf("专业:");scanf("%s",L->data[i].major);printf("年龄:");scanf("%d",&L->data[i].age);L->count++;}
}
//输出学生信息
void list_output(Plist L)
{for(int i=0; i<L->count; i++){printf("%d\t %s\t %s\t %d\n", L->data[i].id, L->data[i].name, L->data[i].major, L->data[i].age);}
}

3、任意位置插入一个学生

//2.任意位置插入一个学生
void any_sert(Plist L, int pos, Student k)
{if( pos_YN(L , pos) )return;//空间+1,其余学生向后移动for(int i=L->count; i>=pos; i--){L->data[i] = L->data[i-1];}L->data[pos-1] = k; //插入一个学生L->count++;printf("/*****插入成功*****/\n");
}

4、任意位置删除一个学生

//3.任意位置删除一个学生
void any_delete(Plist L, int pos)
{if( pos_YN(L , pos) )return;int i;for(i = pos-1; i<L->count; i++){L->data[i] = L->data[i+1];}L->count--;printf("/*****删除成功*****/\n");
}

5、任意位置查找一个学生

//4.任意位置查找一个学生
void any_search(Plist L, int pos)
{if( pos_YN(L, pos) )return;printf("第%d位学生信息如下:\n",pos);printf("学号%d\t姓名%s\t专业%s\t年龄%d\n",L->data[pos-1].id, L->data[pos-1].name, L->data[pos-1].major, L->data[pos-1].age);
}

6、任意位置修改一个学生

//5.任意位置修改一个学生
void any_change(Plist L, int pos, Student k)
{if( pos_YN(L, pos) )return;L->data[pos-1] = k;printf("/*****修改成功*****/\n");
}

7、去除学号重复的学生

//6.去除学号重复的学生
void cut_repeat(Plist L)
{for(int i=0; i<L->count; i++){for( int j=i+1; j<L->count; j++){if( L->data[i].id == L->data[j].id){any_delete(L, j+1);j--;}}}
}

8、按照姓名查找返回位置

//7.按照姓名查找返回位置(顺序查找)
int find_name(Plist L, char *name)
{int flag = -1;for(int i=0; i<L->count; i++){if( strcmp(name, L->data[i].name )==0 ){flag = i;}}if(flag == -1){printf("/*****未找到*****/\n");return flag;}else{printf("/*****已找到******/\n");return flag+1;}
}

9、按照学号从小到大排序

//8.按照学号从小到大排序(冒泡排序)
void bubble_sord(Plist L)
{for(int i=1; i<L->count; i++){int flag = 0;for(int j=0; j<L->count-i; j++){if(L->data[j].id > L->data[j+1].id){Student temp = L->data[j];L->data[j] = L->data[j+1];L->data[j+1] = temp;flag = 1;}}if(flag == 0){break;}}printf("/*****排序成功*****/\n");
}

10、按照学号查找返回位置

//9.按照学号查找返回位置(二分查找法)
int find_id(Plist L,int id)
{int i=0, j=L->count-1;while( i<=j ){int mid = (i+j)/2;if( L->data[mid].id < id ){i = mid + 1;}else if( L->data[mid].id  > id ){j = mid - 1;}else{return mid+1;}	}return -1;
}

三、主函数

#include "list1.h"int main(int argc, const char *argv[])
{//申请空间Plist L = create_room();while(1){printf("\t\t===学生信息管理系统===\n");printf("\t\t1、输入学生信息\n");printf("\t\t2、任意位置插入一个学生\n");printf("\t\t3、任意位置删除一个学生\n");printf("\t\t4、任意位置查找一个学生\n");printf("\t\t5、任意位置修改一个学生\n");printf("\t\t6、去除学号重复的学生\n");printf("\t\t7、按照姓名查找返回位置\n");printf("\t\t8、按照学号从小到大排序\n");printf("\t\t9、按照学号查找返回位置\n");printf("\t\t0、退出\n");int choice;printf("请选择:");scanf("%d",&choice);switch(choice){case 1: //输入学生信息list_input(L); break;case 2: //任意位置插入一个学生Student k1;printf("请输入插入学生信息(学号、姓名、专业、年龄):");scanf("%d %s %s %d", &k1.id, k1.name, k1.major, &k1.age);any_sert(L, input_pos(), k1);list_output(L);break;case 3: //任意位置删除一个学生any_delete(L, input_pos() );list_output(L);break;case 4://任意位置查找一个学生any_search(L, input_pos() );break;case 5: //任意位置修改一个学生Student k2;printf("请输入修改学生信息(学号、姓名、专业、年龄):");scanf("%d %s %s %d", &k2.id, k2.name, k2.major, &k2.age);any_change(L, input_pos(), k2);list_output(L);break;case 6: //去除学号重复的学生cut_repeat(L);list_output(L);break;case 7: //按照姓名查找返回位置(顺序查找)char name[20];printf("请输入要查找的学生姓名:");scanf("%s",name);int sub0 = find_name(L,name);printf("%s在第%d位\n",name, sub0 );break;case 8: //按照学号从小到大排序(冒泡排序)bubble_sord(L);list_output(L);break;case 9://按照学号查找返回位置(二分查找法)int id;printf("请输入要查找的学生学号:");scanf("%d",&id);int sub1 = find_id(L,id);if(sub1 != -1){printf("学号%d在%d位\n",id, sub1 );}else{printf("/*****查找失败*****/\n");}break;case 0: //退出return 0;default : printf("请重新选择:");scanf("%d",&choice);break;}}free(L); //释放内存L = NULL; //置空return 0;
}

四、结果

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

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

相关文章

数据结构7—树(顺序存储二叉树—堆)含TOPK问题

1.树 1.1树的概念与结构 树是一种非线性的数据结构&#xff0c;它是由 n&#xff08;n > 0&#xff09;个有限结点组成一个具有层次关系的集合。把它叫做树是因为它看起来像一颗倒挂的树&#xff0c;也就是说它是根朝上&#xff0c;而叶朝下的。 有一个特殊的结点&#x…

并发编程---线程安全

一.三大特性 1.原子性&#xff08;线程任务不可再分&#xff09; 一个操作或者多个操作要么全部执行&#xff0c;要么全部不执行。这确保了数据的一致性&#xff0c;避免了部分执行导致的数据错误。 原子类&#xff08;Atomic&#xff09; // static int x 1;static Atomic…

yub‘s Algorithmic Adventures_Day1

Day 1 二分查找 如理解有误欢迎指正交流~ link&#xff1a;704. 二分查找 - 力扣&#xff08;LeetCode&#xff09; 思路分析 题目给出数组升序 &#xff0c;想到二分查找&#xff08;好吧其实题目也给出来了w&#xff09; 找到mid&#xff0c;根据逻辑大小缩小范围比较. …

大模型价格战,打到了负毛利,卷or不卷?

国产大模型淘汰赛在加速。这轮淘汰赛会持续一两年&#xff0c;只有少数真正具备实力的基础模型企业能继续活下去 中国市场的大模型价格战已经打了近半年。这轮价格战已经打到了负毛利&#xff0c;而且暂时没有停止迹象。头部云厂商仍在酝酿新一轮降价。这轮降价会在今年9月下旬…

270万骑手,如何“送”出一个IPO?

2018年美团上市&#xff0c;敲钟之后的王兴在致辞中&#xff0c;特别感谢了「重新发明手机」的乔布斯&#xff1a; “如果没有移动互联网&#xff0c;没有智能手机&#xff0c;我们今天所做的一切都是不可能的事情。” 彼时的中国市场&#xff0c;庞大的人口红利和快速发展的…

mov转gif怎么快速转换?5个软件帮助你轻松进行文件格式转换

mov转gif怎么快速转换&#xff1f;5个软件帮助你轻松进行文件格式转换 将 MOV 格式的视频转换为 GIF 动图是一项非常实用的任务&#xff0c;无论是为了在社交媒体上分享&#xff0c;还是用于创建简短的演示。以下是五款能够快速、高效地将 MOV 转换为 GIF 的软件和工具&#x…

Java浅谈Java String内幕

​ 博客主页: 南来_北往 系列专栏&#xff1a;Spring Boot实战 前言 Java中的String类是一个不可变的、用于表示字符串的类。在Java中&#xff0c;字符串是通过字符数组来实现的&#xff0c;而String类则是对这个字符数组进行封装&#xff0c;并提供了一系列操作字符串的…

c++ 类中特殊成员函数

作业&#xff1a; 仿照string类&#xff0c;自己手动实现 My_string&#xff0c;分文件编译 fun.h代码 #ifndef FUN_H #define FUN_H#include <iostream>using namespace std;class My_string { private:char *ptr; // 指向字符数组的指针int size; // 字符串的最大…

计算机毕业设计推荐-基于python的游戏资讯分享平台

精彩专栏推荐订阅&#xff1a;在下方主页&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb; &#x1f496;&#x1f525;作者主页&#xff1a;计算机毕设木哥&#x1f525; &#x1f496; 文章目录 一、基于python的…

2024重生之回溯数据结构与算法系列学习(4)【无论是王道考研人还是IKUN都能包会的;不然别给我家鸽鸽丢脸好嘛?】

目录 数据结构王道第2.3章节之线性表精题汇总一 &#xff08;10&#xff09;题目:​编辑 解题思路&#xff1a; 实现代码&#xff1a; &#xff08;11&#xff09;题目&#xff1a; 解题思路&#xff1a; &#xff08;12&#xff09;题目&#xff1a; 解题思路&#xff1a; 实…

Set 和 Map 的模拟实现

1、引言 在数据结构与算法的学习与实践中&#xff0c;关联容器&#xff08;associative containers&#xff09;是不可忽视的重要工具。作为高效管理数据的一类容器&#xff0c;C 标准库中的 set 和 map 在现代软件开发中扮演着关键角色。这两个容器通过平衡二叉搜索树&#x…

软件测试常见面试题

目录 1、什么是测试用例? 2、什么是BUG?(BUG的生命周期) 3、软件开发五大模型 4、软件测试的生命周期 5、测试模型(V模型、W模型) 6、软件开发的生命周期 7、如何描述一个BUG? 8、BUG的级别(线上出现崩溃级别的BUG怎么办) 9、 BUG的生命周期 10、发现一个BUG…

Qt系统相关——QFile和QFileInfo

文章目录 文件操作QFile使用示例QFileInfo 文件操作 C语言&#xff1a; fopen打开文件fread、fwrite读写文件fclose关闭文件 C&#xff1a; fstream打开文件<<、>>流式操作符读写 Linux&#xff1a; open打开文件read、write读写文件close关闭文件 Qt自己也…

把任务管理器里面的vmware usb arbitrition停了,虚拟机一直识别不到手机设备了

在设备管理器--服务 里面找到VMware usb arbitrition服务&#xff0c;点击“启用”就好了。 参考大佬的文章&#xff1a; 吐血经验&#xff01;&#xff01;&#xff01;解决虚拟机连不上USB&#xff01;最全&#xff01;_为什么vmware虚拟机不能连接上usb设备-CSDN博客

地平线静态目标检测 MapTR 参考算法-V1.0

简介 高清地图是自动驾驶系统的重要组件&#xff0c;提供精确的驾驶环境信息和道路语义信息。传统离线地图构建方法成本高&#xff0c;维护复杂&#xff0c;使得依赖车载传感器的实时感知建图成为新趋势。早期实时建图方法存在局限性&#xff0c;如处理复杂地图元素的能力不足…

品牌互鉴,融通中外|AORO遨游创始人受邀参加2024北京国际品牌周

2024年9月21日&#xff0c;第三届北京国际品牌周在北京金融街英蓝国际金融中心举办&#xff0c;本次盛会以“品牌互鉴&#xff0c;融通中外”为主题&#xff0c;由中国国际商会、中国国际公共关系协会、中国文化管理协会、北京国际设计周主办&#xff0c;中国外文局文化传播中心…

LSM-YOLO: A Compact and Effective ROI Detector for Medical Detection

LSM-YOLO: A Compact and Effective ROI Detector for Medical Detection LSM-YOLO: 一种紧凑且有效的医学检测ROI检测器1.介绍2.相关工作2.1医学感兴趣区域&#xff08;ROI&#xff09;检测2.2多尺度特征用于对象检测 3方法3.1LAE(轻量级自适应提取&#xff09;3.2MSFM(多路径…

GESP等级考试C++二级-switch...case的用法

在《GESP等级考试C二级if语句》中提到&#xff0c;可以使用if...else if...else语句来处理多种可能的情况。在C中&#xff0c;使用switch...case语句也可以来处理多种可能。 1 switch...case语句的格式 switch...case语句的格式如图1所示。 图1 switch...case语句的格式 其中…

鸿蒙开发(NEXT/API 12)【基础功能(使用剪贴板进行复制粘贴)】剪贴板服务

场景介绍 [剪贴板]为开发者提供数据的复制粘贴能力。 当需要使用复制粘贴等功能时&#xff0c;例如&#xff1a;复制文字内容到备忘录中粘贴&#xff0c;复制图库照片到文件管理粘贴&#xff0c;就可以通过剪贴板来完成。 约束限制 剪贴板内容大小<128MB。为保证剪贴板数…

【TabBar嵌套Navigation案例-产品推荐页面-UICollectionView-结合xib使用 Objective-C语言】

一、接下来,我们来说这个产品推荐页面 1.首先呢,它是一个CollectionViewController,当我点击这个产品推荐的时候, 这个Cell的时候,我要跳到一个CollectionViewController, 所以呢,我们需要先找到产品推荐,然后给它去添加一个targetVC,然后给它push到一个产品推荐的页面…