产品进销存管理系统 课程设计报告书精品资料.doc
中北大学数据 结构课 程 设 计 说 明 书 学生姓名:宋立群学 号:101080学 院:软件学院专 业: 软件开发与测试题 目:产品进销存管理系统指导教师何志英 20年月20日(一)设计任务概述针对某一种行业的库房的产品进销存情况进行管理.、采用一定的存储结构对库房的货品及其数量进行分类管理;运用链表进行存储,同时用到指针变量,运用循环存储,对存储产品的信息要用到日期结构体和产品结构体,对存储要用到文件指针以及文件的一些方法的使用。、可以进行产品类的添加、产品的添加、产品数量的添加; 首先要找到链表的指针变量,对指针变量进行修改,然后再进行产品的出入。3、能够查询库房每种产品的总量、进货日期、销出数量、销售时间等; 首先要定义一个查询函数,对产品类的指针变量进行循环查询,再对产品的指针变量进行循环查询,找到产品时,在调用显示产品信息函数,显示查询到的产品的各项信息。(二)本设计所采用的数据运用链表进行存储,同时用到指针变量,循环存储(三)功能模块详细设计3.1详细设计思想1、顺序表挂接链表的抽象定义类型:ADT sqountli 数据对象:D=ai|aiindt,i=1,2,,,n>= 数据关系:R=i1,ai|a1,a,i1,2,3,,n 基本操作: ntMontLsr(&L) 操作结果:构造一个空的顺序表挂接链表L。 KndInsert(L,n) 初始条件:顺序表挂接链表L已存在。 操作结果:向顺序表挂接链表中添加类产品ProductIse(&L,I,) 初始条件:顺序表挂接链表L已存在且要将产品插入的产品类i已存在 操作结果:向顺序表挂接链表L中的产品类i中添加N种产品PrQuaniy_ad(&,I,e,n) 初始条件:顺序表挂接链表L已存在且需要添加的产品及产品所属的类也存在 操作结果:添加顺序表挂接链表L的产品类i中的产品的数量isit(L,i,) 初始条件:顺序表挂接链表已存在且待查询的产品所属产品类i也存在 操作结果:在顺序表挂接链表L中查询产品的各项信息DsplayList(&L) 初始条件:顺序表挂接链表L已存在 操作结果:现实顺序表挂接链表L的内容3。2核心代码#ilude<stdi.hcude<stdlb.#incuetringh>#efn ok 1define errr 0define ovro0eineSOUNTIK_I_SZE 10fin SMNTLINIMEN10ypedef struct at in year; i mont; nt dy;ate; /日期tpedef tructprdctlode r name3; /产品名称 int otluatiy; 产品总量 dte goodsdate; /进货日期 in sleqniy; /消除数量 dte slestm; /销售时间 strct poducldenxpdut;odctlnode,*plinlist;ypede sruct kndlnode produclnode *firstprduct; charkndnm30;kdlnode;tyde stuc inlnde kidle; int ength; itlistsi;sqmouin;it IitMountList(smoutnkL) /初始化一个空的顺序表挂接链表L nti; Lilem=(kindnde*)alloc(QMUNTLK_INTIEsizeo(kindlno); if(!.indlm) exit(overfw); L.length=0; Llistsze=SMONTNK_NI_SIZ; or(i0;<。istsize;i+) (L。kindlm).fistproduct=NULL; reu ok;/IniMoutitint Kndnsert(sqmtlik &L,int n) /向顺序表挂接链表L中添加N类产品 nt i; kindloe ewase; if(。length+n=L.lstsze) nwbase=(kinlnode*)realc(Lkideem,(L。ise+n)*sizo(ndlnde)); if(!nwbas) exi(overfow); L。kndlm=nwbase; L。listsizen; rintf("需添加的产品类名称:n); for(i=;i<n;+) scanf("s",L.kideeLeng.pknne); L.kindelemL.lengt.irduc=UL; lenth+; rurn ok;/Kinsertint Productnset(sqoulink L,car pindname2,int n) /向顺序表挂接链表的某产品类中添加N个产品 plilist p,q; int k,j; or(=0;kL.leng;k+) i(trc((L.kindele).kdnme,pkinme2)!=) contiu; else reak; if(L。kindelem.firstproduct=NLL) q=(pllit)alloc(izo(prductlnode)); printf("输入此产品类所含产品的产品名称、总量、进货日期、销售数量、销售时间:n"); snf(”s d %,%d,d%d,%d,%d”,&(q->na),&(qttlqtty),&(qoodsat)er),&(godsdate).ont),&(q>gooddate)a),(q-saesqantiy),&(q-saletime).yr),(q>saltie)。moth),((->slstime)。day); q-nextrct=NULL; (ndeek).fisrdt; for(j1;n;j+) p=(linklist)alloc(izof(rodulnod)); prtf(”输入此产品类所含产品的产品名称、总量、进货日期、销售数量、销售时间:n"); cnf(”s dd,%d,%d dd,%d,%d",&(p-pname),&(>totalquantty),((->gdsat)。ar),(pgodsda)oth),(pgoodsdate)。da),(>salsantity),&((p-saesime)ear),(p-sasime)。nth),&(p-alestime).da); p-nextpuct=q>extproduct; q-etprodut=; q=; els for(=L。indelmk.frtproduct; ;=q-ntproduct) if(!(q>etpodt)) reak; pint("需添加产品的名称、总量、进货日期、销售数量、销售时间:n"); f(j=0;<n;+) p=(lnklis)allo(sizeof(pructlnode); scaf(%s%d%d,%, %d ,d,%d",(pname),(>aquantiy),((p->goodda).ar),(-godsate)mont),(->oodat)a),(p>saleuit),((>sastie)year),&((p-sestime)month),(-saltime)。day)); pnextpro=q-nxtpduct; q-nextprout=; q=p; eu ok;/ProductsetvoidProQuny_add(sqoutlnk L,charpnnam1,ha pnae,int n) /添加顺序表挂接链表L的某产品类中的某产品的总量,且需添加的产品总量为n ii,k; plinklist; fo(i=0;i<L。lnth;+) i(strm((L。indlem)pidname,pkindname1)!=0) cntinue; els reak; (iL.lt) o(p=L.kindem。fistprodct;p!=NL;ppnextrot) kstrcp(p-pname,pne); i(k=0) p>toalqatity=-oaunity+n; printf("查看添加后产品的各项输出:s d %,,d d %d,d,%dn",p>pname,ptoaqniy,(p>godsdat)year,(->gosdate)。monh,(>osate).ay,-saesquntiy,(psalesim).year,(psaestime)。month,(p-salestime)day); /oQunity_addvoid ProQuantiy_ubrc(sqmontik&,ha pkndname,cpnae4,it n) /添加顺序表挂接链表L的某产品类中的某产品销出数量,且销出的数量 ini,k; iklit p; o(i=0;i<L。lnth;+) if(srcp((L.kineli)。pkiname,kinae4)!=) tinue; ese reak; if(i。lengt) for(p=L。knelemifirstproduct;p!NUL;=petprodct) =stmp(p-pnae,pname4); if(=0) p-aesquntt=p>saesqantity+n; printf("查看添加后产品的各项输出:s d d,d,d %d ,d,%dn",pnm,p->tolqnity,(pgodsdae)ea,(goodsde)。mo,(pgoodsdate).dy,psalequantit,(p>aletie).year,(>saesme)。onth,(p->saestim).a); /ProQuanitsubtracvod Visit(sountlin,har pindname3,char na)/在顺序表挂接链表中,查询属于某产品类的某产品的各项信息 in ,k; lkt p; for(i=0;iL.ngth;i+) if(trcmp((。kindelmi).pindnme,pidnam3)!=0) continue; ee rak; if(i<。length) fo(=L。indlemi。rstprodct;!=ULL;p=pnextpoct) =strcp(p-ame,na3); (k=0) br; if(k!=0) prin(”此产品不存在:"); else printf(”输出待查询产品的各项信息:n”); pnt(产品类产 品产品总量进 货日 期销售数量销 售 时 间n”); rnf(”s s %d ,d, %d %d,%,%dn",(Lkieei)pkindnme,p-pname,p-totaquanity,(pgosde).yer,(p->osdte).onth,(p->goodate).dy,p-saqantity,(psaltie).year,(p-saletime)mont,(-letime).day); /Viitvoid DiplayList(sqmonlin &) /显示各产品所属产品类、产品名称、产品总量、进货日期、销售数量、销售时间 inti;linlistp; rntf(”产品类产 品产品总量进 货 日 期销售数量销售时 间n); fo(i=0;iL.length;i+) if(!(。kindelem.firtproduct)) print("%sn”,(。knelemi)。pkindnam); for(p=L.kidelem。firtproduct;p;p=p->extproduc) printf(%s %s d d,%d,d d ,d,%dn",(L.kinelem).pkindme,pname,p-totalqutiy,(pgoosate).yer,(p-godsdate)。month,(p>godsdate)ay,p>salesquatiy,(psalstie)yer,(p>alestime).moth,(psalestme)。day); /DispayListvoidmnuperatio()/操作菜单 printf("n"); pntf("输入所要执行的操作:); pintf(1、产品类添加: n); prinf(”2、产品添加: n); prtf(3、产品数量添加: ”); prnf("、产品售出: "); printf(5、查询产品: n"); rinf(”0、退出程序: n”); pnf("");/mene_oeratin/*-主程序-/voi mai(void)int odr; int i,n; cara; cha b30; sqmounlin; IntMountLs(); prit("输入时间时请按照“年,月,日”格式输入.); lop: men_oertion(); prinf(”输入命令:”); sanf("%d",&oder); wtch(order) ce 1: print(”需添加产品类的个数:"); snf(”d”,); KinIner(L,); rintf(”修改后的产品库存管理表:); DsplayLit(L); go loop; case: prinf(”需添加产品所属产品类的名称:); scnf("s",a); pintf(”需向此产品类添加产品的个数:); anf(”d”,&); PouctInset(L,a,i); prntf(”修改后的产品库存管理表:n”); DislaList(L); goolop; case 3: inf("输入需添加数量的产品所属产品类的名称:); can(”%s”,&); printf(输入需添加数量的产品的名称:”); saf(%,&b); pntf(输入需添加产品的数量:”); canf("%d”,n); PrQanty_add(L,b,); rint("修改后的产品库存管理表:n); isplaLit(); goto oop; case 4: prinf(”输入售出产品所属产品类的名称:); scanf("s",&a); printf("输入售出产品的名称:”); scaf(”s”,&b); printf(”输入售出产品的数量:"); nf(”%d",&n); Pruatity_subrct(L,a,b,); prntf("修改后的产品库存管理表:”); DiplayL(L); goto op; cas5: prinf("输入待查询产品所属产品类的名称:”); ca("s”,&a); pritf(”输入待查询产品的名称:”); scan(”s",); Vst(,a,); go lo; case 0: e(); 3.3程序运行结果 程序启动界面。产品类的添加.产品的添加。产品数量的添加。产品售出.产品查询。(四) 课程设计心得,存在问题及解决方法拿到这道题时,我没有选择自己去编写,我想我从来没有编过这么复杂的程序,一定编不成,我选择了上网去查,值得庆幸的是我找到了一部分的程序,然后拷贝上程序在机房运行,发现有许多错误,我就开始一个一个解决问题,其中有些问题是一些符号的丢失,还有头文件的错误运用,还有对一些输入超出程序范围的数据进行修改,才使程序得以继续进行,最后我通过自己和请教同学,最终整个程序得以运行,不过最重要的不是仅仅让程序运行成功,而是了解整个程序的思想设计和功能的实现,然后我开始翻译程序,把每一句都弄的清清楚楚为止,从中我复习了很多知识点,也学到了很多我以前不知道的东西.通过对本系统的开发,我对软件开发过程有了更清楚地了解,首先是问题的定义,需求分析,然后概要设计,详细设计等,让我知道了仅仅学习课本知识是不行的,还得经常去自己设计一些小的项目去发现问题,必须培养动手能力,这样才能既复习了知识点,又可以学会详细的数据结构思想和设计,所以我在以后一定要加强这方面的学习。 13