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;
}
思维导图
原文地址:https://blog.csdn.net/qq_64434282/article/details/140528526
免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!