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;
}