重庆科技学院《C语言程序设计》课程设计报告学院:_电气与信息工程学院_ 专业班级:测控1302 学生姓名:张宇学号: 2013441294 设计地点(单位)_____重庆科技学院___ ________ __设计题目:_____________自动售货机系统________________完成日期: 2014 年 07月 04 日指导教师评语: ______________________ _____________________________________________________________________________________________________________________________________________________________________________________成绩(五级记分制):______ __________指导教师(签字):________ ________重庆科技学院课程设计任务书设计题目:自动售货机系统2014年6月02日摘要有史以来,人类发明了无数的信息技术来扩展自身的信息交流、处理和记忆能力。
然而,以1946年世界第一台电子计算机的出现为开端,信息技术开始走向一个全新的数字时代。
50年多年来,计算机技术飞速发展,日新月异。
人们发现起初为解决计算问题而发明的计算机用途越来越广,几乎渗透到涉及信息活动的一切领域。
计算机软件的开发更是帮助到各个领域对计算机的使用,更加优化了计算机的功能。
根据本次课程设计内容及要求,完成自动售货机系统的设计。
这种无人值守自动售货机贩卖价值为A、B、C的三种商品,价格分别为2元,3元和6元。
顾客投入10元的纸币,然后选择购买3种商品之一,自动售货机吐出商品,并且找给用户零钱。
如果商品已经卖完,或者无法找零,则给出用户一个提示,商品已售完,并且退还纸币。
在自动售货机系统中,数据的固化采用.out文件格式进行储存。
关键词:计算机自动售货机储存目录摘要 (III)1 设计内容和要求 (1)2 概要设计 (2)2.1 数据固化 (2)3 详细设计 (4)3.1 管理员模块 (4)3.2 用户模块的详细设计 (5)4 系统测试 (7)4.1系统启动选择界面 (7)4.2库存查询功能测试 (8)4.3 商品上架功能测试 (9)4.4 销售查询功能测试 (10)4.5 会计查询功能测试 (11)4.6 销售功能测试 (12)5 总结 (13)致谢 (14)参考文献 (15)源代码 (15)1 设计内容和要求某公司请你为其生产的自动售货机编写软件。
这种无人值守自动售货机贩卖价值为A、B、C的三种商品,价格分别为2元,3元和6元。
顾客投入10元的纸币,然后选择购买3种商品之一,自动售货机吐出商品,并且找给用户零钱。
如果商品已经卖完,或者无法找零,则给出用户一个提示,商品已售完,并且退还纸币。
自然,你的售货机用户希望尽可能地给用户找零,以免流失顾客。
为了调查用户的喜好,希望得到三种商品的每日消费数据,由此来调整货柜中三种货物的存贮量。
你的程序将实现以下功能:库存查询:检索当前三种商品的储存量商品上架:为三种商品增加或者减少储量销售查询:分别统计今天每种商品的销售量和销售额会计查询:打印当天的往来帐目以及剩余零钞数目结算功能:取出今天所有的10元纸币,并且分别设置零钞的数目销售界面:顾客投入纸币,选择商品,获得商品和零钱;或者直接显示错误并退还纸币2 概要设计本自动售货机系统根据题意有以下6个模块,但前5个需要管理者密码,最后一个为普通用户模块,不需要密码。
图2.12.1 数据固化数据:在计算机系统中,各种字母、数字符号的组合、语音、图形、图像等统称为数据,数据经过加工后就成为信息。
在本系统中涉及的数据只是一些简单的字符和数字的组合,对于它的数据固化也将采用比较简单的文本方式进行存储。
但是,文件中的数据存储格式必须是我们程序员给出定义的。
在自动售货机系统的使用到的文件是goods.out,用以存储货物的基本信息,他们的具体含义如下:1)商品的数据定义以行为单位,描述一类商品,数据格式为:商品名商品总量商品价格(以空格隔开)3 详细设计3.1 管理员模块管理员是自动售货机系统中权限最高的用户。
在管理员工作模式下,管理员可以进行货物进行上/下架操作、商品库存信息查询、销售信息查询、会计查询、结算功能、切换到销售界面几大操作。
管理员模块下的功能结构图,如下:图3.1 管理员模块流程图库存查询和销售查询处理流程大概相同,下面只给出商品上架的流程图。
图3.2 商品上架流程图3.2 用户模块的详细设计用户模块主要是销售商品的界面。
销售商品的整个过程是,用户输入商品代号,然后投入货币,然后进行找零等操作,最后放出商品,完成交易。
下面来看一下用户模块的流程。
图3.3 用户模块流程图4 系统测试它的的任务是尽可能彻底地检查出程序中的错误,提高软件系统的可靠性,其目的是检验系统"做得怎样?"。
这阶段又可分为三个步骤:模块测试,测试每个模块的程序是否有错误;组装测试,测试模块之间的接口是否正确;确认测试,测试整个软件系统是否满足用户功能和性能的要求。
该阶段结束应交付测试报告,说明测试数据的选择,测试用例以及测试结果是否符合预期结果。
测试发现问题之后要经过调试找出错误原因和位置,然后进行改正。
是基于系统整体需求说明书的黑盒类测试,应覆盖系统所有联合的部件。
系统测试是针对整个产品系统进行的测试,目的是验证系统是否满足了需求规格的定义,找出与需求规格不相符合或与之矛盾的地方。
4.1系统启动选择界面。
图4.1系统启动选择界面图4.1系统启动选择界面4.2库存查询功能测试库存功能的设计是为了检索当前三种商品的储存量,输入操作指令“1”进入库存查询功能。
图4.2 库存查询功能测试结果图4.3 商品上架功能测试商品上架功能设计是为了实现三种商品增加或者减少储量。
输入指令“2”,进入商品上架功能界面。
图 4.3 商品上架功能测试界面图4.4 销售查询功能测试销售查询功能是设计为了完成分别统计今天每种商品的销售量和销售额的功能。
输入口令“3”,进入销售查询功能界面。
图 4.4 销售查询功能测试界面图4.5 会计查询功能测试会计查询功能是设计为了完成分别统计今天每种商品的销售量和、销售额和一元、五元剩余张数的功能。
输入口令“4”,进入销售查询功能界面。
图 4.5 销售查询功能测试界面图4.6 销售功能测试在管理模式下,输入口令“6”,进入销售模式。
图4.6 商品销售操作图5 总结通过自动售货机系统的设计,进一步掌握了C语言的基础知识。
尤其对指针的操作、文件的操作更加熟悉。
总之,又让我重新认识了C语言的魅力。
致谢感谢父母的精心培养和无私的给予,您们是我学习和生活的源动力。
感谢你们让我懂得了如何生活。
感谢老师辛勤培养,无私的栽培。
参考文献[1] 何钦铭,C语言程序设计,北京,高等教育出版社,2008[2] 谭浩强张基温,C语言程序设计教程,高等教育出版社,2006 源代码#include"stdio.h"#include"stdlib.h"#include"math.h"typedef struct je{int yy;int wy;int sy;}JE;typedef struct SP{int xsje;int sc;int kc;char name[20];}SP;int main(){FILE *fp;int sl,ye,sp,cd,pd;SP a,b,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");do{printf("\t^*^*^*^*^*^*^*^*^*^*^*^*^*^*^*^*^*^*^*^*^*^*^*^*^*^*^*^*^\n");printf("\t^* *^\n");printf("\t^* 。
欢迎使用自动售货机管理系统。
*^\n");printf("\t^* *^\n");printf("\t^*^*^*^*^*^*^*^*^*^*^*^*^*^*^*^*^*^*^*^*^*^*^*^*^*^*^*^*^\n");printf("\n");printf("\t 菜单:\n\n");printf(" ************************************************\n");printf(" *************自*动*售*货*机*系*统***************\n");printf(" ** 1、库存查询**\n");printf(" ** 2、商品上架**\n");printf(" ** 3、销售查询**\n");printf(" ** 4、会计查询**\n");printf(" ** 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 商品单价: 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",a.kc);printf(" *************************************\n");fputs("2元商品的库存量为", fp);fprintf(fp, "%d\n", a.kc);break;case 2:printf(" *************************************\n");printf(" * 你选择的3元的商品*\n");printf(" * 3元商品的库存量为: %d \n",b.kc);printf(" *************************************\n");fputs("3元商品的库存量为", fp);fprintf(fp, "%d\n", b.kc);break;case 3:printf(" *************************************\n");printf(" * 你选择的6元的商品*\n");printf(" * 6元商品的库存量为: %d \n",c.kc);printf(" *************************************\n");fputs("6元商品的库存量为", fp);fprintf(fp, "%d\n", c.kc);break;}printf(" 输入任意数值返回上层\n");system("PAUSE");break;case 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");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, "%d\n",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元商品现在的库存为", fp);fprintf(fp, "%d\n",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(" *************************************\n");fputs("6元商品现在的库存为", fp);fprintf(fp, "%d\n",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");printf(" *************************************\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");fputs("2元商品的销售数量和金额为", fp);fprintf(fp, "%d,",a.sc);fprintf(fp, "%d\n",a.xsje);break;case 2:printf(" **************销*售*查*询************\n");printf(" * 你选择的3 元的商品*\n");printf(" * 销售数量为: %d \n",b.sc);printf(" * 销售金额为: %d \n",b.xsje);printf(" *************************************\n");fputs("3元商品的销售数量和金额为", fp);fprintf(fp, "%d,",b.sc);fprintf(fp, "%d\n",b.xsje);break;case 3:printf(" **************销*售*查*询************\n");printf(" * 你选择的6 元的商品*\n");printf(" * 销售数量为: %d \n",c.sc);printf(" * 销售金额为: %d \n",c.xsje);printf(" *************************************\n");fputs("6元商品的销售数量和金额为", fp);fprintf(fp, "%d,",c.sc);fprintf(fp, "%d\n",c.xsje);break;}system("PAUSE");break;case 4:printf(" ****************会*计*查*询*************\n");printf(" * 至今2元商品卖出:%d,交易额为: %d \n",a.sc,a.xsje);printf(" * 至今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);fprintf(fp, "%d\n",a.xsje);fputs("至今3元商品的销售数量和金额为", fp);fprintf(fp, "%d,",b.sc);fprintf(fp, "%d\n",b.xsje);fputs("至今6元商品的销售数量和金额为", fp);fprintf(fp, "%d,",c.sc);fprintf(fp, "%d\n",c.xsje);fputs("1元零钞剩余量为", fp);fprintf(fp, "%d\n",money.yy);fputs("5元零钞剩余量为", fp);fprintf(fp, "%d\n",money.wy);system("PAUSE");system("cls");break;case 5:fputs("取出的10元钞票数量", fp);fprintf(fp, "%d\n",money.sy);money.sy=0;printf(" *************************************\n");printf(" * 已取出10 元钞票*\n");printf(" * 请输出1元钞票的初始值: ");scanf("%d",&money.yy);fputs("重置的1元钞票数量", fp);fprintf(fp, "%d\n",money.yy);printf(" * 请输出5元钞票的初始值: ");scanf("%d",&money.wy);fputs("重置的5元钞票数量", fp);fprintf(fp, "%d\n",money.wy);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、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 元商品*\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{money.yy=money.yy-ye;}printf(" *************************************\n");printf(" * 请从商品口拿出商品及余额: %d 元*\n",ye);fputs("此次卖出2元商品的数量及收入为", fp);fprintf(fp, "%d,",sl);fprintf(fp, "%d\n",sl*2);;system("PAUSE");system("cls");break;}else{system("cls");printf(" * 商品不足或零钞不足*\n");system("PAUSE");break;}}else{system("cls");printf(" * 请输入正确数量*\n");system("PAUSE");}}break;case 2:while(1){printf(" *************************************\n");printf(" * 你选择的3 元的商品*\n");printf(" * 你选择的商品为:3 元商品*\n");printf(" * 请选择购买数量:");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, "%d\n",sl*3);system("PAUSE");system("cls");break;}else{system("cls");printf(" * 商品不足或零钞不足*\n");system("PAUSE");break;}}else{system("cls");printf(" * 请输入正确数量*\n");system("PAUSE");}}break;case 3:while(1){printf(" *************************************\n");printf(" * 你选择的6 元的商品*\n");printf(" * 你选择的商品为:6 元商品*\n");printf(" * 请选择购买数量:");scanf("%d",&sl);if(sl>0&&sl<=1){if(a.kc>=sl&&(money.yy+money.wy*5)>=(10-sl*6)){ye=10-sl*6;c.xsje+=sl*6;c.sc+=sl;c.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("此次卖出6元商品的数量及收入为", fp);fprintf(fp, "%d,",sl);fprintf(fp, "%d\n",sl*6);system("PAUSE");system("cls");break;}else{system("cls");printf(" * 商品不足或零钞不足*\n");system("PAUSE");break;}}else{system("cls");printf(" * 请输入正确数量*\n");system("PAUSE");}}break;default: system("cls");}}else {system("cls");}}break;}system("cls");}while(cd<=6);printf(" * 请输入正确数量*\n");printf(" * 程序结束! *\n");printf("\t^*^*^*^*^*^*^*^*^*^*^*^*^*^*^*^*^*^*^*^*^*^*^*^*^*^*^*^*^*^*^\n"); printf("\t^* *^\n");printf("\t^* 感谢使用张宇设计的自动售货机系统*^\n"); printf("\t^* *^\n"); printf("\t^*^*^*^*^*^*^*^*^*^*^*^*^*^*^*^*^*^*^*^*^*^*^*^*^*^*^*^*^*^*^\n");fclose(fp);return 0;}。