C语言课程设计 物资管理系统.docx
C语言课程设计 物资管理系统学 院: 专 业: 姓 名: 学 号: 指导老师: 1 目录 一题目要求3 二需求分析3 三总体设计4 四详细设计4 4.1 主函数 4 4.2各功能模块设计5 4.2.1信息输入模块5 4.2.2 信息查找模块6 4.2.3 新物资入库模块8 4.2.4 领料模块8 4.2.5 打印功能模块8 4.2.6采用文件来存储数据信息9 五上机操作10 六总结13 附录 14 2 物资管理系统 一 题目要求 请设计一个物资管理系统,要求主程序中应提供文字交互菜单界面,要求包含以下几个功能模块: 信息输入模块input:建立物资管理数据总文件,完成对物资原库存信息的录入,并存放到指定文件中(pro.dat) 信息查找模块search:采用如下方式进行查找,若找到,则输出该物资的相关信息;没有则给出提示信息。 按产品名称查询 进货日期查询并统计。 按产品名称和规格查询并统计。 新物资入库模块insert:在原数据文件中插入新物资的信息。 领料模块lend:查找所领取物资的信息,满足领料的要求,请登记领取物资名称,日期,数量 打印功能模块printf (1)打印领料单 打印物资库存清单。 建立如下结构体: struct dateint year ;int month ; int day; struct product char p_name20;物资名称 long int p_num7;物资编号 char size4;物资规格 struct date in date;进货日期 long int max_s;最大库存量 long int min_s;最小库存量 long int real_s;实际库存量 struct product*next;结点指针 Struct l_pro char p_name 20;物资名称 struct date l_date;领料日期 long int total ;领料数量 struct l_pro*next;结点指针 ; 二 需求分析 根据题目要求,由于物资信息是存放在文件中,所以提供文件的输入,输出等操作在程序中需要浏览物资的需要浏览物资信息,应提供显示,查找等操作;另外还应提供键盘选择菜单实现功能选择。 3 三 总统设计 根据上面的分析及题目要求可以分为以下六个模块。 物资管理系统 商品种类输入 商品查询模块 商品信息输入 商品领取模块 打印商品信息 系统推出 图系统模块图 四 详细设计 主函数:主函数一般是设计简洁,只提供输入,处理和输出部分的函数调用。其中各功能模块用菜单方式选择。其中流程图如图 menu /*主函数*/ int n,w1; do puts("ttt*menu*nn"); puts("ttt 1.enter new datann");/*输入数据*/ puts("ttt 2.search menunn");/*查找信息*/ puts("ttt 3.insert new datann");/*插入新数据*/ puts("ttt 4.lend datann");/*领料数据*/ puts("ttt 5.print datann");/*打印*/ puts("ttt 6.exit");/*退出*/ puts("nttt*n"); printf("Please choose the number 1-6: bb"); scanf("%d",&n); if(n<1|n>6) w1=1;getchar; else w1=0; while(w1=1); switch(n) case 1:enter;break; case 2:search;break; 4 开始 case 3:insert;break; case 4:lend;break; case 5:print;break; 输入n,判断m case 6:exit(0); 是否是1到6? Y main 显示一系列功能选项 menu; 根据n值调用各 功能模块函数 N 各功能模块设计 结束 图主函数流程图 1信息输入模块:主要是为了输入商品类型,名称,数量,型号,日期,最大,最小,真实库存量,并存放在指定的文件(pro.dat)中。 enter/*信息输入模块*/ int i,n; 开始 printf("nHow many products do you want to input(0-%d)?:",N-1); scanf("%d",&n); printf("nEnter data now!nn"); 输入用户要输入 for(i=0;i<n;i+) 学生记录的个数n printf("Please input the %dth product's data:n",i+1); input(i); i从0到n1调用 输入函数input if(i!=0)save(n); printf_back; Y N input(int i) i!=0吗? printf("nname(1-20letter):"); scanf("%s",&proi.p_name); printf("nnumber(1-7letter):"); 返回主菜单 保存调用函 scanf("%d",&proi.p_num); 数save printf("nsize(1-4letter):"); scanf("%s",&proi.size); 结束 printf("ndate(*.*.*):"); 图信息输入模块 scanf("%d.%d.%d",&proi.in_date.year,&proi.in_date.month,&proi.in_date.day); printf("min_s real_s max_s:"); scanf("%d %d %d",&proi.min_s,&proi.real_s,&proi.max_s); 5 printf_data(int i) printf("nnametnumttsizetdatettmin real maxn"); printf("%st%dtt%st%d.%d.%dt%d-%d-%d",proi.p_name,proi.p_num,proi.size,proi.in_date.year,proi.in_date.month,proi.in_date.day,proi.min_s,proi.real_s,proi.max_s); printf_back printf("nnSuccessful!nttThank you!n"); getch; menu; 2查询模块 search/*信息查找模块*/ int n,w2; do puts("ttt*search menu*nn"); puts("ttt1.search by name"); puts("ttt2.search by data"); puts("ttt3.search by name and size"); puts("ttt4.exit"); puts("nttt*n"); printf("Choose the number to search 1-4: bb"); scanf("%d",&n); 开始 if(n<1|n>4) w2=1;getchar; else w2=0; 选择查询模式:1。按 while(w2=1); 名称查找2。按日期查 switch(n) 找3。按名称和规格查 case 1:search_by_name;break; 找 case 2:search_by_date;break; case 3:search_by_nameandsize;break; case 4:getch;menu; Y N 是否找到 search_by_name/*按名称查找*/ 显示找到的记录 提示没有找到 int j,n,m=0;char a20; n=load; printf("nInput the product's namenname:"); scanf("%s",a); 结束 for(j=0;j<n;j+) 图查找模块 6 if(strcmp(a,proj.p_name)=0) m+; printf_data(j); printf("nThis is the %dth product you have searched!",m); getch; menu; struct s_date/*按日期查找*/ int year; int month; int day; s; search_by_date int j,n,m=0; n=load; printf("nInput the date(*.*.*)ndate:"); scanf("%d.%d.%d",&s.year,&s.month,&s.day); for(j=0;j<n;j+) if(s.year=proj.in_date.year)&&(s.month=proj.in_date.month)&&(s.day=proj.in_date.day) m+; printf_data(j); printf("nThis is the %dth product you have searched!",m); getch; menu; search_by_nameandsize/*按名称和规格查找*/ int j,n,m=0;char a20,b4; n=load; printf("nInput the product's namenname:"); scanf("%s",a); printf("nInput the product's sizensize:"); scanf("%s",b); for(j=0;j<n;j+) if(strcmp(a,proj.p_name)=0)&&(strcmp(b,proj.size)=0) m+; printf_data(j); printf("nThis is the %dth product you have searched!",m); getch; 7 menu; 开始 3新物资入库模块 调用加载函数n=loadinsert/*新物资入库模块*/ 并计算可以记录个数n int n,c; n=load; puts("nInput one data:n"); 输入新入库物资的信息 do input(n); printf_data(n); Y N 是否保存 printf("nnAre you sure?n1).suren2). cancel and againn3).back without save bb"); scanf("%d",&c); N Y 是否重新输入 if(c=1)save(n+1);printf_back; else if(c=3)menu; 结束 while(c=2); min_s,&proi.real_s,&proi.max_s); 图新物资入库模块 4.领料模块 lend/*领料模块*/ int j,n; n=load; printf("nPlease check the product's data you lend!"); printf("nname(1-20letter) size(1-4letter) date amountn"); scanf("%s%s%d.%d.%d%d",&check.p_name,&check.size,&check.l_date.year,&check.l_date.month,&check.l_date.day,&check.total); for(j=0;j<n;j+) if(strcmp(check.p_name,proj.p_name)=0)&&(strcmp(check.size,proj.size)=0)&&(check.l_date.year=proj.in_date.year)&&(check.l_date.month=proj.in_date.month)&&(check.l_date.day=proj.in_date.day)&&(check.total<=proj.real_s) proj.real_s-=check.total; save(proj.real_s); printf_data(j); printf_back; else printf("Erro!"); 5打印模块 print/*打印模块*/ int i,n; n=load; 8 for(i=0;i<n;i+) printf_data(i); getch; menu; 6.采用文件来存储数据信息 #include<stdio.h> save(int n) FILE*fp; int k; if(fp=fopen("pro.dat","wb")=NULL) printf("nCannot open file!n"); return NULL; for(k=0;k<n;k+) if(prok.real_s!=0) if(fwrite(&prok,sizeof(struct product),1,fp)!=1) printf("文件书写错误!n"); fclose(fp); load FILE*fp; int k; if(fp=fopen("pro.dat","rb")=NULL) printf("n不能打开文件!n"); return NULL; for(k=0;!feof(fp);k+) fread(&prok,sizeof(struct product),1,fp); fclose(fp); return(k-1); 9 五 上机操作 图物资管理系统菜单 图输入两组数据 10 图查询菜单 图按名称查询 图按进货日期查询 图按名称和规格查询 11 图新物资入库模块 图领料模块 图打印模块 12 六总结 在学习C语言这门课时,由于是第一次接触计算机的课程,而且这门课本来就很抽象,因此,上课时就觉得听不懂.上程序设计课时也是一知半解,加上设计课的时间短,所以自己也没有什么进步。 老师布置课程设计后,通过不断的学习与实践,慢慢有了一些进步,自己在综合运用所学知识,发现,提出,分析和解决实际问题,锻炼实践能力的方面有了很大的提高。当今科学技术发展日新日异,计算机应用在生活中更是无处不在。作为一个大学来说掌握计算机技术是十分重要的。 回顾这次的课程设计,我感慨良多。从题目到编程,再从编程到调试,我学到很多很多的的东西,通过这次课程设计,我懂得了学习计算机靠的是大量的上机编程调试,从中才可以不断提高编程水平。在设计的过程中,我遇到了很多问题,这毕竟第一次做的,难免会遇到过各种各样的问题,比如说结构体、调试不成功 我很高兴在我遇到困难的时候,同学们给了我很多的帮助,可以这么说,没有同学们,我现在肯定还没有完成这次课程设计。在设计中遇到了很多编程问题,在同学的帮助下,最后都迎刃而解。最后,我要再次对各位同学和曹弘老师说一声,谢谢大家的帮助,谢谢! 13 附录:源程序 #include<stdio.h> #include<string.h> #define N 100 struct date int year; int month; int day; ; struct product char p_name20;/*物资名称*/ long int p_num7;/*物资编号*/ char size4;/*物资规格*/ struct date in_date;/*进货日期*/ long int max_s;/*最大库存量*/ long int min_s;/*最小库存量*/ long int real_s;/*实际库存量*/ struct product *next;/*结点指针*/ proN; menu /*主函数*/ int n,w1; do puts("ttt*menu*nn"); puts("ttt 1.enter new datann");/*输入数据*/ puts("ttt 2.search menunn");/*查找信息*/ puts("ttt 3.insert new datann");/*插入新数据*/ puts("ttt 4.lend datann");/*领料数据*/ puts("ttt 5.print datann");/*打印*/ puts("ttt 6.exit");/*退出*/ puts("nttt*n"); printf("Please choose the number 1-6: bb"); scanf("%d",&n); if(n<1|n>6) w1=1;getchar; else w1=0; while(w1=1); switch(n) case 1:enter;break; case 2:search;break; 14 case 3:insert;break; case 4:lend;break; case 5:print;break; case 6:exit(0); main menu; enter/*信息输入模块*/ int i,n; printf("nHow many products do you want to input(0-%d)?:",N-1); scanf("%d",&n); printf("nEnter data now!nn"); for(i=0;i<n;i+) printf("Please input the %dth product's data:n",i+1); input(i); if(i!=0)save(n); printf_back; search/*信息查找模块*/ int n,w2; do puts("ttt*search menu*nn"); puts("ttt1.search by name"); puts("ttt2.search by data"); puts("ttt3.search by name and size"); puts("ttt4.exit"); puts("nttt*n"); printf("Choose the number to search 1-4: bb"); scanf("%d",&n); if(n<1|n>4) w2=1;getchar; else w2=0; while(w2=1); switch(n) 15 case 1:search_by_name;break; case 2:search_by_date;break; case 3:search_by_nameandsize;break; case 4:getch;menu; search_by_name/*按名称查找*/ int j,n,m=0;char a20; n=load; printf("nInput the product's namenname:"); scanf("%s",a); for(j=0;j<n;j+) if(strcmp(a,proj.p_name)=0) m+; printf_data(j); printf("nThis is the %dth product you have searched!",m); getch; menu; struct s_date/*按日期查找*/ int year; int month; int day; s; search_by_date int j,n,m=0; n=load; printf("nInput the date(*.*.*)ndate:"); scanf("%d.%d.%d",&s.year,&s.month,&s.day); for(j=0;j<n;j+) if(s.year=proj.in_date.year)&&(s.month=proj.in_date.month)&&(s.day=proj.in_date.day) m+; printf_data(j); printf("nThis is the %dth product you have searched!",m); getch; menu; search_by_nameandsize/*按名称和规格查找*/ 16 int j,n,m=0;char a20,b4; n=load; printf("nInput the product's namenname:"); scanf("%s",a); printf("nInput the product's sizensize:"); scanf("%s",b); for(j=0;j<n;j+) if(strcmp(a,proj.p_name)=0)&&(strcmp(b,proj.size)=0) m+; printf_data(j); printf("nThis is the %dth product you have searched!",m); getch; menu; insert/*新物资入库模块*/ int n,c; n=load; puts("nInput one data:n"); do input(n); printf_data(n); printf("nnAre you sure?n1).suren2).cancel and againn3).back without save bb"); scanf("%d",&c); if(c=1)save(n+1);printf_back; else if(c=3)menu; while(c=2); struct l_pro char p_name20; char size4; struct date l_date; long int total; struct l_pro *next; check; lend/*领料模块*/ int j,n; n=load; 17 printf("nPlease check the product's data you lend!"); printf("nname(1-20letter) size(1-4letter) date amountn"); scanf("%s%s%d.%d.%d%d",&check.p_name,&check.size,&check.l_date.year,&check.l_date.month,&check.l_date.day,&check.total); for(j=0;j<n;j+) if(strcmp(check.p_name,proj.p_name)=0)&&(strcmp(check.size,proj.size)=0)&&(check.l_date.year=proj.in_date.year)&&(check.l_date.month=proj.in_date.month)&&(check.l_date.day=proj.in_date.day)&&(check.total<=proj.real_s) proj.real_s-=check.total; save(proj.real_s); printf_data(j); printf_back; else printf("Erro!"); print/*打印模块*/ int i,n; n=load; for(i=0;i<n;i+) printf_data(i); getch; menu; #include<stdio.h> save(int n) /*保存函数,保存n个记录*/ FILE*fp; int k; if(fp=fopen("pro.dat","wb")=NULL) printf("nCannot open file!n"); return NULL; for(k=0;k<n;k+) if(prok.real_s!=0) if(fwrite(&prok,sizeof(struct product),1,fp)!=1) printf("Files read erro!n"); fclose(fp); 18 load /*加载记录或可以计算记录个数的函数*/ FILE*fp; int k; if(fp=fopen("pro.dat","rb")=NULL) printf("nCannot open the file!n"); return NULL; for(k=0;!feof(fp);k+) fread(&prok,sizeof(struct product),1,fp); fclose(fp); return(k-1); input(int i) printf("nname(1-20letter):"); scanf("%s",&proi.p_name); printf("nnumber(1-7letter):"); scanf("%d",&proi.p_num); printf("nsize(1-4letter):"); scanf("%s",&proi.size); printf("ndate(*.*.*):"); scanf("%d.%d.%d",&proi.in_date.year,&proi.in_date.month,&proi.in_date.day); printf("min_s real_s max_s:"); scanf("%d %d %d",&proi.min_s,&proi.real_s,&proi.max_s); printf_data(int i) printf("nnametnumttsizetdatettmin real maxn"); printf("%st%dtt%st%d.%d.%dt%d-%d-%d",proi.p_name,proi.p_num,proi.size,proi.in_date.year,proi.in_date.month,proi.in_date.day,proi.min_s,proi.real_s,proi.max_s); printf_back printf("nnSuccessful!nttThank you!n"); getch; menu; 19