桌面小工具类软件程序设计.doc_第1页
桌面小工具类软件程序设计.doc_第2页
桌面小工具类软件程序设计.doc_第3页
桌面小工具类软件程序设计.doc_第4页
桌面小工具类软件程序设计.doc_第5页
已阅读5页,还剩39页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

合肥学院数据结构与算法课程设计 0804013021 武进标合肥学院计算机科学与技术系课程设计报告20092010学年第二学期课程 数据结构与算法课程设计名称桌面小工具类软件程序设计学生姓名学号专业班级指导教师李红 沈亦军 2010年6月题目:桌面小工具类软件程序设计:在生活中,随着计算机技术的日益成熟,电脑已经越来越普及,在近期微软推出的操作系统中都增加了桌面工具栏,其中电子日历,记事本(便笺)是常用的小工具。目前流行的计算机日历程序,比较典型的是Windows各版本中的日历程序以及基础于该程序所开发的各种应用程序中的日历程序。综合所学知识,试设计完成桌面工具的开发和测试。一、问题分析和任务定义根据题目要求,该桌面工具大致可分为以下两种:一是电子日历,二是记事本。电子日历:(见表1)表1 电子日历工具名称基本功能实现用到的知识电子日历1、 判断闰年基本的C/C+知识,在功能实现上大多选用函数来实现,其中包括调用VC+库文件中的函数予以实现。2、 查询某年某月某日是星期几3、 打印某年某月的月历4、 打印某年的全年日历5、 显示今天记事本:(见表2)表2 记事本工具名称基本功能实现用到的知识记事本 1、 创建记事;利用文件予以操作。在事务管理上使用排序思想按时间先后顺序实现。2、 查看记事,3、删除记事设计时采用模块化设计思路,即具体实现每个功能的后,所用功能进行组合。解决本次设计需要解决一下几个问题:(1)对数据结构的选择;(2):对于各个功能的实现以及数据类型的选择;(3):数据输入之后以何种形式进行存储? (4):对于较多的层次结构,如何处理? (5):各个功能之间的联系和处理;(6):选用的设计语言处理好以上问题,本设计即得到大致解决。二、数据结构的选择和概要设计首先,在数据结构的选择上,包括逻辑结构和存储结构。在逻辑结构上,由于以往大部分实验使用线性结构,所以本设计仍然遵守使用线性逻辑结构。在存储结构上,大致会考虑两种情况,一是顺序存储结构,二是链接存储结构,其实现的运算大致包括查找,插入,删除等一系列操作。而上述的操作大都是对某一特定元素进行快速定位,虽然在空间性能上,顺序存储不如链接存储,但综合对时间性能的考虑,故采用顺序存储予以上述功能的实现。具体采用顺序表结构予以实现。数据结构的的定义:本程序中关于记事本的定义采用定义记事本类予以实现。记事本中存储结构的定义;根据顺序表中的定义,在对notebook类中的对象定义时,会参考关于顺序表的定义。首先会动态申请一个notebook类的动态数组。对于数组中的长度者使用与顺序表中的last含义相同的一个整型数据予以计数。该程序中为整型i;class notebook /定义一个notebook类public:notebook () /不带形参值的构造函数notebook (int year,int month,int day,int hourt,int min,string infn,int did); /带形参值的构造函数notebook (notebook p); /拷贝构造函数notebook () /析构函数void display(); /输出单个学生信息string zhuangtai();year month day hour min sec infn did对象属性note lastnotebook数据结点定义/定义得到私有成员的函数int getyear()return year;int getmonth()return month;int getday()return day;int gethour()return hour;int getmin()return min;string getinfn()return infn;int getdid()return did;/改变信息void change_year(int c_year);void change_month(int c_month);void change_day(int c_day);void change_hour(int c_hour);void change_min(int c_min);void change_infn(string c_infn); void change_did(int c_did);private: /私有成员int year,month,day,hour,min;int did;string infn;其次,在各个功能的实现上,按照所规定的功能要求具体设计算法。而在数据类型的选择上,日历和记事本都是和时间有密不可分的关系,所以对年月日时分秒均采用整型,这也是在数次实验的基础上作出的选择。具体选择的实验过程会在上机调试中予以具体阐述。在记事本功能中还要对记事内容存储,采用字符或字符串型。然后是对输入数据的存储,本次设计大都是基于文件文档进行操作。包括已存储数据的读入和读出。再者,各个功能间的衔接,采用菜单进行过渡。每个菜单亦包含其所属的子菜单。菜单与功能间实现一一对应。其菜单间的所属关系见下图:子菜单子菜单主菜单日历菜单记事本菜单返回返回退出退出开始结束菜单间的关系图再其次,各个功能间的关联和处理,大致可通过以下流程图理解(见下图):流程图文本文件12日历菜单记事菜单主菜单开始子菜单返回退出返回子菜单退出结束4帮助最后是程序设计语言的选择。鉴于所学知识,到目前为止说学习的两种编程语言:C、C+,根据以往编程的经验和心得比较,较倾向于使用C+进行编程。就个人认为,首先在对字符串的处理和文本文件的处理上,C+都比C更为优越。而本设计大多是在文本文件的基础上予以实现,所以选用C+进行编程。三、详细设计和编码:根据以上的概要分析,以上的各部分算法描述如下:(1)对记事本数据结点的初始化;在申请到内存后即对notebook结点进行初始化。使其长度为0;算法为:notebook *note=new notebookmaxsize,int i=0;(2)对日历功能的具体实现算法包括以下几方面:阳历相关闰年的判断:每400年一闰,或每4年且不为百年一闰。由此可得:闰年Leapyear= (year%4=0year%100!=0)|(year%100=0year%400=0)具体某天是星期几:由于公元1月1日设为星期六,所以只需将输入的时间与公元元年元月一日相比较中;相差的天数,即可计算出具体某天是星期几。其中要考虑到闰年一年内为366天的情况,所以在计算天数是要对年份进行判断。在计算出相隔的时间(天数)后对一周天数7取模,得几即为星期几。星期N=(相隔天数)%7;某月内最多天数不管闰平年,1、3、5、7、8、10、12,月月内为31天,4、6、9、11为30天,唯独2月,在闰年内为29天,平年为28天。具体某月的日历显示:由于具体某天对应的星期几已经得到解决,所以输出每月的日历的关键是如何按照平常所见的日历那样按周为一行输出。尤其是每月的开头空格的确定。可以由计算某天是星期几的计算公式算得。具体某年的日历显示:这更加简单。某月的日历都已经显示出来了,所以只要使用一个for循环一次输出一年12个月内每一月的日历即可。今日显示显示今日的日期,可以通过直接调用time.h头文件中关于年月日时分秒的函数即可。具体实现算法如下:time_t tval; struct tm *now; /* Get current date and time */tval = time(NULL);now = localtime(tval);/localtime()函数直接调用当前系统时间(3)记事本功能的算法实现记事本的主要功能包括创建记事,查看记事,删除记事和修改记事。创建记事:即是在顺序表的第i位置插入数据结点。逻辑地址存储空间状态anna22a11.具体算法为:note i=note data;i=i+1;创建好后,如何将创建的数据存入文本文档呢?这就要运用到文件的操作知识。首先创建一个文本输如流,将输入创建的数据存入文本文件中。ifstream f(“文本文件存储地址”,存储方式);f数据;f.close();查看记事查看记事,就是按值查找。从这方面就能看出使用顺序表的好处,当表中存在值为x数据元素时,即可快速定位改存储位置。具体实现为:从文本文件中提入到内存中,则创建一个文件输出流,再将数据元素标准输出。ofstream f(“文本文件存储地址”,存储方式);f存储数据;f.close();调出数据之后,再次调用函数display()将各个数据在屏幕中显示出来。删除记事在表中删除第j个元素;表长变为i=i-1;算法实现为:for(int k=j-1;ki;k+)notej=note j+1;i-;修改记事修改记事即是将数据结点中的数据元素值改变。本程序中会调用change_year()等改变数据的函数。算法描述为:读入要修改的数据data;notei.change(data);修改后将数据存入文本文件,采用依次将所用数据覆盖的形式存入文本文件。显示所有记事算法描述:从文本文件中将数据调入内存,从存储数据的开始到结束,即j=0开始到j=i,逐一将每一项数据显示.四、上机调试过程(1)输入过程中由于输入错误而导致的语法错误,经过仔细的修改得以改正。(2)在对notebook数据类型进行动态内存申请时,依旧使用C中malloc.h头文件中的malloc函数,在调试时,机器报错。随即该用new运算notebook note=new notebook,机器再次报错。经过分析得知:如果使用new进行内存申请,在内存申请成功后,new运算便返回一个指向新分配内存首地址。可以通过这个指针对对象进行访问。所以应该改为noteook *note=new notebook;(3)在数据的选择上,开始时间上采用整体定义一个整型time,由于在时间的输入上,包括年月日时分秒,经过计算得知至少需要一个能够表示12位数据的数据类型。而整型int则经过具体数据的测试,只能表示最多7位数据,这就不得不将时间内的年月日时分秒分开来表示。在处理字符串上,开始是采用定义字符数组,但由于C+在处理字符串上存在的巨大优越性,所以对字符串的处理采用字符串型,即string型.(4)由于本设计是分块话模式实现具体功能,所以在进行功能组合是出现一下错误:fatal error C1076: compiler limit : internal heap limit reached; use /Zm to specify a higher limit2008-12-10 19:17fatal error C1076: compiler limit : internal heap limit reached; use /Zm to specify a higher limit2008-11-07 10:45fatal error C1076: compiler limit : internal heap limit reached; use /Zm to specify a higher limit这是我从开始接触VC6.0以后第一次遇到这样的问题,通过上网查询,具体解决方案如下:工程-设置-c+选项卡,下面有个工程选项(O),在编辑框中参数最后面加上/Zm1000即可,或者/Zm2000,只要是倍数即可,微软的解释如下:/Zm(指定预编译头的内存分配限制)确定编译器对预编译头的内存分配限制。/Zm number参数 number比例因子,用于为预编译头确定编译器的内存分配限制。number 参数是默认值为 100 的比例因子,它指定内存分配为 50 MB。最大值为 2000。在早期的 Visual C+ 版本中,编译器使用了大量的离散堆,每个堆都有一定的限制。编译器现在可以根据需要使堆动态增大,只要求分配给预编译头的内存的大小固定不变。只有在极少数涉及非常大或非常复杂的程序的情况下,才会导致超出预编译头的堆大小限制。如果程序超过这些限制,请使用 /Zm 调整所有限制的总大小。大多数情况下,并不需要使用此编译器选项。如果编译程序时出现错误信息,并且该错误信息报告了 /Zm 应该具有的值,则使用此选项。在改为/Zm2000后, 重新编译,OK。编译通过。(5)在对进行字符串输入时,忽然之间进入死循环,在强制关闭调试窗口后再进行对字符串知识查阅后,得知在字符串的输入中不能够插入空格。所以在再次认真确认输入后,结果和所预料结果相同。五、测试结果及其分析:1、总菜单显示提示:包括本工具所包含的具体功能的实现;2、万年历查询系统的菜单界面2.1闰年的查询:包括是闰年和不是闰年的具体测试2.2查询具体某日是星期几2.3查询具体某月的最大天数2.4具体某月的日历显示2.5具体某年的日历显示2.6,显示今日3:记事本的主菜单的显示3.1录入信息后文本文件中数据3.2查询记事和3.1中记事本中数据的对比3.3 修改数据项后和3.1记事本文本文件中数据的对比3.4删除记事后文本文件中数据和3.3图的对比3.5显示全部记事,和3.4文本文件对比4、时间、空间性能分析:本算法的空间复杂度很低,只需要一个类似顺序表的动态数组来存储结点数据即可。时间复杂度最大位为O(n2);个人认为此时的算法时间复杂度相当的不错了。5、经验与体会:本次课程设计获得的最大经验就是对数据结构与算法这门课程有了更深一步的了解,尤其是顺序表的存储结构的认识和巩固。在此基础上,还锻炼的实际的动手操作能力和加深、巩固以前说学的编程语言知识。可以说,收益颇丰。六、用户使用说明:本编程具体是桌面小工具的实现本工具主要包括以下两大功能:第一:日历 其中包括以下功能:1、判断闰年;2、判断具体某日是星期几;3、查询某月的最大天数;4、显示具体某月的日历;5、显示具体某年的日历;6、显示今日的时间;第二:记事本其中包括以下功能:1、记事的建立;2、记事的查询;3、记事的修改;4、记事的删除;5、显示全部记事;其中在日历部分,输入的数据都是和年月日时分秒相关的整型数据,不可输入字母。而在记事本中,除时间外,还有记事的状态均为整型,记事的内容为字符串型,且字符串中不能出现空格。具体操作过程会在程序的执行过程中会用具体的提示。七、参考文献1 王昆仑,李红. 数据结构与算法. 北京:中国铁道出版社,2006年5月。2 郑莉,傅仕星. C+语言程序设计(学生用书). 北京: 清华大学出版社,2004年6月八、附录/datas.h#includetime.h/* 日期数据*/void date(int day)switch(day)case 1: coutttt endl; coutttt endl; coutttt endl; coutttt endl; coutttt endl; coutttt endl; coutttt endl; coutttt endl; coutttt endl;break;case 2: coutttt endl; coutttt endl; coutttt endl; coutttt endl; coutttt endl; coutttt endl; coutttt endl; coutttt endl; coutttt endl; break;case 3: coutttt endl; coutttt endl; coutttt endl; coutttt endl; coutttt endl; coutttt endl; coutttt endl; coutttt endl; coutttt endl; break;case 4: coutttt endl; coutttt endl; coutttt endl; coutttt endl; coutttt endl; coutttt endl; coutttt endl; coutttt endl; coutttt endl; break;case 5: coutttt endl; coutttt endl; coutttt endl; coutttt endl; coutttt endl; coutttt endl; coutttt endl; coutttt endl; coutttt endl; break;case 6: coutttt endl; coutttt endl; coutttt endl; coutttt endl; coutttt endl; coutttt endl; coutttt endl; coutttt endl; coutttt endl; break;case 7: coutttt endl; coutttt endl; coutttt endl; coutttt endl; coutttt endl; coutttt endl; coutttt endl; coutttt endl; coutttt endl; break;case 8: coutttt endl; coutttt endl; coutttt endl; coutttt endl; coutttt endl; coutttt endl; coutttt endl; coutttt endl; coutttt endl; break;case 9: coutttt endl; coutttt endl; coutttt endl; coutttt endl; coutttt endl; coutttt endl; coutttt endl; coutttt endl; coutttt endl; break;case 10: coutttt endl; coutttt endl; coutttt endl; coutttt endl; coutttt endl; coutttt endl; coutttt endl; coutttt endl; coutttt endl; break;case 11: coutttt endl; coutttt endl; coutttt endl; coutttt endl; coutttt endl; coutttt endl; coutttt endl; coutttt endl; coutttt endl; break;case 12: coutttt endl; coutttt endl; coutttt endl; coutttt endl; coutttt endl; coutttt endl; coutttt endl; coutttt endl; coutttt endl; break;case 13: coutttt endl; coutttt endl; coutttt endl; coutttt endl; coutttt endl; coutttt endl; coutttt endl; coutttt endl; coutttt endl; break;case 14: coutttt endl; coutttt endl; coutttt endl; coutttt endl; coutttt endl; coutttt endl; coutttt endl; coutttt endl; coutttt endl; break;case 15: coutttt endl; coutttt endl; coutttt endl; coutttt endl; coutttt endl; coutttt endl; coutttt endl; coutttt endl; coutttt endl; break;case 16: coutttt endl; coutttt endl; coutttt endl; coutttt endl; coutttt endl; coutttt endl; coutttt endl; coutttt endl; coutttt endl; break;case 17: coutttt endl; coutttt endl; coutttt endl; coutttt endl; coutttt endl; coutttt endl; coutttt endl; coutttt endl; coutttt endl; break;case 18: coutttt endl; coutttt endl; coutttt endl; coutttt endl; coutttt endl; coutttt endl; coutttt endl; coutttt endl; coutttt endl; break;case 19: coutttt endl; coutttt endl; coutttt endl; coutttt endl; coutttt endl; coutttt endl; coutttt endl; coutttt endl; coutttt endl; break;case 20: coutttt endl; coutttt endl; coutttt endl; coutttt endl; coutttt endl; coutttt endl; coutttt endl; coutttt endl; coutttt endl; break;case 21: coutttt endl; coutttt endl; coutttt endl; coutttt endl; coutttt endl; coutttt endl; coutttt endl; coutttt endl; coutttt endl; break; case 22: coutttt endl; coutttt endl; coutttt endl; coutttt endl; coutttt endl; coutttt endl; coutttt endl; coutttt endl; co

温馨提示

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

评论

0/150

提交评论