资源预览内容
第1页 / 共21页
第2页 / 共21页
第3页 / 共21页
第4页 / 共21页
第5页 / 共21页
第6页 / 共21页
第7页 / 共21页
第8页 / 共21页
第9页 / 共21页
第10页 / 共21页
亲,该文档总共21页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
下载可编辑中北大学数 据 结 构课 程 设 计 说 明 书学生姓名:宋立群学 号:1021011803学 院:软件学院专 业:软件开发与测试题 目:产品进销存管理系统指导教师何志英2011年12月20日(一)设计任务概述针对某一种行业的库房的产品进销存情况进行管理。1、采用一定的存储结构对库房的货品及其数量进行分类管理;运用链表进行存储,同时用到指针变量,运用循环存储,对存储产品的信息要用到日期结构体和产品结构体,对存储要用到文件指针以及文件的一些方法的使用。2、可以进行产品类的添加、产品的添加、产品数量的添加; 首先要找到链表的指针变量,对指针变量进行修改,然后再进行产品的出入。3、能够查询库房每种产品的总量、进货日期、销出数量、销售时间等; 首先要定义一个查询函数,对产品类的指针变量进行循环查询,再对产品的指针变量进行循环查询,找到产品时,在调用显示产品信息函数,显示查询到的产品的各项信息。(二)本设计所采用的数据运用链表进行存储,同时用到指针变量,循环存储(三)功能模块详细设计3.1详细设计思想1、顺序表挂接链表的抽象定义类型:ADT sqmountlink 数据对象:D=ai|aikindlist,i=1,2,n,n=0 数据关系:R=|ai-1,aiD,i=1,2,3,n 基本操作: InitMountLisr(&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的内容3.2核心代码#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 productlnode char pname30; /产品名称 int totalquantity; /产品总量 date goodsdate; /进货日期 int salesquantity; /消除数量 date salestime; /销售时间 struct productlnode *nextproduct;productlnode,*plinklist;typedef struct kindlnode productlnode *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;i=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的某产品类中的某产品的总量,且需添加的产品总量为n int i,k; plinklist p; for(i=0;iL.length;i+) if(strcmp(L.kindelemi).pkindname,pkindname1)!=0) continue; else break; if(inextproduct) k=strcmp(p-pname,pname1); if(k=0)
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号