zoukankan      html  css  js  c++  java
  • c语言项目开发流程二部曲

    一.在第一部曲中我们介绍了电子词典项目开发的前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退出程序
    ");
     24     printf("请选择要加载的文件:");
     25 
     26 A:    scanf("%s", &mode);
     27     
     28     if (strcmp(mode, "-text")==0)//加载文本词库
     29     {
     30         printf("%s
    ", 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?
    ");
     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("
    您的输入有误,请重新输入:");
    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

    需要程序源码的可以加我微信x241602私聊。
  • 相关阅读:
    tcp/ip基础
    Fiddler进行模拟Post提交json数据,总为null解决方式(转)
    mysql function动态执行不同sql语句
    SQL语句中各个部分的执行顺序(转)
    shell的初步介绍
    linux分区
    转00600异常解决方案:ORA-00600: 内部错误代码, 参数: [19004], [], [], [], [], []
    一小时执行一次存储过程
    Oracle中的job的定时任务
    Oracle 存储过程错误之PLS-00201: 必须声明标识符
  • 原文地址:https://www.cnblogs.com/huipengbo/p/6907099.html
Copyright © 2011-2022 走看看