我的C程序课程设计-自动贩卖机系统
课程设计的任务及题目早已明确,此时我却一点头绪没有,开始这一篇文章记录下我的课设过程,希望可以督促我快些完成。
*要求论文页数十页以上,否则为不合格!
课题名称:自动贩卖机系统
需求分析(设计目的)
自动售货机是能根据投入的钱币自动付货的机器。自动售货机是商业自动化的常用设备,它不受时间、地点的限制,能节省人力、方便交易。是一种全新的商业零售形式,又被称为24小时营业的微型超市,可以很好地解决人工费用上升的问题。本程序为饮料自动售货机的程序,能实现饮料的自动销售,并采用文件的形式记录购买数据,能起到节约人力、减少成本的目的。
总体设计
本设计主要分为两大系统(顾客购买以及管理员管理系统)以及放于d盘中“饮料.txt”的文件系统,每个系统分别执行一些特定的功能。如下图所示:

3.1管理员模块
管理员是自动售货机系统中权限最高的用户。在管理员工作模式下,管理员可以进行货物进行补充操作、商品库存信息查询、销售额信息查询、切换到销售界面几大操作。
管理员模块的功能结构图,如下:

3.2 顾客购买模块
用户模块主要是销售商品的界面。销售商品的整个过程是,用户投入货币,然后输入商品代号,然后进行找零等操作,最后放出商品,完成交易。下面来看一下用户模块的流程。

三、详细设计与实现
3.1 系统界面设计
3.1.1 主菜单界面

以上是主菜单界面,用户通过分别输入1,2或3来选择进入不同的界面。1是购买饮料界面,2可以通过验证密码进入管理员管理系统;3是推出主界面,用户可通过此选项直接退出。
3.1.2 购买界面

以上是购买界面,用户通过主界面进入购买界面后,可以对商品信息一目了然,也能对货币情况进行了解,选择需要的饮料及投币币值。
3.1.3 管理员管理界面

管理员登录须先经过上图界面正确输入密码,然后即可进入下图管理界面。

管理员可选择分别输入1,2或3进行查询销售数量、查询销售额及补货操作。
3.3系统调试分析
它的的任务是尽可能彻底地检查出程序中的错误,提高软件系统的可靠性,其目的是检验系统”做得怎样?”。这阶段又可分为三个步骤:模块测试,测试每个模块的程序是否有错误;组装测试,测试模块之间的接口是否正确:确认测试,测试整个软件系统是否满足用户功能和性能的要求。该阶段结束应交付测试报告,说明测试数据的选择,测试用例以及测试结果是否符合预期结果。测试发现问题之后要经过调试找出错误原因和位置,然后进行改正。是基于系统整体需求说明书的黑盒类测试,应覆盖系统所有联合的部件。系统测试是针对整个产品系统进行的测试,目的是验证系统是否满足了需求规格的定义,找出与需求规格不相符合或与之矛盾的地方。
四、遇到的问题及解决方案
一开始我们的方法不够优化,我们通过查阅一些资料,得到了新的方法,拓宽了思路,并且再次进行了讨论。讨论完毕后进行了组员的分工,大家在一周内进行了代码的编写和模块化调试,最后所有模块合在一起进行了总的调试。调试过程中又发现了不少问题,我们又一一加以修改,最后形成了现在这个较为完善的程序。
遇到问题一律百度处理,省略套话一W字……
五、总结与体会
通过C语言的课程设计课程,我对C语言的理解加深了许多,之前只是对C语言知识的普通学习,而课程设计考量的是对C语言知识的灵活运用及不断思考。虽然我只是编写了自动贩卖机这一简单的程序,但使我的C语言水平得到很大提高,在编写课程设计的程序时也遇到了各种各样或大或小的各类问题,课程设计不只是对我们知识掌握的考验,更是对我们独立处理问题、解决问题的测试。
写完了非常舒服,此处省略各种套话……
附:自动贩卖机系统源代码分享
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define N 6
void menu() //主界面
{
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请选择您要进行的操作:");
}
struct drink //定义结构体
{
char name[10]; //饮料名数组
int number; //饮料库存量
int count; //饮料销售量
float price; //饮料价格
}dr[N];
void Readdr() //读入文件,赋值结构体变量数据
{
int i;
FILE *fp;
fp = fopen("d:\\数据.txt","r"); //打开文件
if(fp==NULL)
{
printf("文件读取失败\n");
exit(0);
}
for(i=0;i<N;i++)
fscanf(fp,"%s%d%d%f",&dr[i].name,&dr[i].number,&dr[i].count,&dr[i].price);
fclose(fp); //关闭文件
}
void Savedr() //程序结束时写入文件
{
int i;
FILE *fp;
fp = fopen("d:\\数据.txt","w"); //打开文件
if(fp==NULL)
{
printf("文件读取失败\n");
exit(0);
}
for(i=0;i<N;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); //关闭文件
}
float buy() //顾客购买系统
{
float money;
int n,op;
int i,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&&money>0)
{
do{
printf("\n请选择您需要购买的饮料编号:");
scanf("%d",&n);
switch(n)
{
case 1:if(dr[0].number<1||money<2.0)
{
printf("\n库存或者投币不足,购买失败!");
break;
}
printf("\n购买成功!请取出您的饮料!");
money-=dr[0].price;
dr[0].number--;
dr[0].count++;
printf("剩余金额:%.2f元",money);
break;
case 2:if(dr[1].number<1||money<3.5)
{
printf("\n库存或者投币不足,购买失败!");
break;
}
printf("\n购买成功!请取出您的饮料!");
money-=dr[1].price;
dr[1].number--;
dr[1].count++;
printf("剩余金额:%.2f元",money);
break;
case 3:if(dr[2].number<1||money<4.0)
{
printf("\n库存或者投币不足,购买失败!");
break;
}
printf("\n购买成功!请取出您的饮料!");
money-=dr[2].price;
dr[2].number--;
dr[2].count++;
printf("剩余金额:%.2f元",money);
break;
case 4:if(dr[3].number<1||money<3.0)
{
printf("\n库存或者投币不足,购买失败!");
break;
}
printf("\n购买成功!请取出您的饮料!");
money-=dr[3].price;
dr[3].number--;
dr[3].count++;
printf("剩余金额:%.2f元",money);
break;
case 5:if(dr[4].number<1||money<3.0)
{
printf("\n库存或者投币不足,购买失败!");
break;
}
printf("\n购买成功!请取出您的饮料!");
money-=dr[4].price;
dr[4].number--;
dr[4].count++;
printf("剩余金额:%.2f元",money);
break;
case 6:if(dr[5].number<1||money<3.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;
}else
printf("\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"); //清屏
}
return money;
}
int enter() //管理员登录系统
{
int count = 3,lock = 0;
char a[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等于1
break;
}
else
{
printf("密码错误,请重新输入!");
continue;
}
}
if(lock == 0)
printf("您已输错三次,将返回主界面!");
return lock;
}
void add() //补货系统
{
int i,addition;
printf("\n请根据饮料标号输入每种增添的数量:\n");
for(i = 0;i<N;i++)
{
printf("%s:",dr[i].name);
scanf("%d",&addition);
dr[i].number += addition;
}
printf("\n现在设备内饮料数分别为: ");
for(i=0;i<N;i++)
printf("%s:%d瓶 ",dr[i].name,dr[i].number);
}
void work() //管理员操作系统
{
int op,i,n;
float total=0,all_total=0;
system("cls"); //清屏
printf("\n您好,管理员!");
printf("\n\t************************************************");
printf("\n\t** 操作1. 查询所售饮料数量 **");
printf("\n\t** 操作2. 查询销售额 **");
printf("\n\t** 操作3. 补货 **");
printf("\n\t************************************************\n");
do
{
printf("请选择您要进行的操作:");
scanf("%d",&op);
switch(op)
{
case 1:
printf("\n以下为各饮料售出数量统计:");
printf("\n\t名称\t\t销售量(瓶)\t\t剩余量(瓶)");
for(i=0;i<N;i++)
printf("\n\t%-8s \t %d \t\t\t %d",dr[i].name,dr[i].count,dr[i].number);
break;
case 2:
printf("\n近日此台机器的销售总额为: ");
for(i=0;i<N;i++)
{
total = dr[i].count*dr[i].price;
all_total += total;
}
printf("%.2f元",all_total);
break;
case 3:
add();
break;
default:
printf("\n您输入的编号错误!");
}
printf("\n\n是否退回主界面:1.是\t2.否\n");
scanf("%d",&n);
}while(n==2);
system("cls"); //清屏
}
int main() //主函数
{
int op;
Readdr();
while(1)
{
menu();
scanf("%d",&op);
getchar();
switch(op)
{
case 1:
system("cls"); //清屏
buy();
break;
case 2:
system("cls"); //清屏
if(enter()==1)
{
work();
break;
}
else break;
default:
printf("\n\n\t\t**谢谢使用**\n\n");
Savedr();
exit(0); //结束程序
}
}
}
请登录后发表评论
注册