超市存包系统C语言.docx
- 文档编号:12467618
- 上传时间:2023-04-19
- 格式:DOCX
- 页数:14
- 大小:659.95KB
超市存包系统C语言.docx
《超市存包系统C语言.docx》由会员分享,可在线阅读,更多相关《超市存包系统C语言.docx(14页珍藏版)》请在冰豆网上搜索。
超市存包系统C语言
课程设计
课程名称
C语言高级程序设计
学院
计算机科学与技术学院
小组成员1
小组成员2
小组成员3
任课教师
2015——2016学年第2学期
1.所选题目与要求——————————————————1
2.问题分析—————————————————————1
3.算法设计—————————————————————1
4.程序源代码————————————————————3
5.运行效果—————————————————————6
6.研究总结—————————————————————7
1.所选题目与要求
超市门口的存物柜有n个小柜,一个柜门控制器。
柜门控制器上有“存”和“取”两个按钮(可以用“0”表示“存”,“1”表示“取”)。
顾客按“存”时,控制器检查是否有空柜子:
如果有空柜子,就会自动打开其中一个柜子,顾客将东西放入柜子中,锁门时会输出一张用于取包的小密码纸条,上面有7位数字密码。
密码的头两位对应柜子编号加上10,密码中剩下的5位是利用随机函数rand()任意产生。
如果没有空柜子则提示“柜子已满!
”。
当顾客按“取”按钮时,要输入小密码纸条上指定的7位数字密码:
若密码正确,则对应的柜子门就自动打开,控制器显示“请取走物品!
”;否则控制器提示“欢迎下次光临!
”,顾客取走物品后关门,则该柜子可继续为其他顾客提供服务。
现编程实现柜门控制器的功能。
2.问题分析
实现对n个小柜子状态的管理问题。
存过物品的柜子会对应一个“有密码”状态,用字符串(7个数字字符)表示的密码。
最初或已取走物品后的柜子会对应初始状态—“无密码”
用户所有的存取操作会构成一个由0或1构成的请求序列,如:
0,0,0,1,1,0,1,0,0,1……一次操作只能对应一个用户,同时对应控制器的一次处理,完成一次操作,并使柜子的状态发生变化。
3.算法设计
流程图(借用的群里图,结构一致顺过来用用)
(1)输入寄存箱数量
intnum(intn){//输入可存柜数
printf("请输入可存柜总数");
scanf("%d",&n);
printf("\n");
while(n<=0||n>=25){
printf("寄存柜数量错误,请重新输入\n\n");
printf("寄存柜数量>");
scanf("%d",&n);
printf("\n");}
returnn;
}
(2)判断是否有空闲的箱子,输出柜号
voidknum(int*c,int*n,int*k)//判断有没有空柜子,若有从小到大输出柜子
inti=0;
for(i=0;i<*n;i++){
if(c[i]==1){
c[i]=2;
*k=i;
printf("柜号%d\t",*k+1);
break;}
else*k=-1;
}}
(3)输出空箱子密码
charcode(chara[24][8],int*k){//随机七位密码,前两位是空柜号数+10
inti=0,x=0;
if(*k!
=-1){
for(i=0;i<5;i++){
x=rand()%10+0;
a[*k][i+2]=x;
}
a[*k][0]=(*k+10)/10;
a[*k][1]=(*k)%10+1;
printf("请记住密码=");
for(i=0;i<7;i++)
printf("%d",a[*k][i]);
printf("\n");
}
(4)检测输入的密码是否正确
voidtest(chara[24][8],int*c){//检验密码是否输错
inti=0,j=0,l=0;
charb[8];
intt[8];
intr[8];
printf("请输入七位密码=");
scanf("%s",b);
printf("\n");
j=(int)(b[0]-'0')*10+(int)(b[1]-'0')-11;
for(i=0;i<8;i++){
t[i]=(int)(a[j][i]-'\0');
r[i]=(int)(b[i]-'0');
if(t[i]==r[i])l++;
}
if(l==7){
printf("%d号请取走物品!
\n",j+1);c[j]=1;}
elseprintf("密码错误*****欢迎下次光临!
\n");
}
4.程序源代码
/**************************都是背后有肮*交易的淫~小组作业*****************/
#include
#include
#include
#include
intnum(intn);
voidknum(int*c,int*n,int*k);
charcode(chara[24][8],int*k);
voidtest(chara[24][8],int*c);
voidmain(void){//主函数
printf("*****************都是背后有肮*交易的淫~小组作业********************\n");
printf("********************小组成员:
任海亮(组长)***********************\n");
printf("********************小组成员:
陈思(组花)***********************\n");
printf("********************小组成员:
钟金玮(组胖)***********************\n");
intn=24,k=0,choice=0,i=0;
chara[24][8]={'\0'};
charb[8]={'\0'};
intc[24]={0};
for(i=0;i<24;i++)c[i]=1;
srand(time(0));
n=num(n);
while
(1){
printf("存请按0;取请按1>");
scanf("%d",&choice);
switch(choice){
case0:
knum(c,&n,&k);a[24][8]=code(a,&k);break;
case1:
test(a,c);break;}
}
}
intnum(intn){//输入可存柜数
printf("请输入可存柜总数(最大24个)");
scanf("%d",&n);
printf("\n");
while(n<=0||n>=25){
printf("寄存柜数量错误,请重新输入\n\n");
printf("寄存柜数量>");
scanf("%d",&n);
printf("\n");}
returnn;
}
voidknum(int*c,int*n,int*k){//判断有没有空柜子,若有从小到大输出柜子
inti=0;
for(i=0;i<*n;i++){
if(c[i]==1){
c[i]=2;
*k=i;
printf("柜号%d\t",*k+1);
break;}
else*k=-1;
}}
charcode(chara[24][8],int*k){//随机七位密码,前两位是空柜号数+10
inti=0,x=0;
if(*k!
=-1){
for(i=0;i<5;i++){
x=rand()%10+0;
a[*k][i+2]=x;
}
a[*k][0]=(*k+10)/10;
a[*k][1]=(*k)%10+1;
printf("请记住密码=");
for(i=0;i<7;i++)
printf("%d",a[*k][i]);
printf("\n");
}
if(*k==-1)printf("柜子已满!
\n\n");
returna[24][8];
}
voidtest(chara[24][8],int*c){//检验密码是否输错
inti=0,j=0,l=0;
charb[8];
intt[8];
intr[8];
printf("请输入七位密码=");
scanf("%s",b);
printf("\n");
j=(int)(b[0]-'0')*10+(int)(b[1]-'0')-11;
for(i=0;i<8;i++){
t[i]=(int)(a[j][i]-'\0');
r[i]=(int)(b[i]-'0');
if(t[i]==r[i])l++;
}
if(l==7){
printf("%d号请取走物品!
\n\n",j+1);c[j]=1;}
elseprintf("密码错误*****欢迎下次光临!
\n\n");
}
5.
运行效果
6.研究总结
(研究过程、交流讨论、收获和小组成员的分工)
分工:
钟金玮做柜子数输出模块
陈思做检查是否有空柜子和生成密码模块
任海亮做检查密码是否输错和置零模块与编写主程序及汇总实验报告
总结:
跟着李民老师学习了半学期的C语言,原本以为没啥好听的我们却收获良多,老师将概念案例化,这样的效率要远超自己看书。
这让我们再写大作业时显的得心应手,比以前强化了很多,特别是指针方面,另外通过这大作业,也让我们学习到,团队的努力比起一个人无疑思维更开阔,效率更高!
遇到的问题及解决方案:
在研究编程过程中也遇到了很多的问题,值得一提的有这几个:
第一,在对于密码产生模块,一开始用的是两个一维数组,一个寸柜号,一个寸密码,但在后面汇总时发现无法进行密码的匹配,后来通过老师的课件,将一维数组改成了二维数组(a[24][8])解决了这个问题。
第二,在模块化编程汇总的时候遇到了函数值传递不下去的问题,后来通过查书(C编程方法学,王舜燕李民主编)发现是因为形参和实参的传递问题没有搞清,最后将形参变量改成指针,实参取其地址得以解决。
第三,也是最大的问题,解决时间近半小时,在检验密码是否输错模块发现无法用字符串函数strcpy(str1,str2)比较,同时在查找匹配的柜号密码时也出现了问题,后来通过参考一些案例,运用j=(int)(b[0]-'0')*10+(int)(b[1]-'0')-11;
t[i]=(int)(a[j][i]-'\0');
上两个公式得以解决。
参考文献:
【1】《C编程方法》————王舜燕,李民(武汉理工大学出版社)
【2】
【3】
【4】群里面的PPT(超市存包系统的分析)
④下面是各个组员的一些小心得
任海亮:
C语言是基础,很重要,如果你不学好C语言,那么什么高级语言你都学不好
陈思:
学习编程的秘诀是:
编程,编程,再编程。
钟金玮:
编程是一个很枯燥的事,但即来之、则安之,只要你努力学,也会发现其中的乐趣。
⑤成员交流表:
评分标准
论文题目
评阅点
评分标准(细则)
分值
给分
功能及算法
(60分)
正确实现全部功能,算法设计正确合理且有一定创意
60分
实现所需功能,算法正确
54分
基本实现所需功能
48分
有明显重大错误
30分
无法实现程序功能
0分
界面和操作性
(10分)
界面美观、合理,可操作性强
10分
界面合理,可操作
9分
界面尚可,基本可操作
8分
可操作较差
6分
研究过程
(10分)
有研究计划,小组分工明确、合理,讨论交流充分,并完成成员自评与互评
10分
有简单的研究计划,小组分工较明确,有交流讨论
8分
无研究过程
0分
论文质量
(20分)
论文规范,行文流畅,层次清晰
20分
论文书写基本规范,文理较通畅
18分
结构较合理,层次较清楚,基本符合要求
16分
结构混乱,文不对题目,或者有明显抄袭现象
10分
总分
教师签名:
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 超市 系统 语言
![提示](https://static.bdocx.com/images/bang_tan.gif)