c语言项目开发流程二部曲

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

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

 /**************函数接口定义************************/
/*统计文件中单词数量,返回单词数量*/
int statWordCount(char *filaename);
/*加载文本词库文件*/
void loadTextFile(char *filename);
/*加载二进制词库文件*/
void loadBinFile(char *filename);
/*为长度为len的结构体数组分配内存*/
void mallocForSArra(int len);
/*创建并初始化词库结构体数组*/
void createInitArray(); /*对结构体dict数组进行排序,使用插入排序*/
void sortStructArr(SWORD * dict);
/*输入模块,返回输入字符串*/
char *getInput(char *p);
/*输出模块,输出一个结构体*/
void setOutput(SWORD *word);
/*查询模块,根据关键词key在词库里查询,找到返回指向这个结构体的指针,否则返回NULL*/
SWORD *searchWord(char *key);
/*从输入获取要添加的单词*/
SWORD getWord();
/*添加单词word到结构体数组*/
void addWordToArr(SWORD *word);
/*保存词库结构数组到文件*/
void saveWord(char *filename,SWORD *sw);
/*生成二进制的词库文件*/
void createBinFile(SWORD *word);
/*计算一个字符串里某个ch字符的个数*/
int calcNumber(char *str,char ch);
/*从字符串str中取出字符ch后面的字符串*/
char *rearstr(char *str, char ch,int *pos);
/*比较两个SWORD单词的大小,前一个大于后一个返回1,前一个小于后一个返回-1,前一个等于后一个返回0*/
int wordcmp(SWORD wordf, SWORD wordr);
/*创建并初始化二进制加载文件对应的的数组*/
void createInitBinArr(FILE *F); /*查询模块函数*/
void searchModel();
/*添加单词模块函数*/
void addWordModel();

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

 #define  _CRT_SECURE_NO_WARNINGS
#include "dict.h"
/*********定义常用全局变量*****************/
/* /*********结构体指针,指向词库结构体数组******/
SWORD * DICT = NULL; /************词库数量,结构体数组长度***************/
int LEN = ; /***********文本词库文件名*********************/
char *dicttxtname = "dict.txt";
/***********二进制词库文件名*********************/
char *dictbitname = "dict.dat"; void main()
{ char mode[];
printf("提示:输入-text选择文本词库,输入-bin选择二进制词库,输入exit退出程序\n");
printf("请选择要加载的文件:"); A: scanf("%s", &mode); if (strcmp(mode, "-text")==)//加载文本词库
{
printf("%s\n", mode);
loadTextFile(dicttxtname);//加载文本词库
if (DICT == NULL)//加载失败
return; sortStructArr(DICT);//对结构体数组按关键字key进行字典排序 //开始查询
D: searchModel(); //保存添加前的词库末尾位置
SWORD *rpos = DICT + LEN - ; //添加模块
addWordModel(); C: printf("是否保存词库数组到文件(输入Q退出程序):Y/N/Q?\n");
char yesorno = getchar(); if (yesorno == 'Y')
{
saveWord(dicttxtname,rpos);/*保存词库结构数组到文件*/
goto D;
}
else if (yesorno == 'Q')
{
return;//结束
}
else if (yesorno == 'N')
{
goto D;
}
else
{
goto C;
} }
else if (strcmp(mode, "-bin")==)//加载二进制词库
{ printf("选择建立二进制文件(选择建立输入create,选择加载输入load):"); B: scanf("%s", &mode);
if (strcmp(mode, "load") == )
{
loadBinFile(dictbitname);//加载二进制文件
if (DICT == NULL)//加载失败
return; goto D;//加载完了去查询 }
else if (strcmp(mode, "create") == )
{
loadTextFile(dicttxtname);//加载文本词库
if (DICT == NULL)//加载失败
return; sortStructArr(DICT);//排序
createBinFile(DICT);//生成二进制词库 goto D;//去查询
}
else
{
printf("\n您的输入有误,请重新输入:");
goto B;
} }
else if (strcmp(mode, "exit") == )
{
return;//退出程序
}
else//处理错误输入
{
printf("您的输入有误,请重新输入:");
goto A;
} }

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

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

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

-bin

c语言项目开发流程二部曲

-text

c语言项目开发流程二部曲

上一篇:Adaptive Backgrounds – jQuery 自适应背景插件


下一篇:巧妙地用二叉树完成算式计算算法<计算器,二叉树,C++,独辟蹊径>