




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、摘要本次毕业设计主要介绍了摄影网站所要完成的功能和开发的过程。重点的说明了系统设计的重点、设计思想、难点技术和解决方案。信息技术的迅猛发展,已经引起社会的深刻变革,信息时代的到来,使得数码产品与Internet结合,高科技的信息时代。随着计算机技术的飞速发展,计算机在企业和学校管理中应用的普及,利用计算机实现各行各业信息管理势在必行。是适应现代学习与生活的要求、推动精神文明建设走向科学化、规范化的必要条件;摄影网站主要用于公布比赛规则,提交作品,用户登录注册,作品展示,新闻动态,夏令营,学生风采展示,留言管理,访问统计。使用摄影网站管理系统,便于主办方及时了解大赛进程情况,及时调整管理策略。摄
2、影网站系统是现在生活娱乐不可缺少的一部分,是适应现代高信息化的要求 、推动现代大学走向科学化、规范化的必要条件。我们在这次设计当中主要参与了以下工作:需求调研,模块设计,数据库设计,代码编写,css设计,Java语言的应用,ajax的使用。期中老师的指导意见给了我们很大的帮助,对我们顺利完成项目起了不可或缺的作用,在此表示衷心的感谢!目录 TOC o 1-3 h z u HYPERLINK l _Toc199911854 摘要2 HYPERLINK l _Toc199911855 第一章 绪论 PAGEREF _Toc199911855 h HYPERLINK l _Toc199911856
3、1.1开发背景 PAGEREF _Toc199911856 h HYPERLINK l _Toc199911857 1.2需求分析 PAGEREF _Toc199911857 h HYPERLINK l _Toc199911858 1.3 可行性分析5 HYPERLINK l _Toc199911862 1.4项目目标5 HYPERLINK l _Toc199911859 1.3.1普通用户界面5 HYPERLINK l _Toc199911860 1.3.2会员5 HYPERLINK l _Toc199911861 1.3.3管理员5 HYPERLINK l _Toc199911863 1.
4、5开发工具简介6 HYPERLINK l _Toc199911864 1.5.1 Eclipse6 HYPERLINK l _Toc199911865 1.5.2 Dreamweaver简述6 HYPERLINK l _Toc199911866 1.5.3 AppServ简述及与Zend的结合安装7 HYPERLINK l _Toc199911867 第二章 摄影网站系统分析8 HYPERLINK l _Toc199911868 2.1网站功能分析8 HYPERLINK l _Toc199911874 2.2网站功能结构图9 HYPERLINK l _Toc199911877 2.3参赛者及管
5、理流程图:10 HYPERLINK l _Toc199911878 2.4简单整体流程图11 HYPERLINK l _Toc199911878 2.5开发及运行环境11 HYPERLINK l _Toc199911879 HYPERLINK l _Toc199911882 第三章 数据库设计12 HYPERLINK l _Toc199911883 3.1数据库分析12 HYPERLINK l _Toc199911884 3.2 数据库概念设计12 HYPERLINK l _Toc199911885 3.2.1 照片信息实体12 HYPERLINK l _Toc199911886 3.2.2用
6、户信息实体13 HYPERLINK l _Toc199911885 3.2.3 用户留言实体13 HYPERLINK l _Toc199911887 3.3 创建数据库及数据表14 HYPERLINK l _Toc199911892 第四章 公共模块设计17 HYPERLINK l _Toc199911893 4.1 数据库链接文件 17 HYPERLINK l _Toc199911894 4.2 css样式表文件18 HYPERLINK l _Toc199911895 4.3 js文件19 HYPERLINK l _Toc199911892 第五章 各部分具体设计方案20 HYPERLINK
7、 l _Toc199911893 5.1 用户登录 20 HYPERLINK l _Toc199911894 5.2 用户注册20 HYPERLINK l _Toc199911895 5.3 后台存储及前台调用20 HYPERLINK l _Toc199911895 5.4 数据库的备份与还原21 HYPERLINK l _Toc199911892 第六章 总结21 HYPERLINK l _Toc199911896 HYPERLINK l _Toc199911898 附录22 第一章 绪论1.1开发背景本网站是为了响应摄影活动而建,以中小学生为中心的摄影比赛,把舞台现场放在学校内,和企业内,
8、精彩内容将在移动传媒滚动播放,邀请各大企业参加,请企业子弟展现企业文化展示个人风采。邀请各中小学校集体参加,展示学校新面貌,园丁风采和成就。1.2需求分析 用孩子手中的相机记录美好的世界,同时给孩子一个舞台让孩子展示当地的历史文明和企业文化,借助本网站这个平台,提升参与企业,与学校的知名度和企业的美誉度,对加快发展起到一定的推动作用。1.3可行性分析经济上节省了大量的人力物力,在短时间内就可以实现作品的收集与展示,通过网络,节约了场地,人员等支出。收集孩子的照片,并让大众参加评选,需要一个这样的网络平台!收集全国各地的照片,并迅速把他们编号成册,单靠人力去收集需要消耗大量的时间,物力财力。统一
9、排号,登陆数据,统计大众投票,单靠书面整理,是无法有效,准确的完成的。及时向选手和大众宣告比赛信息,比赛临时事件更改,成绩等需要一个这样的网络平台。本网站可使照片收集,标号,统计数据等等,都得到解决,同时时间更加节约!1.4项目目标通过调查,要求系统需要有以下功能:1.4.1普通用户界面:要求系统良好的人机操作界面。提示本活动的要求。显示系统的结果。用户注册。1.4.2会员:会员安全登录退出。提交作品,浏览作品,个人信息的维护系统退出。1.4.3管理员:审核、修改信息。数据库备份与恢复。1.5开发工具简介1.5.1 EclipseEclipse 是一种基于 Java 的可扩展开源开发平台。就其
10、自身而言,它只是一个框架和一组服务,用于通过插件组件构建开发环境。幸运的是,Eclipse 附带了一个标准的插件集,包括为人熟知的 Java 开发工具(Java Development Tools,JDT)。 虽然大多数用户很乐于将 Eclipse 当作 Java 集成开发环境(IDE)来使用,但 Eclipse 的目标却不仅限于此。Eclipse 还包括插件开发环境(Plug-in Development Environment,PDE),这个组件主要针对希望扩展 Eclipse 的软件开发人员,因为它允许他们构建与 Eclipse 环境无缝集成的工具。由于 Eclipse 中的每样东西都是
11、插件,对于给 Eclipse 提供插件,以及给用户提供一致和统一的集成开发环境而言,所有工具开发人员都具有同等的发挥场所。 这种平等和一致性并不仅限于 Java 开发工具。尽管 Eclipse 是使用 Java 语言开发的,但它的用途并不限于 Java 语言;例如,支持诸如 C/C+ 和 COBOL 等编程语言的插件已经可用,或预计将会推出。Eclipse 框架还可用来作为与软件开发无关的其他应用程序类型的基础,比如内容管理系统。 基于 Eclipse 的应用程序的一个突出例子是 IBM Rational Software Architect,它构成了 IBM Java 开发工具系列的基础1.
12、5.2 Dreamweaver简述最佳的制作效率Dreamweaver可以用最快速的方式将Fireworks, HYPERLINK /view/58639.htm t _blank FreeHand,或 HYPERLINK /view/2929.htm t _blank Photoshop等档案移至网页上。网站管理使用网站地图可以快速制作网站雏形、设计、更新和重组网页。改变网页位置或档案名称,Dreamweaver 会自动更新所有连结。使用支援文字、HTML码、HTML属性标签和一般语法的搜寻及置换功能使得复杂的网站更新变得迅速又简单。 无可比拟的控制能力Dreamweaver是唯一提供Rou
13、ndtrip HTML、视觉化编辑与原始码编辑同步的设计工具。 Dreamweaver还集成了程序开发语言,对ASP、.NET、PHP、JS的基本语言和连接操作数据库,都是完全支持的。1.5.3 AppServ简述及与Zend的结合安装AppServ 是 PHP 网页架站工具组合包,作者将一些网络上免费的架站资源重新包装成单一的安装程序,以方便初学者快速完成架站,AppServ 所包含的软件有:Apache、Apache Monitor、PHP、MySQL、phpMyAdmin等。用这个软件则可以让你迅速搭建完整的底层环境,从而实现对EcShop的快速试用。由于大家在安装过程中出现种种问题,现
14、在就与Zend的安装简单介绍一下主要分为三个步骤: AppServ 2.2与Zend Optimizer下载 软件名称:AppServ 2.2 appserv-AddOns-ZendOptimizer-2.5.10.exe AppServ 2.2与Zend Optimizer的安装; EcShop软件安装; 因为AppServ使用的是Apache,所以有IIS服务的朋友最好先将IIS服务停止(Win2k、2003系统的朋友尤其要注意记得停止IIS服务)。 系统安装很简单,基本上就像在windows上安装任何一个软件一样,只要不断的按下一步即可 选择软件安装目录,您可以根据需要进行选择。 这一步
15、,点击“Next”即可; 可以将邮件地址修改为你的地址,不做修改也可。如果希望修改Web服务器的默认端口,请根据需要进行修改。记住,如果修改端口为90,则访问地址要加上这个端口号,比如http:/localhost:90 。此处可以不做任何修改,继续“Next”; Mysql的一些信息,可以进行修改,也可以不做任何修改,继续“Next”; 到这里,php、mysql和Apache都已经安装完成。EcShop软件目前还不需要Zend Optimizer的支持。Zend Optimizer是对于运行加密过的PHP软件提供运行支持,它的安装同样很简单,双击后一直点击“Next”即可。 为使Zend
16、Optimizer生效,必须重启Apache。因此,接下来,您需要按照提示来操作。 您需要找到AppServ程序快捷方式,然后点击“Apche Restart”,此时Zend Optimizer即可生效。 此时,在 HYPERLINK /view/7718.htm t _blank 浏览器录入http:/localhost,如果看到如图12的页面,则说明Apche安装成功。如果看不到该页面,请检查您是否没有停止iis服务,或者是给Apache设置了其他的访问端口。 您也可以在浏览器上录入 http:/localhost/phpinfo.php ,看一下是否出现如图13的页面。请注意Powere
17、d By Zend图标旁边是否有Zend Optimizer v2.5.10字样。如果有,则说明Zend Optimizer已经安装成功。摄影网站系统分析2.1 网站功能分析根据需求分析的描述以及与用户的沟通,本系统在设计时应该满足以下目标:系统界面设计美观大方、方便、快捷、准确、数据存储安全可靠。全面展示照片带来的视觉效果,并可以展示最新照片、事件、留言等。实现各种查询,如模糊查询、高级查询等。查看摄影网站的公告信息。对用户输入的数据,系统进行严格的数据检验,尽可能排除人为的错误。支持友情连接功能。网站最大限度的实现了易维护性和易操作性。系统运行稳定、安全可靠。摄影网站(功能图)首页摄影网站
18、(功能图)首页比赛规则提交作品用户注册作品展示新闻夏令营留言管理访问统计友情链接2.3参赛者及管理流程图摄影网站流程图摄影网站流程图网站管理员网站访问者进行照片分类,编辑,审核,数据库等信息管理浏览网站其他功能模块登录注册登录查看比赛评比参赛留言回复留言比赛结果2.4 简单整体流程图管理员管理员会员显示留言提交留言普通用户提交作品数据库备份还原首页新闻用户注册比赛规则作品展示夏令营审核作品审核留言访问统计2.5开发及运行环境在开发摄影网站时,该项目使用的软件开发环境如下:1服务器端:操作系统:Windows 2003 Server/Linux(推荐)。服务器:Apache2.2。PHP软件:P
19、HP5.16。数据库:MySQL5.0.24。MySQL图形化管理软件:phpMyAdmin-。开发工具:Dreamweaver 8、Eclipse。浏览器:IE6.0及以上版本。分辨率:最佳效果1024X768像素。2.客户端:浏览器:IE6.0及以上版本。 分辨率:最佳效果1024768像素。数据库设计3.1 数据库分析因为本项目面向的是中小学生及企事业单位,所以需要充分考虑到主办方成本及用户需求(如跨平台)等问题,而MySQL是世界上最为流行的开放源代码的数据库,是完全网络化的跨平台的关系型数据库系统,这正好满足了比赛数据存储的需求,所以本系统采用MySQL数据库。作为PHP黄金搭档My
20、SQL数据库不仅存储和管理功能强大,而且它是完全免费使用的,很多网站都可以下载到它,这样可以为主办方节省一大部分的开支。PHP中也提供了强大的支持MySQL数据库的函数,phpMyadmin为MySQL数据库提供了图形化界面。数据库概念设计根据以上各节对系统分析所作的需求分析、系统设计、规划出摄影网站平台的实体关系E-R图。实体关系E-R图示用来描述实体之间关系的图表,构成E-R图的基本要素是实体型、属性和联系,其表示方法为:实体型:用矩形表示,矩形框内标注实体名。 属性:用椭圆形表示:并用无向边将其与相应的实体连接起来。联系:用菱形表示,菱形框内标注联系名,并用无向边分别与有关实体连接起来,
21、同时在无向边旁标上联系的类型(1:1、1:n、或m:n)。本系统中使用的数据库实体分别为照片信息实体、用户信息实体、用户留言实体、照片评价实体、管理员信息实体、公告信息实体和友情链接实体。下面将介绍几个关键实体E-R图。 照片信息实体照片信息实体包括作品名称、作品作者、拍摄地点、摄影机型号、主题意义等属性。照片信息实体的E-R图 ,如图3-2-1所示。照片信息照片信息拍摄地点作品名称作品作者摄影机型号主题意义 图3-2-13.2.2 用户信息实体用户信息实体包括用户姓名、密码、id号属性。用户信息实体的E-R图 ,如图4-2-2所示。照片信息照片信息Id姓名密码 图3-2-2323 用户留言实
22、体用户留言实体包括用户名、密码、E-mail、主题、内容等属性。用户信息实体的E-R图 ,如图3-2-3所示。用户留言用户留言密码E-mail标题内容用户名 图3-2-33.3创建数据库及数据表结合实际情况及对用户需求的分析,摄影网站系统db_shoot数据库主要包含如下5个数据表,如图3-3-1所示 图3-3-1下面以db_shoot数据库中的controller数据表为例,通过两种不同的方法来讲解数据库及数据表的创建过程。在命令提示符下创建数据库及数据表 在数据库脚本文件导出后,就可以根据该脚本文件在MySQL中创建数据库及数据库了。具体步骤如下:( 1 )选择“开始”/“所有程序”/Ap
23、pserv/MySQL Command Line Client命令,进入到MySQL的客户端命令行窗口,输入密码并按Enter键后,即可使用MySQL Cl ient连接MySQL数据库。 ( 2 )在mysql 提示符后面输入以下命令创建数据库db_shoot。 Create database db_shoot ( 3 )调用数据库db_shoot。 Use db_shoot ( 4 )在数据库db_shoot中创建一个简单的数据库controller,包括id、name、pwd等代码,代码如下: Mysqlcreate table controller( -id int(11) AUTO_
24、INCREMENT PRIMARY KEY, -NAME VACHAR(8), -pwd varchar(40), Query OK,0 rows affected (0.03 sec) 在phpMyadmin图形工具下创建数据库及数据表在phpMyadmin的主界面中有两个文本框和一个“创建”按钮,首先在文本框中输入数据库的名称,然后选择编码,最后单击“创建”按钮,这样新的数据库就可以被创建成。例如,创建一个名称为db_shoot的数据库,首先在文本框中输入db_shoot,之后在下拉列表框中找到要使用的编码,在Windows下一般选择gb2312_chinses_ci,如下图所示:图 ph
25、pMyadmin的管理界面最后单击“创建”按钮,这样名为db_shoot的数据库就被创建成功。执行结果如下图所示。 在右侧界面还可以执行创建数据库表的操作,首先在表单中输入数据表的名称和字段,然后点击“执行”按钮,进入各个字段的详细信息录入表单,包括字段名、数据类型、长度/值、属性、默认值、额外和索引的类型等。在这里就完成了对表结构的详细设置,如下图所示。下面是各表列图分组图List事物列表留言板用户表 第四章 公共模块设计4.1 数据库链接文件 首先讲一下数据库链接文件通过此文件使得各个文件均可链接到数据库mysql_connect():连接MySQL服务器,服务器的用户名为root,密码为
26、luojing。Mysql_select_db():用于连接指定的MySQL数据库。如果某个页面中需要进行数据库的操作,在页面的前台直接包含该文件即可,代码如下:4.2css样式表文件CSS是Cascading Style Sheets (层叠样式表单)的简称,是一种简单、灵活、易学的工具,可使任何浏览器都听从指令,知道该如何显示元素及其内容。掌握CSS样式表不仅能更好、更快地完成网页设计使页面具有动态效果,还有助于统一网站的整体风格。在网页中使用CSS的方法如下:把CSS文档放到标记中。把CSS样式表写在HTML行内,代码如下:黑色12号文字这是采用的格式把样式写在HTML中的任意行内,这种
27、方法比较方便灵活。把编辑好的CSS文档保存成扩展名为”.css”的外部文件,然后在标记中调用该文件,调用方法的代码如下:这种方式能使多个文档同时使用相同的样式,从而能够减少大量的冗余代码。摄影网站采用将扩展名为”.css”的外部文件嵌入到网页中,代码如下:摄影网站中应用的index.css样式表文件的代码如下(鉴于节约纸张,只展示少部分代码):4.3 js文件通过js文件,实现了网页动态效果,使网页更加活泼,生动。同时也应用到客户端的验证,验证码,下拉列表等!网页中的index.js代码: 第五章 各部分具体设计方案 用户登录通过链接到后台数据库,在前台得到数据提取验证,得到后台存储数据代码如
28、下:input type=hidden value= name=num 后台数据提取,通过前文讲到的conn.php文件链接到数据库,得到数据同时增加了客户端验证,代码不再细述!用户注册 用户注册页面添加了验证码的使用,同时使用了ajax技术,验证码的使用使得用户的登录更加安全,而且实现了页面无刷新技术,代码如下:这段代码,使得验证码实现了实现Ajax无刷新技术的页面功能。5.3后台存储及前台调用 在开始菜单栏里进入到后台数据库代码编辑器,输入密码进入到数据库后台,建立一个存储过程,通过id得到姓名,同时存储入数据库。调用存储过程,call sp_name(参数【】)例如:本题中代码为:cal
29、l db_s();5.4 数据库的备份与还原 对于每一个人,或者企业,或者国家,数据备份至关重要,因此我们也做了数据库备份,代码如下: $mysqlstr = C:AppServMySQLbinmysqldump -uroot -h localhost -pluojing -opt -B db_shoot C:AppServwwwshootbakbak.txt.$_POSTr_name;exec($mysqlstr);echo alert(备份成功);location=data_stock.php;C:AppServMySQLbin路径一定要写清楚,C:AppServwwwshootbakba
30、k.txt将数据库备份到C盘的AppServwwwshootbak文件夹下的bak.txt里,如果你想备份到某个文件夹下,只需修改./bak/”.$_POSTb_name;即可,这样数据会以当时时间为命名的文件存储! 数据库还原只需将“”改为“”,然后将mysqldump改为mysql即可!在本项目中代码为:$mysqlstr = C:AppServMySQLbinmysql -uroot -hlocalhost -pluojing db_office ./bak/.$_POSTr_name; exec($mysqlstr);echo alert(恢复成功);location=data_sto
31、ck.php; 总结 对前面的功能做一下总结:普通用户设置了限制权限,普通用户只能浏览部分网页;会员的注册、登录,使用会话变量,实现了用户的安全登录和退出;系统的注册添加了验证码,实现了页面无刷新更换验证码实现后台数据库的备份和还原前台的PHP代码实现数据库的备份和还原设计和实现系统的PHP高级编程所需的类和对象的功能。学习了Smarty类库技术,由于时间原因未完成smarty框架的应用后台数据库设计一个存储过程,前台调用该存储过程。通过这短短的两个星期,我们体会到了合作的重要性,学到了许多课堂上没有的知识。再次感谢老师的谆谆教导!附录本项目用到的参考文献Php使用教程 /郑阿奇Javascr
32、ipt动态网页编程实例手册 /张长富 黄中敏Php高级编程 /Div+css动态网页制作 /附录资料:不需要的可以自行删除C语言中如何获取时间?精度如何?1 使用time_t time( time_t * timer ) 精确到秒2 使用clock_t clock() 得到的是CPU时间精确到1/CLOCKS_PER_SEC秒3 计算时间差使用double difftime( time_t timer1, time_t timer0 )4 使用DWORD GetTickCount() 精确到毫秒5 如果使用MFC的CTime类,可以用CTime:GetCurrentTime() 精确到秒6 要
33、获取高精度时间,可以使用BOOL QueryPerformanceFrequency(LARGE_INTEGER *lpFrequency)获取系统的计数器的频率BOOL QueryPerformanceCounter(LARGE_INTEGER *lpPerformanceCount)获取计数器的值然后用两次计数器的差除以Frequency就得到时间。7 Multimedia Timer FunctionsThe following functions are used with multimedia timers.timeBeginPeriod/timeEndPeriod/timeGetD
34、evCaps/timeGetSystemTime/*/用标准C实现获取当前系统时间的函数一.time()函数time(&rawtime)函数获取当前时间距1970年1月1日的秒数,以秒计数单位,存于rawtime 中。#include time.hvoid main ()time_t rawtime;struct tm * timeinfo;time ( &rawtime );timeinfo = localtime ( &rawtime );printf ( 007The current date/time is: %s, asctime (timeinfo) );exit(0);=#inc
35、lude - 必须的时间函数头文件time_t - 时间类型(time.h 定义是typedef long time_t; 追根溯源,time_t是long)struct tm - 时间结构,time.h 定义如下:int tm_sec;int tm_min;int tm_hour;int tm_mday;int tm_mon;int tm_year;int tm_wday;int tm_yday;int tm_isdst;time ( &rawtime ); - 获取时间,以秒计,从1970年1月一日起算,存于rawtimelocaltime ( &rawtime ); - 转为当地时间,t
36、m 时间结构asctime ()- 转为标准ASCII时间格式:星期 月 日 时:分:秒 年二.clock()函数,用clock()函数,得到系统启动以后的毫秒级时间,然后除以CLOCKS_PER_SEC,就可以换成“秒”,标准c函数。clock_t clock ( void );#includeclock_t t = clock();long sec = t / CLOCKS_PER_SEC;他是记录时钟周期的,实现看来不会很精确,需要试验验证;三.gettime(&t); 据说tc2.0的time结构含有毫秒信息#include#includeint main(void)struct ti
37、me t;gettime(&t);printf(The current time is: -:d:d.dn,t.ti_hour, t.ti_min, t.ti_sec, t.ti_hund);return 0;time 是一个结构体, 其中成员函数 ti_hund 是毫秒。四.GetTickCount(),这个是windows里面常用来计算程序运行时间的函数;DWORD dwStart = GetTickCount();/这里运行你的程序代码DWORD dwEnd = GetTickCount();则(dwEnd-dwStart)就是你的程序运行时间, 以毫秒为单位这个函数只精确到55ms,1
38、个tick就是55ms。五.timeGetTime()t,imeGetTime()基本等于GetTickCount(),但是精度更高DWORD dwStart = timeGetTime();/这里运行你的程序代码DWORD dwEnd = timeGetTime();则(dwEnd-dwStart)就是你的程序运行时间, 以毫秒为单位虽然返回的值单位应该是ms,但传说精度只有10ms。=/*Unix#unix时间相关,也是标准库的/*1.timegm函数只是将struct tm结构转成time_t结构,不使用时区信息;time_t timegm(struct tm *tm);2.mktime
39、使用时区信息time_t mktime(struct tm *tm);timelocal 函数是GNU扩展的与posix函数mktime相当time_t timelocal (struct tm *tm);3.gmtime函数只是将time_t结构转成struct tm结构,不使用时区信息;struct tm * gmtime(const time_t *clock);4.localtime使用时区信息struct tm * localtime(const time_t *clock);1.time获取时间,stime设置时间time_t t;t = time(&t);2.stime其参数应该
40、是GMT时间,根据本地时区设置为本地时间;int stime(time_t *tp)3.UTC=true 表示采用夏时制;4.文件的修改时间等信息全部采用GMT时间存放,不同的系统在得到修改时间后通过localtime转换成本地时间;5.设置时区推荐使用setup来设置;6.设置时区也可以先更变/etc/sysconfig/clock中的设置再将ln -fs /usr/share/zoneinfo/xxxx/xxx /etc/localtime 才能重效time_t只能表示68年的范围,即mktime只能返回1970-2038这一段范围的time_t看看你的系统是否有time_t64,它能表示
41、更大的时间范围/*windows#Window里面的一些不一样的/*一.CTime () 类VC编程一般使用CTime类 获得当前日期和时间CTime t = GetCurrentTime();SYSTEMTIME 结构包含毫秒信息typedef struct _SYSTEMTIME WORD wYear;WORD wMonth;WORD wDayOfWeek;WORD wDay;WORD wHour;WORD wMinute;WORD wSecond;WORD wMilliseconds; SYSTEMTIME, *PSYSTEMTIME;SYSTEMTIME t1;GetSystemTim
42、e(&t1)CTime curTime(t1);WORD ms = t1.wMilliseconds;SYSTEMTIME sysTm;:GetLocalTime(&sysTm);在time.h中的_strtime() /只能在windows中用char t11;_strtime(t);puts(t);/*获得当前日期和时间CTime tm=CTime:GetCurrentTime();CString str=tm.Format(%Y-%m-%d);在VC中,我们可以借助CTime时间类,获取系统当前日期,具体使用方法如下:CTime t = CTime:GetCurrentTime(); /
43、获取系统日期,存储在t里面int d=t.GetDay(); /获得当前日期int y=t.GetYear(); /获取当前年份int m=t.GetMonth(); /获取当前月份int h=t.GetHour(); /获取当前为几时int mm=t.GetMinute(); /获取当前分钟int s=t.GetSecond(); /获取当前秒int w=t.GetDayOfWeek(); /获取星期几,注意1为星期天,7为星期六二.CTimeSpan类如果想计算两段时间的差值,可以使用CTimeSpan类,具体使用方法如下:CTime t1( 1999, 3, 19, 22, 15, 0
44、);CTime t = CTime:GetCurrentTime();CTimeSpan span=t-t1; /计算当前系统时间与时间t1的间隔int iDay=span.GetDays(); /获取这段时间间隔共有多少天int iHour=span.GetTotalHours(); /获取总共有多少小时int iMin=span.GetTotalMinutes();/获取总共有多少分钟int iSec=span.GetTotalSeconds();/获取总共有多少秒三._timeb()函数_timeb定义在SYSTIMEB.H,有四个fieldsdstflagmillitmtimetime
45、zonevoid _ftime( struct _timeb *timeptr );struct _timeb timebuffer;_ftime( &timebuffer );取当前时间:文档讲可以到ms,有人测试,好象只能到16ms!四.设置计时器定义TIMER ID#define TIMERID_JISUANFANGSHI 2在适当的地方设置时钟,需要开始其作用的地方;SetTimer(TIMERID_JISUANFANGSHI,200,NULL);在不需要定时器的时候的时候销毁掉时钟KillTimer(TIMERID_JISUANFANGSHI);对应VC程序的消息映射void CJi
46、suan:OnTimer(UINT nIDEvent)switch(nIDEvent)#如何设定当前系统时间windowsSYSTEMTIME m_myLocalTime,*lpSystemTime;m_myLocalTime.wYear=2003;m_myLocalTime.wM;m_myLocalTime.wDay=1;m_myLocalTime.wHour=0;m_myLocalTime.wMinute=0;m_myLocalTime.wSec;m_myLocalTime.wMillisec;lpSystemTime=&m_myLocalTime;if( SetLocalTime(lpS
47、ystemTime) ) /此处换成 SetSystemTime( )也不行MessageBox(OK !);elseMessageBox(Error !);SYSTEMTIME m_myLocalTime,*lpSystemTime;m_myLocalTime.wYear=2003;m_myLocalTime.wM;m_myLocalTime.wDay=1;lpSystemTime=&m_myLocalTime;if( SetDate(lpSystemTime) ) /此处换成 SetSystemTime( )也不行MessageBox(OK !);elseMessageBox(Error
48、!);本文来自CSDN博客,转载请标明出处:HYPERLINK /khuang2008/archive/2008/12/09/3483274.aspx/khuang2008/archive/2008/12/09/3483274.aspx一种制作微秒级精度定时器的方法当使用定时器时,在很多情况下只用到毫秒级的时间间隔,所以只需用到下面的两种常用方式就满足要求了。一是用SetTimer函数建立一个定时器后,在程序中通过处理由定时器发送到线程消息队列中的WM_TIMER消息,而得到定时的效果(退出程序时别忘了调用和SetTimer配对使用的KillTimer函数)。二是利用GetTickCount函
49、数可以返回自计算机启动后的时间,通过两次调用GetTickCount函数,然后控制它们的差值来取得定时效果,此方式跟第一种方式一样,精度也是毫秒级的。用这两种方式取得的定时效果虽然在许多场合已经满足实际的要求,但由于它们的精度只有毫秒级的,而且在要求定时时间间隔小时,实际定时误差大。下面介绍一种能取得高精度定时的方法。在一些计算机硬件系统中,包含有高精度运行计数器(high-resolution performance counter),利用它可以获得高精度定时间隔,其精度与CPU的时钟频率有关。采用这种方法的步骤如下:1、首先调用QueryPerformanceFrequency函数取得高精
50、度运行计数器的频率f。单位是每秒多少次(n/s),此数一般很大。2、在需要定时的代码的两端分别调用QueryPerformanceCounter以取得高精度运行计数器的数值n1,n2。两次数值的差值通过f换算成时间间隔,t=(n2-n1)/f。下面举一个例子来演示这种方法的使用及它的精确度。在VC 6.0 下用MFC建立一个对话框工程,取名为HightTimer.在对话框面板中控件的布局如下图:其中包含两个静态文本框,两个编辑框和两个按纽。上面和下面位置的编辑框的ID分别为IDC_E_TEST和IDC_E_ACTUAL,通过MFC ClassWizard添加的成员变量也分别对应为DWORD m
51、_dwTest和DWORD m_dwAct. “退出”按纽的ID为IDOK,“开始测试”按纽ID为IDC_B_TEST,用MFC ClassWizard添加此按纽的单击消息处理函数如下:void CHightTimerDlg:OnBTest()/ TODO: Add your control notification handler code hereUpdateData(TRUE); /取输入的测试时间值到与编辑框相关联的成员变量m_dwTest中LARGE_INTEGER frequence;if(!QueryPerformanceFrequency( &frequence) /取高精度运
52、行计数器的频率,若硬件不支持则返回FALSEMessageBox(Your computer hardware doesnt support the high-resolution performance counter,Not Support, MB_ICONEXCLAMATION | MB_OK);LARGE_INTEGER test, ret;test.QuadPart = frequence.QuadPart * m_dwTest / 1000000; /通过频率换算微秒数到对应的数量(与CPU时钟有关),1秒=1000000微秒ret = MySleep( test ); /调用此函
53、数开始延时,返回实际花销的数量m_dwAct = (DWORD)(1000000 * ret.QuadPart / frequence.QuadPart ); /换算到微秒数UpdateData(FALSE); /显示到对话框面板其中上面调用的MySleep函数如下:LARGE_INTEGER CHightTimerDlg:MySleep(LARGE_INTEGER Interval)/ 功能:执行实际的延时功能 / 参数:Interval 参数为需要执行的延时与时间有关的数量 / 返回值:返回此函数执行后实际所用的时间有关的数量 / LARGE_INTEGER privious, curre
54、nt, Elapse;QueryPerformanceCounter( &privious );current = privious;while( current.QuadPart - privious.QuadPart Interval.QuadPart )QueryPerformanceCounter( t );Elapse.QuadPart = current.QuadPart - privious.QuadPart;return Elapse;注:别忘了在头文件中为此函数添加函数声明。至此,可以编译和执行此工程了,结果如上图所示。在本人所用的机上(奔腾366, 64M内存)测试,当测试
55、时间超过3微秒时,准确度已经非常高了,此时机器执行本身延时函数代码的时间对需要延时的时间影响很小了。上面的函数由于演示测试的需要,没有在函数级封装,下面给出的函数基本上可以以全局函数的形式照搬到别的程序中。BOOL MySleep(DWORD dwInterval)/ 功能:执行微秒级的延时功能 / 参数:Interval 参数为需要的延时数(单位:微秒) / 返回值:若计算机硬件不支持此功能,返回FALSE,若函数执行成功,返回TRUE / BOOL bNormal = TRUE;LARGE_INTEGER frequence, privious, current, interval;if(
56、!QueryPerformanceFrequency( &frequence):MessageBox(NULL, Your computer hardware doesnt support the high-resolution performance counter,Not Support, MB_ICONEXCLAMATION | MB_OK); /或其它的提示信息return FALSE;interval.QuadPart = frequence.QuadPart * dwInterval / 1000000;bNormal = bNormal & QueryPerformanceCou
57、nter( &privious );current = privious;while( current.QuadPart - privious.QuadPart interval.QuadPart )bNormal = bNormal & QueryPerformanceCounter( t );return bNormal;需要指出的是,由于在此函数中的代码很多,机器在执行这些代码所花费的时间也很长,所以在需要几个微秒的延时时,会影响精度。实际上,读者在熟悉这种方法后,只要使用QueryPerformanceFrequency和QueryPerformanceCounter这两个函数就能按实
58、际需要写出自己的延时代码了。使用CPU时间戳进行高精度计时对关注性能的程序开发人员而言,一个好的计时部件既是益友,也是良师。计时器既可以作为程序组件帮助程序员精确的控制程序进程,又是一件有力的调试武器,在有经验的程序员手里可以尽快的确定程序的性能瓶颈,或者对不同的算法作出有说服力的性能比较。在Windows平台下,常用的计时器有两种,一种是timeGetTime多媒体计时器,它可以提供毫秒级的计时。但这个精度对很多应用场合而言还是太粗糙了。另一种是QueryPerformanceCount计数器,随系统的不同可以提供微秒级的计数。对于实时图形处理、多媒体数据流处理、或者实时系统构造的程序员,善
59、用QueryPerformanceCount/QueryPerformanceFrequency是一项基本功。本文要介绍的,是另一种直接利用Pentium CPU内部时间戳进行计时的高精度计时手段。以下讨论主要得益于Windows图形编程一书,第15页17页,有兴趣的读者可以直接参考该书。关于RDTSC指令的详细讨论,可以参考Intel产品手册。本文仅仅作抛砖之用。在Intel Pentium以上级别的CPU中,有一个称为“时间戳(Time Stamp)”的部件,它以64位无符号整型数的格式,记录了自CPU上电以来所经过的时钟周期数。由于目前的CPU主频都非常高,因此这个部件可以达到纳秒级的计
60、时精度。这个精确性是上述两种方法所无法比拟的。在Pentium以上的CPU中,提供了一条机器指令RDTSC(Read Time Stamp Counter)来读取这个时间戳的数字,并将其保存在EDX:EAX寄存器对中。由于EDX:EAX寄存器对恰好是Win32平台下C+语言保存函数返回值的寄存器,所以我们可以把这条指令看成是一个普通的函数调用。像这样:inline unsigned _int64 GetCycleCount() _asm RDTSC 但是不行,因为RDTSC不被C+的内嵌汇编器直接支持,所以我们要用_emit伪指令直接嵌入该指令的机器码形式0X0F、0X31,如下:inline
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 全国粤教版信息技术八年级下册第二单元第十五课《数码显示与无线通信的实现》教学设计
- 云南经贸外事职业学院《社会问题与对策》2023-2024学年第二学期期末试卷
- 辽宁建筑职业学院《中学生物学课程标准与教材研究》2023-2024学年第二学期期末试卷
- 重庆移通学院《精细化工综合实训》2023-2024学年第二学期期末试卷
- 广西体育高等专科学校《服装美学》2023-2024学年第二学期期末试卷
- 南昌交通学院《电子科学与技术专业创新课程》2023-2024学年第二学期期末试卷
- 克拉玛依职业技术学院《新能源汽车检测与维修》2023-2024学年第二学期期末试卷
- 滨州学院《酒店电子商务》2023-2024学年第二学期期末试卷
- 重庆工程职业技术学院《现代传感器技术及虚拟仪器》2023-2024学年第二学期期末试卷
- 福建农业职业技术学院《会计学基础》2023-2024学年第二学期期末试卷
- 安徽药都银行2023年员工招聘考试参考题库含答案详解
- 小学体育与健康人教体育与健康基础知识轻度损伤的自我处理【省一等奖】
- 外贸中英文报价单模版
- 部编版二年级下册科学全册教案
- 妇产科学(第9版)第二章女性生殖系统解剖
- GB/T 700-2006碳素结构钢
- 2023年开封大学高职单招(数学)试题库含答案解析
- 建设项目委托代建合同范文(4篇)
- GB/T 13277.4-2015压缩空气第4部分:固体颗粒测量方法
- 人教版八年级下册历史全册教案完整版教学设计含教学反思
- 提高白云石配比对烧结生产的影响
评论
0/150
提交评论