c语言条码
㈠ c语言条形码的输入
一、条形码的读取
用过键盘口式的扫条码工具的朋友就知道,它就如同在键盘上按下数字键一样,基本不需任何编程和处理。但如果你使用的是其它接口的话,可能你就要为该设备编写通讯代码了。以下有一段简单的25针串口的条码读取器通讯代码。
Option Explicit
Dim sData As String
Private Sub Form_Load()
With MSComm1
.CommPort = 3 '设为COM3,试运行的系统而定,你可提供一个Combox让用户选择。
.PortOpen = True '打开通讯端口
End With
End Sub
Private Sub MSComm1_OnComm()
Dim EndPos As Integer
Select Case MSComm1.CommEvent
Case comEvReceive '当有数据传送过来时
sData = sData & Trim(MSComm1.Input)
'检索回车,通常读卡机每组数据结尾都返回一个回车作为结束符
EndPos = InStr(1, sData, Chr(13))
If EndPos = 0 Then '如果未结束就继续努力
Else '读完一组。
lblBarCode.Caption = sData '显示一组条形码
With lstBarCode
.AddItem Mid(sData, 1, EndPos - 1) '添加一组条形码到列表
End With
sData = "" '清空
End If
End Select
End Sub
Private Sub cmdEnd_Click()
MSComm1.PortOpen = False '关闭端口
End
End Sub
二、条形码的生成
看完以上关于条码读取的代码是否觉得很容易呢?对,在VB上编程本来就不难。以下关于条形码生成的代码也是很容易理解,只需使用一个OFFICE的附带的BarCode控件就可以轻松打印出11种不同标准的条形码,足以满足我们的要求。想起我书架上的一本书中的一篇用Turbo C编写条形码打印程序文章,长篇大论,那时不知看了n天,打了n小时字结果也不尽人意,现在真是幸福多了:)。废话说完,得回归正题。且看条形码生成的代码及有关说明。
源代码主要由两个窗体(frmMain主窗体和frmOption条码设置窗体)和两个模块组成(modGetScreen.bas、SysDLG32.bas)。考虑到篇幅,这里只列出部分较为关键的代码。
新建一个标准工程,添加一个名为(Microsoft Access BarCode Control9)的条形码部件,并添加一个条码控件到窗口,并将窗口改名为frmMain,如图所示。由于控件比较多,这里不便细说,详细内容请看源代码。
模块modGetScreen.bas代码如下:
Option Explicit
'声明BitBlt、GetDesktopWindow、GetWindowDC、ReleaseDC这几个API函数略
Public RegUser As Boolean
Sub GetObjImage1(Obj As Object, OwnerForm As PictureBox, Picture1 As PictureBox)
'hDC
Dim hWndDesk As Long
Dim hDCDesk As Long
'区域表达变量
Dim x As Long
Dim y As Long
Dim w As Long
Dim h As Long
x = Obj.Left Screen.TwipsPerPixelX
y = Obj.Top Screen.TwipsPerPixelY
w = Obj.Width Screen.TwipsPerPixelX
h = Obj.Height Screen.TwipsPerPixelY
hDCDesk = OwnerForm.hdc
'取出图像
Call BitBlt(Picture1.hdc, 0, 0, w, h, hDCDesk, x, y, vbSrcCopy)
Call ReleaseDC(hWndDesk, hDCDesk)
End Sub
主窗体frmMain.frm部分代码如下:
Private Sub cmdPrint_Click()
'生成条形码图像
Dim r As Long, i As Integer, t As String,cfile As String '临时变量
t = BarCode
For i = 0 To Val(Times) - 1
BarCode1.Value = BarCode + i
DoEvents
Picture1.Refresh
GetObjImage1 BarCode1, Conel, Picture1
If RegUser = False Then '如果未注册添加MASK标记
Picture1.PaintPicture Picture2.Picture, 300, 300
End If
If Dir(SavePath, vbDirectory) = "" Then MkDir SavePath
SavePath = SavePath & IIf(Right(SavePath, 1) <> "", "", "")
cfile = SavePath & BarCode1.Value & ".bmp"
SavePicture Picture1.Image, cfile '将条形码保存为图像文件以便打印
Next
BarCode = t
End Sub
条形码设置窗体frmOption.frm代码如下:
Option Explicit
'条形码设置模块
Private Sub cboBig_Click()
BarCode1.Style = cboBig.ListIndex '改变标准
End Sub
Private Sub cboDirection_Click()
BarCode1.Direction = cboDirection.ListIndex '改变方向
End Sub
Private Sub cboLine_Click()
BarCode1.LineWeight = cboLine.ListIndex '改变线宽
End Sub
Private Sub cboSmall_Click()
BarCode1.SubStyle = cboSmall.ListIndex '改变样式
End Sub
Private Sub Check1_Click()
BarCode1.ShowData = Check1.Value '是否显示数据
End Sub
Private Sub cmdChange_Click()
'设置长、宽大小
BarWidth = BarCode1.Height
BarHeight = BarCode1.Width
cmdRefresh_Click
End Sub
Private Sub cmdOK_Click()
'传送条形码设定到主界面
With frmMain.BarCode1
.LineWeight = BarCode1.LineWeight
.Style = BarCode1.Style
.SubStyle = BarCode1.SubStyle
.Direction = BarCode1.Direction
.Width = BarCode1.Width
.Height = BarCode1.Height
.ShowData = BarCode1.ShowData
Me.Hide
End With
With frmMain
.Picture1.Width = .BarCode1.Width
.Picture1.Height = .BarCode1.Height
.Conel.Width = .BarCode1.Width
.Conel.Height = .BarCode1.Height
End With
End Sub
Private Sub cmdRefresh_Click()
BarCode1.Width = BarWidth
BarCode1.Height = BarHeight
End Sub
Private Sub Form_Load()
LoadBarInfo
BarWidth = BarCode1.Width
BarHeight = BarCode1.Height
End Sub
Sub LoadBarInfo() '初始化选项
LoadBigClass cboBig
LoadSmallClass cboSmall
LoadLineSize cboLine
LoadDirection cboDirection
End Sub
Sub LoadBigClass(cbo As ComboBox) '条码标准
With cbo
.AddItem "UPC-A"
.AddItem "UPC-E"
.AddItem "EAN-13"
.AddItem "EAN-8"
.AddItem "Case Code"
.AddItem "Codabar (NW-T)"
.AddItem "Code-39"
.AddItem "Code-128"
.AddItem "U.S. Postnet"
.AddItem "U.S. Postal FIM"
.AddItem "JP Post"
.ListIndex = 2
End With
End Sub
Sub LoadSmallClass(cbo As ComboBox) '条码样式
With cbo
.AddItem "Standard"
.AddItem "2-Digit Supplement"
.AddItem "5-Digit Supplement"
.AddItem "POS Case Code"
.ListIndex = 0
End With
End Sub
许多人在编写数据库应用程序时,都想要加上条形码功能加强工作效率,尤其是销售管理,图书馆管理这类流量大的应用软件,但由于条形码技术难以掌握、标谁又多以及过去的技术种种原因,使得许多人望而却步。本文介绍的一套简单实用的条形码解决方法,希望能帮助各位完善软件系统的功能。
㈡ C语言,扫描条码(就是输入一串字符,不要想的太难)
首先要建立一个结构:
typedef struct
{
char code[50];
int count;
}USERCODE;
然后建立一个数组:
USERCODE myarray[MAX_CODE]; //MAX可以设为条码种类数。
然后就维护这个数组好了。
首先字符串和count初始化。
接着编写查找功能。
比较简单的法子是做一个循环,一个一个的比较。
for(int i=0;i<MAX_CODE;i++)
{
if(...)//myarray[i].code和输入的字符串比较,如果相等就给myarray[i].count++
}
最后是查询功能,还是用循环方式,比较关键字符串,条件成立就printf("%d",myarray[i].count)
当然查找和查询功能可以采用一些算法,如果你是按照顺序填充数组,就可以采用对半法。如果数组不是很大,不超过100,简单循环也没什么问题。
㈢ C语言编写条形码识别
使用C语言做条形码可以按照以下流程:
1 查找条形码生成规则,或者直接找C语言的开源代码,制作封装字符串转条形码的接口函数;
2 读入要转换的数据;
3 将要转换的数据,通过1中的函数接口,转为图形点阵值。由于条形码只有黑白两色,所以这里可以用0,1两种值用矩阵表示;
4 根据编译器,启动图形界面,初始化图形区域;
5 在图形区域的空间内,按照0 1值,在对应点上上色,其中0上白色,1上黑色。
至此,条形码显示成功。
㈣ 怎样用C语言做一个条形码
一、条形码的读取
用过键盘口式的扫条码工具的朋友就知道,它就如同在键盘上按下数字键一样,基本不需任何编程和处理。但如果你使用的是其它接口的话,可能你就要为该设备编写通讯代码了。以下有一段简单的25针串口的条码读取器通讯代码。
Option Explicit
Dim sData As String
Private Sub Form_Load()
With MSComm1
.CommPort = 3 '设为COM3,试运行的系统而定,你可提供一个Combox让用户选择。
.PortOpen = True '打开通讯端口
End With
End Sub
Private Sub MSComm1_OnComm()
Dim EndPos As Integer
Select Case MSComm1.CommEvent
Case comEvReceive '当有数据传送过来时
sData = sData & Trim(MSComm1.Input)
'检索回车,通常读卡机每组数据结尾都返回一个回车作为结束符
EndPos = InStr(1, sData, Chr(13))
If EndPos = 0 Then '如果未结束就继续努力
Else '读完一组。
lblBarCode.Caption = sData '显示一组条形码
With lstBarCode
.AddItem Mid(sData, 1, EndPos - 1) '添加一组条形码到列表
End With
sData = "" '清空
End If
End Select
End Sub
Private Sub cmdEnd_Click()
MSComm1.PortOpen = False '关闭端口
End
End Sub
二、条形码的生成
看完以上关于条码读取的代码是否觉得很容易呢?对,在VB上编程本来就不难。以下关于条形码生成的代码也是很容易理解,只需使用一个OFFICE的附带的BarCode控件就可以轻松打印出11种不同标准的条形码,足以满足我们的要求。想起我书架上的一本书中的一篇用Turbo C编写条形码打印程序文章,长篇大论,那时不知看了n天,打了n小时字结果也不尽人意,现在真是幸福多了:)。废话说完,得回归正题。且看条形码生成的代码及有关说明。
源代码主要由两个窗体(frmMain主窗体和frmOption条码设置窗体)和两个模块组成(modGetScreen.bas、SysDLG32.bas)。考虑到篇幅,这里只列出部分较为关键的代码。
新建一个标准工程,添加一个名为(Microsoft Access BarCode Control9)的条形码部件,并添加一个条码控件到窗口,并将窗口改名为frmMain,如图所示。由于控件比较多,这里不便细说,详细内容请看源代码。
模块modGetScreen.bas代码如下:
Option Explicit
'声明BitBlt、GetDesktopWindow、GetWindowDC、ReleaseDC这几个API函数略
Public RegUser As Boolean
Sub GetObjImage1(Obj As Object, OwnerForm As PictureBox, Picture1 As PictureBox)
'hDC
Dim hWndDesk As Long
Dim hDCDesk As Long
'区域表达变量
Dim x As Long
Dim y As Long
Dim w As Long
Dim h As Long
x = Obj.Left Screen.TwipsPerPixelX
y = Obj.Top Screen.TwipsPerPixelY
w = Obj.Width Screen.TwipsPerPixelX
h = Obj.Height Screen.TwipsPerPixelY
hDCDesk = OwnerForm.hdc
'取出图像
Call BitBlt(Picture1.hdc, 0, 0, w, h, hDCDesk, x, y, vbSrcCopy)
Call ReleaseDC(hWndDesk, hDCDesk)
End Sub
主窗体frmMain.frm部分代码如下:
Private Sub cmdPrint_Click()
'生成条形码图像
Dim r As Long, i As Integer, t As String,cfile As String '临时变量
t = BarCode
For i = 0 To Val(Times) - 1
BarCode1.Value = BarCode + i
DoEvents
Picture1.Refresh
GetObjImage1 BarCode1, Conel, Picture1
If RegUser = False Then '如果未注册添加MASK标记
Picture1.PaintPicture Picture2.Picture, 300, 300
End If
If Dir(SavePath, vbDirectory) = "" Then MkDir SavePath
SavePath = SavePath & IIf(Right(SavePath, 1) <> "", "", "")
cfile = SavePath & BarCode1.Value & ".bmp"
SavePicture Picture1.Image, cfile '将条形码保存为图像文件以便打印
Next
BarCode = t
End Sub
条形码设置窗体frmOption.frm代码如下:
Option Explicit
'条形码设置模块
Private Sub cboBig_Click()
BarCode1.Style = cboBig.ListIndex '改变标准
End Sub
Private Sub cboDirection_Click()
BarCode1.Direction = cboDirection.ListIndex '改变方向
End Sub
Private Sub cboLine_Click()
BarCode1.LineWeight = cboLine.ListIndex '改变线宽
End Sub
Private Sub cboSmall_Click()
BarCode1.SubStyle = cboSmall.ListIndex '改变样式
End Sub
Private Sub Check1_Click()
BarCode1.ShowData = Check1.Value '是否显示数据
End Sub
Private Sub cmdChange_Click()
'设置长、宽大小
BarWidth = BarCode1.Height
BarHeight = BarCode1.Width
cmdRefresh_Click
End Sub
Private Sub cmdOK_Click()
'传送条形码设定到主界面
With frmMain.BarCode1
.LineWeight = BarCode1.LineWeight
.Style = BarCode1.Style
.SubStyle = BarCode1.SubStyle
.Direction = BarCode1.Direction
.Width = BarCode1.Width
.Height = BarCode1.Height
.ShowData = BarCode1.ShowData
Me.Hide
End With
With frmMain
.Picture1.Width = .BarCode1.Width
.Picture1.Height = .BarCode1.Height
.Conel.Width = .BarCode1.Width
.Conel.Height = .BarCode1.Height
End With
End Sub
Private Sub cmdRefresh_Click()
BarCode1.Width = BarWidth
BarCode1.Height = BarHeight
End Sub
Private Sub Form_Load()
LoadBarInfo
BarWidth = BarCode1.Width
BarHeight = BarCode1.Height
End Sub
Sub LoadBarInfo() '初始化选项
LoadBigClass cboBig
LoadSmallClass cboSmall
LoadLineSize cboLine
LoadDirection cboDirection
End Sub
Sub LoadBigClass(cbo As ComboBox) '条码标准
With cbo
.AddItem "UPC-A"
.AddItem "UPC-E"
.AddItem "EAN-13"
.AddItem "EAN-8"
.AddItem "Case Code"
.AddItem "Codabar (NW-T)"
.AddItem "Code-39"
.AddItem "Code-128"
.AddItem "U.S. Postnet"
.AddItem "U.S. Postal FIM"
.AddItem "JP Post"
.ListIndex = 2
End With
End Sub
Sub LoadSmallClass(cbo As ComboBox) '条码样式
With cbo
.AddItem "Standard"
.AddItem "2-Digit Supplement"
.AddItem "5-Digit Supplement"
.AddItem "POS Case Code"
.ListIndex = 0
End With
End Sub
许多人在编写数据库应用程序时,都想要加上条形码功能加强工作效率,尤其是销售管理,图书馆管理这类流量大的应用软件,但由于条形码技术难以掌握、标谁又多以及过去的技术种种原因,使得许多人望而却步。本文介绍的一套简单实用的条形码解决方法,希望能帮助各位完善软件系统的功能。文章源代码可以发信到[email protected]索取。
㈤ 怎么样用C语言做条形码
就是生成一组数字,把数字打印出来就ok了,不过具体是有难度的没用c没写过这个
㈥ c语言!!!怎样用char来编13位的barcode啊
商品条码数字的含义:
以条形码 693-69838-0001-3 为例
此条形码分为4个部分,从左到右分别为:
1-3位:共3位,对应该条码的693,是中国的国家代码之一。(690--695都是中国的代码,由国际上分配);
4-8位:共5位,对应该条码的69838,代表着生产厂商代码,由厂商申请,国家分配;
9-12位:共4位,对应该条码的0001,代表着厂内商品代码,由厂商自行确定;
第13位:共1位,对应该条码的3,是校验码,依据一定的算法,由前面12位数字计算而得到。第13位的计算方法:把条形码从右往左依次编序号为“……4,3,2,1。”从序号二开始把所有偶数序号位上的数相加求和,用求出的和乘3,再从序号三开始把所有奇数序号上的数相加求和,用求出的和加上刚才偶数序号上的数的和乘3的积,然后得出和。再用大于这个和的最小的10的倍数减去这个和,就得出校验码。
所以,编写barcode前12位是输入的要从其他的地方获取,只有第13位需要计算,程序应该为:(已经经过运行是可行的)
#include<stdio.h>
main()
{char c[15];
int i,dan,sh;
printf("请输入前12位:\n");
scanf("%s",c);
for(i=0;i<12;i++)
{
if(c[i]<48||c[i]>57){printf("输入出错.");break;} \*计算第13位*\
if(i%2==1)
dan+=c[i]-48;
else sh+=c[i]-48;}
sh=sh*3+dan;
c[12]=(10-sh%10)+48;
for(i=0;i<13;i++) \*输出*\
{if(i==3||i==8||i==12)printf("-");
printf("%c",c[i]);
}
printf("\n");
}
如乱的输入:
#include<stdio.h>
main()
{char c[20];
int i,dan,sh;
printf("请输入:\n");
scanf("%s",c);
for(i=0;i!='\0';i++) \*清除非0~9的数字*\
if(c[i]<48||c[i]>57)c[i]=c[++i];
for(i=0;i<12;i++) \*计算第13位*\
{
if(c[i]<48||c[i]>57){c[i]=c[++i];break;}
if(i%2==1)
dan+=c[i]-48;
else sh+=c[i]-48;}
sh=sh*3+dan;
c[12]=(10-sh%10)+48;
for(i=0;i<13;i++) \*输出*\
{if(i==3||i==8||i==12)printf("-");
printf("%c",c[i]);
}
printf("\n");
}
㈦ 如何用C语言输出 EAN-13条形码
这里有答案资料,希望有帮助:http://..com/question/4584440.html
㈧ 输入一个条码判断是不是教材教材的条码规则为长度13位前缀9787用c语言编程求解答
按照问题,程序应包含以下功能:
一、条码字符串输入及验证。
二、前缀字符串和条码字符串比较,方法很多:
1、可遍历字符串单字符比较。
2、将条码字符串第5个字符置0,然后用strcmp函数比较。
3、在输入条码字符串同时验证前4位的输入。
下面用两种方式代码演示:
#include<stdio.h>
#include<string.h>
#define M 13//条码最大位数
#define N 4//规则前缀位数
#define NS "9787"//前缀,位数必须与N对应
int inputAndCheck(char str1[],char str2[]);//方法一:输入的同时比较(自带位数限制)。是返回1,不是返回0
int checkStr(char str1[],char str2[]);//方法二:输入后比较用字符串函数比较(自带位数检测,小于M位返回0,多余13位截取),是返回1,不是返回0
int main()
{
char s1[N+1]=NS,s2[M+1]={0};
printf("方法一:输入同时比较 ");
if(inputAndCheck(s1,s2))printf("前%d位字符%s是教材条码 ",M,s2);
else printf("前%d位字符%s不是是教材条码 ",M,s2);
printf(" 方法二:输入后比较用字符串函数比较 ");
memset(s2,0,sizeof(char)*(M+1));//同一个变量用于两种方法演示,这里清空一下,实际代码可删除!!
printf("演示用的scanf函数输入,请不要超出%d位:",M),scanf("%s",s2);//注意:checkStr函数会检测参数长度,但这里用scanf输入,其本身不能数组越界
if(checkStr(s1,s2))printf("前%d位字符%s是教材条码 ",M,s2);
else printf("前%d位字符%s不是是教材条码 ",M,s2);
return 0;
}
int checkStr(char str1[],char str2[])
{
char cSave;
int flag=0;
if(strlen(str2)<M) return flag;
cSave=str2[N];
str2[N]=0;
flag=strcmp(str1,str2);
str2[N]=cSave;
str2[M]=0;//多余截取
return !flag;
}
int inputAndCheck(char str1[],char str2[])
{
int i=0,flag=1;
printf("输入13位(多余位数将被忽略):");
while(i<M)
{
str2[i]=getchar();
if(str2[i]==' ') continue;//位数不足,跳过回车键继续输入
if(i<N && str1[i]!=str2[i]) flag=0;
i++;
}
str2[M]=0;
while(getchar()!=' ');//清空输入缓存,避免干扰后续字符串输入
return flag;
}
㈨ C语言程序,扫描条码(就是输入一串字符,不要想的太难)
其实就是一个数据库查询问题而已,
因为首先,的确不用管条码机怎么输入的,它相当于只有数字键及少数几个字母键的一个自动输入的键盘,模拟按键,需要做的输入焦点设置好,读取输入就行了。
读取后再查询,就不属于条码机的范畴了