mp3播放系统毕业设计

上传人:1888****888 文档编号:38555553 上传时间:2021-11-08 格式:DOC 页数:39 大小:1.52MB
收藏 版权申诉 举报 下载
mp3播放系统毕业设计_第1页
第1页 / 共39页
mp3播放系统毕业设计_第2页
第2页 / 共39页
mp3播放系统毕业设计_第3页
第3页 / 共39页
资源描述:

《mp3播放系统毕业设计》由会员分享,可在线阅读,更多相关《mp3播放系统毕业设计(39页珍藏版)》请在装配图网上搜索。

1、 设计题目: 基于 arm-linux 的 mp3 播放系统 学 院: 计算机与信息学院 专业年级: 2008 级电子信息工程 学 号: 081151077 学生姓名: 陈立臣 指导教师、职称: 罗超助教 2011 年 5 月 10 日The newsstand management system College: Computer and Information Science Specialty and Grade: Electronic Information Engineering, 2007 Number: 081151077 Name: ChenLichen Advisor: As

2、sistant Professor LuoChao Submitted Time: May 10,2012 I目目 录录摘要.IAbstract .II1 引言.- 1 -1.1 目的和意义 .- 1 -1.2 研究现状 .- 1 -1.3 课题研究的内容及目标 .- 1 -2 二次开发平台的构建.- 3 -2.1 开发平台介绍 .- 3 -2.2 XDK2 使用指南.- 13 - 2.2.1 运行环境.- 13 2.2.2 终端概述.- 13 2.2.3XDK2 的安装- 13 3 基于 MiniGUI 用户界面设计.-16 -3.1 嵌入式 MiniGUI 介绍 .-16 -3.2 用户界

3、面设计 .-16 -3.2.1 菜单级别.- 16 -4 报刊亭数据库管理.- 21 -4.1 SQLite 介绍.- 21 -4.2 数据结构跟数据库操作函数封装 .- 22 -5 终端与平台的数据通信.- 25 -5.1 HTTP 协议介绍 .- 25 -5.2 平台与终端的通信的编程实现 .- 27 -6 结束语.-32 -参考文献参考文献.-33 -致谢致谢.-34 -福建农林大学本科毕业设计说明书I摘要摘要随着报刊亭在各个城市迅速发展,极大的方便了现代人们对于报刊购买的需求,通过报刊亭人们可以更加便利的购买到书籍和报刊。但是,传统的报刊亭的人工管理报刊进销存业务,由于报刊进销存管理工

4、作量大,易出错,已经不能满足人们日益增长的需求。因此,报刊亭的智能化管理系统对于报刊亭管理人员进行对报刊进销存业务管理具有十分重要的意义,极大地提高工作效率。本文设计并实现了基于 XDK2 二次开发平台的报刊管理系统。针对本课题所采用二次开发平台,详细介绍了 XDK2 开发平台的使用指南,接着在终端实现基于MiniGUI 的系统用户界面的设计,数据库的创建和操作,最后介绍了终端与平台通讯协议,最后根据通讯协议,实现平台与终端的通信。报刊管理系统采用了 MiniGUI 作为管理系统的图形用户界面支持系统,数据库则采用 SQLite,应用程序完全基于插件的形式实现,具有高度的灵活和可配置性。用户可

5、以很方便的通过配置,设置需要实现的各个插件以及相应功能,有利于功能扩展。 关键词:关键词:MiniGUI;二次开发;XDK2;嵌入式系统福建农林大学本科毕业设计说明书IIAbstractWith the rapid development of the newsstands located in different cities,they brings great convenience to the modern people for purchasing the newspaper. people can be more convenient to buy the newspaper an

6、d books through the newsstands .However, the traditional artificial management of the newsstand invoicing needs so much workload and is prone to errors.It can not meet the growing needs of people.Therefore,the newsstands intelligent management system has the very vital significance for the people to

7、 manage the newsstandss invoicing and can improve the work efficiency.This paper designed and realized the newsstand management system based on the XDK2 second development software system. According to the second development platform I adopted in the topic,I particluarly introduce the development pl

8、atforms user manual, then I realize the design of user interface on the terminal based on MiniGUI and the creation and operation. At last, the paper introduces the communication protocol between terminal and platform .According to communication protocol, I realize the communication between the platf

9、orm and the terminal.The newsstand management system uses the MiniGUI as the the graphical user interface support system, and the database used the SQLite.The applications are completely based on the form of the plugin ,so it have a high degree of flexibility and can be easily configured. The users

10、can easily make the configurations and set the need to implement various plug-ins and the corresponding functions, benefiting to function expansion.Keywords : MiniGUI; Secondary development; XDK2;Embedded system 福建农林大学本科毕业设计说明书- 1 -1 引言引言1.1 目的和意义目的和意义近几年来,报刊亭在各个城市遍地开花,已成为城市的公共设施,极大的满足了现代社会对于报刊的购买需求

11、。传统的报刊亭采用人工管理报刊进销存业务,工作量大,易出错,极大的限制了报刊书籍零售的发展,已不能完全满足现代信息社会的需要,人们对报刊亭采用智能化和信息化管理产生了需求,针对现状开发了本系统。本系统是采用嵌入式系统作为开发终端进行的二次软件开发,采用 MiniGUI 作为本系统的图形用户界面支持系统,数据库采用SQLite3。嵌入式系统是指以应用为中心,以计算机技术为基础,软硬件可以剪裁,对功能,可靠性,成本,体积和功耗有严格要求的专用计算机系统1。通过在终端进行软件二次开发实现本系统的功能,能很好满足报刊亭管理人员对于书籍和报刊的管理,有效的提高效率。1.2 研究现状研究现状MiniGUI

12、 是由北京飞漫软件技术有限公司创办的开源 Linux 图形用户界面支持系统,经过近些年的发展,MiniGUI 已经发展成为比较成熟的性能优良的、功能丰富的跨操作系统的嵌入式图形界面支持系统。它目前已经广泛应用于通讯、医疗、工控、电子、机顶盒、多媒体等领域。SQLite,是一款轻型的数据库,是遵守 ACID 的关联式数据库管理系统,它的设计目标是嵌入式的,而且目前已经在很多嵌入式产品中使用了它,它占用资源非常的低,在嵌入式设备中,可能只需要几百 K 的内存就够了。它能够支持 Windows/Linux/Unix 等等主流的操作系统,同时能够跟很多程序语言相结合,比如 Tcl、C#、PHP、Jav

13、a 等,还有 ODBC 接口,同样比起 Mysql、PostgreSQL这两款开源世界著名的数据库管理系统来讲,它的处理速度比他们都快。1.3 课题研究的内容及目标课题研究的内容及目标1) 课题研究内容(1) XDK2 二次开发平台的搭建;(2) 基于 MiniGUI 的图形用户界面设计;(3) SQLite 数据库常用操作函数封装;(4) 终端与平台通信的实现;2) 课题研究目标福建农林大学本科毕业设计说明书- 2 -实现报刊管理系统,有效管理进销存业务,即用户可以通过本系统进行报刊的零售结算,并能查询销售记录,并通过与平台的通信实现报刊的进货请求,实现进货功能,并能通过本系统对于报刊亭存货

14、的统计与查找。福建农林大学本科毕业设计说明书- 3 -2 二次开发平台的构建二次开发平台的构建2.1 开发开发平台介绍平台介绍XDK2,是福建实达电脑设备有限公司开发的针对某些终端产品在 Windows 平台下的二次开发软件。它作为一个插件,集成于 Visual Studio 2008,结合 Visual Studio 2008 强大的 IDE 编程环境,提供了应用程序向导模板、工程设置、终端程序编译、程序下载以及应用程序模拟器等功能,为开发终端产品应用程序提供了一个高效、易用的二次开发平台,大大缩短了开发周期和难度。1) 程序结构XDK 的程序结构包括三个主要部分:附加库,插件库和应用程序。

15、XDK 生成的应用程序,完全基于插件的形式实现。使用插件的好处在于高度灵活和可配置性。用户可以很方便的通过配置,设置需要实现的各个插件以及相应功能。实质上,XDK 提供的二次开发功能,即是用户可以自行编写其中的一个功能插件。 2) 主要程序库介绍(1) LibCommon LibCommon 公用函数库。Common 将系统需要的常用函数,内码转换等接口统一到 Common库中。主要包含有以下几个功能。 编码转换:Base64, Unicode 编码转换,MD5 加密算法实现。 压缩解压:Zip 压缩,解压算法实现。 XML 解析:TinyXML 进行 XMLDom 解析。 其他杂项:字符串处

16、理,链表处理,文件操作,ini 操作等相关使用函数。 (2) OSLayer OSLayer,系统适配层。将系统相关的函数进行封装后调用。 提供的接口有以下几个方面: Semaphore 相关接口:信号量封装实现 Event 相关接口:系统事件接口的实现。 Thread 相关接口:线程相关接口封装。 Timer 相关接口:定时器相关接口。 福建农林大学本科毕业设计说明书- 4 -Mutex 相关接口:信号互斥锁实现。 Trace 模块:对程序的调试信息可以过滤,并设置优先级后,按需输出。 (3) LibNet Sock 相关接口:对 TCP 端口的打开,关闭,发送,接收数据等接口进行了二次封装

17、。 PPP 相关接口:建立 PPP 连接相关操作接口3) 程序插件架构LINUX 的程序很大程度上依赖插件实现功能。有了插件功能,给予了 LINUX 应用程序高度的灵活和可扩展性。新功能的添加不需要编译整个应用程序。只需添加入相应的功能插件即可。插件模块通过插件加载器加载插件,并从插件中获取插件信息。一般在插件加载的初始化工作中,还会向服务管理器注册服务接口,并提供给插件模块获取。 要将插件配置进应用程序,首先配置插件配置文件 addins_conf.ini。 插件配置文件结构: AddIns modules=插件一,插件二 插件一 name=插件名称 command=插件模块 插件参数一 d

18、esc=插件描述 depends=依赖插件一 依赖插件二 state=插件状态 0/1 一个配置文件的例子如下:AddIns modules=MainMenu,AddIns2 MainMenu name=菜单插件 福建农林大学本科毕业设计说明书- 5 -command=MainMenu.dll desc=提供菜单的创建等功能 depend= state=1 AddIns2 name=插件示例二 command=Modules.dll desc=插件示例二,用于检验及演示插件系统的插件集成方案的可行性 depend= state=enable插件程序加载和获取接口代码示例: 下面以 XDK 的

19、modules 示例程序为例,首先需要继承 IPlugin 类,并派生出继承类。主要继承 OnLoad,OnUnLoad,GetDllVer 三个虚函数,给插件模块加载调用。 在实例化插件类的时候,需要注意一点:新的插件类的类名,尽量避免重复,不同插件间重复的类名,有可能造成插件载入出错的情况。TestPlugin.hpp class CTestPlugin: public IPlugin public: virtual int APICC OnLoad(int nArgc, char * ppcArgv); virtual int APICC OnUnLoad(); virtual int

20、APICC GetDllVer(); ;将类实例化后,需要实现接口 GetInterface。这个接口是插件模块找到插件实例化类的桥梁。福建农林大学本科毕业设计说明书- 6 -通过这个借口,将实例化之后的接口类指针传给插件模块。实现代码如下: extern C DLL_API IRoot * APICC GetInterface(char* pcInterfaceName) if (strcmp(pcInterfaceName, IPlugin) = 0) return new CTestPlugin; return NULL; OnLoad 函数主要负责实现首页显示插件加载信息,注册服务池接

21、口,主菜单,暗码等工作。具体的代码将在后面的章节讲述。4) 服务池服务池实质上是一个服务链表,为其他插件提供添加服务及获取服务的接口,服务池是插件与系统,插件与插件之间交互的一个中间站,各插件既可以从这里获取其他插件的服务,也可以通过这里为其他插件提供服务。服务池使用示例: 注册服务接口。 IServicePool * piServicePool = (IServicePool *)OSL_GetServicePool(); piServicePool-AddService(AppFrame_IStartPage, new CStartPage(); 获取服务接口。 IServicePool

22、* piServicePool = (IServicePool *)OSL_GetServicePool(); IDesktop*piDesktop=(IDesktop*)piServicePool-GetService(AppFrame_IDesktop);5) MainMenu 插件MainMenu 插件创建和管理一个动态菜单树,这棵树可以动态的添加,删除,修改菜单项及子菜单树,每个子菜单也跟其父菜单具有同样的性质,即这是一棵级数不受限制的菜单树,可以根据用户的需要,随意的在菜单树中扩展菜单及子福建农林大学本科毕业设计说明书- 7 -菜单。菜单插件使用示例: /获取根菜单 HMAINMEN

23、U hRoot = piMainMenu-GetRootMenu(); /获取第一级子菜单 HMAINMENUITEM hMenuItem = piMainMenu-GetMenuItem(hRoot, MainMenu.MainMenu); /在第一级子菜单加入菜单项 piMainMenu-InsertItem2(hMenuItem, 100, TestMenuId, 测试菜单, CardManage.bmp, NULL); /获取 TestMenuId 二级子菜单 hMenuItem = piMainMenu-GetMenuItem(hRoot, TestMenuId); if ( hMe

24、nuItem != 0 ) /在 TestMenuId 二级子菜单加入菜单项 piMainMenu-InsertItem2(hMenuItem, 0, List, 测试 1, ContactList.bmp, NULL); piMainMenu-InsertItem2(hMenuItem, 1, Find, 测试 2, ContactFind.bmp, NULL); piMainMenu-InsertItem2(hMenuItem, 2, Add, 测试 3, ContactAdd.bmp, NULL); piMainMenu-InsertItem2(hMenuItem, 3, Del, 测试

25、 4, ContactDele.bmp, NULL); piMainMenu-InsertItem2(hMenuItem, 4, Group, 测试 5, ContactGroup.bmp, NULL); piMainMenu-InsertItem2(hMenuItem, 5, ShowStore, 测试 6, ContactSize.bmp, NULL); 福建农林大学本科毕业设计说明书- 8 -6) 插件初始化一个典型的插件初始化流程,即是将菜单注册,服务池注册和暗码注册等初始化工作合并的过程。实际上,也就是将以上章节所说的功能揉合起来罢了。 插件的功能,可以不仅限于嵌入菜单,进行可视化操

26、作的功能的添加。也可以不带任何操作的,没有任何界面提示,仅仅是建立一个线程,后台监控使用。在插件使用时,可以思路更加灵活一些。 结合实例程序,我们来看看,OnLoad 接口是如何实现初始化功能的。int CTestPlugin:OnLoad(int nArgc, char * ppcArgv) /获取服务池指针 IServicePool * piServicePool = (IServicePool *)OSL_GetServicePool(); /获取桌面组件指针 IDesktop * piDesktop = (IDesktop *)piServicePool-GetService(AppF

27、rame_IDesktop); /获取首页指针 IStartPage * piStartPage = (IStartPage *)piServicePool-GetService(AppFrame_IStartPage); /首页显示插件加载信息。 if ( piStartPage != NULL) piStartPage-SetTipTitle(工程测试); piStartPage-SetTipText(工程测试); /对桌面窗口注册过程函数 piDesktop-RegDialogProc(TestDesktopProc); if ( piServicePool != NULL) IMain

28、Menu *piMainMenu = (IMainMenu *)piServicePool-GetService(MAINMENU_IMainMenu); 福建农林大学本科毕业设计说明书- 9 - if ( piMainMenu != NULL) /获取根菜单 HMAINMENU hRoot = piMainMenu-GetRootMenu(); /获取第一级子菜单 HMAINMENUITEM hMenuItem = piMainMenu-GetMenuItem(hRoot, MainMenu.MainMenu); /在第一级子菜单加入菜单项 piMainMenu-InsertItem2(hM

29、enuItem, 100, TestMenuId,测试菜单,CM.bmp, NULL); /获取 TestMenuId 二级子菜单 hMenuItem = piMainMenu-GetMenuItem(hRoot, TestMenuId); if ( hMenuItem != 0 ) /在 TestMenuId 二级子菜单加入菜单项 piMainMenu-InsertItem2(hMenuItem, 0, List, 测试 1, CL.bmp, NULL); piMainMenu-InsertItem2(hMenuItem, 1, Find, 测试 2, CF.bmp, NULL); piMa

30、inMenu-InsertItem2(hMenuItem, 2, Add, 测试 3, CA.bmp, NULL); piMainMenu-InsertItem2(hMenuItem, 3, Del, 测试 4, CD.bmp, NULL); piMainMenu-InsertItem2(hMenuItem, 4, Group, 测试 5, CG.bmp, NULL); piMainMenu-InsertItem2(hMenuItem, 5, Show, 测试 6, CS.bmp, NULL); 福建农林大学本科毕业设计说明书- 10 - return 0; 7) 调用自己的动态组件库函数XD

31、K2 环境允许用户装载自定义组件库,支持模拟器和终端两种环境 创建自定义组件库 与普通的 XDK2 工程一样,可以通过工程向导来创建 只是在代码中需要加入接口定义的文件接口定义头文件:#ifndef _CLIBDYNAMICCTRL_HPP_#define _CLIBDYNAMICCTRL_HPP_#ifdef _cplusplusextern C #endif#include #include AppFrame/inc/af_idesktop.hpp#define LibDynamic_ILibCtrlLibDynamic.ILibCtrlclass ILibDynamicCtrl :pub

32、lic IRootpublic:virtual int APICC ToSayHello(HWND hParent) = 0;class CLibDynamicCtrl :public ILibDynamicCtrlpublic:virtual int APICC ToSayHello(HWND hParent);#ifdef _cplusplus#endif#endif /_CLIBXDKDEMOCTRL_HPP_实现接口文件:福建农林大学本科毕业设计说明书- 11 -#include CLibDynamicCtrl.hpp#include LibMiniGui_ExtincEXTC_Msg

33、Box.hextern int OpenHelloPage(HWND hParent);int APICC CLibDynamicCtrl:ToSayHello(HWND hParent)EXTC_MessageBoxEx(hParent, Hello,XdkDemo!, XdkDemo, MB_OK);return 1;在另一个主程序中,调用该动态组件库函数,方法如下:#include OSLayer/inc/OSL_Inc.h#include OSLayer/inc/OSL_ServicePool.hpp#include ././LibDynamic/inc/ClibDynamicCtrl

34、.hppstatic int Test2Fun(char *pcMenuId)ILibDynamicCtrl *piCtrl = (ILibDynamicCtrl*)OSL_GetService(LibDynamic_ILibCtrl);if (piCtrl)return piCtrl-ToSayHello(GetActiveWindow();return 0;同时需要对工程选项进行设置,加入自定义组件,指定其名称、描述、文件路径等图 2-1 自定义组件设置福建农林大学本科毕业设计说明书- 12 - 图 2-2 自定义组件设置确认无误后,dll/so 文件将被自动复制到主应用程序的 work

35、目录上,用于模拟器调试 在下载程序选项页中,必须选择“下载自定义组件”,否则将无法找到函数,导致加载失败。 图 2-3 下载程序设置福建农林大学本科毕业设计说明书- 13 -这样下载程序时,XDK2 将自动打包自定义组件文件,一起下载到终端上。2.2 XKD2 使用指南使用指南2.2.1 运行环境运行环境运行于 Microsoft Windows 系统平台,推荐 WindowsXP SP2/WIN7 (32 位) ,Cygwin for windows Sourcery G+ Lite for windows ,Visual Studio 2008 中文版2.2.2 终端概述终端概述终端使用嵌

36、入式 Linux 操作系统。Linux 内核版本 2.6.35,使用 GCC 编译,版本 4.3.3,内存 64M,128M NandFlash 存储数据。终端内置 TD-SCDMA/GPRS 模块,配备 USB 高速数据传输接口,通讯端口使用 RS-232 串行端口,可以连接金融 POS终端,IC 卡,RFID 卡,磁条卡等读卡设备主要技术参数如下表: 表 2-1 终端主要技术参数福建农林大学本科毕业设计说明书- 14 -2.2.3 XKD2 安装安装双击 setup.exe,根据向导提示进行安装即可,安装时,务必请关闭所有 Visual studio 2008 应用程序(IDE 环境)。安

37、装完成后,如图: 图 2-4 XKD2 工具栏运行 VS2008, ” 运行 VS2008, “文件”-“新建项目” 图 2-5 新建 XDK2 项目福建农林大学本科毕业设计说明书- 15 - 图 2-6 选择设备平台点击“完成”,生成工程。模拟器 解压工程目录上的 work.zip 文件,到 work 目录中。福建农林大学本科毕业设计说明书- 16 -3 基于基于 MiniGUI 用户界面设计用户界面设计3.1 嵌入式嵌入式 MiniGUI 介绍介绍6MiniGUI 是由北京飞漫软件技术有限公司主持的一个自由软件项目(遵循 GPL 条款),其目标是为基于 Linux 的实时嵌入式系统提供一个

38、轻量级的图形用户界面支持系统。 MiniGUI 为应用程序定义了一组轻量级的窗口和图形设备接口。利用这些接口,每个应用程序可以建立多个窗口,而且可以在这些窗口中绘制图形。用户也可以利用MiniGUI 建立菜单、按钮、列表框等常见的 GUI 元素。用户可以将 MiniGUI 配置成“MiniGUI-Threads”或者“MiniGUI-Lite。运行在 MiniGUI-Threads 上的程序可以在不同的线程中建立多个窗口,但所有的窗口在一个进程中运行。相反,运行在 MiniGUI-Lite 上的每个程序是单独的进程,每个进程也可以建立多个窗口。本章根据实际的应用需求,设计了报刊亭管理系统的界面

39、。 3.2 用户界面设计用户界面设计3.2.1 菜单级别菜单级别 表 3-1 菜单级别一级菜单一级菜单二级菜单二级菜单说明说明进货进货进入进货处理界面进入进货处理界面商品管理商品管理销售销售进入销售处理界面进入销售处理界面查询查询查询销售记录查询销售记录同步同步同步平台和终端商品信息同步平台和终端商品信息 返回返回返回返回返回上一级界面返回上一级界面菜单如下图:图 3-1 一级界面福建农林大学本科毕业设计说明书- 17 -图 3-2 二级界面相关代码如下:创建一级菜单:int CreateAppMainMenu(void)piMainMenu =(IMainMenu*)OSL_GetServi

40、ce(MAINMENU_IMainMenu);assert(piMainMenu != NULL);HMAINMENU hRoot = piMainMenu-GetRootMenu();hMenuItem=piMainMenu-GetMenuItem(hRoot,MainMenu.MainMenu;assert(hMenuItem != NULL);piMainMenu-InsertItem2(hMenuItem, 0, MenuSysItem6, 商品管理, PersonSet.bmp, NULL)Sale_Menu(MenuSysItem6); return 1;创建二级菜单:static

41、 int Sale_Menu(char * pcMenuId)hMenuItem=piMainMenu-GetMenuItem(piMainMenu-GetRootMenu(), pcMenuId);piMainMenu-InsertItem2(hMenuItem, 0, SaleMenuItem0, 进货, Suggest.bmp, bkt_shop_page_ent);piMainMenu-InsertItem2(hMenuItem, 1, SaleMenuItem1, 销售, SystemInfo.bmp, SMY_CreateMainMenu);piMainMenu-InsertIte

42、m2(hMenuItem, 2, SaleMenuItem2, 查询, FileManage.bmp, NULL);piMainMenu-InsertItem2(hMenuItem, 3, SaleMenuItem1, 同步, pic7.bmp, NULL);return 1;进货子菜单相关界面:福建农林大学本科毕业设计说明书- 18 - 图3-3 进货录入编辑界面 图3-4 进货列表 图3-5 货单操作销售子菜单相关界面:福建农林大学本科毕业设计说明书- 19 - 图3-6 销售录入编辑界面 图3-7 结算操作 图3-8 销售编辑界面查询子菜单相关界面:福建农林大学本科毕业设计说明书- 20

43、 -图 3-9 查询销售记录具体实现代码见附录代码:bkt_sale_page.cpp;bkt_shop_page.cpp;福建农林大学本科毕业设计说明书- 21 -4 报报刊刊亭亭数数据据库库管管理理4.1 SQLite 介绍介绍7SQLite 是一个很小的 C 语言链接库。这个链接库本身就完全包含数据库引擎的功能,而且可以嵌入至其它程序中,完全不用额外的设定。其特性如下:* 支持 ACID (Atomic, Consistent, Isolated, Durable) 交易。* 零组态设定(Zero-configuration),无须管理者的设定及管理。* 支持大部分 SQL92 的语法。

44、* 数据库存在于一个单一的文件中。* 数据库系统所在机器的字节顺序(Byte order)无关。* 支援大小至 2 TB (241 bytes)。* 极小的内存需求:小于 3 万行的 C 语言程序代码。小于 250KB 的程序空间。* 大部分的数据库操作皆快于一般流行的数据库系统。* 简单易用的 API。* 支援 TCL。也有其它语言的支持可用。* 注释详细的程序代码,以及超过 90%的测试。* 链接库自己包含完整的功能,无须其它额外的程序或链接库。* 程序代码版权为 public domain。任何用途皆可免费使用。该数据库人在效率上完全超越微软的 Access,即使是 MySQL 的速度也

45、不能和它相比,可以用在一般的单机版程序开发中,它的发布也非常简单,只需要带一个动态库即可,唯一美中不足的是它并不是强类型数据库,估计以后可能变成强类型数据库该数据库是纯 C 语言的代码,几乎可以在所有平台上运行,而且作者完全放弃版权,你可以在你的程序中自由使用它的代码而不必但心版权问题。 它的代码结构清晰,并带有详细的注释,只要有 C 语言基础的人都可以看懂,是学习编写数据库的很好参考资料!SQLite 的设计思想就是简单:1.简单的管理2.简单的操作3.简单的在程序中使用它4.简单的维护和客制化因为简单所以它快速, 但虽然简单, 却仍非常可靠. 适合 SQLite 的应用场所有, 网站,嵌入

46、式设备和应用, 应用程序文件格式, 代替特别的文件, 内部或临时数据库, 命令行数据集分析工具, 在演示或测试中代替企业级数据库, 数据库教学, 试验 SQL 语言扩展等. 但并不是所有都合适, 比如在使用 Server/Client 结构的时候,高负荷的网站,高并发等情况下并不建议使用 SQLite.SQLite SQL SQLite 的 SQL 从很大程度上实现了 ANSI SQL92 标准. 特别的 SQLite 支持视图, 触发器, 事务, 支持嵌套 SQL. 这些都会在下面应用的过程中讲到, 故这边先暂时放下, 而主要说说 SQLite 所不支持的一些 SQL.福建农林大学本科毕业设

47、计说明书- 22 -1.不支持 Exists, 虽然支持 in(in 是 Exists 的一种情况)2.不支持多数据库, 如: create table db1.table1 as select * from db2.table1;3.不支持存储过程4.不支持 Alter View/Trigger/Table5.不支持 Truncate, 在 SQLite 中 Delete 不带 Where 字句时和 Truncate 的效果是一样的.6.不支持 Floor 和 Ceiling 函数, 还有其他蛮多的函数7.没有 Auto Increment(自增)字段, 但是 SQLite 其实是支持 Au

48、to Increment 的, 即在将该字段设置为” INTEGER PRIMARY KEY”的时候.8.不支持 If Exists详细的 SQL 支持可以访问: http:/www.sqlite.org/lang.htm详细的不支持 SQL 可以访问: http:/www.sqlite.org/cvstrac/wiki?p=UnsupportedSqlSQLite 的数据类型首先你会接触到一个让你惊讶的名词: Typelessness(无类型). 对! SQLite 是无类型的. 这意味着你可以保存任何类型的数据到你所想要保存的任何表的任何列中, 无论这列声明的数据类型是什么(只有在一种情况

49、下不是, 稍后解释). 对于 SQLite 来说对字段不指定类型是完全有效的. 如:Create Table ex1(a, b, c);诚然 SQLite 允许忽略数据类型, 但是仍然建议在你的 Create Table 语句中指定数据类型. 因为数据类型对于你和其他的程序员交流, 或者你准备换掉你的数据库引擎. SQLite 支持常见的数据类型, 如:CREATE TABLE ex2(a VARCHAR(10),b NVARCHAR(15),c TEXT,d INTEGER,e FLOAT,f BOOLEAN,g CLOB,h BLOB,i TIMESTAMP,j NUMERIC(10,5)

50、k VARYING CHARACTER (24),l NATIONAL VARYING CHARACTER(16);4.2 数据结构跟数据库操作函数封装数据结构跟数据库操作函数封装主要数据结构:typedef struct BKXSB_Cint n_ddh;/销售单号int n_xh;/销售单内序号char d_dateBKT_DATE_LEN;/销售日期char v_yBKT_V_Y_LEN;/员工char v_bkdhBKT_V_BKDH_LEN; /报刊代号福建农林大学本科毕业设计说明书- 23 -char v_bkmcBKT_V_BKMC;/报刊名称char v_qbBKT_V_QB;

51、/期别float f_jj;/书面价float f_zk;/折扣float f_xsj;/销售单价int sl;/销售数量float f_xjje;/销售小计BKXSB_C;typedef struct BKMLB_Cchar v_bkdhBKT_V_BKDH_LEN;char v_bkmcBKT_V_BKMC;char v_qbBKT_V_QB;float f_zk;float f_xsj;BKMLB_C;typedef struct BKKCB_Cchar v_bkdhBKT_V_BKDH_LEN; /报刊代号int sl; /库存量BKKCB_C;typedef struct BKJHB

52、_Cint n_ddh;/销售单号int n_xh;/销售单内序号char d_dateBKT_DATE_LEN;/销售日期char v_yBKT_V_Y_LEN;/员工char v_bkdhBKT_V_BKDH_LEN; /报刊代号char v_bkmcBKT_V_BKMC;/报刊名称char v_qbBKT_V_QB;/期别float f_jj;/书面价float f_zk;/折扣float f_xsj;/销售单价int sl;/销售数量float f_xjje;/销售小计BKJHB_C;数据库名称为bkt_sqlite 的数据库放在工程目录下的work/data,包含四个表格:BKJHB

53、_C;BKKCB_C;BKMLB_C;BKXSB_C;福建农林大学本科毕业设计说明书- 24 -相关函数封装如下:int sqlite_query_integer(sqlite3 *hdb, const char *sql, .);int bkt_get_count_by_bkdh(const char *pc_bkdh);int bkmlb_read_info_by_bkdh(BKMLB_C *st_bkmlb, const char *pc_bkdh);BOOL bkt_insert_to_bkxsb(BKXSB_C *pstBkxsb);int bkxsb_select_max_nddh

54、(int &ddh);int bkxsb_select_max_nxh(int &xh, const int nddh);int bkxsb_read_info_by_bkdh(BKXSB_C *stBkxsb, int n_ddh);int bkxsb_read_info_by_bkdh_and_bkxh(BKXSB_C *stBkxsb, int n_ddh, int n_xh);BOOL bkt_update_to_bkxsb(BKXSB_C *pstBkxsb, int bkdh, int bkxh);int bkmlb_read_info_by_bkdh(BKMLB_

55、C *st_bkmlb, const char *pc_bkdh);BOOL bkt_insert_to_bkjhb(BKJHB_C *pstBkjhb);int bkjhb_select_max_nddh(int &ddh);int bkjhb_select_max_nxh(int &xh, const int nddh);int bkjhb_read_info_by_bkdh(BKJHB_C *stBkjhb, int n_ddh);int bkjhb_read_info_by_bkdh_and_bkxh(BKJHB_C *stBkjhb, int n_ddh, int n

56、_xh);BOOL bkt_update_to_bkjhb(BKJHB_C *pstBkjhb, int bkdh, int bkxh);BOOL bkt_insert_to_bkmlb(BKMLB_C *pstBkmlb);BOOL bkt_insert_to_bkkcb(BKKCB_C *pstBkkcb);BOOL bkt_update_to_bkkcb(BKKCB_C *pstBkkcb);具体实现详见附录源代码:bkt_data.cpp; bkt_data_bkjh.cpp 福建农林大学本科毕业设计说明书- 25 -5 终终端端与与平平台台的的数数据据通通信信5.1 HTTP 协议介

57、绍协议介绍8 超文本传送协议 (HTTP) 是一种通信协议,它允许将超文本标记语言 (HTML) 文档从 Web 服务器传送到 Web 浏览器。HTML 是一种用于创建文档的标记语言,这些文档包含到相关信息的链接。您可以单击一个链接来访问其它文档、图像或多媒体对象,并获得关于链接项的附加信息。 HTTP 工作在 TCP/IP 协议体系中的 TCP 协议上。 客户机和服务器必须都支持 HTTP,才能在万维网上发送和接收 HTML 文档并进行交互。 HTTP 是一个属于应用层的面向对象的协议,由于其简捷、快速的方式,适用于分布式超媒体信息系统。它于 1990 年提出,经过几年的使用与发展,得到不断

58、地完善和扩展。前一段时间用的是 HTTP/1.0,现在 WWW 中使用的是 HTTP/1.1。而且 HTTP-NG(Next Generation of HTTP)的建议已经提出。 (1) 特点特点HTTP 协议的主要特点可概括如下: 支持客户/服务器模式。 简单快速:客户向服务器请求服务时,只需传送请求方法和路径。请求方法常用的有 GET、HEAD、POST。每种方法规定了客户与服务器联系的类型不同。由于 HTTP 协议简单,使得 HTTP 服务器的程序规模小,因而通信速度很快。 灵活:HTTP 允许传输任意类型的数据对象。正在传输的类型由 Content-Type加以标记。 无连接:无连接

59、的含义是限制每次连接只处理一个请求。服务器处理完客户的请求,并收到客户的应答后,即断开连接。采用这种方式可以节省传输时间。 无状态:HTTP 协议是无状态协议。无状态是指协议对于事务处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大。另一方面,在服务器不需要先前信息时它的应答就较快。 (2) 请求信息请求信息发出的请求信息包括以下几个: 请求行,例如 GET /images/logo.gif HTTP/1.1,表示从/images 目录下请求 logo.gif这个文件。 (请求)头,例如 Accept-Language: en 空行

60、可选的消息体请求行和标题必须以作为结尾(也就是,回车然后换行)。空行内必须只有而无其他空格。在 HTTP/1.1 协议中,所有的请求头,除Host 外,都是可选的。 (3) 请求方法请求方法HTTP/1.1 协议中共定义了八种方法(有时也叫“动作”)来表明 Request-URI 指定的资源的不同操作方式: OPTIONS 返回服务器针对特定资源所支持的 HTTP 请求方法。也可以利用向福建农林大学本科毕业设计说明书- 26 -Web 服务器发送*的请求来测试服务器的功能性。 HEAD 向服务器索要与 GET 请求相一致的响应,只不过响应体将不会被返回。这一方法可以在不必传输整个响应内容的情况

61、下,就可以获取包含在响应消息头中的元信息。 GET 向特定的资源发出请求。注意:GET 方法不应当被用于产生“副作用”的操作中,例如在 web app.中。其中一个原因是 GET 可能会被网络蜘蛛等随意访问。 POST 向指定资源提交数据进行处理请求(例如提交表单或者上传文件) 。数据被包含在请求体中。POST 请求可能会导致新的资源的建立和/或已有资源的修改。 PUT 向指定资源位置上传其最新内容。 DELETE 请求服务器删除 Request-URI 所标识的资源。 TRACE 回显服务器收到的请求,主要用于测试或诊断。 CONNECT HTTP/1.1 协议中预留给能够将连接改为管道方式

62、的代理服务器。 方法名称是区分大小写的。当某个请求所针对的资源不支持对应的请求方法的时候,服务器应当返回状态码 405(Method Not Allowed) ;当服务器不认识或者不支持对应的请求方法的时候,应当返回状态码 501(Not Implemented) 。 HTTP 服务器至少应该实现 GET 和 HEAD 方法,其他方法都是可选的。当然,所有的方法支持的实现都应当符合下述的方法各自的语义定义。此外,除了上述方法,特定的 HTTP 服务器还能够扩展自定义的方法。福建农林大学本科毕业设计说明书- 27 -5.2 平台与终端的通信的编程实现平台与终端的通信的编程实现1)连接 GPRS:

63、程序入口 Gprs_Open(),包括 PPP初始化,拨号请求连接设置 HTTP 包头类型s_iGprsOpenStatus=GPRSCOMM_SEND,接收数据并解码退出程序 图 5-1 GPRS 连接其中设置 HTTP 包头类型 SetHttpPktHeadType() 函数处理包括:服务器地址,端口,平台 ID,和协议控制字;以下是一些重要的宏定义和数据结构:#define ENCODE_CTRL_FLAG00000011#define HTTP_PROTOCAL_VERSION(1.0)/协议版本号#define RECV_BUFLEN3*1024#define HTTP_RECV_D

64、ATA_TIMEOUT(60) /接收数据超时值,单位:秒#define NORMAL_ENCODE(0)/正常编码#define BASE64_ENCODE (1) /base64编码福建农林大学本科毕业设计说明书- 28 -#define HTTP_CONTROL_ENCODE_FLAG6/ 包体是否编码;:不编码;:编码#define HTTP_CONTROL_ZIP_FLAG7/ 包体是否压缩传输;:不压缩;:压缩typedef struct _ST_HtppRspBufchar *pHttpContent;int nContentLength;int nHttpRspStatusCo

65、de;int nHttpHeadLength;char szHttpLocation100;int nErrorCode;/接入平台返回的错误码int nUmpayErrorCode; /支付平台返回的错误码int nTotalRange;/断点续传时文件的总长度char nEncodeMask;PACKED ST_HTTPRSPBUF;1)以下是打开GPRS连接程序:void Gprs_Open(char *netType)int hpp;PppInit(NULL, 100);Net_InitGprsPpp();ST_GPRS_PPP_OPEN ppp;ppp.nMaxFail = 1;pp

66、p.nPrio = 10;ppp.nTimeDelay = 30;ppp.pszVpn = CMNET;hpp = Net_OpenGprsPpp(void*)&ppp);2)以下是设置HTTP包头格式的程序:void SetHttpPktHeadType(int nPlatformID, char *zMsgId, char *pszControlFlag)int nPort = 0;char zIP16 = 0;if (pszControlFlag=NULL)return;if (strlen(pszControlFlag) != 8)return;bkt_get_ip(zIP, sizeof(zIP);福建农林大学本科毕业设计说明书- 29 -nPort = bkt_get_port();g_nHttpPlatformID = nPlatformID;g_nHttpMsgID = atoi(zMsgId);strcpy(g_szHttpControlFlag, pszControlFlag);switch (nPlatformID) case BKT_PLATFORM_ID:strcpy(g_szHttpSer

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!