




已阅读5页,还剩123页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
课 程 设 计 报 告课程名称: 楼盘信息查询系统 专业班级: 信息安全1302 学 号: U201315134 姓 名: 郑振国 指导教师: 祝建华 报告日期: 2014年10月10日 计算机科学与技术学院任务书题目:楼盘查询系统一、主要内容建立楼盘楼盘信息系统,提供创建、编辑和综合查询等基本业务管理和服务。二、任务要求收集与阅读相关文献资料,确定系统目标与范围,分析系统需求,确定系统功能;设计系统方案,完成系统实现;提交课程设计报告。三、参考文献1曹计昌,卢萍,李开. C语言程序设计,北京:科学出版社,20132李开,卢萍,曹计昌. C语言实验与课程设计,北京:科学出版社,20113张引. C程序设计基础课程设计, 杭州: 浙江大学出版社,20074黄明,梁旭,万洪莉. C语言课程设计,北京: 电子工业出版社,2006四、基本要求只能使用C语言,源程序要有适当的注释,使程序容易阅读。要有用户界面。要求至少采用教材p215-p216类似的简易菜单;鼓励采用文本菜单界面甚至采用图形菜单界面。必须使用结构和十字交叉链表等数据结构。使用文件保存数据。鼓励自行增加新功能。设计测试的模拟数据,完成系统测试。撰写课程设计报告(要求正规双面打印,A4幅面)内容包括:题目、系统功能模块结构图、数据结构设计及用法说明、程序结构(画流程图)、各模块的功能、试验结果(包括输入数据和输出结果)、体会、参考文献和附录:程序清单。课程设计报告封面统一格式,标准格式详见本科生课程设计规范化要求。课程设计资料(包括课程设计报告、源程序、目标程序和测试用例等)刻录光盘。目录1 绪言.11.1 课题背景.11.2 课题目的与意义.12 系统设计方案的研究.22.1 系统的特点及要求.22.2 系统功能结构图.33 系统的实现.53.1 界面的设计.53.1.1 显示主菜单.53.1.2 标记主菜单.83.1.3 弹出子菜单.103.1.4 标记子菜单.123.1.5 关闭子菜单.133.1.6 读取用户操作.143.1.7 功能函数选择.213.2 数据结构.233.2.1 储存数据的结构体.233.2.2 构建链表,同时读取文本信息.253.2.3 载入指定信息,并获取链表首地址.303.3 各模块功能.313.3.1 系统功能一:备份信息.313.3.2系统功能二:恢复数据.333.3.3系统功能三:输出数据.343.3.4系统功能四:退出系统.363.3.5系统功能五:查询二手房信息.373.3.6系统功能六:查询新楼盘信息.403.3.7系统功能七:添加信息.413.3.8系统功能八:修改信息.483.3.9系统功能九:删除信息.613.3.10系统功能十:按价格统计信息.763.3.11系统功能十一:按面积统计信息.833.3.12系统功能十二:按户型统计信息.893.3.13系统功能十三:操作指南.953.3.14系统功能十四:关于系统.964 系统展示.975 总结.1046 参考文献.1067 附录.1061 绪言本书的主要内容是介绍课程所要求设计的楼盘信息查询系统。在书中,内容分主要分为三部分,第一部分是关于课题的整体概述;第二部分则详细介绍系统,从其界面设计、数据结构、各模块功能的实现等方面来阐述,为方便读者学习,界面设计又分为主菜单设计、子菜单设计、读取用户操作几个小模块说明,同时结合源代码进行讲解,模块功能则是对系统的几个重要子函数进行讲解,同时结合源代码;第三部分是总结本次设计。详细内容之后会介绍,另外,为方便读者自己感受系统的具体功能,本书在附录处有本系统的全部代码的下载地址,以供学习交流之用,未经许可不得擅自作为个人作品。1.1 课题背景在全球数字化的今天,信息量已远远超过人们的想像,为方便管理、使用信息,我们不得不借助计算计的能力,设计相关系统来协助我们管理信息。房产信息也是如此,为方便我们管理、查询楼盘信息,设计了此楼盘查询系统。借助楼盘系统,我们可以更方便、快捷地管理、查询数据,更重要的是意义,人类走向现代化的意义。链表的实现,使得我们能够在统一结构内存储不同类型的数据,这样我们能够模拟构建一张电子数据表,把所要记录的数据按照一定的规律“填写”在链表中。查询数据时,只要遍历链表,就能“看到”所有数据,在找出符合要求的数据;修改数据时只要定位到用户所要修改的数据,在将用户修改的数据重新写入链表;新加数据时,只要在链表后面增加节点进行数据的存储即可1.2 课题目的与意义设计本系统不仅锻炼我们对C语言的使用能力,还能让我们明白自己的不足之处。并且可以说服我们自己,C语言不仅仅只是课堂之用,它可以实现我们的想法。学习知识不是为了应付考试,而是为了培养我们的能力,如何使用所学知识、把所学知识运用的如何才是真正检验我们的能力,考试只不过是一种形式,一种压力,一种催促我们学习的手段。而课设不同于考试,它要求我们不仅要知道概念,会使用知识,更要求我们的创新能力。如果只懂书本知识,却没有自己的想法,作出的课设也就只是空壳。为实现以上目的,就不能把课设看作一门考试,或者是任务,应该把它视作工具,检验、提高能力的工具。2 系统设计方案的研究2.1 系统的特点及要求系统功能系统主要是提供城市楼盘的快速查询、检索和统计。应该具有按城区、按户型和按价格等查询通讯信息;组合条件检索楼盘;按城区、按户型和按价格等统计房屋信息。系统数据系统主要涉及“楼盘”、“楼栋”和“房屋”3类信息。 “楼盘”信息由楼盘编号、楼盘名称、楼盘地址、开发商和物业公司等数据项目组成,“楼栋”信息是由楼栋编号、单元和楼层等数据项组成,“房屋”信息由房屋编号、户型、面积、公摊率和价格等数据项目组成。在磁盘上,建议采用3个文件分别存储“楼盘”、“楼栋”和“房屋”的数据。“楼栋”信息中增加楼盘编号,“房屋”信息中增加楼盘编号和楼栋编号。2.2 系统功能结构 楼盘信息查询系统文件查询信息统计信息编辑信息帮助 文 件退出数据输出数据恢复数据备份 查 询 信 息新楼盘买二手房租二手房 编 辑 信 息删除信息修改信息添加信息 统 计 信 息户型统计面积统计价格统计 帮 助关于操作3 系统的实现3.1 界面的设计本系统采用文本菜单界面,支持键盘、鼠标输入,具有良好的人机交互性。系统主界面有五个主菜单,分别是文件、信息查询、信息编辑、信息统计、帮助。子菜单采用下拉式,每个主菜单下有几个子菜单,每个子菜单代表系统的一个功能。创建菜单时,针对屏幕每一个点进行设置,包括其字符,字符属性,背景属性,以达到窗口界面效果。为增加效果,系统对于每一个菜单选项都进行了热区设置,即为每一个菜单选项规划固定区域。选中选项时,程序会同时改变该区域的属性,让用户看起来的确选中该选项。 3.1.1显示主菜单函数中首先建立一个矩形窗口,然后填充字符属性为蓝底白字,在窗口第一行依次输出主菜单字符串,中文设置为白底黑字,英文字母设置为白底红字。再设置热区信息,也就是为主菜单编号,将编号信息写入屏幕信息保存数组内,方便后面鼠标选择主菜单。void ShowMenu()int i,j,row;int PosA=2;char ch;char aSortMenuNum;char aTagMenuNum;CONSOLE_SCREEN_BUFFER_INFO bInfo;CONSOLE_CURSOR_INFO lpCur;COORD size;COORD pos=0,0;HOT_AREA areas;SMALL_RECT aAreaMenuNum;SMALL_RECT rcMenu=0,0,0,0;GetConsoleScreenBufferInfo(gh_std_out,&bInfo);size.X=bInfo.dwSize.X;size.Y=1;SetConsoleCursorPosition(gh_std_out,pos);/*在窗口第一行输出主菜单项*/for(i=0;iMenuNum;i+)printf( %s,ga_main_menui);/*隐藏光标*/GetConsoleCursorInfo(gh_std_out,&lpCur);lpCur.bVisible=FALSE;SetConsoleCursorInfo(gh_std_out,&lpCur);gp_buff_menubar_info=(CHAR_INFO *)malloc(size.X*size.Y*sizeof(CHAR_INFO);rcMenu.Right=size.X-1;ReadConsoleOutput(gh_std_out,gp_buff_menubar_info,size,pos,&rcMenu);/*将这一行设置为白底黑字,英文字母设置为红色*/for(i=0;iAttributes=BACKGROUND_BLUE |BACKGROUND_GREEN | BACKGROUND_RED;ch=(char)(gp_buff_menubar_info+i)-Char.AsciiChar);if(ch=a&ch=A&chAttributes|=FOREGROUND_RED;WriteConsoleOutput(gh_std_out,gp_buff_menubar_info,size,pos,&rcMenu);/*设置主菜单热区信息*/areas.num=MenuNum;MainMenu(gi_sel_menu);aArea0.Left=2;aArea0.Top=0;aArea0.Right=aArea0.Left+strlen(ga_main_menu0);aArea0.Bottom=1;aSort0=0;aTag0=1;for(i=1;iareas.num;i+)aAreai.Left=aAreai-1.Right+2; /*获取热区位置*/aAreai.Top=0;aAreai.Right=aAreai.Left+strlen(ga_main_menui);aAreai.Bottom=1;aSorti=0;aTagi=i+1;/*热区编号*/areas.pSort=aSort;areas.pArea=aArea;areas.pTag=aTag;/*将编号信息写入屏幕内*/for(i=0;iareas.num;i+)row=areas.pAreai.Top;for(j=areas.pAreai.Left;jareas.pAreai.Right;j+)gp_scr_attrow*SCR_COL+j|=(areas.pSorti6)| (areas.pTagi2);return;3.1.2标记主菜单函数根据用户的选择,将用户选中的主菜单选项设置为绿地白字,将其他所有选项重新设置为白底黑字。void MainMenu(int num)CONSOLE_SCREEN_BUFFER_INFO bInfo;COORD size;COORD pos=0,0;SMALL_RECT rcMenu=0,0,0,0;int PosA=2,PosB;char ch;int i;if(num=0) /*当num=0时去除主菜单选中标记*/PosA=0;PosB=0;else/*定位选中菜单的起止位置*/for(i=1;inum;i+)PosA+=strlen(ga_main_menui-1)+2;PosB=PosA+strlen(ga_main_menunum-1);GetConsoleScreenBufferInfo(gh_std_out,&bInfo);size.X=bInfo.dwSize.X;size.Y=1;/*去除选中菜单前的菜单标记*/for(i=0;iAttributes=BACKGROUND_BLUE |BACKGROUND_GREEN | BACKGROUND_RED;ch=(gp_buff_menubar_info+i)-Char.AsciiChar;if(ch=a&ch=A&chAttributes|=FOREGROUND_RED;/*在选中菜单上做标记,绿底白字*/for(i=PosA;iAttributes=FOREGROUND_BLUE |FOREGROUND_GREEN | FOREGROUND_RED | BACKGROUND_GREEN;/*去除选中菜单后面的菜单标记*/for(i=PosB;iAttributes=BACKGROUND_BLUE |BACKGROUND_GREEN | BACKGROUND_RED;ch=(gp_buff_menubar_info+i)-Char.AsciiChar;if(ch=a&ch=A&chAttributes|=FOREGROUND_RED;/*将做好标记的菜单信息写到窗口第一行*/rcMenu.Right=size.X-1;WriteConsoleOutput(gh_std_out,gp_buff_menubar_info,size,pos,&rcMenu);gi_sel_menu=num;return;3.1.3弹出子菜单函数根据用户的选择,计算弹出子菜单的位置及窗口大小,将子菜单弹出区域所所覆盖的信息储存,以便以后恢复此区域信息,然后计算子菜单的选项的字符串所在位置,并在弹出窗口内画上边框、输出选项,最后为每个菜单设置编号,将编号信息储存在屏幕信息储存数组内,方便后面鼠标选择及对应函数调用。void PopMenu(int num)LABEL_BUNDLE labels;HOT_AREA areas;SMALL_RECT rcPop;COORD pos;WORD att;COORD *aLoc;SMALL_RECT *aArea;char *aSort;char *aTag;int i,loc=0;if(num!=gi_sel_menu) /*如果指定菜单不是已选中的菜单*/if(gp_top_layer-LayerNo!=0) /*如果此前有菜单弹出*/PopOff();gi_sel_menu=0;else if(gp_top_layer-LayerNo!=0) /*如果已弹出该菜单则返回*/return;gi_sel_menu=num;MainMenu(gi_sel_menu); /*标记选中菜单*/LocSubMenu(gi_sel_menu,&rcPop); /*计算弹出菜单的区域位置*/*计算第一个子菜单的位置*/for(i=1;igi_sel_menu;i+)loc+=ga_sub_menu_counti-1;labels.ppLable=ga_sub_menu+loc;labels.num=ga_sub_menu_countgi_sel_menu-1;aLoc=(COORD *)malloc(labels.num*sizeof(COORD);for(i=0;ilabels.num;i+)aLoci.X=rcPop.Left+1;aLoci.Y=rcPop.Top+i+1;labels.pLoc=aLoc;/*设置热区信息*/areas.num=labels.num;aArea=(SMALL_RECT *)malloc(areas.num*sizeof(SMALL_RECT);aSort=(char *)malloc(areas.num*sizeof(char);aTag=(char *)malloc(areas.num*sizeof(char);for(i=0;iareas.num;i+)aAreai.Left=rcPop.Left+2; /*获取热区位置*/aAreai.Top=rcPop.Top+i+1;aAreai.Right=rcPop.Right-2;aAreai.Bottom=aAreai.Top;aSorti=0;aTagi=i+1; /*热区编号*/areas.pSort=aSort;areas.pArea=aArea;areas.pTag=aTag;att=BACKGROUND_BLUE | BACKGROUND_GREEN |BACKGROUND_RED;PopUp(&rcPop,att,&labels,&areas);DrawBox(&rcPop);pos.X=rcPop.Left+3;/*将子菜单设置为白底黑字*/att=FOREGROUND_RED | BACKGROUND_BLUE |BACKGROUND_GREEN | BACKGROUND_RED;for(pos.Y=rcPop.Top+1;pos.YrcPop.Bottom;pos.Y+)if(strlen(ga_sub_menuloc+pos.Y-rcPop.Top-1)=0)continue;FillConsoleOutputAttribute(gh_std_out,att,1,pos,NULL);return;3.1.4标记子菜单函数先去除原来标记的选项,将用户选择的菜单选项设置为绿底白字,去除标记的选项设置为白底黑字。void SubMenu(int num)SMALL_RECT rcPop;COORD pos;WORD att;int width;/*计算弹出子菜单的区域位置*/LocSubMenu(gi_sel_menu,&rcPop);if(numnext=NULL)|(gp_top_layer-pContent=NULL)return;nextLayer=gp_top_layer-next;/*回复弹出窗口的原外观*/size.X=gp_top_layer-rcArea.Right-gp_top_layer-rcArea.Left+1;size.Y=gp_top_layer-rcArea.Bottom-gp_top_layer-rcArea.Top+1;WriteConsoleOutput(gh_std_out,gp_top_layer-pContent,size,pos,&(gp_top_layer-rcArea);/*回复字符单元属性*/pCh=gp_top_layer-pScrAtt;for(i=gp_top_layer-rcArea.Top;ircArea.Bottom;i+)for(j=gp_top_layer-rcArea.Left;jrcArea.Right;j+)gp_scr_atti*SCR_COL+j=*pCh;pCh+;free(gp_top_layer-pContent);free(gp_top_layer-pScrAtt);free(gp_top_layer);gp_top_layer=nextLayer;gi_sel_sub_menu=0;return;3.1.6读取用户选择读取用户的操作信息,选择用户指定的功能。支持鼠标、键盘输入。void RunSys()INPUT_RECORD inRec;DWORD res;COORD pos=0,0;BOOL bRet=TRUE;int i,loc,num;int cNo,cAtt;short vkc,asc;while(bRet)wAttributes();ReadConsoleInput(gh_std_in,&inRec,1,&res);/*鼠标事件处理*/if(inRec.EventType=MOUSE_EVENT)pos=inRec.Event.MouseEvent.dwMousePosition;cNo=gp_scr_attpos.Y*SCR_COL+pos.X&3;cAtt=gp_scr_attpos.Y*SCR_COL+pos.X2;/*主菜单选择*/if(cNo=0)if(cAtt0&cAtt!=gi_sel_menu&gp_top_layer-LayerNo!=0)PopOff();gi_sel_sub_menu=0;PopMenu(cAtt);else if(cAtt0&cAtt!=gi_sel_menu)MainMenu(cAtt);else if(cAtt0) /*若该区域有子菜单*/SubMenu(cAtt);/*若鼠标左键被按下*/if(inRec.Event.MouseEvent.dwButtonState=FROM_LEFT_1ST_BUTTON_PRESSED) if(cNo=0)if(cAtt0&gp_top_layer-LayerNo=0)PopMenu(cAtt);else if(gp_top_layer-LayerNo0)PopOff();gi_sel_sub_menu=0;elseif(cAtt0)PopOff();gi_sel_sub_menu=0;bRet=ExeFounction(gi_sel_menu,cAtt);/*如果鼠标右键被按下*/else if(inRec.Event.MouseEvent.dwButtonState=RIGHTMOST_BUTTON_PRESSED) if(cNo=0)PopOff();gi_sel_sub_menu=0;/*按键事件处理*/else if(inRec.EventType=KEY_EVENT&inRec.Event.KeyEvent.bKeyDown)vkc=inRec.Event.KeyEvent.wVirtualKeyCode;asc=inRec.Event.KeyEvent.uChar.AsciiChar;/*系统快捷键处理*/if(vkc=112) /*按下F1*/if(gp_top_layer-LayerNo!=0)PopOff();gi_sel_sub_menu=0;bRet=ExeFounction(5,1);/*方向键*/else if(asc=0)/*若没有子菜单弹出*/if(gp_top_layer-LayerNo=0)switch(vkc)case 37:/*按下左方向键*/gi_sel_menu-;if(gi_sel_menu5)gi_sel_menu=1;MainMenu(gi_sel_menu);break;case 40:/*按下下方向键*/if(gi_sel_menu!=0)PopMenu(gi_sel_menu);SubMenu(1);break;/*若有子菜单弹出*/else for(loc=0,i=1;igi_sel_menu;i+)loc+=ga_sub_menu_counti-1;switch(vkc)case 37:/*按下左方向键*/gi_sel_menu-;if(gi_sel_menu=0)gi_sel_menu=5;MainMenu(gi_sel_menu);PopOff();PopMenu(gi_sel_menu);SubMenu(0);break;case 38:/*按下上方向键*/num=gi_sel_sub_menu-1;if(numga_sub_menu_countgi_sel_menu-1)num=1;SubMenu(num);break;/*普通键处理*/else if(asc-vkc=0 | asc-vkc=32)/*若未弹出子菜单*/if(gp_top_layer-LayerNo=0) switch(vkc)case 70:/*f或F*/PopMenu(1);break;case 81:/*q或Q*/PopMenu(2);break;case 69:/*e或E*/PopMenu(3);break;case 83:/*s或S*/P
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 内经考试题及答案
- 汽修考试题及答案
- 中级财务会计(上)知到智慧树答案
- 工务维修考核试卷及答案
- 药品检查员能力提升培训班结业考试试题(附答案)
- 幼儿园教师业务考试试题及答案
- 内科考试题含答案
- 酒水饮料理论知识考核试题题库及答案
- 加氢工艺考试模拟卷及答案
- 国家基本药物培训试题及答案
- 2025年教科版新教材科学三年级上册全册教案设计(含教学计划)
- 医院药品采购与质量控制规范
- 枣庄学院《图学基础与计算机绘图》2024-2025学年第一学期期末试卷
- 2025版仓储库房租赁合同范本(含合同生效条件)
- GB 46031-2025可燃粉尘工艺系统防爆技术规范
- 2025至2030年中国纳米抛光浆料行业发展监测及发展趋势预测报告
- 养老护理员培训班课件
- 2025-2030城市矿产开发利用政策支持与商业模式创新报告
- 隔爆水棚替换自动隔爆装置方案及安全技术措施
- 近十年中职试卷及答案
- 股票k线图入门图解
评论
0/150
提交评论