当前位置:文档之家› C语言课程设计报告—物资管理系统

C语言课程设计报告—物资管理系统

C语言程序设计报告——物资管理系统指导老师:梁庆中姓名:班级序号:034112-29学号:20111004423一.题目要求请设计一个物资管理系统,要求主程序中应提供文字交互菜单界面,要求包含以下几个功能模块:1.信息输入模块input():建立物资管理数据总文件,完成对物资原库存信息的录入,并存放到指定文件中(pro.dat)2.信息查找模块search():采用如下方式进行查找,若找到,则输出该物资的相关信息;没有则给出提示信息。

(1)按产品名称查询(2)进货日期查询并统计。

(3)按产品名称和规格查询并统计。

3.新物资入库模块insert():在原数据文件中插入新物资的信息。

4.领料模块lend():查找所领取物资的信息,满足领料的要求,请登记领取物资名称,日期,数量(领料后修改)5.打印功能模块printf()(1)打印领料单(2)打印物资库存清单。

二.需求分析根据题目要求,由于物资信息是存放在文件中,所以提供文件的输入,输出等操作在程序中需要浏览物资的需要浏览物资信息,应提供显示,查找等操作;另外还应提供键盘选择菜单实现功能选择。

三.总统设计根据上面的分析及题目要求可以分为以下六个模块(系统模块如下图1。

)四.详细设计(一)主函数一般是设计简洁,只提供输入,处理和输出部分的函数调用。

其中各功能模块用菜单方式选择。

int menu(){int n,w;printf("\n 欢迎进入物资管理系统\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(" choose the number to execute(1~9)\n");输入n,判断m是否是1到6?printf(" error! inpute again !\n");printf(" choose the number again!(1~9)\n");w=1;case 1: input();break;case 2: search_1();break;case 3: search_2();break;case 4: search_3();break;case 5: lend();break;case 6: insert();break;case 7: print_1();break;case 8: print_2();break;case 9: return(0);break;}return 1;}main(){ int i;do{i=menu();}while(i);}(二)各功能模块设计1.输入模块*********几种类型,名称等信息****************信息输入模块*******************int input()//建立物资数据库{ FILE *fp;int i,n;printf("\n请输入物资总数[n=?]\n");scanf("%d",&n);if((fp=fopen("pro.txt","w+"))==NULL){ printf("\n cannot open the file! \n");return(0);}printf("\n 依次输入物资信息:\n");for(i=0;i<n;i++){ printf("\n 第%d种物资\n",i+1);printf("\n物资名称编号规格年月日最大库存最小库存实际库存\n");scanf("%s %s %s %ld %ld %ld %ld",p1[i].name,p1[i].num,p1[i].size,&p1[i].date,&p1[i]. max,&p1[i].min,&p1[i].real);}for(i=0;i<n;i++)fprintf(fp,"%s %s %s %ld %ld %ld %ld\n",p1[i].name,p1[i].num,p1[i].size,p1[i].date, p1[i].max,p1[i].min,p1[i].real);fclose(fp);return 0;}int load(){ int i;FILE *fp;if((fp=fopen("pro.txt","r+"))==NULL){ printf("\ncannot open the file!\n");return(0);}for(i=0;!feof(fp);i++)fscanf(fp,"%s %s %s %ld %ld %ld %ld",p1[i].name,p1[i].num,p1[i].size,&p1[i].date,&p1[ i].max,&p1[i].min,&p1[i].real);fclose(fp);return(i);}主要是为了输入商品类型,名称,数量,型号,日期,最大,最小,真实库存量,并存放在指定的文件(pro.dat)中。

但要注意到输入时间,最大最小库存的格式(如)请输入第1th中商品信息:物资名称:pingguo编号:001规格:50g年月日:20130115最大库存:500最小库存:200实际库存:300(二)searchmenu()*******查询模块*******search_1()//按产品名称查询{ int i,m,j=0;char str1[20];printf("\n输入查询物资名称:\n");scanf("%s",str1);m=load();for(i=0;i<m;i++){ if(strcmp(str1, p1[i].name)==0){ printf("\n物资名称编号规格年月日最大库存最小库存实际库存\n");printf("%s %s %s %ld %ld %ld %ld",p1[i].name,p1[i].num,p1[i].size,p1[i].date,p1[i].max, p1[i].min,p1[i].real); j++;}}if(j==0) printf("\n没有发现\n");}search_2()//按进货日期查询{int i,j,l,n,m,q;long int k,y;l=0;n=0;j=0;k=0;printf("\n输入年月:\n");scanf("%ld",&y);m=load();for(i=0;i<m;i++){ if(y*100<=p1[i].date&&y>=p1[i].date/100){ printf("\n物资名称编号规格年月日最大库存最小库存实际库存\n");printf("%s %s %s %ld %ld %ld %ld",p1[i].name,p1[i].num,p1[i].size,p1[i].date, p1[i].max,p1[i].min,p1[i].real);strcpy(p5[j].name,p1[i].name);p5[j].sum=p1[i].real;j++;}}printf("\n该查询月份产品种类:%d",j);q=j;printf("\n产品名该月进的数量");//统计产品的种类与数量for(i=0;i<=q;i++)printf("\n%s %ld",p5[i].name,p5[i].sum);printf("\n");}search_3()//按产品名称和库存量查询{ int i,m;long int k;char str2[7];printf("\n输入查询物资编号:\n");scanf("%s",str2);m=load();printf("\n物资名称编号规格年月日最大库存最小库存实际库存\n");k=0;for(i=0;i<m;i++){ if(strcmp(str2, p1[i].num)==0){ printf("%s %s %s %ld %ld %ld %ld\n",p1[i].name,p1[i].num,p1[i].size,p1[i].date,p1[ i].max,p1[i].min,p1[i].real);k=k+p1[i].real;}}if(k) printf("统计物资库存:%ld",k);else printf("\n not found! \n");printf("\n");}主要以一种查询方式进行说明流程图如下:操作如图1. 按产品名称查询2. 按进货日期查询3. 按产品名称和库存量查询4.返回菜单Choose the number to excute:2输查询物资名称名称:apple物资名称编号规格年月日最大库存最小库存实际库存apple 001 50g 20130115 500 200 300 (三)新物资的录入在此函数上对新料进行了记录该函数据对物资进行了全面的查找insert()//新物资统计{int i,n;FILE *fp;if((fp=fopen("pro.txt","a"))==NULL){ printf("\n cannot find the file! \n");return(0);}printf("\n请输入增加物资种数[n=?]\n");//增加新物资信息scanf("%d",&n);printf("\n 依次输入新物资信息:\n");printf("\n物资名称编号规格年月日最大库存最小库存量实际库存\n");for(i=0;i<n;i++){ scanf("%s %s %s %ld %ld %ld %ld",p1[i].name,p1[i].num,p1[i].size,&p1[i].date,&p1[ i].max,&p1[i].min,&p1[i].real);}for(i=0;i<n;i++)fprintf(fp,"%s %s %s %ld %ld %ld %ld",p1[i].name,p1[i].num,p1[i].size,p1[i].date,p1 [i].max,p1[i].min,p1[i].real);fclose(fp);return 0;(四)领料模块*****查找对所领聊的信息,若满足领料要求,便登记一系列内容,并修改程序如下lend()//查找所领取物资的信息{ int i,m;printf("\n输入查询名称领料数量\n");scanf("%s %ld",,&p2.total);m=load();for(i=0;i<m;i++){ if(strcmp(, p1[i].name)==0)if(p2.total<=p1[i].real) {i--; break;}else printf("\n查询到该物资,不满足领料要求\n");}if(i==m) printf("\n not found !\n");else{ FILE *fp;printf("\n输入今天日期:\n");scanf("%ld",p2.date);fp=fopen("领料单.txt","a");fprintf(fp,"%s %ld %ld",,p2.date,p2.total);fclose(fp);i++;p1[i].real=p1[i].real-p2.total;fp=fopen("pro.txt","a");for(i=0;i<m;i++)fprintf(fp,"%s %s %s %ld %ld %ld %ld\n",p1[i].name,p1[i].num,p1[i].size,p1[i].date,p1[i]. max,p1[i].min,p1[i].real);fclose(fp);}return 0;(五) 打印模块*****print_1()//打印领料单{int i,j;FILE *fp;if((fp=fopen("领料单.txt","r"))==NULL){ printf("\n cannot open the file! \n");return(0);}for(i=0;!feof(fp);i++)fscanf(fp,"%s %ld %ld",p3[i].name,&p3[i].date,&p3[i].total);fclose(fp);printf("物资名称领料日期领料数量");for(j=0;j<=i;j++)printf("\n%s %ld %ld",p3[j].name,p3[j].date,p3[j].total);return 0;}print_2()//打印物资库存清单{int m,i;m=load();printf("\n物资名称实际库存\n");for(i=0;i<m;i++)printf("\n%s %ld",p1[i].name,p1[i].real);}C语言课程设计感想:以前只学习过计算机文化基础,从来没有接触过编程方面的知识,所以在学习C语言这门课时,觉得这门课很抽象。

相关主题