weilaihhhh 2023-03-09 22:16 采纳率: 71.4%
浏览 17
已结题

用list书写学生管理系统遇到的问题


#include<iostream>
#include<list>
#include<algorithm>
#include<cstdio>
using namespace std;
struct stu
{
    string name;
    
    int score;
};
list<struct stu>vk;

void makemenu()
{
    cout<<"---------学生成绩管理----------"<<endl;
    cout<<"1.录入功能"<<endl;
    cout<<"2.插入功能"<<endl; 
    cout<<"3.浏览功能"<<endl; 
    cout<<"4.删除功能"<<endl;
    cout<<"5.修改功能"<<endl;
    cout<<"6.查询功能"<<endl; 
    cout<<"7.退出系统"<<endl;
    cout<<"-----------------------------------"<<endl; 
}

long get_long()
{
    long input;
    char ch;
    while(scanf("%d", &input) != 1)
    {
        while((ch = getchar())!= '\n') 
            putchar(ch);
        cout<<"输入错误,请重新输入"<<endl; 
    }
    
    return input;}
    
    
void keydown()
{long m;
struct stu b;
struct stu a;
list<stu>::iterator it=vk.begin();
list<stu>::iterator it1=vk.begin();
string nname;
string n1name;
int score;
m=get_long();
switch(m)
    {
        
        case 1:cout<<"----【录入模块】----"<<endl;
        cout<<"请输入想录入的学生姓名和成绩。"<<endl; 
        cin>>b.name>>b.score;
        vk.push_back(b);
        break;
        
        case 2:cout<<"----【插入模块】----"<<endl;
             cout<<"请输入想在谁的前面插入"<<endl; 
             cin>>nname;
            for(it1=vk.begin();(*it1).name!=nname&&it1!=vk.end();it1++);
        
                if((*it1).name==nname)
            {cout<<"请输入想要插入的学生和成绩!"<<endl;
            cin>>a.name>>a.score;
            vk.insert(it1,a);
            }
            break;
            
        case 3:cout<<"----【浏览模块】----"<<endl;
        for(;it!=vk.end();it++)    
            {
                cout<<(*it).name<<' '<<(*it).score<<endl;
            }
        break;
            
        case 4:cout<<"----【删除模块】----"<<endl;
        cout<<"请输入想删除的学生姓名。"<<endl; 
        cin>>nname;
        for(it1=vk.begin();(*it1).name!=nname&&it1!=vk.end();it1++);
        
                if((*it1).name==nname)
            {
               vk.erase(it1);
            }
            
         if(it1==vk.end())
        {
            cout<<"想要删除的对象不存在"<<endl; 
        }
        break;
        
        case 5:cout<<"----【修改模块】----"<<endl;
        cout<<"请输入想修改的学生姓名。"<<endl; 
        cin>>nname;
            for(it1=vk.begin();(*it1).name!=nname&&it1!=vk.end();it1++);
        
                if((*it1).name==nname)
            {cout<<"请输入新同学的学生姓名和成绩。"<<endl; 
            cin>>n1name>>score;
               (*it1).name=n1name;
               (*it1).score=score;
            }
            
         if(it1==vk.end())
        {
            cout<<"想要改变的对象不存在"<<endl; 
        }
        break;
        
        case 6:cout<<"----【查询模块】----"<<endl;
        cout<<"请输入想查询的学生姓名。"<<endl; 
            cin>>nname;
            for(it1=vk.begin();(*it1).name!=nname&&it1!=vk.end();it1++);
        
                if((*it1).name==nname)
            {cout<<(*it1).name<<' '<<(*it1).score<<endl;
            }
            
         if(it1==vk.end())
        {
            cout<<"想要查询的对象不存在"<<endl; 
        }
        break;
        
        case 7:cout<<"----【退出系统】----"<<endl;
              exit(0);
              break;
    }
}
int main()
{

while(1)
{
        makemenu();
        keydown();
        system("pause");
        system("cls");
}
return 0;
}

img

img


为啥我输入对的名字可以正常实现功能,但输入一个错误的名字不会输出下面 if(it1==vk.end())中的话。

  • 写回答

4条回答 默认 最新

  • ksgpjhqf 2023-03-10 00:18
    关注

    越界访问了,当it1==vk.end()时,“(*it1).name==nname”访问了vk.end()。
    应该用if-else排除,示例:

            case 5:
                cout << "----【修改模块】----" << endl;
                cout << "请输入想修改的学生姓名。" << endl;
                cin >> nname;
                for (it1 = vk.begin(); (*it1).name != nname && it1 != vk.end(); it1++);
                if (it1 == vk.end()) {
                    cout << "想要改变的对象不存在" << endl;
                } else if ((*it1).name == nname) {
                    cout << "请输入新同学的学生姓名和成绩。" << endl;
                    cin >> n1name >> score;
                    (*it1).name = n1name;
                    (*it1).score = score;
                }
    
                break;
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)

报告相同问题?

问题事件

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

悬赏问题

  • ¥20 有偿 写代码 要用特定的软件anaconda 里的jvpyter 用python3写
  • ¥20 cad图纸,chx-3六轴码垛机器人
  • ¥15 移动摄像头专网需要解vlan
  • ¥20 access多表提取相同字段数据并合并
  • ¥20 基于MSP430f5529的MPU6050驱动,求出欧拉角
  • ¥20 Java-Oj-桌布的计算
  • ¥15 powerbuilder中的datawindow数据整合到新的DataWindow
  • ¥20 有人知道这种图怎么画吗?
  • ¥15 pyqt6如何引用qrc文件加载里面的的资源
  • ¥15 安卓JNI项目使用lua上的问题