C/C++ 英汉词典

#include <io.h>
#include <iostream>
#include <windows.h>
using namespace std; 


//定义 单词 结构体
struct Word {
	char en[20] ; // 英文名
	char ch[20] ; // 中文名
};
//定义全局 单词 数组
struct Word wordList [100];
//定义全局 单词 数组栈指针
int wordCount = 0;

//单词 读入文件
void readWord ();
//单词 写入文件
void writeWord ();
//单词 添加记录
void addWord ();
//单词 删除记录
void delWord ();
//单词 根据下标删除
int delWordByIndex (int index);
//单词 修改记录
void modWord ();
//单词 查找记录
void findWord (int all);
//单词 排序
void sortWord ();
//交换
void exchangeWord (int i ,int j);
//存在判断函数
int getOneWord (const char *name,char *s);

//菜单
void menu();

// 主函数
int main(){
	//读取数据
	readWord ();//读取单词
	while(1){
		int choice;
		menu ();
		cin>>choice;
		switch(choice){
		case 1 :
			addWord ();//添加单词
			break;
		case 2 :
			findWord (1);//查找单词
			delWord ();//删除单词
			break;
		case 3 :
			findWord (1);//查找单词
			modWord ();//修改单词
			break;
		case 4 :
			findWord (0);//查找单词
			break;
		case 5 :
			sortWord ();//排序单词
			break;
		case 0:
			cout<<"\n\n\n\t\t\t感谢使用\n\n\n";
			exit(0);
		default :
			getchar();
			cout<<"\n\n\n\t提示:没有这个选项!请重新输入!\n\n\n\n";
			system("pause");
			break;
		}
	}
	return 0;
}



//单词 是否存在判断
int getOneWord (const char *name,char *s){
	int res = -1,i;
	for( i = 0;i < wordCount ;i++){
		if( strcmp(name,"en")==0 && strcmp(s, wordList [i]. en )==0){
			res = i;
			break;
		}
	}
	return res;
}
//单词 读入文件
void readWord (){
	FILE *fp = NULL;
	if (NULL == (fp = fopen("Word.txt", "r")))//读打开
	{
		return;
	}
	int i=0;
	//从文件读取数据
	while (fscanf(fp, "%s%s"
		,wordList[i].en  ,wordList[i].ch 
		) != EOF)//读取
	{
		i++;
	}
	//记录总数
	wordCount = i;
	fclose(fp);
}
//单词 写入文件
void writeWord (){
	FILE *fp = NULL;
	int i;
	fp = fopen("Word.txt", "w+");
	for( i = 0;i< wordCount ;i++){
		fprintf(fp,"%s %s\n"
			,wordList[i].en  ,wordList[i].ch );
	}
	fclose(fp);
}
//单词 添加记录
void addWord (){
	char selectYNFlag = 'y';
	while(selectYNFlag == 'y' || selectYNFlag == 'Y' ){
		cout<<"\n";
		cout<<"请输入英文名 :";
		char en[20]; 				            cin>>en;
		strcpy(wordList [ wordCount ] . en,en);
		//检索Word 不重复
		int getOneWorden = getOneWord ("en",wordList [ wordCount ] . en);
		if( getOneWorden >=0){//检索不为空
			cout<<"英文名已存在!\n";
			break;
		}
		cout<<"请输入中文名 :";
		char ch[20]; 				            cin>>ch;
		strcpy(wordList [ wordCount ] . ch,ch);
		//wordCount 是全局变量
		wordCount ++;
		cout<<"\n是否继续录入?(y/n)";
		getchar();
		cin>>selectYNFlag;
	}
	writeWord ( );
	cout<<"\n*****************************\n";
	cout<<"录入完成\n";
	cout<<"*****************************\n";
}
//单词 删除
void delWord (){
	cout<<"请输入您要删除的 单词 序号(输入-1退出):";
	int index;
	cin>>index;
	
	if(index >= 0){
		int res = delWordByIndex (index);
		if(res){
			cout<<"删除成功!\n\n";
			writeWord ();
		}else{
			cout<<"删除失败!\n\n";
		}
	}
	
}
//单词 根据下标删除
int delWordByIndex (int index){
	if(index >= wordCount || index < 0){
		return 0;
	}
	//开始删除!
	int i;
	for(i = index; i < wordCount - 1 ; i++){
		//元素全部往前移一位。
		wordList [i] = wordList [i+1];
	}
	//最后令栈的长度减一
	wordCount = wordCount - 1;
	return 1;
}
//单词 修改
void modWord (){
	cout<<"请输入您要修改的单词 序号(输入-1退出):";
	int indexOfMod = -1;
	cin>>indexOfMod;
	if(indexOfMod >= 0 && indexOfMod < wordCount ){
		//开始修改
		cout<<"请输入英文名 :";
		char en[20];
		cin>>en;
		
		if(strcmp(wordList [indexOfMod] . en,en) != 0 && getOneWord ("en",en)>=0){//检索不为空
			cout<<"英文名 已存在!\n";
			return;
		}
		cout<<"请输入中文名 :";
		char ch[20];
		cin>>ch;
		
		//输入完毕,赋值
		strcpy(wordList [ indexOfMod ] . en,en);
		strcpy(wordList [ indexOfMod ] . ch,ch);
		cout<<"修改成功!\n";
		writeWord ();
	}else{
		cout<<"输入错误!\n";
	}
	
}
//单词 查找 如果all=1:查询全部 否则按条件查询
void findWord (int all){
	int select = 0;
	char conCharArr[40];
	double conNum1,conNum2;
	while(1){
		printf("\n%-5s%-20s%-20s\n\n","序号" ,"英文名","中文名" );
		if( wordList ){
			//用于统计信息所用
			int count = 0,i;
			for (i = 0;i <  wordCount ; i++)
			{
				if(select == 0
					|| select == 1 && strstr(wordList [i]. en,conCharArr) //根据英文名,模糊查询
					|| select == 2 && strstr(wordList [i]. ch,conCharArr) //根据中文名,模糊查询
					){
					printf("%-5d%-20s%-20s \n\n",i
						,wordList [i] . en
						,wordList [i] . ch
						);
					//用于统计信息所用
					count++;
				}else{
					delWordByIndex(i--);//删掉
				}
			}
			cout<<"共" << count <<"条结果\n";
			cout<<"-----------------------------------------------------------------------------------------------------\n";
			cout<<"\n";
		}else{
			cout<<"\n【无记录!】\n\n";
		}
		//如果参数all为1,则表示列出所有就退出
		if(all == 1)break;
		//进入过滤。
		cout<<"【筛选器:你可以在以上结果的基础上,进行以下条件筛选】\n";
		cout<<"0:退出\n";
		cout<<"1:按 英文名 筛选\n";
		cout<<"2:按 中文名 筛选\n";
		cout<<"请输入选择:";
		cin>>select;
		if(select>0){
			if(0  ||select==1 ||select==2 ){
				cout<<"请输入筛选条件:";
				cin>>conCharArr;
			}else if(0 ){
				cout<<"请输入筛选范围m,n,用空格隔开(m ≤X ≤n):";
				cin>>conNum1;
				cin>>conNum2;
			}
		}else{
			break;
		}
	}
	readWord();//从新读取数据。
}
//单词 排序
void sortWord (){
	int select,i,j;
	cout<<"1:按 英文名 排序\n";
	cout<<"2:按 中文名 排序\n";
	cout<<"请输入选择:";
	cin>>select;
	for( i = wordCount -1;i>0;i--){
		for( j = 0;j < i;j++){
			if(	0
				|| select == 1 && strcmp(wordList [j]. en , wordList [j+1]. en)>0
				|| select == 2 && strcmp(wordList [j]. ch , wordList [j+1]. ch)>0
				){
				exchangeWord (j,j+1);
			}
		}
	}
	findWord (1);
	writeWord ();
}
//单词 交换
void exchangeWord (int i,int j){
	struct Word word = wordList [i];
	wordList [i] = wordList  [j];
	wordList [j] = word ;
}

void menu (){
	//菜单
	cout<<"*------------------主菜单---------------------*\n";
	cout<<"*-------------1 :添加单词\n";
	cout<<"*-------------2 :删除单词\n";
	cout<<"*-------------3 :修改单词\n";
	cout<<"*-------------4 :查找单词\n";
	cout<<"*-------------5 :排序单词\n";
	cout<<"*-------------0:退出\n";
	cout<<"*---------------------------------------------*\n";
	cout<<"请输入选择:";
}

主页


添加单词

 

 


删除单词


修改单词
查找单词


排序单词


退出

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值