芋圆371 2022-03-01 17:04 采纳率: 40%
浏览 50
已结题

c语言结构数组题学生管理系统

学生的记录由学号、姓名、专业组成,根据班级人数,将学生记录存放在结构体数组中。由于部分同学转专业,学生记录发生了变化。请编程实现根据学号查询学生记录并修改专业,分别输出转专业和未转专业的学生记录。要求:班级人数、学生记录由键盘输入(结构数组解决,不要用指针)

  • 写回答

3条回答 默认 最新

  • 关注

    定义学生结构体,然后用结构体数组存储数据,转专业就是修改结构体中的专业字段。
    参考如下:

    #include <stdio.h>
    #include <stdlib.h>
    #define MAXNMB 100
    
    //定义学生信息
    typedef struct _studentinfo 
    {
        int id;//学号
        char name[20]; //姓名 
        char major[20];//专业
        int ischange;  //是否转过专业,0表示没有转过,1表示转过
    }Student;
    
    //录入学生信息
    void input(Student stu[],int* nmb)
    {
        int i;
        system("cls");
        printf("请输入学生人数:");
        scanf("%d",nmb);//注意这里是nmb,因为nmb本身就是指针
        for (i=0;i<*nmb;i++)
        {
            printf("请输入学生%d的学号:",i+1);
            scanf("%d",&stu[i].id);
            printf("请输入学生%d的姓名:",i+1);
            scanf("%s",stu[i].name);
            printf("请输入学生%d的专业:",i+1);
            scanf("%s",stu[i].major);
            stu[i].ischange = 0;
        }
        printf("录入成功!\n");
        system("pause");
    }
    
    //转专业
    void change(Student stu[],int nmb)
    {
        int i;
        int id;
        system("cls");
        printf("请输入需要转专业的学生的学号:");
        scanf("%d",&id);
        for (i=0;i<nmb;i++)
        {
            if(stu[i].id == id)
            {
                printf("请输入新专业:");
                scanf("%s",stu[i].major);
                printf("修改成功\n");
                stu[i].ischange = 1;
                break;
            }
        }
        if(i==nmb)
            printf("未找到该学号的学生!\n");
        system("pause");
    }
    //输出转专业和未转专业学生的信息
    void show(Student stu[],int nmb)
    {
        int i;
        system("cls");
        //输出未转过专业的学生信息
        printf("未转过专业的学生信息\n");
        for (i=0;i<nmb;i++)
        {
            if(!stu[i].ischange)
                printf("%-10d  %-20s  %-20s\n",stu[i].id,stu[i].name,stu[i].major);
        }
        printf("转过专业的学生信息\n");
        for (i=0;i<nmb;i++)
        {
            if(stu[i].ischange)
                printf("%-10d  %-20s  %-20s\n",stu[i].id,stu[i].name,stu[i].major);
        }
        system("pause");
    }
    int main()
    {
        Student stu[MAXNMB];
        int nmb=0;
        int op;
        while(1)
        {
            system("cls");
            printf("-------------------------\n");
            printf("  欢迎使用学生管理系统\n");
            printf("    1.录入学生信息\n");
            printf("    2.转专业\n");
            printf("    3.显示学生信息\n");
            printf("    4.退出系统\n");
            printf("-------------------------\n");
            printf("请选择:");
            scanf("%d",&op);
            switch(op)
            {
            case 1:
                input(stu,&nmb);
                break;
            case 2:
                change(stu,nmb);
                break;
            case 3:
                show(stu,nmb);
                break;
            case 4:
                return 0;
            }
        }
        return 0;
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 3月11日
  • 已采纳回答 3月3日
  • 创建了问题 3月1日

悬赏问题

  • ¥20 机器学习能否像多层线性模型一样处理嵌套数据
  • ¥20 西门子S7-Graph,S7-300,梯形图
  • ¥50 用易语言http 访问不了网页
  • ¥50 safari浏览器fetch提交数据后数据丢失问题
  • ¥15 matlab不知道怎么改,求解答!!
  • ¥15 永磁直线电机的电流环pi调不出来
  • ¥15 用stata实现聚类的代码
  • ¥15 请问paddlehub能支持移动端开发吗?在Android studio上该如何部署?
  • ¥20 docker里部署springboot项目,访问不到扬声器
  • ¥15 netty整合springboot之后自动重连失效