C語言實現(xiàn)小型電子詞典
更新時間:2019年03月20日 11:01:06 作者:個快快
這篇文章主要為大家詳細(xì)介紹了C語言實現(xiàn)小型電子詞典,用戶可以進行英譯漢、漢譯英等功能,具有一定的參考價值,感興趣的小伙伴們可以參考一下
本文實例為大家分享了C語言實現(xiàn)小型詞典系統(tǒng),供大家參考,具體內(nèi)容如下
1. 題目描述
用C語言編寫一個小型詞典,用戶可以進行英譯漢、漢譯英、刪除修改單詞、添加單詞等功能。
2.源代碼
/*
小型詞典系統(tǒng)
版本:0.9
作者:個快快
應(yīng)用模型:文件增刪改查
*/
#include <stdio.h>
#include <string.h>
int worsNumber = 0; //單詞數(shù)目
//----------------------
//定義結(jié)構(gòu)體存儲詞典數(shù)據(jù)
//----------------------
typedef struct dic
{
char word[20];
char cn[80];
}data;
data dictionnarySql[9000];//詞典數(shù)據(jù)庫
//------------
//加載詞典數(shù)據(jù)
//------------
int loadSql(data *sql,char path[100])
{
int i=0;
FILE *fp=NULL;
fp=fopen(path,"r");
while(fscanf(fp,"%s\t%s",(sql+i)->word,(sql+i)->cn)!=EOF)
{
i++;
}
fclose(fp);
printf("共計%d個單詞數(shù)據(jù)\n",i);
printf("單詞加載完畢,請輸入指令進行操作:\n");
return (i); //返回單詞數(shù)目
}
//------------
//輸出用戶提示
//------------
void printAction()
{
printf("-----------------\n");
printf("1.英譯漢\t|\n");
printf("2.漢譯英\t|\n");
printf("3.添加單詞數(shù)據(jù)\t|\n");
printf("4.刪除單詞數(shù)據(jù)\t|\n");
printf("5.修正單詞數(shù)據(jù)\t|\n");
printf("0.退出程序\t|\n");
printf("-----------------\n");
}
//------------
//指令處理函數(shù)
//------------
void dealAction(int action)
{
if(action==1)
{
char word[20];
int pos;//單詞位置
printf("請您輸入要查詢的單詞:");
scanf("%s",word);
pos = searchWord(word);
if(pos!=-1)
printf("單詞\'%s\'的中文意思是: %s\n",word,dictionnarySql[pos].cn);
else
printf("對不起,沒有找到您所需要的單詞\n");
}
else if(action==2)
{
int pos;
char cn[80];
printf("請您輸入漢語詞意(關(guān)鍵詞即可):");
scanf("%s",cn);
pos = searchCn(cn);
if(pos!=-1)
printf("該翻譯的英語單詞是: %s\n",dictionnarySql[pos].word);
else
printf("對不起,沒有找到您所需要的翻譯\n");
}
else if(action==3)
{
char word[20];
char cn[80];
printf("請您輸入要補充的單詞:");
scanf("%s",word);
strcpy(dictionnarySql[worsNumber].word,word);
printf("請您輸入該單詞漢語翻譯:");
scanf("%s",cn);
strcpy(dictionnarySql[worsNumber].cn,cn);
worsNumber++;
saveSql();
printf("補充單詞完成\n");
}
else if(action==4)
{
char word[50];
int pos;//單詞位置
printf("請輸入您要刪除的單詞:");
scanf("%s",word);
pos = searchWord(word);
if(pos!=-1)
{
char a[5] = "#";
strcpy(dictionnarySql[pos].cn,a);
strcpy(dictionnarySql[pos].word,a);
saveSql();
printf("已經(jīng)刪除該單詞\n");
}
else
printf("對不起,沒有找到您所需要的單詞\n");
}
else if(action==5)
{
char word[50];
int pos;//單詞位置
printf("請輸入您要修正的單詞:");
scanf("%s",word);
pos = searchWord(word);
if(pos!=-1)
{
printf("請輸入單詞漢語翻譯:");
char cn[60];
scanf("%s",cn);
strcpy(dictionnarySql[pos].cn,cn);
saveSql();
printf("已經(jīng)修正該單詞翻譯。\n");
}
else
printf("對不起,沒有找到您所需要的單詞\n");
}
}
//------------------------
//返回單詞在數(shù)據(jù)庫中的位置
//------------------------
int searchWord(char word[20])
{
int low, mid, high;
low = 0;
high = worsNumber;
while(low<=high)
{
mid = (low+high)/2;
if(strcmp(dictionnarySql[mid].word,word)>0)
high = mid-1;
else if(strcmp(dictionnarySql[mid].word,word)<0)
low = mid+1;
else
{
return mid;
}
}
//若二分查找查詢不到,就執(zhí)行順序查找
int i=0;
for(i=0;i<worsNumber;i++)
{
if(strcmp(dictionnarySql[i].word,word)==0)
return i;
}
return -1;//如果查詢不到,就返回負(fù)數(shù)
}
//------------------------
//返回翻譯在數(shù)據(jù)庫中的位置
//------------------------
int searchCn(char cn[80])
{
//順序查找
int i=0;
for(i=0;i<worsNumber;i++)
{
if(strstr(dictionnarySql[i].cn,cn)!=NULL)
return i;
}
return -1;//如果查詢不到,就返回負(fù)數(shù)
}
//--------
//保存數(shù)據(jù)
//--------
void saveSql()
{
FILE *fp=NULL;
fp=fopen("dictionary.txt","w");
int i=0;
for(i=0;i<worsNumber;i++)
{
if(dictionnarySql[i].word[0]!='#')
{
fprintf(fp,"%s\t%s\n",dictionnarySql[i].word,dictionnarySql[i].cn);
}
}
fclose(fp);
}
//----------
//主函數(shù)部分
//----------
int main()
{
worsNumber = loadSql(dictionnarySql,"dictionary.txt"); //加載單詞
int action=-1;//定義動作變量
while(action!=0)
{
printAction();
scanf("%d",&action);
dealAction(action);
}
return 0;
}
效果:

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
您可能感興趣的文章:
相關(guān)文章
SublimeText編譯C開發(fā)環(huán)境設(shè)置
這篇文章主要介紹了使用SublimeText編譯C代碼的開發(fā)環(huán)境設(shè)置,大家參考使用2013-11-11

