• 信息学院学生成绩管理系统


    两个链表

    #define _CRT_SECURE_NO_WARNINGS
    #include<stdio.h>
    #include<stdlib.h>
    #include<string.h>
    struct Student{
        int Grade;
        char Major[50];
        int Class;
        int ID;
        char Name[20];
        struct Student *next;
    };
    struct GMC{                    //Grade   Major    Class
        int Grade;
        char Major[50];
        int Class;
        struct Student *down;
        struct GMC *next;
    };


    char major[3][50] = { "电子信息技术","计算机科学与技术", "数字媒体与技术" };
    int sizeGMC = sizeof(struct GMC);
    int sizeSTU = sizeof(struct Student);

    struct GMC* CreatGMC1(struct GMC *L, int dian, struct GMC *q,int i,int k)
    {

            struct GMC  *p = NULL;
            for (p = L; p->next != NULL; p = p->next);

                p->next = q;
                q->Grade = i;
                strcpy(q->Major, major[0]);
                q->Class = k;
                q->down = NULL;
                q->next = NULL;
                
                p = q;
                
        return L;
    }
    struct GMC* CreatGMC2(struct GMC *L, int ji, struct GMC *q,int i,int k)                //创建计科
    {
        
        
        struct GMC  *p = NULL;

        
        for (p = L; p->next != NULL; p = p->next);
                
                q->Grade = i;
                strcpy(q->Major, major[1]);
                q->Class = k;
                q->down = NULL;
                q->next = NULL;
                p->next = q;
                p = q;
                

        return L;
    }
    struct GMC* CreatGMC3(struct GMC *L,int shu,struct GMC *q,int i,int k)            //创建数媒
    {
        
        struct GMC  *p = NULL;
        
        for (p = L; p->next != NULL; p = p->next);
                p->next = q;
                q->Grade = i;
                strcpy(q->Major, major[2]);
                q->Class = k;
                q->down = NULL;
                q->next = NULL;        
                p = q;
                
        return L;
    }
    void Mean1()
    {

        printf(" ******************************** ");
        printf("****** 1-插入学生信息*********** ");
        printf("****** 2-查询学生信息*********** ");
        printf("****** 3-删除学生信息*********** ");
        printf("****** 4-列出学生信息*********** ");
        printf("****** 5-退出系统    *********** ");
        printf(" 请输入您的选择:   ");
    }
    void PrintOneStu(struct Student *k)
    {
                printf(" 年级:%d   ", k->Grade);
                printf("专业:%s   ", k->Major);
                printf("班级:%d   ", k->Class);
                printf("学号:%d   ", k->ID);
                printf("姓名:%s   ", k->Name);
                printf(" ");
    }
    struct GMC * Insert(struct GMC *L,struct Student *q)            //插入一个学生信息
    {
        int  m;
        struct GMC *p = L->next;
        struct Student *k1=NULL,*k2=NULL,*k=NULL;
        
        
        printf("请选择年级:1-大一  2-大二  3-大三  4-大四  ");
        scanf("%d",&q->Grade);
        printf("请选择专业:1-电子  2-计科  3-数媒   ");
        scanf("%d", &m);
        strcpy(q->Major, major[m-1]);
        printf("请输入班级:");
        scanf("%d", &q->Class);
        printf("请输入学号  ");
        scanf("%d",& q->ID);
        printf("请输入姓名  ");
        scanf("%s", q->Name);
        q->next = NULL;

        while ((p->Grade!=q->Grade) || (p->Class!=q->Class)|| (strcmp(p->Major,q->Major)!=0)|| !p)        //定位指针到班级
        {
            p = p->next;
        }

        if (p->down == NULL)                                //插入班级第一个人
        {
            p->down = q;
        }
        
        else                                                //将指针定位到班级第一个人
        {
            k = p->down;
            k2 = k;
            while ((q->ID > k2->ID) && (k2->next != NULL))
            {
                k1 = k2;
                k2 = k2->next;
            }
            if (q->ID <= k2->ID)
            {
                if (k2 == k)
                {
                    p->down = q;
                    q->next = k2;
                }
                else
                {
                    k1->next = q;
                    q->next = k2;
                }
            }
            else
            {
                k2->next = q;
            }
        }

        return L;
    }
    void PrintMajor(struct GMC *L)
    {
        int choice;
        struct GMC *p = NULL;
        struct Student *k;
        printf("选择要列出的专业:1-电子   2-计科   3-数媒  ");
        scanf("%d", &choice);
        for (p = L->next; p != NULL; p = p->next)
        {
            if (strcmp(p->Major,major[choice-1])==0)
            {
                for (k = p->down; k != NULL; k = k->next)
                {
                    PrintOneStu(k);
                }
            }
        }
    }
    void PrintClass(struct GMC *L)
    {
        int choice1,choice2,choice3;
        struct GMC *p = NULL;
        struct Student *k;
        printf("需要列出的年级:1-大一  2-大二  3-大三  4-大四");
        scanf("%d", &choice1);
        printf("选择要列出的专业:1-电子   2-计科   3-数媒  ");
        scanf("%d", &choice2);
        printf("选择要列出的班级:");
        scanf("%d", &choice3);
        for (p = L->next; p != NULL; p = p->next)
        {
            if ((p->Grade == choice1) && (strcmp(p->Major,major[choice2])) && (p->Class==choice3))
            {
                for (k = p->down; k != NULL; k = k->next)
                    PrintOneStu(k);
            }
        }
    }
    void PrintAll(struct GMC *L)                        //打印出所有的学生
    {
        struct GMC *p=L->next;
        struct Student *k;
        while (p->next!=NULL)
        {    
            for (k = p->down; k != NULL; k = k->next)
            {
                PrintOneStu(k);
            }
            p = p->next;
        }
    }
    void Print(struct GMC *L)
    {    
        int choice;
        printf("请选择列出学生信息方式:1-列出全部  2-分类列出  ");
        scanf("%d", &choice);
        if (choice == 1)
        {
            PrintAll(L);
        }
        else
        {
            printf("请选择:  1-分专业列出    2-分班级列出");
            scanf("%d", &choice);
            if (choice == 1)
                PrintMajor(L);
            else if (choice == 2)
                PrintClass(L);
            else
                printf("选择错误 ");
        }
    }
    void SearchID(struct GMC *L,int id)                    //按学号查询
    {
        struct GMC *p;
        struct Student *k;
        for (p = L->next; p != NULL; p = p->next)
        {
            for (k = p->down; k != NULL; k = k->next)
            {
                if (k->ID == id)
                {
                    PrintOneStu(k);
                    return ;
                }
            }
        }

    }
    void SearchName(struct GMC *L,char name[])                //按名字查询
    {
        struct GMC *p;
        struct Student *k;
        for (p = L->next; p != NULL; p = p->next)
        {
            for (k = p->down; k != NULL; k = k->next)
            {
                if (strcmp(k->Name,name)==0)
                {
                    PrintOneStu(k);
                    return;
                }
            }
        }
    }
    void Search(struct GMC *L)
    {    
        int choice,id;
        char name[20];
        printf("请选择查询方法:1-按学号查询   2-按姓名查询    ");
        scanf("%d", &choice);
        if (choice == 1)
        {
            printf("请输入您的学号:");
            scanf("%d", &id);
            SearchID(L,id);
        }    
        else
        {
            printf("请输入需要查询的名字:");
            scanf("%s", name);
                SearchName(L,name);
        }
            
    }
    void Delete(struct GMC *L,int DelID)            //删除一个学生信息
    {
        struct GMC *p;
        struct Student *k=NULL, *k2=NULL;
        for (p = L->next; p != NULL; p = p->next)
        {
            for (k = p->down; k != NULL; k = k->next)
            {
                if (k->ID == DelID)
                {
                    if (k == p->down)
                    {
                        p->down = k->next;
                    }
                    else
                        k2->next = k->next;
                    free(k);
                    return;
                }
                k2 = k;
            }
        }
    }
    int main()
    {
        int i = 0,k = 0;
        int dian=0,ji=0,shu=0,choice = 0;
        struct GMC *L = NULL,*q=NULL;
        struct Student *q1 = NULL;
        int DelID;
        L = (struct GMC*)malloc(sizeGMC);
        L->next = NULL;
        printf("请输入电子班级个数:");
        scanf("%d", &dian);

        printf("请输入计科班级个数:");
        scanf("%d", &ji);

        printf("请输入数媒班级个数:");
        scanf("%d", &shu);
        for (i = 1; i <= 4; i++)                    //  4个年级
        {
            for (k = 1; k <= dian; k++)                //创建电子
            {
                q = (struct GMC*)malloc(sizeGMC);
                L = CreatGMC1(L,dian,q,i,k);
            }
            for (k = 1; k <= dian; k++)                //创建计科
            {
                q = (struct GMC*)malloc(sizeGMC);
                L = CreatGMC2(L,ji,q,i,k);
            }
            for (k = 1; k <= dian; k++)            //创建数媒
            {
                q = (struct GMC*)malloc(sizeGMC);
                L = CreatGMC3(L,shu,q,i,k);
            }

        }

        while (1)
        {
            Mean1();
            scanf("%d", &choice);
            switch (choice)
                {
                case 1:
                    q1 = (struct Student *)malloc(sizeSTU);
                    L=Insert(L,q1);
                    break;
                case 2:
                    Search(L);
                    break;
                case 3:
                    printf("请输入要删除的学号:");
                    scanf("%d", &DelID);
                    Delete(L,DelID);
                    break;
                case 4:
                    Print(L);
                    break;
                case 5:
                    return 0;
                default:
                    printf("输入错误");

                }
        }
        return 0;
    }

  • 相关阅读:
    瑞星播报:6日需警惕“IRC波特变种XAG”病毒 狼人:
    微软下周将发布三个补丁 仍有漏洞未修复 狼人:
    杀毒软件3.15客服调查:360响应最快 瑞星最专业 狼人:
    奥巴马专用直升机被曝飞机蓝图被伊朗P2P用户分享 狼人:
    微软推安全浏览器Gazelle,取代操作系统? 狼人:
    警惕:全球裁员导致公司敏感数据大量流失 狼人:
    黑客指苹果Safari浏览器安全性差 将首个被攻破 狼人:
    刑法修正案将加速病毒产业链条瓦解 狼人:
    Google Docs部分文档被自动共享 凸显云计算安全问题 狼人:
    瑞星播报:3月8日需警惕“灰鸽子变种AWM”病毒 狼人:
  • 原文地址:https://www.cnblogs.com/da-peng/p/4935906.html
Copyright © 2020-2023  润新知