自学内容网 自学内容网

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)!