#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<<"请输入选择:";
}
主页

添加单词
删除单词

修改单词
查找单词

排序单词

退出