结构(线性表)

0 头文件及全局变量

#define _CRT_SECURE_NO_WARNINGS //防止报错,也可以使用scanf_s更安全
#include<stdio.h>
#include<stdlib.h>
#include<malloc.h>

int stunum = 0;//学生数量
#define initnum 5 //最大数量

1 菜单栏

//1 菜单栏
void menu()
{
   
	printf("\t\t****Welcome to student Administration System****\n");
	printf("\t\t****************************************\n");
	printf("\t\t*1)Display all student information********\t\n");
	printf("\t\t*2)Delete student information*************\t\n");
	printf("\t\t*3)Add Student information****************\t\n");
	printf("\t\t*4)Modify student information*************\t\n");
	printf("\t\t*5)Query student information**************\t\n");
	printf("\t\t*6)exit **************\t\n");
	printf("\t\t*7)clear **************\t\n");
	printf("\t\t*8)sort **************\t\n");
	printf("\t\t****************************************\n");
}

2 存储数据:结构体封装

//2 存储数据
/* 信息的属性: 学号&姓名 */
typedef struct StudentData_
{
   
	int ID;
	char name[20];
}SD;

3 基本功能:

3.1显示所有信息
//3 基本功能
//3.1 显示所有学生信息

void showTotalScore(SD* sd,int sdnum)
{
   
	for (int i = 0; i < sdnum; i++)
	{
   
		printf("ID:%d\tName:%s\n", sd[i].ID, sd[i].name);
	}
}
3.2 添加一条信息
//3.2 添加学生信息
void addSI(SD* sd)
{
   
	if (stunum >= initnum)
	{
   
		printf("抱歉,空间已满,无法添加了!!!\n");
		return;
	}
	SD as;
	printf("请输入该学生的学号:");
	scanf("%d", &as.ID);
	printf("请输入该学生的姓名:");
	scanf("%s", as.name);
	sd[stunum++] = as;
	printf("添加成功\n");

}
3.3修改某一个数据
//3.3 修改学生信息
void modify(SD* sd,int sdnum)
{
   
	int mId;
	int flag=0;
	int id;
	printf("请输入你想修改的学生的学号:\n");
	scanf("%d", &mId);
	for (int i = 0; i < sdnum; i++)
	{
   
		if (mId == sd[i].ID)
		{
   
			id = i;
			flag = 1;
		}
	}
	if (flag == 1)
	{
   
		printf("找到了学号为%d的同学\n", mId);
		printf("修改名字为:");
		scanf("%s", sd[id].name);
		printf("修改成功!!!\n");
	}
	else
	{
   
		printf("没找到啊,抱歉!\n");
	}

}
3.4删除一条信息
//3.4 删除学生信息
void deletesd(SD* sd, int sdnum)
{
   
	int mId;
	int flag = 0;
	int id;
	printf("请输入你想删除的学生的学号:");
	scanf("%d", &mId);
	for (int i = 0; i < sdnum; i++)
	{
   
		if (mId == sd[i].ID)
		{
   
			id = i;
			flag = 1;

			printf("找到了!!!\n");
		}
	}
	if (flag == 1)
	{
   
		stunum--;
		for (int i = 0; i < sdnum; i++)
		{
   
			sd[id] = sd[id + 1];
		}
		
	}
	else
	{
   
		printf("抱歉,没找到啊!\n");
	}
}

3.5查找学生信息
//3.5 查找学生信息
void querysd(SD* sd,int sdnum)
{
   
	int id;
	int mId;
	int flag=0;
	printf("请输入你想查找的学生的学号:");
	scanf("%d", &id);
	for (int i = 0; i < sdnum; i++)
	{
   
		if (id == sd[i].ID)
		{
   
			flag = 1;
			mId = i;
		}
	}
	if (flag == 1)
	{
   
		printf("恭喜!找到了%d.\n", id);
		printf("学生具体信息为:\n");
		printf("ID:%d\tName:%s\n", sd[mId].ID, sd[mId].name);

	}
	else
	{
   
		printf("抱歉了,查无此人!!!\n");
	}
}

4 扩展

4.1 排序(冒泡)
//4.1 排序(冒泡)
void sort_bub(SD* sd,int sdnum)
{
   
	for (int i = 0; i < sdnum-1; i++)
	{
   
		for (int j = 0; j < sdnum-i-1; j++)
		{
   
			if (sd[j].ID > sd[j+1].ID)
			{
   
				SD t = sd[j];
				sd[j] = sd[j + 1];
				sd[j + 1] = t;
			}
		}
	}
	printf("排序成功!!!\n");
}

5 主函数

int main()
{
   
	menu();

	SD stu[initnum];
	int select;

	while (1)
	{
   
		printf("请输入数字来操作:");
		scanf("%d", &select);
		switch (select)
		{
   
		case 1:
			showTotalScore(stu, stunum);
			break;
		case 2:
			deletesd(stu, stunum);
			break;
		case 3:
			addSI(stu);
			break;
		case 4:
			modify(stu, stunum);
			break;
		case 5:
			querysd(stu, stunum);
			break;
		case 6:
			exit(0);
		case 7:
			system("cls");
			menu();
			break;
		case 8:
			sort_bub(stu, stunum);
			break;
		default:
			break;
		}

	}


	return 0;
}

ps:需要完整源码的可以找我.