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.一个中大型项目的开发流程,从需求调研到项目上线 ...
随机推荐
- PIC32MZ Live update bootloader
PIC32MZ 的 flash memory 支持live update, 这是个全新的特性,在之前的所有PIC不管是8位还是16位的单片机上面都没有这个特性.我写过很多PIC 8位和16位单片机的b ...
- c#FTP操作类,包含上传,下载,删除,获取FTP文件列表文件夹等Hhelp类
有些时间没发表文章了,之前用到过,这是我总结出来关于ftp相关操作一些方法,网上也有很多,但是没有那么全面,我的这些仅供参考和借鉴,希望能够帮助到大家,代码和相关引用我都复制粘贴出来了,希望大家喜欢 ...
- 【G】开源的分布式部署解决方案文档 - 部署Console & 控制负载均衡 & 跳转持续集成控制台
G.系列导航 [G]开源的分布式部署解决方案 - 导航 设置项目部署流程 项目类型:选择Console,这个跟功能无关,只是做项目分类,后面会有后续功能 宿主:选择Console 部署方式:选择原始, ...
- Object类型知识总结,你掌握了多少?
Object类型 ECMAScript中的对象其实就是一组数据和功能的集合.对象可以通过执行new操作符后跟要创建的对象类型的名称来创建.而创建Object类型的实例并为其添加属性和(或)方 ...
- seajs加载angularjs
angularjs是自动完成模块的控制的,而seajs加载模块是异步的,所以不做修改,直接seajs加载angularjs会出错. 在这里讲下自己的解决方法 一.需要把ng-ap ...
- Python之路- 反射&定制自己的数据类型
一.isinstance和issubclass isinstance(obj,cls)检查是否obj是否是类 cls 的对象 issubclass(sub, super)检查sub类是否是 super ...
- 开始奇妙的DP之旅
铭记各位大佬教导,开始看一些很迷的动态规划,那就从比较典型的01背包开始吧,想想还是从比较简单的导弹拦截开始吧,说简单都是骗人的,还是看采药吧. 一.动态规划 刚听到动态规划这个东西,据HLT大佬所言 ...
- Activiti引擎启动失败
今天部署项目测试时发现activiti启动失败,研究了会才把问题解决!! 错误信息:SEVERE: problem during schema create, statement create seq ...
- <java>枚举的简单介绍
1.枚举,enum关键字,相当于public final static. 2.举例: 首先定义了一个名为spiciness的枚举类型. public enum Spiciness { NOT, MIL ...
- poj1410计算几何线段相交
You are to write a program that has to decide whether a given line segment intersects a given rectan ...