将学生的信息,以顺序表的方式存储(堆区),并且实现封装函数 :
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