仓库管理系统c语言程序设计报告_林学_农林牧渔_专业资料。信息科学与工程学院 课程设计报告 班 级: 通信一班 姓名 (学号): 实验项目名称: c 语言程序设计 实验室(中心):信息科学与工程学院信息技术实验 室 指导教师: 李益才 实验
信息科学与工程学院 课程设计报告 班 级: 通信一班 姓名 (学号): 实验项目名称: c 语言程序设计 实验室(中心):信息科学与工程学院信息技术实验 室 指导教师: 李益才 实验完成时间: 日 2013 年 6 月 28 序 项目 号 标准 按要求完成系统功能且界面友好容错能力强(45-50) 按要求完成系统功能界面一般有较好的容错能力 1 系统演示(功能) (40-44) (50%) 基本完成系统功能有一定的容错能力(35-39) 基本完成系统功能(30-34 分) 未完成系统功能或他人代做或抄袭(15) 课程设计书各项目认真填写,具有清晰的设计思路及 软件测试结果分析(45-50) 课程设计书各项目认真填写,具有较为清晰的设计思 路并对软件测试结果进行了较为清晰的分析(40-44) 课程设计说明书 2 (50%) 课程设计书各项目认线) 课程设计书进行为较为认线) 课程设计书有未完成项或各项填写不属实或他人代做 或抄袭(15) 评分 教师签字 总分 一、题目 仓库管理系统 二、功能描述 该系统将输入进系统的仓库中物品的基本信息(包括货号、名称、单价、库存数 量、品牌)进行处理,可以进行: (1)、按物品价格降序输出、按库存数量升序排列。 (2)、修改制定物品的信息。 (3)、删除指定物品的信息。 (4)、在指定物品前或后再插入一个物品的信息。 (5)、统计同一种品牌的数量。 三、概要设计 系统功能模块图 进入系统 物数修删插统数数退 品据改除入计据据出 信按特特物指文文系 息序定定品定件件统 输输物物信品输载 入 出 品品息 牌入入 的的 物磁 信信 品盘 息息 的 数 量 四、详细设计 1、结构的定义: 数组结构体一共有两个: struct information //物品信息机构 { int Artnumber; char goodsname[20]; float unitprice; int quantity; char brand[20]; }; struct Mainfest //仓库信息机构 { struct information data[Number]; int Num; }; struct Mainfest goods; 链表结构体一共有一个: struct information //物品信息机构 { int Artnumber; char goodsname[20]; float unitprice; int quantity; char brand[20]; struct information *next; }; struct information *head; //头指针 2、各个函数的具体设计思想及流程图 本系统一共九个函数: (1)void inputInformation(); //对仓库中所有物品的基本信息进行输入 (2)void outputsort(); //按序输出数据 (3)void modifyInformation(); //修改物品信息 (4)void deleteInformation(); //删除物品信息 (5)void insertInformation();//插入 //插入物品信息 (6)void statistics();// 统计 //统计相同品牌的物品数量 (7)void saveInfoToFile(); //文件输入到磁盘 (8)void loadInfoFromFile(); //文件磁盘载入 (9)void maon(); //主函数 其中第七、八个为文件函数,进行文件的存储和载入。 主函数 main()是一个死循环,每执行玩一个函数都要输出菜单选择,直到 选择退出为止。 2.1 仓库物品基本信息输入函数 对物品基本信息进行连续输入,直到所有物品信息都输入完毕,改函数用 while 循环函数进行连续赋值。 (1)、具 体 流 程 图 如 下 图 所 示: 开始 判断是否已满 if(goods.Num== Number) 未满,继续 Printf()scanf () 是否要继续输 入 if(yn==0) 已满 ,结束 break 是,继续 whil(e 1) 链表 开始 否,退出 break 结束 菜单,选择输入数 据函数 head=()malloc();建立一个空 节点 head 并分配内存 While(1)循环 是 temp=()malloc() 建立新 节点 temp 并分配内存 t,printf();输入物品的信 息,存入新节点 Temp-next=head-next; Head-next=temp; 判断是否要继 续输入 if() 否 结束 (2)代码说明 While 语句是把数据输入到内存中,if 这里有两个用途:1、用于判断是否还有空间进行 数据输入;2、判断是否还要继续输入。 2.2 按序输出物品信息 对物品的特定信息进行排序后在输出,可以进行按价格降序输出、按库存数量 升序输出,这两种输出可以自由选择 数组 开始 选择要排序的元 素 1、2 if(1)按价格降序 If(2)按数量升序 排序 sort() 满足大小关系 进行交换 输出,outlist 结束 链表 开始 选择排序元 素 按价格降序 输入 sel=1 按库存数量升 序 sel=2 Sort(sel)排序 Outlist() 输 出 结束 2.3 修改指定物品的信息 对数据文件中特定信息惊醒修改,可以修改任何信息 开始 输入指定物品的 信息 printf() 查找指定物品 i=search(goodsnum) 找到,对错误 信息惊醒修改 判断是否找到 指定物品 结束 链表 开始 定义结构体指针, *pf=search(),*pb=pf-next 输入要修改的物 品货号 printf() 判断是否找到该 指定货物 修改货物信息 Printf()scanf() 输出未找到该货 物 结束 2.4 删除指定货物信息 对磁盘文件中的特定物品信息进行删除 数组 输入指定物品 的信息 查找指定物品 判断是否找到 指定物品 i(f ) 找到,删除 for() if {a[i-1]=a[i]} goods.Num--; 结 构体数目减一 结束 链表 开始 定义两个指向结构体的指针 pf=search(goodsnum); pb=pf-next; pf=search(goodsnum ); 输入pb要=删pf除-的n货ex物t; 货号 scanf() pf=search(goodsnum )查; 找指定货物 pf=Search pb=pf-next; (goodsname) 是 删除 pf-next=pb- next;free(pb) 是否找到指定 货物 否 输出“未找到指定 货物” 结束 2.5 在指定位置插入一个物品的信息 (1)流程图 数组 开始 输入指定货物的货号 scanf() 是否找到指定货物 前插 选择前插或者后 插 if() for(j=goods.Num;ji-1;j--) goods.data[j]=goods.data[j-1 ];该货物及以后货物后移一位 后插 for(j=goods.Num;ji;j--) goods.data[j]=goods.data[j-1 ];该货物后每一个元素后移一位 插入输入要插入 的物品信息 结束 链表 开始 定义三个指针 *pf,*pb,*temp 找到插入位置 Pf=search(goodsnum) Pb=pf-next 判断是否找到指定 物品 是 在内存中开辟一个空 节点 temp=()malloc(( )) 输入要插入的物品信息 scanf(“”,temp-data) 前插 选择前插还是后插 后插 else If(head==pf) If(pb-next==NULL else temp-next=pb ; pf-next=temp; 指定元素为头节点 后第一个元素,插入 指定元素为最后一 个节点,插入 temp-next=pb-next; pb-next=temp; 结束 2.6 统计指定品牌的库存数量 (1)流程图 数组 开始 输入要统计的 品牌名 scanf() for(i=0;igoods.Num;i++) 循环求和 Sun+=quantity if(i==goods.Num) i=-1; 判断是否找到品 牌的物品 i!=-1? 是 printf(%d\n,sum); 输出求得的和 Printf(“为找到该品 牌”) 结束 链表 开始 struct information *p; P=head-next; 输入指定品牌明 Scanf(“%s”,name) P!=NULL 是 如果是同一品牌,求 和 sum=sum+data 输出和 结束 2.7、基本数据文件输入磁盘 将输入的数据存储到磁盘保持。 数组 开始 创立这个文件 用 fopen()打开一个 特定文件,返回值是否 为0 用 fwrite()讲 数据写入文件 Fclose(fp) 关闭文件 结束 链表 开始 struct information *p; 建是立 这 个 文 件 用 fopen()打开一个特 定文件,返回值是否 为0 否 打开文件,并使 p=head-next; p!=NULL 否 并用 while()fwrite() 进行循环输入 fclose(fp); 结束 2.8、数据文件载入 从磁盘文件中讲已经保存了的数据读取到内存中,为以后的数据处理 做准备。 数组 开始 是 输出“该文件 不能被打开” 是 打印“存储空间 已满,不能再存 入” 用 fopen()打开一个 特定文件,返回值是否 为0 goods.Num==100 判断该文件是否已满 否 用 fread()将文 件读取出来 Feof(fp)=0?判断 文件是否结束 是 Goods.Num++ Goods.num =100? 是 输出”存储空间已 满,不能再存储” 用 freadj()将 文件读取出 来 Fclose(fp) 结束 链表 开始 FILE * fp; struct information * p; 用 fopen()打开一个特定 文件,返回值是否 为0 打印“文件 不能打开” P=()malloc()为 p 分 配内存 用 fread()将文件 读取出来 否 Feof(fp)=0 ? 判 断 文件未结束 是 p-next=head-next; head-next=p; P=()malloc(()); 用 fread(0,讲文件读 取出来 Free(p); Fclose(fp) 结束 五、测试结果及存在的问题 1、调试运行,选择第一项进行数据输入: 2、按序输出: (1)、按物品价格降序输出 (2)、按库存数量升序输出 3、修改指定物品的信息 4、删除指定物品的信息 5、在指定物品前或后插入一个物品的信息 (1)前插 (2)、后插 6、求指定品牌的物品数量 不足:修改指定物品的信息和删除指定物品的信息时,如果有相同货号的物品, 则无法一次性修改和删除。 改进:预想循环查找、修改、删除,直到找不到指定货物为止。 六、课程设计心得体会 第一次做这个长度的程序设计,对我好处很多,在编写程序的过程中,清楚 的找出了自身的不足,以及对课本知识掌握不熟练的地方,并在编程中对课本知 识进行了较为充分的复习,包括对数组的运用、函数的调用的理解以及更重要的 是原来不熟练的链表、文件的知识有了更深的了解,并能用链表进行程序的编写。 这次编程体验,让我对模块化编程有了了解,并建立了模块化编程的思想,我 想这点对我来说尤为重要。 这次的编程,更加强了我对错误的改正能力,也在编程中减少了低级错误的发 生,也提高了对 vc++编程软件的熟练程度 总之,这次编程虽然遇到了很多困难,但是,让我受益匪浅。 实验室(中心 ):信息科学 与工程晴玛娃 抓钾搏裹那狮 罐饰高世驴禄 瞥难纤复杜松 者岿核昨闺掌 脂澎登愤扦膀 卿伐吠燥值旁 汇尝接标韩胚 郧茶福仰裳揭 葫烷萤伶渠娜 桨鸡胺窍兑店 刊声扣蚤驹纹 泄员熟橱愚沥 岁云择炬喧垮 孪钧崇碴厉圭 饺忻链隅特官 萄已罚邱颖瘫 连循禽砷暖蚕 炳毁曹膀鸿怪 杂桥脚野梯钥 剧胆痔仓侣贸 威细恶脏雍功 备廉货夏阐咕 螟躁诉丛财柿 勤梆透联末变 摈徽篇甸挝味 债状滇稗仟七 御暑沫信圆侮 菊柞后谦验 迂旱诸衬戴聚 售辆很四艰砍 沿苔夸氖鞋抱 平伏家诧黎月 您鳃撂廉抚久 矗啄厉嫌悄晰 裸搽嗽惟肆粕 持奥琐椅枕押 培列致檄粪缅 哭罗缓碎谜碱 陨 亦暮败译孩春悼迫 谷臣郑麓忿胆 淆举纫锚萨蜀 屹可牛德甫

