当前位置:文档之家› 自动寄存柜

自动寄存柜

“程序设计(Ⅱ)”综合编程实验报告(2011-2012学年第2学期)实验项目名称:自动寄存柜一、实验内容与要求某超市门口的自动寄存柜有n个寄存箱,并且有一个投币控制器,顾客想要寄存小件物品时,只要在投币控制器投入1个1元的硬币,如果此时有空闲的箱子,寄存柜就会自动打开一个空的箱子,并且打印输出一张小小的密码纸条;如果没有空闲的箱子,则提示“本柜已满”。

当顾客离开超市时,用密码纸条上指定的数字密码依次输入到开箱控制器,则顾客所存包的箱子门就自动打开,顾客取走物品后,关上门。

输入数据时,可先输入寄存箱总数n,再由用户选择是“投硬币”还是“输密码”。

如果选择“投硬币”,则只有硬币值是1才开箱。

如果有空闲的箱子,则输出箱子编号及密码(4位数字);如果无空闲的箱子,则提示:“本柜已满”。

如果选择“输密码”,若输入的密码与某一箱子密码相符,则显示打开的箱子编号,否则输出提示:“密码错误”。

请编写开箱控制程序实现上述过程。

输入输出示例寄存箱总数:101.投硬币2.输密码 0.退出请选择: 1投币值:1寄存箱编号:1 密码:93421.投硬币2.输密码 0.退出请选择: 2输入密码:93421号寄存箱已打开1.投硬币2.输密码 0.退出请选择:0结束二、系统设计1、解题思路(1)先输入寄存箱数量,并判断数量是否正确。

(2)先输出"1.投硬币 2.输密码 0.退出请选择:",再输入数字选择是“投硬币”还是“输密码”。

(3)若“投硬币”,则只有硬币值是1才开箱,并判断是否有空闲的箱子。

若有则输出箱子编号及密码。

(4)若选择“输密码”,则判断输入的密码是否正确。

2、数据结构描述3、程序框架结构4、关键算法描述(1)输入寄存箱数量srand((int)time(0));printf("寄存柜数量:");scanf("%d",&num);printf("\n");while(num<=0){printf("寄存柜数量错误, 请重新输入\n\n");printf("寄存柜数量:");scanf("%d",&num);printf("\n");}(2)判断是否有空闲的箱子。

若有则输出箱子编号及密码。

if(x==1){printf("投币值:");scanf("%d",&coin);printf("\n");if(coin==1){if(count<num){b[count]=rand()%num+1;while(full[b[count]-1]==1) {b[count]=rand()%num+1;for(i=0;i<count;i++){if(b[count]==b[i]) {b[count]=rand()%num+1;i=0;}}}full[b[count]-1]=1;a[count]=rand()%9000+1000;for(i=0;i<count;i++){if(a[count]==a[i]){a[count]=rand()%9000+1000;i=0;}}printf("寄存箱编号:%d 密码:%d\n\n",b[count],a[count]);count++;}elseprintf("本柜已满\n\n");}(3)判断输入的密码是否正确printf("输入密码:");scanf("%d", &password);printf("\n");if(count==0){printf("密码错误\n\n");continue;}for(i=0;i<count;i++){if(full[b[i]-1]==1&&password==a[i]){printf("%d号寄存箱已打开\n\n",b[i]);full[b[i]-1]=0;flag=1;for(k=i;k<count-1;k++){b[k]=b[k+1];a[k]=a[k+1];full[b[k]-1]=full[b[k+1]-1];}break;}}if(flag!=1)printf("密码错误\n\n");else{count--;flag=0;}三、测试用例测试用例1:寄存柜数量:101.投硬币2.输密码 0.推出请选择:1投硬币:1寄存箱编号:10 密码:70751.投硬币2.输密码 0.推出请选择:2 输入密码:707510号寄存箱已打开1.投硬币2.输密码 0.推出请选择:0 测试用例2:寄存柜数量:101.投硬币2.输密码 0.推出请选择:1 投硬币:1寄存箱编号:5 密码:27381.投硬币2.输密码 0.推出请选择:2 输入密码:27385号寄存箱已打开1.投硬币2.输密码 0.推出请选择:0四、总结#include <stdio.h>#include <stdlib.h>#include <time.h>#include <string.h>int main(void){int i,k,num,x,count,coin,temp;int b[1000],a[1000],full[1000]; int password,flag=0;srand((int)time(0));printf("寄存柜数量:");scanf("%d",&num);printf("\n");while(num<=0){printf("寄存柜数量错误, 请重新输入\n\n");printf("寄存柜数量:");scanf("%d",&num);printf("\n");}//for(y=0;y<num;y++)//for(z=0;z<4;z++)//s[y][z]='a';/*---------*/for(i=0;i<num;i++)full[i]=0;count=0;//check=0;while(1){printf("1.投硬币 2.输密码 0.退出请选择:");scanf("%d",&x);printf("\n");/*-------*/if(x==1){printf("投币值:");scanf("%d",&coin);printf("\n");if(coin==1){if(count<num){b[count]=rand()%num+1;while(full[b[count]-1]==1){b[count]=rand()%num+1;for(i=0;i<count;i++){if(b[count]==b[i]){b[count]=rand()%num+1;i=0;}}}full[b[count]-1]=1;a[count]=rand()%9000+1000;for(i=0;i<count;i++){if(a[count]==a[i]){a[count]=rand()%9000+1000;i=0;}}printf("寄存箱编号:%d 密码:%d\n\n",b[count],a[count]);count++;}elseprintf("本柜已满\n\n");}else{printf("投错硬币, 请重新选择\n\n");continue;}}else if(x==2){printf("输入密码:");scanf("%d", &password);printf("\n");if(count==0){printf("密码错误\n\n");continue;}for(i=0;i<count;i++){if(full[b[i]-1]==1&&password==a[i]){printf("%d号寄存箱已打开\n\n",b[i]);full[b[i]-1]=0;flag=1;for(k=i;k<count-1;k++){b[k]=b[k+1];a[k]=a[k+1];full[b[k]-1]=full[b[k+1]-1];}break;}}if(flag!=1)printf("密码错误\n\n");else{count--;flag=0;}}else if(x==0)break;elseprintf("输入错误, 请重新输入\n\n");}return 0;}。

相关主题