八月四日~八月六日作业

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、思维导图

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值