【Linux C编程】学生信息管理系统

此学生管理系统是本人用Linux系统下vim编辑器编写的,该学生管理系统主要运用于可以存储学生信息,同时也可以对现有的学生信息进行添加、删除、修改、搜索、排序等相关功能。供学习者参考!!!

此学生管理系统运用到的是enum枚举体数据类型、struct结构体数据类型。 不了解enum(枚举)如何运用的童鞋可以看一下我的另一篇博客有关enum(枚举)知识点介绍。

enum(枚举)知识点链接:https://blog.csdn.net/weixin_50019298/article/details/114630558

好了,废话不多说,我们直接进入正题!

流程图

开始
学生信息系统菜单选项
输入1
添加学生信息
是否退出系统?
输入2
删除学生信息
输入3
修改学生信息
输入4
搜索学生信息
输入5
排序学生信息
结束

一、定义一个枚举体做菜单目录

主要是为获取到枚举体里的数字信息1、2、3、4、5(注意: 第一个枚举成员的默认值为整型的 0, 后续枚举成员的值在前一个成员上加 1。 我们在这个实例中把第一个枚举成员的值定义为 1,第二个就为 2,以此类推。)

#include <stdio.h>
#include <string.h>
#define MAX 20   //设定20名学生
enum         //枚举体
{
    
    
    INSERT =1,
    DELETE,
    MODIF,
    SEARCH,
    SORT
};

二、定义两个结构体

一个用于存储学生的基本信息,一个用于存储学生班级的人数。

typedef struct
{
    
    
    int id;	//学生id
    char name[20];	//姓名   设定可以存储20名学生,根据自己情况修改!
    int age;	//身高
    int score;	//分数
}Student;

typedef struct
{
    
    
    Student stu[MAX];  //存储学生个人信息
    int num;
}CLASS;

三、定义一个菜单函数

void menu(void)  //菜单:
{
    
    
    printf("学生系统 student\n");
    printf("1;添加 INSERT\n");
    printf("2:删除 DELETE\n");
    printf("3:修改 MODIF\n");
    printf("4:搜索 SEARCH\n");
    printf("5:排序 SORT\n");
    printf("=====================================\n");

    return ;
}

四、添加、删除、修改、搜索、排序相关代码

//添加
int insert(CLASS *class )
{
    
    
	 int i = class->num;

	printf("输入ID : ");
	scanf("%d",&class->stu[i].id);

	printf("输入名字 : ");
	scanf("%s",class->stu[i].name);
	getchar();

	printf("输入年龄 : ");
	scanf("%d",&class->stu[i].age);

	printf("输入分数 : ");
	scanf("%d",&class->stu[i].score);

	class->num++;

	return 0;
}

//删除
int delete(CLASS *class,int student_number)
{
    
    
	int i = 0;
	for(i = 0; i < class->num; i++)
	{
    
    
		if(class->stu[i].id == student_number)
	 		{
    
    
				while(i < class->num)
				{
    
    
					class->stu[i] = class->stu[i+1];
					i++;
				}

				class->num--;
				printf("删除完成!\n");

				return -1;
			}
	}
			printf("删除未完成!\n ");

	return 0;
}

//修改
int modif(CLASS *class, int student_number)
{
    
    
	int i = 0;
	for(i = 0; i < class->num; i++)
	{
    
    
		if(class->stu[i].id == student_number)
		{
    
    
			printf("输入新的ID : ");
			scanf("%d",&class->stu[i].id); 

			printf("输入新的名字 : ");
			scanf("%s",class->stu[i].name); 
			getchar();

			printf("请输入年龄 : ");
			scanf("%d",&class->stu[i].age); 

			printf("请输入分数 : ");
			scanf("%d",&class->stu[i].score);

			printf("输入完成!\n");
			return -1;
		}
	}
			printf("输入错误!\n");

	return 0; 
}

//查找
int search(CLASS *class,int student_number)
{
    
    
	int i = 0;
	for(i = 0; i < class->num; i++)
	{
    
    
		if(class->stu[i].id == student_number)
		{
    
    
			printf("ID=====>%d\n",class->stu[i].id);
			printf("名字=====>%s\n",class->stu[i].name);
			printf("年龄=====>%d\n",class->stu[i].age);
			printf("分数=====>%d\n",class->stu[i].score);
			return -1;
		}
	}
			printf("查找错误!\n");
	
	return 0;
}

//排序
int sort(CLASS *class)
{
    
    
	int i ,j;
	Student temp;
	
	//冒泡排序
	for(i = 0; i < class->num; i++)
		for(j = i + 1; j < class->num; j++)
		{
    
    
			if(class->stu[i].id > class->stu[j].id)
			{
    
    
				temp = class->stu[i];
				class->stu[i] = class->stu[j];
				class->stu[j] = temp;
			}
		}

	for(i = 0; i < class->num; i++)
		printf("%d\n",class->stu[i].id);
		printf("排序完成\n");

	return 0;
}

五、主函数

其中运用到了switch() 是为了获取前面定义enum(枚举)对应的值。

int main()
{
    
    
    CLASS *class;
    class->num = 0;
    int cmd = 0;
	int student_number;
out:	
    menu();
    printf("请选择你的输入 :");
    scanf("%d",&cmd);

    switch(cmd)
    {
    
    
    case INSERT: //同 case 1: 
        insert(class);
		goto out;

    case DELETE: //同 case 2: 
        printf("输入删除的ID : ");
		scanf("%d",&student_number);
		delete(class,student_number);
		goto out;

    case MODIF:	//同 case 3: 
        printf("输入修改的ID : ");
		scanf("%d",&student_number);
		modif(class,student_number);
		goto out;

    case SEARCH: //同 case 4: 
        printf("输入搜索的ID : ");
		scanf("%d",&student_number);
		search(class,student_number);
		goto out;
		
    case SORT: //同 case 5: 
		sort(class);
		goto out;

    default:
        printf("输入错误!\n");

    }

    return 0;
}

完整代码

#include <stdio.h>
#include <string.h>
#define MAX 20   //设定20名学生
enum         //枚举体
{
    
    
    INSERT =1,
    DELETE,
    MODIF,
    SEARCH,
    SORT
};

typedef struct
{
    
    
    int id;	//学生id
    char name[20];	//姓名   设定可以存储20名学生,根据自己情况修改!
    int age;	//身高
    int score;	//分数
}Student;

typedef struct
{
    
    
    Student stu[MAX];  //存储学生个人信息
    int num;
}CLASS;

void menu(void)  //菜单:
{
    
    
    printf("学生系统 student\n");
    printf("1;添加 INSERT\n");
    printf("2:删除 DELETE\n");
    printf("3:修改 MODIF\n");
    printf("4:搜索 SEARCH\n");
    printf("5:排序 SORT\n");
    printf("=====================================\n");

    return ;
}

//添加
int insert(CLASS *class )
{
    
    
	 int i = class->num;

	printf("输入ID : ");
	scanf("%d",&class->stu[i].id);

	printf("输入名字 : ");
	scanf("%s",class->stu[i].name);
	getchar();

	printf("输入年龄 : ");
	scanf("%d",&class->stu[i].age);

	printf("输入分数 : ");
	scanf("%d",&class->stu[i].score);

	class->num++;

	return 0;
}

//删除
int delete(CLASS *class,int student_number)
{
    
    
	int i = 0;
	for(i = 0; i < class->num; i++)
	{
    
    
		if(class->stu[i].id == student_number)
	 		{
    
    
				while(i < class->num)
				{
    
    
					class->stu[i] = class->stu[i+1];
					i++;
				}

				class->num--;
				printf("删除完成!\n");

				return -1;
			}
	}
			printf("删除未完成!\n ");

	return 0;
}

//修改
int modif(CLASS *class, int student_number)
{
    
    
	int i = 0;
	for(i = 0; i < class->num; i++)
	{
    
    
		if(class->stu[i].id == student_number)
		{
    
    
			printf("输入新的ID : ");
			scanf("%d",&class->stu[i].id); 

			printf("输入新的名字 : ");
			scanf("%s",class->stu[i].name); 
			getchar();

			printf("请输入年龄 : ");
			scanf("%d",&class->stu[i].age); 

			printf("请输入分数 : ");
			scanf("%d",&class->stu[i].score);

			printf("输入完成!\n");
			return -1;
		}
	}
			printf("输入错误!\n");

	return 0; 
}

//查找
int search(CLASS *class,int student_number)
{
    
    
	int i = 0;
	for(i = 0; i < class->num; i++)
	{
    
    
		if(class->stu[i].id == student_number)
		{
    
    
			printf("ID=====>%d\n",class->stu[i].id);
			printf("名字=====>%s\n",class->stu[i].name);
			printf("年龄=====>%d\n",class->stu[i].age);
			printf("分数=====>%d\n",class->stu[i].score);
			return -1;
		}
	}
			printf("查找错误!\n");
	
	return 0;
}

//排序
int sort(CLASS *class)
{
    
    
	int i ,j;
	Student temp;
	
	//冒泡排序
	for(i = 0; i < class->num; i++)
		for(j = i + 1; j < class->num; j++)
		{
    
    
			if(class->stu[i].id > class->stu[j].id)
			{
    
    
				temp = class->stu[i];
				class->stu[i] = class->stu[j];
				class->stu[j] = temp;
			}
		}

	for(i = 0; i < class->num; i++)
		printf("%d\n",class->stu[i].id);
		printf("排序完成\n");

	return 0;
}

总结

  实践是检验真理的唯一标准,自己独立编写才能更好的吸收消化,只有重复练习才能完成加深自己逻辑思维,并且可以对此学生信息管理系统功能扩展,完成一个功能齐全、方便用户操作的学生管理系统。

猜你喜欢

转载自blog.csdn.net/weixin_50019298/article/details/114632335