背单词系统

 

目 录

 

1.设计任务 1

2. 需求分析 1

3. 概要设计 1

3.1 基本功能 1

3.2 函数说明 1

3.3 变量和结构体说明 2

3.4 单词存储简要分析 2

3.5 功能介绍 3

3.5.1功能模块图 3

3.5.2 详细介绍 3

3.6 程序调试 4

图3-5 单词添加 6

3.7 总结 9

致谢 10

附录(源代码) 11

参 考 文 献 20

 

轻松背单词

1.设计任务

综合训练用C语言以及数据结构知识来解决问题和提高处理问题的能力,巩固对C语言和数据结构的内容和知识的综合应用;本次课设的题目来源于12月份的英语四六级考试,该单词系统的设计核心是利用文件存储单词库,应用顺序表去实现单词的添加、删除、查找以及背诵等功能。

2. 需求分析

英语已成为我们生活中不可缺少的一部分,今年江苏高考的改革更加体现了英语的重要性。无论是中学生、大学生还是已经工作的人,要学好英语,首先自己的大脑路得有足够大的单词库,所以,背单词成了我们最头疼的事。

利用此次课程设计,我们写了背单词系统。使用该系统用户可以维护单词的词库,并可以编辑自己的词库;主要是用来背诵单词的,所以有英译汉、汉译英的测试,测试完后用户可以查看自己的测试成绩,同时在背诵过程中用户可以删除自己已背诵过的单词,也可以修改单词汉语意思为自己容易记住的,同时该系统具有单词预览功能,以及单词翻译功能。

3. 概要设计

3.1 基本功能

(1)词库的预览

(2)查单词的释义

(3)词库的添加

(4)词库的删除

(5)词库的修改

(6)汉译英测试

(7)英译汉测试

(8)成绩的查看

3.2 函数说明

 (1)void read_from_file()     //从文件中读取单词的信息

 (2)void write_to_file()       //从文件中写入单词的信息

 (3)void add_infor()           //添加单词信息

 (4)void del_infor()           //删除单词信息

 (5)void modify_infor()        //修改单词信息

 (6)void show_infor()          //单词显示

 (7)void search_infor()         //查询单词

 (8)void ch_to_en_infor()       //汉译英测试

 (10)void en_to_ch_infor()      //英译汉测试

 (11)void show_main_menu()      //显示主菜单

 (12)void chengji_infor()       //测试成绩

3.3 变量和结构体说明

(1)单词信息的结构体如下:

typedef struct word//单词的结构体

{

char en[MAX_CHAR]; // 英文形式

char ch[MAX_CHAR]; //中文形式

}word;

(2)宏定义

    #define MAX_CHAR 20  //最大字符

    #define MAX_NUM 100  //单词最大个数

(3)存放单词的信息的变量如下:

    word s[MAX_NUM]; //单词数组

    int num;//单词个数

3.4 单词存储简要分析

(1)定义结构体数组用来存放单词的信息

(2)单词信息存放在data.txt中,文件格式如下:

     单词个数——长度为4个字节

     第1个单词的信息——长度为sizeof(word)

     第2个单词的信息——长度为sizeof(word)

     ......

     第n个单词的信息——长度为sizeof(word)

(3)读文件data.txt的过程如下:

 打开文件data.txt用fopen函数(以mode指定的方式打开名为filename的    文件)先读取单词个数,然后逐个读取单词的信息,采用fread函数(从fp所制定的文件中读取长度为size的n个数据项,存到pt所指向的内存区)

(4)写文件data.txt的过程如下:

先写入单词个数,然后逐个写入单词的信息,采用fwrite函数(把ptr所指向的n*size个字节输出的fp所指向的文件中)

3.5 功能介绍

3.5.1功能模块图

 

图3-1  功能结构图

3.5.2 详细介绍

(1)词库预览即打开文件并把文件信息输出至屏幕

(2)删除单词和修改单词信息的时候,都需要先输入中文,从该中文找到单词的位置

(3)在文件中单词查找与匹配过程中均用strcmp()函数

(4)程序采用菜单的形式显示,用户可以输入选择进行操作

(5)英译汉、汉译英测试选用随机测试

(6)添加单词需逐个添加

 

 

3.6 总结

通过本次数据结构课程设计,让我不但对数据结构所学课程内容加深了巩固,同时也对C语言编程有了很大的提高,而且培养了自己的团队合作精神。对C语言的文件的存取、结构体的使用、数组的使用以及数据结构顺序表都加深了理解。“千里之堤毁于蚁穴”这句话对于C语言编程特别适用,因为一个小小的分号都可能使你费尽心思编出来的程序无法运行,所以通过这次课程设计我领略到了程序员该有的一丝不苟。

此次课程设计题目来源于当时的四六级考试,所以设计的功能都贴近我们的需求。开始着手去写时完全没有思绪,和队友一起讨论要实现的功能,意见统一后进行分工。在讨论声中给此次课设画上了句号。

对于词库的维护刚开始没有选用文件,导致每次退出测试词库都会清空,这便要求每次用户进行查询测试等前都必须先添加单词,因此,经过考虑进行了文件存储,实现了词库的维护。查询单词以及英译汉、汉译英测试都需要去词库进行查找与匹配,即需要用到顺序表的locate()函数,但考虑到这样工程较大,所以在这三个函数中运用了存放在头文件string.h中的strcmp()函数,对程序进行了优化。同时,想要让程序运行时菜单一直处在上方不动,但能力有限,所以采用了每步运行完返回主菜单的方法代替它。

通过此次数据结构课程设计,我提高了编程的经验,为以后的学习打下了坚实的基础。

附录(源代码)

  1      数据结构     课程设计说明书
  2 
  3 
  4 
  5 
  6 
  7 题目:          轻松背单词             
  8 
  9 学生姓名:       啦啦啦      
 10 学    号:    201406060306     
 11 院 (系):    电气与信息工程   
 12 专    业:   计算机科学与技术  
 13 指导教师:                
 14 2016115 15 
 16 目 录
 17 
 18 1.设计任务    1
 19 2. 需求分析    1
 20 3. 概要设计    1
 21 3.1 基本功能    1
 22 3.2 函数说明    1
 23 3.3 变量和结构体说明    2
 24 3.4 单词存储简要分析    2
 25 3.5 功能介绍    3
 26 3.5.1功能模块图    3
 27 3.5.2 详细介绍    3
 28 3.6 程序调试    4
 29 图3-5 单词添加    6
 30 3.7 总结    9
 31 致谢    10
 32 附录(源代码)    11
 33 参 考 文 献    20
 34 
 35 轻松背单词
 36 1.设计任务
 37 综合训练用C语言以及数据结构知识来解决问题和提高处理问题的能力,巩固对C语言和数据结构的内容和知识的综合应用;本次课设的题目来源于12月份的英语四六级考试,该单词系统的设计核心是利用文件存储单词库,应用顺序表去实现单词的添加、删除、查找以及背诵等功能。
 38 2. 需求分析
 39 英语已成为我们生活中不可缺少的一部分,今年江苏高考的改革更加体现了英语的重要性。无论是中学生、大学生还是已经工作的人,要学好英语,首先自己的大脑路得有足够大的单词库,所以,背单词成了我们最头疼的事。
 40 利用此次课程设计,我们写了背单词系统。使用该系统用户可以维护单词的词库,并可以编辑自己的词库;主要是用来背诵单词的,所以有英译汉、汉译英的测试,测试完后用户可以查看自己的测试成绩,同时在背诵过程中用户可以删除自己已背诵过的单词,也可以修改单词汉语意思为自己容易记住的,同时该系统具有单词预览功能,以及单词翻译功能。
 41 3. 概要设计
 42 3.1 基本功能
 431)词库的预览
 442)查单词的释义
 453)词库的添加
 464)词库的删除
 475)词库的修改
 486)汉译英测试
 497)英译汉测试
 508)成绩的查看
 51 3.2 函数说明
 521void read_from_file()     //从文件中读取单词的信息
 532void write_to_file()       //从文件中写入单词的信息
 543void add_infor()           //添加单词信息
 554void del_infor()           //删除单词信息
 565void modify_infor()        //修改单词信息
 576void show_infor()          //单词显示 
 587void search_infor()         //查询单词
 598void ch_to_en_infor()       //汉译英测试 
 6010void en_to_ch_infor()      //英译汉测试
 6111void show_main_menu()      //显示主菜单 
 6212void chengji_infor()       //测试成绩 
 63 3.3 变量和结构体说明
 641)单词信息的结构体如下:
 65 typedef struct word//单词的结构体
 66 {
 67     char en[MAX_CHAR]; // 英文形式 
 68     char ch[MAX_CHAR]; //中文形式 
 69 }word;
 702)宏定义
 71     #define MAX_CHAR 20  //最大字符
 72     #define MAX_NUM 100  //单词最大个数
 733)存放单词的信息的变量如下:
 74     word s[MAX_NUM]; //单词数组 
 75     int num;//单词个数
 76 3.4 单词存储简要分析
 771)定义结构体数组用来存放单词的信息
 782)单词信息存放在data.txt中,文件格式如下:
 79      单词个数——长度为4个字节
 80      第1个单词的信息——长度为sizeof(word)
 81      第2个单词的信息——长度为sizeof(word)
 82      ......
 83      第n个单词的信息——长度为sizeof(word)
 843)读文件data.txt的过程如下:
 85  打开文件data.txt用fopen函数(以mode指定的方式打开名为filename的    文件)先读取单词个数,然后逐个读取单词的信息,采用fread函数(从fp所制定的文件中读取长度为size的n个数据项,存到pt所指向的内存区)
 864)写文件data.txt的过程如下:
 87 先写入单词个数,然后逐个写入单词的信息,采用fwrite函数(把ptr所指向的n*size个字节输出的fp所指向的文件中)
 88 3.5 功能介绍
 89 3.5.1功能模块图
 90 
 91 
 92 
 93 
 94 
 95 
 96 
 97 
 98 
 99 
100 
101 
102 
103 
104 
105 图3-1  功能结构图
106 3.5.2 详细介绍
1071)词库预览即打开文件并把文件信息输出至屏幕
1082)删除单词和修改单词信息的时候,都需要先输入中文,从该中文找到单词的位置
1093)在文件中单词查找与匹配过程中均用strcmp()函数
1104)程序采用菜单的形式显示,用户可以输入选择进行操作
1115)英译汉、汉译英测试选用随机测试
1126)添加单词需逐个添加
113 3.6 程序调试
1141)系统菜单
115 图3-2 主菜单显示
1162)查询词库信息
117 图3-3 词库预览
1183)查询单个单词
119 图3-4 单词查询
1204)添加单词
121 
122 图3-5 单词添加
1235)删除单词
124 图3-6 单词删除
1256)英译汉测试
126 图3-7 英译汉测试
1277)汉译英测试
128 图3-8 汉译英测试
1298)查看测试成绩
130 图3-9 测试成绩查询
1319)修改单词信息
132 图3-10 修改单词
13310)退出系统
134 图3-11 退出系统
135 3.7 总结
136 通过本次数据结构课程设计,让我不但对数据结构所学课程内容加深了巩固,同时也对C语言编程有了很大的提高,而且培养了自己的团队合作精神。对C语言的文件的存取、结构体的使用、数组的使用以及数据结构顺序表都加深了理解。“千里之堤毁于蚁穴”这句话对于C语言编程特别适用,因为一个小小的分号都可能使你费尽心思编出来的程序无法运行,所以通过这次课程设计我领略到了程序员该有的一丝不苟。
137 此次课程设计题目来源于当时的四六级考试,所以设计的功能都贴近我们的需求。开始着手去写时完全没有思绪,和队友一起讨论要实现的功能,意见统一后进行分工。在讨论声中给此次课设画上了句号。
138 对于词库的维护刚开始没有选用文件,导致每次退出测试词库都会清空,这便要求每次用户进行查询测试等前都必须先添加单词,因此,经过考虑进行了文件存储,实现了词库的维护。查询单词以及英译汉、汉译英测试都需要去词库进行查找与匹配,即需要用到顺序表的locate()函数,但考虑到这样工程较大,所以在这三个函数中运用了存放在头文件string.h中的strcmp()函数,对程序进行了优化。同时,想要让程序运行时菜单一直处在上方不动,但能力有限,所以采用了每步运行完返回主菜单的方法代替它。
139 通过此次数据结构课程设计,我提高了编程的经验,为以后的学习打下了坚实的基础。
140 
141 致谢
142 感谢我的小伙伴李佳鑫同学和我一起完成了这次课设,同时感谢赵老师的热心辅导。
143 
144 
145 附录(源代码)
146 #include <stdio.h>
147 #include <string.h>
148 #include <stdlib.h>
149 #define MAX_CHAR 20  //最大字符
150 #define MAX_NUM 100  //单词最大个数
151 typedef struct word//单词的结构体
152 {
153     char en[MAX_CHAR]; // 英文形式 
154     char ch[MAX_CHAR]; //中文形式 
155 }word;
156 int c=0,d=0;//统分变量
157 word s[MAX_NUM]; //单词数组 
158 int num;//单词个数
159 void read_from_file()//从文件中读取单词的信息
160 {
161     FILE *fp;
162     int i=0;
163     fp=fopen("data.txt","r"); 
164     fread(&num,sizeof(num),1,fp); //先读取单词的个数
165     for(i=0;i<num;i++)
166     fread(&s[i],sizeof(word),1,fp); //读取每个单词的信息存放到结构体 
167     fclose(fp);//关闭文件
168     return 0;
169 }
170 void write_to_file()//从文件中写入单词的信息
171 {
172     FILE *fp;
173     int i=0;
174     fp=fopen("data.txt","w+");
175     if(!fp)
176     {
177         printf("打开文件data.txt失败!
");
178         return 0;
179     }
180     fwrite(&num,sizeof(num),1,fp); //先写入单词的个数
181     for(i=0;i<num;i++)
182     fwrite(&s[i],sizeof(word),1,fp); //写入每个单词的信息
183     fclose(fp);//关闭文件
184 }
185 void add_infor()//添加单词信息
186 {
187     int a,i=num,o;
188     printf("请输入单词的英文形式:");
189     scanf("%s",s[i].en);
190     printf("请输入单词的中文形式:");
191     scanf("%s",s[i].ch);
192     num++;
193     printf("您输入的信息为: 英文: %s 中文: %s 
",s[i].en,s[i].ch); 
194     printf("Enter 3 继续输入;Enter 9 返回主菜单");
195     scanf("%d",&o);
196     if(o==3)
197     {
198         add_infor();
199         return 0;    
200     } 
201     if(o==9) 
202     {
203         show_main_menu();
204         return 0;
205     }
206 }
207 void del_infor()//删除单词信息
208 {
209     int i=0,j=0,o;
210     char ch[MAX_CHAR]; //中文形式
211     printf("请输入你要删除的单词中文形式:");
212     scanf("%s",ch);
213     for(i=0;i<num;i++)//先找到该中文形式对应的序号
214     if(strcmp(s[i].ch,ch)==0)
215     {
216         for(j=i;j<num-1;j++)
217         s[j]=s[j+1];
218         num--; //数量减少 1
219         printf("删除成功!
");
220         printf("Enter 4 继续删除;Enter 9 返回主菜单");
221         scanf("%d",&o);
222         if(o==9) 
223         {
224             show_main_menu();
225             return 0;
226         }
227         if(o==4)
228         {
229             del_infor();
230             return 0;
231         } 
232     }
233     printf("没有这个单词!");
234     printf("Enter 4 继续删除;Enter 9 返回主菜单");
235     scanf("%d",&o);
236     if(o==9) show_main_menu();
237     if(o==4) del_infor();
238 }
239 void modify_infor()//修改单词信息
240 {
241     int i=0,o;
242     char ch[MAX_CHAR]; //中文形式
243     printf("请输入你要修改的单词中文形式:");
244     scanf("%s",ch);
245     for(i=0;i<num;i++)//先找到该中文形式对应的序号
246     if(strcmp(s[i].ch,ch)==0)//strcmp()函数在string.h中  相等返回0 
247     {
248         printf("请输入单词正确的英文形式:");
249         scanf("%s",s[i].en);
250         printf("请输入此单词正确的的中文形式:");
251         scanf("%s",s[i].ch);
252         printf("修改成功!
");
253         printf("Enter 8 继续修改;Enter 9 返回主菜单");
254         scanf("%d",&o);
255         if(o==9) 
256         {
257             show_main_menu();
258             return 0;
259         }
260         if(o==8) 
261         {
262             modify_infor();
263             return 0;
264         }
265     }
266     printf("没有这个单词!");
267     printf("Enter 8 继续修改;Enter 9 返回主菜单");
268     scanf("%d",&o);
269     if(o==9) show_main_menu();
270     if(o==8) modify_infor();
271 }
272 void show_infor() //单词显示 
273 {
274     int i=0,o;
275     printf("单词: 英文   中文 
");
276     for(i=0;i<num;i++)
277     printf(" %10s%10s
",s[i].en,s[i].ch);
278     printf("Enter 9 返回主菜单");
279     scanf("%d",&o);
280     if(o==9) show_main_menu();
281 }
282 void search_infor()//查询单词
283 {
284     int i=0,o;
285     char ch[MAX_CHAR]; //中文形式
286     printf("请输入你要查询的单词中文形式:");
287     scanf("%s",ch);
288     for(i=0;i<num;i++)//先找到该中文形式对应的序号
289     if(strcmp(s[i].ch,ch)==0)
290     {
291         printf("英文形式 中文形式 
");
292         printf("%10s%12s
",s[i].en,s[i].ch);
293         printf("Enter 2 继续查询;Enter 9 返回主菜单");
294         scanf("%d",&o);
295         if(o==9) 
296         {
297             show_main_menu();
298             return 0;
299         }
300         if(o==2) 
301         {
302             search_infor();
303             return 0;
304         }
305     }
306     printf("没有这个中文形式!");
307     printf("Enter 2 继续查询;Enter 9 返回主菜单");
308     scanf("%d",&o);
309     if(o==9) show_main_menu() ;
310     if(o==2) search_infor();
311 }
312 void ch_to_en_infor()    //汉译英测试 
313 {
314     char b1[20];
315     int i,o;
316     i = rand()%num;  //随机测试 
317     printf("【%s】请输入英文单词:",s[i].ch);
318     scanf("%s",b1);
319     while(strcmp(b1,s[i].en)!=0)
320     {
321         printf("输入错误!!!Enter 0 重新输入;Enter 6 继续测试;Enter 9 返回主菜单:");
322         c++;
323         scanf("%d",&o);
324         if(o==0) 
325         {
326             printf("请再次尝试:");
327             scanf("%s",b1);
328         }
329         if(o==6) 
330         {
331             ch_to_en_infor();
332             return 0;
333         }
334         if(o==9)
335         {
336             show_main_menu();
337             return 0;
338         }
339     }
340     printf("
恭喜你,回答正确,加10分!

");d++;
341     printf("Enter 6 继续测试,Enter 9 返回主菜单");
342     scanf("%d",&o);
343     if(o==6) ch_to_en_infor();
344     if(o==9) show_main_menu();
345 }
346 void en_to_ch_infor()   //英译汉测试
347 {
348     char b1[20];
349     int i,o;
350     i = rand()%num;  //随机测试
351     printf("【%s】请输入中文意思:",s[i].en);
352     scanf("%s",b1);
353     while(strcmp(b1,s[i].ch)!=0)
354     {
355         printf("输入错误!!!Enter 0 重新输入;Enter 5 继续测试;Enter 9 返回主菜单:");
356         c++;
357         scanf("%d",&o);
358         if(o==0)
359         {
360             printf("请再次尝试:");
361             scanf("%s",b1);
362         }
363         if(o==5) 
364         {
365             en_to_ch_infor();
366             return 0;
367         }
368         if(o==9) 
369         {
370             show_main_menu();
371             return 0;
372         }
373     }
374     printf("
恭喜你,回答正确,加10分!

");d++;
375     printf("Enter 5 继续测试;Enter 9 返回主菜单");
376     scanf("%d",&o);
377     if(o==5) en_to_ch_infor();
378     if(o==9) show_main_menu();
379 }
380 void show_main_menu()  //显示主菜单 
381 {
382     printf("	***********************************************
");
383     printf("	**         1、查看词库    2、单词查询        **
");
384     printf("	**         3、单词添加    4、单词删除        **
");
385     printf("	**         5、英译汉测试  6、汉译英测试      **
");
386     printf("	**         7、查看成绩    8、单词修改        **
");
387     printf("	**         9、返回主菜单  10、退出系统       **
");
388     printf("	***********************************************
"); 
389     printf("请选择您需要的服务:");
390     return 0; 
391 } 
392 void chengji_infor()  //测试成绩 
393 {
394     int o; 
395     printf("
 共计输入错误:%d次 **每次扣10分**
",c);
396     printf(" 共计输入正确:%d次 **每次加10分**
",d);
397     printf(" 你的总得分为:%d分

",10*d-10*c);
398     printf("Enter 9 返回主菜单");
399     scanf("%d",&o);
400     if(o==9) show_main_menu() ;
401 }
402 int main()
403 {
404     printf("	***********************************************
");
405     printf("	**             欢迎使用背单词系统!           **
");
406     printf("	**           设计者:侯婧欢 && 李佳鑫         **
");
407     printf("	**              班级:计本143班              **
");
408     printf("	**              学号:06 18                  **
");
409     printf("	***********************************************
");
410     int choose=0;
411     num=0;                //初始化单词个数为0
412     fopen("data.txt","a");
413     read_from_file();     //读取文件
414     show_main_menu();
415     while(choose!=10)
416     {
417         scanf("%d",&choose);
418         switch(choose)
419         {
420             case 1:   show_infor();break;
421             case 2:   search_infor();break;
422             case 3:   add_infor();break;
423             case 4:   del_infor();break;
424             case 5:   en_to_ch_infor();break;
425             case 6:   ch_to_en_infor();break;
426             case 7:   chengji_infor();break;
427             case 8:   modify_infor();break;
428             case 9:   show_main_menu();break;
429         }
430         write_to_file();//写入文件
431     }
432     printf(" ***************谢谢使用背单词系统!再见!*************** 
");
433 getch();
434     return 0;
435 }
436 
437 参 考 文 献
438 [1] 严蔚敏.数据结构[M].清华大学出版社.2007-03439 [2] 谭浩强.C程序设计[M].清华大学出版社.2010-06
View Code

参 考 文 献

[1] 严蔚敏.数据结构[M].清华大学出版社.2007-03;
[2] 谭浩强.C程序设计[M].清华大学出版社.2010-06。

原文地址:https://www.cnblogs.com/ljxahjh100/p/5699098.html