自动寄存柜
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
“程序设计(Ⅱ)”综合编程实验报告
(2011-2012学年第2学期)
实验项目名称:自动寄存柜
一、实验内容与要求
某超市门口的自动寄存柜有n个寄存箱,并且有一个投币控制器,顾客想要寄存小件物品时,只要在投币控制器投入1个1元的硬币,如果此时有空闲的箱子,寄存柜就会自动打开一个空的箱子,并且打印输出一张小小的密码纸条;如果没有空闲的箱子,则提示“本柜已满”。当顾客离开超市时,用密码纸条上指定的数字密码依次输入到开箱控制器,则顾客所存包的箱子门就自动打开,顾客取走物品后,关上门。
输入数据时,可先输入寄存箱总数n,再由用户选择是“投硬币”还是“输密码”。
如果选择“投硬币”,则只有硬币值是1才开箱。如果有空闲的箱子,则输出箱子编号及密码(4位数字);如果无空闲的箱子,则提示:“本柜已满”。
如果选择“输密码”,若输入的密码与某一箱子密码相符,则显示打开的箱子编号,否则输出提示:“密码错误”。
请编写开箱控制程序实现上述过程。
输入输出示例
寄存箱总数:10
1.投硬币
2.输密码 0.退出请选择: 1
投币值:1
寄存箱编号:1 密码:9342
1.投硬币
2.输密码 0.退出请选择: 2
输入密码:9342
1号寄存箱已打开
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 b[count]=rand()%num+1; while(full[b[count]-1]==1) { b[count]=rand()%num+1; for(i=0;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 { if(a[count]==a[i]) { a[count]=rand()%9000+1000; i=0; } } printf("寄存箱编号:%d 密码:%d\n\n",b[count],a[count]); count++; } else printf("本柜已满\n\n"); } (3)判断输入的密码是否正确 printf("输入密码:"); scanf("%d", &password); printf("\n"); if(count==0) { printf("密码错误\n\n"); continue; } for(i=0;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 { 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: 寄存柜数量:10 1.投硬币 2.输密码 0.推出请选择:1 投硬币:1 寄存箱编号:10 密码:7075 1.投硬币 2.输密码 0.推出请选择:2 输入密码:7075 10号寄存箱已打开 1.投硬币 2.输密码 0.推出请选择:0 测试用例2: 寄存柜数量:10 1.投硬币 2.输密码 0.推出请选择:1 投硬币:1 寄存箱编号:5 密码:2738 1.投硬币 2.输密码 0.推出请选择:2 输入密码:2738 5号寄存箱已打开 1.投硬币 2.输密码 0.推出请选择:0 四、总结 #include #include #include #include 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");