中北大学数据结构课程设计说明书学生姓名:宋立群学号:1021011803学院:软件学院专业:软件开发与测试题目:产品进销存管理系统指导教师何志英.......专业专注.2011年12月20日(一)设计任务概述针对某一种行业的库房的产品进销存情况进行管理。1、采用一定的存储结构对库房的货品及其数量进行分类管理;运用链表进行存储,同时用到指针变量,运用循环存储,对存储产品的信息要用到日期结构体和产品结构体,对存储要用到文件指针以及文件的一些方法的使用。2、可以进行产品类的添加、产品的添加、产品数量的添加;首先要找到链表的指针变量,对指针变量进行修改,然后再进行产品的出入。3、能够查询库房每种产品的总量、进货日期、销出数量、销售时间等;首先要定义一个查询函数,对产品类的指针变量进行循环查询,再对产品的指针变量进行循环查询,找到产品时,在调用显示产品信息函数,显示查询到的产品的各项信息。(二)本设计所采用的数据运用链表进行存储,同时用到指针变量,循环存储(三)功能模块详细设计3.1详细设计思想1、顺序表挂接链表的抽象定义类型:.......专业专注.ADTsqmountlink{数据对象:D={ai|ai∈kindlist,i=1,2,…,n,n=0}数据关系:R={ai-1,ai|ai-1,ai∈D,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核心代码#includestdio.h#includestdlib.h#includestring.h#defineok1#defineerror0#defineoverflow0#defineSQMOUNTLINK_INIT_SIZE100#defineSQMOUNTLINKINCREMENT10typedefstructdate{intyear;intmonth;intday;}date;//日期typedefstructproductlnode{charpname[30];//产品名称inttotalquantity;//产品总量dategoodsdate;//进货日期intsalesquantity;//消除数量datesalestime;//销售时间.......专业专注.structproductlnode*nextproduct;}productlnode,*plinklist;typedefstructkindlnode{productlnode*firstproduct;charpkindname[30];}kindlnode;typedefstruct{kindlnode*kindelem;intlength;intlistsize;}sqmountlink;intInitMountList(sqmountlink&L){//初始化一个空的顺序表挂接链表Linti;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.kindelem[i]).firstproduct=NULL;.......专业专注.}returnok;}//InitMountListintKindInsert(sqmountlink&L,intn){//向顺序表挂接链表L中添加N类产品inti;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.kindelem[L.length].pkindname);L.kindelem[L.length].firstproduct=NULL;L.length++;}returnok;}//KindInsert.......专业专注.intProductInsert(sqmountlink&L,charpkindname2[],intn){//向顺序表挂接链表L的某产品类中添加N个产品plinklistp,q;intk,j;for(k=0;kL.length;k++){if(strcmp((L.kindelem[k]).pkindname,pkindname2)!=0)continue;elsebreak;}if(L.kindelem[k].firstproduct==NULL){q=(plinklist)malloc(sizeof(productlnode));printf(输入此产品类所含产品的产品名称、总量、进货日期、销售数量、销售时间:\n);scanf(%s%d%d,%d,%d%d%d,%d,%d,&(q-pname),&(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.kindelem[k]).firstproduct=q;for(j=1;jn;j++){.......专业专注.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));p-nextproduct=q-nextproduct;q-nextproduct=p;q=p;}}else{for(q=L.kindelem[k].firstproduct;;q=q-nextproduct){if(!(q-nextproduct))break;}printf(需添加产品的名称、总量、进货日期、销售数量、销售时间:\n);for(j=0;jn;j++){p=(plinklist)malloc(sizeof(productlnode));.......专业专注.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));p-nextproduct=q-nextproduct;q-nextproduct=p;q=p;}}returnok;}//ProductInsertvoidProQuantity_add(sqmountlink&L,charpkindname1[],charpname1[],intn){//添加顺序表挂接链表L的某产品类中的某产品的总量,且需添加的产品总量为ninti,k;plinklistp;for(i=0;iL.length;i++){if(strcmp((L.kindelem[i]).pkindname,pkindname1)!=0)continue;elsebreak;.......专业专注.}if(iL.length){for(p=L.kindelem[i].firstproduct;p!=NULL;p=p-nextproduct){k=strcmp(p-pname,pname1);if(k==0){p-totalquantity=p-totalquantity+n;printf(查看添加后产品的各项输出:%s%d%d,%d,%d%d%d,%d,%d\n,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_addvoidProQuantity_subtract(sqmountlink&L,charpkindname4[],charpname4[],intn){//添加顺序表挂接链表L的某产品类中的某产品销出数量,且销出的数量ninti,k;plinklistp;for(i=0;iL.length;i++){if(strcmp((L.kindelem[i]).pkindname,pkindname4)!=0)continue;.......专业专注.elsebreak;}if(iL.length){for(p=L.kindelem[i].firstproduct;p!=NULL;p=p-nextproduct){k=strcmp(p-pname,pname4);if(k==0){p-salesquantity=p-salesquantity+n;printf(查看添加后产品的各项输出:%s%d%d,%d,%d%d%d,%d,%d\n,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_subtractvoidVisit(sqmountlink&L,charpkindname3[],charpname3[]){//在顺序表挂接链表L中,查询属于某产品类的某产品的各项信息inti,k