




已阅读5页,还剩8页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
13华中科技大学计算机科学与技术学院C语言程序设计课程设计实验报告题目:水产品养殖信息管理系统专业: 计算机科学与技术 班级: 计科1003 学号: 姓名: 鲁辰 成绩: 指导老师:卢萍完成日期: 2011年9月28日 目录一、 系统概述-3二、 系统功能模块结构-3三、 数据结构设计及用法说明-4四、 程序结构-6五、 各模块功能-9六、 实验结果-11七、 体会-13八、 参考文献-13九、 附录:源代码及头文件-报告后一、 系统概述本系统是一个水产品管理系统,用于存储和管理水产品的信息,系统功能包括:鱼塘、苗种、投苗信息的录入、删除、修改、查找、排序等。整个系统由C语言实现,采用了Windows程序设计调用API函数的方法制作界面,信息在程序中通过十字链表的方式被存储,如果使用保存功能,即存入文件根目录下的相应.dat文件中。本程序中最重要的部分之一是窗体的句柄和窗体中各个控件的句柄,通过发消息给相应的句柄,才能够在特定的位置进行数据的显示和读入,在对树状图及列表进行操作时,也是通过特定函数将消息发给树状图或其子节点和列表的句柄,并且,在对数据进行变更时,本程序是以所选中节点的句柄与链表的句柄进行对比,来判断是否进行操作的。一个信息节点在树状图中所对应的句柄也因此被作为鱼塘(POOL_NODE)、苗种(FISH_NODE)、投苗(FEED_NODE)结构的一部分。数据结构的介绍中有界面中每个控件所对应的句柄名称示意图。本程序另一个重要部分是十字链表的结构,通过使用三级十字链表,将所有的信息系统的组合在一个头节点下。为支持链表,每个节点都数据结构中都有一个指向下一级节点(除投苗信息FEED_NODE外)和一个指向下一个同级节点的指针。二、 系统功能模块结构水产品养殖信息管理系统由六大功能组成:数据录入模块、数据修改模块、数据插入模块、数据删除模块、数据查询模块、数据统计排序模块。如图F1 所示。水产品养殖信息管理系统水产品数据文件处理水产品数据录入处理水产品数据修改处理水产品数据查询处理水产品数据统计处理水产品数据排序处理文件导入处理文件存盘处理退出系统处理文件创建处理鱼塘数据录入投苗数据录入苗种数据录入鱼塘数据修改投苗数据修改苗种数据修改按时间查询苗种信息鱼塘数据统计投苗数据统计苗种数据统计按投苗时间按苗种单价按投养数量1 主模块一:水产品数据文件处理该模块包括4个子模块,分别是:文件创建处理、文件导入处理、文件存盘处理、退出系统处理。所有信息可被保存在三个文件:pool.dat,fish.dat,feed.dat中,pool.dat用于保存鱼塘节点信息,fish.dat用于保存苗种节点信息,feed.dat用于保存投苗节点信息。在文件写入到新建的链表时,每个节点都会有一个句柄,指向左侧树状图中节点,因为每个节点的句柄都是不同的,所以句柄用于作为该节点的唯一标识。2 主模块二:水产品数据录入处理该模块包括3个子模块,分别是:鱼塘数据录入、投苗数据录入、苗种数据录入。在插入下一级节点时,应选中树状图中的上一级节点,例如:要插入苗种信息节点,应选中树状图中的该苗种所对应的鱼塘信息节点,否则不能成功插入。特别注意的是:本程序中所有的输入输出均采用API函数,也就是说,输入每个特定信息的文本框是特定的。3 主模块三:水产品数据修改处理该模块包括3个子模块,分别是:鱼塘数据修改、投苗数据修改、苗种数据修改。在修改各模块时,应首先选中左侧树状图中的相应节点,然后,单击相应的修改按钮。若选中的节点与要修改的节点不在同一级,则不能修改成功。4 主模块四:水产品数据查询处理该模块包括1个子模块,是:按时间查询苗种信息。使用查询操作时,应先在查询按钮左侧的起始时间和截止时间文本框内按格式(如:2011-01-01)输入,然后单击查询按钮,查询结果便会显示在右下方的列表中。如果日期的输入格式错误,则不能输出正确的查询结果。5主模块五:水产品数据统计处理该模块包括3个子模块,分别是:鱼塘数据统计、投苗数据统计、苗种数据统计。当信息节点创建或者载入时,节点信息下方用于显示统计结果的静态文本的示数都会产生变化。6主模块六:水产品数据排序处理该模块包括3个子模块,分别是:按投苗时间、按苗种单价、按投养数量。当完成查询功能后,可点击右端的排序按钮进行排序,单击按钮后,右下方列表的顺序就会产生变化。7特别功能:树状图树状图是对本系统起到辅助作用的控件,可对各级链表节点的名称进行显示。单击树状图上的任意一个节点,即可在右侧浏览该节点信息。三、 数据结构设计及用法说明窗口内各控件的句柄名称:由于Windows程序设计采用法消息方式传递信息,所以每个窗口及窗口中的控件都唯一对应于一个句柄,通过句柄进行数据在控件间的传输,本程序中所采用的控件的句柄的名称如图所示:1 投苗节点(feed_node)结构及用法说明:中文字段名英文字段名类型及长度举例塘号pool_idchar4A01苗种编号fish_idchar8B001投养时间feed_timechar112011-03-16投养数量fed_numint1000单价fish_pricefloat1.2苗种来源fish_sourcechar20*厂供货单号provide_numchar8002左侧树状图的句柄MyTreeIDHTREEITEM无指向下一个投苗节点的指针nextstruct feed_node *无2 苗种节点(fish_node)结构及用法说明:中文字段名英文字段名类型及长度举例塘号pool_idchar4A01苗种编号fish_idchar8B001苗种名称fish_namechar20对虾规格fish_sizechar 51-2左侧树状图的句柄MyTreeIDHTREEITEM无指向下一级投苗节点的指针fdownstruct feed_node *无指向下一个苗种节点的指针nextstruct fish_node *无3鱼塘节点(pool_node)结构及用法说明中文字段名英文字段名类型及长度举例塘号pool_idchar4A01水面积pool_sizefloat20(单位:平方米)左侧树状图的句柄MyTreeIDHTREEITEM无指向下一级苗种节点的指针downstruct fish_node *无指向下一个鱼塘节点的指针nextstruct pool_node *无数据结构说明: 鱼塘nNULL鱼塘2鱼塘1 head苗种1投苗信息链 苗种1基本信息 苗种2投苗信息链苗种2基本信息 苗种n投苗信息链苗种n基本信息 图1水产品养殖信息管理系统十字交叉链表四、 程序结构本鱼塘管理系统的核心部分是主函数WinMain函数和消息处理函数MainWndProc。主函数用于注册窗口类、窗口和控件的创建,并通过调用消息处理函数,对用户的操作进行处理,即:调用相应的函数,以实现相应功能。主程序结构(WinMain):函数InitApplication中有主窗口消息处理函数Y调用函数InitInstance,创建主窗口和控件调用函数InitApplication,注册主窗口类消息循环开始N结束此处选择了单击菜单中的About-Help为例:即,wParam= ID_HELP_ABOUT弹出对话框 aboutwParam, 为消息的第一个参数wParam=?=uMsg=WM_COMMANDuMsg=? COMMANDuMsg, 为消息标识符UINT uMsg, 开始udefaultwParam= ID_HELP_ABOUTdefault()结束消息处理函数结构:在()处对应的说明:1。在“帮助”菜单中选择“关于”:wParam=ID_HELP_ABOUT相应事件:弹出对话框 about2。单击添加鱼塘按钮:wParam= ID_BUTTON1相应事件:调用函数:CreatChart:读取鱼塘节点信息的文本框处的信息,创建鱼塘信息节点。3。单击删除鱼塘按钮:wParam= ID_BUTTON2相应事件:调用函数:DeleteChart:读取当前句柄,删除该句柄对应的节点。4。单击修改鱼塘按钮:wParam= ID_BUTTON3相应事件:调用函数:ChangeChart:读取当前句柄,读取鱼塘节点信息的文本框处的信息,将句柄为当前句柄的节点的信息修改为从鱼塘节点信息的文本框处读取的信息。5 单击苗种、投苗的添加、删除、修改按钮,分别为调用相应的函数,与上述情况类似。并且,变量wParam的值分别对应ID_BUTTON4 ID_BUTTON9。6。单击查找按钮:wParam=ID_BUTTON10 相应事件:调用函数:FeedInformer:读取用于输入起始和截至日期的文本框的信息,查找在该日期范围内的节点,并且输出到右下方的列表框(即:hwndListView)中。7。单击按投苗时间排序按钮:wParam=ID_BUTTON11 相应事件:调用函数:FeedOrder:将列表框hwndListView中所显示的节点信息按照苗时间进行排序,并重新输出到列表框中。8。单击按苗种单价、供货单号排序时wParam=ID_BUTTON12 ID_BUTTON13分别调用函数FeedOrder2、FeedOrder3,并做出相应排序、输出。9。单击菜单中FileSave按钮:wParam= ID_FILE_SAVE40002, 相应事件:调用函数:SaveChart1:对各级节点信息进行保存,分别存入三个二进制文件,即:pool.dat,fish.dat,feed.dat中。10。单击菜单中FileLoad按钮:wParam= ID_FILE_LOAD 相应事件:调用函数:LoadChart:对根目录下的pool.dat,fish.dat,feed.dat三个文件进行载入,将鱼塘、苗种、投苗信息分别存放在三级链表中。11。单击菜单中FileExit按钮:wParam= ID_FILE_LOAD 相应事件:调用函数:ExitProcess(0) ,退出程序。五、 各模块功能a) 主模块一:水产品数据文件处理该模块包括4个子模块,分别是:文件创建处理、文件导入处理、文件存盘处理、退出系统处理。以下详述:1.1文件保存处理通过函数void SaveChart1(void) 对链表中的节点进行保存,分别保存.dat三个文件,即:pool.dat、fish.dat、feed.dat。如果不存在文件,创建文件,如果已经存在文件,替换原来的文件。原理:分三次遍历链表。第一次对所有鱼塘节点进行遍历,使用函数fwrite将节点信息保存在pool.dat文件中。第二次使用两个指针savpool,savfish,savpool对鱼塘信息节点进行遍历,savfish再对savpool指向的节点下的所有子节点进行遍历,并将信息保存在fish.dat文件中。第三次遍历同理,将信息保存在feed.dat文件中。1.2文件载入处理通过函数POOL_NODE * LoadChart(void)对.dat文件中的数据信息进行载入。原理:先用文件指针对pool.dat文件进行遍历,每指向一条新的信息则先向内存申请一个大小为sizeof(POOL_NODE)的空间,然后将信息载入,此外,特别注意要使用函数AddItemToTree给左侧的树状图增加一个节点,将AddItemToTree函数的返回值HTREEITEM类型的树状图新增节点的句柄写入节点,用以作为后续使用中,该节点的唯一标识。2. 主模块二:水产品数据录入处理使用函数:POOL_NODE* CreatChart(POOL_NODE *crehead)void CreatFish(FISH_NODE *pfish,POOL_NODE *MyPoolaa)void CreatFeed(FEED_NODE *pfeed,FISH_NODE *MyFish)在这里,以苗种数据的录入为例,对函数进行说明。使用时,先选中左侧的投苗节点,然后对右侧苗种信息一栏中的文本框内容进行编辑,编辑完成后,单击插入按钮即可。原理(函数void ChangeFeed(void)):当使用者选中树状图中的投苗节点时,系统会调用函数int FindNodeH1(POOL_NODE *fhead,HTREEITEM KeyHnode,POOL_NODE *repool,FISH_NODE *refish,FEED_NODE *refeed)(下面会有对该函数的说明)该函数通过二级指针返回指向当前选中的鱼塘节点和苗种节点的指针的地址,即,POOL_NODE *repool, FISH_NODE * refish,通过遍历并检查单前节点信息是否与*repool、*refish指向内容相符,找到要插入的位置,并对该位置的指针进行修改,使其current-next指向新申请的一块空间中,并对其进行修改。3.主模块三:水产品数据修改处理使用函数:void ChangeChart(void)void ChangeFish(void)void ChangeFeed(void) 原理如下(以修改投苗信息节点为例(函数ChangeFeed):通过调用函数:FindNodeH1返回指明该节点位置的三个指针,即:repool,refish,refeed。然后通过遍历链表,是当前指针MyFeed指向应被修改的节点,将从文本框中读取的相应数据写入节点相对应的数据中。4.主模块四:水产品数据查询处理使用函数:FEED_NODE * FeedInformer(void) 原理:FeedInformer函数通过使用三重循环,对苗种信息节点进行遍历,将每个苗种信息节点中的投苗时间与起始时间和截止时间进行对比,如果该时间在起始到截止时间中间,则将该节点的信息写入一条新的链中,链头为creorder,然后通过函数AddListViewItems对该节点的信息进行显示。5主模块五:水产品数据统计处理使用函数:void showall(void)原理:将需要统计的数据计为:n-鱼塘总数 m-投苗 k-苗种,通过遍历链表,累加求和,得到n、m、k的值,并通过函数SendMessage将其值发消息发给静态文本,对鱼塘信息、投苗信息、苗种信息的总数进行显示。6.主模块六:水产品数据排序处理使用函数:void FeedOrder(FEED_NODE *headp) 对投苗信息按时间顺序排序void FeedOrder2(FEED_NODE *headp) 对投苗信息按单价排序void FeedOrder3(FEED_NODE *headp)对投苗信息按供货单号排序原理:将查询处理后得到的链头作为参数传入,通过排序算法对链表的节点进行排序,将得到的新的链头赋值给参数二级指针,达到修改顺序的目的,使用函数ListView_DeleteAllItems将右下方列表的数据全清,再使用for循环和AddListViewItems函数对新的链表进行显示。7特别功能:树状图使用函数:HWND CreateTreeView(HWND hwndParent, LPSTR szWindowName)BOOL InitTreeViewImageLists(HWND hwndTV)BOOL InitTreeViewItems(int cat,HWND hwndTV)HTREEITEM AddItemToTree(HWND hwndTV, LPSTR lpszItem, HTREEITEM hParent, BOOL bFolder)原理:先通过函数CreateTreeView,创建一个Tree View控件。通过设置参数修改树状图的属性。然后用函数InitTreeViewImageLists为树状图设置图标,再使用函数InitTreeViewItems为Tree View窗口增加若干个节点。而后续添加节点时,使用函数AddItemToTree,返回值HTREEITEM是一个对应于某一个节点的唯一的句柄,可用作标识。附:函数int FindNodeH1(POOL_NODE *fhead,HTREEITEM KeyHnode,POOL_NODE *repool,FISH_NODE *refish,FEED_NODE *refeed) 的说明辅助该函数实现功能的函数:int FindNodeH2(FISH_NODE *fhead,HTREEITEM KeyHnode,FISH_NODE *refish,FEED_NODE *refeed)int FindNodeH3(FEED_NODE *fhead,HTREEITEM KeyHnode,FEED_NODE *refeed)该
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 光伏承租合同协议书范本
- 租赁地下室车位协议合同
- 无人送餐车购买合同范本
- 法律顾问合同协议书范本
- 楼户出租合同协议书模板
- 企业与运营合作合同协议
- 公司煮饭阿姨合同协议书
- 桥梁维修3方合同范本
- 螺苗采购合同协议书范本
- 医疗员工合同协议书范本
- 2025届高考语文一轮总复习:120个文言实词
- 食品产业高质量发展发展目标
- 恶性肿瘤微量营养素缺乏与补充
- QB∕T 8045-2024 聚对苯二甲酸乙二醇酯(PET)结构泡沫板材
- 初中英语校本教材
- 2024年内蒙古丰镇市招聘社区工作者26人历年重点基础提升难、易点模拟试题(共500题)附带答案详解
- 生态环境执法大练兵知识考试题库(含答案)
- “案”说刑法(山东联盟)-知到答案、智慧树答案
- 《职业道德与法治》开学第一课(导言)(课件)-【中职专用】中职思想政治《职业道德与法治》高效课堂课件+教案(高教版2023·基础模块)
- 中职生职业素养全套教学课件
- 课件:性传播疾病讲解
评论
0/150
提交评论