lsk1187860237 2022-12-14 15:42 采纳率: 100%
浏览 89
已结题

如何在写一个学生学籍查询系统的程序,用单链表写了程序,但是查询功能和删除功能无法运行?

在写一个学生学籍查询系统的程序,用单链表写了程序,大体上写完,但是查询功能和删除功能无法运行,求解答!!

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<windows.h>
#include<conio.h>
#define Len sizeof (struct NODE)

struct INFORMATION              //基本信息
{
    char number[15];            //学号
    char name[20];              //姓名
    char sex[10];               //性别
    char dormitory[20];         //宿舍号码
    char telephone[20];         //电话号码
};   
struct GRADE                    //成绩信息
{
    char number[15];            //学号
    char name[20];              //姓名
    char subnumber [10][10];    //课程编号
    char subname [10][50];      //课程名称
    float credit[10];           //学分
    float usugrade[10];         //平时成绩
    float testgrade[10];        //实验成绩
    float scalgrade[10];        //卷面成绩
    float ovalgrade[10];        //综合成绩
    float finalcredit[10];      //实得学分
};
struct NODE  
{
    struct INFORMATION dataI;    //数据域
    struct GRADE dataG;
    struct NODE * next;          //指针域
};

typedef struct NODE Node;
typedef struct INFORMATION Info;
typedef struct GRADE Grade;
typedef Node *node;

node creatlist();                           //建立表头
node creatnode(node head);                  //信息录入
void insertnode(node head, node newnode);   //插入结点
void searchinfo (node head);                //查找基本信息
void searchgrade(node head);                //查找成绩信息
void search(node head);                     //信息查询
void delete(node head);                     //信息删除
void Freelink(node head);                   //释放链表
void menu();                                //菜单函数

node creatlist()                            //建立表头
{
    node headnode = (node)malloc(Len);
    headnode -> next = NULL;
    return headnode;
}

node creatnode(node head)                   //信息录入
{
    int n, choice;
    float g;
    do{
        system("cls");
        printf("---------------------------------\n");
        printf("    请选择要录入的学生信息\n");
        printf("        1:基本信息\n");
        printf("        2:成绩基本信息\n");
        printf("---------------------------------");
        n = getch();
        printf("\n");
        switch (n)
        {
            case '1' : 
            {
                char choice;
                do{
                    node newnode = (node)malloc(Len);
                    newnode->next = NULL;
                    system("cls");
                    printf("学号:");
                    scanf("%s", newnode->dataI.number);
                    printf("姓名:");
                    scanf("%s", newnode->dataI.name);
                    printf("性别:");
                    scanf("%s", newnode->dataI.sex);
                    printf("宿舍号码:");
                    scanf("%s", newnode->dataI.dormitory);
                    printf("电话号码:");
                    scanf("%s", newnode->dataI.telephone);
                    insertnode(head, newnode);
                    Sleep(500);
                    system("cls");
                    printf("录入成功!");
                    Sleep(500);
                    system("cls");
                    printf("---------------------------------\n");
                    printf("       是否继续录入信息:\n");
                    printf("         1:是\n");
                    printf("         2:返回上一级\n");
                    printf("---------------------------------");
                    choice = getch();
                    if (choice == '2')
                        break;
                }while (1);
            }break;
            case '2' : 
            {
                int i = 0;
                char choice;
                do{
                    node newnode = (node)malloc(Len);
                    newnode->next = NULL;
                    system("cls");
                    printf("学号:");
                    scanf("%s", newnode->dataG.number);
                    printf("姓名:");
                    scanf("%s", newnode->dataG.name);
                    for (i = 0; ; i++)
                    {
                        printf("课程编号:");
                        scanf("%s", newnode->dataG.subnumber[i]);
                        printf("课程名称:");
                        scanf("%s", newnode->dataG.subname[i]);
                        printf("学分:");
                        scanf("%f", &newnode->dataG.credit[i]);
                        printf("平时成绩:");
                        scanf("%f", &newnode->dataG.usugrade[i]);
                        printf("实验成绩:");
                        scanf("%f", &newnode->dataG.testgrade[i]);
                        printf("卷面成绩:");
                        scanf("%f", &newnode->dataG.scalgrade[i]);
                        if (newnode->dataG.testgrade[i] < 0)
                            newnode->dataG.ovalgrade[i] = newnode->dataG.usugrade[i] * 0.3 + newnode->dataG.scalgrade[i] * 0.7;
                        else
                            newnode->dataG.ovalgrade[i] = newnode->dataG.usugrade[i] * 0.15 + newnode->dataG.testgrade[i] * 0.15 + newnode->dataG.scalgrade[i] * 0.7;
                        g = newnode->dataG.ovalgrade[i];
                        if (g <= 100 && g >= 90)
                            newnode->dataG.finalcredit[i] = newnode->dataG.credit[i];
                        if (g < 90 && g >= 80)
                            newnode->dataG.finalcredit[i] = newnode->dataG.credit[i] * 0.8;
                        if (g < 80 && g >= 70)
                            newnode->dataG.finalcredit[i] = newnode->dataG.credit[i] * 0.75;
                        if (g < 70 && g >= 60)
                            newnode->dataG.finalcredit[i] = newnode->dataG.credit[i] * 0.6;
                        if (g < 60)
                            newnode->dataG.finalcredit[i] = 0.0;
                        printf("\n");
                        newnode->dataG.number[i+1] = '\0';
                        newnode->dataG.name[i+1] = '\0';
                        newnode->dataG.subnumber[i][10] = '\0';
                        newnode->dataG.subname[i][50] = '\0';
                        printf("----------------------------------\n");
                        printf("      是否继续录入课程信息:\n");
                        printf("             1:是\n");
                        printf("             2:否\n");
                        printf("----------------------------------");
                        choice = getch();
                        printf("\n");
                        if (choice == '2')
                            break;
                    }
                    insertnode(head, newnode);
                    Sleep(500);
                    system("cls");
                    printf("录入成功!");
                    Sleep(500);
                    system("cls");
                    printf("---------------------------------\n");
                    printf("       是否继续录入信息:\n");
                    printf("         1:是\n");
                    printf("         2:返回上一级\n");
                    printf("---------------------------------");
                    choice = getch();
                    Sleep(500);
                    if (choice == '2')
                        break;
                }while(1);
            }break;
        }
        system("cls");
        printf("---------------------------------\n");
        printf("       是否继续录入信息:\n");
        printf("         1:是\n");
        printf("         2:返回菜单\n");
        printf("---------------------------------");
        choice = getch();
        if (choice == '2')
        {
            menu();
            break;
        }
    }while(1);
    return head;
}

void insertnode(node head, node newnode)                      //插入结点
{
    newnode->next = head->next;
    head->next = newnode;
}

void searchinfo (node head)                                   //查找基本信息
{
    system("cls");
    int n, choice;
    node p = head->next;
    do{
        printf("------------------------------\n");
        printf("        1:学号查找\n");
        printf("        2:姓名查找\n");
        printf("        3:宿舍查找\n");
        printf("------------------------------");
        n = getch();
        printf("\n");
        switch(n)
        {
        case'1':
            {
                
                char num[10];
                while(1)
                {
                    system("cls");
                    printf("请输入查找的学生学号:");
                    scanf("%s", num);
                    printf("\n");
                    printf("    学号       姓名            性别   宿舍号码            电话号码     \n");
                    if (p->dataI.number[0] == '\0')
                        printf("暂无数据!\n");
                    else
                    {
                        while(p != NULL)
                        {
                            if (strcmp(p->dataI.number,num) != 0)
                                p = p->next;
                            printf("%10s %-20s %2s %10s %11s\n",p->dataI.number, p->dataI.name, p->dataI.sex, p->dataI.dormitory, p->dataI.telephone);
                        }
                    }
                    printf("---------------------------------\n");
                    printf("       是否继续录入信息:\n");
                    printf("         1:是\n");
                    printf("         2:返回上一级\n");
                    printf("---------------------------------");
                    choice = getch();
                    if (choice == '2')
                        break;
                }    
            }break;
        case'2':
            {
                char name[20];
                while(1)
                {
                    system("cls");
                    printf("请输入查找的姓名:");
                    scanf("%s", name);
                    printf("    学号       姓名            性别   宿舍号码            电话号码     \n");
                    if (p->dataI.name[0] == '\0')
                        printf("暂无数据!\n");
                    else
                    {
                        while(p != NULL)
                        {
                            if (strcmp(p->dataI.name,name) == 0)
                                printf("%10s %-20s %2s %10s %11s\n",p->dataI.number, p->dataI.name, p->dataI.sex, p->dataI.dormitory, p->dataI.telephone);
                            p = p->next;
                        }
                    }
                    printf("---------------------------------\n");
                    printf("       是否继续录入信息:\n");
                    printf("         1:是\n");
                    printf("         2:返回上一级\n");
                    printf("---------------------------------");
                    choice = getch();
                    if (choice == '2')
                        break;
                }
            }
        case'3':
            {
                char dorm[10];
                while(1)
                {
                    system("cls");
                    printf("请输入查找的宿舍号码:");
                    scanf("%s", dorm);
                    printf("    学号       姓名            性别   宿舍号码            电话号码     \n");
                    if (p->dataI.dormitory[0] == '\0')
                        printf("暂无数据!\n");
                    else
                    {
                        while(p != NULL)
                        {
                            if (strcmp(p->dataI.dormitory,dorm) == 0)
                                printf("%10s %-20s %2s %10s %11s\n",p->dataI.number, p->dataI.name, p->dataI.sex, p->dataI.dormitory, p->dataI.telephone);
                            p = p->next;
                        }
                    }
                    printf("---------------------------------\n");
                    printf("       是否继续录入信息:\n");
                    printf("         1:是\n");
                    printf("         2:返回上一级\n");
                    printf("---------------------------------");
                    choice = getch();
                    if (choice == '2')
                        break;
                }
            }
        }
    }while(1);    
}

void searchgrade(node head)                                         //查找成绩信息
{
    system("cls");
    int i = 0, choice;
    float sum = 0.0;
    char num[10];
    node p = head->next;
    while(1)
    {
        printf("请输入查找的学生的学号:");
        scanf("%s", num);
        if (p == NULL)
        {
            Sleep(1000);
            printf("暂无数据!");
        }
        while(p != NULL)
        {
            printf("学号:%10s  姓名:%-20s\n",p->dataG.number, p->dataG.name);
            while(p->dataG.subnumber[i][0] != '\0' && p->dataG.subname[i][0] != '\0')
            {
                printf("课程编号:%-10s  课程名称:%-15s  综合成绩:%-5.1f  实得学分:%-5.1f\n", p->dataG.subnumber[i], p->dataG.subname[i], p->dataG.ovalgrade[i], p->dataG.finalcredit[i]);
                sum += p->dataG.finalcredit[i];
                i++;
            }
            printf("共修:%d 科  实得总学分为: %-5.1f\n", i, sum);
            p = p->next;
        }
        system("cls");
        printf("-----------------------------\n");
        printf("       是否继续查找:\n");
        printf("         1:是\n");
        printf("         2:返回上一级\n");
        printf("-----------------------------");
        choice = getch();
        if (choice == '2')
        {
            search(head);
            break;
        }
    }
}


void search(node head)                              //信息查询
{
    system("cls");
    int n;
    printf("---------------------------------\n");
    printf("      请选择要查询的学生信息\n");
    printf("         1:基本信息\n");
    printf("         2:成绩基本信息\n");
    printf("---------------------------------");
    n = getch();
    system("cls");
    printf("请稍后...");
    Sleep(500);
    printf("\n");
    switch (n)
    {
        case '1' : searchinfo(head);break;
        case '2' : searchgrade(head);break;
    }
}

void Delete(node head)                                          //信息删除
{
    system("cls");
    int n, flag = 0;
    node pre = head;
    node cure = head->next;
    char name[20];
    do
    {
        system("cls");
        printf("请输入要删除的学生姓名:");
        scanf("%s",name);
        Sleep(500);
        system("cls");
        if (pre->next == NULL)
            printf ("暂无数据!无法删除!");
        else
        {
            while (cure != NULL && strcmp(cure->dataI.name,name) != 0)
            {
                pre = cure;
                cure = pre->next;
            }
            if (pre->next == NULL)
                printf("查无此人!");
            else
            {
                pre->next = cure->next;
                flag = 1;
                if (flag)
                    printf("删除成功!");
                else
                    printf("删除失败!");
                Sleep(500);
                free (cure);//释放链表
            }
        }
        system("cls");
        printf("|    是否继续删除   |\n");
        printf("       1:确定\n");
        printf("       2:取消\n");
        n = getch();
        Sleep(500);
        if(n == '2')break;
    }while(1);
}

void Freelink(node head)             //释放链表
{
    node p = head->next;
    while(p)
    {
        head->next = p->next;//头指针指向下一个结点
        free(p);//释放结点
        p = head->next;
    }
}

void over(node head)
{
    system("cls");
    int n;
    printf("|   您确定要退出吗?  |\n");
    printf("       1:确定\n");
    printf("       2:取消\n");
    n = getch();
    while(1)
    {
        switch(n)
        {
        case'1':
            {
                system("cls");
                system("cls");
                printf("正在退出...");
                Sleep(1000);
                system("cls");
                printf("退出成功!");
                system("cls");
                printf("谢谢使用!");
                Freelink(head);
                exit(0);
                break;
            }
        case'2':
            {
                menu();
                break;
            }
            
        }
    }
}

void menu()
{
    node head = creatlist();
    do
    {
        system("cls");
        int n;
        printf("--------------------------------------\n");
        printf("|      学生学籍信息管理系统          |\n");      
        printf("--------------------------------------\n");
        printf("          1:信息录入\n");
        printf("          2:信息查询\n");
        printf("          3:信息删除\n");
        printf("          4:退出程序\n");
        printf("--------------------------------------\n");
        n = getch();
        Sleep(500);
        switch(n)
        {
            case'1':                          //信息录入
            {
                creatnode(head);
            }break;
            case'2':                          //信息查询
            {
                search(head);
            }break;
            case'3':                          //信息删除
            {
                Delete(head);
            }break;
            case'4':                          //退出程序
            over(head);break;    
        }
    }while(1);
}


int main()
{
    menu();
}













  • 写回答

5条回答 默认 最新

  • X-道至简 2022-12-14 21:00
    关注

    有几个问题如下

    1. menu函数里面的head createlist创建有问题,只能创建一次
    2. 查询的时候没有判断p是否为空,然后比较有问题
      代码如下修改,加上了下面连串等号的地方是修改的地方
      ========  
      
    #include<stdio.h>
    #include<string.h>
    #include<stdlib.h>
    #include<windows.h>
    #include<conio.h>
    #define Len sizeof (struct NODE)
    struct INFORMATION              //基本信息
    {
        char number[15];            //学号
        char name[20];              //姓名
        char sex[10];               //性别
        char dormitory[20];         //宿舍号码
        char telephone[20];         //电话号码
    };   
    struct GRADE                    //成绩信息
    {
        char number[15];            //学号
        char name[20];              //姓名
        char subnumber [10][10];    //课程编号
        char subname [10][50];      //课程名称
        float credit[10];           //学分
        float usugrade[10];         //平时成绩
        float testgrade[10];        //实验成绩
        float scalgrade[10];        //卷面成绩
        float ovalgrade[10];        //综合成绩
        float finalcredit[10];      //实得学分
    };
    struct NODE  
    {
        struct INFORMATION dataI;    //数据域
        struct GRADE dataG;
        struct NODE * next;          //指针域
    };
    typedef struct NODE Node;
    typedef struct INFORMATION Info;
    typedef struct GRADE Grade;
    typedef Node *node;
    node creatlist();                           //建立表头
    node creatnode(node head);                  //信息录入
    void insertnode(node head, node newnode);   //插入结点
    void searchinfo (node head);                //查找基本信息
    void searchgrade(node head);                //查找成绩信息
    void search(node head);                     //信息查询
    void Delete(node head);                     //信息删除
    void Freelink(node head);                   //释放链表
    void menu();                                //菜单函数
    node creatlist()                            //建立表头
    {
        node headnode = (node)malloc(Len);
        headnode -> next = NULL;
        return headnode;
    }
    node creatnode(node head)                   //信息录入
    {
        int n, choice;
        float g;
        do{
            system("cls");
            printf("---------------------------------\n");
            printf("    请选择要录入的学生信息\n");
            printf("        1:基本信息\n");
            printf("        2:成绩基本信息\n");
            printf("---------------------------------");
            n = getch();
            printf("\n");
            switch (n)
            {
                case '1' : 
                {
                    char choice;
                    do{
                        node newnode = (node)malloc(Len);
                        newnode->next = NULL;
                        system("cls");
                        printf("学号:");
                        scanf("%s", newnode->dataI.number);
                        printf("姓名:");
                        scanf("%s", newnode->dataI.name);
                        printf("性别:");
                        scanf("%s", newnode->dataI.sex);
                        printf("宿舍号码:");
                        scanf("%s", newnode->dataI.dormitory);
                        printf("电话号码:");
                        scanf("%s", newnode->dataI.telephone);
                        insertnode(head, newnode);
                        Sleep(500);
                        system("cls");
                        printf("录入成功!");
                        Sleep(500);
                        system("cls");
                        printf("---------------------------------\n");
                        printf("       是否继续录入信息:\n");
                        printf("         1:是\n");
                        printf("         2:返回上一级\n");
                        printf("---------------------------------");
                        choice = getch();
                        if (choice == '2')
                            break;
                    }while (1);
                }break;
                case '2' : 
                {
                    int i = 0;
                    char choice;
                    do{
                        node newnode = (node)malloc(Len);
                        newnode->next = NULL;
                        system("cls");
                        printf("学号:");
                        scanf("%s", newnode->dataG.number);
                        printf("姓名:");
                        scanf("%s", newnode->dataG.name);
                        for (i = 0; ; i++)
                        {
                            printf("课程编号:");
                            scanf("%s", newnode->dataG.subnumber[i]);
                            printf("课程名称:");
                            scanf("%s", newnode->dataG.subname[i]);
                            printf("学分:");
                            scanf("%f", &newnode->dataG.credit[i]);
                            printf("平时成绩:");
                            scanf("%f", &newnode->dataG.usugrade[i]);
                            printf("实验成绩:");
                            scanf("%f", &newnode->dataG.testgrade[i]);
                            printf("卷面成绩:");
                            scanf("%f", &newnode->dataG.scalgrade[i]);
                            if (newnode->dataG.testgrade[i] < 0)
                                newnode->dataG.ovalgrade[i] = newnode->dataG.usugrade[i] * 0.3 + newnode->dataG.scalgrade[i] * 0.7;
                            else
                                newnode->dataG.ovalgrade[i] = newnode->dataG.usugrade[i] * 0.15 + newnode->dataG.testgrade[i] * 0.15 + newnode->dataG.scalgrade[i] * 0.7;
                            g = newnode->dataG.ovalgrade[i];
                            if (g <= 100 && g >= 90)
                                newnode->dataG.finalcredit[i] = newnode->dataG.credit[i];
                            if (g < 90 && g >= 80)
                                newnode->dataG.finalcredit[i] = newnode->dataG.credit[i] * 0.8;
                            if (g < 80 && g >= 70)
                                newnode->dataG.finalcredit[i] = newnode->dataG.credit[i] * 0.75;
                            if (g < 70 && g >= 60)
                                newnode->dataG.finalcredit[i] = newnode->dataG.credit[i] * 0.6;
                            if (g < 60)
                                newnode->dataG.finalcredit[i] = 0.0;
                            printf("\n");
                            newnode->dataG.number[i+1] = '\0';
                            newnode->dataG.name[i+1] = '\0';
                            newnode->dataG.subnumber[i][10] = '\0';
                            newnode->dataG.subname[i][50] = '\0';
    
                            printf("----------------------------------\n");
                            printf("      是否继续录入课程信息:\n");
                            printf("             1:是\n");
                            printf("             2:否\n");
                            printf("----------------------------------");
                            choice = getch();
                            printf("\n");
                            if (choice == '2')
                                break;
                        }
                        insertnode(head, newnode);
                        Sleep(500);
                        system("cls");
                        printf("录入成功!");
                        Sleep(500);
                        system("cls");
                        printf("---------------------------------\n");
                        printf("       是否继续录入信息:\n");
                        printf("         1:是\n");
                        printf("         2:返回上一级\n");
                        printf("---------------------------------");
                        choice = getch();
                        Sleep(500);
                        if (choice == '2')
                            break;
                    }while(1);
                }break;
            }
            system("cls");
            printf("---------------------------------\n");
            printf("       是否继续录入信息:\n");
            printf("         1:是\n");
            printf("         2:返回菜单\n");
            printf("---------------------------------");
            choice = getch();
            if (choice == '2')
            {
                menu();
                break;
            }
        }while(1);
        return head;
    }
    void insertnode(node head, node newnode)                      //插入结点
    {
        newnode->next = head->next;
        head->next = newnode;
    }
    void searchinfo (node head)                                   //查找基本信息
    {
        system("cls");
        int n, choice;
        node p = head->next;
        do{
            printf("------------------------------\n");
            printf("        1:学号查找\n");
            printf("        2:姓名查找\n");
            printf("        3:宿舍查找\n");
            printf("------------------------------");
            n = getch();
            printf("\n");
            switch(n)
            {
            case'1':
                {
                    char num[10];
                    while(1)
                    {
                        system("cls");
                        printf("请输入查找的学生学号:");
                        scanf("%s", num);
                        printf("\n");
                        printf("    学号       姓名            性别   宿舍号码            电话号码     \n");
                        if (!p || p->dataI.number[0] == '\0') ; //=============//
                            printf("暂无数据!\n");
                        else
                        {
                            while(p != NULL)
                            {
                                if (strcmp(p->dataI.number,num) == 0)
                                    //p = p->next; //=============//
                                    printf("%10s %-20s %2s %10s %11s\n",p->dataI.number, p->dataI.name, p->dataI.sex, p->dataI.dormitory, p->dataI.telephone);
                                p = p->next;
                            }
                        }
                        printf("---------------------------------\n");
                        printf("       是否继续录入信息:\n");
                        printf("         1:是\n");
                        printf("         2:返回上一级\n");
                        printf("---------------------------------");
                        choice = getch();
                        if (choice == '2')
                            break;
                    }    
                }break;
            case'2':
                {
                    char name[20];
                    while(1)
                    {
                        system("cls");
                        printf("请输入查找的姓名:");
                        scanf("%s", name);
                        printf("    学号       姓名            性别   宿舍号码            电话号码     \n");
                        if (!p || p->dataI.name[0] == '\0') ; //=============//
                            printf("暂无数据!\n");
                        else
                        {
                            while(p != NULL)
                            {
                                if (strcmp(p->dataI.name,name) == 0)
                                    printf("%10s %-20s %2s %10s %11s\n",p->dataI.number, p->dataI.name, p->dataI.sex, p->dataI.dormitory, p->dataI.telephone);
                                p = p->next;
                            }
                        }
                        printf("---------------------------------\n");
                        printf("       是否继续录入信息:\n");
                        printf("         1:是\n");
                        printf("         2:返回上一级\n");
                        printf("---------------------------------");
                        choice = getch();
                        if (choice == '2')
                            break;
                    }
                }
            case'3':
                {
                    char dorm[10];
                    while(1)
                    {
                        system("cls");
                        printf("请输入查找的宿舍号码:");
                        scanf("%s", dorm);
                        printf("    学号       姓名            性别   宿舍号码            电话号码     \n");
                        if (p->dataI.dormitory[0] == '\0')
                            printf("暂无数据!\n");
                        else
                        {
                            while(p != NULL)
                            {
                                if (strcmp(p->dataI.dormitory,dorm) == 0)
                                    printf("%10s %-20s %2s %10s %11s\n",p->dataI.number, p->dataI.name, p->dataI.sex, p->dataI.dormitory, p->dataI.telephone);
                                p = p->next;
                            }
                        }
                        printf("---------------------------------\n");
                        printf("       是否继续录入信息:\n");
                        printf("         1:是\n");
                        printf("         2:返回上一级\n");
                        printf("---------------------------------");
                        choice = getch();
                        if (choice == '2')
                            break;
                    }
                }
            }
        }while(1);    
    }
    void searchgrade(node head)                                         //查找成绩信息
    {
        system("cls");
        int i = 0, choice;
        float sum = 0.0;
        char num[10];
        node p = head->next;
        while(1)
        {
            printf("请输入查找的学生的学号:");
            scanf("%s", num);
            if (p == NULL)
            {
                Sleep(1000);
                printf("暂无数据!");
            }
            while(p != NULL)
            {
                printf("学号:%10s  姓名:%-20s\n",p->dataG.number, p->dataG.name);
                while(p->dataG.subnumber[i][0] != '\0' && p->dataG.subname[i][0] != '\0')
                {
                    printf("课程编号:%-10s  课程名称:%-15s  综合成绩:%-5.1f  实得学分:%-5.1f\n", p->dataG.subnumber[i], p->dataG.subname[i], p->dataG.ovalgrade[i], p->dataG.finalcredit[i]);
                    sum += p->dataG.finalcredit[i];
                    i++;
                }
                printf("共修:%d 科  实得总学分为: %-5.1f\n", i, sum);
                p = p->next;
            }
            system("cls");
            printf("-----------------------------\n");
            printf("       是否继续查找:\n");
            printf("         1:是\n");
            printf("         2:返回上一级\n");
            printf("-----------------------------");
            choice = getch();
            if (choice == '2')
            {
                search(head);
                break;
            }
        }
    }
    void search(node head)                              //信息查询
    {
        system("cls");
        int n;
        printf("---------------------------------\n");
        printf("      请选择要查询的学生信息\n");
        printf("         1:基本信息\n");
        printf("         2:成绩基本信息\n");
        printf("---------------------------------");
        n = getch();
        system("cls");
        printf("请稍后...");
        Sleep(500);
        printf("\n");
        switch (n)
        {
            case '1' : searchinfo(head);break;
            case '2' : searchgrade(head);break;
        }
    }
    void Delete(node head)                                          //信息删除
    {
        system("cls");
        int n, flag = 0;
        node pre = head;
        node cure = head->next;
        char name[20];
        do
        {
            system("cls");
            printf("请输入要删除的学生姓名:");
            scanf("%s",name);
            Sleep(500);
            system("cls");
            if (pre->next == NULL)
                printf ("暂无数据!无法删除!");
            else
            {
                while (cure != NULL && strcmp(cure->dataI.name,name) != 0)
                {
                    pre = cure;
                    cure = pre->next;
                }
                if (pre->next == NULL)
                    printf("查无此人!");
                else
                {
                    pre->next = cure->next;
                    flag = 1;
                    if (flag)
                        printf("删除成功!");
                    else
                        printf("删除失败!");
                    Sleep(500);
                    free (cure);//释放链表
                }
            }
            system("cls");
            printf("|    是否继续删除   |\n");
            printf("       1:确定\n");
            printf("       2:取消\n");
            n = getch();
            Sleep(500);
            if(n == '2')break;
        }while(1);
    }
    void Freelink(node head)             //释放链表
    {
        node p = head->next;
        while(p)
        {
            head->next = p->next;//头指针指向下一个结点
            free(p);//释放结点
            p = head->next;
        }
    }
    void over(node head)
    {
        system("cls");
        int n;
        printf("|   您确定要退出吗?  |\n");
        printf("       1:确定\n");
        printf("       2:取消\n");
        n = getch();
        while(1)
        {
            switch(n)
            {
            case'1':
                {
                    system("cls");
                    system("cls");
                    printf("正在退出...");
                    Sleep(1000);
                    system("cls");
                    printf("退出成功!");
                    system("cls");
                    printf("谢谢使用!");
                    Freelink(head);
                    exit(0);
                    break;
                }
            case'2':
                {
                    menu();
                    break;
                }
            }
        }
    }
    
    node head = NULL; //==================//
    void menu()
    {
        if(head == NULL)    head = creatlist(); ; //=============//
        do
        {
            system("cls");
            int n;
            printf("--------------------------------------\n");
            printf("|      学生学籍信息管理系统          |\n");      
            printf("--------------------------------------\n");
            printf("          1:信息录入\n");
            printf("          2:信息查询\n");
            printf("          3:信息删除\n");
            printf("          4:退出程序\n");
            printf("--------------------------------------\n");
            n = getch();
            Sleep(500);
            switch(n)
            {
                case'1':                          //信息录入
                {
                    creatnode(head);
                }break;
                case'2':                          //信息查询
                {
                    search(head);
                }break;
                case'3':                          //信息删除
                {
                    Delete(head);
                }break;
                case'4':                          //退出程序
                over(head);break;    
            }
        }while(1);
    }
    int main()
    {
        menu();
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(4条)

报告相同问题?

问题事件

  • 系统已结题 12月22日
  • 已采纳回答 12月14日
  • 创建了问题 12月14日