源码在后面!一、需求分析本程序为饮料自动售货机的程序,能实现饮料的自动销售,并采用文件的形式记录购买数据,能起到节约人力、减少成本的目的。二、总体设计本设计主要分为两大系统(顾客购买以及管理员管理系统)以及放于d盘中“饮料.txt”的文件系统,每个系统分别执行一些特定的功能。如下图所示:图一总体设计概念图三、详细设计3.1管理员模块管理员是自动售货机系统中权限最高的用户。在管理员工作模式下,管理员可以进行货物进行补充操作、商品库存信息查询、销售额信息查询、切换到销售界面几大操作。管理员模块的功能结构图,如下:自动饮料售货机顾客购买系统管理员管理系统选择饮料投币找币记录数据登录界面查询销售额查询剩余数量补货图3.1管理员操作流程图3.2顾客购买模块用户模块主要是销售商品的界面。销售商品的整个过程是,用户投入货币,然后输入商品代号,然后进行找零等操作,最后放出商品,完成交易。下面来看一下用户模块的流程。管理员输入密码选择商品库存信息查询销售额信息查询货物补充操作结束用户选择投币饮料d饮料a......饮料d饮料和零钱图3.2顾客购买饮料流程图四、系统调试分析它的的任务是尽可能彻底地检查出程序中的错误,提高软件系统的可靠性,其目的是检验系统”做得怎样?”。这阶段又可分为三个步骤:模块测试,测试每个模块的程序是否有错误;组装测试,测试模块之间的接口是否正确:确认测试,测试整个软件系统是否满足用户功能和性能的要求。该阶段结束应交付测试报告,说明测试数据的选择,测试用例以及测试结果是否符合预期结果。测试发现问题之后要经过调试找出错误原因和位置,然后进行改正。是基于系统整体需求说明书的黑盒类测试,应覆盖系统所有联合的部件。系统测试是针对整个产品系统进行的测试,目的是验证系统是否满足了需求规格的定义,找出与需求规格不相符合或与之矛盾的地方。4.1系统启动主界面如图,由用户选择执行某一个操作。图4.1系统启动主界面图4.2顾客购买饮料操作测试在主界面下,输入口令“1”,进入购买饮料模块。图4.2.1购买操作菜单图此后,由顾客投币、选择、退出找币等完成购买指定饮料的操作。图4.2.2购买操作完成图4.3管理员登录界面在主界面下,输入口令“1”,进入管理员登录界面,正确输入密码后进入管理员操作系统。图4.3管理员登录界面图4.4销售量查询功能测试在管理员界面下,输入口令“1”,进入销售量查询功能,管理员可看到各种饮料的剩余量及销售量。图4.4销售量查询示例图4.5销售额查询功能测试在管理员界面下,输入口令“2”,进入总销售额查询功能,管理员可了解此台机器近期的总销售额。图4.5销售额查询示例图4.6补货功能测试在管理员界面下,输入口令“2”,进入补货功能操作,管理员可根据需求进行补充机器内饮料数量操作。图4.6补货操作示例图4.7结束程序测试在主界面下,输入口令“3”,结束整个程序。五、总结5.1研究过程接到研究型学习任务后,我们四个同学组成了小组进行探究。首先我们先详细分析讨论了整个系统需要完成的功能细节,并考虑了实现的方法。一开始我们的方法不够优化,我们通过查阅一些资料,得到了新的方法,拓宽了思路,并且再次进行了讨论。讨论完毕后进行了组员的分工,大家在一周内进行了代码的编写和模块化调试,最后所有模块合在一起进行了总的调试。调试过程中又发现了不少问题,我们又一一加以修改,最后形成了现在这个较为完善的程序。5.2感悟经过本次研究型学习任务,我们小组深刻意识到了分工合作的重要性。大家在探究过程中各司其职,相互帮助。除此以外,我们也加深了对课上所学知识的理解,比如字符串、数组与指针、结构体使用等。我们意识到实践是提高知识水平和专业技能的重要途径。源代码:#includestdio.h#includestring.h#includestdlib.h#defineN6voidmenu()//主界面{printf(\n\t*************************************);printf(\n\t**饮料自动售货机**);printf(\n\t*************************************);printf(\n\t*************************************);printf(\n\t**操作1:购买饮料**);printf(\n\t**操作2:管理员操作系统**);printf(\n\t**操作3:退出主界面**);printf(\n\t*************************************);printf(\n\t请选择您要进行的操作:);}structdrink//定义结构体{charname[10];//饮料名数组intnumber;//饮料库存量intcount;//饮料销售量floatprice;//饮料价格}dr[N];voidReaddr()//读入文件,赋值结构体变量数据{inti;FILE*fp;fp=fopen(d:\\饮料.txt,r);//打开文件if(fp==NULL){printf(文件读取失败\n);exit(0);}for(i=0;iN;i++)fscanf(fp,%s%d%d%f,&dr[i].name,&dr[i].number,&dr[i].count,&dr[i].price);fclose(fp);//关闭文件}voidSavedr()//程序结束时写入文件{inti;FILE*fp;fp=fopen(d:\\饮料.txt,w);//打开文件if(fp==NULL){printf(文件读取失败\n);exit(0);}for(i=0;iN;i++)fprintf(fp,%s\t%d\t%d\t%.2f\n,dr[i].name,dr[i].number,dr[i].count,dr[i].price);fclose(fp);//关闭文件}floatbuy()//顾客购买系统{floatmoney;intn,op;inti,j;printf(\n\t*************************************);printf(\n\t**顾客,您好!**);printf(\n\t*************************************);printf(\n\t1.矿泉水(2元)\t2.冰红茶(3.5元)\t3.脉动(4元));printf(\n\t4.可乐(3元)\t5.雪碧(3元)\t6.橙汁(3.5元));printf(\n\t*************************************);while(1){printf(\n请投币:(只接受硬币和5元、10元纸币));scanf(%f,&money);if(money=10&&money0){do{printf(\n请选择您需要购买的饮料编号:);scanf(%d,&n);switch(n){case1:if(dr[0].number1||money2.0){printf(\n库存或者投币不足,购买失败!);break;}printf(\n购买成功!请取出您的饮料!);money-=dr[0].price;dr[0].number--;dr[0].count++;printf(剩余金额:%.2f元,money);break;case2:if(dr[1].number1||money3.5){printf(\n库存或者投币不足,购买失败!);break;}printf(\n购买成功!请取出您的饮料!);money-=dr[1].price;dr[1].number--;dr[1].count++;printf(剩余金额:%.2f元,money);break;case3:if(dr[2].number1||money4.0){printf(\n库存或者投币不足,购买失败!);break;}printf(\n购买成功!请取出您的饮料!);money-=dr[2].price;dr[2].number--;dr[2].count++;printf(剩余金额:%.2f元,money);break;case4:if(dr[3].number1||money3.0){printf(\n库存或者投币不足,购买失败!);break;}printf(\n购买成功!请取出您的饮料!);money-=dr[3].price;dr[3].number--;dr[3].count++;printf(剩余金额:%.2f元,money);break;case5:if(dr[4].number1||money3.0){printf(\n库存或者投币不足,购买失败!);break;}printf(\n购买成功!请取出您的饮料!);money-=dr[4].price;dr[4].number--;dr[4].count++;printf(剩余金额:%.2f元,money);break;case6:if(dr[5].number1||money3.5){printf(\n库存或者投币不足,购买失败!);break;}printf(\n购买成功!请取出您的饮料!);money-=dr[5].price;dr[5].number--;dr[5].count++;printf(剩余金额:%.2f元,money);break;default:printf(\n您输入的编号错误!);}printf(\n是否继续购买:1.继续购买2.退出\n);scanf(%d,&op);}while(op!=2);break;}elseprintf(\n投币发生错误,请重新投币!);}if(op==2){i=money;j=(money-i)/0.5;printf(\n找您%d枚1元硬币,%d枚5角硬币。,i,j);printf(\n\n\t*************************************);printf(\n\t**欢迎再次光临!**);printf(\n\t*************************************\n);system(pause);system(cls);//清屏}returnmoney;}intenter()//管理员登录系统{intcount=3,lock=0;chara[8],b[]={aaa123};printf(\n\t*************************************);printf(\n\t**管理员登录页**);printf(\n\t*************************************);while(count--){printf(\n请输入密码:\n);gets(a);if(strcmp(a,b)==0)//判断密码是否正确{lock=1;//正确,lock等于1break;}else{printf(密码错误,请重新输入!);continue;}}if(lock==0)printf(您已输错三次,将返回主界面!);returnlock;}voidadd()//补货系统{inti,addition;printf(\n请根据饮料标号输入每种增添的数量:\n);for(i=0;iN;i++){printf(%s:,dr[i].name);scanf(%d,&addition);dr[i].number+=addition;}printf(\n现在设备内饮料数分别为:);for(i=0;iN;i++)printf(%s:%d瓶,dr[i].name,dr[i].number);}voidwork()//管理员操作系统{intop,i,n;floattotal=0,all_total=0;system(cls);//清屏printf(\n您好,管理员!);printf(\n\t************