m0_74075767 2022-12-28 11:48 采纳率: 100%
浏览 23
已结题

C++学生管理系统编辑错误

问题描述:
编辑学生信息时,无法正确进行修改,更改后的信息输入不进去,姓名性别和年级都没有按照输入的值进行输出,而且运行后界面会卡在那里

img

#include<iostream>
#include<stdlib.h>
using namespace std;
#include"mylist.h"
void menu()
{
    cout << "-------------学生信息管理系统-------------" << endl;
    cout << "请通过键盘进行输入操作" << endl;
    cout << "1-----添加学生信息" << endl;//ok
    cout << "2-----查询学生信息" << endl;//ok
    cout << "3-----显示学生信息" << endl;//ok
    cout << "4-----编辑学生信息" << endl;
    cout << "5-----删除学生信息" << endl;//ok
    cout << "6-----统计学生信息" << endl;
    cout << "0-----退出系统" << endl;
    cout << "----------------------------------------------" << endl;
}
struct node* list = createlist();
void choose()
{
    student data;
    int choose;
        cin >> choose;
        switch (choose)
        {
        case 1:
            cout << "请输入学生学号,姓名,性别,年龄,年级(一次仅限输入一人)" << endl;
            cin.sync();
            cin >> data.number >> data.name >> data.sex >> data.age >> data.classroom;
            insertlist(list, data);
            break;
        case 2:
            cout << "请输入学生学号" << endl;
            cin.sync();
            cin >> data.number;
            searchdata(list, data.number);
            break;
        case 3:
            cout << "学生信息如下" << endl;
            printlist(list);
            break;
        case 4:
            cout << "输入修改学生的学号" << endl;
            cin.sync();
            cin >> data.number;
            editordata(list, data.number);
            break;
        case 5:
            cout << "输入删除学生学号" << endl;
            cin >> data.number;
            deletenode(list, data.number);
            break;
        case 6:
            cout << "统计数据如下" << endl;
            break;
        case 0:
            cout << "正常退出" << endl;

            break;
        }
    }
int main()
{
    while (1)
    {
        menu();
        choose();
        system("pause");
        system("cls");
    }
    system("pause");
    return 0;
}
#pragma once
#include<iostream>
#include<iomanip>
using namespace std;
struct student
{
    char number[20];
    char name[20];
    int age;
    char sex[5];
    char classroom[10];
    friend ostream& operator<<(ostream& output, student& s);
    friend istream& operator>>(istream& input, student& s);
};
istream& operator>>(istream& input, student& s)
{
    input >> s.number >> s.name >> s.age >> s.sex >> s.classroom;
    return input;
 }
ostream& operator<<(ostream& output, student& s)
{
    output << setw(10) << s.number << "||" << setw(10) << s.name  << "||" << setw(10) << s.sex << "||" << setw(10) << s.age << "||" << setw(10) << s.classroom;
    return output;
}
struct node
{
    student data;
    node* next;
};
struct node* createlist()
{
    node* headnode = (node*)malloc(sizeof(node));
    headnode->next = NULL;
    return headnode;
}
struct node* createnode(student a)
{
    node* newnode = (node*)malloc(sizeof(node));
    newnode->data = a;
    newnode->next = NULL;
    return newnode;
}
void printlist(node* headnode)
{
    node* put = headnode->next;
    cout << setw(10) << "学号" << "||" << setw(10) << "姓名" << "||" << setw(10) << "性别" << "||" << setw(10) << "年龄" << "||" << setw(10) << "年级" << endl;
    while (put)
    {
        cout << put->data << endl;
        put = put->next;
    }

}
void insertlist(struct node* headnode, student a)
{
    node* insert = createnode(a);
    insert->next = headnode->next;
    headnode->next = insert;
}
void deletenode(node* headnode, char* number)
{
    node* frontdeletenode = headnode;
    node* deletenode = headnode->next;
    while (strcmp(deletenode->data.number,number))
    {
        frontdeletenode = deletenode;
        deletenode = frontdeletenode->next;
        if (deletenode == NULL)
        {
            cout << "没有找到相关数据" << endl;
            return;
        }
        frontdeletenode->next = deletenode->next;
    }
    free(deletenode);
}
 void* searchdata(struct node* headnode, char* number)
{
    struct node* pmove = headnode->next;
    if (pmove == NULL)
    {
        return NULL;
    }
    while (strcmp(pmove->data.number,number))
    {
        pmove = pmove->next;
    }
    cout << pmove->data << endl;
}
 void* editordata(struct node* headnode, char* number)
 {
     student s;
     struct node* pmove = headnode->next;
     if (pmove == NULL)
     {
         return NULL;
     }
     while (strcmp(pmove->data.number, number))
     {
         pmove = pmove->next;
     }
     cout << "请输入学生学号,姓名,性别,年龄,年级(一次仅限输入一人" << endl;
     cin >> s;
     pmove->data = s;
     cout << setw(10) << "学号" << "||" << setw(10) << "姓名" << "||" << setw(10) << "性别" << "||" << setw(10) << "年龄" << "||" << setw(10) << "年级" << endl;
     cout << pmove->data;
 }
  • 写回答

2条回答 默认 最新

  • bingbingyihao 2022-12-28 11:59
    关注

    回答:应该是你这个地方判断学号是否相等出错了,应该是判断strcmp(pmove->data.number, number) != 0,因为如果不相等是包括小于0和大于0的

    img

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

报告相同问题?

问题事件

  • 系统已结题 1月5日
  • 已采纳回答 12月28日
  • 修改了问题 12月28日
  • 创建了问题 12月28日

悬赏问题

  • ¥100 嵌入式系统基于PIC16F882和热敏电阻的数字温度计
  • ¥20 BAPI_PR_CHANGE how to add account assignment information for service line
  • ¥500 火焰左右视图、视差(基于双目相机)
  • ¥100 set_link_state
  • ¥15 虚幻5 UE美术毛发渲染
  • ¥15 CVRP 图论 物流运输优化
  • ¥15 Tableau online 嵌入ppt失败
  • ¥100 支付宝网页转账系统不识别账号
  • ¥15 基于单片机的靶位控制系统
  • ¥15 真我手机蓝牙传输进度消息被关闭了,怎么打开?(关键词-消息通知)