豆粉今天敲了吗 2022-12-04 21:35 采纳率: 100%
浏览 92
已结题

_关于学生管理平台怎么添加学生结构体里的数据并且能够打印出来(源码运用链表)

关于学生管理平台怎么在运用链表的情况下修改结构体里的数据并且能够打印出来
//////////////////////
这是我修改数据之前的代码,只有姓名年龄学号成绩,但是最终的程序是要加一个等级的,等级是lg(成绩+1)这样算的

#include <stdio.h>
#include<conio.h>
#include<stdlib.h>
#include <string.h>
#include <math.h>

typedef struct _Student
{
    char name[20];// 姓名
    int age; //年龄
    int stuNum;//学号
    int score;//成绩
    
    
}Student;
//链表(车厢)

typedef struct _Node
{
    Student stu;    //学生
    struct _Node* pNext;//指向下一个节点的指针

}Node;
//头结点
Node* g_pHead = NULL; //头结点

然后我就想知道,我这样改行不行,

typedef struct _Student
{
    char name[20];// 姓名
    int age; //年龄
    int stuNum;//学号
    int score;//成绩
   double Level;//定义等级
    
}Student;

这个结构体在录入学生成绩,修改学生成绩时需要用到的,接下来我就要展示我的录入学生成绩和修改学生成绩,由于我链表不是太精通,而且我也是在别的大佬的帮助下用的链表,所以请各位能不能用链表(顺着这个思路帮我修改一下)
这是录入学生信息并打印,这一个我运行正常了,可以给你们看下面的截图

//录入学生信息
void InputStudent() {
    char charge;    //准备打印学生信息
    //创建一个新节点
    Node* pNewNode = (Node*)malloc(sizeof(Node));
    pNewNode->pNext = NULL;
//头插法链表
    if (g_pHead == NULL) //没有头
    {
        g_pHead = pNewNode; //定义一个头
    }
    else
    {
        pNewNode->pNext = g_pHead;
        g_pHead = pNewNode;
    }
    printf("请输入学生姓名:\n");
    scanf("%s", pNewNode->stu.name);
    printf("请输入学生的年龄:\n");
    scanf("%d", &pNewNode->stu.age);
    printf("请输入学生的学号:\n");
    scanf("%d", &pNewNode->stu.stuNum);
    printf("请输入学生的成绩:\n");
    scanf("%d", &pNewNode->stu.score);

    printf("学生信息录入成功\n");
    system("pause");//画面停留
    //清屏
    system("cls");
}
void PrintStudent() //打印学生信息
{
    system("cls");
    printf("-----------------------------------------------------——---------------\n");
    printf("--     欢迎使用学生管理平台(超级无敌牛逼版vol.2)                      --\n"); 
    printf("------------------------------------------------------------------------\n");
    printf("--     -学号-     -姓名-     -年龄-     -成绩-     -等级-      -积分  --\n");
    printf("------------------------------------------------------------------------\n");
    //遍历链表
    Node* p = g_pHead;
    while (p != NULL)//只要节点不到头就一直往下打印
    {
        double Level = log10(p->stu.score + 1);
        printf("--      -%d-      -%s-     -%d-     -%d-      -%.0f-      -%d-     --\n",
            p->stu.stuNum,
            p->stu.name,
            p->stu.age,
            p->stu.score,
            Level,
            p->stu.score);
        p = p->pNext;
    }
    system("pause");//画面停留
    //清屏
    system("cls");
}
//保存学生信息

img

img

可是问题就出现在如何修改学生信息的时候这个等级也会跟着变化,比如小明的100分,我要修改为60分,这样下去,按照正确的代码的话应该等级降为1级,但是我的bug就在这里出现了
首先给你们看修改前的源码


//修改学生信息
void ModifyStudent()
{
    int nStuNum;
    printf("请输入需要修改学生信息的学号:\n");
    scanf("%d", &nStuNum);

    Node* p = g_pHead;
    while (p != NULL)
    {

        if (p->stu.stuNum == nStuNum)
        {
            
            printf("请输入要修改的学生的姓名 年龄 成绩:\n");
            scanf("%s %d %d", p->stu.name, &p->stu.age, &p->stu.score);
            printf("修改成功\n");
            break;
        }
        p = p->pNext;
    }
    if (p == NULL)
    {
        printf("没有找到该学生的信息\n");
    }
    system("pause"); //画面停留

    system("cls");   //清屏
}

这样如果运行的话,修改的成绩并不会影响等级,然后我就进行了如下的修改


//修改学生信息
void ModifyStudent()
{
    int nStuNum;
    printf("请输入需要修改学生信息的学号:\n");
    scanf("%d", &nStuNum);

    Node* p = g_pHead;
    while (p != NULL)
    {

        if (p->stu.stuNum == nStuNum)
        {
            
            printf("请输入要修改的学生的姓名 年龄 成绩:\n");
            scanf("%s %d %d", p->stu.name, &p->stu.age, &p->stu.score);
            p->stu.Level = log10(p->stu.score + 1);  //**看这里看这里,这个就是我修改的地方,我直接把这个p指向的Level给这么赋值行不行,主要我真的不太懂,请大家帮忙改动__**
            printf("修改成功\n");
            break;
        }
        p = p->pNext;
    }
    if (p == NULL)
    {
        printf("没有找到该学生的信息\n");
    }
    system("pause"); //画面停留

    system("cls");   //清屏
}

这次运行的结果出错了,等级仍未变为1级,反而还是2级,截图如下
_修改前_

img


修改中

img


修改后

img

/////////////////////////////////
所以我的问题就在这里,请各位帮忙,如果能找出我的错误,我不胜感激

  • 写回答

1条回答 默认 最新

  • laocooon523857886 2022-12-10 14:40
    关注

    等级不用处理。在输出时再处理就行了。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 12月19日
  • 已采纳回答 12月11日
  • 创建了问题 12月4日

悬赏问题

  • ¥15 网友们我该怎么办啊,急
  • ¥15 混合键合键合机对准标识
  • ¥100 现在不懂的是如何将当前的相机中的照片,作为纹理贴图,映射到扫描出的模型上
  • ¥15 目标跟踪,计算机视觉
  • ¥15 魔霸ROG7 pro,win11.息屏后会显示黑屏,如图,如何解决?(关键词-重新启动)
  • ¥15 有没有人知道这是哪里出了问题啊?要怎么改呀?
  • ¥200 C++表格文件处理-悬赏
  • ¥15 Windows Server2016本地登录失败
  • ¥15 复合卡卡号轨道写入芯片卡
  • ¥20 基于MATLAB的TDOA