单词小助手C语言版

时间:2021-09-29 04:13:46

单词小助手,要求完成以下任务:

1.改写程序为良好程序风格(文档注释,函数注释,语句注释)。

2.将单词测试中的功能完善,可针对做错的单词重复记忆。

3.查询单词的功能添加英文词查询,中文查询的功能完善(考虑如何显示同样中文意义,不同的英文单词)

提高要求:可将程序中的不足(如数据验证,排名功能)等根据自己的能力与理解完成。

一、题目分析

单词小助手是帮助学生背诵单词的软件,用户可以选择单词送到词库,并编辑词库,可以完成以下功能。

词库维护:基于文件进行管理,可以增加,修改和删除单词中的中文和英文,每条记录包括英文词意和中文词意。
单词预览:显示系统文本中所有单词的中英文词意。
单词背诵(中英):随机显示中文词汇,用户需要输入正确的英文词意才可得分,若输入错误提示用户继续输入,直至输入正确。
单词背诵(英中):随机显示英文词汇,用户需要输入正确的中文词意才可得分,若输入错误提示用户继续输入,直至输入正确。
查询成绩:显示中英、英中单词背诵的学习成绩统计。
帮助:通过帮助了解系统的功能与使用方式。
增强记忆(中英):对于记错的中英单词重复记忆。
增强记忆(英中):对于记错的英中单词重复记忆。
退出系统。

二、算法构造

单词小助手C语言版

单词小助手C语言版单词小助手C语言版

N-S盒图(del()函数部分):

单词小助手C语言版

三、程序实现(源代码)

  1. #include <stdio.h>
  2. #include <string.h>
  3. #include <stdlib.h>
  4. #define MAX_CHAR 20 // 最大字符
  5. #define MAX_NUM 200 // 单词的最大个数
  6. struct word //单词的结构体
  7. {
  8. char en[MAX_CHAR]; // 英文形式
  9. char ch[MAX_CHAR]; //中文形式
  10. } s[MAX_NUM],r[MAX_NUM]; //单词数组
  11. int num; //单词个数
  12. int numnum; //增强记忆单词个数
  13. int select=1; //select 为是否退出系统的标记
  14. int d=0,c=0; //d为输入正确的次数,c为输入错误的次数
  15. void help() //帮助
  16. {
  17. printf("\n本系统主要实现英语单词学习的功能。用户可对词典文件中的单词进行预览,增删改查。");
  18. printf("\n同时还可进行中英、英中测试,答错的题目自动加入增强记忆文件,可重复记忆。本系统还提供了查询测试成绩的显示功能。");
  19. }
  20.  
  21. void readfile() //从文件中读取单词的信息
  22. {
  23. FILE *fp; //文件指针
  24. int i=0;
  25. fp=fopen("F:\\Microsoft Visual Studio\\lyf.txt","r"); //以读入方式打开目录下的lyf.txt文件
  26. if(!fp) //若文件lyf.data不存在,则提示打开文件失败
  27. {
  28. printf("\n打开文件lyf.txt失败!");
  29.  
  30. }
  31. while(fscanf(fp,"%s %s ",s[i].en,s[i].ch)==2) //当数据增加一时,数据的总数i增加一
  32. {
  33. i++;
  34. }
  35. num=i;
  36. if(0==i)
  37. printf("\n文件为空,请选择词典维护增加词条!"); //若文件没有单词记录,则提示需要维护增加词条记录
  38. else
  39. printf("\n");
  40. fclose(fp); //关闭文件
  41.  
  42. }
  43.  
  44. void writefile() //从文件中读取单词的信息
  45. {
  46. FILE *fp; //文件指针
  47. int i=0;
  48. fp=fopen("F:\\Microsoft Visual Studio\\lyf.txt","w"); //以写入方式打开目录下的lyf.txt文件
  49. if(!fp) //若文件lyf.data不存在,则提示打开文件失败
  50. {
  51. printf("\n打开文件lyf.txt失败!");
  52. }
  53. for(i=0;i<num;i++)
  54. {
  55. fprintf(fp,"\n%s %s ",s[i].en,s[i].ch);
  56. }
  57. printf("\n");
  58. fclose(fp); //关闭文件
  59. }
  60. void impmemfile() //从增强记忆文件中读取单词的信息
  61.  
  62. {
  63. FILE *fp; //文件指针
  64. int i=0;
  65. fp=fopen("F:\\Microsoft Visual Studio\\lyflyf.txt","r"); //以读入方式打开目录下的lyflyf.txt文件
  66. if(!fp) //若文件lyflyf.data不存在,则提示打开文件失败
  67. {
  68. printf("\n打开文件lyflyf.txt失败!");
  69. }
  70. while(fscanf(fp,"%s %s ",r[i].en,r[i].ch)==2) //当数据增加一时,数据的总数i增加一
  71. {
  72. i++;
  73. }
  74. numnum=i;
  75. if(0==i)
  76. printf("\n你还没有错题哦,继续保持住这种状态!"); //若文件没有单词记录,则提示还没有错题记录
  77. else
  78. printf("\n");
  79. fclose(fp); //关闭文件
  80.  
  81. }
  82.  
  83. void sort() //按字典排序
  84. {
  85. int i,j;
  86. char temp[MAX_CHAR];
  87. for(i=0;i<num-1;i++) //比较法排序
  88. {
  89. for(j=num-1;j>i;j--)
  90. if(strcmp(s[j-1].en,s[j].en)>0) //strcmp(s1,s2) 判断两个字符串s1和s2是否相同,相同返回true,不同返回false
  91. {
  92. strcpy(temp,s[j-1].en);
  93. strcpy(s[j-1].en,s[j].en);
  94. strcpy(s[j].en,temp);
  95. strcpy(temp,s[j-1].ch);
  96. strcpy(s[j-1].ch,s[j].ch);
  97. strcpy(s[j].ch,temp);
  98.  
  99. }
  100. }
  101. }
  102.  
  103. void add() //添加单词信息
  104. {
  105. int i=num,j,flag=1;
  106. while(flag)
  107. {
  108. flag=0;
  109. printf("\n请输入单词的英文形式:");
  110. scanf("%s",s[i].en);
  111. for(j=0;j<i;j++)
  112. if(strcmp(s[i].en,s[j].en)==0) //判断文件中是否有这个单词
  113. {
  114. printf("已有该单词,请检查后重新录入!\n");
  115. flag=1;
  116. break; //如有重复立即退出该层循环,提高判断速度
  117. }
  118.  
  119. }
  120. printf("\n请输入单词的中文形式:");
  121. scanf("%s",s[i].ch);
  122. num++;
  123. printf("\n您输入的信息为: 英文: %s 中文: %s ",s[i].en,s[i].ch);
  124. sort();
  125. }
  126.  
  127. void del() //删除单词信息
  128. {
  129. int i=0,j=0;
  130. char en[MAX_CHAR]; //英文形式
  131. printf("\n请输入你要删除的单词英文形式:");
  132. scanf("%s",en);
  133. for(i=0;i<num;i++) //先找到该英文形式对应的序号
  134. if(strcmp(s[i].en,en)==0)
  135. {
  136. for(j=i;j<num-1;j++) //后面的单词向前移动
  137. s[j]=s[j+1];
  138. num--; //数量减少1
  139. return;
  140. }
  141. printf("\n没有这个单词!");
  142.  
  143. }
  144.  
  145. void modify() //修改单词信息
  146. {
  147. int i=0,choose=0,flag=1,number=0; //chooses代表选项标识,flag代表是否找到单词
  148. char en[MAX_CHAR]; //英文形式
  149. char ch[MAX_CHAR]; //中文形式
  150. printf("\n修改英文请按1,修改中文请按2");
  151. scanf("%d",&number);
  152. switch(number)
  153. {
  154. case 1:
  155. while(flag||choose)
  156. {
  157. printf("\n请输入你要修改的单词英文形式:");
  158. scanf("%s",en);
  159. for(i=0;i<num;i++) //先找到该英文形式对应的序号
  160. if(strcmp(s[i].en,en)==0)
  161. {
  162. printf("\n请输入单词正确的英文形式:");
  163. scanf("%s",s[i].en);
  164.  
  165. printf("\n请输入此单词正确的的中文形式:");
  166. scanf("%s",s[i].ch);
  167.  
  168. printf("\n继续修改请选1,返回上一级请选0:");
  169. scanf("%d",&choose);
  170. if(choose==0)
  171. return;
  172. }
  173. flag=0;
  174.  
  175. }
  176. if(!flag) printf("\n没有这个单词!");
  177. case 2:
  178. while(flag||choose)
  179. {
  180. printf("\n请输入你要修改的单词中文形式:");
  181. scanf("%s",ch);
  182. for(i=0;i<num;i++) //先找到该英文形式对应的序号
  183. if(strcmp(s[i].ch,ch)==0)
  184. {
  185. printf("\n请输入单词正确的中文形式:");
  186. scanf("%s",s[i].ch);
  187.  
  188. printf("\n请输入此单词正确的的英文形式:");
  189. scanf("%s",s[i].en);
  190.  
  191. printf("\n继续修改请选1,返回上一级请选0:");
  192. scanf("%d",&choose);
  193. if(choose==0) return;
  194. }
  195. flag=0;
  196.  
  197. }
  198. if(!flag)
  199. printf("\n没有这个单词!");
  200. }
  201. }
  202.  
  203. void show() //单词预览
  204. {
  205. int i=0;
  206. printf("\n单词: 英文 中文 ");
  207. for(i=0;i<num;i++)
  208. printf("\n %-12s%-12s",s[i].en,s[i].ch);
  209.  
  210. }
  211.  
  212. void search() //查询单词
  213. {
  214. int i=0,choose=0,flag=1,number=0;
  215. char ch[MAX_CHAR]; //中文形式
  216. char en[MAX_CHAR]; //英文形式
  217. printf("\n中文查询请按1,英文查询请按2");
  218. scanf("%d",&number);
  219. switch(number)
  220. {
  221. case 1:
  222. while(choose||flag)
  223. {
  224. printf("\n请输入你要查询的单词中文形式:");
  225. scanf("%s",ch);
  226. for(i=0;i<num;i++)//先找到该中文形式对应的序号
  227. if(strcmp(s[i].ch,ch)==0)
  228. {
  229. printf("\n英文形式 中文形式 ");
  230. printf("\n %-12s%12s",s[i].en,s[i].ch);
  231. printf("\n继续查询请选1,返回上一级请选0:");
  232. scanf("%d",&choose);
  233. if(choose==0)
  234. return;
  235. }
  236. flag=0;
  237. }
  238. if(!flag)
  239. printf("\n没有这个单词!");
  240. break;
  241. case 2:
  242. while(choose||flag)
  243. {
  244. printf("\n请输入你要查询的单词英文形式:");
  245. scanf("%s",en);
  246. for(i=0;i<num;i++)//先找到该英文形式对应的序号
  247. if(strcmp(s[i].en,en)==0)
  248. {
  249. printf("\n中文形式 英文形式 ");
  250. printf("\n %-12s%12s",s[i].en,s[i].ch);
  251. printf("\n继续查询请选1,返回上一级请选0:");
  252. scanf("%d",&choose);
  253. if(choose==0)
  254. return;
  255. }
  256. flag=0;
  257. }
  258. if(!flag)
  259. printf("\n没有这个单词!");
  260. break;
  261.  
  262. default:
  263. printf("请输入1或2\n");
  264. }
  265.  
  266. }
  267.  
  268. void zytest() //中译英测试
  269. {
  270. char b1[20];
  271. int z;
  272. int choose=1;
  273. int i;
  274. FILE *fp; //文件指针
  275. while(choose)
  276. {
  277. fp=fopen("F:\\Microsoft Visual Studio\\lyflyf.txt","a+");
  278. if(!fp) //若文件lyflyf.data不存在,则提示打开文件失败
  279. {
  280. printf("\n打开文件lyflyf.txt失败!");
  281. }
  282.  
  283. i = rand()%num; //产生随机数
  284. printf("\n【%s】请输入英文单词:",s[i].ch);
  285. scanf("%s",b1);
  286. for(z=0;strcmp(b1,s[i].en)!=0;z=z)
  287. {
  288. fprintf(fp,"\n%s %s ",s[i].en,s[i].ch);//回答错误时写入增强记忆文件
  289. printf("\n");
  290. printf("\n输入错误!!请重新输入:");
  291. scanf("%s",b1);
  292. c=c+1;
  293. numnum+=1;
  294. }
  295. fclose(fp);
  296. printf("\n恭喜你,回答正确,加10分!\n\n");
  297. d=d+1;
  298. printf("\n继续测试请选1,返回上一级请选0:");
  299. scanf("%d",&choose);
  300. if(choose==0)
  301. return;
  302.  
  303. }
  304. }
  305.  
  306. void yztest() //英译中测试
  307. {
  308. char b1[20];
  309. int z,x=41;
  310. int choose=1;
  311. int i;
  312. FILE *fp; //文件指针
  313. while(choose)
  314. {
  315. i = rand()%num; //产生随机数
  316. fp=fopen("F:\\Microsoft Visual Studio\\lyflyf.txt","a+");
  317. if(!fp) //若文件lyflyf.data不存在,则提示打开文件失败
  318. {
  319. printf("\n打开文件lyflyf.txt失败!");
  320. }
  321.  
  322. printf("【%s】请输入中文意思:",s[i].en);
  323. scanf("%s",b1);
  324. for(z=0;strcmp(b1,s[i].ch)!=0;z=z)
  325. {
  326.  
  327. fprintf(fp,"\n%s %s ",s[i].en,s[i].ch);//回答错误时写入增强记忆文件
  328. printf("\n");
  329. printf("输入错误!!请重新输入:");
  330. scanf("%s",b1);
  331. c=c+1;
  332. numnum+=1;
  333. }
  334. fclose(fp);
  335. printf("\n恭喜你,回答正确,加10分!\n\n");
  336. d=d+1;
  337. printf("\n继续测试请选1,返回上一级请选0:");
  338. scanf("%d",&choose);
  339. if(choose==0)
  340. return;
  341. }
  342. }
  343. void zyRetest() //增强记忆 中英
  344. {
  345. char b1[20];
  346. int z;
  347. int choose=1;
  348. int i;
  349. int m=0;
  350. FILE *fp; //文件指针
  351. while(choose)
  352. {
  353. i = rand()%numnum; //产生随机数
  354. fp=fopen("F:\\Microsoft Visual Studio\\lyflyf.txt","a+");
  355. printf("\n【%s】请输入英文单词:",r[i].ch); //输出中文,然后输入单词对应的英文词意
  356. scanf("%s",b1);
  357. for(z=0;strcmp(b1,r[i].en)!=0;z=z)
  358. {
  359. printf("\n输入错误!!请重新输入:");
  360. scanf("%s",b1);
  361. c=c+1;
  362. }
  363. printf("\n恭喜你,回答正确,加10分!\n\n");
  364. d=d+1;
  365. printf("\n继续测试请选1,返回上一级请选0:");
  366. scanf("%d",&choose);
  367. if(choose==0)
  368. return;
  369.  
  370. }
  371. }
  372. void yzRetest() //增强记忆 英中
  373. {
  374. char b1[20];
  375. int z,x=41;
  376. int choose=1;
  377. int i;
  378. FILE *fp; //文件指针
  379. while(choose)
  380. {
  381. i = rand()%numnum; //产生随机数
  382. fp=fopen("F:\\Microsoft Visual Studio\\lyflyf.txt","a+");
  383. printf("\n【%s】请输入英文单词:",r[i].en); //输出英文,然后输入单词对应的中文词意
  384. scanf("%s",b1);
  385. for(z=0;strcmp(b1,r[i].ch)!=0;z=z)
  386. {
  387. printf("\n输入错误!!请重新输入:");
  388. scanf("%s",b1);
  389. c=c+1;
  390. }
  391. printf("\n恭喜你,回答正确,加10分!\n\n");
  392. d=d+1;
  393. printf("\n继续测试请选1,返回上一级请选0:");
  394. scanf("%d",&choose);
  395. if(choose==0)
  396. return;
  397. }
  398. }
  399. void list() //成绩列表
  400. {
  401. printf("\n 共计输入错误:%d次 **每次扣10分**\n",c);
  402. printf(" 共计输入正确:%d次 **每次加10分**\n",d);
  403. printf(" 你的总得分为:%d分\n\n",10*d-10*c);
  404.  
  405. }
  406. void maintain() //词典维护
  407.  
  408. {
  409. int choose;//维护功能选择
  410. printf(" ------------------\n");
  411. printf(" 1.增加单词\n");
  412. printf(" 2.修改单词\n");
  413. printf(" 3.删除单词\n");
  414. printf(" 4.查询单词\n");
  415. printf(" 5.退出本菜单\n");
  416. printf(" ------------------\n");
  417. while(1)
  418. {
  419. printf(" \n请输入维护功能编号:");
  420. scanf("%d",&choose);
  421. switch(choose)
  422. {
  423. case 1:
  424. add();writefile();break;
  425. case 2:
  426. modify();writefile();break;
  427. case 3:
  428. del();writefile();break;
  429. case 4:
  430. search();break;
  431. case 5: return;
  432. default: printf("\n请在1-5之间选择");
  433. }
  434. }
  435. }
  436.  
  437. void menu() //用户界面
  438. {
  439. int item;
  440. printf("\n");
  441. printf(" *********************************************************\n");
  442. printf("# #\n");
  443. printf("# 英语单词小助手 #\n");
  444. printf("# #\n");
  445. printf("# 版本 : v1.0 #\n");
  446. printf("# #\n");
  447. printf(" *********************************************************\n");
  448. printf("# #\n");
  449. printf("# 0.词库维护 1.单词预览 #\n");
  450. printf("# #\n");
  451. printf("# 2.单词背诵(中英) 3.单词背诵(英中) #\n");
  452. printf("# #\n");
  453. printf("# 4.查询成绩 5.帮助 #\n");
  454. printf("# #\n");
  455. printf("# 6.增强记忆(中英) 7.增强记忆(英中) #\n");
  456. printf("# #\n");
  457. printf("# 8.退出系统 #\n");
  458. printf("# #\n");
  459. printf(" **********************************************************\n");
  460. printf("\n");
  461. printf(" 请选择您需要的操作序号(0-8)按回车确认:");
  462. scanf("%d",&item);
  463. printf("\n");
  464. readfile();
  465. switch(item)
  466. {
  467. case 0:
  468. maintain();break;
  469. case 1:
  470. show();break;
  471. case 2:
  472. zytest();break;
  473. case 3:
  474. yztest(); break;
  475. case 4:
  476. list();break;
  477. case 5:
  478. help();break;
  479. case 6:
  480. impmemfile();zyRetest();break;
  481. case 7:
  482. impmemfile();yzRetest();break;
  483. case 8:
  484. select =0;break;
  485. default:
  486. printf("请在0-8之间选择\n");
  487. }
  488. }
  489. int main()
  490. {
  491. while(select)
  492. {
  493. menu();
  494. }
  495. system("pause");
  496. return 0;
  497. }

四、调试、测试及运行结果

(1)调试

单词小助手C语言版

单词小助手C语言版

(2)测试

测试函数“单词预览”show()部分

测试代码:

  1. #include <stdio.h>
  2. #include <string.h>
  3. #include <stdlib.h>
  4. #define MAX_CHAR 20 // 最大字符
  5. #define MAX_NUM 200 // 单词的最大个数
  6. struct word //单词的结构体
  7. {
  8. char en[MAX_CHAR]; // 英文形式
  9. char ch[MAX_CHAR]; //中文形式
  10. } s[MAX_NUM],r[MAX_NUM]; //单词数组
  11. int num; //单词个数
  12. int numnum; //增强记忆单词个数
  13. int select=1; //select 为是否退出系统的标记
  14. int d=0,c=0; //d为输入正确的次数,c为输入错误的次数
  15. void readfile() //从文件中读取单词的信息
  16. {
  17. FILE *fp; //文件指针
  18. int i=0;
  19. fp=fopen("F:\\Microsoft Visual Studio\\lyf.txt","r"); //以读入方式打开目录下的lyf.txt文件
  20. if(!fp) //若文件lyf.data不存在,则提示打开文件失败
  21. {
  22. printf("\n打开文件lyf.txt失败!");
  23.  
  24. }
  25. while(fscanf(fp,"%s %s ",s[i].en,s[i].ch)==2) //当数据增加一时,数据的总数i增加一
  26. {
  27. i++;
  28. }
  29. num=i;
  30. if(0==i)
  31. printf("\n文件为空,请选择词典维护增加词条!"); //若文件没有单词记录,则提示需要维护增加词条记录
  32. else
  33. printf("\n");
  34. fclose(fp); //关闭文件
  35.  
  36. }
  37.  
  38. void show() //单词预览
  39. {
  40. int i=0;
  41. printf("\n单词: 英文 中文 ");
  42. for(i=0;i<num;i++)
  43. printf("\n %-12s%-12s",s[i].en,s[i].ch);
  44.  
  45. }
  46. void menu() //用户界面
  47. {
  48. int item;
  49. printf("\n");
  50. printf(" *********************************************************\n");
  51. printf("# #\n");
  52. printf("# 英语单词小助手 #\n");
  53. printf("# #\n");
  54. printf("# 版本 : v1.0 #\n");
  55. printf("# #\n");
  56. printf(" *********************************************************\n");
  57. printf("# #\n");
  58. printf("# 0.词库维护 1.单词预览 #\n");
  59. printf("# #\n");
  60. printf("# 2.单词背诵(中英) 3.单词背诵(英中) #\n");
  61. printf("# #\n");
  62. printf("# 4.查询成绩 5.帮助 #\n");
  63. printf("# #\n");
  64. printf("# 6.增强记忆(中英) 7.增强记忆(英中) #\n");
  65. printf("# #\n");
  66. printf("# 8.退出系统 #\n");
  67. printf("# #\n");
  68. printf(" **********************************************************\n");
  69. printf("\n");
  70. printf(" 请选择您需要的操作序号(0-8)按回车确认:");
  71. scanf("%d",&item);
  72. printf("\n");
  73. readfile();
  74. switch(item)
  75. {
  76.  
  77. case 1:
  78. show();break;
  79. case 8:
  80. select =0;break;
  81. default:
  82. printf("请在0-8之间选择\n");
  83. }
  84. }
  85. int main()
  86. {
  87. while(select)
  88. {
  89. menu();
  90. }
  91. system("pause");
  92. return 0;
  93. }

测试截图:

单词小助手C语言版

2.测试词典维护功能maintain()函数

测试代码:

  1. #include <stdio.h>
  2. #include <string.h>
  3. #include <stdlib.h>
  4. #define MAX_CHAR 20 // 最大字符
  5. #define MAX_NUM 200 // 单词的最大个数
  6. struct word //单词的结构体
  7. {
  8. char en[MAX_CHAR]; // 英文形式
  9. char ch[MAX_CHAR]; //中文形式
  10. } s[MAX_NUM],r[MAX_NUM]; //单词数组
  11. int num; //单词个数
  12. int numnum; //增强记忆单词个数
  13. int select=1; //select 为是否退出系统的标记
  14. int d=0,c=0; //d为输入正确的次数,c为输入错误的次数
  15. void readfile() //从文件中读取单词的信息
  16. {
  17. FILE *fp; //文件指针
  18. int i=0;
  19. fp=fopen("F:\\Microsoft Visual Studio\\lyf.txt","r"); //以读入方式打开目录下的lyf.txt文件
  20. if(!fp) //若文件lyf.data不存在,则提示打开文件失败
  21. {
  22. printf("\n打开文件lyf.txt失败!");
  23.  
  24. }
  25. while(fscanf(fp,"%s %s ",s[i].en,s[i].ch)==2) //当数据增加一时,数据的总数i增加一
  26. {
  27. i++;
  28. }
  29. num=i;
  30. if(0==i)
  31. printf("\n文件为空,请选择词典维护增加词条!"); //若文件没有单词记录,则提示需要维护增加词条记录
  32. else
  33. printf("\n");
  34. fclose(fp); //关闭文件
  35.  
  36. }
  37. void writefile() //从文件中读取单词的信息
  38. {
  39. FILE *fp; //文件指针
  40. int i=0;
  41. fp=fopen("F:\\Microsoft Visual Studio\\lyf.txt","w"); //以写入方式打开目录下的lyf.txt文件
  42. if(!fp) //若文件lyf.data不存在,则提示打开文件失败
  43. {
  44. printf("\n打开文件lyf.txt失败!");
  45. }
  46. for(i=0;i<num;i++)
  47. {
  48. fprintf(fp,"\n%s %s ",s[i].en,s[i].ch);
  49. }
  50. printf("\n");
  51. fclose(fp); //关闭文件
  52. }
  53. void sort() //按字典排序
  54. {
  55. int i,j;
  56. char temp[MAX_CHAR];
  57. for(i=0;i<num-1;i++) //比较法排序
  58. {
  59. for(j=num-1;j>i;j--)
  60. if(strcmp(s[j-1].en,s[j].en)>0) //strcmp(s1,s2) 判断两个字符串s1和s2是否相同,相同返回true,不同返回false
  61. {
  62. strcpy(temp,s[j-1].en);
  63. strcpy(s[j-1].en,s[j].en);
  64. strcpy(s[j].en,temp);
  65. strcpy(temp,s[j-1].ch);
  66. strcpy(s[j-1].ch,s[j].ch);
  67. strcpy(s[j].ch,temp);
  68.  
  69. }
  70. }
  71. }
  72.  
  73. void add() //添加单词信息
  74. {
  75. int i=num,j,flag=1;
  76. while(flag)
  77. {
  78. flag=0;
  79. printf("\n请输入单词的英文形式:");
  80. scanf("%s",s[i].en);
  81. for(j=0;j<i;j++)
  82. if(strcmp(s[i].en,s[j].en)==0) //判断文件中是否有这个单词
  83. {
  84. printf("已有该单词,请检查后重新录入!\n");
  85. flag=1;
  86. break; //如有重复立即退出该层循环,提高判断速度
  87. }
  88.  
  89. }
  90. printf("\n请输入单词的中文形式:");
  91. scanf("%s",s[i].ch);
  92. num++;
  93. printf("\n您输入的信息为: 英文: %s 中文: %s ",s[i].en,s[i].ch);
  94. sort();
  95. }
  96.  
  97. void del() //删除单词信息
  98. {
  99. int i=0,j=0;
  100. char en[MAX_CHAR]; //英文形式
  101. printf("\n请输入你要删除的单词英文形式:");
  102. scanf("%s",en);
  103. for(i=0;i<num;i++) //先找到该英文形式对应的序号
  104. if(strcmp(s[i].en,en)==0)
  105. {
  106. for(j=i;j<num-1;j++) //后面的单词向前移动
  107. s[j]=s[j+1];
  108. num--; //数量减少1
  109. return;
  110. }
  111. printf("\n没有这个单词!");
  112.  
  113. }
  114.  
  115. void modify() //修改单词信息
  116. {
  117. int i=0,choose=0,flag=1,number=0; //chooses代表选项标识,flag代表是否找到单词
  118. char en[MAX_CHAR]; //英文形式
  119. char ch[MAX_CHAR]; //中文形式
  120. printf("\n修改英文请按1,修改中文请按2");
  121. scanf("%d",&number);
  122. switch(number)
  123. {
  124. case 1:
  125. while(flag||choose)
  126. {
  127. printf("\n请输入你要修改的单词英文形式:");
  128. scanf("%s",en);
  129. for(i=0;i<num;i++) //先找到该英文形式对应的序号
  130. if(strcmp(s[i].en,en)==0)
  131. {
  132. printf("\n请输入单词正确的英文形式:");
  133. scanf("%s",s[i].en);
  134.  
  135. printf("\n请输入此单词正确的的中文形式:");
  136. scanf("%s",s[i].ch);
  137.  
  138. printf("\n继续修改请选1,返回上一级请选0:");
  139. scanf("%d",&choose);
  140. if(choose==0)
  141. return;
  142. }
  143. flag=0;
  144.  
  145. }
  146. if(!flag) printf("\n没有这个单词!");
  147. case 2:
  148. while(flag||choose)
  149. {
  150. printf("\n请输入你要修改的单词中文形式:");
  151. scanf("%s",ch);
  152. for(i=0;i<num;i++) //先找到该英文形式对应的序号
  153. if(strcmp(s[i].ch,ch)==0)
  154. {
  155. printf("\n请输入单词正确的中文形式:");
  156. scanf("%s",s[i].ch);
  157.  
  158. printf("\n请输入此单词正确的的英文形式:");
  159. scanf("%s",s[i].en);
  160.  
  161. printf("\n继续修改请选1,返回上一级请选0:");
  162. scanf("%d",&choose);
  163. if(choose==0) return;
  164. }
  165. flag=0;
  166.  
  167. }
  168. if(!flag)
  169. printf("\n没有这个单词!");
  170. }
  171. }
  172.  
  173. void search() //查询单词
  174. {
  175. int i=0,choose=0,flag=1,number=0;
  176. char ch[MAX_CHAR]; //中文形式
  177. char en[MAX_CHAR]; //英文形式
  178. printf("\n中文查询请按1,英文查询请按2");
  179. scanf("%d",&number);
  180. switch(number)
  181. {
  182. case 1:
  183. while(choose||flag)
  184. {
  185. printf("\n请输入你要查询的单词中文形式:");
  186. scanf("%s",ch);
  187. for(i=0;i<num;i++)//先找到该中文形式对应的序号
  188. if(strcmp(s[i].ch,ch)==0)
  189. {
  190. printf("\n英文形式 中文形式 ");
  191. printf("\n %-12s%12s",s[i].en,s[i].ch);
  192. printf("\n继续查询请选1,返回上一级请选0:");
  193. scanf("%d",&choose);
  194. if(choose==0)
  195. return;
  196. }
  197. flag=0;
  198. }
  199. if(!flag)
  200. printf("\n没有这个单词!");
  201. break;
  202. case 2:
  203. while(choose||flag)
  204. {
  205. printf("\n请输入你要查询的单词英文形式:");
  206. scanf("%s",en);
  207. for(i=0;i<num;i++)//先找到该英文形式对应的序号
  208. if(strcmp(s[i].en,en)==0)
  209. {
  210. printf("\n中文形式 英文形式 ");
  211. printf("\n %-12s%12s",s[i].en,s[i].ch);
  212. printf("\n继续查询请选1,返回上一级请选0:");
  213. scanf("%d",&choose);
  214. if(choose==0)
  215. return;
  216. }
  217. flag=0;
  218. }
  219. if(!flag)
  220. printf("\n没有这个单词!");
  221. break;
  222.  
  223. default:
  224. printf("请输入1或2\n");
  225. }
  226.  
  227. }
  228. void maintain() //词典维护
  229.  
  230. {
  231. int choose;//维护功能选择
  232. printf(" ------------------\n");
  233. printf(" 1.增加单词\n");
  234. printf(" 2.修改单词\n");
  235. printf(" 3.删除单词\n");
  236. printf(" 4.查询单词\n");
  237. printf(" 5.退出本菜单\n");
  238. printf(" ------------------\n");
  239. while(1)
  240. {
  241. printf(" \n请输入维护功能编号:");
  242. scanf("%d",&choose);
  243. switch(choose)
  244. {
  245. case 1:
  246. add();writefile();break;
  247. case 2:
  248. modify();writefile();break;
  249. case 3:
  250. del();writefile();break;
  251. case 4:
  252. search();break;
  253. case 5: return;
  254. default: printf("\n请在1-5之间选择");
  255. }
  256. }
  257. }
  258. void menu() //用户界面
  259. {
  260. int item;
  261. printf("\n");
  262. printf(" *********************************************************\n");
  263. printf("# #\n");
  264. printf("# 英语单词小助手 #\n");
  265. printf("# #\n");
  266. printf("# 版本 : v1.0 #\n");
  267. printf("# #\n");
  268. printf(" *********************************************************\n");
  269. printf("# #\n");
  270. printf("# 0.词库维护 1.单词预览 #\n");
  271. printf("# #\n");
  272. printf("# 2.单词背诵(中英) 3.单词背诵(英中) #\n");
  273. printf("# #\n");
  274. printf("# 4.查询成绩 5.帮助 #\n");
  275. printf("# #\n");
  276. printf("# 6.增强记忆(中英) 7.增强记忆(英中) #\n");
  277. printf("# #\n");
  278. printf("# 8.退出系统 #\n");
  279. printf("# #\n");
  280. printf(" **********************************************************\n");
  281. printf("\n");
  282. printf(" 请选择您需要的操作序号(0-8)按回车确认:");
  283. scanf("%d",&item);
  284. printf("\n");
  285. readfile();
  286. switch(item)
  287. {
  288. case 0:
  289. maintain();break;
  290. case 8:
  291. select =0;break;
  292. default:
  293. printf("请在0-8之间选择\n");
  294. }
  295. }
  296. int main()
  297. {
  298. while(select)
  299. {
  300. menu();
  301. }
  302. system("pause");
  303. return 0;
  304. }

测试截图:

单词小助手C语言版

其他部分的测试不再赘述~

(3)运行结果

1. 词典维护

单词小助手C语言版

2. 单词预览

单词小助手C语言版

3.单词背诵(中英)

单词小助手C语言版

4.单词背诵(英中)

单词小助手C语言版

5.成绩查询

单词小助手C语言版

6.帮助

单词小助手C语言版

7.增强记忆(中英)

单词小助手C语言版

8.增强记忆(英中)

单词小助手C语言版

五、经验归纳

(1)不足:本次试验在原来的基础上将单词测试中的功能完善了一点,对做错的单词增强记忆功能。查询单词的功能添加英文词查询,不过在起初的时候,运行程序增强记忆函数的部分存在一些问题,尽管答错题目但是运行结果还是显示“你还没有错题哦”,经过检查,答错的题目并没有写入增强记忆文件,原因是不是以“写”的方式进入文件,而是要以“读”的方式进入文件。即 fp=fopen("F:\\Microsoft Visual Studio\\lyflyf.txt","r"); //以读入方式打开目录下的lyflyf.txt文件

(2)心得:此次实验我学到了许多,比如文件读写,随机数的运用,switch语句的用法,for循环的用法等等,不过在实现函数功能的时候还存在许多问题,知识点并没有完全掌握,最后经过不断地改正和查资料才实现整个程序的功能,所以总体而言还是受益匪浅的!

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

原文链接:https://blog.csdn.net/weixin_44694603/article/details/89047538