我的C程序课程设计-自动贩卖机系统(已完成)

我的C程序课程设计-自动贩卖机系统

课程设计的任务及题目早已明确,此时我却一点头绪没有,开始这一篇文章记录下我的课设过程,希望可以督促我快些完成。

*要求论文页数十页以上,否则为不合格!


课题名称:自动贩卖机系统


需求分析(设计目的)

自动售货机是能根据投入的钱币自动付货的机器。自动售货机是商业自动化的常用设备,它不受时间、地点的限制,能节省人力、方便交易。是一种全新的商业零售形式,又被称为24小时营业的微型超市,可以很好地解决人工费用上升的问题。本程序为饮料自动售货机的程序,能实现饮料的自动销售,并采用文件的形式记录购买数据,能起到节约人力、减少成本的目的。


总体设计

本设计主要分为两大系统(顾客购买以及管理员管理系统)以及放于d盘中“饮料.txt”的文件系统,每个系统分别执行一些特定的功能。如下图所示:

图一 总体设计概念图

3.1管理员模块

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

管理员模块的功能结构图,如下:

图3.1 管理员操作流程图

3.2 顾客购买模块

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

图3.2 顾客购买饮料流程图

三、详细设计与实现

3.1 系统界面设计

3.1.1 主菜单界面
图3.1.1 主菜单界面

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

3.1.2 购买界面
3.1.2 购买界面

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

3.1.3 管理员管理界面
3.1.1 管理员登录页面

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

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);							//结束程序 
		}		
	}
 }
© 版权声明
THE END
喜欢就支持一下吧
点赞538赞赏
分享
评论 抢沙发

请登录后发表评论