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

-text

c语言项目开发流程二部曲的更多相关文章
- c语言项目开发流程一部曲
一.c项目开发总体分如下图所示 二.对每一步的解析 1.需求文档分析,本例以电子词典作为例子 列出每一个需求以及每一个需求的每一个特点,将其归纳 为一张表. 2.设计数据结构 设计数据结构,也就是确定 ...
- 【CC2530入门教程-01】IAR集成开发环境的建立与项目开发流程
[引言] 本系列教程就有关CC2530单片机应用入门基础的实训案例进行分析,主要包括以下6部分的内容:1.CC2530单片机开发入门.2.通用I/O端口的输入和输出.3.外部中断初步应用.4.定时/计 ...
- Django (九) 项目开发流程&项目架构
项目开发流程&项目架构 1. 软件开发的一般流程 1. 需求分析及确认: 由需求分析工程师与客户确认甚至挖掘需求.输出需求说明文档. 2. 概要设计及详细设计: 开发对需求进行概要设计,包 ...
- IT项目开发流程
项目开发流程: 一.需求分析:相关系统分析员向用户初步了解需求,然后用相关的工具软件列出要开发的系统的大功能模块,每个大功能模块有哪些小功能模块,对于有些需求比较明确相关的界面时,在这一步里面可以初步 ...
- Python基础之模块:7、项目开发流程和项目需求分析及软件开发目录
一.项目开发流程 1.项目需求分析 明确项目具体功能: 明确到底要写什么东西,实现什么功能,在这个阶段的具体要询问项目经理和客户的需求 参与人员: 产品经理.架构师.开发经理 技术人员主要职责: 引导 ...
- 使用.NET MVC框架项目开发流程(项目开发流程)
MVC项目开发流程 整理需求,进行需求分析.项目设计. 整理数据项,建数据库做前期准备,并整理字典. 建立所需数据库表和视图和模型. 页面实现其初步功能(跳过逻辑后台代码),只是实现页面之间的跳转以及 ...
- K2项目开发流程
(自己的学习资料) K2项目开发流程: 1.在VS2013中设计流程,并在K2 Workspce中测试流程 首先是新建新建一个k2的Process文件..kprx后缀. 在里面创建所需要的流程.由于我 ...
- 覃超:Facebook的项目开发流程和工程师的绩效管理机制
覃超:Facebook的项目开发流程和工程师的绩效管理机制 http://mp.weixin.qq.com/s?__biz=MjM5MDE0Mjc4MA==&mid=2650992350&am ...
- 小D课堂-SpringBoot 2.x微信支付在线教育网站项目实战_1-2.中大型公司里面项目开发流程讲解
笔记 2.中大型公司里面项目开发流程讲解 简介:讲解一个项目如何从零到上线,经历过怎样的步骤和流程 1.一个中大型项目的开发流程,从需求调研到项目上线 ...
随机推荐
- matlab实现可调节占空比的方波
我大概讲一下实现的原理:正弦波移相φ,当使得大于sin(φ)的值为1,其他值为-1,占空比就跟这个φ值之间有联系. 占空比原理图如下所示. 结果上图,可以实现调节占空比,方波频率,方波个数. 下面是函 ...
- ASP.NET自定义模块
要创建自定义模块,类需要实现IHttpModule接口.这个接口定义了Init和Dispose方法. Init方法在启动Web应用程序时调用,其参数的类型是HttpContext,可以添加应用程序处理 ...
- 非负矩阵分解(4):NMF算法和聚类算法的联系与区别
作者:桂. 时间:2017-04-14 06:22:26 链接:http://www.cnblogs.com/xingshansi/p/6685811.html 声明:欢迎被转载,不过记得注明出处 ...
- 你的计算机也可以看懂世界——十分钟跑起卷积神经网络(Windows+CPU)
众所周知,如果你想研究Deep Learning,那么比较常用的配置是Linux+GPU,不过现在很多非计算机专业的同学有时也会想采用Deep Learning方法来完成一些工作,那么Linux+GP ...
- Html 经典布局(三)
经典布局案例(三): <!DOCTYPE html> <html lang="en"> <head> <meta charset=&quo ...
- 解决Tomcat: Can't load IA 32-bit .dll on a AMD 64-bit platform 问题
错误如下: java.lang.UnsatisfiedLinkError: E:\Program Files\MyEclipse 10\apache-tomcat-7.0.23\bin\tcnativ ...
- 【HDOJ 1086】 模板水过
You can Solve a Geometry Problem too Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/3 ...
- Elasticsearch搜索之explain评分分析
Lucene的IndexSearcher提供一个explain方法,能够解释Document的Score是怎么得来的,具体每一部分的得分都可以详细地打印出来.这里用一个中文实例来纯手工验算一遍Luce ...
- 线段树区间更新操作及Lazy思想(详解)
此题题意很好懂: 给你N个数,Q个操作,操作有两种,‘Q a b ’是询问a~b这段数的和,‘C a b c’是把a~b这段数都加上c. 需要用到线段树的,update:成段增减,query:区间求 ...
- 【算法系列学习】线段树vs树状数组 单点修改,区间查询 [kuangbin带你飞]专题七 线段树 A - 敌兵布阵
https://vjudge.net/contest/66989#problem/A 单点修改,区间查询 方法一:线段树 http://www.cnblogs.com/kuangbin/archive ...