1、目 录课程设计评语2目 录31课程论文题目42程序设计思路43功能模块图54数据结构设计55算法设计66程序代码137程序运行结果228编程中遇到的困难及解决方法259总结心得及良好建议2610致谢261课程论文题目物资管理系统2程序设计思路(1)库存和领料信息以文本文件的方式存放在两个文件里,提供相应的输入输出操作。(2)提供库存几种方式的查找。(3)提供库存的建立、插入。(4)能查找满足领货要求的信息,并修改库存、领货文本文件。3功能模块图物资管理系统信息输入模块信息查询模块信息添加模块物资领取模块信息打印模块退出模块4数据结构设计(一)主函数一般是设计简洁,只提供输入,处理和输出部分的函
2、数调用。其中各功能模块用菜单方式选择。其中流程图如图(1)开始显示一系列功能选择判断m 是否是1到6?根据n值调用各功能模块函数结束图(1)菜单*/do puts(ntt*菜单*nn); puts(ttt1.信息输入); puts(ttt2.信息查询); puts(ttt3.信息插入); puts(ttt4.领货); puts(ttt5.信息打印); puts(ttt6.退出); puts(nntt*n); puts(tt* 陈文n); puts(tt*2013.01.05n); printf(请选择 1-6: bb); scanf(%d,&n); if(n6) w1=1;getchar();
3、 else w1=0; while(w1=1);switch(n) /*选择功能*/ case 1:enter();break; /*信息输入模块*/ case 2:search();break; /*信息查询模块*/ case 3:insert();break; /*信息添加模块*/ case 4:lend();break; /*物资领取模块*/ case 5:print();break; /*信息打印模块*/ case 6:exit(0); /*退出模块*/ main() /*主函数*/ menu();(二)各功能模块设计1.输入模块*几种类型,名称等信息 */*信息输入模块*/void
4、enter() int i,n; printf(n产品种类数量(0-%d)?:,N-1); scanf(%d,&n); printf(n请输入数据nn); for(i=0;in;i+) printf(输入第%d种产品数据:n,i+1); input(i); if(i!=0)save(n); printf_back();2.searchmenu()*查询模块*/*信息查询模块*/void searchmenu() int n,w2; do puts(ntt*查询*nn); puts(ttt1.按名称查询); puts(ttt2.按日期查询); puts(ttt3.按名称规格查询); puts(t
5、tt4.返回); puts(nntt*n); printf(请选择 1-4: bb); scanf(%d,&n); if(n4) w2=1;getchar(); else w2=0; while(w2=1); switch(n) /*选择功能*/ case 1:search_by_name();break; /*按名称查询*/ case 2:search_by_date();break; /*按日期查询*/ case 3:search_by_nameandsize();break; /*按名称规格查询*/ case 4:getch();menu(); /*退出模块*/ void search(
6、) searchmenu();/*按名称查询*/void search_by_name() int j,n,m=0;char a20; n=load(); printf(n请输入产品名称!nname:); scanf(%s,a); for(j=0;jn;j+) if(strcmp(a,proj.p_name)=0) m+; printf_data(j); printf(n找到%d种产品!,m);getch();menu();/*按日期查询*/struct s_date int year; int month; int day; s;void search_by_date() int j,n,m
7、=0; n=load(); printf(n输入你想查找的产品日期!ndate:); scanf(%d.%d.%d,&s.year,&s.month,&s.day); for(j=0;jn;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(n找到当天的此产品%d!,m);getch();menu();/*按名称规格查询*/void search_by_nameandsize() int j,n,m=0; char a20
8、,b4; n=load(); printf(n输入你想找的产品名称!n名称:); scanf(%s,a); printf(n输入你想找的产品库存量!n库存量:); scanf(%s,b); for(j=0;jn;j+) if(strcmp(a,proj.p_name)=0)&(strcmp(b,proj.size)=0) m+; printf_data(j); printf(找到%d种产品!,m);getch();menu();3.新物资的录入 在此函数上对新料进行了记录/*信息添加模块*/void insert() int n,c; n=load(); puts(n输入一个数据:n); do
9、 input(n); printf_data(n); printf(nn是否确信?n1).是n2).取消并重试n3).返回不保存 bb); scanf(%d,&c); if(c=1)save(n+1);printf_back(); else if(c!=2)menu(); while(c=2);4.领料模块*查找对所领聊的信息,若满足领料要求,便登记一系列内容,并修改/*物资领取模块*/struct one_pro char p_name20; char size4; struct date one_date; long int total; struct one_pro *next;chec
10、k;void lend() int j,n; n=load(); printf(n请检查你想取的产品的信息!); printf(n名称(1-20letter) 库存量(1-4letter) 日期 amountn);scanf(%s%s%d.%d.%d%d,&check.p_name,&check.size,&check.one_date.year,&check.one_date.month,&check.one_date.day,&check.total); for(j=0;jn;j+)if(strcmp(check.p_name,proj.p_name)=0)&(strcmp(check.s
11、ize,proj.size)=0)&(check.one_date.year=proj.in_date.year)&(check.one_date.month=proj.in_date.month)&(check.one_date.day=proj.in_date.day)&(check.total=proj.real_s) proj.real_s-=check.total; printf_data(j); save(n); printf_back(); else printf(数据错误!); 5.打印领料单和物资库存清单/*信息打印模块*/void print() int i,n; n=lo
12、ad(); for(i=0;in;i+) printf_data(i); getch(); menu(); (三).采用文件来存储数据信息/*公共函数*/#includevoid save(int n) /*保存函数*/ FILE*fp; int k; if(fp=fopen(pro.dat,wb)=NULL) printf(n无法打开文件!n); for(k=0;kn;k+) if(prok.real_s!=0) if(fwrite(&prok,sizeof(struct product),1,fp)!=1) printf(文件书写错误!n); fclose(fp);int load() /
13、*加载函数*/ 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);void input(int i) /*输入一种产品信息*/ printf(n名称(1-20letter):); scanf(%s,&proi.p_name); printf(n编号(1-7num):); scanf(%d,&proi.p_num);
14、printf(n库存量(1-4letter):); scanf(%s,&proi.size); printf(n日期:); scanf(%d.%d.%d,&proi.in_date.year,&proi.in_date.month,&proi.in_date.day); printf(namountmin-real-max:); scanf(%d-%d-%d,&proi.min_s,&proi.real_s,&proi.max_s);void printf_data(int i) /*输出信息函数*/printf(n名称tt编号t规格t日期ttmin-real-maxn);printf(%st
15、%dt%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);void printf_back() printf(nn请按任意键回主菜单!n); getch(); menu();5.算法设计6.程序代码#include#include#include#include#define N 100struct date int year; int month; int da
16、y;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;void enter();void search();void searchmenu();void search_by_name();void search_by_date();void search_by_nameandsize();void insert();void lend()
17、;void print();void save(int n);int load();void input(int i);void printf_data(int i) ;void printf_back(); void menu() /*菜单*/int n,w1; /*变量p保存选择菜单数字,w1判断输入数字对应菜单*/do puts(ntt*菜单*nn); puts(ttt1.信息输入); puts(ttt2.信息查询); puts(ttt3.信息插入); puts(ttt4.领货); puts(ttt5.信息打印); puts(ttt6.退出); puts(nntt*n); puts(tt
18、* 陈文n); puts(tt*2013.01.05n); printf(请选择 1-6: bb); scanf(%d,&n); if(n6) w1=1;getchar(); else w1=0; while(w1=1);switch(n) /*选择功能*/ case 1:enter();break; /*信息输入模块*/ case 2:search();break; /*信息查询模块*/ case 3:insert();break; /*信息添加模块*/ case 4:lend();break; /*物资领取模块*/ case 5:print();break; /*信息打印模块*/ case
19、 6:exit(0); /*退出模块*/ main() /*主函数*/ menu();/*信息输入模块*/void enter() int i,n; printf(n产品种类数量(0-%d)?:,N-1); scanf(%d,&n); printf(n请输入数据nn); for(i=0;in;i+) printf(输入第%d种产品数据:n,i+1); input(i); if(i!=0)save(n); printf_back();/*信息查询模块*/void searchmenu() int n,w2; do puts(ntt*查询*nn); puts(ttt1.按名称查询); puts(t
20、tt2.按日期查询); puts(ttt3.按名称规格查询); puts(ttt4.返回); puts(nntt*n); printf(请选择 1-4: bb); scanf(%d,&n); if(n4) w2=1;getchar(); else w2=0; while(w2=1); switch(n) /*选择功能*/ case 1:search_by_name();break; /*按名称查询*/ case 2:search_by_date();break; /*按日期查询*/ case 3:search_by_nameandsize();break; /*按名称规格查询*/ case 4
21、:getch();menu(); /*退出模块*/ void search() searchmenu();/*按名称查询*/void search_by_name() int j,n,m=0;char a20; n=load(); printf(n请输入产品名称!nname:); scanf(%s,a); for(j=0;jn;j+) if(strcmp(a,proj.p_name)=0) m+; printf_data(j); printf(n找到%d种产品!,m);getch();menu();/*按日期查询*/struct s_date int year; int month; int
22、day; s;void search_by_date() int j,n,m=0; n=load(); printf(n输入你想查找的产品日期!ndate:); scanf(%d.%d.%d,&s.year,&s.month,&s.day); for(j=0;jn;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(n找到当天的此产品%d!,m);getch();menu();/*按名称规格查询*/void search_
23、by_nameandsize() int j,n,m=0; char a20,b4; n=load(); printf(n输入你想找的产品名称!n名称:); scanf(%s,a); printf(n输入你想找的产品库存量!n库存量:); scanf(%s,b); for(j=0;jn;j+) if(strcmp(a,proj.p_name)=0)&(strcmp(b,proj.size)=0) m+; printf_data(j); printf(找到%d种产品!,m);getch();menu();/*信息添加模块*/void insert() int n,c; n=load(); put
24、s(n输入一个数据:n); do input(n); printf_data(n); printf(nn是否确信?n1).是n2).取消并重试n3).返回不保存 bb); scanf(%d,&c); if(c=1)save(n+1);printf_back(); else if(c!=2)menu(); while(c=2);/*物资领取模块*/struct one_pro char p_name20; char size4; struct date one_date; long int total; struct one_pro *next;check;void lend() int j,n
25、; n=load(); printf(n请检查你想取的产品的信息!); printf(n名称(1-20letter) 库存量(1-4letter) 日期 amountn);scanf(%s%s%d.%d.%d%d,&check.p_name,&check.size,&check.one_date.year,&check.one_date.month,&check.one_date.day,&check.total); for(j=0;jn;j+)if(strcmp(check.p_name,proj.p_name)=0)&(strcmp(check.size,proj.size)=0)&(ch
26、eck.one_date.year=proj.in_date.year)&(check.one_date.month=proj.in_date.month)&(check.one_date.day=proj.in_date.day)&(check.total=proj.real_s) proj.real_s-=check.total; printf_data(j); save(n); printf_back(); else printf(数据错误!); /*信息打印模块*/void print() int i,n; n=load(); for(i=0;in;i+) printf_data(i)
27、; getch(); menu();/*公共函数*/#includevoid save(int n) /*保存函数*/ FILE*fp; int k; if(fp=fopen(pro.dat,wb)=NULL) printf(n无法打开文件!n); for(k=0;kn;k+) if(prok.real_s!=0) if(fwrite(&prok,sizeof(struct product),1,fp)!=1) printf(文件书写错误!n); fclose(fp);int load() /*加载函数*/ FILE*fp; int k; if(fp=fopen(pro.dat,rb)=NUL
28、L) printf(n无法打开文件!n); return NULL; for(k=0;!feof(fp);k+) fread(&prok,sizeof(struct product),1,fp); fclose(fp); return(k-1);void input(int i) /*输入一种产品信息*/ printf(n名称(1-20letter):); scanf(%s,&proi.p_name); printf(n编号(1-7num):); scanf(%d,&proi.p_num); printf(n库存量(1-4letter):); scanf(%s,&proi.size); pri
29、ntf(n日期:); scanf(%d.%d.%d,&proi.in_date.year,&proi.in_date.month,&proi.in_date.day); printf(namountmin-real-max:); scanf(%d-%d-%d,&proi.min_s,&proi.real_s,&proi.max_s);void printf_data(int i) /*输出信息函数*/printf(n名称tt编号t规格t日期ttmin-real-maxn);printf(%st%dt%st%d.%d.%dt%d-%d-%d,proi.p_name,proi.p_num,proi
30、.size,proi.in_date.year,proi.in_date.month,proi.in_date.day,proi.min_s,proi.real_s,proi.max_s);void printf_back() printf(nn请按任意键回主菜单!n); getch(); menu();7程序运行结果8.困难,解决方法在学习C语言这门课时,由于是第一次接触计算机的课程,而且这门课本来就很抽象,因此,上课时就觉得听不懂.上程序设计课时也是一知半解,加上设计课的时间短,所以自己也没有什么进步。老师布置课程设计后,通过不断的学习与实践,慢慢有了一些进步,自己在综合运用所学知识,发现
31、,提出,分析和解决实际问题,锻炼实践能力的方面有了很大的提高。当今科学技术发展日新日异,计算机应用在生活中更是无处不在。作为一个大学来说掌握计算机技术是十分重要的。9.心得回顾这次的课程设计,我感慨良多。从题目到编程,再从编程到调试,我学到很多很多的的东西,通过这次课程设计,我懂得了学习计算机靠的是大量的上机编程调试,从中才可以不断提高编程水平。在设计的过程中,我遇到了很多问题,这毕竟第一次做的,难免会遇到过各种各样的问题,比如说结构体、调试不成功 我很高兴在我遇到困难的时候,同学们给了我很多的帮助,可以这么说,没有同学们,我现在肯定还没有完成这次课程设计。在设计中遇到了很多编程问题,在同学的帮助下,最后都迎刃而解。最后,我要再次对各位同学和老师说一声,谢谢大家的帮助,谢谢!24