C语言课程设计报告—物资管理系统.docx
C语言课程设计报告物资管理系统 C语言程序设计报告 物资管理系统 指导老师:梁庆中 姓名: 班级序号:034112-29 学号:20221004423 一题目要求 请设计一个物资管理系统,要求主程序中应提供文字交互菜单界面,要求包含以下几个功能模块: 信息输入模块input():建立物资管理数据总文件,完成对物资原库存信息的录入,并存放到指定文件中(pro.dat) 信息查找模块search():采用如下方式进行查找,若找到,则输出该物资的相关信息;没有则给出提示信息。()按产品名称查询()进货日期查询 并统计。()按产品名称和规格查询并统计。 新物资入库模块insert():在原数据文件中插入新物资的信息。 领料模块lend():查找所领取物资的信息,满足领料的要求,请登记领取物资名称,日期,数量(领料后修改) 打印功能模块printf()(1)打印领料单()打印物资库存清单。 二需求分析 根据题目要求,由于物资信息是存放在文件中,所以提供文件的输入,输出等操作在程序中需要浏览物资的需要浏览物资信息,应提供显示,查找等操作;另外还应提供键盘选择菜单实现功能选择。 三总统设计 根据上面的分析及题目要求可以分为以下六个模块(系统模块如下图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(19)n"); 输入n,判断m 是否是1到6? printf(" error! inpute again !n"); printf(" choose the number again!(19)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",p1i.name,p1i.num,p1i.size,&p1i.date,&p1i. max,&p1i.min,&p1i.real); for(i=0;i<n;i+) fprintf(fp,"%s %s %s %ld %ld %ld %ldn",p1i.name,p1i.num,p1i.size,p1i.date, p1i.max,p1i.min,p1i.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",p1i.name,p1i.num,p1i.size,&p1i.date,&p1 i.max,&p1i.min,&p1i.real); fclose(fp); return(i); 主要是为了输入商品类型,名称,数量,型号,日期,最大,最小,真实库存量,并存放在指定的文件(pro.dat)中。但要注意到输入时间,最大最小库存的格式(如)请输入第1th中商品信息: 物资名称:pingguo 编号:001 规格:50g 年月日:20220115 最大库存:500 最小库存:200 实际库存:300 (二)searchmenu()*查询模块* search_1()/按产品名称查询 int i,m,j=0; char str120; printf("n输入查询物资名称:n"); scanf("%s",str1); m=load(); for(i=0;i<m;i+) if(strcmp(str1, p1i.name)=0) printf("n物资名称编号规格年月日最大库存最小库存实际库存n"); printf("%s %s %s %ld %ld %ld %ld",p1i.name,p1i.num,p1i.size,p1i.date,p1i.max, p1i.min,p1i.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=p1i.date/100) printf("n物资名称编号规格年月日最大库存最小库存实际库存n"); printf("%s %s %s %ld %ld %ld %ld",p1i.name,p1i.num,p1i.size,p1i.date, p1i.max,p1i.min,p1i.real); strcpy(p5j.name,p1i.name); p5j.sum=p1i.real; j+; printf("n该查询月份产品种类:%d",j); q=j; printf("n产品名该月进的数量");/统计产品的种类与数量 for(i=0;i<=q;i+) printf("n%s %ld",p5i.name,p5i.sum); printf("n"); search_3()/按产品名称和库存量查询 int i,m; long int k; char str27; printf("n输入查询物资编号:n"); scanf("%s",str2); m=load(); printf("n物资名称编号规格年月日最大库存最小库存实际库存n"); k=0; for(i=0;i<m;i+) if(strcmp(str2, p1i.num)=0) printf("%s %s %s %ld %ld %ld %ldn",p1i.name,p1i.num,p1i.size,p1i.date,p1 i.max,p1i.min,p1i.real); k=k+p1i.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 20220115 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",p1i.name,p1i.num,p1i.size,&p1i.date,&p1 i.max,&p1i.min,&p1i.real); for(i=0;i<n;i+) fprintf(fp,"%s %s %s %ld %ld %ld %ld",p1i.name,p1i.num,p1i.size,p1i.date,p1 i.max,p1i.min,p1i.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( , p1i.name)=0) if(p2.total<=p1i.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+; p1i.real=p1i.real-p2.total; fp=fopen("pro.txt","a"); for(i=0;i<m;i+) fprintf(fp,"%s %s %s %ld %ld %ld %ldn",p1i.name,p1i.num,p1i.size,p1i.date,p1i. max,p1i.min,p1i.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",p3i.name,&p3i.date,&p3i.total); fclose(fp); printf("物资名称领料日期领料数量"); for(j=0;j<=i;j+) printf("n%s %ld %ld",p3j.name,p3j.date,p3j.total); return 0; print_2()/打印物资库存清单 int m,i; m=load(); printf("n物资名称实际库存n"); for(i=0;i<m;i+) printf("n%s %ld",p1i.name,p1i.real); C语言课程设计感想: 以前只学习过计算机文化基础,从来没有接触过编程方面的知识,所以在学习C语言这门课时,觉得这门课很抽象。因此,上课时跟着老师感觉可以听得懂,不像别人说得那么难。但是在c语言实习课上,要自己设计程序,刚开始的时候真的觉得要自己完全懵了,完全不是上课时的那种状态。虽然上机时间也很长,还是感觉要完成老师布置的任务很费力。考完试上程序设计课时刚开始也是一知半解,加上设计课的时间短,所以感觉自己也不会有什么进步。老师布置课程设计后,通过不断的学习与实践,慢慢有了一些进步,自己在综合运用所学知识,发现,提出,分析和解决实际问题,锻炼实践能力的方面有了很大的提高。C 语言在当今,已经是大学生的基础必修课,是必须要掌握的知识。当今科学技术发展日新日异,计算机应用在生活中更是无处不在。作为一个大学来说掌握计算机技术是十分重要的。 回顾这次的课程设计,我感慨良多,这是一门必须要靠实践才能取得进步的过程。刚开始的时候遇到非常多的困难,看着别人设计的如此完美的程序,觉得自己怎么可能考虑的如此周到,而且还不出错误写完这大段大段的程序。从题目到编程,再从编程到调试,我学到很多很多的的东西,真的是非常考验人的过程,通过这次课程设计,我懂得了学习计算机靠的是大量的上机编程调试,这样才可以不断提高编程水平。在设计的过程中,我也遇到了很多问题,比如说在选择结构中,明明知道判断条件,但在用c语言表达的时候却是漏洞百出,各种出错,还是自己考虑得不周到。 在这次的程序设计课中,我看到很多同学确实有编程方面的天赋,不仅完成了自己的课题,还帮助很多同学调试。可以说,没有同学们的帮助,我自己不可能在这么短的时间内,没有错误的完成自己的课题,在这里要给帮助过我的同学说声谢谢。在给老师检查的时候确实也是很紧张的,怕自己一紧张就胡言乱语,不过还好,至少还是说的清楚地,也要谢谢老师这些天陪伴着我们,也没有给我 们太多的压力,一直鼓励我们。我们班的很多女生是很喜欢c语言老师,再次谢谢老师的谆谆教导。 后附程序及运行结果 一,程序 /#include "stdafx.h" #include #include struct product char name20; char num7; char size4; long int date; long int max; long int min; long int real; p1100,p4100; struct pro char name20; long int date; long int total; p2,p3100; struct pro_2 char name20; long int sum; p5100; /*信息输入模块 * 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);