weilaihhhh 2023-03-03 17:23 采纳率: 71.4%
浏览 25
已结题

c++链表书写学生管理系统的bug

#include<iostream>
#include<cstring>
#include<cassert>
#include<cstdio>
using namespace std;
struct student
{
    char name[20];
    char num[20];
    int math;
    int english;
    int py;
    int sum;
    int average;
};
struct node
{
    struct student data;
    struct node*next;
    
};
struct node*head;
struct node* createhead()
{  
    struct node*headnode=(struct node*)malloc(sizeof(struct node));
    assert(headnode);//判断是否申请内存成功
    headnode->next=NULL;
    return headnode;
    
}
struct node* createnode(struct student data)
{
    struct node*newnode=(struct node*)malloc(sizeof(struct node));
    assert(newnode);//判断是否申请内存成功
    newnode->data=data;
    newnode->next=NULL;
    return newnode;
    
}
void insertnode(struct node*headnode,struct student data)//headnote只需要,createnode函数只用调用一次 ,后面只需传入头节点就行 
{
 
    struct node*newnode=createnode(data);
    newnode->next=headnode->next;
    headnode->next=newnode;
   
    
}
void printlist(struct node*headnode)
{   
    struct node*passnode=headnode->next;
    cout<<"姓名"<<"\t" <<"编号"<<"\t" <<"数学"<<"\t" <<"英语"<<"\t"<<"py"<<"\t"<<"总分"<<"\t"<<"平均分"<<"\t"<<endl;
    while(passnode!=NULL)
    {
        cout<<passnode->data.name<<"\t"<<passnode->data.num<<"\t"<<passnode->data.math<<"\t"<<passnode->data.english<<"\t"<<passnode->data.py<<"\t"<<passnode->data.sum<<"\t"<<passnode->data.average<<endl;
        passnode=passnode->next;
    }
}
void makemenu()
{
    cout<<"---------链式学生管理系统----------"<<endl;
    cout<<"1.录入功能"<<endl;
    cout<<"2.浏览功能"<<endl;
    cout<<"3.查找功能"<<endl;
    cout<<"4.修改功能"<<endl;
    cout<<"5.删除功能"<<endl;
    cout<<"6.退出系统"<<endl;
    cout<<"-----------------------------------"<<endl; 
}
void deletedata(struct node*headnode,const char*name)
{
    struct node*prenode=headnode;
    struct node*curnode=headnode->next;
    while(curnode!=NULL&&strcmp(curnode->data.name,name))
    {
        prenode=curnode;
        curnode=prenode->next;
    }
    if(curnode=NULL)
    {
        cout<<"删除失败,没有找到指定数据"<<endl; 
    }
    else
    {
        prenode->next=curnode->next;
        free(curnode);
    }
}
struct node*searchdata(struct node*headnode,const char*name)
{
    struct node*pmove=headnode->next;
    while(pmove!=NULL&&strcmp(pmove->data.name,name))
    {
        pmove=pmove->next;
    }
    return pmove;
}
void keydown()
{int m;
cin>>m;
struct student temp;
struct node*result;
    switch(m)
    {
        case 1:cout<<"----【录入模块】----"<<endl;
        cout<<"请输入学生信息:"<<endl;
        cout<<"姓名"<<"\t" <<"编号"<<"\t" <<"数学"<<"\t" <<"英语"<<"\t"<<"py"<<endl;
         cin>>temp.name>>temp.num>>temp.math>>temp.english>>temp.py;
         temp.sum=temp.math+temp.english+temp.py;
         temp.average=temp.sum/3;
         insertnode(head,temp);
        break;
        
        case 2:cout<<"----【浏览模块】----"<<endl;
        printlist(head);
        break;
        
        case 3:cout<<"----【查找功能】----"<<endl;
        cout<<"请输入要查找的名字:";
        cin>>temp.name;
        searchdata(head,temp.name);
        result=searchdata(head,temp.name);
        if(result==NULL)
        {
            cout<<"未找到结果"; 
        }
        else
        {
            cout<<"姓名"<<"\t" <<"编号"<<"\t" <<"数学"<<"\t" <<"英语"<<"\t"<<"py"<<"\t"<<"总分"<<"\t"<<"平均分"<<endl;
                cout<<result->data.name<<"\t"
                    <<result->data.num<<"\t"
                    <<result->data.math<<"\t"
                    <<result->data.english<<"\t"
                    <<result->data.py<<"\t"
                    <<result->data.sum<<"\t"
                    <<result->data.average<<"\t";
        }
        break; 
        
        case 4:cout<<"----【修改功能】----"<<endl;
            cout<<"请输入要修改的名字:";
        cin>>temp.name;
        result=searchdata(head,temp.name);
        if(result==NULL)
        {
            cout<<"未找到结果"; 
        }
        else
        {cout<<"输入新同学信息:"<<endl ; 
            cout<<"姓名"<<"\t" <<"编号"<<"\t" <<"数学"<<"\t" <<"英语"<<"\t"<<"py"<<endl;
            
            
        cin>>result->data.name>> result->data.num>> result->data.math>> result->data.english>>result->data.py;
                result->data.sum=result->data.math+result->data.english+result->data.py;
         result->data.average=result->data.sum/3;
        }
        break;
        
        case 5:cout<<"----【删除功能】----"<<endl;
        cout<<"请输入要删除的学生姓名:";
        cin>>temp.name ;
        deletedata(head,temp.name);
        break;
        
        case 6:cout<<"----【退出系统】----"<<endl;
        exit(0);
        break;    
        default:
               cout<<"输入错误,请重新输入!"<<endl;
        
               break;
    }
}


int main()
{ head=createhead();
    while(1)
    {
        makemenu();
        keydown();
        system("pause");
        system("cls");
    }
    return 0;
}

img

img

这个程序如果输入的不是数字而是字母,按任意键就会一直循环执行default,system("pause")和system("cls")的功能,且无法输入任何数据,这个要怎么修改。

  • 写回答

3条回答 默认 最新

  • 快乐鹦鹉 2023-03-03 17:41
    关注

    79行 if(curnode=NULL) 这能对么
    你的问题参考一下:
    https://www.cnblogs.com/liujiaxin2018/p/15187692.html

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(2条)

报告相同问题?

问题事件

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

悬赏问题

  • ¥20 c语言写的8051单片机存储器mt29的模块程序
  • ¥60 求直线方程 使平面上n个点在直线同侧并且距离总和最小
  • ¥50 java算法,给定试题的难度数量(简单,普通,困难),和试题类型数量(单选,多选,判断),以及题库中各种类型的题有多少道,求能否随机抽题。
  • ¥50 rk3588板端推理
  • ¥250 opencv怎么去掉 数字0中间的斜杠。
  • ¥15 这种情况的伯德图和奈奎斯特曲线怎么分析?
  • ¥250 paddleocr带斜线的0很容易识别成9
  • ¥15 电子档案元素采集(tiff及PDF扫描图片)
  • ¥15 flink-sql-connector-rabbitmq使用
  • ¥15 zynq7015,PCIE读写延时偏大