1、简易班级信息管理系统
头文件
#ifndef _LX_H_
#define _LX_H_
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define MAX 40 //定义顺序表的最大容量
//定义一个学生类型
typedef struct
{
char name[40]; //姓名
char sex[20]; //性别
int score; //分数
}Stu;
//定义班级的类型
typedef struct
{
Stu data[MAX]; //存储学生的数组
int len; //当前班级学生的人数
}Class,*Class_Ptr;
//创建班级空间
Class_Ptr class_create();
//判满
int class_full(Class_Ptr C);
//判空
int class_empty(Class_Ptr C);
//向班级空间中添加学生元素
int class_add(Class_Ptr C,Stu s);
//录入学生信息
void class_input(Class_Ptr C);
//输出班级中学生信息
void class_show(Class_Ptr C);
//任意位置插入学生信息
int class_insert_pos(Class_Ptr C);
//删除任意位置的学生信息
int class_delete_pos(Class_Ptr C);
//按学生姓名进行查找信息,并输出信息在空间的位置
int class_search_value(Class_Ptr C);
//按学生姓名进行修改信息
int class_update(Class_Ptr C);
//对学生按成绩进行排名
void class_sort(Class_Ptr C);
//释放班级空间
void class_free(Class_Ptr C);
#endif
源文件
#include"lx.h"
//创建班级空间
Class_Ptr class_create()
{
//在堆区申请一个班级的空间大小
Class_Ptr C=(Class_Ptr)malloc(sizeof(Class));
//判断是否申请成功
if(NULL==C)
{
printf("班级创建失败\n");
return NULL;
}
//此时班级空间已经创建成功
memset(C->data,0,sizeof(C->data)); //清空数组
C->len=0; //数组长度清零
printf("班级创建成功\n");
return C;
}
/*****************************************************************************/
//判满,成功返回真,失败返回假
int class_full(Class_Ptr C)
{
//判断逻辑
if(NULL==C)
{
printf("所给班级空间不合法\n");
return 0;
}
//合法则返回是否已经满了
return C->len==MAX;
}
/*****************************************************************************/
//判空,如果空返回真,非空返回假
int class_empty(Class_Ptr C)
{
//判断逻辑
if(NULL==C)
{
printf("所给班级空间不合法\n");
return 0;
}
//合法返回是否空
return C->len==0;
}
/*****************************************************************************/
//向班级空间中添加学生元素
int class_add(Class_Ptr C,Stu s)
{
if(NULL==C||class_full(C))
{
printf("添加失败\n");
return 0;
}
//可以进行添加工作
C->data[C->len]=s; //将数据添加到尾端
//班级人数自增1
C->len++;
printf("添加成功\n");
return 1;
}
/*****************************************************************************/
//录入学生信息
void class_input(Class_Ptr C)
{
//判断逻辑
if(NULL==C||class_full(C))
{
printf("录入失败\n");
}
//开始进行录入学生信息
printf("开始进行录入信息\n");
while(1)
{
Stu s; //定义一个学生
printf("请输入学生的姓名: ");
scanf("%s",s.name);
printf("请输入学生的性别: ");
scanf("%s",s.sex);
printf("请输入学生的分数: ");
scanf("%d",&s.score);
//调用添加学生函数
class_add(C,s);
//判断是否要继续录入
char judge[20];
printf("是否继续录入(Y|N): ");
scanf("%s",judge);
if(strcmp(judge,"Y")==0||strcmp(judge,"y")==0)
{
if(C->len<MAX)
{
continue;
}
else
{
printf("操作失败,班级满了\n");
break;
}
}
else if(strcmp(judge,"N")==0||strcmp(judge,"n")==0)
{
break;
}
}
}
/*****************************************************************************/
//输出班级中学生信息
void class_show(Class_Ptr C)
{
//判断逻辑
if(NULL==C||class_empty(C))
{
printf("输出失败\n");
}
//开始输出操作
printf("当前班级学生信息如下\n");
printf("排名\t姓名\t\t性别\t分数\n");
for(int i=0;i<C->len;i++)
{
printf("%d\t%s\t\t%s\t%d\n",i+1,C->data[i].name,C->data[i].sex,\
C->data[i].score);
}
}
/*****************************************************************************/
//任意位置插入学生信息
int class_insert_pos(Class_Ptr C)
{
//输入需要插入元素的位置
printf("请输入需要插入元素的位置: ");
int pos=0;
scanf("%d",&pos);
//判断逻辑
if(NULL==C||class_full(C)||pos<0||pos>C->len)
{
printf("插入失败\n");
return 0;
}
//腾位过程
for(int i=C->len-1;i>=pos;i--)
{
C->data[i+1]=C->data[i]; //将当前元素后移
}
Stu s; //定义一个学生
//输入该学生的信息
printf("请输入学生的姓名: ");
scanf("%s",s.name);
printf("请输入学生的性别: ");
scanf("%s",s.sex);
printf("请输入学生的成绩: ");
scanf("%d",&s.score);
//插入逻辑
C->data[pos]=s; //将新元素放入要插入的位置
//表的变化
C->len++;
printf("插入成功\n");
return 1;
}
/*****************************************************************************/
//删除任意位置的学生信息
int class_delete_pos(Class_Ptr C)
{
//输入需要删除元素的位置
printf("请输入需要删除元素的位置: ");
int pos=0;
scanf("%d",&pos);
//判断逻辑
if(NULL==C||class_empty(C)||pos<0||pos>C->len-1)
{
printf("删除失败\n");
return 0;
}
//删除逻辑
for(int i=pos;i<C->len;i++)
{
C->data[i]=C->data[i+1]; //将元素前移一格
}
//表的变化
C->len--;
printf("删除成功\n");
return 1;
}
/*****************************************************************************/
//按学生姓名进行查找信息,并输出信息在空间的位置
int class_search_value(Class_Ptr C)
{
//判断逻辑
if(NULL==C||class_empty(C))
{
printf("查找失败\n");
return 0;
}
//输入需要查找学生的姓名
printf("请输入需要查找学生的姓名: ");
Stu s;
scanf("%s",s.name);
//查找逻辑
int n=0;
for(int i=0;i<C->len;i++)
{
//判断姓名是否与需要查找的姓名相同
if(strcmp(s.name,C->data[i].name)==0)
{
printf("此学生信息在空间第%d位\n",i);
printf("排名\t姓名\t\t性别\t分数\n");
printf("%d\t%s\t\t%s\t%d\n",i+1,C->data[i].name,C->data[i].sex,\
C->data[i].score);
n=1;
return 1;
}
}
if(n==0)
{
printf("查无此人\n");
return 0;
}
}
/*****************************************************************************/
//按学生姓名进行修改信息
int class_update(Class_Ptr C)
{
//判断逻辑
if(NULL==C||class_empty(C))
{
printf("修改失败\n");
return 0;
}
//输入需要修改学生的姓名
printf("请输入需要修改学生的姓名: ");
Stu s;
scanf("%s",s.name);
//输入新的学生信息
Stu t;
printf("请输入修改后学生的姓名: ");
scanf("%s",t.name);
printf("请输入修改后学生的性别: ");
scanf("%s",t.sex);
printf("请输入修改后学生的成绩: ");
scanf("%d",&t.score);
//修改逻辑
for(int i=0;i<C->len;i++)
{
//判断姓名是否与需要查找的姓名相同
if(strcmp(s.name,C->data[i].name)==0)
{
C->data[i]=t;
printf("修改成功\n");
return 1;
}
}
}
/*****************************************************************************/
//对学生按成绩进行排名
void class_sort(Class_Ptr C)
{
//判断逻辑
if(NULL==C||class_empty(C))
{
printf("排名失败\n");
}
//开始排名
Stu s; //创建一个空瓶子
for(int i=1;i<C->len;i++)
{
for(int j=0;j<C->len-i;j++)
{
if(C->data[j].score<C->data[j+1].score)
{
s=C->data[j];
C->data[j]=C->data[j+1];
C->data[j+1]=s;
}
}
}
printf("排名完成\n");
}
/*****************************************************************************/
//释放班级空间
void class_free(Class_Ptr C)
{
if(NULL!=C)
{
free(C);
C=NULL;
}
printf("释放成功\n");
}
测试文件
#include"lx.h"
int main(int argc, const char *argv[])
{
//调用创建班级空间函数
Class_Ptr C=class_create();
if(NULL==C)
{
return -1;
}
printf("输入1:录入学生信息\n");
printf("输入2:输出班级中学生信息\n");
printf("输入3:任意位置插入学生信息\n");
printf("输入4:删除任意位置的学生信息\n");
printf("输入5:按学生姓名进行查找信息,并输出信息在空间的位置\n");
printf("输入6:按学生姓名进行修改信息\n");
printf("输入7:对学生按成绩进行排名\n");
//选择功能
while(1)
{
printf("请选择功能(1|2|3|4|5|6|7): ");
int i=0;
scanf("%d",&i);
switch(i)
{
case 1:
{
//调用录入学生信息函数
class_input(C);
break;
}
case 2:
{
//调用输出班级中学生信息函数
class_show(C);
break;
}
case 3:
{
//调用任意位置插入学生信息函数
class_insert_pos(C);
break;
}
case 4:
{
//调用删除任意位置的学生信息函数
class_delete_pos(C);
break;
}
case 5:
{
//调用按学生姓名进行查找信息,并输出信息在空间的位置函数
class_search_value(C);
break;
}
case 6:
{
//调用按学生姓名进行修改信息函数
class_update(C);
break;
}
case 7:
{
//调用对学生按成绩进行排名函数
class_sort(C);
break;
}
default:
{
printf("没有此功能\n");
}
}
//判断是否继续使用功能
char judge[20];
printf("是否继续使用功能(Y|N): ");
scanf("%s",judge);
if(strcmp(judge,"Y")==0||strcmp(judge,"y")==0)
{
continue;
}
else if(strcmp(judge,"N")==0||strcmp(judge,"n")==0)
{
break;
}
}
//调用释放班级空间函数
class_free(C);
C=NULL;
return 0;
}
2、思维导图