超市库存货品信息管理系统设计.doc_第1页
超市库存货品信息管理系统设计.doc_第2页
超市库存货品信息管理系统设计.doc_第3页
超市库存货品信息管理系统设计.doc_第4页
超市库存货品信息管理系统设计.doc_第5页
已阅读5页,还剩25页未读 继续免费阅读

下载本文档

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

文档简介

课 程 设 计 报 告课程名称 C语言程序设计 课 题 超市库存货品信息管理系统 系别 机电工程系 专业班级 计控1101 学生姓名 孙方瑞 学 号 11306013 指导老师 顾建华 任务书下达日期 2013 年 1月 7日任务完成日期 2013年 1 月 11 日课程设计目的和要求 1、目的:a) 巩固和加深学生对C语言课程的基本知识的理解和掌握;b) 掌握C语言编程和程序调试的基本技能;c) 利用C语言进行基本的软件设计;d) 掌握书写程序设计说明文档的能力;e) 提高运用C语言解决实际问题的能力。2、要求:a) 课程设计期间,同学之间可以讨论算法的实现和编程的思路和方法,但每个人必须自己动手编写程序,不得抄袭;b) 写出详细设计说明(程序实现的基本算法思想及流程图);c) 编写程序代码,调试程序使其能正确运行;d) 设计完成后提交课程设计报告;(对于程序中未能实现的部分需要加以解释说明;对于程序中所参考的部分代码需要加以声明,并说明出处。)目录 一,问题定义.1.1问题背景.1.2 用户目标 二,概要设计 2.1 方案确定. 2.2 软件结构 2.3 模块功能说明三,详细设计 3.1 数据设计. 3.2 流程图.四,编码. 4.1 各功能模块编码. 4.2 主程序编码五,调试分析.六,总结.C语言课程设计内容:课题:超市库存货品信息管理系统设计一, 问题定义1.1 问题背景 对于超市库存货品信息管理系统,其数据不仅复杂,量大而且还经常变化,要是采用传统的手工方式采集,不仅工作效率低,容易出错,而且管理也不够规范。由于计算机技术在管理应用领域中的开展,开发此数据库管理系统是十分必要的,并且具有可行性。当然目前超市的数据库系统不是采用C语言,而是采用一些数据库语言开发的,但为了说明C语言也同样可编写数据库软件,故本系统选用C语言作为开发工具。1.2用户目标由计算机来完成超市库存货品信息的管理,要求实现如下功能:建立超市库存货品表列,且可对此表列进行输出,插入,删除,查找,修改,保存等操作。二,概要设计 2.1 方案确定 超市库存货品信息管理系统要求实现许多功能,可遵循前面所学的结构化程序设计思想来进行本系统的设计-自顶向下,逐步细化,也就是将系统软件设计任务分成许多容易解决的小的任务,即分解出许多子功能模块进行设计。 2.2 软件结构本实例中超市库存货品信息管理系统的软件结构如图所示主程序模块输入模块载入模块输出模块查找模块插入模块删除模块修改模块排序模块保存模块 2.3 模块功能说明 对本系统的功能进行分析后可作如下的模块化设计 输入模块实现功能:能把用户逐一输入的数据添加进表中。 载入模块实现功能:能把磁盘上数据文件载入表中。 输出模块实现功能:能逐一把数据按指定格式输出到屏幕。 查找模块实现功能:能搜索到符合用户指定条件的数据,并将数据输出到屏幕。 插入模块实现功能:能把用户再次输入的数据插入表中。 删除模块实现功能:能把符合用户指定条件的数据从表中删除。 修改模块实现功能:能让用户修改制定的表中数据。 排序模块实现功能:能按照指定的关键字进行排序。 保存模块实现功能:能将数据保存为文件形式,长期保存。 主程序模块实现功能:完成主菜单的显示,及对各模块的调用。三,详细设计 3.1 数据设计 1 数据结构的选择 a,对于各个超市,其规模各不相同,在建立某个超市库存货品的目录时无法预知期货品品种的多少,那么在用数组完成这一设计时,由于数组是在编译时分配内存的,所以其分配的空间大小是不可改变的,当数组的空间定义过小而货品种类很多时,就可能会出现数组很快用完的情况,使得数据量难以扩充,从而就限制了程序的应用能力;若数组的空间定义过大而当下又未被使用时,势必又会造成内存浪费。 b,对于某一个固定的超市,它每天需要进行的货品品种可能不同,因而一定会有新旧货品需要进行增加或删除。在有数组完成数据设计时,在数组中插入,删除一个元素需要移动数组中的大量数据元素,因此操作费时费事。2数据类型的选择 由于本系统是完成本系统超市货品信息系统,货品数据有多个数据项,采用前面学习的结构体类型是最合适不过的。因为一个结构体可包含若干成员,而这些成员可以是数值类型,字符类型,数组类型,指针类型等,因此本系统在数据类型选择上选取结构体类型。设计如下: Typedef struct goods_stype int num; /* 货品号 */ char name20; /* 货品名 */ int amount; /* 货品量 */GOODS; 3.2 流程图 1,输入模块 输入模块实际上是完成一个用来存储超市货品信息的结构体类型数组的建立。 假设要求如表中的3个货品建立一个表,那么要建立数组来存储货品信息其算法流程图如下。货品号货品名:货品数量(单位)10001童袜125(双)10201童鞋230(双)20100童装180(套) 表1 3个货品信息单列表 开始while(num!=-1)结束 返回n值输入 name,amountn+i+输入numi=0n=0 输入模块流程图:NY 2,载入模块 载入模块将已存入文件中的货品数据信息导出,创建成数组,之后可进行数组的插入,删除,修改,查找,排序等操作。 载入模块算法描述的流程图如下: 开始 载入模块流程图N打开文件是否成功? YNYWhile(! Feof(fp)返回0输出未找到文件结束返回i值读入 num name Amount i+i=0 3,输出模块就是依次输出数组中各货品元素,这个问题比较容易处理。输出数组中第一个元素直至最后一个元素即可。 输出模块算法描述的流程图如下:开始i=0 输出模块流程图 Ni=0&goodlisti.num!=search-numYi-return i结束5,插入模块 插入模块要完成的是货品表的插入操作,即将一个新货品信息插入到一个已有存储货品信息的数组中。假设对刚刚建立的数组,现有一个新货品(货品号:10301,货品名:童帽,数量:300个)要求插入其中,并要求插入到数组中货品号为“10201”之前,如何完成? 首先新设一个结构体变量ins_goods,输入预插入货品信息,即新货品有关数据,接下来在数组中查找货品号为“10201”的货品,找到后只需移动此货品元素及其之后的所有数组元素即可,数组中的此货品元素及其以后的元素要依次向后移动,虽然效率不高但实现起来简单方便。插入模块也可以设计成插入某货品之后,读者可自己设计。 插入模块算法描述的流程图如下 插入模块流程图开始输入出入位置(货品号)调用查询模块(货品号查询)Nk!=-1Y输入插入货品信息j=*len-1Nj=kY输出无效的插入位置Goodlistj+1=goodlistj j-Goodlistk=ins_goods*len+结束6,删除模块 删除模块要完成的是货品的删除操作,此操作也容易,只需删除数组中指定货品即可。接上例,假设现又要求在刚完成插入操作的数组中再删除一个货品,货品号为“10201”。在数组中查找货品号为“10201”的货品,找到后只需要移动此货品元素之后的所有数组元素即可,数组中的此货品元素之后的元素要依次向前移动。 删除模块算法的流程图如下: 删除模块的流程图开始输入删除位置(货品号调用查询模块(按货品号查询Nk!=-1Yj=k+1输出无效的删除位置NJ=* len-1YGoodlistj-1=goodlistk j+* len-结束7,修改模块 修改模块是指可对已有货品信息进行修改,修改时应先查找到此货品,然后对其修改。 修改模块算法描述的流程图如下 修改模块的流程图输入要修改货品(货品号)开始调用查询模块(按货品号查询)Nk!=-1Y输入货品新信息goodlistk.amount输出无此货品结束8,排序模块 排序模块是指对已有货品表可按某一个指定(货品名,货品号)对货品进行排序,排序算法可选择已学过的算法进行。 排序模块算法描述的流程图如下; 排序模块流程图Nin-1i=o开始Yk=ij=i+1N jglistj.nummNYk=jj+Ni!=kYglistkglistii+结束9,保存模块 保存模块是将最终想要保留的货品数据信息保存于文件中。 保存模块酸发描述的流程图如下:保存模块流程图N文件创建是否成功?开始Yi=0NinY输出创建文件失败将数组中数据依次写入文件i+结束四,编码 编码是将概要设计和详细设计阶段中的结果翻译成程序设计语言书写的程序。首先是各功能模块的编码,最后完成主程序的编码。 4.1 各功能模块编码 1 输入模块编码 /*录入模块*/ int input(GOODS glist) int i=0,n=0; printf(请依次按提示输入货品信息n); printf(输入货品号(货品号-1 结束输入):); scanf(%d,&glisti.num); while(glisti.num!=-1) /*当读入货品号不为-1时,循环读入数据*/ printf(输入货品名:); scanf(%s,); printf(输入货品量:); scanf(%d,&glisti.amount); i+; n+; printf(输入货品号(货品号为-1 结束输入):); scanf(%1d,&glisti.num); return n; /*返回读入货品的个数*/ 2 载入模块编码 /*载入模块*/ int openfile(GOODS glist) int i=0; FILE *fp2; fp2=fopen(d:货品信息原始表.txt,r); /*打开D盘货品信息原始表.txt文件*/ if(fp2=NULL) /*返回空指针表示文件未正确打开*/ printf(未找到文件n); return 0; else while(! feof(fp2) /*当文件未读完成,执行循环*/ fscanf(fp2,%d%s%d,&glisti.num,,&glisti.amount); i+; fclose(fp2); /*关闭文件*/ printf(载入数据成功n); return i; /*返回从文件中读取货品的个数*/ getch(); 3 输出模块编码 /*输出模块*/ int output(GOODS glist,int n) int i; printf(-n); printf( 超市货品信息表 n); printf(-n); printf( 货品号 货品名 货品量n); for(i=0;i=0&(glisti.num!=search_num) i-; return i; /*返回查找到货品的位置(下标)*/ int seqsearch2(GOODS glist,int n,char search_name) /*按货品名查找*/int i=n-1;while(i=0&(strcmp(,search_name)!=0) i-;return i; /*返回查找到货品的位置(下标)*/ 5 插入模块编码 /*插入模块*/ void seqinsert(GOODS glist,int * len) /* * len 表示货品的个数即货品表的表长 */ int j,k,insert_num,choice; char insert_name20; GOODS ins_goods; if(* len=MAXLEN-1) printf(数组已满!); else do printf(1*按货品号插入*n); printf(2*按货品名插入*n); printf(0*返回上级菜单*n); printf(请输入选择n); scanf(%d,&choice); switch(choice) case 1: printf(请输入插入位置(插入某货品号之前):n); scanf(%d,&insert_num); k=seqsearch1(glist, * len,insert_num); if(k=-1) printf(无效的插入位置! n); else printf(请输入插入货品信息:货品号 货品名 货品量 n); scanf(%d%s%d,&ins_goods.num,ins_,&ins_goods.amount); for(j=* len-1;j=k;j-) glistj+1=glistj; glistk=ins_goods; (* len)+; /*货品个数增1 */ printf(插入成功! n); break; case 2: printf(请输入插入位置(插入某货品号之前):n); scanf(%s,&insert_name); k=seqsearch2(glist,*len,insert_name); if(k=-1) printf(无效的插入位置! n); else printf(请输入插入货品信息:货品号 货品名 货品量 n); scanf(%d%s%d,&ins_goods.num,ins_,&ins_goods.amount); for(j=*len-1;j=k;j-) glistj+1=glistj; glistk=ins_goods; (* len)+; printf(插入成功! n); break; case 0: break; while(choice!=0); 6 删除模块编码 /*删除模块*/void seqdelete(GOODS glist,int * len) int j,delete_num,k,choice; char delete_name20; if(* len=0) printf(数组已空!); else do printf(1*按货品号删除*n); printf(2*按货品名删除*n); printf(0*返回上级菜单*n); printf(请输入选择n); scanf(%d,&choice); switch(choice) case 1: printf(请输入删除货品的货品号:); scanf(%d,&delete_num); k=seqsearch1(glist, * len,delete_num); if(k=-1) printf(无效的删除位置! n); else for(j=k+1;j=* len-1;j+) glistj-1=glistj; (* len)-; printf(删除成功! n); break; case 2: printf(请输入删除货品的货品名:); scanf(%s,&delete_name); k=seqsearch2(glist, * len,delete_name); if(k=-1) printf(无效的删除位置! n); else for(j=k+1;j= * len-1;j+) glistj-1=glistj; (* len)-; printf(删除成功! n); break; case 0: break; while(choice!=0); 7 修改模块编码 /*修改模块*/ void revise(GOODS glist,int n) int knum,k,choice; char kname20; do printf(1*按货品号修改*n); printf(2*按货品名修改*n); printf(0*返回上级菜单*n); printf(请输入选择n); scanf(%d,&choice); switch(choice) case 1: printf(请输入要修改货品的货品号n); scanf(%d,&knum); k=seqsearch1(glist, n,knum); if(k=-1) printf(无此货品 n); else printf(请输入新货品信息 货品号 货品名 货品量n); scanf(%d%s%d,&glistk.num,,&glistk.amount); printf(修改成功!); break; case 2: printf(请输入要修改货品的货品名 n); scanf(%s,kname); k=seqsearch2(glist, n,kname); if(k=-1) printf(无此货品 n); else printf(请输入新货品信息 货品号 货品名 货品量n); scanf(%d%s%d,&glistk.num,,&glistk.amount); printf(修改成功! n); break; case 0: break; while(choice!=0); 8 排序模块编码 /*排序模块*/ void sort(GOODS glist,int n) int i,j,k,choice; GOODS t; do printf(1 * 按货品号排序 * n); printf(2 * 按货品名排序 * n); printf(0 * 返回上级菜单 * n); printf(请输入选择n); scanf(%d,&choice); switch(choice) case 1: for(i=0;in-1;i+) k=i; for(j=i+1;j glistj.num) k=j; if(i!=k) t=glistk; glistk=glisti; glisti=t; output(glist,n); break; case 2: for(i=0; in-1; i+) k=i; for(j=i+1; j0) k=j; if(i!=k) t=glistk; glistk=glisti; glisti=t; output(glist,n); break; case 0: break; while(choice!=0); 8 保存模块编码 /*保存模块*/ void save(GOODS glist,int n) int i; FILE * fp1; fp1=fopen(d:货品信息表.txt,w); if(fp1=NULL) printf(保存失败n); else for(i=0;in;i+) fprintf(fp1,%10d%10s%5dn,glisti.num,,glisti.amount); fclose(fp1); printf(保存成功n); getch(); 4.2 主程序编码 由主程序完成各功能模块的调用,最后为使整个程序以及输出格式更加清晰易读,还可适当加入一些语句,比如欢迎信息,输出空行,结束信息,适当的注释等。#includestdio.h #includestring.h #includestdlib.h #define MAXLEN 100 typedef struct goods_stype int num; char name20; int amount;GOODS;int input (GOODS glist);int openfile (GOODS glist);int output (GOODS glist,int n);int seqsearch1 (GOODS glist,int n,int search_num);int seqsearch2 (GOODS glist,int n,char search_name);void seqinsert (GOODS glist,int * n);void seqdelete (GOODS glist,int * n);void revise (GOODS glist,int n);void sort (GOODS glist,int n);void save (GOODS glist,int n); void main() GOODS glistMAXLEN; int sel,choice; int n,* len=&n,i; int search_num; char search_name20;char message=*n *n 超市库存货品管理系统使用说明 n 本系统是一个超市库存货品信息管理系统,你可以在本系统n 中输入多类货品信息,也可载入已保存于文件的货品信息,n 之后可进行插入,删除,修改,查询等操作,然后重新保存.n 欢迎你使用超市库存货品管理系统. n *n ; char menu=*n *1.输入货品信息 n *2.输出货品信息 n *3.查找货品信息 n *4.插入货品信息 n *5.删除货品信息 n *6.修改货品信息 n *7.货品信息排序 n *8.存盘 n *0.退出 n *n ; printf(%s,message); do printf(%s,menu); printf(请在0-8中选择n); scanf(%d,&sel); switch (sel) case 1: printf(1 键盘输入n); printf(2 文件载入n); printf(请选择1或2n); scanf(%d,&choice); switch(choice) case 1: n=input(glist); break; case 2: n=openfile(glist); break; break; case 2: output(glist,n); break; case 3: do printf(1 * 按货品号查找 * n); printf(2 * 按货品名查找 * n); printf(0 * 返回上级菜单 * n); printf(请输入选择n); scanf(%d,&choice); switch(choice) case 1: printf(请输入查找货品的货品号n); scanf(%d,&search_num); i=seqsearch1(glist,n,search_num); if(i=-1) printf( 无此商品 n); else printf(-n); printf( 查找货品为:n); printf(%10d%10s%5dn,glist

温馨提示

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

评论

0/150

提交评论