當前位置:首頁 » 編程語言 » c語言條碼

c語言條碼

發布時間: 2022-07-22 09:35:36

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語言程序,掃描條碼(就是輸入一串字元,不要想的太難)

其實就是一個資料庫查詢問題而已,
因為首先,的確不用管條碼機怎麼輸入的,它相當於只有數字鍵及少數幾個字母鍵的一個自動輸入的鍵盤,模擬按鍵,需要做的輸入焦點設置好,讀取輸入就行了。

讀取後再查詢,就不屬於條碼機的范疇了

熱點內容
腳本lcd 發布:2025-01-31 16:41:02 瀏覽:514
安卓selinux干什麼用的 發布:2025-01-31 16:32:04 瀏覽:530
俠盜獵車手加錢密碼是多少 發布:2025-01-31 15:44:28 瀏覽:661
沒密碼怎麼登微信 發布:2025-01-31 15:33:51 瀏覽:737
c語言死機程序 發布:2025-01-31 15:07:52 瀏覽:18
編程教育裝修 發布:2025-01-31 15:04:38 瀏覽:402
函數和存儲過程的區別 發布:2025-01-31 14:39:12 瀏覽:608
地下室柱子箍筋的加密 發布:2025-01-31 14:36:11 瀏覽:933
手機拍攝視頻在哪個文件夾 發布:2025-01-31 14:34:28 瀏覽:760
sdkpython 發布:2025-01-31 14:23:03 瀏覽:91