zoukankan      html  css  js  c++  java
  • 背单词系统

     

    目 录

     

    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。

  • 相关阅读:
    第一章、欢迎进入C#编程世界
    如何解决Response.Redirect方法传递汉字丢失或乱码问题?
    使用Eval()绑定数据时使用三元运算符
    .net图片验证码生成、点击刷新及验证输入是否正确
    bzoj 5368: [Pkusc2018]真实排名
    bzoj 5372: [Pkusc2018]神仙的游戏
    bzoj 5369: [Pkusc2018]最大前缀和
    bzoj 1937: [Shoi2004]Mst 最小生成树
    Codeforces 981F. Round Marriage
    bzoj 2169: 连边
  • 原文地址:https://www.cnblogs.com/ljxahjh100/p/5699098.html
Copyright © 2011-2022 走看看