程序设计实验报告
- 格式:doc
- 大小:326.50 KB
- 文档页数:15
综合性程序设计报告设计题目: 粮油公司进销存管理系统指导教师:班级: 61231学号: 6123108设计者:成绩:_______________设计时间: 2013年6月22日一、设计说明简介:1、该系统用于处理某粮油公司的物资买入,卖出,仓储等`设备账目。
在买入物资时,记录物资的数量名称(如小麦,玉米,大豆等)和价钱,并在库房纪录中添加设备,在卖出物资时从库房中减掉该设备,并根据卖出的数量型号和价钱得出每一笔买出的利润。
每隔一段时间盘点库房和账目计算出利润等数据。
2、基本要求:有货物管理(物资的添加,删除,修改)有账目管理可以查询账目清单可以计算年度或月份或季度利润二、有关变量、结构体的说明:#include <...> 是用于包含C++标准头文件Int 输入整型变量#define 宏定义命令Char 字符数据类型Float 输入浮点型数据While 选择性语句Switch 多分支选择判断Break 跳出循环Case 选择语句Default 默认处理Printf 输出语句Return 跳回语句typedef struct 声明struct类型For 判断语句If else 选择判断语句Modify() 修改函数fclose(fp) 关闭文件相当于保存文件Fopen 打开文件Scanf 格式输入函数三、树形结构模块图:四、操作说明(一)主页面功能如下图:(二)主要功能介绍1、进货操做操作顺序为:确认进货---物资编号---物资名称---物资进价---进货年月----保存。
见下图:2、售货操作操作顺序为:输入编号---确认售出---输入售价---售出年月---收获成功。
见下图:3、修改信息操作顺序为:物资编号---物资名称---物资进价---进货年份---保存。
见下图:4、账目清单可查询账目,见下图:5、月利润查询可查询月利润,见下图:五、程序代码#include <stdio.h>#include <stdlib.h>#include <conio.h>#include <dos.h>#include <string.h>#define LEN sizeof(struct object)#define FORMAT1 "\t%-8d%-11s%-9.2f%-6d%-4d\n"#define DATA1 (p1+i)->num,(p1+i)->name,(p1+i)->inprice,(p1+i)->inyear,(p1+i)->inmonth #define FORMAT2 "\t%-8d%-11s%-9.2f%-9.2f%-7.2f%-6d%-4d%-6d%-4d\n"#define DATA2 (p1+i)->num,(p1+i)->name,(p1+i)->inprice,(p1+i)->outprice,(p1+i)->profit ,(p1+i)->inyear,(p1+i)->inmonth,(p1+i)->outyear,(p1+i)->outmonthvoid in();void show();void modify();void sell();void menu();void monthearn();struct object{int num,inyear,inmonth,outyear,outmonth;char name[10];float inprice,outprice,profit;}obj[100];struct object*p1=obj;main(){int n;menu();while(n){switch(n){case 1: in();break;case 2:sell();break;case 3:modify();break;case 4:show();break;case 5:monthearn();break;default:break;}getch();menu();scanf("%d",&n);}}void menu()//菜单{system("cls");printf("\n\n\n\n\n\n");printf("\t\t**************菜单**************\n"); printf("\t\t 0.退出\n");printf("\t\t 1.进货操作\n");printf("\t\t 2.售货操作\n");printf("\t\t 3.修改信息\n");printf("\t\t 4.账目清单\n");printf("\t\t 5.月利润查询\n");printf("\t\t********************************\n");}void in()//进货操作{int i,m=0;char ch[2];FILE *p;if( (p=fopen("data","a+"))==NULL){printf("打不开文件!\n"); //打开文件return;}while(!feof(p)){if(fread(&obj[m],LEN,1,p)==1)m++;//将数据写入内存 }fclose(p);if(m==0)printf("无记录!\n");printf("请确认是否进货?(y/n)");scanf("%s",ch);while(strcmp(ch,"y")==0||strcmp(ch,"y")==0){printf("请输入物资编号");scanf("%d",&obj[m].num);for(i=0;i<m;i++)if((p1+i)->num==obj[m].num){printf("此号已存在,按任意键继续!");getch();fclose(p);return;}printf("物资名称:");scanf("%s",obj[m].name);printf("进价:");scanf("%f",&obj[m].inprice);printf("进货年、月:");scanf("%d%d",&obj[m].inyear,&obj[m].inmonth);obj[m].outprice=0;obj[m].outyear=0;(p1+m)->outmonth=0;fopen("data","w"); //打开文件用以磁盘导入数据for(i=0;i<=m;i++)fwrite(&obj[i],LEN,1,p);if(fwrite(&obj[m],LEN,1,p)!=1){printf("无法保存!");getch();}else{printf("%s 保存成功!\n",obj[m].name);m++;}printf("继续?(y/n)");scanf("%s",ch);}fclose(p);printf("保存完毕!\n");}void sell()//售货操作{FILE *p;int snum,i,j,m=0;char ch[2];if((p=fopen("data","rb"))==NULL){printf("无法打开文件呢!\n");return;} //打开文件while(!feof(p))if(fread(&obj[m],LEN,1,p)==1)m++; //读入fclose(p);if(m==0){printf("无记录!\n");return;}printf("请输入编号:");scanf("%d",&snum);for(i=0;i<m;i++)if(snum==(p1+i)->num)break;if(i<m) //判断{printf("查得此物品,确认出售?(y/n)");scanf("%s",ch);if(strcmp(ch,"y")==0||strcmp(ch,"Y")==0) //判断{printf("请输入售价:");scanf("%f",&(p1+i)->outprice);(p1+i)->profit=((p1+i)->outprice-(p1+i)->inprice);printf("\n请输入售出年、月:");scanf("%d%d",&(p1+i)->outyear,&(p1+i)->outmonth);if((p=fopen("data","wb+"))==NULL){printf("打不开文件!\n");return;}for(j=0;j<m;j++){if(fwrite(&obj[j],LEN,1,p)!=1)printf("无法保存!\n");getch();}printf("售货成功!");fclose(p);return;}elsereturn;}elseprintf("无此物品!");return;}void modify()//修改信息{FILE *p;int i,j,m=0,snum;if((p=fopen("data","rb"))==NULL){printf("打不开文件!\n");return;}while(!feof(p))if(fread(&obj[m],LEN,1,p)==1)m++;if(m==0){printf("无记录!\n");fclose(p);return;}printf("请输入欲修改信息的物资编号:");scanf("%d",&snum);for(i=0;i<m;i++)if(snum==(p1+i)->num)break;if(i<m){printf("找到此货物!\n");printf("\n名称:");scanf("%s",(p1+i)->name);printf("\n进价:");scanf("%f",&(p1+i)->inprice);printf("\n进货年、月:");scanf("%d%d",&(p1+i)->inyear,&(p1+i)->inmonth);if((p=fopen("data","wb+"))==NULL){printf("打不开文件!\n");return;}for(j=0;j<m;j++)if(fwrite(&obj[j],LEN,1,p)!=1){printf("无法保存!");getch();}fclose(p);}elseprintf("无此货物!");return;}void show()//账目清单{FILE *p;int i,m=0;if((p=fopen("data","rb"))==NULL)printf("打不开!");while(!feof(p))if(fread(&obj[m],LEN,1,p)==1)m++;fclose(p);printf("已售\n\t编号名称进价售价利润进货时间出货时间\t\n");for(i=0;i<m;i++){if((p1+i)->profit!=0)printf(FORMAT2,DATA2);}printf("仓储\n");printf("\t编号名称进价进货时间\t\n");for(i=0;i<m;i++){if((p1+i)->profit==0)printf(FORMAT1,DATA1);}}void monthearn()//月利润{FILE *p;int m=0,s=0,a=0,b=0,c=0,d=0,y,z;float sum1=0,sum2=0,sum3=0,sum4=0;if((p=fopen("data","rb"))==NULL){printf("打不开文件!\n");return;}while(!feof(p))if(fread(&obj[m],LEN,1,p)==1)m++;fclose(p); //将数据读入内存printf("请输入欲查询的年份、月份:");scanf("%d%d",&y,&z);for(s=0;s<m;s++){if((strcmp(obj[s].name,"zhuji")==0)&&(y==obj[s].outyear)&&(z==obj[s].out month)){a++;sum1+=obj[s].profit;}if((strcmp(obj[s].name,"xianshiqi")==0)&&(y==obj[s].outyear)&&(z==obj[s] .outmonth)){b++;sum2+=obj[s].profit;}if((strcmp(obj[s].name,"jianpan")==0)&&(y==obj[s].outyear)&&(z==obj[s].o utmonth)){c++;sum3+=obj[s].profit;}if((strcmp(obj[s].name,"shubiao")==0)&&(y==obj[s].outyear)&&(z==obj[s].o utmonth)){d++;sum4+=obj[s].profit;}}printf("本月共售出\n");printf("\t小麦 %d吨,总利润%7.2f 元\n",a,sum1);printf("\t大豆 %d吨,总利润%7.2f 元\n",b,sum2);printf("\t玉米 %d吨,总利润%7.2f 元\n",c,sum3);printf("\t水稻 %d吨,总利润%7.2f 元\n",d,sum4);}六、设计体会:经过前前后后十天左右的苦熬,终于把程序设计《粮油公司进销存管理系统》做完了,虽然对着电脑做程序,有点累有点热,但是当我看着零错误,零警告的字样,别提心里多高兴了!谈到课程设计的艰辛,或许只有经历过的人才会理解了!在设计的过程中可以说是步履维艰,这毕竟第一次做的,难免会遇到过各种各样的问题,但是它更让我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从实践中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。