产品进销存管理系统-课程设计报告书.doc
《产品进销存管理系统-课程设计报告书.doc》由会员分享,可在线阅读,更多相关《产品进销存管理系统-课程设计报告书.doc(14页珍藏版)》请在咨信网上搜索。
中北大学 数 据 结 构 课 程 设 计 说 明 书 学生姓名: 宋立群 学 号: 1021011803 学 院: 软件学院 专 业: 软件开发与测试 题 目: 产品进销存管理系统 指导教师 何志英 2011年12月20日 (一)设计任务概述 针对某一种行业的库房的产品进销存情况进行管理. 1、采用一定的存储结构对库房的货品及其数量进行分类管理; 运用链表进行存储,同时用到指针变量,运用循环存储,对存储产品的信息要用到日期结构体和产品结构体,对存储要用到文件指针以及文件的一些方法的使用. 2、可以进行产品类的添加、产品的添加、产品数量的添加; 首先要找到链表的指针变量,对指针变量进行修改,然后再进行产品的出入。 3、能够查询库房每种产品的总量、进货日期、销出数量、销售时间等; 首先要定义一个查询函数,对产品类的指针变量进行循环查询,再对产品的指针变量进行循环查询,找到产品时,在调用显示产品信息函数,显示查询到的产品的各项信息。 (二)本设计所采用的数据 运用链表进行存储,同时用到指针变量,循环存储 (三)功能模块详细设计 3.1详细设计思想 1、顺序表挂接链表的抽象定义类型: ADT sqmountlink{ 数据对象: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核心代码 #include<stdio。h〉 #include<stdlib.h> #include〈string。h〉 #define ok 1 #define error 0 #define overflow 0 #define SQMOUNTLINK_INIT_SIZE 100 #define SQMOUNTLINKINCREMENT 10 typedef struct date{ int year; int month; int day; }date; //日期 typedef struct productlnode{ char pname[30]; //产品名称 int totalquantity; //产品总量 date goodsdate; //进货日期 int salesquantity; //消除数量 date salestime; //销售时间 struct productlnode *nextproduct; }productlnode,*plinklist; typedef struct kindlnode{ productlnode *firstproduct; char pkindname[30]; }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;i++){ (L。kindelem[i]).firstproduct=NULL; } return ok; }//InitMountList int 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;i〈n;i++){ scanf("%s”,&L。kindelem[L。length].pkindname); L。kindelem[L.length]。firstproduct=NULL; L.length++; } return ok; }//KindInsert int ProductInsert(sqmountlink &L,char pkindname2[],int n){ //向顺序表挂接链表L的某产品类中添加N个产品 plinklist p,q; int k,j; for(k=0;k<L。length;k++){ if(strcmp((L。kindelem[k])。pkindname,pkindname2)!=0) continue; else break; } 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;j<n;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;j<n;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; } } return ok; }//ProductInsert void ProQuantity_add(sqmountlink &L,char pkindname1[],char pname1[],int n){ //添加顺序表挂接链表L的某产品类中的某产品的总量,且需添加的产品总量为n int i,k; plinklist p; for(i=0;i<L。length;i++){ if(strcmp((L.kindelem[i])。pkindname,pkindname1)!=0) continue; else break; } if(i〈L。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_add void ProQuantity_subtract(sqmountlink &L,char pkindname4[],char pname4[],int n){ //添加顺序表挂接链表L的某产品类中的某产品销出数量,且销出的数量n int i,k; plinklist p; for(i=0;i〈L.length;i++){ if(strcmp((L。kindelem[i])。pkindname,pkindname4)!=0) continue; else break; } if(i<L。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_subtract void Visit(sqmountlink &L,char pkindname3[],char pname3[]){ //在顺序表挂接链表L中,查询属于某产品类的某产品的各项信息 int i,k; plinklist p; for(i=0;i〈L.length;i++){ if(strcmp((L。kindelem[i])。pkindname,pkindname3)!=0) continue; else break; } if(i〈L。length){ for(p=L。kindelem[i]。firstproduct;p!=NULL;p=p->nextproduct){ k=strcmp(p->pname,pname3); if(k==0) break; } if(k!=0) printf(”此产品不存在:\n”); else{ printf(”输出待查询产品的各项信息:\n"); printf(”产品类★产 品★产品总量★进 货 日 期★销售数量★销 售 时 间\n”); printf(”%s %s %d %d,%d,%d %d %d,%d,%d\n”,(L。kindelem[i])。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;i〈L.length;i++){ if(!(L.kindelem[i].firstproduct)) printf(”%s\n”,(L。kindelem[i])。pkindname); for(p=L.kindelem[i].firstproduct;p;p=p—〉nextproduct) printf(”%s %s %d %d,%d,%d %d %d,%d,%d\n",(L.kindelem[i])。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); } }//DisplayList void menu_operation(){//操作菜单 printf(”┌──────────┐\n”); printf("│输入所要执行的操作:│\n”); printf(”│1、产品类添加: │\n”); printf("│2、产品添加: │\n"); printf("│3、产品数量添加: │\n"); printf(”│4、产品售出: │\n"); printf("│5、查询产品: │\n”); printf(”│0、退出程序: │\n”); printf(”└──────────┘\n"); }//mene_operation /*—-———————-—-—--——-————-—--———-主程序——--———-—-—————--—-—-—————-*/ void main(void){ int order; int i,n; char a[30]; char b[30]; sqmountlink L; InitMountList(L); printf(”☆输入时间时请按照“年,月,日”格式输入。☆\n”); loop: menu_operation(); 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); printf("输入售出产品的数量:"); scanf("%d”,&n); ProQuantity_subtract(L,a,b,n); printf(”修改后的产品库存管理表:\n"); DisplayList(L); goto loop; case 5: printf("输入待查询产品所属产品类的名称:”); scanf(”%s",&a); printf(”输入待查询产品的名称:”); scanf("%s”,&b); Visit(L,a,b); goto loop; case 0: exit(0); } } 3。3程序运行结果 程序启动界面。 产品类的添加。 产品的添加。 产品数量的添加. 产品售出. 产品查询。 (四) 课程设计心得,存在问题及解决方法 拿到这道题时,我没有选择自己去编写,我想我从来没有编过这么复杂的程序,一定编不成,我选择了上网去查,值得庆幸的是我找到了一部分的程序,然后拷贝上程序在机房运行,发现有许多错误,我就开始一个一个解决问题,其中有些问题是一些符号的丢失,还有头文件的错误运用,还有对一些输入超出程序范围的数据进行修改,才使程序得以继续进行,最后我通过自己和请教同学,最终整个程序得以运行,不过最重要的不是仅仅让程序运行成功,而是了解整个程序的思想设计和功能的实现,然后我开始翻译程序,把每一句都弄的清清楚楚为止,从中我复习了很多知识点,也学到了很多我以前不知道的东西。通过对本系统的开发,我对软件开发过程有了更清楚地了解,首先是问题的定义,需求分析,然后概要设计,详细设计等,让我知道了仅仅学习课本知识是不行的,还得经常去自己设计一些小的项目去发现问题,必须培养动手能力,这样才能既复习了知识点,又可以学会详细的数据结构思想和设计,所以我在以后一定要加强这方面的学习。 13- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 产品 进销存 管理 系统 课程设计 报告书
咨信网温馨提示:
1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前自行私信或留言给上传者【丰****】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时私信或留言给本站上传会员【丰****】,需本站解决可联系【 微信客服】、【 QQ客服】,若有其他问题请点击或扫码反馈【 服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【 版权申诉】”(推荐),意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:4008-655-100;投诉/维权电话:4009-655-100。
1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前自行私信或留言给上传者【丰****】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时私信或留言给本站上传会员【丰****】,需本站解决可联系【 微信客服】、【 QQ客服】,若有其他问题请点击或扫码反馈【 服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【 版权申诉】”(推荐),意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:4008-655-100;投诉/维权电话:4009-655-100。
关于本文