20240718作业

zuoye.c

#define MAX 100
#include "zuoye.h"


int main(int argc, char const *argv[])
{
int menu=0;
struct Class *ptr=create();
while(1)
{
    print_menu();
    printf("请输入需要的功能:");
    scanf("%d",&menu);
    switch (menu)
    {
    case 1:
    {
        stu_scan(ptr);
    }break;
    case 4:
    {
        stu_print(ptr);
    }break;
    case 2:
    {
        stu_jiang(ptr);
        stu_print(ptr);
    }break;
    case 3:
    {
        stu_max(ptr);
    }break;
    case 5:
    {
        stu_bomm(&ptr);
        stu_print(ptr);
    }
    break;
    case 6:
    {
        zeng(ptr);
    }break;
    case 7:
    {
        shan(ptr);
    }break;
    case 8:
    {
        gai(ptr);
    }break;
    case 9:
    {
        cha(ptr);
    }break;
    case 0:goto END;
    }
}
END:
return 0;
}

zuoye1.c

#include <stdio.h>
#include<stdlib.h>
#include <string.h>
#define MAX 100

struct Stu
{
    char name[20];
    int age;
    int score;
};

struct Class
{
    struct Stu stu[MAX];
    int size;
};

void print_menu()
{
    printf("\t\t=====1.班级创建 学生信息录入=====\n");
    printf("\t\t=====2.按成绩降序=====\n");
    printf("\t\t=====3.成绩中最好最差的学生=====\n");
    printf("\t\t=====4.学生信息输出=====\n");
    printf("\t\t=====5.班级销毁=====\n");
    printf("\t\t=====0.退出=====\n");
    printf("\t\t=====6.增=====\n");
    printf("\t\t=====7.删=====\n");
    printf("\t\t=====8.改=====\n");
    printf("\t\t=====9.查=====\n");
}

int *create()
{
    int *ptr = (int *)malloc(3204);             //Stu结构体占32字节 Class占36字节  10个学生加人数4字节 3204
    if(ptr==NULL)
    {
        printf("申请失败!\n");
        return  NULL;
    }
    memset(ptr,0,3204);
    return ptr;
}

void stu_scan(struct Class *ptr)
{
    printf("请输入班级的人数:");
    scanf("%d",&ptr->size);
    for(int i=0;i<ptr->size;i++)
    {
        getchar();
        printf("请输入第%d位学生的名字:",i+1);
        scanf("%s",ptr->stu[i].name); 
        printf("请输入第%d位学生的年龄:",i+1);
        scanf("%d",&ptr->stu[i].age);
        printf("请输入第%d位学生的成绩:",i+1);
        scanf("%d",&ptr->stu[i].score);
    }
}

void stu_print(struct Class *ptr)
{
    if(NULL == ptr)
    {
        printf("error\n");
        return ;
    }
    printf("姓名\t年龄\t成绩\t\n");
    for(int i=0;i<ptr->size;i++)
    {
        printf("%s\t%d\t%d\t\n",ptr->stu[i].name,ptr->stu[i].age,ptr->stu[i].score);
    }
}

void stu_jiang(struct Class *ptr)
{
    for(int i=1;i<ptr->size;i++)
    {
        for(int j=0;j<ptr->size-i;j++)
        {
            if(ptr->stu[j].score>ptr->stu[j+1].score)
            {
                int temp=ptr->stu[j].score;
                ptr->stu[j].score=ptr->stu[j+1].score;
                ptr->stu[j+1].score=temp;
            }
        }
    }
}

void stu_max(struct Class *ptr)
{
    int max=ptr->stu[0].score;
    int maxi=0;
    int min=ptr->stu[ptr->size-1].score;
    int mini=ptr->size-1;
    for(int i=0;i<ptr->size;i++)
    {
        if(ptr->stu[i].score>max)
        {
            max=ptr->stu[i].score;
            maxi=i;
        }
        if(ptr->stu[i].score<min)
        {
            min=ptr->stu[i].score;
            mini=i;
        }
    }
    printf("成绩最好:%s\t%d\t%d\t\n",ptr->stu[maxi].name,ptr->stu[maxi].age,ptr->stu[maxi].score);
    printf("成绩最差:%s\t%d\t%d\t\n",ptr->stu[mini].name,ptr->stu[mini].age,ptr->stu[mini].score);
}

void stu_bomm(struct Class **ptr)
{
    if(NULL != *ptr)
    {
        free(*ptr);       //释放空间
        *ptr = NULL;
    }
}

int zeng(struct Class *ptr)
{
    int n=0,p=0;
    printf("请输入要增加的位置和增加的学生信息个数:");
    scanf("%d %d",&n,&p);
    if(ptr==NULL||n<0||n>ptr->size)
    {
        printf("添加失败\n");
        return -1;
    }
    for(int j=1;j<=p;j++){
        printf("插入第%d个数据\n",j);
        for(int i=ptr->size;i>n;i--)
        {
            ptr->stu[i]=ptr->stu[i-1];
        }
        printf("请输入该学生的名字:");
        scanf("%s",ptr->stu[n].name); 
        printf("请输入该学生的年龄:");
        scanf("%d",&ptr->stu[n].age);
        printf("请输入该学生的成绩:");
        scanf("%d",&ptr->stu[n].score);
        printf("插入成功\n");
        ptr->size++;
        n++;
}
return 0;
}

int shan(struct Class *ptr)
{
    int n=0;
    printf("请输入要删除的位置:");
    scanf("%d",&n);
    if(ptr==NULL||n<0||n>ptr->size)
    {
        printf("操作失败\n");
        return -1;
    }
    for(int i=n;i<ptr->size;i++)
    {
        ptr->stu[i-1]=ptr->stu[i];
    }
    ptr->size--;
    printf("删除成功\n");
    return 0;
}

int gai(struct Class *ptr)
{
    int n=0;
    printf("请输入要修改的位置:");
    scanf("%d",&n);
    if(ptr==NULL||n<0||n>ptr->size)
    {
        printf("操作失败\n");
        return -1;
    }
    getchar();
    printf("请输入该学生的名字:");
    scanf("%s",ptr->stu[n].name); 
    printf("请输入该学生的年龄:");
    scanf("%d",&ptr->stu[n].age);
    printf("请输入该学生的成绩:");
    scanf("%d",&ptr->stu[n].score);
    printf("修改成功\n");
}

int cha(struct Class *ptr)
{
    char a[10]="";
    if(ptr==NULL)
    {
        printf("操作失败\n");
        return -1;
    }
    printf("请输入你要查找的学生名字\n");
    getchar();
    gets(a);
    for(int i=0;i<ptr->size;i++)
    {
        if(strcmp(a,ptr->stu[i].name)==0)
        {
            printf("要查找的数据在第%d个\n信息为:\n",i+1);
            printf("%s\t%d\t%d\n",ptr->stu[i].name,ptr->stu[i].age,ptr->stu[i].score);
            return 1;
        }
    }
    printf("查找不到\n");
    return 0;
}

zuoye.h

#ifndef  test_h
#define test_h
struct Stu;
struct Class;
void print_menu();
int *create();
void stu_scan(struct Class *ptr);
void stu_print(struct Class *pt);
void stu_jiang(struct Class *pt);
void stu_max(struct Class *pt);
void stu_bomm(struct Class **ptr);

int zeng(struct Class *ptr);

int shan(struct Class *ptr);

int gai(struct Class *ptr);

int cha(struct Class *ptr);

#endif

效果图

思维导图:

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值