实习报告模板.docx

上传人:b****5 文档编号:6199614 上传时间:2023-01-04 格式:DOCX 页数:9 大小:42.71KB
下载 相关 举报
实习报告模板.docx_第1页
第1页 / 共9页
实习报告模板.docx_第2页
第2页 / 共9页
实习报告模板.docx_第3页
第3页 / 共9页
实习报告模板.docx_第4页
第4页 / 共9页
实习报告模板.docx_第5页
第5页 / 共9页
点击查看更多>>
下载资源
资源描述

实习报告模板.docx

《实习报告模板.docx》由会员分享,可在线阅读,更多相关《实习报告模板.docx(9页珍藏版)》请在冰豆网上搜索。

实习报告模板.docx

实习报告模板

中国石油大学(华东)计通学院

《软件编程实践》实习报告

 

题目:

基于QT的多功能日历

 

学号

姓名

认知实习

成绩

编程实习

成绩

总成绩

12072326

张宁

12072130

朱荣彬

1307020127

陈宇林

评语

2015年7月

一、题目介绍

(1)、背景介绍:

1、QtCreator是Qt被Nokia收购后推出的一款新的轻量级集成开发环境(IDE)。

此IDE能够跨平台运行,支持的系统包括Linux(32位及64位)、MacOSX以及Windows。

根据官方描述,QtCreator的设计目标是使开发人员能够利用Qt这个应用程序框架更加快速及轻易的完成开发任务。

在功能方面,QtCreator包括项目生成向导、高级的C++代码编辑器、浏览文件及类的工具、集成了QtDesigner、图形化的GDB调试前端,集成qmake构建工具等。

QtCreator的特点如下:

(1)、使用强大的C++代码编辑器可快速编写代码:

语言标识和代码完成功能;输入时进行静态代码校验以及提示样式;上下文相关的帮助;代码折叠;括号匹配和括号选择模式;高级编辑功能。

(2)、使用浏览器工具管理源代码:

集成了领先的版本控制软件,包括Git、Perforce和Subversion;开放式文件,无需知晓确切的名称或位置;搜索类和文件;跨不同位置或文件沿用符号;在头文件和源文件,或在声明和定义之间切换。

(3)为QT跨平台开发人员的需求而量身定制:

集成了特定于QT的功能,如信号与槽;图示调试器,对QT类结构可一目了然;集成QTDesigner可视化布局和格式构建器;只需单击一下就可生成和运行QT项目。

(4)使用拖放功能快速设计用户界面;定制widget,或从标准widget库中选择widget;以本地外观快速预览格式。

(5)通过界面原型生成C++或Java代码:

将QTDesigner与VisualStudio或EclipseIDE配合使用;使用QT信号与槽机制构建功能齐全的用户界面。

2、日历是日常生活中必不可少的,早在古代,我们的祖先就用司南计算时间。

如今21世纪,更是时间的竞赛,日历则起到重要作用。

日历可以让我们准确的掌握时间,作出计划。

日历又分为阴历阳历。

阳历亦即太阳历,其历年为一个回归年,现时国际通用的公历(格里历)即为太阳历的一种,亦简称为阳历;阴历亦称月亮历,或称太阴历,其历月是一个朔望月,历年为12个朔望月,其大月30天,小月29天,伊斯兰历即为阴历的一种;阴阳历的平均历年为一个回归年,历月为朔望月,因为12个朔望月与回归年相差太大,所以阴阳历中设置闰月,因此这种历法与月相相符,也与地球绕太阳周期运动相符合。

中国的农历就是阴阳历的一种。

随着时代的发展,尽管日历的品种增多、花样不断翻新,但仍旧保持着古老的格局。

基于这一现象,我们小组通过编写一个基于QT的日历小程序,满足人们这一方面的需求。

本设计主要详细介绍基于QT的多功能日历图形界面的设计与开发,它与人们日常生活中所使用到的电子日历的界面与功能基本相同。

例如,日历界面年月日的任意切换与更改,实现公历与农历日期的转换功能等。

而这些功能的开发都是基于嵌入式图形用户界面的。

本文主要详细介绍如何用QT代码实现多功能日历的开发与设计,并且如何最终将编译的可执行文件从Linux操作系统移植到Mini2440开发板的过程。

(二)、系统达到目标:

1、显示当月日历、当前日期、当前时间;

2、可查询任意月及任意年日历;

3、实现公历年与阴历年的转换;

4、使用图形化界面显示以及隐藏界面;

5、正常退出程序;

6、显示当日星座及当年生肖;

7、查询前一天、后一天以及回到当天。

(三)、开发环境:

QTCreator

(4)、总体设计

本系统有6个文件组成,分别为:

lunar.h、widget.h、lunar.cpp、widget.cpp、main.cpp、widget.ui。

lunar,cpp的作用是实现公历转为阴历,widget.cpp的作用是具体实现主窗体上各个构件的功能。

(5)、设计思想

1、日历是日常的桌面小工具,所以良好的人机界面

2、采用面向对象思想设计实现各种类

3、因为涉及界面,所以要运用界面设计;采用QT设计UI来做界面设计,并运用了QT槽的技术。

二、主要内容

我们开发的日历系统具有简洁方便的风格特点,并且将传统日历内容中的公历农历与当下时兴的星座生肖结合到了一起,这一点也可谓是在日历内容上的一些创新了。

主窗体可以显示在桌面,在日历上点击鼠标左键可以实现任意位置的拖动。

这一点使我们可以将日历设置在屏幕上面不同的位置,并不妨碍其它事务。

在日历上点击鼠标右键,呈现出隐藏界面和退出程序两个功能,根据具体需求可选择相应的功能。

同时选择隐藏界面后系统以日历图标的形式体现在屏幕右下角,如果想再次查询日期则在其图标上点击鼠标右键选择显示界面的功能即可实现,同时也有退出程序的功能。

系统主窗体的右边部分的第二栏有分别含有年,月,日的下拉菜单,在年份的下拉选项中含有从1900至2100的年份,在月份的下拉选项中含有从1至12的月份,同时在日期的下拉选项中则含有年月相对应的日期数。

通过相应的下拉选项可以十分快捷地查询到公历年月日所对应的农历日期和星座生肖等信息。

在下拉选项的上方显示出农历日期,分别对应这中国传统的年份与农历几月几日。

下拉选项的下方是三个功能按钮,分别是“前一天”,“后一天”和“今天”,通过选择相应的功能可以分别查询到当前日期的昨天,明天和今天的信息。

主窗体界面

 

系统总体可分为四大模块。

第一个模块是主窗体的左边部分显示的周数及其相应的日期,我们可以很方便的知道那一天是星期几。

这一模块主要是通过Qt界面工具集中的控件设置的,然后与年月日的查询语句连接到一起。

第二个模块是公历与农历的转换,也是日历系统最为关键的一个模块,同时也是难度系数最大的一块,实现此模块的算法是比较复杂的,因为联系到太多的时间转换关系,而且在转换之中并无明确的规律可循。

我们团队也是在这个模块上付出了最多的努力。

阳历,有很强的规律性。

然而阴历去分大小月,每十年有四个闰年,但哪一年为闰年是不一定的。

所以并无直接的公式,而是通过许多像万年历一样的数据实现转化。

第三个模块是“前一天”,“后一天”和“今天”的功能按钮栏,通过选择相应的功能按钮即可查询到对应的日期。

此模块主要利用了所学内容中的信号与槽的机制,通过发送一个消息让窗口得以响应Qt用信号和槽来代替指针,的确使程序更加安全简洁,更易于入手和理解。

有了这几个查询功能使日历的操作更加的人性化,体现了简洁方便的小应用风格。

第四个模块,也是最后一个模块是星座,生肖的显示与当前时间的显示。

其中星座生肖的显示以生动形象的卡通图片呈现在主窗体的右下角,更贴近时尚。

生肖逐渐被人们淡忘了,年轻的一代反而更关系星座,并将许多人物特性都与星座相联系。

我们团队通过将星座与生肖结合起来体现旨在体现传统文化与当下流行文化的联系结合,这是本日历系统的一大特色。

星座和生肖的查询是通过相应的算法实现的,其原理也是时间的相互转换,只是需要注意星座的时间段并不是每个月都是一定的,它的时间段是分散的,所以要通过具体的时间段来实现相应的查询。

当前时间则通过调用系统函数来实现的,有了它使日历的功能更为强大。

3、开发团队

成员

学号

承担的职责

详细任务

张宁

12072326

编码

前一天、后一天及回到当天,下拉菜单,日历控件的具体实现

朱荣彬

12072130

UI

界面设计及槽的具体实现

陈宇林

1307020127

编码

生肖和星座的具体实现

四、技术总结

1.使用的主要技术:

a.公历转农历算法

b.信号和槽的使用

c.UI设计

d.天干地支纪年算法

e.每秒更新时间

f.右键菜单,包括隐藏和退出

g.下拉列表框和日历控件的同步

2.遇到的技术问题及解决方法:

a.公历转农历的算法设计上遇到问题,通过网络论坛获取帮助

b.设计UI时,图标的使用遇到问题,通过请教老师获得了解决办法

c.设计算法时,闰年二月和非闰年二月的天数显示出现问题,为了解决这个问题,我们首先查询了关于闰年的资料,在此基础上,结合自己的算法作出修改,最终成功设计了算法并通过了测试

d.刚启动应用程序时,时间不显示的问题,我们通过为时间空间加计时器的方法解决了此问题

e.刚开始做题目时,搞得各个信号和槽的联系很乱,哪个信号控制哪个槽弄得比较模糊,导致后期出现较多的错误,因此,前期的分析设计很重要,如果能够把前期的分析设计做好,那么后期的编码会变得很容易

f.下拉列表框的数据和日历控件的数据同步问题,通过查阅资料解决了此算法问题

3主要代码:

公历转农历(部分代码):

intLunarCalendarX(intyear,intmonth,intday,int&lunaryear,int&lunarmonth,int&lunarday,unsignedint&LunarCalendarDay)

{intSpring_NY,Sun_NY,StaticDayCount;

intindex,flag;

//Spring_NY记录春节离当年元旦的天数。

//Sun_NY记录阳历日离当年元旦的天数。

if(((LunarCalendarTable[year-BEGIN_YEAR]&0x0060)>>5)==1)

Spring_NY=(LunarCalendarTable[year-BEGIN_YEAR]&0x001F)-1;

else

Spring_NY=(LunarCalendarTable[year-BEGIN_YEAR]&0x001F)-1+31;

Sun_NY=MonthAdd[month-1]+day-1;

if(((year%4==0&&year%100!

=0)||year%400==0)&&(month>2))

Sun_NY++;

//StaticDayCount记录大小月的天数29或30

//index记录从哪个月开始来计算。

//flag是用来对闰月的特殊处理。

//判断阳历日在春节前还是春节后

if(Sun_NY>=Spring_NY)//阳历日在春节后(含春节那天)

{

Sun_NY-=Spring_NY;

month=1;

index=1;

flag=0;

if((LunarCalendarTable[year-BEGIN_YEAR]&(0x80000>>(index-1)))==0)

StaticDayCount=29;

else

StaticDayCount=30

同步下拉列表框和日历控件:

/**

*@briefWidget:

:

DateChanged

*1.显示农历日期

*2.显示对应的下拉列表框的日期

*/

voidWidget:

:

DateChanged()

{

m_Calendar->setFocus();

intyear=m_Calendar->selectedDate().year();

intmonth=m_Calendar->selectedDate().month();

intday=m_Calendar->selectedDate().day();

intlunaryear=0,lunarmonth=0,lunarday=0;

QStringlunarstring=GetLunarStringX(year,month,day,lunaryear,lunarmonth,lunarday);

SetLunarShow(lunaryear,lunarstring);

SetZodiac(lunaryear);

SetStar(month,day);

if(m_YearComboBox->currentIndex()+BEGIN_YEAR==year&&m_MonthComboBox->currentIndex()+1==month

&&m_DayComboBox->currentIndex()+1==day)return;//+1的原因是年月日的索引值从0开始

m_YearComboBox->setCurrentIndex(year-BEGIN_YEAR);

m_MonthComboBox->setCurrentIndex(month-1);

m_DayComboBox->setCurrentIndex(day-1);

}

/**

*@briefWidget:

:

SetCBDay

*对下拉列表框的day属性进行赋值

*先判断是不是闰年,闰年要在2月份的列表框中多加一个29

*/

voidWidget:

:

SetCBDay()

{

m_Calendar->setFocus();

intyear=m_YearComboBox->currentIndex()+BEGIN_YEAR;

intmonth=m_MonthComboBox->currentIndex()+1;

inttmpdayindex=m_DayComboBox->currentIndex();

m_DayComboBox->clear();

for(intday=1;day<=daynum[month-1];day++)

{

m_DayComboBox->addItem(QString:

:

number(day));

}

if(month==2&&((year%4==0&&year%100!

=0)||year%400==0))

{

m_DayComboBox->addItem(QString:

:

number(29));

}

if(m_DayComboBox->count()>tmpdayindex)m_DayComboBox->setCurrentIndex(tmpdayindex);

elsem_DayComboBox->setCurrentIndex(m_DayComboBox->count()-1);

}

5、心得体会

心得体会(朱荣彬)

经过十天的实习,我从刚开始对QT的一无所知,经过老师的讲解,现在我对QT一些功能有了基本的了解,这几天我们学习了界面UI的设计,窗口部件及其功能,事件系统,如何用qmake,make等命令行代码创建ui文件,网络编程和进程、线程的基本内容。

这次实习的任务是用QT做一个小程序,我们组讨论决定做一个日历程序,在编写过程中我认识到了团队合作在软件编程中的重要性,合理的分工,严谨的态度以及队员之间的相互帮助,碰到不会的地方与出错的地方我们先是组内相互讨论,再不会的就上网查找这方面的原因以及求助其他组的同学和老师。

组内的其他成员也让我看到了他们身上的闪光点,我虚心向他们请教,这也让我的编程技术有了显著提高。

我们小组内每个人认真做好自己负责的部分,精诚合作,最终才能做出高质量的程序。

理论结合实践才能更好的理解知识,通过自己动手编程,不仅让我对这几天学习的QT的知识有了更深刻的理解与记忆,也让我对学习的C++的知识有了更深刻的理解,纸上学来终觉浅,绝知此事要躬行,自己动手写了,才知道自己有很多方面的不足,有很多需要改善的地方。

也只有动手写了,才能了解软件专业这一行业的情况。

十天的时间,一天天的付出与努力才换来了收获和成果,让我更加珍惜这次的实习,自己动手做出来的程序,看着他能够正常运行,也让我尝到了成功的喜悦,感谢老师给我们这次实习的机会和对我们的悉心教导,这对我以后的道路是一笔财富,使我能更好的发展。

心得体会(张宁)

通过这短暂的10天的实习,我感觉自己收获颇丰具体可以分为以下几点来阐述

1.对QT有了初步的了解,这次实习,我们小组通过基于QT的多功能日历这个题目对QT的使用有了一个初步的认识,了解到了其作为UI设计方面的便利性与强大,这对以后的工作学习都会有很大的帮助,会使我们增加一项技能,也多了一种解决问题的途径和方法,这对于我们来说是一项极大的财富

2.通过这十天的实习,我感觉自己对C++这门编程语言有了更加深刻地了解,以前感觉C++很晦涩,尤其是指针这一块,但是经过这段时间的应用,我终于感觉到了其中的乐趣与精髓

3.通过这段时间的实习,我认识到了软件开发过程中小组合作的重要性,一个团队的强大才是真正的强大,只有每个人做好自己应该做的工作,我们的开发才能顺利,最终的成果的质量才能比较高,只有我们每个人在团队中正视自己的角色并且真正扮演好自己的角色,团队才能持久发展。

4.代码是敲出来的,切莫眼高手低,好高骛远。

不亲手编写程序,那么我们的编程能力就永远也不能提高,只有真正动手做了,才能真正的体会到其中的精髓,才能让自己更快更健康的进步。

这对于我们日后的发展有着极为重要的作用

总之,感谢几位老师在这段时间的悉心教导,希望这次实习能成为我前进道路上的重要基石,是自己更好更快的发展

心得体会(陈宇林)

十天充实的学习时光就这样过去了,伴随着付出的辛苦与收获的喜悦,亦是一种成长的快乐。

身为学生的我们实践的机会是比较少的,所以此次编程实践也是一次难得的好机会。

“纸上得来终觉浅,觉知此事要躬行”,在实践中,我们检验真理,发现真理,创造真理。

C++是我掌握的最好的一种编程语言,并且一直都习惯用c++写程序,所以对此次的实习更加的有信心。

然而计划似乎永远赶不上变化,此次的实习是使用Qt这种跨平台C++图形用户界面应用程序开发框架。

起初几天老师对学习内容进行了详细讲解,才突然意识到自己现有的知识是远远不够的,每一天都有许多新的内容学习并立刻运用,自己有点跟不上节奏,于是只得将娱乐休息的大部分时间也用来学习,这真是一种挑战。

知识往往经过实践之后,就会使人更能感受到它的真滋,同时小学期实习也让我品位了一番美妙的滋味,在短时间内学到了丰富的知识。

讲授结束之后,我们分了组进行项目实践,这也是以往少有的学习模式,我们组首先是一起进行了需求分析,着重把需求结构理清,然而大家分配好任务进行日历系统开发的项目。

我真的很享受一个团队里的合作,在这里我们是作为一个整体进行任务,大家齐心协力,为着同一个目标而不懈地努力,这种感觉真好。

当然这之中会遇到许多不小的挑战,比如公历与农历的转换就是如此,我们进行了很多的探讨,构思,在这一点上付出了很多的努力。

渐渐深入进行之后,发现其实程序语言与生活中的语言有相通之处,做好一个项目和表达清楚一件事都需要有一个清晰完整的结构和紧密的逻辑联系将每个点串联完整,面向对象语言使程序层层相扣,联系相当紧密。

Qt特点在于它的真的足够强大,使人易于把握全局,里面提供了很多工具,同时它的UI的开发也极为便捷。

在学习过程中,我也对类,对象,函数,信号与槽的机制,布局管理器,UI文件等知识有了更深刻的认识,把这些内容结合起来进行一个项目是一件具有挑战同时也是值得高兴的事情,对我们的能力有了极大的提高。

我经常在思考究竟该如何学习一门语言,此次的实习让我相信更应该从逻辑思维入手,也理解了老师讲到的“学习一门程序语言最好去读读它的发明者写的书”,其实也是,正如学习英语一样,你要去了解英国人的思维模式,才能更好地运用语言本身,编程语言亦是如此。

感谢这次实习经历,对我今后深入编程语言有了极大的帮助。

短时间内学习到大量新的知识,并且将其运用于实践之中不得不说是一次挑战。

成长,就在这自我的挑战之中。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > PPT模板 > 其它模板

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1