c语言分层编程,模块化编程的分层设计经验

模块化编程的分层设计经验

操作要点:

1、每一层直接对下一层操作,尽量避免交叉调用或越级调用

2、某些器件会把硬件驱动层合并成一个文件时,则归于较高的层

3、相同功能的外部函数尽量一致,尽量保证通用性

4、对于初次编程的模块,要严格保证中间各层的正确性

好处:

1、对于后期维护扩展,只需修改应用层和物理层,根据需要扩展功能层

2、一个新项目只需把要用到的文件加入工程,简单修改调试就出来了

3、随着模块的不断积累,新的项目将越来越容易完成,后期的维护扩展也变得非常简单了

4、对于C语言编程,只需简单修改物理层就可完成不同单片机间的移植

呵呵,一些经验,大家有好的想法可以继续补充指正

一般分为以下几层:

---应用层--面向用户

软|     ↓

件|---协议层--现成的协议栈、软件包、标准库,大多是移植,不自己写,如FAT、TCPIP、OS、GAME等

相|     ↓

关|     ↓

---功能层--实现器件无关性,实现器件的各种功能扩展和器件通用性处理,如LCD的线、圆、矩形等功能,如EEPROM的块写,自己的print

硬|     ↓

件|---器件层--实现硬件无关性,保证IO无关性,只提供器件的基本功能,如字节读写、点

驱|     ↓

动 ---物理层--IO相关,直接操作硬件,实现硬件连接的多种方案

对应文件举例1:

---应用层--面向用户的主程序

软|     ↓

件|---协议层--如FAT、TCPIP、OS等现成的协议栈、算法、游戏等

相|     ↓

关|     ↓

---功能层--如文件lcd.c;led.c;eeprom.c;time.c;ir.c;keybord.c;harddisk.c;引出LCD的线、圆、矩形、填充等功能

硬|     ↓             ↓

件|---器件层--文件lcd61202.c;lcd1520.c;lcd6963.c;lcd133x.c;lcd44780.c;lcd162x.c;lcd856x.c或者lcd1602.c;lcd12864.c;lcd320240.c等,引出基本的初始化、定位、写点、写字节函数

驱|     ↓             ↓

动 ---物理层--文件lcd61202_io.c;lcd61202_bus.c;引出器件的基本读写函数

对应文件应用举例2:

---应用层--面向用户的主程序

软|     ↓

件|---协议层--如FAT、TCPIP、OS等现成的协议栈、算法、游戏等

相|     ↓

关|     ↓

---功能层--如文件lcd.c;led.c;eeprom.c;time.c;ir.c;keybord.c;harddisk.c;如EEPROM的块写统一化

硬|     ↓                         ↓

件|---器件层--文件ee24xx.c;ee93xx.c;ee_sdcard.c;ee29xx.c;ee28f.c;ee39xx.c;等

驱|     ↓             ↓

动 ---物理层--文件bus_i2c.c;bus_spi.c等

一个大的单片机程序往往包含很多模块,我是这样组织的

1。每一个C源文件都要建立一个与之名字一样的H文件,里面仅仅包括该C文件的函数的声明,其他的什么也

不会有,比如变量的定义啊等等不应该有。

2。建立一个所有的文件都要共同使用的头文件,里面当然就是单片机的管脚使用的定义,还有里面放那些需

要的KEIL系统的头文件,比如 #include,#include等等,把这个文件命名为common.h,

或者干脆就叫main.h

3,每个C源文件应该包含自己的头文件以及那个共同的使用的头文件,里面还放自己本文件内部使用的全局

变量或者以extern定义的全局变量

4。主文件main.c里面包含所有的头文件包括那个共同使用的文件,main.c里面的函数可以再做一个头文件,

也可以直接放在文件的开头部分声明就可以了,里面一般还有中断服务程序也放在main.c里面

5。对于那些贯穿整个工程的变量,可以放在那个共同的使用的头文件里面,也可以用extern关键字在某

个C源文件里面定义,哪个文件要使用就重复定义一下

6.建立工程的时候,只要把C源文件加到工程中,把H文件直接放到相应的目录下面就可以了,不需要加到工程里面。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
摘 要 该系统主要是介绍超市进销存管理信息系统的环境、功能作用、所用到的语言、设计 的方案等各方面的内容。主要是让使用者了解此系统,使他们能更好的运用本系统,使 此系统发挥出应有的作用。本系统运用计算机管理信息技术,对超市的进销存过程进行 详细的分析,实现了对超市的进货、出售和库存的科学管理。 本系统主要包括以下几大模块:输入单据:出库、入库、物品清单;查询:数量查询、 价格查询、生产地查询。 关键词 : 销售;管理信息系统;C语言 Abstract This text mainly introduces the supermarket and enters to sell such contents of various fields as the environment which stores the management information system , scheme on the function , language , design used ,etc.. Let user find out about system this , enable them fine application this system mainly, make this system give play to due function . This system uses the information technology of computer management,sell the course of storing to carry on detailed analysis to the entering of the supermarket, have realized the purchase , sale and scientific management held in store to the supermarket. This system is major and includes following several big modules : The input receipts : The warehouse is gone out to be put in storage that the product end product detailed list is inquired about : The report form being put in storage is gone out the report form product end product detailed list report form in warehouse to sell to move back the money list report form to advance. keywords : Sell ; management information system ;C language 目 录 1概述 1 1.1 设计思想 1 1.2 设计原则 1 1.3性能需求 1 2总体设计 2 2.1系统功能设计图 2 2.2系统功能设计 2 2.2.1 系统颜色模块功能 3 2.2.2 销售管理模块功能 3 2.2.3 进货管理模块功能 3 2.2.4 库存管理模块功能 3 2.3系统模块的运用方法 3 2.3.1输入记录模块 3 2.3.2查询记录模块 3 2.3.3输出记录模块 3 3详细设计使用 4 3.1数据定义 4 3.2主函数流程图 5 3.3源程序 7 4调试分析 8 4.1进入主界面 8 4.2 系统菜单界面 8 4.3 商品信息查询窗口 10 5总结 11 参考文献 12 致 谢 13 附件 14 1概述 1.1 设计思想 (1)系统分成几个相对独立的模块,但这些模块都进行集中式管理。 (2)分层模块化程序设计思想,整个系统采用模块化结构设计作为应用程序,有较 强的可操作性和扩展性。 (3)合理的数据设计,在应用系统设计中,相对独立的模块间以数据相互连接,使各 模块间的耦合性较低,方便系统运行,提高系统安全性 。 1.2 设计原则 为了使本系统功能齐全完备,操作简便,最大限度的提高软件的质量,从而满足用户 的实际需要,在设计开发过程中遵循了如下原则: (1)合法性原则:依据产品核算系统的工作规定以及要求,参照核算实际的工作情况 ,进行诸如产品进货、销售等工作。 (2)实用性原则:适合产品信息管理工作的实际需求,并能够处理一些特殊情况的要 求,此外,尽可能预留空间,以便扩充功能。 (3)准确性原则:对输入的相关资料建立检错机制,及时报错,使用户能够及时准确 的输入合法资料(如:类型匹配,长度不超限等)。
用c++/qt写的项目,可供自己学习,项目都经测试过,真实可靠,请放心使用。Qt支持 Windows、Linux/Unix、Mac OS X、Android、BlackBerry、QNX等多种平台,并为这些不同的平台提供了统一的开发环境。 面向对象 C++是完全面向对象的,这一点和Objective-c等在开发很相似。而Qt又是基于C++一种语言的扩展,大家都知道C++ 有快速、简易、面向对象等很多优点,所以Qt自然也继承者C++这些的优点。 Qt良好的封装机制使得Qt的模块化程度非常高,可重用性较好,对用户开发来货是非常方便的。Qt提供一种为signals/slots(信号和槽) 的安全类型来替代callback,使得各个元件之间的协同工作变得十分简单。 丰富的API Qt包括多达 250 个以上的 C++ 类,还提供基于模板的 collections, serialization, file, I/Odevice, directory management, date/time 类。甚至还包括正则表达式的处理功能。 支持 2D/3D 图形渲染,支持 OpenGL。 大量的开发文档。 XML支持 Webkit 引擎的集成,可以实现本地界面与Web内容的无缝集成, 但是真正使得 Qt 在自由软件界的众多 Widgets (如 Lesstif,Gtk,EZWGL,Xforms,fltk 等等)中脱颖而出的还是基于 Qt 的重量级软件 KDE。 信号和槽机制 Qt提供了信号和槽机制用于完成见面操作的响应,是完成任意两个Qt对象之通信机制。其中,信号会在某个特定情况或动作下被触动,槽是等同于接受并处理信号的函数。 为什么方法不是直接调用的。中间用到 Signal 和槽机制不是多此一举? 其实在我们生活也是一样,老板级别的好说话,老板给助理分派任务也好说话,但是助理给老板分任务,可想而知会有什么后果,在以前的统治阶层肯定不允许这样的事发生。所以在分层思想中,我们所调用的函数也是这样的,上层可以调用下层和同一层的函数,下层函数不可以调用上层函数,否则程序的层次性会被打破,导致结构错综复杂,难以维护和管理。 那么怎样才能做到向上管理呢,有任务分配给老板怎么办? 老板会设立一个机构,也就是一个函数,用无限循环来查询助理的状态,如果助理真的有事情,这个机构就把这消息拿到老板来处理。但是这种处理方式显得有些复杂,我们想要的简单明了的方式是,如果助理有事件发生,可以直接调用老板函数处理。 说了这么多其实就是想说,信号和槽的最大优势在于,它完善了程序分层的思想,可以在不改变程序的层次性的情况下,完成由下层到上层的调用。在下层发出一个 Signal,这时上层与其想关联的 Slot 函数就会响应。
用c++/qt写的项目,可供自己学习,项目都经测试过,真实可靠,请放心使用。Qt支持 Windows、Linux/Unix、Mac OS X、Android、BlackBerry、QNX等多种平台,并为这些不同的平台提供了统一的开发环境。 面向对象 C++是完全面向对象的,这一点和Objective-c等在开发很相似。而Qt又是基于C++一种语言的扩展,大家都知道C++ 有快速、简易、面向对象等很多优点,所以Qt自然也继承者C++这些的优点。 Qt良好的封装机制使得Qt的模块化程度非常高,可重用性较好,对用户开发来货是非常方便的。Qt提供一种为signals/slots(信号和槽) 的安全类型来替代callback,使得各个元件之间的协同工作变得十分简单。 丰富的API Qt包括多达 250 个以上的 C++ 类,还提供基于模板的 collections, serialization, file, I/Odevice, directory management, date/time 类。甚至还包括正则表达式的处理功能。 支持 2D/3D 图形渲染,支持 OpenGL。 大量的开发文档。 XML支持 Webkit 引擎的集成,可以实现本地界面与Web内容的无缝集成, 但是真正使得 Qt 在自由软件界的众多 Widgets (如 Lesstif,Gtk,EZWGL,Xforms,fltk 等等)中脱颖而出的还是基于 Qt 的重量级软件 KDE。 信号和槽机制 Qt提供了信号和槽机制用于完成见面操作的响应,是完成任意两个Qt对象之通信机制。其中,信号会在某个特定情况或动作下被触动,槽是等同于接受并处理信号的函数。 为什么方法不是直接调用的。中间用到 Signal 和槽机制不是多此一举? 其实在我们生活也是一样,老板级别的好说话,老板给助理分派任务也好说话,但是助理给老板分任务,可想而知会有什么后果,在以前的统治阶层肯定不允许这样的事发生。所以在分层思想中,我们所调用的函数也是这样的,上层可以调用下层和同一层的函数,下层函数不可以调用上层函数,否则程序的层次性会被打破,导致结构错综复杂,难以维护和管理。 那么怎样才能做到向上管理呢,有任务分配给老板怎么办? 老板会设立一个机构,也就是一个函数,用无限循环来查询助理的状态,如果助理真的有事情,这个机构就把这消息拿到老板来处理。但是这种处理方式显得有些复杂,我们想要的简单明了的方式是,如果助理有事件发生,可以直接调用老板函数处理。 说了这么多其实就是想说,信号和槽的最大优势在于,它完善了程序分层的思想,可以在不改变程序的层次性的情况下,完成由下层到上层的调用。在下层发出一个 Signal,这时上层与其想关联的 Slot 函数就会响应。
编译原理是计算机专业的一门核心课程,旨在介绍编译程序构造的一般原理和基本方法。编译原理不仅是计算机科学理论的重要组成部分,也是实现高效、可靠的计算机程序设计的关键。本文将对编译原理的基本概念、发展历程、主要内容和实际应用进行详细介绍编译原理是计算机专业的一门核心课程,旨在介绍编译程序构造的一般原理和基本方法。编译原理不仅是计算机科学理论的重要组成部分,也是实现高效、可靠的计算机程序设计的关键。本文将对编译原理的基本概念、发展历程、主要内容和实际应用进行详细介绍编译原理是计算机专业的一门核心课程,旨在介绍编译程序构造的一般原理和基本方法。编译原理不仅是计算机科学理论的重要组成部分,也是实现高效、可靠的计算机程序设计的关键。本文将对编译原理的基本概念、发展历程、主要内容和实际应用进行详细介绍编译原理是计算机专业的一门核心课程,旨在介绍编译程序构造的一般原理和基本方法。编译原理不仅是计算机科学理论的重要组成部分,也是实现高效、可靠的计算机程序设计的关键。本文将对编译原理的基本概念、发展历程、主要内容和实际应用进行详细介绍编译原理是计算机专业的一门核心课程,旨在介绍编译程序构造的一般原理和基本

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值