算法与数据结构课程设计-家电商场仓库管理_第1页
算法与数据结构课程设计-家电商场仓库管理_第2页
算法与数据结构课程设计-家电商场仓库管理_第3页
算法与数据结构课程设计-家电商场仓库管理_第4页
算法与数据结构课程设计-家电商场仓库管理_第5页
已阅读5页,还剩29页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

算法与数据结构课程设计 家电商场仓库管理 姓 名: 学 号: 班 级: 信息管理 指导教师 : 2010 年 6 月 目 录 第一章 问题描述 . 1 第二章 系统分析 . 1 第三章 系统设计 . 2 第四章 系统实现 . 11 第五章 系统测试 . 23 第六章 设计心得 . 25 参考文献 . 32 教师评语和成绩 . 32 1 第一章 问题描述 问题题目 : 家电商场仓库管 理 问题 描述 : 仓库管理系统是一个典型的信息管理系统 ,主要是对实际的库存商品信息加以分类管理 ,以便及时的为商品的交易提供货品库存信息 .类似的问题有图书馆管理系统 ,通讯录 ,学生信息管理系统 . 本题目使用线性表的链式存储结构完成。 主要需实现功能有 :创建管理表 ,向表中添加记录 ,查询商品种类数 ,输出所有商品信息 ,追加新商品记录 ,已有商品库存量的增减 ,将商品信息写入文件并可以从文件中读出等 . 第二章 系统分析 问题要求 : 由问题描述我们可知仓库管理所涉及到的功能有如上几种 ,这就要求我们逐个实现 ,同时 为了可以和用户进行很好的信息交换我们需要编写菜单函数 .下面 以链表结构的有序表表示某商场家电部的库存模型。当有提货或进货时需要对该链表及时进行维护。每个工作日结束之后,将该链表中的数据以文件形式保存,每 日开始营业之前,需将以文件形式保存的数据恢复成链表结构的有序表 . 链表结点的数据域 , 包括家电名称、品牌、单价和数量,以单价的升序体现链表的有序性。程序功能包括:初始化、创建表、插入、删除、更新数据,查询及链表数据与文件之间的转换等。 2 第三章 系统设计 ( 1)思路确定: 拿到 此问题进行分析知道 此题目是要对大 量的货品信息进行管理,因此要将所需要的功能进行逐个实现,也就是函数的分块实现。首先明确系统所需的功能有:创建管理表 ,向表中添加记录 ,查询商品种类数 ,输出所有商品信息 ,追加新商品记录 ,已有商品库存量的进货或提货 ,将商品信息写入文件并可以从文件中读出等 。对应的程序中需要的函数模块有: 初始化 链表, 输入 、插入、删除、更新数据,查询 、 链表数据与文件之间的转换 以及一些辅助函数 。 同时,为了更好的和用户进行信息交换,我们要构建菜单函数。最后我们要用主函数调用以上函数模块。 ( 2) 系统界面设计图 | | 家电商场仓库管理 | | | | 主菜单项 | | | 1-初始化链表 | | 2-添加数据信息 | | 3-清空链表 | | 4-查询货品的种类数 | | 5-显示货品信息 | | 6-插入新货品记录 | | 7-删除停产无存货 货品记录 | | 8-记录进货量 | | 9-记录出货量 | | 10-查询货品的余量 | | 11-每日结算 | | 12-每日开始 | | 0-退出 | 3 | 请选择: ( 3) 系统功能设计图 ( 4) 数据结构定义: typedef struct snode char kind20; char brand20; int model; int price; int number; store; typedef store ElemType; typedef struct SNode ElemType data; struct SNode *next; SNode, *LinkedList; 使用到的头文件 : #include #include 家电商场仓库管理 主程序模块 输入模块 输出模块 插入模块 删除模块 查找模块 保存模块 载入模块 进货出货 4 #include #include ( 5) 函数模块功能说明: 对本系统的功能进行分析后 对主要函数 可作如下的模块化设计: 输入模块实现功能: 按需添加货品数目将货品型号、种类、名称、价格、 数量依次输入,并建立链表将其连接。 插入模块实现功能: 向已有数据中再次添加新货品的记录 ,包括货品型号、种类、名称、价格、数量。以结点的方式链接到 链表中。 删除模块实现功能: 在已有的数据中删除某种停产后无库存 货品信息,并释放内存空间。 删除按货品关键码型号进行。 查找模块实现功能: 在已有的数据中查找指定的货品信息。 按照查找货品编号进行。 输出模块实现功能: 将已有的数据中按单价的升序进行遍 历,输出该管理表 中所包含的全部货品信息。 保存模块实现功能: 在每日工作结束时 都要 将数据 进行保存操作, 链表中的信息以文件形式被长期 保存。 载入模块实现功能: 将文件中的数据信息 载入链表。 主序模块实现功能:完成系统的界面处理,包括开始界面和主菜单界面 。 5 具体函数有: int menu();/*主菜单函数 */ LinkedList LinkedListInit();/* 初始化单链表 */ LinkedList LinkedListAppend();/* 添加数据信息 */ int LinkedListLength(LinkedList L);/*查询货品的种类数 */ void LinkedListTraverse(LinkedList L);/*遍历链表显示货品信息 */ int LinkedListInsert(LinkedList L, int i, ElemType x);/*插入信息 */ int LinkedListDelete(LinkedList L,int i);/*删除信息 */ int search(LinkedList L);/*查询某货品的库存 */ LinkedList px(LinkedList L);/*由单价排序 */ int LinkedListLocal(LinkedList L);/*定位进出货的位置 */ LinkedList Appends(LinkedList L);/*记录进货量 */ LinkedList sells(LinkedList L);/*记录出货量 */ int save (LinkedList L); /*保存信息到文件 */ LinkedList load(LinkedList L);/*从文件中读取 */ 6 输入模块实现功能 : LinkedList LinkedListAppend();/* 添加数据信息 */ N Y N Y N Y 图 4-1 申请一个结点空间, p 指向它 向 p 指向结点输入货品的信息 in 是否为第一个数据( i=0) p=L ip-next NULL=p-next r-next=p; r=r-next; r=r-next; r=r-next; 开始 返回 L 结束 7 插入模块实现功能 : int LinkedListInsert(LinkedList L, int i, ElemType x);/*插入信息 */ Y N Y Y 图 4-2 调入载入模块 L=NULL 申请一个结点空间,使 P 指向它 给 T 指向结点输入预插入货品的信息 p=L; p-next!=NULL &jnext; j+; t-next=p-next; p-next=t; 返回 L 返回 NULL 开始 结束 8 删除模块实现功能: int LinkedListDelete(LinkedList L,int i);/*删除信息 */ Y N Y 图 4-3 调用载入模块 L-next=null 从键盘读入 i 值 p=L; p-next != NULL & jnext; p-next=p-next-next; p-next=p-next-next; 返回 L 结束 Ptr1-next=head 开始 9 保存模块 实现功能 int save (LinkedList L); /*保存信息到文件 */ N N Y 图 4-4 输入预保存文件的文件名 创建文件成功 L!=NULL 将指向结点的数据写入文件 L=L-next; 结束 开始 10 读取 模块 实现功能 LinkedList load(LinkedList L);/*从文件中读取 */ Y N Y N 图 4-5 调用载入模块 fp= =NULL 为结点申请空间 输出 p1 指向结点的货品信息 p2=p1-next; p2=p1; 结束 开始 11 第四章 系统实现 正文(四号楷体) 给出 系统的 主函数 和每个算法的实现代码。 代码用 Courier new英文字体,字体大小为 10( 比正文的汉字要小) ,段落的行间距为最小值 , 排版 要紧凑 如 #include #include #include #include #define N 5 typedef struct snode char kind20;/各种数据的名称种类与其编号对应 char brand20; int model; int price; int number; store; typedef store ElemType; typedef struct SNode ElemType data; struct SNode *next; SNode, *LinkedList; int menu(); LinkedList LinkedListInit();/* 初始化单链表 */ LinkedList LinkedListAppend();/* 添加数据信息 */ void LinkedListClear(LinkedList L);/* 清空单链表 */ int LinkedListLength(LinkedList L);/*查询货品的种类数 */ void LinkedListTraverse(LinkedList L);/*遍历链表显示货品信息 */ int LinkedListInsert(LinkedList L, int i, ElemType x);/*插入信息 */ int LinkedListDelete(LinkedList L,int i);/*删除信息 */ int search(LinkedList L);/*查询某货品的库存 */ 12 LinkedList px(LinkedList L);/*由单价排序 */ int LinkedListLocal(LinkedList L);/*定位进出货的位置 */ LinkedList Appends(LinkedList L);/*记录进货量 */ LinkedList sells(LinkedList L);/*记录出货量 */ int save (LinkedList L); /*保存信息到文件 */ LinkedList load(LinkedList L);/*从文件中读取 */ int menu() int option; printf(n); printf( |n); printf( | 家电商场仓库管理|n); printf( | |n); printf( | 主菜单项 |n); printf( |n); printf( | 1-初始化链表 |n); printf( | 2-添加数据信息 |n); printf( | 3-清空链表 |n); printf( | 4-查询货品的种类数 |n); printf( | 5-显示货品信息 |n); printf( | 6-插入新货品记录 |n); printf( | 7-删除停产无存货货品记录 |n); printf( | 8-记录进货量 |n); printf( | 9-记录出货量 |n); printf( | 10-查询货品的余量 |n); printf( | 11-每日结算 |n); 13 printf( | 12-每日开始 |n); printf( | 0-退出 |n); printf( |n); printf(请选择: ); scanf(%d,&option); return(option); /* 初始化单链表 */ LinkedList LinkedListInit() LinkedList L; L=(SNode *)malloc(sizeof(SNode); /头结点 L-next=NULL; /头结点的指针分量为空 return L; /* 添加数据信息 */ LinkedList LinkedListAppend() int i,n,m; store s; LinkedList L,r,p,q; L=LinkedListInit(); r=L; m=1; q=(LinkedList )malloc(sizeof(SNode); printf(请输入货品的种类总数 :n); scanf(%d,&n); for(i=1;idata.model) q=q-next; else 14 printf(型号重复 ,请重新输入! );printf(n); goto repeat; printf(请输入货品种类 :); scanf(%s,&s.kind); printf(n); printf(请输入货品品牌 :); scanf(%s,&s.brand); printf(n); printf(请输入货品价格 :); scanf(%d,&s.price); printf(n); printf(请输入货品数量 :); scanf(%d,&s.number); printf(n); while(s.pricedata.kind,s.kind); strcpy(p-data.brand,s.brand); p-data.price=s.price; p-data.model=s.model; p-data.number=s.number; p-next=NULL; m+; r-next=p; r=r-next; return(L); /* 清空单链表 */ void LinkedListClear(LinkedList L) L-next=NULL; 15 /*查询货品的种类数 */ int LinkedListLength(LinkedList L) LinkedList p; int i=1; p=(SNode*)malloc(sizeof(SNode); p=L-next; while(p-next!=NULL) p=p-next; i+; return (i); /*遍历链表显示货品信息 */ void LinkedListTraverse(LinkedList L) LinkedList p; p=L-next; printf(当前表是 : n); printf(%10s%10s%10s%10s%10sn,种类 ,品牌 ,型号 ,单价 ,数量); while(p!=NULL) printf(%10s%10s%10d%10d%10dn,p-data.kind,p-data.brand,p-data.model,p-data.price,p-data.number); p=p-next; /*插入信息 */ int LinkedListInsert(LinkedList L, int i, ElemType x) LinkedList p,t; int j; p=L; j=1; t=(SNode *)malloc(sizeof(SNode); strcpy(t-data.kind,x.kind); 16 strcpy(t-data.brand,x.brand); t-data.price=x.price; t-data.model=x.model; t-data.number=x.number; if( L-next = NULL) if(i=1) /若 L 为空表且要求将新结点插入到第 1 个位置 L-next=t; t-next=NULL; return 1; while ( p-next != NULL & jnext; j+; if (p-next = NULL) if(jnext=p-next; p-next=t; return (1); /*删除信息 */ int LinkedListDelete(LinkedList L,int i) LinkedList p,q; int j; p=L; j=1; 17 if( L-next = NULL) /空表 printf(没有货品信息 !n); return 0; while ( p-next != NULL & jnext; j+; if (p-next = NULL) printf(给的 i 值超过了表长 n); return 0; else q=p-next; p-next=p-next-next; free(q); return (1); /*查询某货品的库存 */ int search(LinkedList L) LinkedList p; int c; int i=1; p=L; printf(请输入商品型号 :);scanf(%d,&c); while(p-data.model!=c&p-next!=NULL) p=p-next; printf(%10s%10s%10s%10s%10sn,种类 ,品牌 ,型号 ,单价 ,数量 ); printf(%10s%10s%10d%10d%10dn,p-data.kind,p-data.brand,p-data.mo 18 del,p-data.price,p-data.number); void IntSwap(int *p,int *r) int t; t=*p; *p=*r; *r=t; /*由单价排序 */ LinkedList px(LinkedList L) LinkedList q,p,H; char a20,b20; H=L; for(p=L;p!=NULL;p=p-next) for(q=L-next;q-next!=NULL;q=q-next) if(q-data.pricep-data.price) strcpy(a,p-data.kind);strcpy(p-data.kind,q-data.kind);strcpy(q-data.kind,a); strcpy(b,p-data.brand);strcpy(p-data.brand,q-data.brand);strcpy(q-data.brand,b); IntSwap(&(q-data.model),&(p-data.model); IntSwap(&(q-data.price),&(p-data.price); IntSwap(&(q-data.number),&(p-data.number); H=L; 19 return H; /*定位进出货的位置 */ int LinkedListLocal(LinkedList L) LinkedList p; int c; int i=1; p=L; printf(请输入货品型号 :);scanf(%d,&c); while(p-data.model!=c&p-next!=NULL) p=p-next; i+; return (i-1); /*记录进货量 */ LinkedList Appends(LinkedList L) int i,x,j,n,k; LinkedList p,r; r=p=L; printf(请输入进货种类数 :);scanf(%d,&n); for(k=1;knext; r-data.number=r-data.number+x; /*记录出货量 */ LinkedList sells(LinkedList L) int i,x,j,n,k; 20 LinkedList p,r; p=r=L; printf(请输入提货种类数 :);scanf(%d,&n); for(k=1;knext; r-data.number=r-data.number-x; /*保存信息到文件 */ int save (LinkedList L) FILE *fp; char filepn100; printf(请输入文件名 ); scanf(%s,filepn); if (fp=fopen(filepn,w)=NULL) printf(error); return 0; while(L!=NULL) fprintf(fp,%10s%10s%10d%10d%10dn,L-data.kind,L-data.brand,L-data.model,L-data.price,L-data.number); L=L-next; printf(ok); fclose(fp); return 0; /*读取信息 */ LinkedList load(LinkedList L) LinkedList p1,p2; int m=0; 21 char filepn10; FILE *fp; printf(请输入文件名 ); scanf(%s,filepn); if (fp=fopen(filepn,r)=NULL) printf(error); return 0; printf( | 家电商场仓库管理|n); L=NULL; p1=p2=(SNode *)malloc(sizeof(SNode); do fscanf(fp,%10s%10s%10d%10d%10dn,&p1-data.kind,&p1-data.brand,&p1-data.model,&p1-data.price,&p1-data.number); printf(%10s%10s%10d%10d%10dn,p1-data.kind,p1-data.brand,p1-data.model,p1-data.price,p1-data.number); m=m+1; if(m=1)L=p1; else p2=p1-next; p2=p1; p1=(SNode *)malloc(sizeof(SNode); while(!feof(fp); p2-next=NULL; fclose(fp); return(L); int main() int n=N; 22 char choose; int i,z; ElemType a,s; LinkedList L,p; printf(n); printf( 欢迎使用家电库存管理系统 n); do switch(menu() case 1: L=LinkedListInit();break; case 2: L=LinkedListAppend();break; case 3: LinkedListClear(L);break; case 4: printf( 查 询 货 品 的 种 类数 :%d,LinkedListLength(L);printf(n);break; case 5: px(L); LinkedListTraverse(L);break; case 6: printf(请输入你想插入的位

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论