大三下学期的课程设计结束了,自己选了一个超级简单的题目,以至于在老师验收我的程序的时候,我都不太好意思啊,也许是对自己的要求降低了吧。 其实,东西也就完整的做了一个下午,技术含量不是很高,才采用MFC写的程序。
下边是报告中的内容,具体的图片去掉了。以后可能会有一些人需要的哈,呵呵!!!
目录
摘要... 2
Abstract. 3
1.引言... 6
2.技术实现... 6
2.1体系结构... 6
2.1.1内核... 6
2.1.2对象存储... 7
2.1.3 GWES. 7
2.1.4通信... 7
2.2开发工具... 8
2.3测试工具... 8
2.4开发包... 8
3.问题描述... 8
4.需求分析... 9
5.系统设计... 10
5.1数据结构定义... 10
5.2函数实现说明... 11
6.编码与调试... 12
6.1问题A:. 12
6.2问题B:. 12
6.3问题C:. 12
7.使用说明... 13
7.1程序主界面... 13
7.2添加功能... 13
7.3修改功能... 14
7.4删除用户功能... 15
7.5查询功能... 17
7.5.1用户名查询... 17
7.5.2号码查询... 18
8.测试结果... 19
结论... 22
参考文献... 23
随着我们在工作和生活中不断结识新的朋友,我们不得不将对方的联系方式加入我们的联系人名单。最初,人们使用纸张记录的方式解决这样的问题,但是,当联系人不断增多的时候,这样的方式就不在是一种高效的办事方式了,由此,开发出一个智能手机的电话簿系统的是一件非常有价值的事情,它可以帮助我们记录那些繁琐的联系人信息,让我们从中解脱出来,更好的享受美好的工作和生活。
Windows CE 是由许多离散模块构成的,每一模块都提供特定的功能。这些模块中的一部分被划分成组件。组件使 Windows CE 变得非常紧凑(只占不到 200 KB 的 RAM),因此只占用了运行设备所需的最小的ROM、RAM 以及其它硬件资源。Windows CE 包含提供操作系统最关键功能的 4 个模块:内核模块;对象存储模块;图形、窗口和事件子系统 (GWES) 模块以及通信模块。Windows CE 还包含一些附加的可选择模块,这些模块可支持的任务有管理可安装设备驱动程序、支持 COM 等。
内核是 OS 的核心,通过 Coredll 模块表示。它提供在所有设备中都出现的基本操作系统功能。内核负责内存管理、进程管理以及特定文件管理等功能。它还管理虚拟内存、调度、多重任务处理以及例外处理等。Windows CE 的任何配置都需要用到 Coredll 模块的大多数组件。有一些内核组件是可选的,只有在涉及系统功能操作时,才需要这些组件,例如电话技术、多媒体技术以及图形设备接口(GDI) 技术等。
Filesys 模块支持Windows CE 对象存储 API 函数。对象存储所支持的永久性存储器的类型如下表所示。存储器类型说明文件系统 包含应用程序和数据文件系统注册表 存储应用程序必须快速访问的系统配置信息以及其它任何信息Windows CE 数据库提供结构化存储对象存储可将用户数据和应用程序数据存入文件或注册器。在操作系统构造进程(该进程中只包括那些必需选项)的过程中,对于这些不同的对象存 储组件,可以选取,也可以忽略。
GWES 是用户、应用程序和 OS 之间的图形用户接口。GWES 通过处理键盘、笔针动作来接受用户输入,并选择传送到应用程序和OS 的信息。GWES 通过创建并管理在显示设备和打印机上显示的窗口、图形以及文本来处理输出。GWES 的中心是窗口。所有应用程序都需要窗口以接收来自 OS 的消息,即使那些为缺
少图形显示的设备创建的应用程序也是如此。GWES 提供控制器、菜单、对话框以及图形显示的设备资源,还提供 GDI 以控制文本与图形显示。
通信组件提供对下列通信硬件和数据协议的支持:
· 串行 I/O 支持
· 远程访问服务(RAS)
· 传输控制协议/ Internet 协议 (TCP/IP)
· 局域网 (LAN)
· 电话技术 API (TAPI)
· Windows CE 的无线服务
可选组件
除上述主要模块之外,还可使用其它的操作系统模块。这些模块与组件主要有:
· 设备管理器和设备驱动程序
· 多媒体(声音)支持模块
· COM 支持模块
· Windows CE 外壳模块
Windows CE 提供的每一模块或组件都支持一组可用的相关 API 函数。
操作系统:windows 7
IDE:Visual Studio2005
Windows Mobile 2003 Second Edition Emulator for Pocket PC
Chinese Simplified Emulation
Microsoft Pocket PC 2003 SDK
Microsoft SMARTPHONE 2003 SDK
地址簿提供了丰富的联系人信息属性,满足对个人与单位的信息记录,同时还提供了方便的信息查询功能。地址簿是严格按帐号进行分离,即不同帐号拥有自己的地址簿。地址簿中的通讯组以组的方式更方便地管理所有联系人,通讯组可直接通过联系人信息进行管理。
私人通讯录:通过按“增加”或“修改”,当选中“个人通讯录”页时弹出个人通讯录详细信息窗口,在此窗口完成个人通讯录的增加或修改。当选中“单位通讯录”页时弹出单位通讯录详细信息窗口,在此窗口完成单位通讯录的增加或修改,按“删除”可以删除选定的通讯录,按“保存”,则把当前增加、修改或删除的通讯录更新到数据库,通过“设置条件”可按条件查询通讯录,通过按“排序设置”,可对通讯录显示进行排序。公共通讯录维护,个人备忘录:操作同私人通讯录。
1.添加用户信息:该系统可以实现对联系人的联系方式的记录。
2.输入:用户输入联系人的联系信息,姓名和电话号码。
3.输出:将联系人的信息保存在手机中的\\My Documents\\users.txt文件中。
4.删除用户信息:该系统可以让用户删除掉不在联系的联系人名单。
5.输入:用户选择要删除的联系人的名单,删除。
6.输出:将名单删除,更新文件中的信息
7.修改用户信息:当联系人的信息更换后,我们可以通过修改选项更新联系人的用户信息。
8.输入:选择要修改的信息,输入要修改的内容。
9.输出:更新文件中的内容。
10.查询用户信息:可以根据名字或者号码进行查询。
11.输入:输入要查询的号码或者联系人的名字。
12.输出:显示查询的结果。
图解如下:
智能手机电子簿 |
添加用户信息 |
删除用户信息 |
修改用户信息 |
查询用户信息 |
添加信息 |
输入名字和号码 |
更新界面和文件 |
删除信息 |
选择要删除的项 |
更新界面和文件 |
修改信息 |
选择要修改的项 |
更新界面信息和文件 |
查询信息 |
输入名字或者号码 |
显示查询结果 |
// // 文件保存的路径 // const LPCTSTR USERPATH = _T("\\My Documents\\users.txt"); // // 用户信息 // #pragma pack(push,1) typedef struct _USER_INFOR { TCHAR szName[256]; TCHAR szNumber[256]; int nSize; }USER_INFOR, *P_USER_INFOR; #pragma pack(pop) typedef struct _SEARCH_INFOR { BOOL bRet; CString strName; CString strNumber; }SEARCH_INFOR;
// // CMyPhoneDlg 对话框 // CMyPhoneDlg::CMyPhoneDlg(CWnd* pParent /*=NULL*/); // // CMyPhoneDlg 消息处理程序 // BOOL CMyPhoneDlg::OnInitDialog(); // // 打开电话号码文件 // BOOL CMyPhoneDlg::OpenNumberFile(); // // 写入电话号码的文件 // BOOL CMyPhoneDlg::WriteInforToFile(); // // 读取电话号码文件 // BOOL CMyPhoneDlg::ReadNumberFile(); // // 添加用户信息 // void CMyPhoneDlg::OnBnClickedAdd(); // // 修改用户信息 // void CMyPhoneDlg::OnBnClickedModify(); // // 删除用户信息 // void CMyPhoneDlg::OnBnClickedDelete(); // // 刷新信息:即使更新地址簿中改变的内容信息 // BOOL CMyPhoneDlg::RefreshInfor(); // // 查询信息:内部能够分别通过电话号码和用户名就行查询 // BOOL CMyPhoneDlg::SearchType( CString strInfor, int nChoose);
6.1问题A: 由于对wince平台的系统内部的文件路径的不熟悉,一开始认为创建和保存文件时,系统默认也会像windows 桌面系统一样,保存在程序的当前的目录下,可是经过调试发现,情况并非如此,这样做的结果很可能在下次按照默认路径访问出现无法打开文件的情况。解决的办法是,将给定一个文件的默认路径。
6.2问题B: 仿真层不支持正在访问的功能,这个bug比较隐蔽,按照在桌面系统对程序的设计习惯,很可能造成程序死掉或者系统崩溃。解决的办法,将需要交互的数据完全定义在类中,操作时,不要通过参数的方式传递,使用直接使用对象内部数据即可。
6.3问题C: 程序设计之初,没有对程序的输入就行限制,容易出现输出造成的溢出问题。解决的方法是在用户输入完成之后,对输入的内容长度就行校验。
运行程序,出现如下界面:
可以选择添加,修改,删除和查询的功能。
选择添加后,输入用户名和对应的电话号码如下图:
确定后,完成数据的添加。
选择修改的功能如下图:
修改完成后的情况如下:
在删除用户前,必须选中要删除的用户,不然会出现如下的提示:
当正确的选中要删除的用户信息后:
成功的完成了删除的任务。
输入要查询的用户名:
确定后,显示查询结果:
输入要查询的电话号码:
确定后,显示查询结果:
假如没有这个查询信息,系统会提示用户:
1. 当系统中只存在一个用的时候,如下图的情况:
我们将其删除后继续进行删除操作进行测试程序的容错性。
这时,系统会提示我们没有选中要删除的目标,也就是说我们具备对这一隐蔽错误的容错能力。
2. 当系统中不存在任何数据的时候,我们想测试当前是否允许修改操作的发生:
系统会提示用户没有选中目标,可见这个错误同样能够被我们的系统识别和纠正。
通过本次嵌入式课程设计,使我的动手能力得到了提高,对编码和调试以及分析程序的能力有了一定的提高,深入的了解了在wince平台上应用软件开发的基本方法和过程,并且独立的完成了课题的要求,从中学会许多相关的东西。但是,由于课程设计时间的关系,程序还有些不太完美的地方。
• [1] 刘淼.嵌入式系统接口设计与Linux驱动程序开发[M]. 北京:北京航空航天大学出版社,2006.6.
• [2] 周毓林、宁杨、陆贵强等. Windows CE.net内核定制及应用开发[M].北京:电子工业出版社,2005.2.
• [3] 汪兵、李存斌、陈鹏. EVC高级编程及其应用开发(Embedded Visual C++嵌入式编程)[M]. 北京:中国水利水电出版社,2005.3.
• [4] 张冬泉,谭南林,王雪梅等.Windows CE实用开发技术[M]. 北京:电子工业出版社,2006.4.
• [5] 龚剑,刘晶晶. J2ME 3D手机游戏开发详解[M].北京:人民邮电出版社,2007.11.
• [6]李振鹏,龚剑. Java开发利器:J2ME 手机游戏开发技术详解[M]. 北京:清华大学出版社,2006.3.