sjdm1 2021-12-14 19:40 采纳率: 0%
浏览 113

c语言程序设计student管理系统

(1)设计一个表示学生信息的结构类型,包含学号、姓名、出生日期(包含年、月、日三部分信息)和3门课(语文、数学、英语)的成绩;
(2)编写实现从键盘读入n个学生信息的函数;
(3)编写输出所有学生信息的函数;
(4)编写利用指针实现按总成绩排序的函数;
(5)编写查询并输出学生相关信息的函数;
(6)编写插入学生信息的函数;
(7)编写删除学生信息的函数;
(5)编写修改指定学生相关信息的函数;
(8)在main中以菜单驱动的方式,根据用户选择,分别调用相关函数实现对应功能。
求帮助

  • 写回答

1条回答 默认 最新

  • CSDN专家-黄老师 2021-12-14 19:44
    关注

    主要是成绩信息录入、修改、删除、查询、浏览操作,具体参考

    #include "stdio.h"  
    #include "string"
    
    /*定义学生结构体*/  
    struct Student
    {
         char ID[20];       //学号
         char Name[20];     //姓名
         float C_Mark;      //C语言成绩
    };
    
    /*声明学生数组及学生数量*/  
    struct Student students[1000];  
    int num=0;  
    
    /*通过学号返回数组下标*/   
    int Student_SearchByIndex(char id[])  
    {
        int i;  
        for (i=0;i<num;i++)  
        {
            if (strcmp(students[i].ID,id)==0)  
            {
                return i;  
            }  
        }  
        return -1;   
    }
    
    /*通过姓名返回数组下标*/
    int Student_SearchByName(char name[])  
    {
        int i;  
        for (i=0;i<num;i++)  
        { 
            if (strcmp(students[i].Name,name)==0)
            { 
                return i;
            }  
        }  
        return -1;  
    }  
    
    /*显示单条学生记录*/  
    void Student_DisplaySingle(int index)   
    {
        printf("%10s%10s%8s\n","学号","姓名","C语言成绩");  
        printf("-------------------------------------------------------------\n");  
        printf("%10s%10s%8.2f\n",students[index].ID,students[index].Name,students[index].C_Mark);  
    }  
    
    /****1、增加学生记录*****/  
    void Student_Insert()  
    {  
        while(1)  
        {
            printf("请输入学号:");  
            scanf("%s",&students[num].ID);  
            getchar();  
            printf("请输入姓名:");  
            scanf("%s",&students[num].Name);  
            getchar(); 
            printf("请输入C语言成绩:");  
            scanf("%f",&students[num].C_Mark);  
            getchar(); 
            if (54<students[num].C_Mark && students[num].C_Mark< 60)    //把55~59分之间的成绩都加上5分
            {
                students[num].C_Mark += 5;      
            }
    
            num++;
    
            printf("是否继续?(Y/N),继续请按任意键,否则输入N:"); 
            if (getchar()=='N')  
            {  
                break;
            }  
         }  
    }     
    
    /******2、修改学生信息**********/  
    void Student_Modify()  
    {  
        while(1) 
        {  
            char id[20]; 
            int index; 
            printf("请输入要修改的学生的学号:"); 
            scanf("%s",&id);  
            getchar();  
            index=Student_SearchByIndex(id);  
            if (index==-1)  
            {  
                printf("该学生不存在!\n"); 
             }
            else  
            {  
                printf("你要修改的学生信息为:\n"); 
                Student_DisplaySingle(index);  
                printf("-- 请输入新值--\n"); 
                printf("请输入学号:");  
                scanf("%s",&students[index].ID);  
                getchar();  
                printf("请输入姓名:");  
                scanf("%s",&students[index].Name);  
                getchar();  
                printf("请输入C语言成绩:");  
                scanf("%f",&students[index].C_Mark);  
                getchar();  
    
             }  
    
             printf("是否继续?(Y/N),继续请按任意键,否则输入N:"); 
             if (getchar()=='N')  
             {  
                break;
             }  
    
         }  
    
    } 
    
    /****3、删除学生信息****/  
    void Student_Delete()  
    { 
        int i;  
        while(1)  
        {  
            char id[20];  
            int index;  
            printf("请输入要删除的学生的学号:");  
            scanf("%s",&id);  
            getchar();  
            index=Student_SearchByIndex(id);  
            if (index==-1)  
            {  
                printf("学生不存在!\n");  
            }  
            else  
            {  
                printf("你要删除的学生信息为:\n"); 
                Student_DisplaySingle(index);  
                printf("是否真的要删除?(Y/N)");  
                if (getchar()=='Y')  
                {  
                    for (i=index;i<num-1;i++)  
                    {  
                        students[i]=students[i+1];//把后边的对象都向前移动  
                    } 
                    num--;  
                 }  
                getchar();  
                printf("已删除\n");
             }  
    
             printf("是否继续删除?(Y/N),继续请按任意键,否则输入N:"); 
             if (getchar()=='N')  
             {  
                break;
             }  
         }  
    }  
    
    
    /****4、按姓名查询******/  
    void Student_Select()  
    {  
        while(1)  
        {  
            char name[20];  
            int index;  
    
            printf("请输入要查询的学生的姓名:");  
            scanf("%s",&name); 
            getchar();  
            index=Student_SearchByName(name);  
    
            if (index==-1) 
            {  
                printf("学生不存在!\n"); 
            } 
            else  
            {  
                printf("你要查询的学生信息为:\n"); 
                Student_DisplaySingle(index);  
            }  
    
            printf("是否继续?(Y/N),继续请按任意键,否则输入N:"); 
            if (getchar()=='N')  
            {  
                break;
            } 
    
         }
    }  
    
    
    
    /******5、按C语言成绩排序*******/  
    void Student_SortByAverage()  
    {  
        int i,j;  
        struct Student tmp;  
    
        for (i=0;i<num;i++)  
        {  
            for (j=1;j<num-i;j++) 
            {  
                if (students[j-1].C_Mark<students[j].C_Mark) 
                {  
                    tmp=students[j-1]; 
                    students[j-1]=students[j];  
                    students[j]=tmp;  
                }  
            }  
        }  
    }  
    
    
    /*显示学生信息*/  
    void Student_Display()  
    {  
        int i;  
        printf("%10s%10s%8s\n","学号","姓名","成绩");  
        printf("-------------------------------------------------------------\n");  
    
        for (i=0;i<num;i++)  
        {  
            printf("%10s%10s%8.2f\n",students[i].ID,students[i].Name,students[i].C_Mark);  
        }  
    
    }  
    
    /*将学生信息从文件(Database.txt)中读出*/  
    void IO_ReadInfo()  
    { 
        FILE *fp;  
        int i;  
    
        if ((fp=fopen("Database.txt","rb"))==NULL)  
        {  
            printf("不能打开文件!\n");  
            return;  
        }
    
        if (fread(&num,sizeof(int),1,fp)!=1)  
        {  
            num=-1;  
        } 
        else  
        {  
            for(i=0;i<num;i++)  
            {  
                fread(&students[i],sizeof(struct Student),1,fp);  
            }  
        } 
    
        fclose(fp);  
    } 
    
    /*将学生信息写入文件(Database.txt)*/  
    void IO_WriteInfo()
    {  
        FILE *fp; 
        int i;  
        if ((fp=fopen("Database.txt","wb"))==NULL)  
        {  
            printf("不能打开文件!\n");  
            return;  
        }  
        if (fwrite(&num,sizeof(int),1,fp)!=1)  
        {  
            printf("写入文件错误!\n");  
        }  
        for (i=0;i<num;i++)  
        {  
            if (fwrite(&students[i],sizeof(struct Student),1,fp)!=1)  
            {  
                printf("写入文件错误!\n");  
            }  
        }  
        fclose(fp);  
    } 
    
    /***********主程序*********/ 
    void main()  
    { 
        int choice;  
    
        IO_ReadInfo();          //读取文件
    
        while(1)  
        {  
            /*主菜单*/  
            printf("\n------ 学生成绩管理系统------\n");  
            printf("1. 增加学生记录\n");  
            printf("2. 修改学生记录\n");  
            printf("3. 删除学生记录\n");  
            printf("4. 按姓名查询学生记录\n");  
            printf("5. 按C语言成绩排序\n");  
            printf("6. 退出\n");  
            printf("请选择(1-6):");  
    
            scanf("%d",&choice);  
            getchar();  
    
            switch(choice)  
            { 
            case 1:  
                Student_Insert();  
                break; 
    
            case 2: 
                Student_Modify(); 
                break;  
    
            case 3:  
                Student_Delete(); 
                break;  
    
            case 4:  
                Student_Select();
                break;  
    
            case 5:  
                Student_SortByAverage();
                Student_Display();
                break;  
    
            case 6: 
                exit(0);  
                break;  
            } 
            IO_WriteInfo();  
    
        } 
    }  
    
    
    
    评论

报告相同问题?

问题事件

  • 创建了问题 12月14日

悬赏问题

  • ¥15 有兄弟姐妹会用word插图功能制作类似citespace的图片吗?
  • ¥200 uniapp长期运行卡死问题解决
  • ¥15 请教:如何用postman调用本地虚拟机区块链接上的合约?
  • ¥15 为什么使用javacv转封装rtsp为rtmp时出现如下问题:[h264 @ 000000004faf7500]no frame?
  • ¥15 乘性高斯噪声在深度学习网络中的应用
  • ¥15 关于docker部署flink集成hadoop的yarn,请教个问题 flink启动yarn-session.sh连不上hadoop,这个整了好几天一直不行,求帮忙看一下怎么解决
  • ¥15 深度学习根据CNN网络模型,搭建BP模型并训练MNIST数据集
  • ¥15 C++ 头文件/宏冲突问题解决
  • ¥15 用comsol模拟大气湍流通过底部加热(温度不同)的腔体
  • ¥50 安卓adb backup备份子用户应用数据失败