




已阅读5页,还剩9页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
数据结构大型实验实验报告学生姓名: 班 级: 学 院: 信息与通信工程学院 专 业: 通信工程专业 实验题目: 仓库物资管理 完成时间: 2009-9-11 指导教师: 杨顺民、 辛洁 一,需求分析:作为一个仓库管理系统软件,要求能实现四类库存货品(黑色金属、有色金属、非金属、机电设备)信息的入库、出库、查找、统计等功能,并能建立和更新的库存信息保存于文件供输出或打印。我们首先规定了货品的相关信息包括:账号、品名、规格、单价、数量、金额,入库日期等,之后我们通过键盘输入货物的相关信息。对于入库程序,我们要求能将入库的货物信息逐一插入链表。对于出库程序,我们要求程序能完成对出库信息的记录,对库存物品的修改以及对客户信息的记录。对于查找程序,我们要求程序可以通过账号进行查询。对于统计功程序,我们要求程序可以显示仓库货物的数量和价格并按月、季、年分别输出四大类物资的报表。整个程序运行时,我们只需按屏幕上的提示进行自己需要的操作就行了。输入数据类型:整型、字符型、结构体;输入数据的取值范围: 0至12;输出数据类型:整型、字符型;.二,概要设计:1方案确定:库存货品信息管理系统要求实现许多功能,可遵循结构化程序设计思想来进行本系统的设计,通过小组讨论,我们决定采用线性链表的结构来储存货物信息。并把整个系统分为五个模块:入库模块,出库模块,查询模块,统计模块和主函数模块。运行时,通过主函数的调用来实现所需的功能。 其中本程序中用到的抽象数据类型的定义有:线性链表结构体的定义;创建链表的头节点以及在进行入库时货物存储即链表的插入,出库时链表的修改等;头节点声明,以及函数调用时的声明等。2具体结构:库存货品信息管理系统的软件具体结构如图:库存货品信息管理系统主程序模块查询模块询模块出库模块统计模块入库模块3.数据流程图身份验证开始统计模块查询模块出库模块入库模块库 存 物 品 信 息 的 月 报 表库存物品信息的季报表库 存 物 品 信 息 的 年 报 表对机械制品信息的查询对非金属信息的查询对有色金属信息的查询对黑色金属信息的查询对机械制品结构体的修改对非金属结构体的修改对有色金属结构体的修改对黑色金属结构体的修改对机械制品的插入、删除对非金属的插入、删除对有色金属的插入、删除对黑色金属的插入、删除货物 (货物代码,货物名,型号,数量,单价,销售价,日期)出库 (出库单号,货物代码,货品名,数量,单价,总价,日期)4块功能说明: 对本系统的功能进行分析后可作如下的模块化设计:入库模块实现功能:能把货品信息按四大类逐一输入,并对其进行插入,删除,查找。出库模块实现功能:能把已经出库的物资信息在四类链表中进行修改,并记录相应的客户信息。查询模块实现功能:用户可以通过帐号查找相应的货品的信息。统计模块实现功能:程序可以显示仓库货物表和按月、季、年输出报表。主程序模块实现功能:完成主菜单的显示,及对各模块的调用。三,详细设计 在这次的程序设计中,我负责的是出库模块。出库模块主要分为四大部分:黑色金属链表的修改、有色金属链表的修改、非金属链表的修改、机械制品的链表的修改以及客户信息的插入和删除,将这些功能分别写成小函数,最后用一个主函数调用这些函数,达到模块的功能要求。具体设计思路是对于出库的物品信息,要在产品结构体中做好相应的修改,在这里不能直接把出库的产品节点删除,而是在节点的结构体中做到相应的修改,而对于每一批出库产品都有其对应的客户信息,所以出库模块还将实现客户信息的记录功能。此模块用到的数据结构是线性链表,数据类型有结构体类型、整型数据、字符型数据等。一、结构体定义:验证结构体:struct baomi char dlms12; int mm; struct baimi *next;struct baomi *hand;产品结构体(以黑色金属为例):struct heise_product char num12; char p_num12; char name12; int amount; int price; int t_price;int year;int season;int month;int day; struct heise_product *next; ; struct heise_product *hhead; 客户信息结构体:struct kehu_information char kname12; char name12;char num12; int amount; int date; struct kehu_information *next; ; struct kehu_information *khead;二、出库产品结构体的修改 (以黑色金属为例):金属结构体的修改(以黑色金属为例)int heise_modify() char m_num12; /*先定义一个指针*/struct heise_product * p; p=hhead; printf(Enter the modify numn); scanf(%s,&m_num); /*输入出库的编号*/if (p=NULL)/*开始没有数据*/ printf(Sorry! No data can be foundn); return 0; while(p!=NULL) if (strcmp(p-num,m_num)=0) /*编号比较*/ printf(Enter the new data without numn); scanf(%s%s%d%d%d, &p-p_num,&p-name,&p-amount,&p-price,&p-t_price); /*输入修改出库的信息*/printf(One data had modifiedn); return 0; p=p-next; printf(Sorry! No num has foundn); 三、客户信息的插入和删除:客户信息的插入:int kehuinformation_ insert () struct kehuinformation * p1,* p; p1=(struct kehuinformation *)malloc(sizeof(struct kehuinformation); p=khead; if (p=NULL) printf(Enter the information of kehun);printf(Include the name,number,daten); scanf(%d%s%s%, &p1-name,&p1-amount,&p1-date); khead=p1; khead-next=NULL; return 0; while(p-next!=NULL)p=p-next; p-next=p1; printf(Enter the datan); scanf(%s%s%s%d%d%d, &p1-name,&p1-amount,&p1-date); p1-next=NULL; 客户信息的删除:int kehuinformation_delete() char name12; struct kehuinformation * p1,* p; p=khead; printf(Enter the namen); scanf(%s,&name); /*输入删除的编号*/if (p=NULL)/*开始没有数据*/ printf(No name can be foundn); return 0; if (strcmp(p-name,name)=0 & p-next=NULL)/*链表只有一个数据,且是要删除的*/ khead=NULL; printf(One name has been deletedn); return 0; if (strcmp(p-name,name)=0 & p-next!=NULL)/*要删除的数据在链表的头上*/ khhead=khhead-next; printf(One name has been deletedn); return 0; while(p-next!=NULL) p1=p-next; if (strcmp(p1-name,name)=0) p-next=p1-next; printf(One name has been deletedn); return 0; p=p-next; printf(Sorry! No name has foundn); 四,程序设计与程序调试1、出库模块说明此模块的主要功能是对出库物品的信息的记录,具体就是对五张链表的分别操作。程序设计的思想是先写出各个子函数,最后通过主函数对各子函数的调用,完成程序的功能。所用到的数据结构是线性链表,数据类型有整型、字符型以及结构体类型。2、调试过程中的问题及解决办法由于此程序完全是一组成员自行设计及编写的,在调试过程中,也出现了许多的问题,例如给一张链表申请动态存储空间,用到malloc函数,在调试的时候这类语句就总是有错误,为了找出错误并改正,我们又认真研究了C语言程序设计的课本和数据结构的课本,并且请教了老师,最后才明白是因为我们在程序前缺少一个头文件,由于没有这个头文件,在程序的执行中,malloc函数就不能被调用。在程序设计的过程中,由于大家的粗心,使得程序还出现了很多小问题,例如结构体在定义时的成员顺序和在应用时的成员顺序弄乱了,导致程序出现错误,以及结构体指针的定义错误。这些错误通过认真复习C语言程序中的结构体一章后都得到了解决。在本次的程序设计中,这样的问题出现的很多,但是在大家的共同努力和老师的帮助下,我们经过近三天的修改和调试,程序最终能够成功运行。五,测试结果 模块运行结果:联调结果:运行结果分析:此次实验,我们的程序在运行过程中出现了“内存无法正确分配”的错误,导致程序在运行了几步之后就无法正常运行,在老师的讲解之后,我们小组成员分析出现这种情况的原因,有可能的原因有:(1)程序主函数的编写出现问题,导致主函数对于子函数的调用无法正常进行,进而出现这种情况;(2)在程序的设计中,我们总共建立了五张链表,分别是四种金属的链表以及客户信息的链表,在程序设计中,具体在出库模块的设计中,由于很多语句都同时设计两张链表的应用,因此在获取两张链表表头的时候有可能会出现内存空间无法正确分配的情况,对于此种情况,在老师的指导下,我们的解决方案是,删掉原先的客户信息链表,把客户信息直接作为结构体成员添加到四类金属的链表中,这样设计的程序可读性高,而且不容易出现错误。六,实验总结经过过两个星期的努力,最终我们所设计的完整总程序是能够运行的,但任然存在一定不足:程序的所能实现的功能比较单一,程序的设计有很多重复的地方,出库信息还不够明了等。对于这些问题,在今后的学习中,我们会不断地寻求改进方法,力求将这些问题解决。程序运用了线形链表的数据结构,把对链表的各个操作作为子函数,接着用一个主函数去调用它们,但是在调用的过程中还是存在着一些问题,导致我们的运行结果中还存在着一些小问题,导致我们的总程序运行结果不够完善,就这一问题,我们自己做了很多改正,同时也请教了老师和一些优秀的学长,但是最终在主函数中存在的一个问题还是没有能够改正,虽然实验报告已经交了,但是对于这个问题的研究我们还将继续,相信最终我们一定能找到错误并改正。在此次实验中,我们经过从几十个错误到十几个错误到几个错误再到最后有一个错误的漫长的过程,虽然只不过是短短的不到一星期的时间,但是感觉真的就像过了很久,在有很多错误的情况下,我们也想过放弃自己写的,从网上档一份或者看看其他同学弄的,但是最终我们还是坚持了下来。四个人的小组,我们始终能够积极地做好自己的模块,一起上机,一起调试,当一个人的程序出现错误时,大家都会在一起改正错误,直到出现零错误为止。很庆幸我们没有把自己的设计思想和程序半路抛弃,在这个过程中,我们对于C语言程序设计的内容和数据结构里面的一些内容有了更加透彻的认识,也证实了那句话“实践是检验真理的唯一标准”,通过实验才发现原来自己对一些基础知识的掌握还是不够清楚,或者即使是清楚了也不能把它付诸实践。团队的力量在很多时候都让自己很受鼓舞,每个人都把实验当做一种责任,各负其责。从这次实验中我也更加明白的集体的力量是无穷大的时间虽然短暂,但是它的意义却不言而喻,希望在以后的学习中,还能多接触这样的大型实验,在实验中锻炼自己的实践能力。七、附录出库模块程序设计如下:#include #include #include struct heise_product /*黑色物品线形链表出库的结构体定义*/ char num12; /*黑色物品出库帐号的定义*/char p_num12; /*黑色物品产品规格的定义*/char name12; /*黑色物品出库产品名称的定义*/int amount; /*出库数量的定义*/int price; /*出库单价的定义*/int t_price; /*出库总价的定义*/int year; /*出库年份*/int season; /*出库季节*/int month; /*出库月份*/int day;/*出库日期*/struct heise_product *next; /*黑色物品出库指针的定义*/ ; struct heise_product *hhead; /*出库产品建立一个头指针*/struct youse_product /*有色物品线形链表出库的结构体定义*/ char num12; /*有色物品出库帐号的定义*/char p_num12; /*有色物品产品规格的定义*/char name12; /*有色物品出库产品名称的定义*/int amount; /*出库数量的定义*/int price; /*出库单价的定义*/int t_price; /*出库总价的定义*/int year; /*出库年份*/int season; /*出库季节*/int month; /*出库月份*/int day;/*出库日期*/struct youse_product *next; /*有色物品出库指针的定义*/ ; struct youse_product *yhead; /*出库产品建立一个头指针*/struct fei_product /*非金属物品线形链表出库的结构体定义*/ char num12; /*非金属物品出库帐号的定义*/char p_num12; /*非金属物品产品规格的定义*/char name12; /*非金属物品出库产品名称的定义*/int amount; /*出库数量的定义*/int price; /*出库单价的定义*/int t_price; /*出库总价的定义*/int year; /*出库年份*/int season; /*出库季节*/int month; /*出库月份*/int day;/*出库日期*/struct fei_product *next; /*非金属物品出库指针的定义*/ ; struct fei_product *fhead; /*出库产品建立一个头指针*/struct jixie_product /*机械制品线形链表出库的结构体定义*/ char num12; /*机械制品物品出库帐号的定义*/char p_num12; /*机械制品产品规格的定义*/char name12; /*机械制品出库产品名称的定义*/int amount; /*出库数量的定义*/int price; /*出库单价的定义*/int t_price; /*出库总价的定义*/int year; /*出库年份*/int season; /*出库季节*/int month; /*出库月份*/int day;/*出库日期*/struct jixie_product *next; /*机械制品出库指针的定义*/ ; struct jixie_product *jhead; /*出库产品建立一个头指针*/struct kehu_information char kname12; char name12;char num12; int amount; int date; struct kehu_information *next; ; struct kehu_information *khead;int heise_modify() char m_num12; /*先定义一个指针*/struct heise_product * p; p=hhead; printf(Enter the modify numn); scanf(%s,&m_num); /*输入出库的编号*/if (p=NULL)/*开始没有数据*/ printf(Sorry! No data can be foundn); return 0; while(p!=NULL) if (strcmp(p-num,m_num)=0) /*编号比较*/ printf(Enter the new data without numn); scanf(%s%s%d%d%d, &p-p_num,&p-name,&p-amount,&p-price,&p-t_price); /*输入修改出库的信息*/printf(One data had modifiedn); return 0; p=p-next; printf(Sorry! No num has foundn); int youse_modify() char m_num12; /*先定义一个指针*/struct youse_product * p; p=yhead; printf(Enter the modify numn); scanf(%s,&m_num); /*输入出库的编号*/if (p=NULL)/*开始没有数据*/ printf(Sorry! No data can be foundn); return 0; while(p!=NULL) if (strcmp(p-num,m_num)=0) /*编号比较*/ printf(Enter the new data without numn); scanf(%s%s%d%d%d, &p-p_num,&p-name,&p-amount,&p-price,&p-t_price); /*输入修改出库的信息*/printf(One data had modifiedn); return 0; p=p-next; printf(Sorry! No num has foundn); int fei_modify() char m_num12; /*先定义一个指针*/struct fei_product * p; p=fhead; printf(Enter the modify numn); scanf(%s,&m_num); /*输入出库的编号*/if (p=NULL)/*开始没有数据*/ printf(Sorry! No data can be foundn); return 0; while(p!=NULL) if (strcmp(p-num,m_num)=0) /*编号比较*/ printf(Enter the new data without numn); scanf(%s%s%d%d%d, &p-p_num,&p-name,&p-amount,&p-price,&p-t_price); /*输入修改出库的信息*/printf(One data had modifiedn); return 0; p=p-next; printf(Sorry! No num has foundn); int jixie_modify() char m_num12; /*先定义一个指针*/struct jixie_product * p; p=jhead; printf(Enter the modify numn); scanf(%s,&m_num); /*输入出库的编号*/if (p=NULL)/*开始没有数据*/ printf(Sorry! No data can be foundn); return 0; while(p!=NULL) if (strcmp(p-num,m_num)=0) /*编号比较*/ printf(Enter the new data without numn); scanf(%s%s%d%d%d, &p-p_num,&p-nam
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 甲方验收合格协议书范本
- 矿泉水客户销售合同范本
- 维修保养合同协议书范本
- 高端会所会员合同协议书
- 驻地企业抗疫协议书模板
- 麻蜥蜴养殖采购合同范本
- 银行与孵化器合作协议书
- 私人租地合同协议书范本
- 机动车抵押担保合同范本
- 电力数据采集协议书模板
- 戴海崎心理与教育测量第4版课后习题答案
- 新概念英语第二册单词表默写纸
- DB33-T 2355-2021 城管驿站建设与管理规范
- 工业机器人维护与保养PPT全套完整课件
- 新华书店读者问卷调查表
- JJG 315-1983直流数字电压表
- GB/T 15088-2009道路车辆牵引销强度试验
- 熠搜家庭户用光伏电站推介
- 特种设备安全监察条例课件
- 高中区域地理:极地地区南极、北极
- 公路建设项目可行性研究报告编制办法讲解课件
评论
0/150
提交评论