青岛理工大学琴岛学院设计报告课题名称:物资管理系统学院:青岛理工大学琴岛学院专业班级:嵌入式技术与应用14-1班学号:学生:指导教师:青岛理工大学琴岛学院教务处年月日1/31学生指导教师课题名称物资管理系统设计时间设计地点8-212设计目的1.使学生加深对讲授知识的理解、能够综合应用数组、函数、结构体、指针、文件等知识解决实际问题;2.培养学生独立调试程序的能力,团队协作的能力;3.累积编程经验,书写设计报告的规范,为编写项目打下良好基础。指导教师评语系部教研室意见2/31一、选题背景及意义物资管理是一般工业、商业企业生产管理环节中重要的一环,需要对物资基本信息管理、物资调配信息等进行完整的监控。物资入库首先要登记物资的基本信息,包括物资的种类、名称、型号、单位、单价等;然后登记物资入库信息,包括物资基本信息、入库地点、入库人、经办人、数量等;根据物资的入库、出库过程的综合,得到各种物资的余额信息,方便进行后续工作。因此物资管理信息系统需要纪录物资流通的全过程。加强物资管理,不但有算得出、看得到的效益,还可以大大提高管理队伍的素质,加强职工的增产节约意识、爱护财产意识和学习科技的意识,使科学管理形成共识,并可以减少物资设备各个环节上的矛盾。信息已成为继劳动力、土地、资本之后的又一大资源。谁控制的信息越多,谁利用信息资源的效率越高,谁就会在各方面的竞争中占有一席之地,谁就会有更多的优势。物资供应部门是企业与生产单位之间的桥梁、纽带,是企业正常生产的物资保障部门。正因为供应部门是关键的中转环节,建立一套物资管理信息系统对于如何有效的把本单位生产所需的生产资料及时、保质保量的供应上去,有着重要的意义。从微观上讲,建立一套物资管理信息系统能够加快物资的周转速度,提高生产效率,从而加强了管理的信息化手段,提高了本单位的经济效益。从宏观上讲,顺应了社会的信息化、社会化潮流,缩短了整个社会化大生产的周期。目前存在的主要问题是:(一)根据各三级单位所报材料明细逐个与库存账本对照查阅,进行库平,即库中有其所需材料则开据料单从库中领取,若库中无,则通知采购人员采购。库中物资种类繁多,查对繁琐,易出错。(二)从开据发料单到每月结帐、清册都是手工操作,计算器加算盘,效率低且准确率不高。单位配备的计算机仅局限于打字,做报表,不能开单据,计算机应有的功能没有充分发挥。所以想设计个系统来提高工作效率,为学校、企业节省大部分开支用来投资系统的开发,这样以来节省了人力物力,也节省了资源的消耗,实现了低碳发展。二、需求分析学校的计算机不仅可以安装Windows和UNIX的运行环境,而且有足够的空间可以安装运行平台JAVA虚拟机、数据库ORACLE、服务器TOMCAT和各类编程工具例如ECLIPSE,NETBEANS,在编程环境上提供了可靠的支持;我们编程人员方面,可以运用以前所学的各种开发软件的计算机知识和管理知识,加上不断的学习,为系统的开发提供了必要的技术保障。我们就应3/31用了JAVAEE企业级开发框架以及ORACLE数据库系统软件。根据系统功能、性能及实现系统的各项约束条件,根据新系统目标来衡量所需的技术是否具备,本系统是一个数据库管理和查询的系统,现有的技术以较为成熟,硬件、软件的性能要求、环境条件等各项条件良好,估计利用现有技术条件应完全可以达到该系统的功能目标。同时,考虑给予的开发期限也较为充裕,预计系统是可以在规定期限内完成开发。系统的效益可以从经济效益和社会效益两方面考虑。对于物资管理系统则应着重分析其社会效益。例如,系统投入运行后可以使物资管理实现科学化、规范化。增强了工作人员对物资管理能力、提高了工作效率。企业间的竞争说到底是人的竞争,但人力资源是企业中最难管理的资源,它涉及到企业的组织机构、企业文化、人的心理等方方面面;从强调对物的管理转向对人的管理,是企业管理的一个划时代的进步。如何刻意挖掘蕴藏在员工当中的巨大能力,发掘充满活力和生机的人力资源,将人视为可以开发和增值的资源去投资和经营,是当前企业急需解决的课题。传统的人事管理对人力资源的管理是非量化的,是人事部门最基础业务的信息管理;而真正的人力资源管理系统将人力资源管理过程数字化,并结合知识管理、办公自动化、项目管理等技术,将人力资源管理提升到战略级别的管理层次,是一个针对企业人力资源的设计系统。通过以上从技术、经济、实践三方面的研究与调查,我们可以确定该物资管理系统是可行的。4/31三、概要设计1、数据库设计本系统中主要涉及数据表如下:物资信息表:主要包含编号、物资名称、单价、数量等字段。其具体表结构如图所示:物资信息表字段名字段类型字段宽度字段说明num字符型10编号name字符型20物资名称price数值型5单价count数值型5数量total数值型20总金额2、系统功能模块概述本系统能够实现一个人机交互,操作简单的物资管理系统,主要分为两个用户角色,用户和物资,主要功能如图所示:系统功能模块图输入指令0~6开始输入记录修改记录查找记录统计记录删除记录排序记录退出系统5/31各功能模块描述如下:(1)输入记录:本模块主要完成物资记录的输入,主要包含编号、名称、单价和数量,在输入过程中要注意各个字段的类型,并且要进行数据的合法性验证。(2)查找记录:主要用来查找物资的信息,该模块能够通过物资编号来查找物资记录信息。(3)删除记录:通过物资编号来进行删除物资信息。(4)修改记录:通过编号修改物资信息。(5)排序记录:按总金额进行排序。(6)统计记录:统计物资数量。(0)退出系统。6/31四、详细设计(一)主函数一般是设计简洁,只提供输入,处理和输出部分的函数调用。(1)/**************************商品结构体************************/structcommdity{intnum;//编号charname[20];//商品名称doubleprice;//单价doublecount;//数量doubletotal;//总金额};structcommditycomm[50];//定义结构体数组(2)/*************************函数申明*****************************/voidin();//输入物资信息函数voidshow();//显示物资信息函数voidorder();//按总金额排队函数voiddel();//删除物资信息函数voidmodify();//修改物资信息函数voidmenu();//主菜单函数voidtotal();//统计总物资数函数voidsearch();//查找物资信息函数(5)/************************主函数********************************/voidmain(){intn;menu();scanf(%d,&n);while(n){数据类型{case1:in();//输入物资信息break;case2:search();//寻找物资信息break;case3:del();//删除物资信息break;case4:modify();//修改物资信息break;case5:7/31order();//排序物资break;case6:total();//统计物资数量break;default:break;}getch();menu();//返回菜单界面scanf(%d,&n);}return;}(二)各功能模块设计(1)//菜单模块voidmenu(){system(CLS);//清屏函数printf(\n\n\n\n\n);printf(\t\t|**********物资管理系统**************|\n);printf(\t\t|\t1输入记录|\n);printf(\t\t|\t2查找记录|\n);printf(\t\t|\t3删除记录|\n);printf(\t\t|\t4修改记录|\n);printf(\t\t|\t5排序记录(按总金额)|\n);printf(\t\t|\t6统计记录|\n);printf(\t\t|\t0退出系统|\n);printf(\t\t|************************************|\n);printf(\t\t\t选择(0-6):);}(2)//显示模块//基本流程,先把文件中的数据依次读入到物资结构体中,//并依次显示voidshow(){FILE*fp;inti,m=0;fp=fopen(data.txt,a+);while(!feof(fp)){if(fread(&comm[m],LEN,1,fp)==1)m++;8/31}fclose(fp);printf(编号物资名称单价数量总金额\t\n);for(i=0;im;i++){printf(FORMAT,DATA);//将信息按指定格式打印}}(3)//查找记录模块//本模块的流程是先打开文件并读取里面的数据到物资结构体数组缓冲区中//用户输入编号与物资结构体中缓冲区的数据进行比较,如果有则显示,没有则输出提示信息voidsearch(){FILE*fp;intnum,i,m=0;charch[2];//以追加和写的方式打开文件if((fp=fopen(data.txt,a+))==NULL){printf(不能打开文件!\n);return;}//把文件中的数据依次读入到结构体中,并关闭文件while(!feof(fp)){if(fread(&comm[m],LEN,1,fp)==1)m++;}fclose(fp);//如果没有记录,则返回,否则执行显示操作if(m==0){printf(没有记录!\n);return;}else{//用户输入编号printf(请输入编号:);scanf(%d,&num);//用循环语句来比较用户输入的编号是否存在for(i=0;im;i++){if(num==comm[i].num){9/31printf(已经找到该记录,是否显示?(y/n));scanf(%s,ch);if(strcmp(ch,y)==0||strcmp(ch,Y)==0){printf(编号物资名称单价数量总金额\t\n);printf(FORMAT,DATA);break;}elsereturn;}}//如果上面的循环语句执行完都没有找到,则会执行本判断语句if(i==m)printf(没有找到相关记录!\n);}}(4)//删除物资模块//本模块的流程为先打开文件,并把数据写到物资结构体数组缓冲区中去//用户输入相关编号与结构体数组中的数据相比较,如果存在则把结构体数组缓冲区进行修改//把修改后的结构体数组缓冲区再次写入文件voiddel(){FILE*fp;intnum,i,j,m=0;charch[2];//以追加和读的方式打开文件if((fp=fopen(data.txt,a+))==NULL){printf(不能打开文件\n);return;}//把文件中的内容依次写到物资结构体数组中,并记录信息条数,最后关闭文件while(!feof(fp)){if(fread(&comm[m],LEN,1,fp)==1)m++;}fclose(fp);//根据物资信息条数进行相应的处理if(m==0){printf(没有记录!\n);return;10/31}else{//用户输入编号printf(请输入编号:);scanf(%d,&num);//用循环语句来比较是否有用户输入的记录for(i=0;im;i++){if(num==comm[i].num)break;}//没找到用户需要的记录则返回if(i==m){printf(没有找到相关记录);getchar();return;}//找到用户需要的记录,要求用户输入选择printf(该记录已经找到,是否删除?(y/n));scanf(%s,ch);if(strcmp(ch,y)==0||strcmp(ch