免费预览已结束,剩余8页可下载查看
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
实习报告题目:编制一个产品进销存管理系统的程序一、 需求分析1 针对食品这一行业,对其进行库房的产品进销存管理,选择线性顺序表来存储产品类,选择线性链表来存储属于此产品类的产品,并将产品链挂接到相应的产品类上。其中存储产品时还应将属于此产品的一些信息如产品的进货总量,进货日期,销出数量,销售时间等进行相应存储。2 能够对此库房产品进销存管理系统进行产品类的添加、产品的添加、产品数量的添加。3 能够用一定的查询方法查询库房每种产品的总量、进货日期、销出数量、销售时间等4 本演示程序以用户和计算机的对话方式执行,即在计算机终端上显示“提示信息”之后,由用户在键盘上输入演示程序中规定的操作命令;相应的操作结果显示在其后。二、 概要设计1. 设定顺序表挂接链表的抽象数据类型定义:ADT sqmountlink数据对象:D=ai|aikindlist,i=1,2,n,n0数据关系:R=|ai-1,aiD,i=2,3,n基本操作:InitMountList(&L) 操作结果:构造一个空的顺序表挂接链表L。DestroyMountList(&L) 初始条件:顺序表挂接链表L已存在。 操作结果:销毁顺序表挂接链表L。 CreatMountList(&L) 初始条件:顺序表挂接链表L不存在。 操作结果:创建一个顺序表挂接链表L,并将L返回。 KindInsert(&L,n) 初始条件:顺序表挂接链表L已存在。 操作结果:向顺序表挂接链表L中添加n个产品类。 ProductInsert(&L,i,n) 初始条件:顺序表挂接链表L已存在且要将产品插入的产品类i已存在。 操作结果:向顺序表挂接链表L中的产品类i中添加n种产品。 ProQuantity_add(&L,i,e,n) 初始条件 :顺序表挂接链表L已存在且需添加数量的产品及产品所属的类也已存在。 操作结果:添加顺序表挂接链表L的产品类i中的产品e的总量。 Visit(&L,i,e)初始条件:顺序表挂接链表L已存在且待查询产品所属产品类i也已存在。操作结果:在顺序表挂接链表L中查询产品e的各项信息( 其进货总量、进货日期、销出数量、销售时间等)。 DisplayList(&L) 初始条件:顺序表挂接链表L已存在。 操作结果:显示顺序表挂接链表L的内容。2.本程序包含两个模块:1)主程序模块:void main() 初始化一个空的顺序表挂接链表L; 创建初始的产品类、产品顺序表挂接链表L; 列出要执行的各项操作; Loop:输入各项操作命令;switch(命令) 接受命令; 处理命令; 2)顺序表挂接链表单元模块实现顺序表挂接链表的抽象数据类型;各模块之间的调用关系如下: 主程序模块 顺序表挂接链表单元模块 三、 详细设计1. 程序设计#include #include #include #define ok 1#define error 0#define overflow 0 #define SQMOUNTLINK_INIT_SIZE 100#define SQMOUNTLINKINCREMENT 10typedef struct date int year;int month;int day;date; /日期typedef struct productlnodechar pname30; /产品名称int totalquantity; /产品总量 date goodsdate; /进货日期int salesquantity; /销出数量 date salestime; /销售时间 struct productlnode *nextproduct; productlnode,*plinklist;typedef struct kindlnodeproductlnode *firstproduct;char pkindname30; kindlnode;typedef struct kindlnode *kindelem;int length;int listsize;sqmountlink;int InitMountList(sqmountlink &L) /初始化一个空的顺序表挂接链表L int i; L.kindelem=(kindlnode *)malloc(SQMOUNTLINK_INIT_SIZE*sizeof(kindlnode); if(!L.kindelem) exit(overflow); L.length=0; L.listsize=SQMOUNTLINK_INIT_SIZE; for(i=0;iL.listsize;i+) (L.kindelemi).firstproduct=NULL; return ok;/InitMountListint CreatMountList(sqmountlink &L)/创建初始的产品类、产品顺序表挂接链表L plinklist p,q;int i,j,n,k;printf(此线性表L中含有的产品类个数:n);scanf(%d,&n);for(i=0;i=1) p=(plinklist)malloc(sizeof(productlnode); printf(输入此产品类所含产品的产品名称、总量、进货日期、销出数量、销售时间:n); scanf(%s %d %d,%d,%d %d %d,%d,%d,&(p-pname),&(p-totalquantity),&(p-goodsdate).year),&(p-goodsdate).month),&(p-goodsdate).day), &(p-salesquantity),&(p-salestime).year),&(p-salestime).month),&(p-salestime).day); L.kindelemi.firstproduct=p; p-nextproduct=NULL; for(j=1;jpname),&(q-totalquantity),&(q-goodsdate).year),&(q-goodsdate).month),&(q-goodsdate).day), &(q-salesquantity),&(q-salestime).year),&(q-salestime).month),&(q-salestime).day);/调试输入年月日时,年月日要用逗号分隔开。 q-nextproduct=p-nextproduct; p-nextproduct=q; p=q; L.length+;return ok;/CreatMountListint KindInsert(sqmountlink &L,int n) /向顺序表挂接链表L中添加n类产品int i; kindlnode *newbase;if(L.length+n=L.listsize) newbase=(kindlnode *)realloc(L.kindelem,(L.listsize+n)*sizeof(kindlnode); if(!newbase) exit(overflow); L.kindelem = newbase; L.listsize+=n;printf(需添加的产品类名称:n); for(i=0;in;i+)scanf(%s,&L.kindelemL.length.pkindname);L.kindelemL.length.firstproduct=NULL;L.length+; return ok;/KindInsertint ProductInsert(sqmountlink &L,char pkindname2,int n) /向顺序表挂接链表L的某产品类中添加n个产品 plinklist p,q;int k,j; for(k=0;kpname),&(q-totalquantity),&(q-goodsdate).year),&(q-goodsdate).month),&(q-goodsdate).day), &(q-salesquantity),&(q-salestime).year),&(q-salestime).month),&(q-salestime).day); q-nextproduct=NULL; (L.kindelemk).firstproduct=q; for(j=1;jpname),&(p-totalquantity),&(p-goodsdate).year),&(p-goodsdate).month),&(p-goodsdate).day), &(p-salesquantity),&(p-salestime).year),&(p-salestime).month),&(p-salestime).day); p-nextproduct=q-nextproduct; q-nextproduct=p; q=p; else for (q=L.kindelemk.firstproduct; ;q=q-nextproduct) if(!(q-nextproduct) break; printf(需添加产品的名称、总量、进货日期、销出数量、销售时间:n); for(j=0;jpname),&(p-totalquantity),&(p-goodsdate).year),&(p-goodsdate).month),&(p-goodsdate).day), &(p-salesquantity),&(p-salestime).year),&(p-salestime).month),&(p-salestime).day); p-nextproduct=q-nextproduct; q-nextproduct=p; q=p; return ok;/ProductInsertvoid ProQuantity_add(sqmountlink &L,char pkindname1,char pname1,int n) /添加顺序表挂接链表L的某产品类中的某产品的总量,且需添加的产品总量为nint i, k; plinklist p;for(i=0;iL.length;i+) if(strcmp(L.kindelemi).pkindname,pkindname1)!=0) continue;elsebreak; if(inextproduct) k=strcmp(p-pname,pname1); if(k=0) p-totalquantity=p-totalquantity+n; printf(查看添加后产品的各项输出:%s %d %,d%d,%d %d %d,%d,%dn,p-pname,p-totalquantity,(p-goodsdate).year,(p-goodsdate).month,(p-goodsdate).day, p-salesquantity,(p-salestime).year,(p-salestime).month,(p-salestime).day); /ProQuantity_addvoid Visit(sqmountlink &L,char pkindname3,char pname3) /在顺序表挂接链表L中,查询属于某产品类的某产品的各项信息int i, k; plinklist p;for(i=0;iL.length;i+) if(strcmp(L.kindelemi).pkindname,pkindname3)!=0) continue;elsebreak; if(inextproduct) k=strcmp(p-pname,pname3); if(k=0) break; if(k!=0) printf(此产品不存在:n); else printf(输出待查询产品的各项信息:n); printf(%s %s %d %d,%d,%d %d %d,%d,%dn,(L.kindelemi).pkindname,p-pname,p-totalquantity,(p-goodsdate).year,(p-goodsdate).month,(p-goodsdate).day, p-salesquantity,(p-salestime).year,(p-salestime).month,(p-salestime).day); / Visit void DisplayList(sqmountlink &L)/显示各产品所属产品类,产品名称、产品总量,进货日期,销出数量,销售时间int i; plinklist p;printf(产品类 产品 产品总量 进货日期 销出数量 销售时间n);for(i=0;inextproduct) printf(%s %s %d %d,%d,%d %d %d,%d,%dn,(L.kindelemi).pkindname,p-pname,p-totalquantity,(p-goodsdate).year,(p-goodsdate).month,(p-goodsdate).day, p-salesquantity,(p-salestime).year,(p-salestime).month,(p-salestime).day);/DisplayListvoid DestroyMountList(sqmountlink &L)/销毁已存在的顺序表挂接链表Lint i; kindlnode *p; plinklist q;for(i=L.length;i=0;i-) p=&(L.kindelemi); if(*p).firstproduct=NULL) free(p); else while(*p).firstproduct) for(q=(*p).firstproduct;q-nextproduct;q=q-nextproduct); free(q); free(p); /DestroyMountListvoid menu_operation()/操作菜单printf(-输入所要执行操作:-n);printf(-产品类的添加:1-n);printf(-产品的添加:2-n);printf(-产品数量的添加:3-n);printf(-查询每种产品所属产品类,产品总量,进货日期,销出数量,销售时间:4-n); printf(-释放L所占内存空间,退出程序:0-n);/menu_operation/*-主程序-*/void main(void)int order;int i,n;char a30;char b30;sqmountlink L; InitMountList(L); printf(-创建初始的产品类、产品顺序表挂接链表L-n); CreatMountList(L); DisplayList(L); printf(-初始的产品类、产品顺序表挂接链表L创建完成-n); menu_operation();loop:printf(输入命令:);scanf(%d,&order);switch(order)case 1: printf(需添加产品类的个数:); scanf(%d,&i); KindInsert(L,i); printf(输出修改后的产品库存管理表:n); DisplayList(L); goto loop;case 2: printf(需添加产品所属产品类的名称:); scanf(%s,&a); printf(需向此产品类添加产品的个数:); scanf(%d,&i); ProductInsert(L,a,i); printf(输出修改后的产品库存管理表:n); DisplayList(L); goto loop;case 3: printf(输入需添加数量的产品所属产品类的名称:); scanf(%s,&a); printf(输入需添加数量的产品的名称:); scanf(%s,&b); printf(输入需添加产品的数量:); scanf(%d,&n); ProQuantity_add(L,a,b,n); printf(输出修改后的产品库存管理表:n); DisplayList(L); goto loop;case 4: printf(输入待查询产品所属产品类的名称:); scanf(%s,&a); printf(输入待查询产品的名称:); scanf(%s,&b); Visit(L,a,b); goto loop;case 0: DestroyMountList(L); exit(0);2. 函数的调用关系图mainInitMountListCreatMountListKindInsertProductInsertProQuantity_addVisitDisplayListDestroyMountList四、 设计和调试分析1. 因要存取产品类和产品,而产品又从属于某一个产品类,所以本程序在存储结构设计方面采取了顺序表挂接链表的形式,其中顺序表存储产品类,链表存储产品。2. 因考虑到产品类与产品类之间,一类中的产品与另一产品类及另一产品类的产品并无联系,所以本程序并未采用图的邻接表的形式存储,而是采用了类似图的邻接表的存储结构存储。3. 本程序中产品类的添加、属于同一类产品的添加都采用末尾插入。4. 本程序的设计还存在一些缺点;例如对某些不合逻辑的输入,还缺少一些判错处理(比如逻辑上销售时间肯定在进货时间之后,此程序未给出这方面相应的比较判断处理),有些操作函数的设计不完善(如:货物可能分几次进入,而显示时间的存储单元只有一个,无法同时显示在不同时间进货的日期。查询某产品的各项信息时,必须事先知道产品属于哪一类等)。5. 起初程序设计中采用了固定长度的数组,在动态分配存储空间时将所分配空间的起始地址赋给了所定义的数组名,调试时出错。因固定长度的数组名为一常量地址,不可再对其赋值。程序中年月日的输入是用逗号分隔的,调试时用空格进行分隔,出错。五、 用户手册1、 本程序的运行环境为DOS操作系统,执行文件为Text1.exe2、 进入演示程序后即显示文本方式的用户界面:3.运行程序,显示上述命令行对话框,按照其中的提示信息一步步进行操作即可。六、测试结果-创建初始的产品类、产品顺序表挂接链表L-此线性表L中含有的产品类个数:2输入第1个产品类名称:meat输入此产品类含有的产品个数:2输入此产品类所含产品的产品名称、总量、进货日期、销出数量、销售时间:fish 100 1988,05,06 20 1988,06,05输入此产品类所含产品的产品名称、总量、进货日期、销出数量、销售时间:pork 200 1988,06,05 20 1988,08,06输入第2个产品类名称:fruit输入此产品类含有的产品个数:1输入此产品类所含产品的产品名称、总量、进货日期、销出数量、销售时间:apple 200 1988,05,06 50 1988,08,09产品类 产品 产品总量 进货日期 销出数量 销售时间meat fish 100 1988,5,6 20 1988,6,5meat pork 200 1988,6,5 20 1988,8,6fruit apple 200 1988,5,6 50 1988,8,9-初始的产品类、产品顺序表挂接链表L创建完成-输入所要执行操作:-产品类的添加:1-产品的添加:2-产品数量的添加:3-查询每种产品所属产品类,产品总量,进货日期,销出数量,销售时间:4-释放L所占内存空间,退出程序:0-输入命令:1需添加产品类的个数:2需添加的产品类名称:vegetable milk输出修改后的产品库存管理表:产品类 产品 产品总量 进货日期 销出数量 销售时间meat fish 100 1988,5,6 20 1988,6,5meat pork 200 1988,6,5 20 1988,8,6fruit apple 200 1988,5,6 50 1988,8,9vegetablemilk输入命令:2需添加产品所属产品类的名称:fruit需向此产品类添加产品的个数:2需添加产品的名称、总量、进货日期、销出数量、销售时间:banana 200 1988,10,6 100 1989,02,03orange 100 1988,12,03 20 1989,01,06输出修改后的产品库存管理表:产品类 产品 产品总量 进货日期 销出数量 销售时间meat fish 100 1988,5,6 20 1988,6,5meat pork 200 1988,6,5 20 1988,8,6fruit apple 200 1988,5,6 50 1988,8,9fruit banana 200 1988,10,6 100 1989,2,3fruit orange 100 1988,12,3 20 1
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 全国大学生知识产权竞赛(完整题库+答案)
- 2025年陕西省建筑安全员考试题库附答案
- 健康饮食知识测试题库及标准答案
- 成考招生考试题库及答案
- 建筑工地安全管理人员实务操作手册与试题集
- 2025年高职数字媒体(直播运营)试题及答案
- DB34-T 4454-2023 乡镇(街道)未成年人保护工作站建设
- 管理者角色定位分析表
- 婚庆服务与管理答辩
- 教育行业心理面试指南及答案
- 互联网广告行业广告投放策略优化方案
- 装修案例汇报
- 非新生儿破伤风诊疗规范(2024年版)解读
- 6大国工匠百炼成器教案-蓝色
- 食品生产企业产品贮存运输及交付管理制度
- DB3301-T 65.11-2024 反恐怖防范系统管理规范 第11部分:医院
- 2025届广东省深圳市深圳实验学校初中部联考化学九年级第一学期期末综合测试试题含解析
- 第15节 辽宋夏金元的文化和科技 知识清单 高三统编版(2019)历史一轮复习(选必融合)
- 电子商务导论 记分作业资料-上海开大参考资料
- DZ∕T 0215-2020 矿产地质勘查规范 煤(正式版)
- 氨甲环酸制备工艺
评论
0/150
提交评论