交互式字典 C++编程
设计二:交互式字典
编写一个程序,实现具有如下功能的交互式字典:
(1)可以查询每个单词的解释。例如:输入“Hello”将显示意思“a greeting”。
(2)能够加入新的单词和解释。
(3)能够删除单词和解释。
(4)将所有单词和解释保存在一个文件中,程序运行时可以读取。
提示:编写一个单词类、一个字典类(包含查询单词的解释、增加单词和解释、删除单词和解释和从文件读取字典以及将字典保存到文件等方法)。
其中,涉及到文件的读写,这里给出包含的头文件和主要的方法:
#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();//关闭文件 ,不论读或写文件,使用完后需要关闭文件。
答案:#include"dictionary.h"
const int size=30;/*******************公有部分***********************/
dictionary::dictionary()//如果记录为空,创建一个*作为结尾
{
text.open("dictionary.dat",ios::in|ios::out);
if(text.eof())
text<<"* ";
text.close();
}
void dictionary::findWord()
{
cout<<"请输入所要查询的单词."<<endl;
string word;
cin>>word;
text.open("dictionary.dat",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("dictionary.dat",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("dictionary.dat",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();
}
上一个:C++是什么语言?
下一个:c++小型项目试题