lovejobs

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

一.在第一部曲中我们介绍了电子词典项目开发的前5步,下面继续我们的步伐。

6.函数接口设计,这一步不是一蹴而就的,在项目进行中得不断修改,下面是我电子词典项目接口。

 1 /**************函数接口定义************************/
 2 /*统计文件中单词数量,返回单词数量*/
 3 int statWordCount(char *filaename);
 4 /*加载文本词库文件*/
 5 void loadTextFile(char *filename);
 6 /*加载二进制词库文件*/
 7 void loadBinFile(char *filename);
 8 /*为长度为len的结构体数组分配内存*/
 9 void mallocForSArra(int len);
10 /*创建并初始化词库结构体数组*/
11 void createInitArray();
12 
13 /*对结构体dict数组进行排序,使用插入排序*/
14 void sortStructArr(SWORD * dict);
15 /*输入模块,返回输入字符串*/
16 char *getInput(char *p);
17 /*输出模块,输出一个结构体*/
18 void setOutput(SWORD *word);
19 /*查询模块,根据关键词key在词库里查询,找到返回指向这个结构体的指针,否则返回NULL*/
20 SWORD *searchWord(char *key);
21 /*从输入获取要添加的单词*/
22 SWORD getWord();
23 /*添加单词word到结构体数组*/
24 void addWordToArr(SWORD *word);
25 /*保存词库结构数组到文件*/
26 void saveWord(char *filename,SWORD *sw);
27 /*生成二进制的词库文件*/
28 void createBinFile(SWORD *word);
29 /*计算一个字符串里某个ch字符的个数*/
30 int calcNumber(char *str,char ch);
31 /*从字符串str中取出字符ch后面的字符串*/
32 char *rearstr(char *str, char ch,int *pos);
33 /*比较两个SWORD单词的大小,前一个大于后一个返回1,前一个小于后一个返回-1,前一个等于后一个返回0*/
34 int wordcmp(SWORD wordf, SWORD wordr);
35 /*创建并初始化二进制加载文件对应的的数组*/
36 void createInitBinArr(FILE *F);
37 
38 /*查询模块函数*/
39 void searchModel();
40 /*添加单词模块函数*/
41 void addWordModel();

7.这一步就要搭建程序主流框架,即main函数,代码如下:

  1 #define  _CRT_SECURE_NO_WARNINGS
  2 #include "dict.h"
  3 /*********定义常用全局变量*****************/
  4 /*
  5 
  6 /*********结构体指针,指向词库结构体数组******/
  7 SWORD * DICT = NULL;
  8 
  9 /************词库数量,结构体数组长度***************/
 10 int LEN = 0;
 11 
 12 
 13 /***********文本词库文件名*********************/
 14 char *dicttxtname = "dict.txt";
 15 /***********二进制词库文件名*********************/
 16 char *dictbitname = "dict.dat";
 17 
 18 
 19 void main()
 20 {
 21 
 22     char mode[100];
 23     printf("提示:输入-text选择文本词库,输入-bin选择二进制词库,输入exit退出程序\n");
 24     printf("请选择要加载的文件:");
 25 
 26 A:    scanf("%s", &mode);
 27     
 28     if (strcmp(mode, "-text")==0)//加载文本词库
 29     {
 30         printf("%s\n", mode);
 31         loadTextFile(dicttxtname);//加载文本词库
 32         if (DICT == NULL)//加载失败
 33             return;
 34         
 35         sortStructArr(DICT);//对结构体数组按关键字key进行字典排序
 36 
 37         //开始查询
 38     D:        searchModel();
 39 
 40         //保存添加前的词库末尾位置
 41         SWORD *rpos = DICT + LEN - 1;
 42 
 43         //添加模块
 44         addWordModel();
 45 
 46 
 47 C:        printf("是否保存词库数组到文件(输入Q退出程序):Y/N/Q?\n");
 48         char yesorno = getchar();
 49         
 50         if (yesorno == 'Y')
 51         {
 52             saveWord(dicttxtname,rpos);/*保存词库结构数组到文件*/
 53             goto D;
 54         }
 55         else if (yesorno == 'Q')
 56         {
 57             return;//结束
 58         }
 59         else if (yesorno == 'N')
 60         {
 61             goto D;
 62         }
 63         else
 64         {
 65             goto C;
 66         }
 67         
 68 
 69         
 70 
 71     }
 72     else if (strcmp(mode, "-bin")==0)//加载二进制词库
 73     {
 74 
 75         printf("选择建立二进制文件(选择建立输入create,选择加载输入load):");
 76 
 77 B:        scanf("%s", &mode);
 78         if (strcmp(mode, "load") == 0)
 79         {
 80             loadBinFile(dictbitname);//加载二进制文件
 81             if (DICT == NULL)//加载失败
 82                 return;
 83 
 84             goto D;//加载完了去查询
 85 
 86         }
 87         else if (strcmp(mode, "create") == 0)
 88         {
 89             loadTextFile(dicttxtname);//加载文本词库
 90             if (DICT == NULL)//加载失败
 91                 return;
 92 
 93             sortStructArr(DICT);//排序
 94             createBinFile(DICT);//生成二进制词库
 95 
 96             goto D;//去查询
 97         }
 98         else
 99         {
100             printf("\n您的输入有误,请重新输入:");
101             goto B;
102         }
103         
104 
105     }
106     else if (strcmp(mode, "exit") == 0)
107     {
108         return;//退出程序
109     }
110     else//处理错误输入
111     {
112         printf("您的输入有误,请重新输入:");
113         goto A;
114     }
115     
116 }

8.函数接口实现,由于这一步代码较多,所以放在第三部曲中。

9.函数接口测试本人已经测试过了,结果就不在这贴了。

10.运行效果见下面三张图

-bin

-text

 

posted on 2017-05-26 09:59  lovejobs  阅读(455)  评论(0编辑  收藏  举报