为了应对一种商品有多种售价

谁学逆向工程 2011-02-14 09:47:32
对于小商店的售价是经常变动的。每次扫描条码的时候,如果发现此种商品有两种或两种以上的售价,就把满足此条码的商品存放在一个临时表中。
d是一个对话框,用于返回临时表中某一种商品所对应的多种售价中的一个。 把此对话框返回的售价存放在变量 ShouJia 中。 同时也取得临时表中的商品名称,把商品名称存放在变量 ShangPinMingCheng 中。
最后用这两个变量和 CListCtrl 中的每条记录循环比较。ClistCtrl 对象的指针在下面的代码用 p 表示。 如果 CListCtrl 中是空的,则直接添加,如果不为空则循环比较。
在比较中:如果控件中的商品名称等于临时表中的商品名称 并且 控件中的售价等于对话框中返回的售价,则把数量加一。如果不满足,则在控件的最后插入一条新记录。
下面的代码的运行结果有毛病,清帮忙修正一下。

运行结果:
启动选择售价对话框,
选择售价20,在第一行插入一条新记录 数量为一 ---- 结果正确
选择售价20,使第一行的数量自增一 ---- 结果正确
选择售价30,第一行记录消失,第二行产生新记录,数量为一 ----- 结果错误(不知为何第一行记录消失)
选择售价30,第一行仍为空行,第二行的数量字段自增一个 ------ 结果错误(第一行仍然消失)
选择售价20,前两行记录消失,第三行产生新记录,并且数量为一 ----- 结果错误(前面记录消失、数量在此处应为三)


				mysql_free_result(result);
d.DoModal ();

wchar_t ShouJia[100]; // 用于保存对话框返回的售价
::ZeroMemory (ShouJia,200);
for(unsigned int i = 0; i<100; i++)
{
ShouJia[i] = d.ShouJia[i] ;
}

mysql_query(conn,"select distinct 商品名称 from LinShiBiao");
result = mysql_store_result(conn);
row = mysql_fetch_row(result);

wchar_t ShangPinMingCheng[100]; // 用于保存临时表中的商品名称
::ZeroMemory (ShangPinMingCheng,200);
::MultiByteToWideChar (CP_OEMCP,0,row[0],-1,ShangPinMingCheng,100);
mysql_free_result(result);



if(p->GetItemCount () == 0) // 如果ClistCtrl 中没有记录
{
p->InsertItem (0,L"");
p->SetItemText (0,0,ShangPinMingCheng);
p->SetItemText (0,1,ShouJia);
p->SetItemText (0,2,L"1");
}
else
{
BOOL XiuGai = FALSE;
for(unsigned int i = 0; i< p->GetItemCount (); i++)
{
wchar_t mc[100];
wchar_t sj[100];
::ZeroMemory (mc,200);
::ZeroMemory (sj,200);

p->GetItemText (i,0,mc,100);
p->GetItemText (i,1,sj,100);


if( wcscmp(ShangPinMingCheng,mc)==0 && wcscmp(ShouJia,sj)==0 )
{
wchar_t sl[100];
::ZeroMemory (sl,200);
p->GetItemText (i,2,sl,100);
int a = _wtoi(sl);
a++;
::ZeroMemory (sl,200);
wsprintf(sl,L"%d",a);
p->SetItemText (i,2,sl);

XiuGai = TRUE;
break;
}
}
if( XiuGai == FALSE )
{
p->InsertItem (p->GetItemCount ()-1,L"");
p->SetItemText (p->GetItemCount ()-1,0,ShangPinMingCheng);
p->SetItemText (p->GetItemCount ()-1,1,ShouJia);
p->SetItemText (p->GetItemCount ()-1,2,L"1");

}

}

w = mysql_query(conn,"drop table LinShiBiao");
if(w!=0)
MessageBox(L"删除临时表失败");
...全文
110 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
ACMAIN_CHM 2011-02-14
  • 打赏
  • 举报
回复
1. 这是C程序设计方面的问题。
2. 如果想在数据库方面得到解答,请先自己进行单步调试,找出错误的语句。然后再提问。 CSDN上没有人会用眼睛浪费时间来阅读一大段程序代码的。

问题说明越详细,回答也会越准确!参见如何提问。(提问的智慧

4,011

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 数据库
社区管理员
  • 数据库
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧