首页 > 其他分享 >学生管理系统(通过顺序表,获取连续堆区空间实现)

学生管理系统(通过顺序表,获取连续堆区空间实现)

时间:2024-07-07 19:57:45浏览次数:12  
标签:顺序 管理系统 堆区 信息 学生 stu printf id ID

将学生的信息,以顺序表的方式存储(堆区),并且实现封装函数 :

1】顺序表的创建,

2】判满、

3】判空、

4】往顺序表里增加学生信息、

5】遍历学生信息

6】任意位置插入学生信息

7】任意位置删除学生信息

8】修改学生信息

9】查找(按学生的学号查找)、

10】删除重复学生信息

11】销毁顺序表

主函数main.c 

#include "stu.h"                                               
int main()                                                     
{                                                              
                                                               
    int i;                                                     
    stu_p S = stu_create();                                    
                                                               
    if(NULL == S)                                              
        return 0;                                              
    else                                                       
    {                                                          
        do                                                     
        {                                                      
            printf("1.添加学生信息\t");                        
            printf("2.遍历学生信息\t");                        
            printf("3.插入学生信息\t");                        
            printf("4.删除学生信息\n");                        
            printf("5.查找学生信息\t");                        
            printf("6.修改学生信息\t");                        
            printf("7.删除重复信息\t");                        
            printf("8.退出信息系统\n");                        
            printf("请输入选项:");                            
            scanf("%d", &i);                                   
            switch(i)                                          
            {                                                  
            case 1:stu_add(S);break;                           
            case 2:stu_show(S);break;                          
            case 3:stu_insert(S);break;                        
            case 4:stu_delet(S);break;                         
            case 5:stu_find(S);break;                          
            case 6:stu_change(S);break;                        
            case 7:stu_repeatdel(S);break;                     
            case 8:stu_free(S);printf("已退出\n");break;       
            default:printf("没有这个选项,请重新选择");        
            }                                                  
        }while(8 != i);                                        
    }                                                          
    return 0;                                                  
}                                                              

 功能函数stu.c

#include"stu.h"                                
                                               
//申请顺序表空间                               
stu_p stu_create()                             
{                                              
    //申请数据结构大小的堆空间                 
    stu_p S = (stu_p)malloc(sizeof(stu));      
    if(NULL == S)                              
    {                                          
        printf("申请顺序表失败");              
        return NULL;                           
    }                                          
    memset(S -> name, 0, sizeof(S -> name));   
    memset(S -> id, 0, sizeof(S -> id));       
    S -> len = 0;                              
    printf("申请顺序表成功\n");                
                                               
    return S;                                  
}                                              
                                               
//添加学生信息                                 
void stu_add(stu_p S)                          
{                                              
    if(stu_full(S))                            
    {                                          
        printf("满\n");                        
        return;                                
    }                                          
                                               
    printf("请输入学生姓名:");                 
    scanf("%s", S -> name[S -> len]);          
                                               
    printf("请输入学生id:");                   
    scanf("%d", &S -> id[S -> len]);           
                                               
    S -> len++;                                
    stu_show(S);                               
}         
//位插信息                                         
void stu_insert(stu_p S)                           
{                                                  
    if(stu_full(S))                                
    {                                              
        printf("满\n");                            
        return;                                    
    }                                              
                                                   
    printf("请输入要插入的位置:");                
    int in;                                        
    scanf("%d", &in);                              
                                                   
    if(in > S -> len || in <= 0 || in > MAX)       
    {                                              
        printf("所选位置错误\n");                  
        return;                                    
    }                                              
    //将插入的位置空出来                           
    for(int i = S -> len; i >= in; i--)            
    {                                              
        S -> id[i] = S -> id[i - 1];               
        strcpy(S -> name[i], S -> name[i - 1]);    
    }                                              
                                                   
                                                   
    printf("请输入学生姓名:");                     
    scanf("%s", S -> name[in - 1]);                
                                                   
    printf("请输入学生id:");                       
    scanf("%d", &S -> id[in - 1]);                 
                                                   
    S -> len++;                                    
    stu_show(S);                                   
}                                                  
                                     
//位删信息                                       
void stu_delet(stu_p S)                          
{                                                
    if(stu_null(S))                              
    {                                            
        printf("空\n");                          
        return;                                  
    }                                            
                                                 
    printf("请输入要删除的位置:");              
    int in;                                      
    scanf("%d", &in);                            
    if(in > S -> len || in <= 0)                 
    {                                            
        printf("所选位置错误\n");                
        return;                                  
    }                                            
                                                 
    for(int i = in - 1; i < S -> len; i++)       
    {                                            
        S -> id[i] = S -> id[i + 1];             
        strcpy(S -> name[i], S -> name[i + 1]);  
    }                                            
                                                 
    S -> len--;                                  
    stu_show(S);                                 
}                                                
//位改                                 
void stu_change(stu_p S)               
{                                      
    if(stu_null(S))                    
    {                                  
        printf("空\n");                
        return;                        
    }                                  
                                       
    printf("请输入要修改的位置:");    
    int in;                            
    scanf("%d", &in);                  
    if(in > S -> len || in <= 0)       
    {                                  
        printf("所选位置错误\n");      
        return;                        
    }                                  
                                       
    printf("请输入学生姓名:");         
    scanf("%s", S -> name[in - 1]);    
                                       
    printf("请输入学生id:");           
    scanf("%d", &S -> id[in - 1]);     
                                       
    stu_show(S);                       
}                                      
//查找学生信息                                                                     
void stu_find(stu_p S)                                                             
{                                                                                  
    if(stu_null(S))                                                                
    {                                                                              
        printf("空\n");                                                            
        return;                                                                    
    }                                                                              
    printf("请输入学生的ID:");                                                    
    int ID, i = 0;                                                                 
    scanf("%d", &ID);                                                              
    do                                                                             
    {                                                                              
        if(S -> id[i] == ID)                                                       
        {                                                                          
            printf("[%d]姓名:%s\tID:%d\n",i+1, S -> name[i], S -> id[i]);        
            return;                                                                
        }                                                                          
        i++;                                                                       
    }while(i <= S -> len);                                                         
    printf("没有这个学生\n");                                                      
                                                                                   
}                                                                                  
//删重                                                           
void stu_repeatdel(stu_p S)                                      
{                                                                
    if(stu_null(S))                                              
    {                                                            
        printf("空\n");                                          
        return;                                                  
    }                                                            
                                                                 
    for(int i = 0; i < S -> len; i++)                            
    {                                                            
        //遍历后面的值                                           
        for(int j = i + 1; j < S -> len; j++)                    
        {                                                        
            //重复的进行删除                                     
            if(S -> id[i] == S -> id[j])                         
            {                                                    
                for(int k = j; k < S -> len; k++)                
                {                                                
                    S -> id[k] = S -> id[k + 1];                 
                    strcpy(S -> name[k], S -> name[k + 1]);      
                }                                                
                S -> len--;                                      
                j--;//对删除后位置的值进行重新对比               
            }                                                    
        }                                                        
    }                                                            
    stu_show(S);                                                 
}                                                                
                                                                 
//释放堆空间                                                     
void stu_free(stu_p S)                                           
{                                                                
    free(S);                                                     
    S = NULL;                                                    
}                                                                
//判空                                                                  
int stu_null(stu_p S)                                                   
{                                                                       
    return 0 == S -> len;                                               
}                                                                       
                                                                        
//判满                                                                  
int stu_full(stu_p S)                                                   
{                                                                       
    return MAX == S -> len;                                             
}                                                                       
                                                                        
//回显顺序表                                                            
void stu_show(stu_p S)                                                  
{                                                                       
    if(stu_null(S))                                                     
    {                                                                   
        printf("空\n");                                                 
        return;                                                         
    }                                                                   
    printf("——————————————\n");                                         
    for(int i = 0; i < S -> len; i++)                                   
        printf("[%d]姓名:%s\tID:%d\n",i+1, S -> name[i], S -> id[i]); 
    printf("——————————————\n");                                         
}                                                                       

 功能函数头文件stu.h

#ifndef __STU_H__
#define __STU_H__

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

#define MAX 8

typedef struct student
{
    char name[MAX][24];
    int id[MAX];
    int len;
}stu, *stu_p;

stu_p stu_create();
int stu_full(stu_p S);
int stu_null(stu_p S);
void stu_add(stu_p S);
void stu_show(stu_p S);
void stu_insert(stu_p S);
void stu_delet(stu_p S);
void stu_change(stu_p S);
void stu_find(stu_p S);
void stu_repeatdel(stu_p S);
void stu_free(stu_p S);
#endif                                   

 实现效果

申请顺序表成功
1.添加学生信息	2.遍历学生信息	3.插入学生信息	4.删除学生信息
5.查找学生信息	6.修改学生信息	7.删除重复信息	8.退出信息系统
请输入选项:1
请输入学生姓名:1
请输入学生id:1
——————————————
[1]姓名:1	ID:1
——————————————
1.添加学生信息	2.遍历学生信息	3.插入学生信息	4.删除学生信息
5.查找学生信息	6.修改学生信息	7.删除重复信息	8.退出信息系统
请输入选项:1
请输入学生姓名:2
请输入学生id:2
——————————————
[1]姓名:1	ID:1
[2]姓名:2	ID:2
——————————————
1.添加学生信息	2.遍历学生信息	3.插入学生信息	4.删除学生信息
5.查找学生信息	6.修改学生信息	7.删除重复信息	8.退出信息系统
请输入选项:1
请输入学生姓名:3
请输入学生id:3
——————————————
[1]姓名:1	ID:1
[2]姓名:2	ID:2
[3]姓名:3	ID:3
——————————————
1.添加学生信息	2.遍历学生信息	3.插入学生信息	4.删除学生信息
5.查找学生信息	6.修改学生信息	7.删除重复信息	8.退出信息系统
请输入选项:1
请输入学生姓名:1
请输入学生id:4
——————————————
[1]姓名:1	ID:1
[2]姓名:2	ID:2
[3]姓名:3	ID:3
[4]姓名:1	ID:4
——————————————
1.添加学生信息	2.遍历学生信息	3.插入学生信息	4.删除学生信息
5.查找学生信息	6.修改学生信息	7.删除重复信息	8.退出信息系统
请输入选项:5
请输入学生的ID:4
[4]姓名:1	ID:4
1.添加学生信息	2.遍历学生信息	3.插入学生信息	4.删除学生信息
5.查找学生信息	6.修改学生信息	7.删除重复信息	8.退出信息系统
请输入选项:6
请输入要修改的位置:4
请输入学生姓名:4
请输入学生id:4
——————————————
[1]姓名:1	ID:1
[2]姓名:2	ID:2
[3]姓名:3	ID:3
[4]姓名:4	ID:4
——————————————
1.添加学生信息	2.遍历学生信息	3.插入学生信息	4.删除学生信息
5.查找学生信息	6.修改学生信息	7.删除重复信息	8.退出信息系统
请输入选项:1
请输入学生姓名:1
请输入学生id:5
——————————————
[1]姓名:1	ID:1
[2]姓名:2	ID:2
[3]姓名:3	ID:3
[4]姓名:4	ID:4
[5]姓名:1	ID:5
——————————————
1.添加学生信息	2.遍历学生信息	3.插入学生信息	4.删除学生信息
5.查找学生信息	6.修改学生信息	7.删除重复信息	8.退出信息系统
请输入选项:1
请输入学生姓名:1
请输入学生id:1
——————————————
[1]姓名:1	ID:1
[2]姓名:2	ID:2
[3]姓名:3	ID:3
[4]姓名:4	ID:4
[5]姓名:1	ID:5
[6]姓名:1	ID:1
——————————————
1.添加学生信息	2.遍历学生信息	3.插入学生信息	4.删除学生信息
5.查找学生信息	6.修改学生信息	7.删除重复信息	8.退出信息系统
请输入选项:7
——————————————
[1]姓名:1	ID:1
[2]姓名:2	ID:2
[3]姓名:3	ID:3
[4]姓名:4	ID:4
[5]姓名:1	ID:5
——————————————
1.添加学生信息	2.遍历学生信息	3.插入学生信息	4.删除学生信息
5.查找学生信息	6.修改学生信息	7.删除重复信息	8.退出信息系统
请输入选项:8
已退出

一个学生信息还可封装在一个学生结构体中,使用顺序结构体嵌套学生结构体。

此方法在一个学生的信息较多时可以使用,方便学生信息覆盖时代码的书写。

标签:顺序,管理系统,堆区,信息,学生,stu,printf,id,ID
From: https://blog.csdn.net/weixin_73503608/article/details/140251063

相关文章

  • Java计算机毕业设计美容机构管理系统(开题+源码+论文)
    本系统(程序+源码)带文档lw万字以上 文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容研究背景随着人们生活水平的提高和美容意识的增强,美容行业迎来了前所未有的发展机遇。然而,传统的美容机构管理模式往往存在效率低下、信息孤岛、顾客体验不佳......
  • 数据结构:二叉树的顺序结构及代码实现
    一:二叉树的顺序结构普通的二叉树是不适合用数组来存储的,因为可能会存在大量的空间浪费。而完全二叉树更适合使用顺序结构存储。现实中我们通常把堆(一种二叉树)使用顺序结构的数组来存储,需要注意的是这里的堆和操作系统虚拟进程地址空间中的堆是两回事,一个是数据结构,一个是操......
  • 【Spring Boot】基于 JPA 开发的文章管理系统(CRUD)
    《JPA从入门到精通》系列包含以下文章:Java持久层API:JPA认识JPA的接口JPA的查询方式基于JPA开发的文章管理系统(CRUD)关系映射开发(一):一对一映射关系映射开发(二):一对多映射关系映射开发(三):多对多映射基于JPA开发的文章管理系统(CRUD)1.实现文章实体2.实现......
  • mybatis-plus中last和orderBy的连用的使用顺序
    1. mybatis-plus中last和orderBy的连用的使用顺序在MyBatis-Plus中,last方法用于在构建查询时添加自定义的SQL片段,而orderBy方法用于指定排序规则。当你想要结合使用这两个方法时,可以先调用orderBy指定排序规则,然后调用last添加自定义的SQL片段。@Autowired......
  • 基于Django+微信小程序的旅游资源信息管理系统(免费领源码+数据库)可做计算机毕业设计JA
    django广西-东盟旅游资源信息管理系统小程序摘 要在社会快速发展和人们生活水平提高的影响下,旅游产业蓬勃发展,旅游形式也变得多样化,使旅游资源信息的管理变得比过去更加困难。依照这一现实为基础,设计一个快捷而又方便的基于小程序的旅游资源信息管理系统是一项十分重要并且......
  • 商城项目库存管理系统采购需求查询------商城项目
    packagecom.alatus.mall.ware.service.impl;importorg.apache.commons.lang.StringUtils;importorg.springframework.stereotype.Service;importjava.util.Map;importcom.baomidou.mybatisplus.core.conditions.query.QueryWrapper;importcom.baomidou.mybatisplu......
  • 【计算机毕业设计】springboot基于Android的大学生勤工助学管理系统设计与实现
    大学生勤工助学管理系统设计的目的是为用户提供企业招聘、已投简历等方面的平台。与PC端应用程序相比,大学生勤工助学管理系统的设计主要面向于大学生勤工助学,旨在为管理员和学生、企业提供一个Android的大学生勤工助学管理系统。学生可以通过Android及时查看企业招聘等。......
  • 基于SpringBoot+Vue的科研管理系统设计与实现(源码+lw+数据库+讲解)
    文章目录前言详细视频演示项目运行截图技术框架后端采用SpringBoot框架前端框架Vue可行性分析系统测试系统测试的目的系统功能测试数据库表设计代码参考数据库脚本为什么选择我?获取源码前言......
  • 基于SpringBoot+Vue的课表管理系统设计与实现(源码+lw+数据库+讲解)
    文章目录前言详细视频演示项目运行截图技术框架后端采用SpringBoot框架前端框架Vue可行性分析系统测试系统测试的目的系统功能测试数据库表设计代码参考数据库脚本为什么选择我?获取源码前言......
  • 基于SpringBoot+Vue的影城会员管理系统设计与实现(源码+lw+数据库+讲解)
    文章目录前言详细视频演示项目运行截图技术框架后端采用SpringBoot框架前端框架Vue可行性分析系统测试系统测试的目的系统功能测试数据库表设计代码参考数据库脚本为什么选择我?获取源码前言......