英汉词典(C语言)
1 #include<stdio.h>//TXT 文档见文件末
2 #include<stdlib.h>
3 #include<string.h>
4 #include<conio.h>
5 #define N 1000
6 typedef struct Word
7 {
8 char English[20];
9 char Chinese[60];
10 }word;
11 void Search(word s[],int num,char *d);//查找
12 void Revise(word s[],int *num,char *d); //修改
13 void Add();//添加
14 int main()
15 {
16 FILE *fp;
17 word array[N];
18 int i,sum=0;
19 char str[20],a,n;
20 if((fp=fopen("单词.txt","r+"))==NULL)
21 {
22 puts("文件打开失败!");
23 exit(1);
24 }
25 while(!feof(fp))
26 {
27 fscanf(fp,"%s\n%s\n",array[sum].English,array[sum].Chinese);
28 sum++;
29 }
30 fclose(fp);
31 while(1)
32 {
33 system("cls");
34 printf("菜 单:\n");
35 puts("*****************************");
36 puts("* 1: 查 找 *");
37 puts("* 2: 修 改 *");
38 puts("* 3: 添 加 *");
39 puts("* 4: 退 出 *");
40 puts("*****************************");
41 printf("选择序号:");
42 scanf("%c",&n);
43 fflush(stdin);
44 switch(n)
45 {
46 case '1':
47 printf("输入查找单词:");
48 gets(str);
49 Search(array,sum,str);//调用查找
50 break;
51 case '2':
52 printf("输入单词:");
53 gets(str);
54 Revise(array,&sum,str);//调用修改
55 break;
56 case '3':
57 Add();//调用添加
58 break;
59 case '4':
60 puts("确定退出系统?(y/n)");
61 scanf("%c",&a);
62 getchar();
63 if(a=='y')
64 exit(1);
65 break;
66 }
67 puts("按任意键返回主菜单......");
68 getch();
69 }
70 return 0;
71 }
72 void Search(word s[],int num,char *d1) //查询单词 s:创建字符串数组 num:单词个数 d1:查找的单词
73 {
74 int i,b=0,sum=0,n=strlen(d1);
75 int k=0,e=1;//模糊查找换行
76 int name[100];
77 char a,c,d;
78 for(i=0;i<num;i++)
79 {
80 if(strncmp(s[i].English,d1,n)==0)
81 {
82 if(strlen(s[i].English)==n)//精确
83 {
84 sum=i;
85 b=1;
86 break;
87 }
88 else//模糊
89 {
90 name[sum]=i;
91 sum++;
92 b=2;
93 }
94 }
95 }
96 if(b==1) /*精确查询*/
97 printf("解释:%s\n",s[sum].Chinese);
98 else if(b==2) /*模糊查询*/
99 {
100 puts("你要查找单词可能有:");
101 while(e)
102 {
103 for(i=k+0;i<k+5&&i<sum;i++)
104 {
105 printf("%d:",i+1);
106 puts(s[name[i]].English);
107 }
108 puts("******************");
109 puts("* + 下一页 *");
110 puts("* - 上一页 *");
111 puts("* * 输入序号 *");
112 puts("* # 返回主菜单 *");
113 puts("******************");
114 puts("请选择:");
115 d=getch();
116 system("cls");
117 switch(d)
118 {
119 case '+':
120 if(k+5<sum)
121 k+=5;
122 break;
123 case '-':
124 if(k-5>=0)
125 k-=5;
126 break;
127 case '*':
128 printf("输入查找单词的序号:");
129 scanf("%d",&n);
130 if(n>=1 && n<=sum)
131 printf("解释:%s\n",s[name[n-1]].Chinese);
132 break;
133 case '#':
134 e=0;
135 break;
136 }
137 }
138 }
139 else
140 puts("输入单词不存在!");
141 }
142 void Revise(word s[],int *num,char *d) //修改单词或解释
143 {
144 int i,n,b=0;
145 char str1[20];
146 char str2[60];
147 FILE *fp;
148 for(i=0;i<*num;i++)
149 {
150 if(strcmp(s[i].English,d)==0) //找到了用户输入的单词
151 {
152 b=1; //标志变量设为1
153 break;
154 }
155 }
156 if(b==0)
157 puts("所修改的单词不存在!请添加");
158 else //找到输入的单词
159 {
160 printf("原单词:%s\n",s[i].English);
161 printf("原解释:%s\n",s[i].Chinese);
162 puts("***********************");
163 puts("* 1 修改解释 *");
164 puts("* 2 追加解释 *");
165 puts("* 3 修改单词 *");
166 puts("* 4 修改解释和解释 *");
167 puts("* 5 取消 *");
168 puts("***********************");
169 scanf("%d",&n);
170 fflush(stdin);
171 switch(n)
172 {
173 case 1: //修改解释
174 puts("请输入解释:");
175 gets(str2);
176 strcpy(s[i].Chinese,str2);
177 break;
178 case 2: //追加解释
179 puts("请输入解释:");
180 gets(str2);
181 strcat(s[i].Chinese,",");
182 strcat(s[i].Chinese,str2);
183 break;
184 case 3: //修改单词
185 puts("请输入单词:");
186 gets(str1);
187 strcpy(s[i].English,str1);
188 break;
189 case 4: //修改单词和解释
190 puts("请输入单词:");
191 gets(str1);
192 puts("请输入解释:");
193 gets(str2);
194 strcpy(s[i].English,str1);
195 strcpy(s[i].Chinese,str2);
196 break;
197 case 5: //取消修改
198 puts("您取消了修改:");
199 break;
200 }
201 }
202 fp=fopen("单词.txt","w+");
203 for(i=0;i<*num;i++)
204 {
205 fprintf(fp,"%s\n%s\n",s[i].English,s[i].Chinese);
206 }
207 fclose(fp);
208 }
209 void Add()//添加新单词
210 {
211 FILE *fp;
212 char stre[20],strc[60];
213 int n;
214 if((fp=fopen("单词.txt","a+"))==NULL)
215 {
216 puts("文件打开失败!");
217 exit(1);
218 }
219 puts("请输入新单词");
220 gets(stre);
221 puts("请输入解释:");
222 gets(strc); //输入单词的解释
223 printf("\t1:确定\n\t2:取消\n"); //是否保存添加
224 scanf("%d",&n);
225 if (n==1) //保存添加
226 fprintf(fp,"%s\n%s\n",stre,strc);
227 fclose(fp);
228 }
例子:abbreviation n.节略,缩写,缩短