1、设计题目:仓库物资管理系统班 级:网络0901班姓 名:水土第一学 号:20091221*完成日期:2010-9-9注意事项:免积分下载,还请亲们给个好评。思密达目 录1课程设计目的和要求21.1课程设计的目的:21.2课程设计的要求:22课程设计任务内容:23详细设计说明33.1功能模块图:33.2数据结构设计:43.3功能模块设计:54软件使用说明:65课程设计心得与体会:66参考文献:77附录:部分程序清单:71 课程设计目的和要求 1.1 课程设计的目的:通过一个学年的学习,对c程序设计这门课程之中所讲的知识有了一定的了解。但是作为一名合格的大学生,不仅要认真阅读课本知识,还要通过上机
2、实践来增强和巩固自己的知识。特别是作为工科类学生,更要注重实践这一环节。因为只有这样我们才能成为合格的计算机人材。1.2 课程设计的要求:在实践过程之中,重要的是独立思考,这样,不仅有利于提高自己对知识的理解,还更有助于提高自己的实践动手能力。与此同时,还应该注意主动与别人交流,这样便有利于就业之后与团队进行合作。2 课程设计任务内容:仓库管理系统是各个大型商店进行管理的重要组成部分,其内容较多,为了满足工作需求,要求设计的管理系统能够完成以下五种功能:1.创建库存记录文件。根据提示输入若干电器的“电器名称、品牌名称(或生产厂家)、型号、库存数量、价值”等信息,并将信息保存至一个文件中。2.物
3、资入库管理,创建一个入库记录文件,每次有物资入库,则按入库记录要求输入“电器名称、品牌名称、型号、入库数量、单价、入库时间(年.月.日)、送货人姓名”等信息,并将该次的入库信息添加到文件中,同时修改相应的库存记录文件。3.物资出库管理,创建一个出库记录文件,每次有物资出库,则按出库记录要求输入各项信息,并将该次的出库信息添加到文件中,同时修改相应的库存记录文件。在此过程之中,检查出库数量的合法性(即出库数量必须小于库存数量)。4. 按不同条件进行查询操作,输出满足条件的物资信息。(1) 输入电器名称,在库存记录文件中查找相应的物资信息并输出。(2) 输入品牌名称,在库存记录文件中查找该品牌的所
4、有电器信息并输出。(3) 输入一个日期(年.月.日),输出该天的入库记录和出库记录。(4) 输入电器名称和型号,输出该电器的所有入库记录和出库记录。5. 按不同条件对物资信息进行统计工作。(1) 输入电器名称,在库存记录文件中统计该电器的现有库存总量。(2) 输入电器名称,在入库记录文件中统计该电器的入库次数。(3) 输入一个日期(年.月),在出库记录文件中统计该月的出库记录次数。(4) 设置一个库存数量警戒值,输出库存数量小于该警戒值的所有库存电器的信息。3 详细设计说明3.1 功能模块图: 系统功能模块图3.2 数据结构设计:系统共定义了四个结构体类型,包括日期类型、库存类型、入库类型和出
5、库类型,其中在入库类型和出库类型中要使用日期类型,定义如下:struct goodschar name10; /电器名称char brand10; /电器品牌char style10; /电器型号int num; /库存数量float money; /价值stu_1SIZE; /库存结构struct date int year; /年份int month; /月份int day; /日期; /日期结构struct entrancechar name10; /电器名称char brand10; /电器品牌char style10; /电器型号int num; /入库数量float money;
6、/单价struct date time; /入库日期char stuf10; /送货人姓名stu_2SIZE; /入库结构struct exitchar name10; /电器名称char brand10; /电器品牌char style10; /电器型号int num; /出库数量struct date time; /出库日期char stuf10; /提货人姓名stu_3SIZE; /出库结构系统定义了宏变量,存放电器种类,具体定义如下:#define SIZE 103.3 功能模块设计:main函数的设计:由于第一次使用,在库存文件,入库文件和出库文件之中,没有任何信息,所以,要求我们先
7、输入应有的信息,才能进行查询和统计。用If语句和for循环结构进行提示输入相应的数字,然后利用switch语句选择定义的各种函数应该进行的操作,为用户提供服务。建立库存记录文件模块包括scan_1()与save_1()两个函数组成,该模块有main函数调用。Scan_1()函数用于输入各个库存信息,save_1()函数将库存信息保存成文件。建立入库记录文件模块包括scan_2(),save_2()与change_1(),save_1()四个函数组成,该模块有main函数调用。scan_2()函数用于输入入库信息,save_2()函数用于保存入库信息,change_1()用于更改库存信息,sav
8、e_1()函数将更改之后的库存信息保存成文件。建立出库记录文件模块包括scan_3(),save_3()与change_2(),save_1()四个函数组成,该模块有main函数调用。scan_3()函数用于输入出库信息,save_3()用于保存出库信息,change_2()函数用于更改库存信息,save_1()函数用于将更改之后的库存信息保存成文件。查询功能模块包find_1()函数,find_2(),函数find_3()与函数find_4()函数四个函数,该模块有main函数调用。其中find_1()函数包括open_1()函数,它将库存记录打开,然后,然后读出数据,经过判断输出信息,完成
9、4.1。find_2()函数包括open_1()函数,它将库存记录打开,然后,然后读出数据,经过判断输出信息,完成4.2。find_3()函数包括open_2(),open_3()函数,它们分别将入库记录和出库记录打开,然后,然后读出数据,使数据和输入的年月日比较,然后输出所要查询的信息,完成4.3。find_4()函数包括open_2(),open_3()函数,它们分别将入库记录和出库记录打开,然后,然后读出数据,使数据和输入的名称和型号比较,然后输出所要查询的信息,完成4.4统计功能模块包find_5()函数,find_6(),函数find_7()与函数find_8()函数四个函数,该模块
10、有main函数调用。其中find_5()函数包括open_1()函数,将库存记录打开,使数据与输入的名称比较,然后选择性相加,输出所统计的对象。find_6()函数包括open_2()函数,将入库记录打开,读出数据,与新输入的数据比较,然后进行选择性相加,输出数据。函数find_7()包括open_3()函数,打开出库记录,读出数据,查找在一定年月的出库记录,并将出库次数相加。find_8()函数包括open_1()函数,将库存记录打开,读出数据,使一定数据与设定的数量警戒值比较,将小于警戒值的电器的信息输出。4 软件使用说明:在软件使用之前,一定先输入库存记录(对应数字“1”),入库记录(对
11、应数字“2”)和出库记录(对应数字“3”),因为只有经过这三个步骤,才能进行查询和统计工作。以下为数字相对应的操作:1. 根据要求建立库存文件2. 根据要求建立入库文件3. 根据要求建立出库文件4. 输入电器名称,在库存记录文件中查找相应的物资信息并输出。5. 输入品牌名称,在库存记录文件中查找该品牌的所有电器信息并输出。6. 输入一个日期(年.月.日),输出该天的入库记录和出库记录。7. 输入电器名称和型号,输出该电器的所有入库记录和出库记录。8. 输入电器名称,在库存记录文件中统计该电器的现有库存总量。9. 输入电器名称,在入库记录文件中统计该电器的入库次数。10. 输入一个日期(年.月)
12、,在出库记录文件中统计该月的出库记录次数。11. 设置一个库存数量警戒值,输出库存数量小于该警戒值的所有库存电器的信息。5 课程设计心得与体会:经过一个星期的上机实践学习,使我对c语言有了更进一步的认识和了解,要想学好它要重在实践,要通过不断的上机操作才能更好地学习它,通过实践,我也发现我的好多不足之处,首先是自己在指法上还不行,经常按错字母,通过学习也有所改进;再有对c语言的一些标准库函数不太了解,还有对函数调用的正确使用不够熟悉,还有对c语言中经常出现的错误也不了解,通过实践,使我在这几个方面的认识有所提高。通过实践的学习,我认到学好计算机要重视实践操作,不仅仅是学习c语言,还是其它的语言
13、,以及其它的计算机方面的知识都要重在实践,所以后在学习过程中,我会更加注视实践操作,使自己便好地学好计算机。6 参考文献:C程序设计7 附录:部分程序清单:#includestdafx.h#includestdio.h#includestring.h#define SIZE 2/SIZE为仓库电器种类struct goods/库存结构char name10;/电器名称char brand10;/电器品牌char style10;/电器型号int num; /库存数量float money; /价值stu_1SIZE;struct date/日期结构 int year;/年份int month;
14、/月份int day;/日期;struct entrance /入库结构char name10; /电器名称char brand10; /电器品牌char style10; /电器型号int num; /入库数量float money; /单价struct date time; /入库日期char stuf10; /送货人姓名stu_2SIZE; struct exit /出库结构char name10; /电器名称char brand10; /电器品牌char style10; /电器型号int num; /出库数量struct date time; /出库日期char stuf10; /提
15、货人姓名stu_3SIZE; void save_1();/将库存信息保存成文件void save_2();/将入库信息保存成文件void save_3();/将出库信息保存成文件void change_1();/入库时电器数量增加,并将信息加入库存文件void change_2();/出库时电器数量减少,并将信息加入库存文件void scan_1();/输入库存信息void scan_2();/输入入库信息void scan_3();/输入出库信息,判断电器出库数量与现有库存的大小关系FILE* open_1();/打开库存文件FILE* open_2();/打开入库文件FILE* open
16、_3();/打开出库文件void find_1();/4.1void find_2();/4.2void find_3();/4.3void find_4();/4.4void find_5();/5.1void find_6();/5.2void find_7();/5.3void find_8();/5.4void load_1();/读stu_list_1中的数据void main()int i,j;printf(what do you want to do?nplease input the number according to the explaination.n);for(i=1
17、;i12;i+)printf(if you input %d;then it will work out the %d.n,i,i);printf(If you are first use it,please input 1,2 or 3.nNow please input the number:n);scanf(%d,&j);switch(j)case 1:scan_1();save_1();break; /1case 2:scan_2();save_2();change_1();break; /2case 3:scan_3();save_3();change_2();break; /3ca
18、se 4:find_1();break;/4.1case 5:find_2();break;/4.2case 6:find_3();break;/4.3case 7:find_4();break;/4.4case 8:find_5();break;/5.1case 9:find_6();break;/5.2case 10:find_7();break;/5.3case 11:find_8();break;/5.4default:printf(errorn);void scan_1()/输入库存int i;printf(please input the information:n);for(i=
19、0;iSIZE;i+)scanf(%s%s%s%d%f,stu_1i.name,stu_1i.brand,stu_1i.style,&stu_1i.num,&stu_1i.money); void scan_2()/输入入库信息int i;printf(请输入物资入库信息:n);for(i=0;iSIZE;i+)scanf(%s%s%s%d%f%d%d%d%s,stu_2i.name,stu_2i.brand,stu_2i.style,&stu_2i.num,&stu_2i.money,&stu_2i.time.year,&stu_2i.time.month,&stu_2i.time.day,
20、stu_2i.stuf);void scan_3()/输入出库信息int i;printf(请输入出库信息:n);for(i=0;iSIZE;i+)scanf(%s%s%s%d%d%d%d%s,stu_3i.name,stu_3i.brand,stu_3i.style,&stu_3i.num,&stu_3i.time.year,&stu_3i.time.month,&stu_3i.time.day,stu_3i.stuf);for(i=0;istu_1i.num)printf(the error number.please input againn);scanf(%s%s%s%d%d%d%d%
21、s,stu_3i.name,stu_3i.brand,stu_3i.style,&stu_3i.num,&stu_3i.time.year,&stu_3i.time.month,&stu_3i.time.day,stu_3i.stuf);void save_1()/将库存信息保存成文件FILE *fp;int i;if(fp=fopen(stu_list_1.txt,wb)=NULL)printf(connot open the filen);return;for(i=0;iSIZE;i+)if(fwrite(&stu_1i,sizeof(struct goods),1,fp)!=1)prin
22、tf(file write errorn);fclose(fp);void save_2()/将入库信息保存成文件FILE *fp;int i;if(fp=fopen(stu_list_2.txt,wb)=NULL)printf(connot open the filen);return;for(i=0;iSIZE;i+)if(fwrite(&stu_2i,sizeof(struct entrance),1,fp)!=1)printf(file write errorn);fclose(fp);void change_1()/入库时电器数量增加,并将信息加入库存文件int i;load_1()
23、;for(i=0;iSIZE;i+)if(strcmp(stu_1i.name,stu_2i.name)=0&strcmp(stu_1i.brand,stu_2i.brand)=0&strcmp(stu_1i.style,stu_2i.style)=0)stu_1i.num=stu_1i.num+stu_2i.num;save_1();void save_3()/将出库信息保存成文件FILE *fp;int i;if(fp=fopen(stu_list_3.txt,wb)=NULL)printf(connot open the filen);return;for(i=0;iSIZE;i+)if
24、(fwrite(&stu_3i,sizeof(struct exit),1,fp)!=1)printf(file write errorn);fclose(fp);void change_2()/出库时电器数量减少,并将信息加入库存文件int i;load_1();for(i=0;iSIZE;i+)if(strcmp(stu_1i.name,stu_3i.name)=0&strcmp(stu_1i.brand,stu_3i.brand)=0&strcmp(stu_1i.style,stu_3i.style)=0)stu_1i.num=stu_1i.num-stu_3i.num;save_1()
25、;FILE* open_1()/打开库存记录FILE *fp;if(fp=fopen(stu_list_1.txt,rb)=NULL) printf(connot open the file!n);return NULL;return fp;FILE* open_2()/打开入库记录FILE *fp;if(fp=fopen(stu_list_2.txt,rb)=NULL) printf(connot open the file!n);return NULL;return fp;FILE* open_3()/打开出库记录FILE *fp;if(fp=fopen(stu_list_3.txt,rb
26、)=NULL) printf(connot open the file!n);return NULL;return fp;void find_1()/完成4.1FILE *fp=NULL;int i;char name10;fp=open_1();printf(please input the name:n);/4.1 scanf(%s,name);printf(the information of the good:n);for(i=0;iSIZE;i+)if(fread(&stu_1i,sizeof(struct goods),1,fp)=1)/4.1 在库存记录之中查找if(strcmp
27、(name,stu_1i.name)=0)printf(%s %s %s %d %.2fn,stu_1i.name,stu_1i.brand,stu_1i.style,stu_1i.num,stu_1i.money);fclose(fp);void find_5()/完成5.1FILE *fp=NULL;int i;int sum=0;char name10;fp=open_1();printf(please input the name:n);/5.1scanf(%s,name);printf(the information of the good:n);for(i=0;iSIZE;i+)i
28、f(fread(&stu_1i,sizeof(struct goods),1,fp)=1)/5.1 在库存记录之中查找if(strcmp(name,stu_1i.name)=0)sum=sum+stu_1i.num;printf(the number of this %s is %d.n,name10,sum);fclose(fp);void find_2()/完成4.2FILE *fp=NULL;int i;char brand10;printf(please input the brand:n);/4.2scanf(%s,brand);fp=open_1();for(i=0;iSIZE;i
29、+) if(fread(&stu_1i,sizeof(struct goods),1,fp)=1) /4.2if(strcmp(brand,stu_1i.brand)=0)printf(the information of the good:n);printf(%s %s %s %d %.2fn,stu_1i.name,stu_1i.brand,stu_1i.style,stu_1i.num,stu_1i.money);fclose(fp);void find_3()/完成4.3int i;FILE *fp2=NULL, *fp3=NULL;int year,month,day;printf(
30、please input year,month,day,then find the exit and entrance:n);/4.3scanf(%d%d%d,&year,&month,&day);fp2=open_2();fp3=open_3();printf(the information of entrance is:n);for(i=0;iSIZE;i+)if(fread(&stu_2i,sizeof(struct entrance),1,fp2)=1)/读出入库信息if(stu_2i.time.year=year)&(stu_2i.time.month=month)&(stu_2i.
31、time.day=day)/入库信息4.3printf(%s %s %s %d %.2f %d %d %d %sn,stu_2i.name,stu_2i.brand,stu_2i.style,stu_2i.num,stu_2i.money,stu_2i.time.year,stu_2i.time.month,stu_2i.time.day,stu_2i.stuf);printf(the information of exit is:n);for(i=0;iSIZE;i+)if(fread(&stu_3i,sizeof(struct exit),1,fp3)=1)/读出出库信息if(stu_3i
32、.time.year=year)&(stu_3i.time.month=month)&(stu_3i.time.day=day)/出库信息4.3printf(%s %s %s %d %d %d %d %sn,stu_3i.name,stu_3i.brand,stu_3i.style,stu_3i.num,stu_3i.time.year,stu_3i.time.month,stu_3i.time.day,stu_3i.stuf);fclose(fp2);fclose(fp3);void find_4()/完成4.4int i;FILE *fp2=NULL,*fp3=NULL;char name
33、10,style10;printf(please input the name and style of the goods,then find the entrance and exit:n);/4.3scanf(%s%s,name,style);fp2=open_2();fp3=open_3();printf(the entrance information of the good is:n);for(i=0;iSIZE;i+)/4.4if(fread(&stu_2i,sizeof(struct entrance),1,fp2)=1)/读出入库信息if(strcmp(stu_2i.name
34、,name)=0&(strcmp(stu_2i.style,style)=0)/入库信息4.4printf(%s %s %s %d %f %d %d %d %sn,stu_2i.name,stu_2i.brand,stu_2i.style,stu_2i.num,stu_2i.money,stu_2i.time.year,stu_2i.time.month,stu_2i.time.day,stu_2i.stuf);printf(the exit information of the good is:n);for(i=0;iSIZE;i+)/4.4if(fread(&stu_3i,sizeof(s
35、truct exit),1,fp3)=1)/读出出库信息if(strcmp(stu_3i.name,name)=0&(strcmp(stu_3i.style,style)=0)/出库信息4.4printf(%s %s %s %d %d %d %d %sn,stu_3i.name,stu_3i.brand,stu_3i.style,stu_3i.num,stu_3i.time.year,stu_3i.time.month,stu_3i.time.day,stu_3i.stuf);fclose(fp2);fclose(fp3);void find_6()/完成5.2int i;int sum=0;
36、FILE *fp=NULL;char name10;printf(please input the name of the good,then output the number of its entrance:n);/5.2scanf(%s,name);fp=open_2();for(i=0;iSIZE;i+)if(fread(&stu_2i,sizeof(struct entrance),1,fp)=1)/读出入库信息if(strcmp(stu_2i.name,name)=0)/入库信息4.4sum=sum+stu_2i.num;printf(the number of the goods
37、 entrance is %d.n,sum);fclose(fp);void find_7()/完成5.3int i;int sum=0;int year,month;FILE *fp=NULL;printf(please input year and month,then output the number of exit in this month:n);/5.3scanf(%d%d,&year,&month);fp=open_3();printf(the number of exit good in this month is:);for(i=0;iSIZE;i+)/5.3在出库记录文件
38、中统计该月的出库记录次数。if(fread(&stu_3i,sizeof(struct exit),1,fp)=1)if(stu_3i.time.year=year&stu_3i.time.month=month)sum=sum+1;printf(%dn,sum);fclose(fp);void find_8()/完成5.4int i,j;FILE *fp=NULL;printf(please input the red number,then output all the informations of the goods:n);getchar();scanf(%d,&j);fp=open_
39、1();for(i=0;iSIZE;i+)/5.4输出库存数量小于该警戒值的所有库存电器的信息if(fread(&stu_1i,sizeof(struct goods),1,fp)=1)if(stu_1i.numj)printf(the information of the good are:n);printf(%s %s %s %d %.2fn,stu_1i.name,stu_1i.brand,stu_1i.style,stu_1i.num,stu_1i.money);fclose(fp);void load_1()/读stu_list_1中的数据FILE *fp=NULL;fp = open_1();fread(stu