2024.7.18作业

test.h

#ifndef TEST_H
#define TEST_H
#include <myhead.h>
#define MAX 100       //最大容量



//定义学生类型
struct Stu
{
	    char name[20];
    	int age;
    	double score;
};
//定义班级类型
typedef struct
{
    	struct Stu student[MAX];       //存放学生的容器
    	int size;                      //实际人数
}Class,*ClassPtr;



//学生信息录入函数
void shuru(ClassPtr L);

//学生信息输出函数
void shuchu(const ClassPtr L);

//求学生成绩最好和最差的学生的函数
void maximum(const ClassPtr L);

//排序函数
void sort(ClassPtr L);

//声明顺序表的创建函数
ClassPtr create();

//释放空间函数
void xiaohui(ClassPtr *L);

//判空函数
int empty(ClassPtr L);

//判满函数
int full(ClassPtr L);

//定义任意位置插入函数
int insert_pos(ClassPtr L);

//定义任意位置删除函数
int delete_pos(ClassPtr L);


#endif

test.c

#include "test.h"


//学生信息录入函数
void shuru(ClassPtr L)
{
	if( NULL == L || full(L) ) 
    	{
        	printf("error\n");
        	return ;
    	}
	int n=0;    
	printf("要录入学生信息的个数>>");
	scanf("%d",&n);
	for(int i=L->size;i<n+L->size;i++)
	{
		printf("请输入第%d个学生的姓名:",i+1);
		scanf("%s",L->student[i].name);
		printf("请输入第%d个学生的年龄:",i+1);
		scanf("%d",&L->student[i].age);
		printf("请输入第%d个学生的成绩:",i+1);
		scanf("%lf",&L->student[i].score);
		printf("\n");
	}
	L->size+=n;
}


//学生信息输出函数
void shuchu(const ClassPtr L)
{
	if( NULL == L || empty(L) )
    	{
        	printf("输出失败\n");
        	return ;
    	}	
	printf("学生信息如下:\n");
	printf("姓名\t年龄\t成绩\n");
	for(int i=0;i<L->size;i++)
	{
		printf("%s\t%d\t%.2lf\n",L->student[i].name,L->student[i].age,L->student[i].score);
	}
}


//查找学生成绩最好和最差的学生的函数 
void maximum(const ClassPtr L)
{
	if( NULL == L || empty(L) )
    	{
        	printf("查找失败\n");
        	return ;
    	}
	int max=0,min=0;
	for(int i=0;i<L->size;i++)
	{
		if(L->student[i].score>L->student[max].score)  
		{
			max=i;
		}
		if(L->student[i].score<L->student[min].score)
		{
			min=i;
		}
	}
	printf("成绩最好的学生是%s\n",L->student[max].name);
	printf("成绩最差的学生是%s\n",L->student[min].name);
}


//排序函数 
void sort(ClassPtr L)
{
	if( NULL == L || empty(L) )
    	{
        	printf("排序失败\n");
        	return ;
    	}
	int n=L->size;
	for(int i=1;i<n;i++)
	{
		for(int j=0;j<n-i;j++)
		{
			if(L->student[j].score<L->student[j+1].score)
			{
				struct Stu temp=L->student[j];
				L->student[j]=L->student[j+1];
				L->student[j+1]=temp;
			}
		}
	}
}


//声明顺序表的创建函数
ClassPtr create()
{
    	ClassPtr L=(ClassPtr)malloc(sizeof(Class));
    	if(NULL == L)
    	{
       	 	printf("申请失败\n");
        	return NULL;
    	}

    	//程序执行至此,表示内存申请成功
    	//给内存空间进行初始化
    	memset(L->student,0,sizeof(L->student));

    	//将内存地址返回
    	return L;
}


//释放空间函数
void xiaohui(ClassPtr *L)    
{
	if(NULL != *L)
    	{
        	free(*L);       //释放空间
        	*L = NULL;
    	}
}


//判空函数
int empty(ClassPtr L)
{
	return L->size==0;
}


//判满函数
int full(ClassPtr L)
{
	return L->size==MAX;
}


//任意位置插入函数
int insert_pos(ClassPtr L)
{
	int pos=0;
	printf("请输入插入学生信息的位置:");
	scanf("%d",&pos);
	if( L==NULL || full(L) || pos<0 || pos>L->size )
	{
		printf("插入失败\n");
		return -1;
	}
	for(int i=L->size-1;i>=pos;i--)
	{
		L->student[i+1]=L->student[i];
	}
	printf("请输入插入学生的姓名:");
        scanf("%s",L->student[pos].name);
        printf("请输入插入学生的年龄:");
        scanf("%d",&L->student[pos].age);
        printf("请输入插入学生的成绩:");
        scanf("%lf",&L->student[pos].score);
        printf("\n");

	L->size++;
}


//任意位置删除函数
int delete_pos(ClassPtr L)
{
	int pos=0;
	printf("请输入删除学生信息的位置:");
	scanf("%d",&pos);
	if( L==NULL || empty(L) || pos<0 || pos>=L->size )
	{
		printf("删除失败\n");
		return -1;
	}
	for(int i=pos;i<L->size-1;i++)
	{
		L->student[i]=L->student[i+1];
	}
	L->size--;
}

main.c

#include "test.h"

int main(int argc,const char *argv[])
{

    printf("\t\t********学生管理系统*********\n");
	printf("\t\t1.录入学生信息\n");
	printf("\t\t2.查看当前所有学生信息\n");
	printf("\t\t3.查询成绩最高和最低学生信息\n");
	printf("\t\t4.按成绩进行排序\n");
	printf("\t\t5.插入学生信息\n");
	printf("\t\t6.删除学生信息\n");
	printf("\t\t7.销毁数据\n");
	printf("\t\t8.退出\n");
 
	int meau=0;
	int size=0;       //数组实际大小
	ClassPtr L = create();
    	if(NULL == L)
    	{
        	return -1;
    	}
	while(1)
	{
		printf("请输入>>>");
		scanf("%d",&meau);   
		switch(meau)
		{
			case 1:
				shuru(L);
				break;
			case 2:
				shuchu(L);
				break;
			case 3:
				maximum(L);
				break;
			case 4:
				sort(L);
				break;
			case 5:
				insert_pos(L);
				break;
			case 6:
				delete_pos(L);
				break;
			case 7:
				xiaohui(&L);
				break;
			case 8:
				exit(0);
			default:
				printf("输入错误,请重新输入\n");
				break;
		}
	}
        return 0;
}

思维导图

相关推荐

  1. 20240718训练题目

    2024-07-18 18:44:01       15 阅读
  2. OPenCV批量实现直方图均衡化----20240718

    2024-07-18 18:44:01       17 阅读
  3. 作业..........

    2024-07-18 18:44:01       50 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-18 18:44:01       67 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-18 18:44:01       72 阅读
  3. 在Django里面运行非项目文件

    2024-07-18 18:44:01       58 阅读
  4. Python语言-面向对象

    2024-07-18 18:44:01       69 阅读

热门阅读

  1. C语言 goto语句

    2024-07-18 18:44:01       19 阅读
  2. llama-cpp-python

    2024-07-18 18:44:01       21 阅读
  3. sqlalchemy定期保持mysql连接活跃

    2024-07-18 18:44:01       19 阅读
  4. 如何处理客户暗战

    2024-07-18 18:44:01       19 阅读
  5. 数据库:SQL 函数有哪些?

    2024-07-18 18:44:01       25 阅读
  6. C++中const修饰指针的范围

    2024-07-18 18:44:01       19 阅读
  7. X86架构和ARM架构的区别

    2024-07-18 18:44:01       19 阅读
  8. C# 使用模式匹配的好处,因为好用所以推荐~

    2024-07-18 18:44:01       25 阅读
  9. 大语言模型系列:Transformer

    2024-07-18 18:44:01       20 阅读
  10. SpringBoot日常:常用数据类型比较

    2024-07-18 18:44:01       21 阅读
  11. 如何查看Linux中某个项目是否在Docker中运行

    2024-07-18 18:44:01       18 阅读
  12. 如何发掘孩子的兴趣特长

    2024-07-18 18:44:01       18 阅读