⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 qtsy31p.txt

📁 dos下pos机程序 连接sybase数据库 使用Microsoft c7 编译
💻 TXT
📖 第 1 页 / 共 5 页
字号:
       case 3: strcpy(value,_lpSP->jldw);            // 单位
	       AlignMent=1;
	       break;
       case 4: GetDec(value,_lpSP->sl,-1,0);
	       AlignMent=2;
	       break;
       case 5: sprintf(value,"%.2f",_lpSP->sj);        // 售价
	       AlignMent=2;
	       break;
       case 6: sprintf(value,"%.2f",_lpSP->sjsj);      // 优惠价
	       AlignMent=2;
	       break;
       case 7: if(Param.Dyssje[0]=='1')
		sprintf(value,"%.2f",_lpSP->ssje);     //实收金额
	       else
		sprintf(value,"%.2f",_lpSP->je);
	       AlignMent=2;
	       break;
      }
    }
   DrawTextEx(Rect.sx+2,Rect.sy+2,value,DBGrid.Columns[x].Width,Co,AlignMent);
  }
  else
  {
   DrawBar(Rect.sx+1,Rect.sy+1,Rect.ex-1,Rect.ey-1,
	   DBGrid.Columns[x].TColor,0xff);
   DrawTextEx(Rect.sx+1,Rect.sy+2,value,DBGrid.Columns[x].Width,Co,
	      DBGrid.Columns[x].TAlignMent);
  }
}
//显示标题
void DrawTitle(void)
{
  int i;
  for(i=0;i<DBGrid.ColCount;i++)
   DrawCell(i,0,DBGrid.Columns[i].TCaption,DBGrid.Columns[i].TFontColor,0);
}
//显示合计行
void DrawSum(int Att)
{
  char value[21];
  double r;
  if(!Att)
   {
    DrawBar(2,286,24,304,DBGrid.Columns[0].Color,0xff);
    DrawTextEx(25,287,"合计笔数",72,clWhite,1);
    DrawBar(360,286,434,304,DBGrid.Columns[3].Color,0xff);
    //DrawTextEx(360,287,"优惠额",84,clWhite,1);
    //DrawTextEx(502,287,"应收额",68,clWhite,1);
   }
  //显示记录数
  sprintf(value,"%d",SPLists->RecordCount);
  DrawBar(100,286,320,300,DBGrid.Columns[1].Color,0xff);
  DrawTextEx(102,287,value,120,clWhite,0);
  if(Att<2)
  {
   //显示顾客要付的金额
   sprintf(value,"%.2f",SPLists->ysje);
   DrawBar(416,309,633,377,clNavy,0xff);
   DrawTextEx(416,314,value,216,clYellow,-2);
  }
  //数量合计
  GetDec(value,SPLists->sl,-1,0);
  DrawBar(380,286,444,304,DBGrid.Columns[2].Color,0xff);
  DrawTextEx(380,287,value,68,clWhite,2);

  //显示优惠额           //优惠价
  r = SPLists->spje-SPLists->ysje;
  if(r<0.01&&r>-0.01) r=0;
  DrawBar(506,286,565,304,DBGrid.Columns[2].Color,0xff);
  sprintf(value,"%.2f",r);
  DrawTextEx(508,287,value,60,clWhite,2);
  //应付金额            //金额
  sprintf(value,"%.2f",SPLists->spje);
  DrawBar(580,286,637,304,DBGrid.Columns[2].Color,0xff);
  DrawTextEx(582,287,value,58,clWhite,2);
  //清空找零区域
  //DrawBar(416,382,633,452,clNavy,0xff);
}

//显示一列
void DrawCol(int x)
{
  int i;
  for(i=1;i<DBGrid.RowCount-1;i++)
   DrawCell(x,i,"OK",DBGrid.Columns[i].FontColor,0);
}
//显示一行
void DrawRow(int y)
{
  int i;
  //通常情况下,y相当于记录号
  //滚屏判断
  for(i=0;i<DBGrid.ColCount;i++)
   DrawCell(i,y,"",DBGrid.Columns[i].FontColor,0);
}
//显示数据
void DrawFixed(void)
{
  int i;
  for(i=1;i<DBGrid.RowCount-1;i++)
   DrawRow(i);
  DrawSum(0);
}
//
void DrawFixedEx(void)
{
  int i;
  for(i=1;i<DBGrid.RowCount-1;i++)
   DrawRow(i);
  DrawSum(2);
}

void PaintDBGrid(void)
{
  int i,x;
  int sx,sy,ex,ey;
  sx=DBGrid.Left;
  sy=DBGrid.Top;
  ex=sx+DBGrid.Width-1;
  ey=sy+DBGrid.Height-1;
  DrawBar(sx,sy,ex,ey,DBGrid.Color,0xff);

  //显示竖线
  x=sx;
  for(i=0;i<DBGrid.ColCount;i++)
  {
   Line(x,sy,x,ey,clSilver,1,COPY_PUT,0xff);
   x+=DBGrid.Columns[i].Width;
  }
  //显示横线
  x=DBGrid.Top;
  for(i=0;i<DBGrid.RowCount;i++)
  {
   Line(sx,x,ex,x,clSilver,1,COPY_PUT,0xff);
   x+=DBGrid.RowHeight;
  }

  if(DBGrid.BorderStyle) //显示边界
    Rectangle(sx,sy,ex,ey,clSilver,clSilver);
  DrawTitle();           //显示台头
  DrawFixed();           //显示数据
}
//
int __MoveScreen(int *y)
{
  int m,l,i,n;
  n=*y;
  //减去列头行和合计行
  l=DBGrid.RowCount-2;    //数据行数
  if(n>DBGrid.TopRows&&n<=l+DBGrid.TopRows)
   {
    *y=*y-DBGrid.TopRows;
    return 1; //可见行
   }
  if(n<=DBGrid.TopRows)          //向下滚动
  {
   m=DBGrid.TopRows-n+1;         //向下滚动的行数
   DBGrid.TopRows-=m;     //顶部不可见行减少
   if(m>=l)               //滚动行数大于等于整屏
    DrawFixed();          //重新显示所有数据
   else
    {
     MoveScreen(0,87,639,86+(l-m)*DBGrid.RowHeight,
		0,87+m*DBGrid.RowHeight);
     for(i=1;i<=m;i++)    //重庆显示被滚动的行
      DrawRow(i);         //显示某行
    }
  }
  else
  {

   m=n-l-DBGrid.TopRows;  //滚动的行数
   DBGrid.TopRows+=m;     //顶部不可见行增加
   if(m>=l)
    DrawFixed();          //重新显示所有数据
   else
    {
     MoveScreen(0,87+m*DBGrid.RowHeight,639,85+l*DBGrid.RowHeight,0,87);
     for(i=l-m;i<=l;i++)    //重庆显示被滚动的行
      DrawRow(i);         //显示某行
    }
  }
 return 0;
}
//显示表格数据
void DrawDBGrid(int DrawAtt,int n)
{
  switch(DrawAtt)
  {
   case 0: PaintDBGrid();//显示全部
	   break;
   case 1: DrawFixed(); //显示数据
	   break;
   case 2: DrawSum(1);   //显示合计行

	   break;
   case 3: if(__MoveScreen(&n)) DrawRow(n);   //显示某行
	   DrawSum(1);
	   break;
   case 4: DrawCol(n);   //显示某列
	   break;
   case 5: if(__MoveScreen(&n)) DrawRow(n);   //显示某行
	   break;
   case 6: DrawFixedEx();
  }

}
//显示标题
void ShowTitle(void)       //
{
}
//显示收银员等
void ShowSyj_Name(void)
{
 DrawText(364,10,"收银机:",clBlack,1);
 DrawText(420,10,Param.SyjNo,clNavy,1);
}
void ShowSyy_Name(void)
{
 DrawText(364,36,"收银员:",clBlack,1);
 DrawText(420,36,Syy_Name,clNavy,1);
}
void ShowBc_Name(void)
{
 char value[3];
 DrawText(484,10,"班  次:",clBlack,1);
 DrawText(540,10,g_bc,clNavy,1);

 switch(__syfs)
 {
   case 0:strcpy(value,"单");
	  break;
   case 1:strcpy(value,"半");
	  break;
   default:strcpy(value,"联");
 }
 RRectangle(591,8,630,30,clBlack,clBlack);
 DrawBar(601,11,627,27,clSilver,0xaa);
 DrawText(603,11,value,clBlack,1);
 DrawText(602,11,value,clYellow,1);


 RRectangle(591,33,630,55,clBlack,clBlack);
 DrawText(595,37,g_gz_modeex,clBlack,1);
 DrawText(594,36,g_gz_modeex,clYellow,1);
}
void ShowLsh_No(void)
{
 char value[5];
 DrawText(484,36,"流水号:",clBlack,1);
 sprintf(value,"%d",SPLists->lsh);
 DrawBar(540,36,590,52,clSilver,0xff);
 DrawText(540,36,value,clNavy,1);
}
void ShowSyInf(void)
{
  RRectangle(358,5,633,58,clBlack,clBlack);
  ShowSyj_Name();
  ShowSyy_Name();
  ShowBc_Name();
  ShowLsh_No();
}
//登录函数
//显示按钮
void ShowButton(TButton *Button,int Att)
{
  int sx,sy,ex,ey,off;
  unsigned char color;
  sx=Button->Left;
  sy=Button->Top;
  ex=sx+Button->Width;
  ey=sy+Button->Height;
  if(Button->Ctl3D)
  {
   RectangleFill(sx,sy,ex,ey,clSilver,clBlack,clSilver,0xff);
   Rectangle(sx+1,sy+1,ex-1,ey-1,clWhite,clAqua);
  }
  else
  {
   sx++;
   sy++;
   ex--;
   ey--;
   if(Button->State&&Att) //选中
    RRectangle(sx,sy,ex,ey,clWhite,clBlack);
   else
    RRectangle(sx,sy,ex,ey,clNavy,clNavy);
  }
  off=(Button->Height-16)/2;
  color=Button->FontColor;
  if(Button->State&&Att)
   color=clYellow;
  DrawTextEx(sx,sy+off,Button->Caption,Button->Width,color,1);
}
//
void Window(int sx,int sy,int ex,int ey,unsigned char color,
	    char *caption,int Att)
{
  //定义两个按钮
  TButton OkButton={2001,3,0,0,68,21,clSilver,clBlack,"确定",1,0};
  TButton CancelButton={2001,4,0,0,68,21,clSilver,clBlack,"取消",1,0};
  int k;
  if(!Att)
   k=(ex-sx-144)/3;
  else
   k=(ex-sx-72)/2;
  OkButton.Left=sx+k;
  OkButton.Top=ey-38;
  CancelButton.Left=ex-k-72;
  CancelButton.Top=ey-38;
  GetImage(sx,sy,ex,ey);
  DrawBar3d(sx,sy,ex-3,ey-3,color,0xff,clBlack,0xff,3,clGreen,clGreen);
  RectangleFill(sx+3,sy+3,ex-6,sy+23,clBlack,clWhite,clNavy,0xff);
  DrawText(sx+5,sy+5,caption,clWhite,1);
  switch(Att)
  {
   case 0:ShowButton(&CancelButton,0);
   case 1:ShowButton(&OkButton,0);               //显示按钮
	  break;
   case 2:ShowButton(&CancelButton,0);
	  break;
   case 3:ShowButton(&CancelButton,0);
   default:break;
  }
}
//消息框
int MsgBox(int sx,int sy,int ex,int ey,unsigned char color,
	   char *caption,int Att)
{
  int k;
  Msg *Message;
  Window(sx,sy,ex,ey,color,"提示",Att);
  k=sy+(ey-sy)/2-12;
  DrawText(sx+32,k,caption,clBlack,1);
  k=2;
  ClearKey();
  while(k==2)
  {
   Message = Getkey();
   if(Message->type==-1)
    switch(Message->h.RetKey)
    {
     case ESCKEY:k=0;
		 break;
     case CRKEY: if(Att<3) k=1;
		 break;
    }
  }
  PutImage(sx,sy);
  return k;
}
//信息框
int MsgBoxEx(char *caption,int Att)
{
  int l,w;
  w=strlen(caption)*8+96-Att*16;
  l=(640-w)/2;
  w+=l;
  return MsgBox(l,120,w,240,clSilver,caption,Att);
}
//密码输入窗口(PW-密码),成功时返回1,否则返回0
int InPutPassWord(char *PW)
{
  int sx=200,sy=120,ex=439,ey=240;
  Msg *Message;
  int bLoop=2;

  TEdit PWEdit={2002,1,sx+96,sy+48,120,22,clWhite,clBlack,"",0,0,0,0,1};
  Window(sx,sy,ex,ey,clSilver,"密码输入",0);
  DrawText(sx+16,sy+50,"请输入密码",clBlack,1);
  InBuffer(-1,EDITPASSW,0,0);
  while(bLoop==2)
  {
   Message=Getkey();
   switch(Message->h.RetKey)
   {
    case EDITPASSW:TextEdit(&PWEdit,10,1,1);
		   break;
    case CRKEY:    if(!strcmp(PW,PWEdit.Text))  //密码正确
		    bLoop=1;
		   else MsgBoxEx("密码错误!",1);
		   break;
    case ESCKEY:   bLoop=0;
   }
   if(bLoop==2&&!BiosKey()) InBuffer(-1,EDITPASSW,0,0);
  }
  PutImage(sx,sy);
  return bLoop;
}
//系统锁定
void SysLock(void)
{
  Msg *Message;
  char value[11];
  int j=0;

  if(Param.SyjLx[0]=='7') system("shutdown>null");

  Window(200,120,439,240,clSilver,"系统锁定",1);
  DrawText(216,166,"你可以直接关闭计算机电源.",clBlack,1);
  ClearKey();
  while(1)
  {
   Message=Getkey();
   if(Message->h.RetKey==BSKEY&&j>0)
   {
    j--;
    value[j]='\0';
   }
   else
    if(j<10)
    {
     value[j++]=(char)Message->h.LKey;
	 value[j]='\0';
     if(!strcmp(value,"fortuna")) break;
    }
  }
  PutImage(200,120);
}
//收银员登录
short Login(void)
{
  int bLoop=2,lCount=10; //登录计数
  char value[31];
  //定义两个标签
  TLabel SyfsLabel={2003,0,176,148,50,22,clSilver,clBlack,clYellow,0,"收银方式※",0};

  TLabel UserLabel={2003,0,176,176,50,22,clSilver,clBlack,clYellow,0,"收银员代码",0};
  TLabel PassWLabel={2003,0,176,204,50,22,clSilver,clBlack,clYellow,0,"收银员密码",0};

  TLabel LoginLabel={2003,0,260,232,120,22,clSilver,clMaroon,clYellow,0,"",0};
  //定义两个编辑框
  TEdit SyfsEdit={2002,0,260,146,96,22,clWhite,clBlack,"2",0,0,0,0,1};
  TEdit UserEdit={2002,1,260,174,96,22,clWhite,clBlack,"",0,0,0,0,1};
  TEdit PassWEdit={2002,2,260,202,96,22,clWhite,clBlack,"",0,0,0,0,1};
  //定义两个按钮
  TButton OkButton={2001,3,224,256,72,21,clSilver,clBlack,"确定",1,0};
  TButton CancelButton={2001,4,344,256,72,21,clSilver,clBlack,"取消",1,0};
  //定义消息指针
  Msg *Message;
  //保存屏幕区域
  DrawBar(0,0,639,487,clNavy,0xff);  //清屏幕
  DrawBar3d(159,112,476,290,clSilver,0xff,
		clBlack,0xff,3,clBlack,clBlack);
  RectangleFill(162,115,474,135,clBlack,clWhite,clNavy,0xff);
  DrawText(164,117,"登录...",clWhite,1);
  //显示标签
  ShowLabel(&SyfsLabel,NULL);

  RRectangle(362,145,466,224,clNavy,clNavy);
  DrawText(366,148,"0-单机收银",clFuchsia,1);
  DrawText(366,176,"1-半单机收银",clFuchsia,1);
  DrawText(366,204,"2-联机收银",clFuchsia,1);
  ShowLabel(&UserLabel,NULL);
  ShowLabel(&PassWLabel,NULL);
  //显示输入框

  TextEdit(&SyfsEdit,1,0,0);
  TextEdit(&UserEdit,10,0,0);
  TextEdit(&PassWEdit,10,0,1);
  //显示按钮
  ShowButton(&OkButton,0);
  ShowButton(&CancelButton,0);
  //
  InBuffer(-2,EDITSYFS,0,0);
  //消息循环
  while(bLoop>1)
  {
    Message=Getkey();
    switch(Message->type)
    {
      case -2: switch(Message->h.RetKey)  //是功能键
	      {
	       case EDITSYFS:
		    TextEdit(&SyfsEdit,1,1,0);
		    break;
	       case EDITUSER:
		    TextEdit(&UserEdit,10,1,0);
		    break;
	       case EDITPASSW:
		    TextEdit(&PassWEdit,10,1,1);
		    break;
	       case WM_LOGIN:            //收银员登录
		    if(!__sqlok||!strcmp("0",SyfsEdit.Text)) //单计收银
		     __syfs=0;
		    else if(!strcmp("1",SyfsEdit.Text)) //半单机收银
			  __syfs=1;
			 else
			  __syfs=2;
		    strcpy(Syy_No,UserEdit.Text);
		    strcpy(Syy_mm,PassWEdit.Text);
		    bLoop=sql_login();
		    lCount--;
		    if(!bLoop&&lCount)           //登录失败
		     {
		      sprintf(value,"你还有%d次登录机会!",lCount);
		      ShowLabel(&LoginLabel,value);
		      bLoop=2;
		      InBuffer(-2,EDITUSER,0,0);
		     }
		    break;
	       case ALT_C:
		    InBuffer(-1,ESCKEY,0,0);

		    break;
	       case ALT_O:
		    InBuffer(-1,CRKEY,PassWEdit.Handle,0);
		    break;
	       default:InBuffer(-2,EDITSYFS,0,0);
	      }
	      break;
     case -1: switch(Message->h.RetKey)  //是控制键
	      {
	       case CRKEY:       //登录
		    switch(Message->x)
		    {
		     case 0:
			  InBuffer(-2,EDITUSER,0,0);
			  break;
		     case 1:     //是UserEdit
			  InBuffer(-2,EDITPASSW,0,0);
			  break; //焦点移动到密码编辑框
		     case 2:     //是PassWEdit
		     case 3:     //是确定按钮
			  InBuffer(-2,WM_LOGIN,0,0); //

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -