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

📄 qtsyba~1.c

📁 dos下pos机程序 连接sybase数据库 使用Microsoft c7 编译
💻 C
📖 第 1 页 / 共 5 页
字号:
	   case 7: 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[11];
  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);
  }
  //显示优惠额
  sprintf(value,"%.2f",SPLists->spje-SPLists->ysje);
  DrawBar(450,286,504,304,DBGrid.Columns[2].Color,0xff);
  DrawTextEx(452,287,value,57,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(368,10,"收银机:",clBlack,1);
 DrawText(424,10,g_syjh,clBlue,1);
}
void ShowSyy_Name(void)
{
 DrawText(368,36,"收银员:",clBlack,1);
 DrawText(424,36,Syy_Name,clBlue,1);
}
void ShowBc_Name(void)
{
 DrawText(484,10,"班  次:",clBlack,1);
 DrawText(540,10,g_bc,clBlue,1);

 DrawText(595,37,g_gz_modeex,clBlack,1);
 DrawText(594,36,g_gz_modeex,clNone,1);
}
void ShowLsh_No(void)
{
 char value[5];
 DrawText(484,36,"流水号:",clBlack,1);
 sprintf(value,"%d",SPLists->lsh);
 DrawBar(540,36,588,54,clSilver,0xff);
 DrawText(540,36,value,clBlue,1);
}
void ShowSyInf(void)
{
  Rectangle(359,5,633,58,clNavy,clNavy);
  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,clMaroon);
  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,23,clSilver,clBlack,"确定",1,0};
  TButton CancelButton={2001,4,0,0,68,23,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);
  ShowButton(&OkButton,0);               //显示按钮
  if(!Att)
   ShowButton(&CancelButton,0);
}
//消息框
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;
  while(k==2)
  {
   Message = Getkey();
   if(Message->type==-1)
    switch(Message->h.RetKey)
    {
     case ESCKEY:k=0;
		 break;
     case CRKEY: 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;
  Window(200,120,439,240,clSilver,"系统锁定",1);
  DrawText(216,166,"你可以直接关闭计算机电源.",clBlack,1);
  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,"159357258")) break;
    }
  }
  PutImage(200,120);
}
//收银员登录
short Login(void)
{
  int bLoop=2,lCount=3; //登录计数
  char value[31];
  //定义两个标签
  TLabel UserLabel={2003,0,224,160,50,22,clSilver,clBlack,clYellow,0,"收银员代码",0};
  TLabel PassWLabel={2003,0,224,194,50,22,clSilver,clBlack,clYellow,0,"收银员密码",0};

  TLabel LoginLabel={2003,0,240,224,120,22,clSilver,clBlue,clYellow,0,"",0};
  //定义两个编辑框
  TEdit UserEdit={2002,1,308,158,100,22,clWhite,clBlack,"",0,0,0,0,1};
  TEdit PassWEdit={2002,2,308,192,100,22,clWhite,clBlack,"",0,0,0,0,1};
  //定义两个按钮
  TButton OkButton={2001,3,224,245,72,23,clSilver,clBlack,"确定",1,0};
  TButton CancelButton={2001,4,344,245,72,23,clSilver,clBlack,"取消",1,0};
  //定义消息指针
  Msg *Message;
  //保存屏幕区域
  GetImage(176,120,463,288);
  DrawBar3d(179,120,460,283,clSilver,0xff,
		clBlack,0xff,3,clBlack,clBlack);
  RectangleFill(182,123,457,143,clBlack,clWhite,clNavy,0xff);
  DrawText(184,125,"登录...",clWhite,1);
  //显示标签
  ShowLabel(&UserLabel,NULL);
  ShowLabel(&PassWLabel,NULL);
  //显示输入框
  TextEdit(&UserEdit,10,0,0);
  TextEdit(&PassWEdit,10,0,1);
  //显示按钮
  ShowButton(&OkButton,0);
  ShowButton(&CancelButton,0);
  //
  InBuffer(-2,EDITUSER,0,0);
  //消息循环
  while(bLoop>1)
  {
    Message=Getkey();
    switch(Message->type)
    {
	 case -2: switch(Message->h.RetKey)  //是功能键
	      {
	       case EDITUSER:
		    TextEdit(&UserEdit,10,1,0);
		    break;
	       case EDITPASSW:
		    TextEdit(&PassWEdit,10,1,1);
		    break;
	       case WM_LOGIN:            //收银员登录
		    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,EDITUSER,0,0);
	      }
	      break;
     case -1: switch(Message->h.RetKey)  //是控制键
	      {
	       case CRKEY:       //登录
			switch(Message->x)
		    {
		     case 1:     //是UserEdit
			  InBuffer(-2,EDITPASSW,0,0);
			  break; //焦点移动到密码编辑框
		     case 2:     //是PassWEdit
		     case 3:     //是确定按钮
			  InBuffer(-2,WM_LOGIN,0,0); //
			  break; //发送登录消息
		     case 4:
			  InBuffer(-1,ESCKEY,0,0); //
			  break;
		     default:InBuffer(-2,EDITUSER,0,0);
		    }
		    break;
	       case TABKEY:
	       case F2KEY:
		    if(Message->x==2)
		     InBuffer(-2,EDITUSER,0,0);
		    else
			 InBuffer(-2,EDITPASSW,0,0);
		    break;
	      }
	      break;
     default:InBuffer(-2,EDITUSER,0,0);
    }
  }
  PutImage(176,120);
  return bLoop;
}
//功能列表
//CallAtt为调用方式
int CallFun(int CallAtt,unsigned char Color)
{
  TButton FButtons[12]=
	{{2001,1,4,390,50,21,clSilver,Color,"下班",0,0},
	 {2001,1,54,390,50,21,clSilver,Color,"交班",0,0},
	 {2001,1,104,390,50,21,clSilver,Color,"检查",0,0},
	 {2001,1,154,390,50,21,clSilver,Color,"挂起",0,0},
	 {2001,1,204,390,50,21,clSilver,Color,"解挂",0,0},
	 {2001,1,254,390,50,21,clSilver,Color,"暂停",0,0},
	 {2001,1,304,390,50,21,clSilver,Color,"打折",0,0},
	 {2001,1,4,412,72,21,clSilver,Color,"当班统计",0,0},
	 {2001,1,76,412,72,21,clSilver,Color,"销售凭证",0,0},
	 {2001,1,148,412,62,21,clSilver,Color,"计算器",0,0},
	 {2001,1,210,412,72,21,clSilver,Color,"打开钱箱",0,0},
	 {2001,1,282,412,72,21,clSilver,Color,"系统设置",0,0}};
  int i,k,bLoop=1;
  Msg *Message;
  //显示
  Rectangle(1,388,357,435,clBlack,clWhite);//功能列表框
  FButtons[0].State=1;
  for(i=0;i<12;i++)
   ShowButton(&FButtons[i],i==0&&CallAtt);
  if(CallAtt)
  {
   k=0;
   FButtons[0].State=1;
   while(bLoop)
   {
	Message=Getkey();
    switch(Message->type)
    {
     case -1://控制键
	  switch(Message->h.RetKey)
	  {
	   case WM_SHOWBUTTON:
		ShowButton(&FButtons[Message->x],1);
		break;
	   case CRKEY:
		InBuffer(-4,CN_XB+k,k,0);
		bLoop=0;
		break;
	   case TABKEY:
		FButtons[k].State=0;
		InBuffer(-1,WM_SHOWBUTTON,k,0);
		k+=Message->x;
		k=(k<0)?11:k;
		k=(k>11)?0:k;
		FButtons[k].State=1;
		InBuffer(-1,WM_SHOWBUTTON,k,0);
		break;
	   case NEXTROW://zh
		FButtons[k].State=0;
		InBuffer(-1,WM_SHOWBUTTON,k,0);
		k=fmod(k+7,12);
		FButtons[k].State=1;
		InBuffer(-1,WM_SHOWBUTTON,k,0);

⌨️ 快捷键说明

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