编写一个程序,实现具有如下功能的交互式字典: (1)可以查询每个单词的解释。例如:输入“Hello”将显示 10

编写一个程序,实现具有如下功能的交互式字典:(1)可以查询每个单词的解释。例如:输入“Hello”将显示意思“agreeting”。(2)能够加入新的单词和解释。(3)能... 编写一个程序,实现具有如下功能的交互式字典:

(1)可以查询每个单词的解释。例如:输入“Hello”将显示意思“a greeting”。

(2)能够加入新的单词和解释。

(3)能够删除单词和解释。

(4)将所有单词和解释保存在一个文件中,程序运行时可以读取。

以下是问题补充和编写的程序,但是经过修改,显示没有错误和警告。但是运行时查找,插入,删除单词时就卡住不动了。请高人运行一下并指点,到底是怎么回事?谢谢了!
展开
 我来答
匿名用户
2010-08-15
展开全部
其中,涉及到文件的读写,这里给出包含的头文件和主要的方法:

#include <fstream.h>

#include <string.h>

#include <iostream.h>

//读文件用到的方法

fstream file;

file.open("data.txt",ios::in);//以读方式打开文件data.txt

file.eof() 判断文件是否读完

file.getline(char *line, int n)

getline方法用于从文件里读取一行字符。其中,第一个参数line是一个指向字符串的字符指针或存放字符串的字符数组,n表示本次读取的最大字符个数。

//写文件用到的方法

file.open("data.txt",ios::out);//以写方式打开文件data.txt

file.write(char *line, int n)

write方法用于向文件写一行字符。其中,第一个参数line是一个指向字符串的字符指针或存放字符串的字符数组,n表示本次写的字符个数。

file.put(char c), put方法用于向文件写一个字符。

file.close();//关闭文件 ,不论读或写文件,使用完后需要关闭文件。

程序如下,经过修改,显示没有错误和警告。但是运行时查找,插入,删除单词时就卡住了。请高人指点,到底是怎么回事?谢谢了!

dictionary.h
#ifndef _DICTIONARY_H
#define _DICTIONARY_H
const int size=30;

/*******************公有部分***********************/
dictionary::dictionary()//如果记录为空,创建一个*作为结尾
{
text.open("d:\\tiny-dict.txt",ios::in|ios::out);
if(text.eof())
text<<"* ";

text.close();
}

void dictionary::findWord()
{
cout<<"请输入所要查询的单词."<<endl;
string word;
cin>>word;
text.open("d:\\tiny-dict.txt",ios::in);//打开一个文件作读操作
int i=0;
while(1)
{

string temp;
text>>temp;
if(temp=="*")//在数据的末尾加上*表示文件结束
{
cout<<"未找到该单词."<<endl;
break;
}
if(word==temp)
{
cout<<"释义:";
do
{
text>>temp;
if(temp=="%")//在释义末尾加上%表示释义结束
break;
cout<<temp<<" ";
}while(temp!="%");
cout<<endl;
}
if(temp=="%")
break;
i+=size;
text.seekg(i,ios::beg);
}
text.close();
}

void dictionary::insertWord()
{
cout<<"输入你所要添加的单词."<<endl;
string word;
cin>>word;

cout<<"输入你添加单词的释义."<<endl;
string paraphrase;
cin.ignore();
getline(cin,paraphrase);
cout<<paraphrase<<endl;

text.open("d:\\tiny-dict.txt",ios::in|ios::out);
char z;
int i=-size;
while(z!='*'&&z!='+')//*用来标识结尾,+用来表示删除一个单词留下的区域
{
i+=size;
text.seekp(i);
text>>z;
}
if(word.length()+paraphrase.length()+4>size)//单词与释义之间一个空格和用于标识结尾的空格加%加空格所以加4
{
cout<<"输入太长,插入失败."<<endl;
return ;
}
text.seekp(i,ios::beg);
text<<word<<" "<<paraphrase<<" % ";

if(z=='+')
{
text.close();
return ;
}
text.seekp(i+size,ios::beg);
text<<"* ";
text.close();
}

void dictionary::deleteWord()
{
cout<<"请输入删除的单词."<<endl;
string word;
cin>>word;
text.open("d:\\tiny-dict.txt",ios::in|ios::out);
string Deleted;
int i=-size;//标记删除的位置
do
{
i+=size;
text.seekg(i);
text>>Deleted;
if(Deleted=="*")
{
cout<<"未发现该单词,删除失败"<<endl;
return ;
}
}while(Deleted!=word);

text.seekp(i);
text<<"+ ";//第一元素标记为+,表示空
for(int j=1;j<size;j++)
{
text<<" ";
}
cout<<"删除成功."<<endl;
text.close();
}

#endif

main.cpp
using std::cout;
using std::endl;
using std::cin;

#include<fstream>
using std::ios;
using std::fstream;

#include<string>
using std::string;
using std::getline;

#include"dictionary.h"

class dictionary
{
public:
dictionary();
void findWord();
void insertWord();
void deleteWord();

private:
fstream text;
};

void instruction()
{
cout<<"请选择:\n(1).查找单词\n(2).插入单词\n(3).删除单词\n(4).退出\n";
}
int main()
{
instruction();
int select=0;
cin>>select;

while(select!=1&&select!=2&&select!=3&&select!=4)
{
cout<<"选择错误,请重新选择."<<endl;
instruction();
cin>>select;
}

dictionary oper;
bool exe=true;
while(exe)
{
switch(select)
{
case 1:
oper.findWord();
break;
case 2:
oper.insertWord();
break;
case 3:
oper.deleteWord();
break;
case 4:
exe=false;
break;
}
if(select==4)
break;
instruction();
cin>>select;

while(select!=1&&select!=2&&select!=3&&select!=4)
{
cout<<"选择错误,请重新选择."<<endl;
instruction();
cin>>select;
}
}

return 0;
}

d:\\tiny-dict.txt 里的内容如下:(是个英德字典,左边一列是英语,右边是德语)
bird Raubvogel, Greifvogel
rabbit Kaninchen
monkey Affe
horse Pferd
crab Krabbe, Krebs
eagle Adler, Aar; Zehn-Dollar-Note
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式