此学生管理系统是本人用Linux系统下vim编辑器编写的,该学生管理系统主要运用于可以存储学生信息,同时也可以对现有的学生信息进行添加、删除、修改、搜索、排序等相关功能。供学习者参考!!!
此学生管理系统运用到的是enum枚举体数据类型、struct结构体数据类型。 不了解enum(枚举)如何运用的童鞋可以看一下我的另一篇博客有关enum(枚举)知识点介绍。
enum(枚举)知识点链接:https://blog.csdn.net/weixin_50019298/article/details/114630558
好了,废话不多说,我们直接进入正题!
流程图
一、定义一个枚举体做菜单目录
主要是为获取到枚举体里的数字信息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;
}
总结
实践是检验真理的唯一标准,自己独立编写才能更好的吸收消化,只有重复练习才能完成加深自己逻辑思维,并且可以对此学生信息管理系统功能扩展,完成一个功能齐全、方便用户操作的学生管理系统。