错题本管理程序(链表类)

2. 错题本管理程序: 利用链表实现错题本管理程序。其中错题信息
包括题目、错误信息、答案分析、心得体会、错题来源、错题原
因、难易程度、题目类型、知识点等多项信息。具体实现的管理功
能如下:
1 ) 输入并显示错题的信息;
2 ) 可实现错题信息的添加;
3 ) 查询(至少提供按知识点和题目类型两种方式);
4 ) 修改(提供查询后进行修改);
5 ) 删除(依据指定的信息(知识点和题目类型)查找后删除错
题);
6 )文件的导入和导出(从文件中读取若干条错题信息,或者将
错题信息输出到文件中)。
7 )注意:考虑实现标签分类管理以提高操作效率。
8 )注意:修改、删除操作均在查找后完成,如查找后存在多条
记录符合条件,考虑如何进行选择操作
程序所显示的菜单基本内容如下:
错题本管理程序
1 添加错题信息
2 浏览错题信息
3 查询错题信息
4 删除错题信息
5 文件导入
6 文件导出
7 退出
请选择功能:
代码示例:
#include<iostream>
#include<fstream>
#include<string>
#include<sstream>

using namespace std;

//错题类
class Node
{
public:
    string timu;
    string cuowuxinxi;
    string daan;
    string xinde;
    string laiyuan;
    string yuanyin;
    string nanyi;
    string timuleixing;
    string zhishidian;
    Node * next;

};

//错题本类
class Nodelist
{
private:
    Node * head;
public:
    Nodelist():head(nullptr){}
    //1 添加错题信息
    void add()
    {
       // getchar();
        Node * newnode=new Node ();
        cout<<"请输入错题题目:";
        getline(cin,newnode->timu);
        cout<<"请输入错误信息:";
        getline(cin,newnode->cuowuxinxi);
        cout<<"请输入答案分析:";
        getline(cin,newnode->daan);
        cout<<"请输入心得体会:";
        getline(cin,newnode->xinde);
        cout<<"请输入错题来源:";
        getline(cin,newnode->laiyuan);
        cout<<"请输入错题原因:";
        getline(cin,newnode->yuanyin);
        cout<<"请输入难易程度:";
        getline(cin,newnode->nanyi);
        cout<<"请输入题目类型:";
        getline(cin,newnode->timuleixing);
        cout<<"请输入错题知识点:";
        getline(cin,newnode->zhishidian);

        if(head==nullptr) head=newnode;//如果是第一个节点,设为头结点
        else //找到链表末尾,把新节点添加到链表末尾
        {
            Node * current=head;
            while(current->next)
            {
                current=current->next;
            }
            current->next=newnode;
        }
        cout<<endl;
    }
    //2 浏览错题信息
    void look()
    {
        Node * current=head;
        if(head==nullptr) cout<<"错题本为空,请先添加错题"<<endl;
        else
        {
            while(current)
            {
                cout<<"1 题目:"<<current->timu<<endl;
                cout<<"2 错误信息:"<<current->cuowuxinxi<<endl;
                cout<<"3 答案分析:"<<current->daan<<endl;
                cout<<"4 心得体会:"<<current->xinde<<endl;
                cout<<"5 错题来源:"<<current->laiyuan<<endl;
                cout<<"6 错题原因:"<<current->yuanyin<<endl;
                cout<<"7 难易程度:"<<current->nanyi<<endl;
                cout<<"8 题目类型:"<<current->timuleixing<<endl;
                cout<<"9 知识点:"<<current->zhishidian<<endl;
                cout<<endl;
                current=current->next;
            }
        }
        cout<<endl;
    }
    //修改
    void change()
    {
        getchar();
        cout<<"请输入想要修改的错题题目:";
        string s;
        getline(cin,s);
        int count=0;
            Node * current=head;
            while(current)
            {
                if((current->timu)==s)
                {
                    cout<<"1 题目:"<<current->timu<<endl;
                    cout<<"2 错误信息:"<<current->cuowuxinxi<<endl;
                    cout<<"3 答案分析:"<<current->daan<<endl;
                    cout<<"4 心得体会:"<<current->xinde<<endl;
                    cout<<"5 错题来源:"<<current->laiyuan<<endl;
                    cout<<"6 错题原因:"<<current->yuanyin<<endl;
                    cout<<"7 难易程度:"<<current->nanyi<<endl;
                    cout<<"8 题目类型:"<<current->timuleixing<<endl;
                    cout<<"9 知识点:"<<current->zhishidian<<endl;
                    cout<<"请选择需要修改的条目:";
                    int t;
                    cin>>t;
                    getchar();
                    string c;
                    switch(t)
                    {
                    case 2:
                        cout<<"请输入修改后的错误信息:";
                        getline(cin,c);
                        current->cuowuxinxi=c;
                        break;
                    case 3:
                        cout<<"请输入修改后的答案分析:";
                        getline(cin,c);
                        current->daan=c;
                        break;
                    case 4:
                        cout<<"请输入修改后的心得体会:";
                        getline(cin,c);
                        current->xinde=c;
                        break;
                    case 5:
                        cout<<"请输入修改后的错题来源:";
                        getline(cin,c);
                        current->laiyuan=c;
                        break;
                    case 6:
                        cout<<"请输入修改后的错题原因:";
                        getline(cin,c);
                        current->yuanyin=c;
                        break;
                    case 7:
                        cout<<"请输入修改后的难易程度:";
                        getline(cin,c);
                        current->nanyi=c;
                        break;
                    case 8:
                        cout<<"请输入修改后的题目类型:";
                        getline(cin,c);
                        current->timuleixing=c;
                        break;
                    case 9:
                        cout<<"请输入修改后的知识点:";
                        getline(cin,c);
                        current->zhishidian=c;
                        break;
                    cout<<"修改完成"<<endl;
                    break;
                    }

                    break;
                }
                current=current->next;
            }
            if(count==0) cout<<"不存在该知识点的错题"<<endl;

    }
    //3 查询错题信息
    void seek()
    {
        cout<<"请输入查询方式(1知识点 2题目类型):";
        int choice;
        cin>>choice;
        getchar();
        if(choice==1)
        {
            int count=0;
            cout<<"请输入要查询的错题的知识点:";
            string s;
            getline(cin,s);
            Node * current=head;
            while(current)
            {
                if((current->zhishidian)==s)
                {
                    count=1;
                    cout<<"1 题目:"<<current->timu<<endl;
                    cout<<"2 错误信息:"<<current->cuowuxinxi<<endl;
                    cout<<"3 答案分析:"<<current->daan<<endl;
                    cout<<"4 心得体会:"<<current->xinde<<endl;
                    cout<<"5 错题来源:"<<current->laiyuan<<endl;
                    cout<<"6 错题原因:"<<current->yuanyin<<endl;
                    cout<<"7 难易程度:"<<current->nanyi<<endl;
                    cout<<"8 题目类型:"<<current->timuleixing<<endl;
                    cout<<"9 知识点:"<<current->zhishidian<<endl;
                    cout<<endl;
                }
                current=current->next;
            }
            if(count==0) cout<<"不存在该知识点的错题"<<endl;
        }
        else
        {
            int count=0;
            cout<<"请输入要查询的错题的题目类型:";
            string s;
            getline(cin,s);
            Node * current=head;
            while(current)
            {
                if((current->timuleixing)==s)
                {
                    count=1;
                    cout<<"1 题目:"<<current->timu<<endl;
                    cout<<"2 错误信息:"<<current->cuowuxinxi<<endl;
                    cout<<"3 答案分析:"<<current->daan<<endl;
                    cout<<"4 心得体会:"<<current->xinde<<endl;
                    cout<<"5 错题来源:"<<current->laiyuan<<endl;
                    cout<<"6 错题原因:"<<current->yuanyin<<endl;
                    cout<<"7 难易程度:"<<current->nanyi<<endl;
                    cout<<"8 题目类型:"<<current->timuleixing<<endl;
                    cout<<"9 知识点:"<<current->zhishidian<<endl;
                    cout<<endl;
                }
                current=current->next;
            }
            if(count==0) cout<<"不存在该题目类型的错题"<<endl;
        }
        cout<<endl;
    }
    //4 删除错题信息
    void deldets()
    {
        cout<<"请输入删除方式(1知识点 2题目类型):";
        int choice;
        cin>>choice;
        getchar();
        if(choice==1)
        {
            int count=0;
            cout<<"请输入要删除的错题的知识点:";
            string s;
            getline(cin,s);
            Node * current=head;
            if(head->zhishidian==s)
            {
                Node * temp=current->next;
                head=temp;
                delete current;
                cout<<"删除成功"<<endl;
                return ;
            }
            while(current->next)
            {
                Node * temp=current->next;
                if((temp->zhishidian)==s)
                {
                    current->next=temp->next;
                    delete temp;
                    cout<<"删除成功"<<endl;
                return ;
                }
                current=current->next;
            }
            if(count==0) cout<<"不存在该知识点的错题"<<endl;
        }
        else
        {
            int count=0;
            cout<<"请输入要删除的错题的题目类型:";
            string s;
            getline(cin,s);
            Node * current=head;
            if(head->timuleixing==s)
            {
                Node * temp=current->next;
                head=temp;
                delete current;
                cout<<"删除成功"<<endl;
                return ;
            }
            while(current->next)
            {
                Node * temp=current->next;
                if((temp->timuleixing)==s)
                {
                    current->next=temp->next;
                    delete temp;
                    cout<<"删除成功"<<endl;
                return ;
                }
                current=current->next;
            }
            if(count==0) cout<<"不存在该知识点的错题"<<endl;
        }
        cout<<endl;
    }
    //5 文件导入,将文件中的信息输出到屏幕上
    void infile()
    {
        ifstream ifile("notequestion.txt");
        if(ifile.is_open())
        {
        Node * newnode=new Node ();
        getline(ifile,newnode->timu);
        getline(ifile,newnode->cuowuxinxi);
        getline(ifile,newnode->daan);
        getline(ifile,newnode->xinde);
        getline(ifile,newnode->laiyuan);
        getline(ifile,newnode->yuanyin);
        getline(ifile,newnode->nanyi);
        getline(ifile,newnode->timuleixing);
        getline(ifile,newnode->zhishidian);

        if(head==nullptr) head=newnode;//如果是第一个节点,设为头结点
        else //找到链表末尾,把新节点添加到链表末尾
        {
            Node * current=head;
            while(current->next)
            {
                current=current->next;
            }
            current->next=newnode;
        }
        ifile.close();
        cout<<"文件导入成功"<<endl;
    }
    }
    //6 文件导出,将程序中的数据导入到文件中
    void outfile()
    {
        ofstream  ofile("notequestion.txt");
        Node * current=head;
        if(ofile.is_open())
        {
            while(current)
            {
                ofile<<current->timu<<endl;
                ofile<<current->cuowuxinxi<<endl;
                ofile<<current->daan<<endl;
                ofile<<current->xinde<<endl;
                ofile<<current->laiyuan<<endl;
                ofile<<current->yuanyin<<endl;
                ofile<<current->nanyi<<endl;
                ofile<<current->timuleixing<<endl;
                ofile<<current->zhishidian<<endl;
                current=current->next;
            }
        }
        ofile.close();
        cout<<"文件导出成功"<<endl;
    }
};

int main()
{
    Nodelist lists;
    int choice;
    do
    {
    cout<<"错题本管理程序:"<<endl;
    cout<<"1 添加错题信息"<<endl;
    cout<<"2 浏览错题信息"<<endl;
    cout<<"3 查询错题信息"<<endl;
    cout<<"4 删除错题信息"<<endl;
    cout<<"5 文件导入"<<endl;
    cout<<"6 文件导出"<<endl;
    cout<<"7 退出"<<endl;
    cout<<"请选择功能:";
    cin>>choice;
getchar();
        switch(choice)
        {
        case 1:
            lists.add();
            break;
        case 2:
            lists.look();
            break;
        case 3:
            lists.seek();
            cout<<"是否需要对错题进行修改(1是 2否):";
            int t;
            cin>>t;
            if(t==1) lists.change();
            break;
        case 4:
            lists.deldets();
            break;
        case 5:
            lists.infile();
            break;
        case 6:
            lists.outfile();
            break;
        }
    }while(choice!=7);

    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值