您的位置:首页 > 运维架构 > Linux

2019/1/9 学习linuxC第八天 作业:结构体编写学生信息管理系统(答案外加自己做的)

2019-01-09 15:43 477 查看

/*
5.(用结构体数组来做,链表学完用链表做)
菜单:
        ********学生信息管理系统********
                   1. 添加信息          
                   2. 删除信息          
                   3. 修改信息          
                   4. 查询信息          
                   0. 退出系统          
        ********************************
        请输入你要想执行的操作(0-4):
//结构体元素   
//指针写
struct std student[100];

int main()
{
while(1)
{
    int num;
    menu();
    scanf(“%d”,num);
    switch(num)
    {
        case 1:add();break;
        case 2:dele();break;
        case 3:change();break;
        case 4:search();break;
        case 0:retrun 0;break;
    }
}
}
*/
//把老师的答案过一遍
/*
 #include <string.h>
  void *memset( void *buffer, int ch, size_t count );
 

功能: 函数拷贝ch 到buffer 从头开始的count 个字符里, 并返回buffer指针。 memset() 可以应用在将一段内存初始化为某个值。例如:

    memset( the_array, '\0', sizeof(the_array) );
这是将一个数组的所有分量设置成零的很便捷的方法。
总结:给个地址,赋要填充的值,最后决定要添加的空间大小
*/

#include <stdio.h>
#include "string.h"

struct std
{
    char name[20];
    int id;
    int score;    
};
void menu(void);
int add(void);
int look(void);
int change(void);
int dele(void);
struct std student[100];

int main()
{
    while(1)
    {
        int num = 0;
        menu();
        scanf("%d",&num);
        switch(num)
        {
            case 0:return 0;break;
            case 1:add();break;
            case 2:dele();break;
            case 3:change();break;
            case 4:look();break;            
        }        
    }
}

void menu(void)
{
    printf("1 添加信息\n");
    printf("2 删除信息\n");
    printf("3 修改信息\n");
    printf("4 查询信息\n");
    printf("0 退出系统\n");    
}
/*
    功能:添加学生信息
    id name score
    student[100];
*/

int add(void)
{
    int id = 0;
    printf("请输入学号:\n");
    scanf("%d",&id);
    if(student[id].id != 0)
    {
        printf("该学生已存在。\n");
        return -1;        
    }
    else
    {
        student[id].id = id;
        printf("请输入姓名:\n");
        scanf("%s",student[id].name);
        printf("请输入成绩:\n");
        scanf("%d",&student[id].score);
        printf("添加成功。\n");
        return 0;        
    }
}
int look(void)
{
    int id = 0;
    printf("请输入学号:\n");
    scanf("%d",&id);
    if(student[id].id == 0)
    {
        printf("没有学生存在。\n");
        return -1;        
    }
    else
    {
        printf("姓名:%s 学号:%d 成绩:%d\n",student[id].name,student[id].id,student[id].score);
        return 0;
    }
}

int change(void)
{
    int id = 0;
    printf("请输入要修改的学号:\n");
    scanf("%d",&id);
    if(student[id].id == 0)
    {
        printf("没有该学生。\n");
        return -1;        
    }
    else
    {
        printf("请输入新的姓名。\n");
        scanf("%s",student[id].name);
        printf("请输入新的成绩。\n");
        scanf("%d",&student[id].score);
        printf("修改成功。\n");
        return 0;    
    }
}

int dele(void)
{
    int id = 0;
    printf("请输入删除学号:\n");
    scanf("%d",&id);
    if(student[id].id == 0)
    {
        printf("没有该学生。\n");
        return -1;    
    }
    else
    {
        //student[id];清空
        memset(&student[id],0,sizeof(struct std));
        printf("删除成功。\n");
        return 0;
    }
}


#include <stdio.h>
#include "string.h"

struct std{
    int flag;  //flag 用来判断数据是否存在
    int num;  //学号
    char name[20];  //姓名
    char gender[10];
    int score;
    
};
struct std student[100] = {0};

void menu1(void); //主菜单

void add(void); //一级选项
void menu1_1(void); //二级菜单
void many(void); //二级选项
int panduan1_1_1(int a,int b); 
void one(void);  //二级选项
int panduan1_2_1(int a);


void dele(void); //一级选项
void menu2_1(void); //二级菜单
void killmany(void); //二级选项
int panduan2_1_1(int a,int b);
void killone(void); //二级选项
int panduan2_2_1(int a);

void change(void); //一级选项
void menu3_1(void); //二级菜单
void change1(void); //二级选项
int panduan3_1_1(int a);

void search(void); //一级选项
void menu4_1(void); //二级菜单
void many4(void); //二级选项
int panduan4_1_1(int a,int b);

int main()
{

    while(1)
    {    
        int num = 0;
        menu1();
        scanf("%d",&num);
        switch(num)
        {
            case 1:add();break;
            case 2:dele();break;
            case 3:change();break;
            case 4:search();break;
            case 0:return 0;
            default:printf("请正确输入。\n");break;
        
        }
        
    }
    
    
    return 0;
}
void menu1(void) //主菜单
{
    printf("菜单一级:\n");
    printf("\t\t********学生信息管理系统********\n");  //下面都是一级选项
    printf("\t\t\t  1.添加信息\n");
    printf("\t\t\t  2.删除信息\n");
    printf("\t\t\t  3.修改信息\n");
    printf("\t\t\t  4.查询信息\n");
    printf("\t\t\t  0.退出系统\n");
    printf("\t\t********************************\n");
    printf("请输入您要执行的操作(0~4):\n");
}

void add(void) //一级选项
{

    while(1)
    {    
        int num1_1 = 0;
        menu1_1();
        scanf("%d",&num1_1);
        
        switch(num1_1)
        {
            case 1:many();break;
            case 2:one();break;
            case 0:return;
            default:printf("请正确输入。\n");break;
        }
    }
}

void menu1_1(void) //二级菜单
{
    printf("菜单二级:\n");
    printf("\t\t********添加信息****************\n");  //下面都是二级选项
    printf("\t\t\t  1.批量添加\n");
    printf("\t\t\t  2.单个添加\n");
    printf("\t\t\t  0.回到上级\n");
    printf("\t\t********************************\n");
    printf("请输入您要执行的操作(0~2):\n");
}

void many(void)  //二级选项
{
F1_1:
    printf("菜单三级:\n");
    printf("\t\t********批量添加****************\n");
    printf("\t请输入1~100的学生学号:\n");
    printf("\t\t\t  起始学号:");
    int num1_1_1 = 0 3ff7 ;
    scanf("%d",&num1_1_1);
    printf("\n");
    getchar();
    printf("\t\t\t  添加学生个数:");
    int num1_1_2 = 0;
    scanf("%d",&num1_1_2);
    printf("\n");
    int flag1_1_1 = panduan1_1_1(num1_1_1,num1_1_2);  // 判断欲输入区间是否均无数据存在
    if(flag1_1_1 == 0)
        goto F1_1;
    else
    {
        printf("\t请依次输入每名学生的\n\t学号,姓名,性别,成绩:\n");
        int i = 0;
        for(i = 0;i < num1_1_2;i ++)
        {
            scanf("%d%s%s%d",&student[num1_1_1-1+i].num,student[num1_1_1-1+i].name,student[num1_1_1-1+i].gender,&student[num1_1_1-1+i].score);
            student[num1_1_1-1+i].flag = 1;
        }
        if(i == num1_1_2)
        {
            printf("您已批量输入完毕,自动跳回上一级。\n");
        }
    }
}

int panduan1_1_1(int a,int b)  // 判断欲输入区间是否均无数据存在
{
    int i = 0;
    int flag1_1_1_1 = 1;
    for(i = a-1;i < a-1+b;i ++)
    {
        if(student[i].flag == 1)
        {
            printf("\t%d 学生信息已存入,不可再次存入。\n",i+1);
            flag1_1_1_1 = 0;
        }
    }
    return flag1_1_1_1;
}

void one(void) //二级选项
{
F1_2:    
    printf("菜单三级:\n");
    printf("\t\t********单个添加****************\n");
    printf("\t请输入1~100以内的学生学号:\n");
    printf("\t\t\t  输入学号:");
    int num1_2_1 = 0;
    scanf("%d",&num1_2_1);
    printf("\n");
    int flag1_2_1 = panduan1_2_1(num1_2_1);  //判断欲输入区间是否无数据存在
    if(flag1_2_1 == 0)
        goto F1_2;
    else
    {
        printf("\t输入学生的姓名,性别,成绩:\n");
        scanf("%s%s%d",student[num1_2_1-1].name,student[num1_2_1-1].gender,&student[num1_2_1-1].score);
        student[num1_2_1-1].flag = 1;
        printf("您已单个输入完毕,自动跳回上一级。\n");
    }
}

int panduan1_2_1(int a)
{
    int flag1_2_1_1 = 1;
    if(student[a-1].flag == 1)
    {
        printf("\t此学生信息已存入,不可再次存入。\n");
        flag1_2_1_1 = 0;      
    }
    return flag1_2_1_1;
}


void dele(void) //一级选项
{
    
    while(1)
    {
        int num2_1 = 0;
        menu2_1();
        scanf("%d",&num2_1);
        switch(num2_1)
        {
            case 1:killmany();break;
            case 2:killone();break;
            case 0:return;
            default:printf("请正确输入。\n");break;            
        }
    }
}

void menu2_1(void) //二级菜单
{
    printf("菜单二级:\n");
    printf("\t\t********删除信息****************\n");  //下面都是二级选项
    printf("\t\t\t  1.批量删除学生全部信息\n");
    printf("\t\t\t  2.删除单个学生信息\n");
    printf("\t\t\t  0.回到上级\n");
    printf("\t\t********************************\n");
    printf("请输入您要执行的操作(0~2):\n");
}    

void killmany(void)  //二级选项
{
    printf("菜单三级:\n");
    printf("\t\t*******批量删除学生全部信息*****\n");
    printf("\t请输入1~100的学生学号:\n");
    printf("\t\t\t  起始学号:");
    int num2_1_1 = 0;
    scanf("%d",&num2_1_1);
    printf("\n");
    printf("\t\t\t  删除学生个数:");
    int num2_1_2 = 0;
    scanf("%d",&num2_1_2);
    printf("\n");
    int flag2_1_1 = panduan2_1_1(num2_1_1,num2_1_2);  // 判断欲输入区间是否有数据存在
    if(flag2_1_1 == 0)  //0代表没有数据存在,1代表有数据存在
        return;
    else
    {    int i = 0;
        for(i = 0;i < num2_1_2;i ++)
        {
            student[num2_1_1-1+i].flag = 0;
            student[num2_1_1-1+i].num = 0;
            strcpy(student[num2_1_1-1+i].name,"0");
            strcpy(student[num2_1_1-1+i].gender,"0");
            student[num2_1_1-1+i].score = 0;
        }
        if(i == num2_1_2)
        {
            printf("\t学号为%d开始的%d名学生信息已全部删除。\n\t自动返回上一级。\n",num2_1_1,num2_1_2);            
        }
    }
}    
    
int panduan2_1_1(int a,int b)  // 判断欲输入区间是否有无数据存在
{
    int i = 0;
    int flag2_1_1_1 = 0;  //0没有数据存在
    for(i = a-1;i < a-1+b;i ++)
    {
        if(student[i].flag == 1)
        {
            flag2_1_1_1 = 1;
            break;
        }
    }
    if(flag2_1_1_1 == 0)
    {
        printf("欲删除的批量学生原无信息存入,故无法删除!\n\t自动返回上一级。\n");
    }
    return flag2_1_1_1;
}

void killone(void)  //二级选项
{    
    printf("菜单三级:\n");
    printf("\t\t******删除单个学生信息***********\n");
    printf("\t请输入1~100以内的学生学号:\n");
    printf("\t\t\t  输入学号:");
    int num2_2_1 = 0;
    scanf("%d",&num2_2_1);
    printf("\n");
    int flag2_2_1 = panduan2_2_1(num2_2_1);  //判断欲输入区间是否有数据存在
    if(flag2_2_1 == 0)  //0代表没有数据存在,1代表有数据存在
        return;
    else
    {
        student[num2_2_1 - 1].flag = 0;
        student[num2_2_1 - 1].num = 0;
        strcpy(student[num2_2_1 - 1].name,"\0");
        strcpy(student[num2_2_1 - 1].gender,"\0");
        student[num2_2_1 - 1].score = 0;
        printf("\t学号为%d的学生信息已删除\n",num2_2_1);
    }
}

int panduan2_2_1(int a)  //判断欲输入区间是否有数据存在
{

    int flag2_2_1_1 = 0;
    if(student[a-1].flag == 1)
    {
        flag2_2_1_1 = 1;
    }
    if(flag2_2_1_1 == 0)
        printf("欲删除的批量学生原无信息存入,故无法删除!\n\t自动返回。\n");
    return flag2_2_1_1;  //0代表没有数据存在,1代表有数据存在
    
}


void change(void) //一级选项
{

    while(1)
    {
        int num3_1 = 0;
        menu3_1();
        scanf("%d",&num3_1);
        switch(num3_1)
        {
            case 1:change1();break;
            case 0:return;
            default:printf("请正确输入。\n");break;
        }
    }
}

void menu3_1(void) //二级菜单
{
    printf("菜单二级:\n");
    printf("\t\t********修改信息****************\n");  //下面都是二级选项
    printf("\t\t\t  1.进行修改\n");
    printf("\t\t\t  0.回到上级\n");
    printf("\t\t********************************\n");
    printf("请输入您要执行的操作(0~1):\n");
}


void change1(void) //二级选项
{
    printf("菜单三级:\n");
    printf("\t\t********进行修改****************\n");  //下面都是二级选项
    printf("\t请输入1~100以内的学生学号:\n");
    printf("\t\t\t  输入学号:");
    int num3_1_1 = 0;
    scanf("%d",&num3_1_1);
    printf("\n");
    int flag3_1_1 = panduan3_1_1(num3_1_1);  //判断欲输入区间是否有数据存在
    if(flag3_1_1 == 0)  //0代表没有数据存在,1代表有数据存在
        return;
    else
    {
        printf("\t\t原数据为:\n");
        printf("\t学号:%d 姓名:%s 性别:%s 成绩:%d \n",num3_1_1,student[num3_1_1-1].name,student[num3_1_1-1].gender,student[num3_1_1-1].score);
        printf("\t\t请输入新数据(输入新的姓名、性别、成绩):\n");
        scanf("%s%s%d",student[num3_1_1-1].name,student[num3_1_1-1].gender,&student[num3_1_1-1].score);
        printf("\t修改完毕。\n\t自动返回上一级。\n");
    }

}

int panduan3_1_1(int a)  //判断欲输入区间是否有数据存在
{

    int flag3_1_1_1 = 0;
    if(student[a-1].flag == 1)
    {
        flag3_1_1_1 = 1;
    }
    if(flag3_1_1_1 == 0)
        printf("欲修改的学生原无信息存入,故无法修改!\n\t自动返回。\n");
    return flag3_1_1_1;  //0代表没有数据存在,1代表有数据存在
}
    


void search(void) //一级选项
{
    
    while(1)
    {
        int num4_1 = 0;
        menu4_1();
        scanf("%d",&num4_1);
        switch(num4_1)
        {
            case 1:many4();break;
            case 0:return;
            default:printf("请正确输入。\n");break;
        }
    }
}

void menu4_1(void) //二级菜单
{
    printf("菜单二级:\n");
    printf("\t\t********查询信息****************\n");  //下面都是二级选项
    printf("\t\t\t  1.进行查询\n");
    printf("\t\t\t  0.回到上级\n");
    printf("\t\t********************************\n");
    printf("请输入您要执行的操作(0~1):\n");
}

void many4(void)
{
    printf("菜单三级:\n");
    printf("\t\t********进行查询****************\n");
    printf("\t请输入1~100的学生学号:\n");
    printf("\t\t\t  起始学号:");
    int num4_1_1 = 0;
    scanf("%d",&num4_1_1);
    printf("\n");
    printf("\t\t\t  添加学生个数:");
    int num4_1_2 = 0;
    scanf("%d",&num4_1_2);
    printf("\n");
    int flag4_1_1 = panduan4_1_1(num4_1_1,num4_1_2);  // 判断欲输入区间是否均无数据存在
    if(flag4_1_1 == 0)
        return;
    else
    {
        printf("下面依次输出每名学生的\n\t学号,姓名,性别,成绩:\n");
        int i = 0;
        for(i = 0;i < num4_1_2;i ++)
        {
            printf("学号:%d 姓名:%s 性别:%s 成绩:%d \n",student[num4_1_1-1+i].num,student[num4_1_1-1+i].name,student[num4_1_1-1+i].gender,student[num4_1_1-1+i].score);
        }
        if(i == num4_1_2)
        {
            printf("\t您已查询完毕,自动跳回上一级。\n");
        }
    }
}

int panduan4_1_1(int a,int b)  // 判断欲输入区间是否均无数据存在
{
    int i = 0;
    int flag4_1_1_1 = 0;
    for(i = a-1;i < a-1+b;i ++)
    {
        if(student[i].flag == 1)
        {
            flag4_1_1_1 = 1;
        }
    }
    if(flag4_1_1_1 == 0)
    {
        printf("\t欲查询区域均无数据存入\n\t请重新输入。\n");
    }
    return flag4_1_1_1;
}
 

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐