物资管理系统课程设计报告
- 格式:doc
- 大小:201.50 KB
- 文档页数:25
中国地质大学本科生课程论文封面课程名称c语言课程设计教师姓名刘文中本科生姓名陈文本科生学号20121003931本科生专业网络工程所在院系计算机学院类别:日期:课程设计评语注:1、无评阅人签名成绩无效;2、必须用钢笔或圆珠笔批阅,用铅笔阅卷无效;3、如有平时成绩,必须在上面评分表中标出,并计算入总成绩。
目录课程设计评语 (2)目录 (3)1.课程论文题目 (4)2.程序设计思路 (4)3.功能模块图 (4)4.数据结构设计 (5)5.算法设计 .........................................................................................错误!未定义书签。
6.程序代码 .........................................................................................错误!未定义书签。
7.程序运行结果 ..................................................................................错误!未定义书签。
8.编程中遇到的困难及解决方法..........................................................错误!未定义书签。
9.总结心得及良好建议........................................................................错误!未定义书签。
10.致谢...............................................................................................错误!未定义书签。
1.课程论文题目物资管理系统2.程序设计思路(1)库存和领料信息以文本文件的方式存放在两个文件里,提供相应的输入输出操作。
(2)提供库存几种方式的查找。
(3)提供库存的建立、插入。
(4)能查找满足领货要求的信息,并修改库存、领货文本文件。
3.功能模块图4.数据结构设计(一)主函数一般是设计简洁,只提供输入,处理和输出部分的函数调用。
其中各功能模块用菜单方式选择。
其中流程图如图(1)图(1)菜单****/do{puts("\n\t\t*****************菜单********************\n\n");puts("\t\t\t2.信息查询");puts("\t\t\t3.信息插入");puts("\t\t\t4.领货");puts("\t\t\t5.信息打印");puts("\t\t\t6.退出");puts("\n\n\t\t***************************************\n");puts("\t\t****************************** 陈文\n");puts("\t\t********************************2013.01.05\n");printf("请选择[1-6]:[ ]\b\b");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; /***********信息查询模块***********/ case 3:insert();break; /***********信息添加模块***********/ case 4:lend();break; /***********物资领取模块***********/ case 5:print();break; /***********信息打印模块***********/ case 6:exit(0); /***********退出模块***********/}}main() /***********主函数***********/ {menu();}(二)各功能模块设计1.输入模块*********几种类型,名称等信息*********/***********信息输入模块***********/void enter(){int i,n;printf("\n产品种类数量(0-%d)?:",N-1);scanf("%d",&n);printf("\n请输入数据\n\n");{printf("输入第%d种产品数据:\n",i+1);input(i);}if(i!=0)save(n);printf_back();}2.searchmenu()*******查询模块*******/***********信息查询模块***********/void searchmenu(){int n,w2;do{puts("\n\t\t*****************查询********************\n\n");puts("\t\t\t1.按名称查询");puts("\t\t\t2.按日期查询");puts("\t\t\t3.按名称规格查询");puts("\t\t\t4.返回");puts("\n\n\t\t***************************************\n");printf("请选择[1-4]:[ ]\b\b");scanf("%d",&n);if(n<1||n>4){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(){searchmenu();}void search_by_name(){int j,n,m=0;char a[20];n=load();printf("\n请输入产品名称!\nname:");scanf("%s",a);for(j=0;j<n;j++)if(strcmp(a,pro[j].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=0;n=load();printf("\n输入你想查找的产品日期!\ndate:");scanf("%d.%d.%d",&s.year,&s.month,&s.day);for(j=0;j<n;j++)if((s.year==pro[j].in_date.year)&&(s.month==pro[j].in_date.month)&&(s.day==pro[j].in_date.day) ){m++;printf_data(j);}printf("\n找到当天的此产品%d!",m);getch();menu();}void search_by_nameandsize(){int j,n,m=0;char a[20],b[4];n=load();printf("\n输入你想找的产品名称!\n名称:");scanf("%s",a);printf("\n输入你想找的产品库存量!\n库存量:");scanf("%s",b);for(j=0;j<n;j++)if((strcmp(a,pro[j].p_name)==0)&&(strcmp(b,pro[j].size)==0)){m++;printf_data(j);}printf("找到%d种产品!",m);getch();menu();}3.新物资的录入在此函数上对新料进行了记录/***********信息添加模块***********/void insert(){int n,c;n=load();puts("\n输入一个数据:\n");do{input(n);printf_data(n);printf("\n\n是否确信?\n1).是\n2).取消并重试\n3).返回不保存[ ]\b\b");scanf("%d",&c);if(c==1){save(n+1);printf_back();}else if(c!=2)menu();}while(c==2);}4.领料模块*****查找对所领聊的信息,若满足领料要求,便登记一系列内容,并修改/***********物资领取模块***********/{char p_name[20];char size[4];struct date one_date;long int total;struct one_pro *next;}check;void lend(){int j,n;n=load();printf("\n请检查你想取的产品的信息!");printf("\n名称(1-20letter) 库存量(1-4letter) 日期amount\n");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;j<n;j++)if((strcmp(check.p_name,pro[j].p_name)==0)&&(strcmp(check.size,pro[j].size)==0)&&(check.one _date.year==pro[j].in_date.year)&&(check.one_date.month==pro[j].in_date.month)&&(check.one_ date.day==pro[j].in_date.day)&&(check.total<=pro[j].real_s)){pro[j].real_s-=check.total;printf_data(j);save(n);printf_back();}else printf("数据错误!");}5.打印领料单和物资库存清单/***********信息打印模块***********/void print(){int i,n;n=load();for(i=0;i<n;i++)printf_data(i);getch();}(三).采用文件来存储数据信息/***********公共函数*************/#include<stdio.h>void save(int n) /***********保存函数**************/{FILE*fp;int k;if((fp=fopen("pro.dat","wb"))==NULL){printf("\n无法打开文件!\n");}for(k=0;k<n;k++)if(pro[k].real_s!=0)if(fwrite(&pro[k],sizeof(struct product),1,fp)!=1)printf("文件书写错误!\n");fclose(fp);}int load() /************加载函数*************/{FILE*fp;int k;if((fp=fopen("pro.dat","rb"))==NULL){printf("\n无法打开文件!\n");return NULL;}for(k=0;!feof(fp);k++)fread(&pro[k],sizeof(struct product),1,fp);fclose(fp);return(k-1);}void input(int i) /************输入一种产品信息***********/ {printf("\n名称(1-20letter):");scanf("%s",&pro[i].p_name);printf("\n编号(1-7num):");scanf("%d",&pro[i].p_num);printf("\n库存量(1-4letter):");scanf("%s",&pro[i].size);printf("\n日期:");scanf("%d.%d.%d",&pro[i].in_date.year,&pro[i].in_date.month,&pro[i].in_date.day);printf("\namount[min-real-max]:");scanf("%d-%d-%d",&pro[i].min_s,&pro[i].real_s,&pro[i].max_s);}void printf_data(int i) /************输出信息函数***********/ {printf("\n名称\t\t编号\t规格\t日期\t\tmin-real-max\n");printf("%s\t%d\t%s\t%d.%d.%d\t%d-%d-%d",pro[i].p_name,pro[i].p_num,pro[i].size,pro[i].in_date .year,pro[i].in_date.month,pro[i].in_date.day,pro[i].min_s,pro[i].real_s,pro[i].max_s);}void printf_back(){printf("\n\n请按任意键回主菜单!\n");getch();menu();}5.算法设计6.程序代码#include<stdio.h>#include<string.h>#include<stdlib.h>#include<conio.h>#define N 100struct date{int year;int month;int day;};struct product{char p_name[20];long int p_num[7];char size[4];struct date in_date;long int max_s;long int min_s;long int real_s;struct product *next;}pro[N];void enter();void search();void searchmenu();void search_by_name();void search_by_date();void search_by_nameandsize();void insert();void lend();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("\n\t\t*****************菜单********************\n\n");puts("\t\t\t1.信息输入");puts("\t\t\t2.信息查询");puts("\t\t\t3.信息插入");puts("\t\t\t4.领货");puts("\t\t\t5.信息打印");puts("\t\t\t6.退出");puts("\n\n\t\t***************************************\n");puts("\t\t****************************** 陈文\n");puts("\t\t********************************2013.01.05\n");printf("请选择[1-6]:[ ]\b\b");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; /***********信息查询模块***********/ case 3:insert();break; /***********信息添加模块***********/ case 4:lend();break; /***********物资领取模块***********/ case 5:print();break; /***********信息打印模块***********/ case 6:exit(0); /***********退出模块***********/}}main() /***********主函数***********/ {menu();}/***********信息输入模块***********/void enter(){int i,n;printf("\n产品种类数量(0-%d)?:",N-1);scanf("%d",&n);printf("\n请输入数据\n\n");for(i=0;i<n;i++){printf("输入第%d种产品数据:\n",i+1);input(i);}if(i!=0)save(n);printf_back();}/***********信息查询模块***********/void searchmenu(){int n,w2;do{puts("\n\t\t*****************查询********************\n\n");puts("\t\t\t1.按名称查询");puts("\t\t\t2.按日期查询");puts("\t\t\t3.按名称规格查询");puts("\t\t\t4.返回");puts("\n\n\t\t***************************************\n");printf("请选择[1-4]:[ ]\b\b");scanf("%d",&n);if(n<1||n>4){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(){searchmenu();}/***********按名称查询***********/void search_by_name(){int j,n,m=0;char a[20];n=load();printf("\n请输入产品名称!\nname:");scanf("%s",a);for(j=0;j<n;j++)if(strcmp(a,pro[j].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=0;n=load();printf("\n输入你想查找的产品日期!\ndate:");scanf("%d.%d.%d",&s.year,&s.month,&s.day);for(j=0;j<n;j++)if((s.year==pro[j].in_date.year)&&(s.month==pro[j].in_date.month)&&(s.day==pro[j].in_date.day) ){m++;printf_data(j);}printf("\n找到当天的此产品%d!",m);getch();menu();}/*********按名称规格查询*********/void search_by_nameandsize(){int j,n,m=0;char a[20],b[4];n=load();printf("\n输入你想找的产品名称!\n名称:");scanf("%s",a);printf("\n输入你想找的产品库存量!\n库存量:");scanf("%s",b);for(j=0;j<n;j++)if((strcmp(a,pro[j].p_name)==0)&&(strcmp(b,pro[j].size)==0))m++;printf_data(j);}printf("找到%d种产品!",m);getch();menu();}/***********信息添加模块***********/void insert(){int n,c;n=load();puts("\n输入一个数据:\n");do{input(n);printf_data(n);printf("\n\n是否确信?\n1).是\n2).取消并重试\n3).返回不保存[ ]\b\b");scanf("%d",&c);if(c==1){save(n+1);printf_back();}else if(c!=2)menu();}while(c==2);}/***********物资领取模块***********/struct one_pro{char p_name[20];char size[4];struct date one_date;long int total;struct one_pro *next;}check;void lend(){int j,n;n=load();printf("\n请检查你想取的产品的信息!");printf("\n名称(1-20letter) 库存量(1-4letter) 日期amount\n");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;j<n;j++)if((strcmp(check.p_name,pro[j].p_name)==0)&&(strcmp(check.size,pro[j].size)==0)&&(check.one _date.year==pro[j].in_date.year)&&(check.one_date.month==pro[j].in_date.month)&&(check.one_ date.day==pro[j].in_date.day)&&(check.total<=pro[j].real_s)){pro[j].real_s-=check.total;printf_data(j);save(n);printf_back();}else printf("数据错误!");}/***********信息打印模块***********/void print(){int i,n;n=load();for(i=0;i<n;i++)printf_data(i);getch();menu();}/***********公共函数*************/#include<stdio.h>void save(int n) /***********保存函数**************/{FILE*fp;int k;if((fp=fopen("pro.dat","wb"))==NULL){printf("\n无法打开文件!\n");}for(k=0;k<n;k++)if(pro[k].real_s!=0)if(fwrite(&pro[k],sizeof(struct product),1,fp)!=1)printf("文件书写错误!\n");fclose(fp);}int load() /************加载函数*************/{FILE*fp;int k;if((fp=fopen("pro.dat","rb"))==NULL){printf("\n无法打开文件!\n");return NULL;}for(k=0;!feof(fp);k++)fread(&pro[k],sizeof(struct product),1,fp);fclose(fp);return(k-1);}void input(int i) /************输入一种产品信息***********/ {printf("\n名称(1-20letter):");scanf("%s",&pro[i].p_name);printf("\n编号(1-7num):");scanf("%d",&pro[i].p_num);printf("\n库存量(1-4letter):");scanf("%s",&pro[i].size);printf("\n日期:");scanf("%d.%d.%d",&pro[i].in_date.year,&pro[i].in_date.month,&pro[i].in_date.day);printf("\namount[min-real-max]:");scanf("%d-%d-%d",&pro[i].min_s,&pro[i].real_s,&pro[i].max_s);}void printf_data(int i) /************输出信息函数***********/ {printf("\n名称\t\t编号\t规格\t日期\t\tmin-real-max\n");printf("%s\t%d\t%s\t%d.%d.%d\t%d-%d-%d",pro[i].p_name,pro[i].p_num,pro[i].size,pro[i].in_date .year,pro[i].in_date.month,pro[i].in_date.day,pro[i].min_s,pro[i].real_s,pro[i].max_s);}void printf_back(){printf("\n\n请按任意键回主菜单!\n"); getch();menu();}7.程序运行结果8.困难,解决方法在学习C语言这门课时,由于是第一次接触计算机的课程,而且这门课本来就很抽象,因此,上课时就觉得听不懂.上程序设计课时也是一知半解,加上设计课的时间短,所以自己也没有什么进步。