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.一个中大型项目的开发流程,从需求调研到项目上线 ...
随机推荐
- Spring基础学习(五)—事务管理
一.事务基本认识 1.事务的概述 为了保证数据库中数据的一致性,数据的操作应当是离散的成组的逻辑单元.当它全部完成时,数据的一致性可以保持,而当这个单元中的一部分操作失败,整个事务应当全部视 ...
- Android IPC机制全解析<二>
在AIDL文件中并不是所有的数据类型都可以使用,AIDL支持的数据类型如下: 基本数据类型(int.long.char.boolean.double等) String和CharSequence Lis ...
- 核心J2EE模式 - 截取过滤器
核心J2EE模式 - 截取过滤器 背景 呈现层请求处理机制接收许多不同类型的请求,这些请求需要不同类型的处理.一些请求被简单转发到适当的处理程序组件,而其他请求必须在进一步处理之前进行修改,审核或未压 ...
- 500. Keyboard Row
Given a List of words, return the words that can be typed using letters of alphabet on only one row' ...
- node-webkit学习之【无边框窗口用JS实现拖动改变大小等】
效果如下图 原生的如下图(原生的用在自己的app上面太丑了,并且还带边框,所以重写了左上角的三个功能键) 1.首先了解一下nw底下的package.json 文件 { "name" ...
- 使用Block传值
使用Block的地方很多,其中传值只是其中的一小部分,下面介绍Block在两个界面之间的传值: 先说一下思想: 首先,创建两个视图控制器,在第一个视图控制器中创建一个UILabel和一个UIButto ...
- this web application instance has been stopped already.
this web application instance has been stopped already. Could not load oracle/sql/converter_xcharset ...
- Array和ArrayCollection作为数据源的一个应用区别
在不用[Enabled]元标签的前提下,将一个Array赋值给DataGrid.DataList等控件的DataProvider后,当Array值发生改变时,控件显示内容不会及时更新(可调用控件的in ...
- 2017/4/26-DOM解析XML文件
DOM解析XML 1.分析 DOM是JAVA自带的XML解析API.DOM首先将XML文件全部加载至内存中,然后再内存中创建DOM树,生成DOM树上的每个Node节点. 2.优点 1) 可以创建或修改 ...
- 规范模式-------From ABP Document
介绍 规范模式是一种特定的软件设计模式,通过使用布尔逻辑 (维基百科)将业务规则链接在一起,可以重新组合业务规则. 在实际中,它主要用于 为实体或其他业务对象定义可重用的过滤器. 例 在本节中,我们将 ...