C语言课程设计报告-虚拟图书馆导示系统设计报告.doc_第1页
C语言课程设计报告-虚拟图书馆导示系统设计报告.doc_第2页
C语言课程设计报告-虚拟图书馆导示系统设计报告.doc_第3页
C语言课程设计报告-虚拟图书馆导示系统设计报告.doc_第4页
C语言课程设计报告-虚拟图书馆导示系统设计报告.doc_第5页
已阅读5页,还剩71页未读 继续免费阅读

下载本文档

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

文档简介

C课设报告 华中科技大学控制科学与工程系C语言课程设计报告虚拟图书馆导示系统 专 业:自 动 化 班 级:自动化1006班 组 员: 指导教师: 1引言- 3 -1.1任务背景- 3 -1.2设计目标- 3 -1.3需求分析- 3 -1.4出错处理- 4 -2系统设计分析- 5 -2.1程序流程图- 5 -2.2函数块说明- 6 -2.3重要变量说明- 6-2.4重要数据结构- 6-2.5核心算法分析- 7 -3功能及操作介绍- 8 -4参考资料- 14 -5程序设计心得- 17 -6附录(源代码)- 19 -1引言1.1 任务背景随着计算机技术的迅猛发展,特别是网络技术、数码存储与传输技术等的全面普及,使得人们对文献信息的加工、存储、查询、利用等方面有了新的要求。因此,虚拟图书馆也就应运而生。虚拟图书馆是一个驱动多媒体海量数字信息组织与互联网应用问题各方面研究的技术领域。简单地说,几乎图书馆的所有载体的信息均能以数字化的形式获得,包括所有联机采购、编目、公共查询;对各种信息资源的检索,通过网络组织读者访问外界数字图书馆和文献信息数据库系统,如电子杂志、电子图书、声像资料、动画片、影视片、多媒体资料等;用计算机系统管理图书、期刊等的读者服务;图书馆利用网络连接到全球各个角落,让人们很方便地共享资源。虚拟图书馆具有同传统图书馆不同的功能和特征。在馆藏建设,读者服务等方面都有了新的发展。由于虚拟图书馆以网络和高性能计算机为环境,向读者和用户提供比传统图书馆更为广泛、更为先进、更为方便的服务,从根本上改变了人们获取信息、使用信息的方法,较之传统图书馆具有很大的优势。另外,虚拟图书馆还能有效的解决传统图书馆中破损、遗失、逾期不还等各种问题。身处控制系的我们有愿望去实现简单的虚拟图书馆导示系统,因此在我们首个课程设计-C语言课程设计中我选择了虚拟图书馆导示系统这个题目。也也以此来锻炼锻炼自己的编程能力。1.2 设计目标我设计的虚拟图书馆导示系统要能基本模拟现实中图书馆的功能,并在此之上实现它的智能化,界面友好,操作方便,在BC或TC编译环境下工作。此次C语言课程设计是本专业的第一次课程设计,具有重要的意义:通过上个学期对C语言的学习,对C语言编程有了初步的了解,获得了一定的基础但是非常缺乏实际的编程经验,无法从质上对自己的编程技巧有一个很大的提高,这次的课程设计给我们提供了一个非常好的锻炼机会。在实际中运用和训练程序设计的模块化和工程化思想和技术,努力掌握C语言精髓;同时提高自己的交流与团队合作的能力.为以后的更专业更复杂的课程设计和实践活动打好基础。1.3 需求分析此虚拟图书馆导示系统的主要操作工具是鼠标,通过鼠标在主界面上点击按钮来实现虚拟图书馆的导示作用,力求对现实图书馆的模拟,但是由于设计者水平有限,很多现实中图书馆的功能作用无法实现,在这种情况下虚拟图书馆导示系统可能不是最完美的,但是已经可以模拟现实图书馆的主要功能在阅览室中的图书查阅,图书检索等。在设计过程中我充分考虑到人性化设计,设置了帮助界面和虚拟图书馆平面图界面来指导使用虚拟图书馆导示系统,使得使用者可以快速运用虚拟图书馆导示系统进行图书的查阅。1.4 出错处理 如果程序一开始就无法进入主界面,有可能是没有将图形驱动装入所设定的路径中,此时将EGAVA文件放入工程所在文件夹再运行。 如果程序进入主界面后没有鼠标出现,并显示Mouse or Mouse Driver Absent,P1ease install!,有可能是电脑没有安装鼠标,接入鼠标后再重新运行。 如果程序进入图书界面或搜索界面后停止,并显示“out of memory”,有可能是内存分配不足,无法将图书信息录入链表,此时应该关掉工程重新开始运行。 如果程序进入主界面后无法显示汉字,有可能是汉字库文件未找到,此时将汉字库文件hzk16放入工程所在文件夹再运行。 如果程序进入图书界面或搜索界面后自动退出,并显示”cant find it”,有可能是未找到存放图书信息的文件,无法将图书信息录入链表,此时应该将图书信息文件命名为book.txt并放入工程所在文件夹再重新开始运行 如果图书界面中书名或图书信息显示乱码,有可能是文件book.txt中图书信息存储的格式错误或遗漏某图书某项信息,更正后再运行 2系统设计分析虚拟图书馆主体检索界面图书查阅界面(根据选择显示不同分类的图书菜单)进入主界面一楼二楼三楼图书馆平面图帮助电梯电梯电梯阅览室(根据选择进入不同分类的阅览室)退出动画图书菜单图书信息输入检索结果选择程序结束2.1程序流程图 2.2函数块说明 导示系统模块( guide.c)其主要是实现虚拟图书馆的导示功能。它引领使用者进入虚拟图书馆,虚拟图书馆分三个楼层,使用者可以通过电梯在三个楼层中自由移动。使用者用过点击不同的阅览室进入不同的阅览室。 画图函数集合(image.c)其主要功能是tc画图。画出虚拟图书馆导示系统各个主要界面的背景图像及按钮。其中包括主界面,图书馆一楼,图书馆二楼,图书馆三楼,电梯窗口,阅览室界面。 页面转换模块此模块主要嵌入在导示系统,图书检索系统,图书阅览系统及其他功能函数中,用来进行各个功能的调用或不同界面的转化。 鼠标模块(mouse.c)鼠标初始化;鼠标的显示;鼠标状态的读取。 汉字显示模块(chinese.c)在西文dos环境下输出汉字。利用16*16汉字库调用,在图形界面下打点显示汉字。 图书阅览模块(book.c)其主要是实现图书列表和图书详细信息的显示。在使用者通过导示系统进入阅览室后,选择放有某一类图书的书架,即进入图书阅览界面。图书阅览系统显示当下类别书架上的该类图书列表,使用者通过鼠标翻页、选择,阅览所选中书的详细信息。 图书检索模块(search.c)其主要是实现对图书的检索和检索结果的显示。在图书检索界面上方键入搜索内容并选择检索方式,按enter键开始搜索,并在下方显示检索结果。 其他功能模块(more_func.c)其主要包括虚拟图书馆平面图,帮助界面和退出动画。虚拟图书馆平面图界面主要显示各个楼层的阅览室分布及各个阅览室的藏书内容简介;帮助界面显示帮助信息;退出动画。2.3重要变量说明int x ,y ,buttons在所有的主要函数块中表示代表鼠标状态的位置坐标和按键状态。char sort8620表示给不同阅览室中的不同书架的分类标识的汉字字符串。int num_x表示当下所在的阅览室房间号,也是图书位置坐标之一。int num_y表示在阅览室中选择的书架号,也是图书位置坐标之一。struct book *head用来指向已录入的图书链表的头结点。FILE *fp表示各种打开的文件。包括汉字库文件,图书信息储存文件等。int pagecount_1 , pagecount_2 , newrow , row表示图书界面中图书菜单的页数,图书信息的页数,新选择的图书菜单的行数,图书菜单的行数。struct *hMAX_BOOKSTAND 用来存储当下书架上的所有图书的结构指针。int mode在检索系统中表示当下搜索的方式。int key表示接收到的按键值。int count表示搜索到的图书数量。说明:在程序中会有很多的变量,我们尽量让读者一眼就能看出其含义,所以变量名较长。还有些变量名可能名得不规范,可能会给程序的可读性带来不便。2.4重要数据结构主要使用的数据结构是链表,用于存储图书信息。定义如下:struct bookint num; /书号char nameMAX_BOOK_NAME; /书名char pinyin_name60; /书名拼音char writerMAX_BOOK_WRITER;/作者char pinyin_writer40; /作者拼音char pressMAX_BOOK_PRESS;/出版社long time; /出版时间char keyword40; /关键词char infoMAX_BOOK_INFO;/图书简介char listMAX_BOOK_LIST;/图书目录struct book* next; /指向下一本图书;对于链表的操作主要有新建,查找和删除。分别由load_book() , find_book() , clear_book()三个函数实现。2.5核心算法分析1、导示系统模块该模块主要是依靠调用各界面的画图函数来显示虚拟图书馆的内部场景的模拟,就好像置身于一个现实的图书馆。各个场景的互相切换依靠的是不断调用鼠标函数读取鼠标状态,以条件语句的方式调用各个功能或界面。在楼层和阅览室的相互切换中,通过一个参数(num_x ,代表阅览室房间号)的传递来确定进入哪个阅览室或返回第几层。2、图书阅览系统要把图书的所有信息显示出来,首先要把图书信息定义成一个结构,但虚拟图书馆的书籍太多,不可能用一个结构数组把它们储存起来,所以此时就要运用链表来储存所有图书的信息。图书信息大多由中文显示,但在西文dos环境下难以输入汉字,只能输出汉字,所以图书信息就无法在程序运行中录入。而把所有图书信息写在源代码中这种方式在图书数量较多的情况下是不实际的。所以,只有通过读取储存图书信息的文件到链表的方式。首先建立一个txt文件,在txt文件中按一定格式输入每本图书的各项信息,在程序运行时直接逐项读取该文件的信息到链表,生成一个图书信息的结构链表。这样就可以进行对图书信息的各项操作了。得到图书链表后,根据传入的参数num_x(阅览室号) , num_y(书架号)生成图书的位置编号num,然后在图书链表中抽取相应图书的结构指针形成一个结构数组,这个结构数组包含该书架的所有图书。然后在界面左边的图视口依次输出图书的名字,用变量page_count1记录菜单翻页情况,用变量newrow记录鼠标选取了菜单的哪一行,在右边图视口根据page_count1和newrow计算出相应图书并输出信息,用page_count2记录图书信息的翻页情况。退出图书阅览界面时清空链表。3、检索系统模块首先录入图书信息到链表中。用变量mode记录当下选择的搜索方式,利用input函数显示使用者输入的字符串并储存传入搜索函数,对图书链表进行查找,搜索函数的核心是findchar函数,算法是依次比较传入的字符串和图书结构中的字符串,查找字符串str是否在source中。如果相符就输出这个图书结构的各项。退出检索界面时清空链表。3功能及操作介绍界面1主界面在主界面,下方有五个选项,用鼠标点击即可进入相应界面。界面2图书馆一楼界面点击“进入”后即进入虚拟图书馆一层,这里有两个阅览室和电梯,点击阅览室的门就可进入相应阅览室;如果没有你要进入的阅览室就点击电梯门,此时弹出一个洋红色的电梯界面,左侧的数字表示你所在的楼层,点击右侧楼层选项即可到达相应楼层,点击右上角叉叉退出电梯界面。界面3图书馆二楼界面通过电梯进入图书馆二楼界面,同一楼一样,点击阅览室门进入该阅览室。点击下方的“电梯”按钮弹出电梯界面。界面4图书馆三楼界面(类似二楼界面)界面5阅览室界面点击阅览室房间门后进入阅览室界面。这里有六排书架,它们上面放着不同类别的图书,书架所放图书的类别标注在书架上方。点击书架即可进入相应类别图书的阅览界面。点击右下角的“返回”,返回楼层界面。界面6图书阅览界面点击书架后即进入图书阅览界面。左侧是图书清单,可以点击“上页”“下页”进行翻页,点击某本书后,右侧出现该书详细信息,共有三页,点击右侧的上下箭头标识进行翻页阅览。点击右上角叉叉返回阅览室界面。界面7图书检索界面在主界面点击“检索”按钮进入图书检索界面。界面上有一个编辑框,首先在编辑框下选择检索方式,然后点击编辑框,此时鼠标消失,开始键盘录入字符(只支持数字和小写字母),编辑过程中可以按删除键删除字符,按退出键取消这次编辑并返回,按回车键完成编辑并检索输入的字符串。检索后,编辑框下方显示检索结果。搜索结果包括书名、作者、出版日期和在图书馆的位置。按界面右下角“返回”退回主界面。界面8图书馆平面图界面在主界面点击地图进入图书馆平面图界面,点击右方楼层选项选择查看该楼层平面图,点击平面图上的阅览室可以快速进入该阅览室,平面图下方有对图中阅览室的简介。点击右下角“返回”退回主界面。4参考资料王士元. C高级实用程序设计. 北京: 清华大学出版社. 1996周纯杰,刘正林等. 标准C语言程序及应用. 武汉: 华中科技大学出版社. 2005谭浩强. C语言程序设计. 北京: 清华大学出版社. 2000蒲斌. C游戏编程 从入门到精通. 北京:北京希望电子出版社. 2002梁旭,谷晓琳,黄明. C语言课程设计. 北京:电子工业出版社. 2009另外,互联网也给与我很大帮助。5程序设计心得在本次c语言课设中,遇到过很多的问题,诸如error的调试,常常一个error连续几天都调不出来。自己一个人苦思冥想,到最后突然一下子就又把问题解决了。最大的苦难莫过于最初做出来的东西有些功能无法实现,不得不舍弃之前辛苦做的全部,寻找新的方法来实现这些功能。不过最后把全新的东西做出来之后,感觉还是很欣慰很值得的。通过课程设计,我们学到了不少东西,不仅是c语言的知识,方法,技巧,更多的是我们在学习过程中掌握的一些学习的技巧,手段和方法。C语言课程设计当中的大部分东西对于我们来说动都是全新的,在之前我们只是知道了最简单的c语言但中的各种操作,可是现在要求我们能够使用高级c编写一个现在来说已经是很大的一个程序。这绝对是一个挑战。而且我们的课设时间又是很长的,又没有老师实时监督,在大部分同学都是刚开始能够带电脑来校的情况下,要静下心来编程,这同样是一个很不小的挑战。很幸运的,我么都克服过来了。作为一个大学生,我们知道自己来学校的目的是做什么的,我们没有时间用来荒废,我们必须好好抓紧每一分每一秒,来充实壮大自己。而通过对一个全新的任务的实现,我们喊好的锻炼了自己的学习能力。我们来到学校的时候,可能说智商什么的都不会要太大的差异,可是在自学能力上,我是很有体会的,大家的差异是很明显的。然而不管在什么情况下,良好的自学能力都是十分重要的,这次课程设计正是很好的锻炼了我们的自学能力。正如有个学长曾经说过的一句话:“经历了C语言课程设计以后,你会发现你的C语言编程能力以到达一个以前完全不能相比的高度”。课程设计虽然结束了,但是它给我们带来好处是很多的,影响是很远的,我们感觉到,只有认真的完成这样的任务,才会在实践中有所提高,因此,我们应该在以后的学习中更加重视动手能力,学会在动手中发挥自己的想像,与所学的东西结合,学会创新,这个才是我们大学学习的真正目的所在。 6附录(源代码)头文件library.h/*常量定义*/#define MAX_BOOK_NAME 30 /书名最大长度#defineMAX_BOOK_WRITER 20 / 作者最大长度#define MAX_BOOK_PRESS 30 /出版社最大长度#define MAX_BOOK_INFO 300 /图书简介最大长度#define MAX_BOOK_LIST 300 /图书目录最大长度#define MAX_BOOKSTAND 150 /单个书架藏书最大量#define Key_Enter 0x1c0d #define Key_BackSpace 0x0e08#define Key_Esc 0x011b# define PI 3.14/*结构体类型定义*/struct bookint num; /书号char nameMAX_BOOK_NAME; /书名char pinyin_name60; /书名拼音char writerMAX_BOOK_WRITER;/作者char pinyin_writer40; /作者拼音char pressMAX_BOOK_PRESS;/出版社long time; /出版时间char keyword40; /关键词char infoMAX_BOOK_INFO;/图书简介char listMAX_BOOK_LIST;/图书目录struct book* next; /指向下一本图书;/*函数声明*/void enter();void draw_enter(int a);void floor_1();void draw_floor_1();void lift_1(int x0,int y0,int buttons0);void draw_lift_1();void floor_2();void draw_floor_2();void lift_2(int x0,int y0,int buttons0);void draw_lift_2();void floor_3();void draw_floor_3();void lift_3(int x0,int y0,int buttons0);void draw_lift_3();void room(int num_x);void draw_room();void sort(int num_x);struct book *load_book();void find_book(int num_x,int num_y,struct book *head,struct book *h15);void clear_book(struct book *head);void bookmenu(int num_x,int num_y);void viewport_1(int page,struct book *h);void viewport_2(struct book *h,int page);void searchmenu();void draw_searchmenu();int input(char str);void xiaoguangbiao(int x, int y);void guangbiao(int x, int y);void search_by_name(char *str, struct book *head);void search_by_writer(char *str, struct book *head);void search_by_time(char *str, struct book *head);int findstr(char* source, char* str);void map();void map_1();void draw_map_1();void map_2();void draw_map_2();void map_3();void draw_map_3();void help();void bye();void starflower();void draw_bye();void chinese(char *s,int size, int x,int y,int color);void get_hz(FILE *hzk_p,char incode,char bytes);void dishz(FILE *hzk_p,int x0,int y0,char code,int color,int size);FILE *open_hzk();void init();int read(int *mx,int *my,int *mbutt);void cursor(int x,int y);void newxy(int *mx,int *my,int *mbutt);1、guide.c/导示模块#include#include#include#include#include#include#include#include#includelibrary.hvoid main()enter();/主函数直接进入主界面void enter()int buttons,x=640,y=480;draw_enter(1);/画主界面的图形/*鼠标的操作*/init();/初始化鼠标cursor(x,y);/显示鼠标for(;) newxy(&x,&y,&buttons);/读取鼠标状态并在当前位置画鼠标if(x=300& x=420&y=360& x=420&y=420& x=420&y=480& x=420&y=540& x=420&y=470& x=410&y=42& x=144&y=210& x=146&y=540& x=145&y=395& x=145&y=320& x=160&y=200& buttons)for(i=0;i6;i+)for(j=0;j=320& x=220&y=260& buttons)for(i=0;i3;i+)for(j=0;j=96& x=112&y=384& x=144&y=544& x=121&y=400& x=410&y=470& x=410&y=395& x=145&y=320& x=160&y=200& buttons)for(i=0;i3;i+)for(j=0;j=320& x=280&y=320& buttons)for(i=0;i3;i+)for(j=0;j=96& x=112&y=380& x=144&y=512& x=138&y=400& x=410&y=470& x=410&y=395& x=145&y=320& x=220&y=260& buttons)for(i=0;i3;i+)for(j=0;j=320& x=280&y=320& buttons)for(i=0;i6;i+)for(j=0;j=570& x=440&y=479& buttons)if(num_x200)/如果阅览室在一楼,则返回一楼界面closegraph();floor_1();else if(num_x=83& x=154&y=122& x=141&y=166& x=128&y=224& x=109&y=294& x=86&y=416& x=48&y=416& buttons)closegraph();bookmenu(num_x,1);void sort(int num_x)/书架分类 char sort8620=数学,物理学,化学,生物学,计算机,天文学,史学理论,各国历史,文物考古,人物传记,地理,古籍,马列毛邓,政治,法律,宗教,军事,教育,哲学理论,世界哲学,文学理论,各国文学,美学,心理学,社会科学,自然科学,文学,计算机,其他,报纸,建筑设计,艺术理论,绘画书法,音乐舞蹈,雕塑摄影,其他,英文,德文,法文,日文,俄文,其他,基础理论

温馨提示

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

评论

0/150

提交评论