自动售货机程序_第1页
自动售货机程序_第2页
自动售货机程序_第3页
自动售货机程序_第4页
自动售货机程序_第5页
已阅读5页,还剩24页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、重庆科技学院C语言程序设计课程设计报告 学 院:_电气与信息工程学院_ 专业班级: 测控1302 学生姓名: 张宇 学 号: 2013441294 设计地点(单位)_重庆科技学院_ _ _设计题目:_ 自动售货机系统_ 完成日期: 2014 年 07月 04 日 指导教师评语: _ _成绩(五级记分制):_ _ 指导教师(签字):_ _ 重庆科技学院C语言程序设计课程设计报告重庆科技学院课程设计任务书设计题目:自动售货机系统学生姓名xxxxx课程名称程序设计基础课程设计专业班级xxxx地 点起止时间设计内容及要求某公司请你为其生产的自动售货机编写软件。这种无人值守自动售货机贩卖价值为A、B、C

2、的三种商品,价格分别为2元,3元和6元。顾客投入10元的纸币,然后选择购买3种商品之一,自动售货机吐出商品,并且找给用户零钱。如果商品已经卖完,或者无法找零,则给出用户一个提示,商品已售完,并且退还纸币。 自然,你的售货机用户希望尽可能地给用户找零,以免流失顾客。为了调查用户的喜好,希望得到三种商品的每日消费数据,由此来调整货柜中三种货物的存贮量。你的程序将实现以下功能: 库存查询:检索当前三种商品的储存量 商品上架:为三种商品增加或者减少储量 销售查询:分别统计今天每种商品的销售量和销售额 会计查询:打印当天的往来帐目以及剩余零钞数目 结算功能:取出今天所有的10元纸币,并且分别设置零钞的数

3、目 销售界面:顾客投入纸币,选择商品,获得商品和零钱;或者直接显示错误并退还纸币 【题目要求】 (1)为各项操作功能设计一个菜单。应用程序运行后,先显示这个菜单,然后操作员通过菜单项选择希望进行的操作项目; (2)你的售货机用户不希望每一位顾客都有权限执行以上功能,因此一旦进入销售界面,就不应当退回到系统界面,但是应允许顾客反复购买,前一个顾客购买完毕后应停留在销售界面里允许下一个顾客操作。直到某位特殊的顾客(超级顾客)输入特殊的商品代号(密码)方可回到主控界面。 (3)计算机安排的找零算法应该合理,不要出现某一种零钱找光的情况。同时顾客也不喜欢明明有5元零钞,却被找给5个一元的零钞。尽量满足

4、这两个要求。 (3)、要求以上功能分别用函数实现。并要求用C语言的文件操作语句将以上所有结果保存在文件XX.out。 【输入/输出要求】 (1)应用程序运行后,先显示一个菜单,然后用户根据需要选择相应的操作项目。进入每个操作后,根据程序的提示输入相应的信息; (2)要求用户输入数据时,要给出清晰、明确的提示信息,包括输入的数据内容、格式及结束方式等。根据题目要求,运用所学知识,完成设计和实现工作,并按照书写规范,撰写课程设计报告。(1)系统分析、设计正确。(2)结果以图表方式显示。(3)界面简洁、美观。(4)报告格式规范。进度要求6月23日9:0012:00讲解课程设计任务,14:0017:0

5、0学生选题并开始设计6月24日9:0012:00学生编写程序,14:0017:00讲解结构体相关知识6月25日9:0012:00讲解文件读写相关知识,14:0017:00学生练习文件的读写6月26日9:0012:00讲解菜单和格式输出相关知识,14:0017:00 学生编写程序6月27日9:0012:00讲解程序调试的相关知识,14:0017:00 学生编写程序6月30日9:0012:00指导学生编程,14:0017:00学生编写程序7月1日9:0012:00指导学生编程,14:0017:00学生编写程序7月2日9:0012:00学生撰写课程设计报告,14:0017:00学生编写程序7月3日9

6、:0012:00学生课程设计答辩,14:0017:00 学生修改课程设计报告7月4日9:0012:00学生课程设计答辩,14:0017:00学生提交课程设计报告考参考资料1何钦铭 颜晖.语言程序设计.高等教育出版社.2008年2谭浩强 张基温.语言程序设计教程.高等教育出版社.2006年其他难点提示:1、首先分析题目的数据结构,看看要操作那些值(商品数据,金额数据,甚至需要保存每一笔用户的交易);然后根据题意设计操作对象的结构。可以使用结构体来描述其中较为复杂的对象例如往来帐目;确定结构体的定义;可以使用数组来保存商品数据和已收款,剩余零钞数目这样的数据,使用结构体数组来保存往来帐目数据。2、

7、找零算法一种简单的算法是优先找给大额的零钞,用完再找给小额零钞。但是这种算法充其量只能保证服务最多的顾客,但是后来的顾客就只能拿1元的硬币了。因此可以采用动态最优化算法,剩余的零钞哪个最多,优先找哪个。说明.本表应在每次实施前一周由负责教师填写二份,院系审批后交院系办备案,一份由负责教师留用。.若填写内容较多可另纸附后。3.一题多名学生共用的,在设计内容、参数、要求等方面应有所区别。教研室主任: 指导教师:雷亮/韩琦/陈刘奎 2014年6月02日摘要有史以来,人类发明了无数的信息技术来扩展自身的信息交流、处理和记忆能力。然而,以1946年世界第一台电子计算机的出现为开端,信息技术开始走向一个全

8、新的数字时代。50年多年来,计算机技术飞速发展,日新月异。人们发现起初为解决计算问题而发明的计算机用途越来越广,几乎渗透到涉及信息活动的一切领域。计算机软件的开发更是帮助到各个领域对计算机的使用,更加优化了计算机的功能。根据本次课程设计内容及要求,完成自动售货机系统的设计。这种无人值守自动售货机贩卖价值为A、B、C的三种商品,价格分别为2元,3元和6元。顾客投入10元的纸币,然后选择购买3种商品之一,自动售货机吐出商品,并且找给用户零钱。如果商品已经卖完,或者无法找零,则给出用户一个提示,商品已售完,并且退还纸币。在自动售货机系统中,数据的固化采用.out文件格式进行储存。关键词:计算机 自动

9、售货机 储存目录摘要III1 设计内容和要求12 概要设计22.1 数据固化23 详细设计43.1 管理员模块43.2 用户模块的详细设计54 系统测试74.1系统启动选择界面74.2库存查询功能测试84.3 商品上架功能测试94.4 销售查询功能测试104.5 会计查询功能测试114.6 销售功能测试125 总结13致谢14参考文献15源代码15241 设计内容和要求某公司请你为其生产的自动售货机编写软件。这种无人值守自动售货机贩卖价值为A、B、C的三种商品,价格分别为2元,3元和6元。顾客投入10元的纸币,然后选择购买3种商品之一,自动售货机吐出商品,并且找给用户零钱。如果商品已经卖完,或

10、者无法找零,则给出用户一个提示,商品已售完,并且退还纸币。 自然,你的售货机用户希望尽可能地给用户找零,以免流失顾客。为了调查用户的喜好,希望得到三种商品的每日消费数据,由此来调整货柜中三种货物的存贮量。你的程序将实现以下功能: 库存查询:检索当前三种商品的储存量 商品上架:为三种商品增加或者减少储量 销售查询:分别统计今天每种商品的销售量和销售额 会计查询:打印当天的往来帐目以及剩余零钞数目 结算功能:取出今天所有的10元纸币,并且分别设置零钞的数目 销售界面:顾客投入纸币,选择商品,获得商品和零钱;或者直接显示错误并退还纸币 2 概要设计本自动售货机系统根据题意有以下6个模块,但前5个需要

11、管理者密码,最后一个为普通用户模块,不需要密码。自动售货机系统库存查询 销售界面结算功能会计查询商品上架销售查询图2.12.1 数据固化数据:在计算机系统中,各种字母、数字符号的组合、语音、图形、图像等统称为数据,数据经过加工后就成为信息。在本系统中涉及的数据只是一些简单的字符和数字的组合,对于它的数据固化也将采用比较简单的文本方式进行存储。但是,文件中的数据存储格式必须是我们程序员给出定义的。在自动售货机系统的使用到的文件是goods.out,用以存储货物的基本信息,他们的具体含义如下:1)商品的数据定义以行为单位,描述一类商品,数据格式为:商品名 商品总量 商品价格(以空格隔开)3 详细设

12、计3.1 管理员模块管理员是自动售货机系统中权限最高的用户。在管理员工作模式下,管理员可以进行货物进行上/下架操作、商品库存信息查询、销售信息查询、会计查询、结算功能、切换到销售界面几大操作。管理员模块下的功能结构图,如下:管理者选 择销售查询商品上架会计查询结算功能库存查询浏览增减查询查询浏览结束图3.1 管理员模块流程图库存查询和销售查询处理流程大概相同,下面只给出商品上架的流程图。读取文件录入商品编号商品编号存在否更新数量完成各项商品信息录入写入文件 图3.2 商品上架流程图3.2 用户模块的详细设计用户模块主要是销售商品的界面。销售商品的整个过程是,用户输入商品代号,然后投入货币,然后

13、进行找零等操作,最后放出商品,完成交易。下面来看一下用户模块的流程。用户选择商品A商品B商品C投币商品和零钱图3.3 用户模块流程图4 系统测试它的的任务是尽可能彻底地检查出程序中的错误,提高软件系统的可靠性,其目的是检验系统"做得怎样?"。这阶段又可分为三个步骤:模块测试,测试每个模块的程序是否有错误;组装测试,测试模块之间的接口是否正确;确认测试,测试整个软件系统是否满足用户功能和性能的要求。该阶段结束应交付测试报告,说明测试数据的选择,测试用例以及测试结果是否符合预期结果。测试发现问题之后要经过调试找出错误原因和位置,然后进行改正。是基于系统整体需求说明书的黑盒类测试

14、,应覆盖系统所有联合的部件。系统测试是针对整个产品系统进行的测试,目的是验证系统是否满足了需求规格的定义,找出与需求规格不相符合或与之矛盾的地方。4.1系统启动选择界面。图4.1系统启动选择界面图4.1系统启动选择界面4.2库存查询功能测试库存功能的设计是为了检索当前三种商品的储存量,输入操作指令“1”进入库存查询功能。图4.2 库存查询功能测试结果图4.3 商品上架功能测试商品上架功能设计是为了实现三种商品增加或者减少储量。输入指令“2”,进入商品上架功能界面。 图 4.3 商品上架功能测试界面图4.4 销售查询功能测试销售查询功能是设计为了完成分别统计今天每种商品的销售量和销售额的功能。输

15、入口令“3”,进入销售查询功能界面。图 4.4 销售查询功能测试界面图 4.5 会计查询功能测试会计查询功能是设计为了完成分别统计今天每种商品的销售量和、销售额和一元、五元剩余张数的功能。输入口令“4”,进入销售查询功能界面。图 4.5 销售查询功能测试界面图4.6 销售功能测试在管理模式下,输入口令“6”,进入销售模式。 图4.6 商品销售操作图5 总结通过自动售货机系统的设计,进一步掌握了C语言的基础知识。尤其对指针的操作、文件的操作更加熟悉。总之,又让我重新认识了C语言的魅力。致谢感谢父母的精心培养和无私的给予,您们是我学习和生活的源动力。感谢你们让我懂得了如何生活。感谢老师辛勤培养,无

16、私的栽培。参考文献1 何钦铭,C语言程序设计,北京,高等教育出版社,20082 谭浩强 张基温,C语言程序设计教程,高等教育出版社,2006源代码 #include"stdio.h"#include"stdlib.h"#include"math.h"typedef struct jeint yy;int wy;int sy;JE;typedef struct SPint xsje; int sc; int kc; char name20;SP;int main()FILE *fp;int sl,ye,sp,cd,pd; SP a,b,

17、c; JE money; a.kc=b.kc=c.kc=50; a.sc=b.sc=c.sc=0; money.yy=200; money.wy=50; money.sy=0; a.xsje=a.sc*2; b.xsje=b.sc*3; c.xsje=c.sc*6; fp=fopen("jilu.txt","a"); doprintf("t*n");printf("t* *n");printf("t* 。欢迎使用自动售货机管理系统。 *n");printf("t* *n");

18、printf("t*n"); printf("n");printf("t 菜单:nn"); printf(" *n"); printf(" *自*动*售*货*机*系*统*n"); printf(" * 1、 库 存 查 询 *n"); printf(" * 2、 商 品 上 架 *n"); printf(" * 3、 销 售 查 询 *n"); printf(" * 4、 会 计 查 询 *n"); printf(&

19、quot; * 5、 结 算 功 能 *n"); printf(" * 6、 销 售 界 面 *n"); printf(" *n"); printf(" *n"); printf(" *请 输 入 1-6 选 择 :");scanf("%d",&cd);switch(cd)case 1:printf(" *库*存*查*询*n");printf(" * 1、A 商 品 单 价 : 2 元 *n");printf(" * 2、B 商

20、 品 单 价 : 3 元 *n");printf(" * 3、C 商 品 单 价 : 6 元 *n");printf(" *n"); printf(" *请 输 入 1-3 选 择 :"); scanf("%d",&sp); printf("n"); switch(sp) case 1:printf(" *n"); printf(" * 你选择的2元的商品 *n"); printf(" * 2元商品的库存量为: %d n&quo

21、t;,a.kc); printf(" *n");fputs("2元商品的库存量为", fp);fprintf(fp, "%dn", a.kc);break; case 2:printf(" *n"); printf(" * 你选择的3元的商品 *n"); printf(" * 3元商品的库存量为: %d n",b.kc); printf(" *n");fputs("3元商品的库存量为", fp);fprintf(fp, "%d

22、n", b.kc);break; case 3:printf(" *n"); printf(" * 你选择的6元的商品 *n"); printf(" * 6元商品的库存量为: %d n",c.kc); printf(" *n");fputs("6元商品的库存量为", fp);fprintf(fp, "%dn", c.kc);break;printf(" 输入任意数值返回上层n");system("PAUSE");break;c

23、ase 2:printf(" *商*品*上*架*n"); printf(" * 1、A 商 品 单 价 : 2 元 *n"); printf(" * 2、B 商 品 单 价 : 3 元 *n"); printf(" * 3、C 商 品 单 价 : 6 元 *n"); printf(" *n"); printf(" *请 输 入 1-3 选 择 :");scanf("%d",&sp);switch(sp)case 1:printf(" *n

24、"); printf(" * 你 选 择 的 2 元 的 商 品 *n"); printf(" * 请 输 入 商 品 的 改 变 量 : "); scanf("%d",&sl);a.kc+=sl;printf(" *n");printf(" * 2 元 商 品 现 在 的 库 存 为 : %d n",a.kc);printf(" *n");fputs("2元商品现在的库存为", fp);fprintf(fp, "%dn&quo

25、t;,a.kc);break;case 2:printf(" *n"); printf(" * 你 选 择 的 3 元 的 商 品 *n"); printf(" * 请 输 入 商 品 的 改 变 量 : "); scanf("%d",&sl);b.kc+=sl;printf(" *n");printf(" * 3 元 商 品 现 在 的 库 存 为 : %d n",b.kc);printf(" *n");fputs("3元商品现在的库存

26、为", fp);fprintf(fp, "%dn",b.kc);break;case 3:printf(" *n"); printf(" * 你 选 择 的 6 元 的 商 品 *n"); printf(" * 请 输 入 商 品 的 改 变 量 : "); scanf("%d",&sl);c.kc+=sl;printf(" *n");printf(" * 6 元 商 品 现 在 的 库 存 为 : %d n",c.kc);printf(

27、" *n");fputs("6元商品现在的库存为", fp);fprintf(fp, "%dn",c.kc);break; system("PAUSE");break;case 3:printf(" *销*售*查*询*n"); printf(" * 1、A 商 品 单 价 : 2 元 *n"); printf(" * 2、B 商 品 单 价 : 3 元 *n"); printf(" * 3、C 商 品 单 价 : 6 元 *n"); p

28、rintf(" *n"); printf(" *请 输 入 1-3 选 择 :");scanf("%d",&sp); switch(sp)case 1:printf(" *销*售*查*询*n"); printf(" * 你 选 择 的 2 元 的 商 品 *n"); printf(" * 销 售 数 量 为 : %d n",a.sc); printf(" * 销 售 金 额 为 : %d n",a.xsje); printf(" *n&q

29、uot;);fputs("2元商品的销售数量和金额为", fp);fprintf(fp, "%d,",a.sc); fprintf(fp, "%dn",a.xsje); break;case 2:printf(" *销*售*查*询*n"); printf(" * 你 选 择 的 3 元 的 商 品 *n"); printf(" * 销 售 数 量 为 : %d n",b.sc); printf(" * 销 售 金 额 为 : %d n",b.xsje);

30、printf(" *n");fputs("3元商品的销售数量和金额为", fp);fprintf(fp, "%d,",b.sc); fprintf(fp, "%dn",b.xsje); break;case 3:printf(" *销*售*查*询*n"); printf(" * 你 选 择 的 6 元 的 商 品 *n"); printf(" * 销 售 数 量 为 : %d n",c.sc); printf(" * 销 售 金 额 为 : %d

31、 n",c.xsje); printf(" *n");fputs("6元商品的销售数量和金额为", fp);fprintf(fp, "%d,",c.sc); fprintf(fp, "%dn",c.xsje); break;system("PAUSE");break;case 4:printf(" *会*计*查*询*n"); printf(" * 至今2元商品卖出:%d,交易额为: %d n",a.sc,a.xsje); printf("

32、; * 至今3元商品卖出:%d,交易额为: %d n",b.sc,b.xsje); printf(" * 至今6元商品卖出:%d,交易额为: %d n",c.sc,c.xsje); printf(" * 1元零钞剩余量为: %d n",money.yy); printf(" * 5元零钞剩余量为: %d n",money.wy); printf(" *n"); fputs("至今2元商品的销售数量和金额为", fp);fprintf(fp, "%d,",a.sc);

33、 fprintf(fp, "%dn",a.xsje); fputs("至今3元商品的销售数量和金额为", fp);fprintf(fp, "%d,",b.sc); fprintf(fp, "%dn",b.xsje); fputs("至今6元商品的销售数量和金额为", fp);fprintf(fp, "%d,",c.sc); fprintf(fp, "%dn",c.xsje);fputs("1元零钞剩余量为", fp);fprintf(f

34、p, "%dn",money.yy);fputs("5元零钞剩余量为", fp);fprintf(fp, "%dn",money.wy);system("PAUSE");system("cls");break;case 5:fputs("取出的10元钞票数量", fp);fprintf(fp, "%dn",money.sy);money.sy=0;printf(" *n");printf(" * 已 取 出 10 元 钞 票

35、*n");printf(" * 请输出1元钞票的初始值: ");scanf("%d",&money.yy);fputs("重置的1元钞票数量", fp);fprintf(fp, "%dn",money.yy); printf(" * 请输出5元钞票的初始值: "); scanf("%d",&money.wy);fputs("重置的5元钞票数量", fp);fprintf(fp, "%dn",money.wy);

36、a.sc=b.sc=c.sc=0;system("PAUSE");system("cls");break;case 6:while(sp!=110)/管理员密码为110 printf(" * 请 放 入 10 元 纸 币 *n"); printf(" ");scanf("%d",&pd);if(pd=10)printf(" *销*售*n"); printf(" * 1、A 商 品 单 价 : 2 元 *n"); printf(" * 2、

37、B 商 品 单 价 : 3 元 *n"); printf(" * 3、C 商 品 单 价 : 6 元 *n"); printf(" *n"); printf(" *请 输 入 1-3 选 择 :");scanf("%d",&sp);switch(sp)case 1: while(1)printf(" *n"); printf(" * 你 选 择 的 2 元 的 商 品 *n"); printf(" * 你 选 择 的 商 品 为 :2 元 商 品*

38、n"); printf(" * 请 选 择 购 买 数 量 : ");scanf("%d",&sl);if(sl>0&&sl<=5)if(a.kc>=sl&&(money.yy+money.wy*5)>=(10-sl*2)ye=10-sl*2;a.xsje+=sl*2;a.sc+=sl;a.kc-=sl;money.sy+; if(ye>5&&money.wy>=1)money.wy-=1; money.yy=money.yy-ye+5; else mo

39、ney.yy=money.yy-ye; printf(" *n");printf(" * 请从商品口拿出商品及余额: %d 元*n",ye);fputs("此次卖出2元商品的数量及收入为", fp); fprintf(fp, "%d,",sl); fprintf(fp, "%dn",sl*2); system("PAUSE");system("cls");break;elsesystem("cls");printf(" * 商

40、 品 不 足 或 零 钞 不 足 *n");system("PAUSE");break;elsesystem("cls");printf(" * 请 输 入 正 确 数 量 *n"); system("PAUSE");break;case 2: while(1)printf(" *n"); printf(" * 你 选 择 的 3 元 的 商 品 *n"); printf(" * 你 选 择 的 商 品 为 :3 元 商 品*n"); print

41、f(" * 请 选 择 购 买 数 量 : ");scanf("%d",&sl);if(sl>0&&sl<=3)if(a.kc>=sl&&(money.yy+money.wy*5)>=(10-sl*3)ye=10-sl*3;b.xsje+=sl*3;b.sc+=sl;b.kc-=sl;money.sy+; if(ye>5&&money.wy>=1)money.wy-=1; money.yy=money.yy-ye+5; else money.yy=money.yy-ye; printf(" *n");printf(" * 请从商品口拿出商品及余额: %d 元*n",ye);fputs("此次卖出3元商品的数量及收入为", fp); fprintf(fp, "%d,",sl); fprintf(fp, "%dn",sl*3); system("PAUSE");system("cls");break;elsesystem("cls");printf("

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论