一.在第一部曲中我们介绍了电子词典项目开发的前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

-text

c语言项目开发流程二部曲的更多相关文章

  1. c语言项目开发流程一部曲

    一.c项目开发总体分如下图所示 二.对每一步的解析 1.需求文档分析,本例以电子词典作为例子 列出每一个需求以及每一个需求的每一个特点,将其归纳 为一张表. 2.设计数据结构 设计数据结构,也就是确定 ...

  2. 【CC2530入门教程-01】IAR集成开发环境的建立与项目开发流程

    [引言] 本系列教程就有关CC2530单片机应用入门基础的实训案例进行分析,主要包括以下6部分的内容:1.CC2530单片机开发入门.2.通用I/O端口的输入和输出.3.外部中断初步应用.4.定时/计 ...

  3. Django (九) 项目开发流程&项目架构

    项目开发流程&项目架构 1. 软件开发的一般流程 1. 需求分析及确认: 由需求分析工程师与客户确认甚至挖掘需求.输出需求说明文档. ​ 2. 概要设计及详细设计: 开发对需求进行概要设计,包 ...

  4. IT项目开发流程

    项目开发流程: 一.需求分析:相关系统分析员向用户初步了解需求,然后用相关的工具软件列出要开发的系统的大功能模块,每个大功能模块有哪些小功能模块,对于有些需求比较明确相关的界面时,在这一步里面可以初步 ...

  5. Python基础之模块:7、项目开发流程和项目需求分析及软件开发目录

    一.项目开发流程 1.项目需求分析 明确项目具体功能: 明确到底要写什么东西,实现什么功能,在这个阶段的具体要询问项目经理和客户的需求 参与人员: 产品经理.架构师.开发经理 技术人员主要职责: 引导 ...

  6. 使用.NET MVC框架项目开发流程(项目开发流程)

    MVC项目开发流程 整理需求,进行需求分析.项目设计. 整理数据项,建数据库做前期准备,并整理字典. 建立所需数据库表和视图和模型. 页面实现其初步功能(跳过逻辑后台代码),只是实现页面之间的跳转以及 ...

  7. K2项目开发流程

    (自己的学习资料) K2项目开发流程: 1.在VS2013中设计流程,并在K2 Workspce中测试流程 首先是新建新建一个k2的Process文件..kprx后缀. 在里面创建所需要的流程.由于我 ...

  8. 覃超:Facebook的项目开发流程和工程师的绩效管理机制

    覃超:Facebook的项目开发流程和工程师的绩效管理机制 http://mp.weixin.qq.com/s?__biz=MjM5MDE0Mjc4MA==&mid=2650992350&am ...

  9. 小D课堂-SpringBoot 2.x微信支付在线教育网站项目实战_1-2.中大型公司里面项目开发流程讲解

    笔记 2.中大型公司里面项目开发流程讲解     简介:讲解一个项目如何从零到上线,经历过怎样的步骤和流程                  1.一个中大型项目的开发流程,从需求调研到项目上线    ...

随机推荐

  1. 统计web应用程序的访问人数

    新建一个空网站,添加Global.asax全局处理. 文件目录如图: 在global类中添加代码: using System; using System.Collections.Generic; us ...

  2. es6 module + webpack

    其实在之前本人就看了 es6 里面的一部分内容,当然是阮一峰大神的 ECMAScript 6 入门. 最近闲来无事又来看下,其中 Module 的语法 这章时候,用里面代码跑的时候,理所当然的报错 S ...

  3. 使用swagger实现web api在线接口文档

    一.前言 通常我们的项目会包含许多对外的接口,这些接口都需要文档化,标准的接口描述文档需要描述接口的地址.参数.返回值.备注等等:像我们以前的做法是写在word/excel,通常是按模块划分,例如一个 ...

  4. 感觉不止被Q了一下,还不知道被谁套了一个虚弱

    最近身体出现了一些问题,导致博客无法正常更新,只能是看身体状态更新了,相信用不了半个月就会满血复活的,请谅解 Joker在这里提醒大家  身体是革命的本钱,不要透支,不要过度消耗

  5. css3 兼容各个浏览器

    transform:rotate(9deg);-ms-transform:rotate(9deg); /* Internet Explorer */-moz-transform:rotate(9deg ...

  6. lua table表

    lua table表 语法结构 创建一个 table 直接使用 "{}" 即可 table1 = {} -- 赋值 table1["name"] = " ...

  7. yum仓库

    1.概念: Yum仓库则是为进一步简化RPM管理软件难度而设计的,Yum能够根据用户的要求分析出所需软件包及其相关依赖关系,自动从服务器下载软件包并安装到系统 yum的工作原理:执行yum命令――&g ...

  8. require.js+bootstrap实现简单的页面登录和页面跳转

    小颖的这个demo其实很简单的,大家一起来先来看看页面效果图:          目录: 代码: inde.html <!DOCTYPE html> <html> <he ...

  9. xmlplus 组件设计系列之九 - 树(Tree)

    树形组件是一种具有层级结构的组件,广泛应用于各种场景.本章会实现一个简单的树形组件,尽管功能有限,但你可以通过扩展它来实现自己所需要的树形组件. 数据源 树形组件的数据源可以是 JSON 格式的数据对 ...

  10. GitHub 入门不完全指南(未完待续)

    我一直认为 GitHub 是一座宝藏,想让更多人的知道它.加入到这个社区中.本人能力有限,如果文中出现不对的地方,欢迎指正交流. 一.前言 大家好,我是削微寒(xuē wēi hán),一个走在进阶路 ...