菜单系统

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

实训一光标漫游⒈问题在25行80列的显示屏内,通过按键“→、←、↑、↓”来改变光标的位置,如按“→”键则光标往右侧走一列,按“↑”键则光标往上走一行的位置,最终通过“Esc”结束程序。⒉边界问题要处理好特殊情况:①光标在第一行,再按“↑”键时;②光标在第一列,再按“←”键时;③光标在第25行,再按“↓”键时;④光标在第80列,再按“→”键时。⒊边界问题处理采用折返的方式:①光标在第1行,再按“↑”键时进到第25行;②光标在第1列,再按“←”键时进到第80行;③光标在第25行,再按“↓”键时进到第1行;④光标在第80列,再按“→”键时时进到第1列。⒋实验基础①注意查看conio.h,conio.c中的函数:clrscr()清屏KeyValueStrukbhit()读键(返回虚键和字符的Asc码)voidgotoxy(intx,inty)定位光标到相应行和列②注意查看与conio.c中的结构与常量://kbhit()返回的读键结构typedefstructKeyValueStru{WORDVKey,AscChar;};⒌实验步骤运行“光标漫游示例.EXE”了解需求,看源码“读键光标颜色示例.cpp”了解基本编程。①编一小程序(用kbhit())获得特殊键“→、←、↑、↓”“Esc、回车”等的虚键值和Asc码值,并记录以备后用;②写出光标漫游的算法(保存,用类自然语言描述,用word,与同学、老师讨论算法的可行性与正确性);③在②初步正确的基础上,编写C语言源程序;④如发现算法问题,用调试器调试;①完成本实验的实验报告。6.要点光标如何根据所按的键跟随?折返如何处理?x=(x+1)%25;7.该实验与大实验的关联性请大家体会主菜单“实验蓝本.exe”的处理过程。附件:实验报告内容①问题②设计要点及算法③源程序④运行结果⑤使用调试器状况和经验总结⑥使用体会和总结实训二色彩处理及方框显示⒈问题在显示屏显示各种形状的方框(大小不一)。┬──┬┌───┐││││└──┘└───┘等实验中可用1,2,3,4,…,9,0等来代替(也可复制“实验用蓝本结构代码.cpp”文件中的S_S_Box等数据),如:122222223455555556455555556455555556455555556788888889由于我们的实验在控制台的环境下仿真(不能正确显示出制表符号),C-Free对图标符号的显示变成了相关汉字。我们在上述实验的基础上,采用“空格”+“颜色”的方式来实现方框。⒉实验基础①注意查看conio.c中的函数:voidtextattr(int_attr)设置前景和背景颜色voidtextcolor(int_color)设置前景颜色voidtextbackground(int_color)设置背景颜色②注意查看与conio.c中的结构与常量://颜色常量enumCOLORS{/*darkcolors*/BLACK,BLUE,GREEN,CYAN,RED,MAGENTA,BROWN,LIGHTGRAY,/*lightcolors*/DARKGRAY,/*lightblack*/LIGHTBLUE,LIGHTGREEN,LIGHTCYAN,LIGHTRED,LIGHTMAGENTA,YELLOW,WHITE};⒊实验步骤①编写小程序,用textattr(int_attr)函数来设置(_attr是按字节组织,高4位表背景景,低4位表前景色),后用输出字符串语句输出,体验用textattr的作用;②写出显示方框的算法(注意模块化);③在②初步正确的基础上,编写C语言源程序;④如发现算法问题,用调试器调试;⑤完成本实验的实验报告。实训三主菜单的显示与选择⒈问题在屏幕上显示下列菜单,并能通过“→、←、↑、↓”来切换菜单项。如初始显示为:当按“→”键时,变成:再按“→”键时,变成:⒉实验基础本实验是实验一加颜色处理的方法来实现,所以本次实验的基础大家都具备。运行“主菜单演示.exe”体会编程,大家可在“实验用蓝本结构代码.CPP”上来编程。⒊实验原理如何来实现菜单项的切换是本实验的技巧。假定我们用一变量mi来指向当前选中的菜单,当按“→”键时,我们用“未选中的颜色”来定位重写“File”的串,使菜单变成:FileEditRunCompileProjectOptionsDebugFileEditRunCompileProjectOptionsDebugFileEditRunCompileProjectOptionsDebugFileEditRunCompileProjectOptionsDebugmi,MenuIndex的缩写FileEditRunCompileProjectOptionsDebugmi,MenuIndex的缩写然后是按键处理后,mi修正为1,然后用“选中的颜色”定位重写“Edit”,变成上图的效果,实现了菜单项的动态切换。⒋实验步骤①在word上写出算法(其中主菜单的字符串数据放在数组中)。②思考……③提问④算法正确后再编写程序。⒌完成实验报告FileEditRunCompileProjectOptionsDebugmi实训四菜单数据的组织⒈问题看实例“实验蓝本.exe”,思考菜单数据如何组织?数据的组织与菜单显示之间怎么关联?⒉菜单的逻辑结构图⒊数据的组织结构//菜单结构体定义typedefstructMenuItemStru{ShortIntSubMenuItemCount;//子菜单的数目ShortIntSubMenuItemWidth;//子菜单的宽度MenuItemStru*SubMenuItemAddr;//子菜单数据结构地址ShortIntMenuItemStrWidth;//菜单项字符串长度char*MenuItemStrAddr;//菜单项的字符串地址};⒋菜单数据的组织看“实验用蓝本结构代码.cpp”⒌理解菜单数据组织与程序的关系⒍改进实训练三①掌握结构体变量和指针的使用;如MainMenu[i].MenuItemStrAddr②在一循环中用结构体变量或指针来访问相关参数;③在循环中加入打印字符串语句,显示出主菜单;④加入颜色等,实现主界面。实训五菜单系统的设计整个菜单系统的设计需要进一步抽象。设计时要考虑扩展性和通用性的问题:菜单数据的改变,如我们的实例中只有3层菜单,如果把菜单数据增加到4、5等层次菜单时,你所编写的程序代码在只允许修改菜单数据,而不允许修改所有的函数的情况下,你的设计是否能达到此目标?要实现上述目标,必须对处理过程进行抽象。菜单系统总体上应该如此实施:①显示主菜单;②读键(暂定有效键为“→、←、↑、↓、Esc、Enter”);③处理有效键。④反复执行②③。特别要注意整个程序中只有一处读键的地方。由于菜单系统选择的层次性,我们必须对菜单选择的(中间)过程进行有效保存,以便回溯。如当我们进入主菜单项的“Options”→“Compiler”→“Compiler”的子菜单,当我们用“Esc”键时可以回退到“Compiler”状态,从“Compiler”还可以回退到“Options”状态。为有效管理这种选择状态,我们必须对选择状态加以保存。我们采取以下结构体来保存选择的历史信息:typedefstructMenuSelectStru{ShortIntMenuIndex,MenuItemTotal;//选择菜单中的哪项MenuItemStru*pMenu;//对应主菜单/子菜单的数据结构地址PCHAR_INFOAddrOfSaveText;//备份下拉菜单区域的空间boolPullDownMenu;//下拉菜单有否显示ShortIntleft,top,right,bottom;};考虑到本实验的最大菜单级数为三级,我们可定义含3个元素的数组来保存历史的选择信息(如果考虑3级以上,则应该把数组的元素个数适当加大)。//选择的历史缓冲区CHAR_INFOSecondSave[300],FirstSave[300];MenuSelectStruHis[3]={{0,8,MainMenu,false,0,0,0,0},{0,0,0,FirstSave,false,0,0,0,0},{0,0,0,SecondSave,false,0,0,0,0}};有了选择的历史缓冲区,可以提高我们的抽象级别:该层菜单的选中项该层菜单的总数该层菜单的首地址01234MenuLayer指向当前菜单选择的层次当我们操作菜单时,可以围绕“选择的历史缓冲区”来管理即可,如:当我们在主菜单的选择时定位到“Options”时,历史数据为:MenuIndexMenuItemTotalpMenu…08MainMenuMenuIndexMenuItemTotalpMenu…58MainMenu当拉下“Options”的子菜单进入到“子菜单的选择”时,历史数据为:当在“Options”的子菜单下操作时,我们改变MenuIndex的值即可,如选中“Options”子菜单下的“Linker”项,MenuIndex应该为1:His[MenuLayer].pMenu:表示主(或子)菜单数组的首地址对应MainMenu[x].SubMenuItemAddr变成His[MenuLayer].pMenu[His[MenuLayer].MenuIndex].SubMenuItemAddr此时MenuLayer=0;如何得到子菜单的起始显示列值?答:MainMenuItemCol[His[0].MenuIndex]MenuIndexMenuItemTotalpMenu…58MainMenu05OptSubMMenuIndexMenuItemTotalpMenu…58MainMenu15OptSubM显示区备份与还原编程有关函数(在conio.c中):获得显示区的属性信息:voidgettextinfo(structtext_info*_r)把_source指向的数组的内容还原到区域(_left,_top)、(_right,_bottom):voidputtext(int_left,int_top,int_right,int_bottom,PCHAR_INFO_source)把显示区域(_left,_top)、(_right,_bottom)中的内容备份到_target指向的数组:voidgettext(int_left,int_top,int_right,int_bottom,PCHAR_INFO_target)实训六浏览DbaseⅢ表数据⒈问题了解DbaseⅢ的表结构,掌握一种通用的数据组织原理,并把数据在工作区中显示。⒉实验基础①了解DbaseⅢ的表结构及定义;②对照DbaseⅢ结构用二进制编辑器FlexHex.exe软件来查看其物理组织原理;③掌握高级语言中的“int”等类型的数据组织方式(注意高字节放在高地址);④用小程序分步读出文件头、字段信息等;⑤最后实施表数据的浏览。附件:DBF文件格式分析DBF数据表文件的结构分析:DBF文件由两部分组成,第一部分是结构描述,即文件头信息;共32个字节(0~31)第二部分是表本身的内容,该部分又分为两个部分:前一部分是表的结构说明,共32个字节具体的内容见下表1后一部分是字段描述区,从第32个字节开始到十六进制结束字符0x0D。具体包括内容见表2解读:低字节在前,所以要取字段总数时,应该用如下方法:记录总数=第4个字节+2561次方*第5字节+2562*第6字节+2563*第7字节注意:字段名以ASCII码方式存放,最大长度是10个字符,若字段名长度少于10个字符则以空字符(0x00)填充字段类型以ASCII码方式存放,1个字符,其值为Fieldtype:C–CharacterY–CurrencyN–NumericF–FloatD–DateT–DateTimeB–DoubleI–IntegerL–LogicalM–MemoG–GeneralC–Character(binary)M–Memo(binar

1 / 30
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功