标题:新人求助,关于C语言编写简单超市收银系统的问题
只看楼主
zy10758
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2013-12-8
结帖率:50%
已结贴  问题点数:20 回复次数:8 
新人求助,关于C语言编写简单超市收银系统的问题
唔,要求是输入商品代码(00310这种), 然后 输入 F 的时候结束输入 并将输入过的商品 代码 名称 还有价格 打印出来。 我的想法是通过switch选择实现代码和商品名称价格之间的联系,但是怎么在第一步scanf的时候能同时辨认“F”和商品的数字代码啊?刚学C语言,十分困惑!!!如果这步不能实现的话,这个switch选择的方法就行不通了。。。
搜索更多相关主题的帖子: 收银系统 C语言 
2013-12-08 13:19
yuccn
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:何方
等 级:版主
威 望:167
帖 子:6809
专家分:42393
注 册:2010-12-16
得分:0 

我行我乐
我的博客:
http://blog.yuccn. net
2013-12-08 15:32
韶志
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:斗气大陆
等 级:贵宾
威 望:44
帖 子:2223
专家分:13592
注 册:2013-3-22
得分:0 

三十年河东,三十年河西,莫欺少年穷!
2013-12-08 16:06
小小战士
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:1
帖 子:569
专家分:1313
注 册:2012-11-3
得分:0 
为了输入方便,也为了方便判断输入正确与否,也为了增强代码的稳健性,所有商品代码,名称,价格什么的都用字符串数组接收,然后再处理就行了

小小战士,战士中的战斗机!
2013-12-08 16:08
icanbestrong
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:100
专家分:138
注 册:2013-3-13
得分:0 
2013-12-08 16:35
zy10758
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2013-12-8
得分:0 
回复 4楼 小小战士
我是有把商品的价格和名称都存在两个数组里,题目要求是 只输入 商品代码, 所以商品代码跟商品价格名称直接的联系我想通过switch选择来实现。就像在超市,买东西的时候收银员扫一下二维码,然后结账的时候打出小票一样= 。问题是我不知道怎么用“F”来结束输入。 开始都是用scanf(“%d”, &code);来接收代码的,不能识别“F”啊...........
2013-12-08 18:42
zy10758
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2013-12-8
得分:0 
回复 4楼 小小战士
能再解释一下么。。有点不明白。。怎么用字符串数组接收代码呢?
2013-12-08 18:45
小小战士
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:1
帖 子:569
专家分:1313
注 册:2012-11-3
得分:20 
既然是小的超市收银系统,那么就要想数据结构和数据存储方面的问题,这方面少不了链表结构体文件操作,不然单凭if switch while,你这个系统是难以完成的。链表中每个结构体节点存储商品的所有信息,一一对应且唯一,增加查询修改删除都很方便,不知道链表结构体文件掌握的怎么样,但不管怎样,先回答你现在问的这问题吧

程序设计都有一定的逻辑,把商品代码和退出功能用同一输入进行判断,会造成逻辑混乱,是程序遇到瓶颈,所以首先要想好你的程序要怎么实现,不能走一步看一步,等到走不下去了,想放弃又不甘心已经写了这么多代码花了这么长时间,不放弃吧改吧工程量太大,可能要动大手术,这样就不好了。

scanf("%s",str);可以用来输入字符串,或者gets(str);,但要注意两者的区别

在C中,switch的case后面只能跟常量或常量表达式,但是字符串常量和浮点型是不支持的,所以想通过switch来处理字符串匹配问题有点悬,但是如果真的想用switch来实现字符串匹配,也不是没有办法,但实质还是不支持。
switch(strcmp(str1,str)==0?(1:strcmp(str2,str)==0?(2:strcmp(str3,str)==0?3:default)))  
{  
case 1:  
     .....................  
case 2:  
     .......................  
case 3:  
   ........................  
case 4:  
   ...........................  
default:  
   ..........................  
}  

所以用switch来实现字符串匹配是不太现实的,还是用strcmp()等函数来判断匹配。收银员扫描二维码,相当于查询商品的某一信息,如代码,在所有商品中查询此代码有则打印出来,没有则不打印,然后才是用F来判断是否要退出,退出的判断和商品代码是两个不同的输入语句,这点要注意。
比如 :
    scanf(输入代码字符串)--》查询代码--》找到则打印,未找到则不打印--》printf("是否要结束?(F/N)")--》另外一个scanf(输入F或者N)--》F则结束,N则回到刚开始查询的时候

不知我这样说,你能明白吗?

小小战士,战士中的战斗机!
2013-12-08 20:18
zy10758
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2013-12-8
得分:0 
回复 8楼 小小战士
明白了! 谢谢!!
2013-12-08 22:18



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-424881-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.982432 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved