⑴ 如何編好商品編碼!
條碼是由一組按一定編碼規則排列的條、空符號,用以表示一定的字元、數字及符號組成的信息。條碼系統是由條碼符號設計、製作及掃描閱讀組成的自動識別系統。
常用條碼簡介:
EAN碼:
EAN碼是國際物品編碼協會制定的一種商品用條碼,通用於全世界。EAN碼符號有標准版(EAN-13)和縮短版(EAN-8)兩種,我國的通用商品條碼與其等效。我們日常購買的商品包裝上所印的條碼一般就是EAN碼。
UPC碼:
UPC碼是美國統一代碼委員會制定的一種商品用條碼,主要用於美國和加拿大地區,我們在美國進口的商品上可以看到。
39碼:
39碼是一種可表示數字、字母等信息的條碼,主要用於工業、圖書及票證的自動化管理,目前使用極為廣泛。
庫德巴(Codebar)碼:
庫德巴碼也可表示數字和字母信息,主要用於醫療衛生、圖書情報、物資等領域的自動識別。
條碼編碼方式:
條碼種類很多,常見的大概有二十多種碼制,其中包括:
Codabar碼(庫德巴碼)、Code39碼(標准39碼)、ITF25碼(交叉25碼)、Code25碼(標准25碼)、Matrix25碼(矩陣25碼)、UPC-E碼、UPC-A碼、EAN-13碼(EAN-13國際商品條碼)、EAN-8碼(EAN-8國際商品條碼)、中國郵政碼(矩陣25碼的一種變體)、Code-B碼、MSI碼、、Code11碼、Code93碼、ISBN碼、ISSN碼、Code128碼(Code128碼,包括EAN128碼)、Code39EMS(EMS專用的39碼)等一維條碼和PDF417等二維條碼。
目前,國際廣泛使用的條碼種類有UPC、EAN碼(商品條碼,用於在世界范圍內唯一標識一種商品。我們在超市中最常見的就是這種條碼)、Code39碼(可表示數字和字母,在管理領域應用最廣)、ITF25碼(在物流管理中應用較多)、Codebar碼(多用於醫療、圖書領域)、Code93碼、Code128碼等。其中,EAN碼是當今世界上廣為使用的商品條碼,已成為電子數據交換(EDI)的基礎;UPC碼主要為美國和加拿大使用;在各類條碼應用系統中,Code39碼因其可採用數字與字母共同組成的方式而在各行業內部管理上被廣泛使用;在血庫、圖書館和照像館的業務中,Codebar碼也被廣泛使用。
除以上列舉的一維條碼外,二維條碼也已經在迅速發展,並在許多領域找到了應用。
二維條碼:
一維條碼所攜帶的信息量有限,如商品上的條碼僅能容納13位(EAN-13碼)阿拉伯數字,更多的信息只能依賴商品資料庫的支持,離開了預先建立的資料庫,這種條碼就沒有意義了,因此在一定程度上也限制了條碼的應用范圍。基於這個原因,在90年代發明了二維條碼。二維條碼除了具有一維條碼的優點外,同時還有信息量大、可靠性高,保密、防偽性強等優點。
目前二維條碼主要有PDF417碼、DataMatrix碼、Code16K碼、Code49碼、MaxiCode碼等,主要分為堆積或層排式和棋盤或矩陣式兩大類。
二維條碼依靠其龐大的信息攜帶量,能夠把過去使用一維條碼時存儲於後台資料庫中的信息包含在條碼中,可以直接通過閱讀條碼得到相應的信息,並且二維條碼還有錯誤修正技術及防偽功能,增加了數據的安全性。
二維條碼作為一種新的信息存儲和傳遞技術,從誕生之時就受到了國際社會的廣泛關注。經過多年的努力,現已應用在國防、商業、交通運輸、醫療保健、公共安全、工業、金融、海關及政府管理等多個領域。
二維條碼可把照片、指紋編制於其中,可有效地解決證件的可機讀和防偽問題。因此,可廣泛應用於護照、行車證、健康證、身份證、軍人證、保險卡等。
美國亞利桑納州等十多個州的駕駛證、美國軍人證、軍人醫療證等在幾年前就已採用了PDF417技術。將證件上的個人信息及照片編在二維條碼中,不但可以實現身份證的自動識讀,而且可以有效的防止偽冒證件事件發生。菲律賓、埃及、巴林等許多國家也已在身份證或駕駛證上採用了二維條碼,我國香港特區護照上也採用了二維條碼技術。
另外在海關報關單、長途貨運單、稅務報表、保險登記表上也都有使用二維條碼技術來解決數據輸入及防止偽造、刪改表格的例子。
在我國部分地區注冊會計師證和汽車銷售及售後服務等方面,二維條碼也得到了初步的應用。
⑵ 設計一種信道編碼,麻煩大神給個思路,要求就是自己設計編碼,或都改進已經存在的編碼方式都可,麻煩給點
樓上說的是信源編碼吧,信道編碼強調找錯糾錯,你應該從極大似然法,相關性等方面考慮
⑶ 設計編碼方案
可以用兩位的數字進行編號,十位數表示樓層,個位數表示房間號。即可。比如三層的第二個房間的鑰匙編號為32
⑷ 資料庫設計中為什麼進行分類編碼設計分類的方法是什麼
分類演算法要解決的問題
在網站建設中,分類演算法的應用非常的普遍。在設計一個電子商店時,要涉及到商品分類;在設計發布系統時,要涉及到欄目或者頻道分類;在設計軟體下載這樣的程序時,要涉及到軟體的分類;如此等等。可以說,分類是一個很普遍的問題。
我常常面試一些程序員,而且我幾乎毫無例外地要問他們一些關於分類演算法的問題。下面的舉幾個我常常詢問的問題。你認為你可以很輕松地回答么?
1、分類演算法常常表現為樹的表示和遍歷問題。那麼,請問:如果用資料庫中的一個Table來表達樹型分類,應該有幾個欄位?
2、如何快速地從這個Table恢復出一棵樹?
3、如何判斷某個分類是否是另一個分類的子類?
4、如何查找某個分類的所有產品?
5、如何生成分類所在的路徑。
6、如何新增分類?
在不限制分類的級數和每級分類的個數時,這些問題並不是可以輕松回答的。本文試圖解決這些問題。
分類的數據結構
我們知道:分類的數據結構實際上是一棵樹。在《數據結構》課程中,大家可能學過Tree的演算法。由於在網站建設中我們大量使用資料庫,所以我們將從Tree在資料庫中的存儲談起。
為簡化問題,我們假設每個節點只需要保留Name這一個信息。我們需要為每個節點編號。編號的方法有很多種。在資料庫中常用的就是自動編號。這在Access、SQL Server、Oracle中都是這樣。假設編號欄位為ID。
為了表示某個節點ID1是另外一個節點ID2的父節點,我們需要在資料庫中再保留一個欄位,說明這個分類是屬於哪個節點的兒子。把這個欄位取名為FatherID。如這里的ID2,其FatherID就是ID1。
這樣,我們就得到了分類Catalog的數據表定義:
Create Table [Catalog](
[ID] [int] NOT NULL,
[Name] [nvarchar](50) NOT NULL,
[FatherID] [int] NOT NULL
);
約定:我們約定用-1作為最上面一層分類的父親編碼。編號為-1的分類。這是一個虛擬的分類。它在資料庫中沒有記錄。
如何恢復出一棵樹
上面的Catalog定義的最大優勢,就在於用它可以輕松地恢復出一棵樹?分類樹。為了更清楚地展示演算法,我們先考慮一個簡單的問題:怎樣顯示某個分類的下一級分類。我們知道,要查詢某個分類FID的下一級分類,SQL語句非常簡單:
select Name from catalog where FatherID=FID
顯示這些類別時,我們可以這樣:
<%
REM oConn---資料庫連接,調用GetChildren時已經打開
REM FID-----當前分類的編號
Function GetChildren(oConn,FID)
strSQL = "select ID,Name from catalog where FatherID="&FID
set rsCatalog = oConn.Execute(strSQL)
%>
<UL>
<%
Do while not rsCatalog.Eof
%>
<LI><%=rsCatalog("Name")%>
<%
Loop
%>
</UL>
<%
rsCatalog.Close
End Function
%>
現在我們來看看如何顯示FID下的所有分類。這需要用到遞歸演算法。我們只需要在GetChildren函數中簡單地對所有ID進行調用:GetChildren(oConn,Catalog(「ID」))就可以了。
<%
REM oConn---資料庫連接,已經打開
REM FID-----當前分類的編號
Function GetChildren(oConn,FID)
strSQL = "select Name from catalog where FatherID="&FID
set rsCatalog = oConn.Execute(strSQL)
%>
<UL>
<%
Do while not rsCatalog.Eof
%>
<LI><%=rsCatalog("Name")%>
<%=GetChildren(oConn,Catalog("ID"))%>
<%
Loop
%>
</UL>
<%
rsCatalog.Close
End Function
%>
修改後的GetChildren就可以完成顯示FID分類的所有子分類的任務。要顯示所有的分類,只需要如此調用就可以了:
<%
REM strConn--連接資料庫的字元串,請根據情況修改
set oConn = Server.CreateObject("ADODB.Connection")
oConn.Open strConn
=GetChildren(oConn,-1)
oConn.Close
%>
如何查找某個分類的所有產品
現在來解決我們在前面提出的第四個問題。第三個問題留作習題。我們假設產品的數據表如下定義:
Create Table Proct(
[ID] [int] NOT NULL,
[Name] [nvchar] NOT NULL,
[FatherID] [int] NOT NULL
);
其中,ID是產品的編號,Name是產品的名稱,而FatherID是產品所屬的分類。對第四個問題,很容易想到的辦法是:先找到這個分類FID的所有子類,然後查詢所有子類下的所有產品。實現這個演算法實際上很復雜。代碼大致如下:
<%
Function GetAllID(oConn,FID)
Dim strTemp
If FID=-1 then
strTemp = ""
else
strTemp =","
end if
strSQL = "select Name from catalog where FatherID="&FID
set rsCatalog = oConn.Execute(strSQL)
Do while not rsCatalog.Eof
strTemp=strTemp&rsCatalog("ID")&
GetAllID(oConn,Catalog("ID")) REM 遞歸調用
Loop
rsCatalog.Close
GetAllID = strTemp
End Function
REM strConn--連接資料庫的字元串,請根據情況修改
set oConn = Server.CreateObject("ADODB.Connection")
oConn.Open strConn
FID = Request.QueryString("FID")
strSQL = "select top 100 * from Proct
where FatherID in ("&GetAllID(oConn,FID)&")"
set rsProct=oConn.Execute(strSQL)
%>
<UL><%
Do while not rsProct.EOF
%>
<LI><%=rsProct("Name")%>
<%
Loop
%>
</UL>
<%rsProct.Close
oConn.Close
%>
這個演算法有很多缺點。試列舉幾個如下:
1、 由於我們需要查詢FID下的所有分類,當分類非常多時,演算法將非常地不經濟,而且,由於要構造一個很大的strSQL,試想如果有1000個分類,這個strSQL將很大,能否執行就是一個問題。
2、 我們知道,在SQL中使用In子句的效率是非常低的。這個演算法不可避免地要使用In子句,效率很低。
我發現80%以上的程序員鍾愛這樣的演算法,並在很多系統中大量地使用。細心的程序員會發現他們寫出了很慢的程序,但苦於找不到原因。他們反復地檢查SQL的執行效率,提高機器的檔次,但效率的增加很少。
最根本的問題就出在這個演算法本身。演算法定了,能夠再優化的機會就不多了。我們下面來介紹一種演算法,效率將是上面演算法的10倍以上。
分類編碼演算法
問題就出在前面我們採用了順序編碼,這是一種最簡單的編碼方法。大家知道,簡單並不意味著效率。實際上,編碼科學是程序員必修的課程。下面,我們通過設計一種編碼演算法,使分類的編號ID中同時包含了其父類的信息。一個五級分類的例子如下:
此例中,用32(4+7+7+7+7)位整數來編碼,其中,第一級分類有4位,可以表達16種分類。第二級到第五級分類分別有7位,可以表達128個子分類。
顯然,如果我們得到一個編碼為 1092787200 的分類,我們就知道:由於其編碼為
0100 0001001 0001010 0111000 0000000
所以它是第四級分類。其父類的二進制編碼是0100 0001001 0001010 0000000 0000000,十進制編號為1092780032。依次我們還可以知道,其父類的父類編碼是0100 0001001 0000000 0000000 0000000,其父類的父類的父類編碼是0100 0000000 0000000 0000000 0000000。
現在我們在一般的情況下來討論類別編碼問題。設類別的層次為k,第i層的編碼位數為Ni, 那麼總的編碼位數為N(N1+N2+..+Nk)。我們就得到任何一個類別的編碼形式如下:
2^(N-(N1+N2+…+Ni))*j + 父類編碼
其中,i表示第i層,j表示當前層的第j個分類。這樣我們就把任何分類的編碼分成了兩個部分,其中一部分是它的層編碼,一部分是它的父類編碼。由下面公式定一的k個編碼我們稱為特徵碼:(因為i可以取k個值,所以有k個)
2^N-2^(N-(N1+N2+…+Ni))
對於任何給定的類別ID,如果我們把ID和k個特徵碼「相與」,得到的非0編碼,就是其所有父類的編碼!
位編碼演算法
對任何順序編碼的Catalog表,我們可以設計一個位編碼演算法,將所有的類別編碼規格化為位編碼。在具體實現時,我們先創建一個臨時表:
Create TempCatalog(
[OldID] [int] NOT NULL,
[NewID] [int] NOT NULL,
[OldFatherID] [int] NOT NULL,
[NewFatherID] [int] NOT NULL
);
在這個表中,我們保留所有原來的類別編號OldID和其父類編號OldFatherID,以及重新計算的滿足位編碼要求的相應編號NewID、NewFatherID。
程序如下:
<%
REM oConn---資料庫連接,已經打開
REM OldFather---原來的父類編號
REM NewFather---新的父類編號
REM N---編碼總位數
REM Ni--每一級的編碼位數數組
REM Level--當前的級數
sub FormatAllID(oConn,OldFather,NewFather,N,Nm,Ni byref,Level)
strSQL = "select CatalogID ,
FatherID from Catalog where FatherID=" & OldFather
set rsCatalog=oConn.Execute( strSQL )
j = 1
do while not rsCatalog.EOF
i = 2 ^(N - Nm) * j
if Level then i= i + NewFather
OldCatalog = rsCatalog("CatalogID")
NewCatalog = i
REM 寫入臨時表:
strSQL = "Insert into TempCatalog (OldCatalogID ,
NewCatalogID , OldFatherID , NewFatherID)"
strSQL = strSQL & " values(" & OldCatalog & " ,
" & NewCatalog & " , " & OldFather & " , " & NewFather & ")"
Conn.Execute strSQL
REM 遞歸調用FormatAllID:
Nm = Nm + Ni(Level+1)
FormatAllID oConn,OldCatalog , NewCatalog ,N,Nm,Ni,Level + 1
rsCatalog.MoveNext
j = j+1
loop
rsCatalog.Close
end sub
%>
調用這個演算法的一個例子如下:
<%
REM 定義編碼參數,其中N為總位數,Ni為每一級的位數。
Dim N,Ni(5)
Ni(1) = 4
N = Ni(1)
for i=2 to 5
Ni(i) = 7
N = N + Ni(i)
next
REM 打開資料庫,創建臨時表:
strSQL = "Create TempCatalog( [OldID]
[int] NOT NULL, [NewID] [int] NOT NULL,
[OldFatherID] [int] NOT NULL, [NewFatherID] [int] NOT NULL);"
Set Conn = Server.CreateObject("ADODB.Connection")
Conn.Open Application("strConn")
Conn.Execute strSQL
REM 調用規格化常式:
FormatAllID Conn,-1,-1,N,Ni(1),Ni,0
REM ---------------------------------------------
REM 在此處更新所有相關表的類別編碼為新的編碼即可。
REM ----------------------------------------------
REM 關閉資料庫:
strSQL= "drop table TempCatalog;"
Conn.Execute strSQL
Conn.Close
%>
第四個問題
現在我們回頭看看第四個問題:怎樣得到某個分類下的所有產品。由於採用了位編碼,現在問題變得很簡單。我們很容易推算:某個產品屬於某個類別的條件是Proct.FatherID&(Catalog.ID的特徵碼)=Catalog.ID。其中「&」代表位與演算法。這在SQL Server中是直接支持的。
舉例來說:產品所屬的類別為:1092787200,而當前類別為1092780032。當前類別對應的特徵值為:4294950912,由於1092787200&4294950912=8537400,所以這個產品屬於分類8537400。
我們前面已經給出了計算特徵碼的公式。特徵碼並不多,而且很容易計算,可以考慮在Global.asa中Application_OnStart時間觸發時計算出來,存放在Application(「Mark」)數組中。
當然,有了特徵碼,我們還可以得到更加有效率的演算法。我們知道,雖然我們採用了位編碼,實際上還是一種順序編碼的方法。表現出第I級的分類編碼肯定比第I+1級分類的編碼要小。根據這個特點,我們還可以由FID得到兩個特徵碼,其中一個是本級位特徵碼FID0,一個是上級位特徵碼FID1。而產品屬於某個分類FID的充分必要條件是:
Proct.FatherID>FID0 and Proct.FatherID<FID1
下面的程序顯示分類FID下的所有產品。由於數據表Proct已經對FatherID進行索引,故查詢速度極快:
<%
REM oConn---資料庫連接,已經打開
REM FID---當前分類
REM FIDMark---特徵值數組,典型的情況下為Application(「Mark」)
REM k---數組元素個數,也是分類的級數
Sub GetAllProct(oConn,FID,FIDMark byref,k)
' 根據FID計算出特徵值FID0,FID1
for i=k to 1
if (FID and FIDMark = FID ) then exit
next
strSQL = "select Name from Proct where FatherID>
"FIDMark(i)&" and FatherID<"FIDMark(i-1)
set rsProct=oConn.Execute(strSQL)%>
<UL><%
Do While Not rsProct.Eof%>
<LI><%=rsProct("Name")
Loop%>
</UL><%
rsProct.Close
End Sub
%>
關於第5個問題、第6個問題,就留作習題吧。有了上面的位編碼,一切都應該迎刃而解。
⑸ 會計信息系統中代碼設計的作用並根據代碼的種類,敘述會計科目代碼設計的方法。
一、作用
會計科目是對會計業務具體核算內容進行分類的名稱。會計科目編碼設計是根據會計制度的規定以及會計科目的設置,按照一個系統的方案確定各級科目唯一數字編碼的方法,會計科目編碼在手工操作下一般不使用,但是採用計算機處理會計數據時,則需要採用會計科目編碼,這是因為:
⑴採用會計科目編碼便於反應會計科目之間的邏輯關系。
⑵保證會計科目的唯一性。
⑶便於計算機處理和分類。
⑷節省存儲空間。
⑸提高處理速度。
綜上所述:在總賬子系統中,設計一套科學的會計科目體系和會計科目編碼方案,對於提高總賬子系統的輸入效率,保證賬務處理的正確性,以及輸出詳細完整的會計信息都有著極為重要的意義。
二、方法:
一般來說,可以採用以下幾種編碼方法進行編碼設計:
⑴順序編碼。順序編碼是按編碼對象順序排列進行編碼的一種方法。
⑵位數編碼。位數編碼是將編碼的每一位或幾位賦予一定的含義進行編號的一種方法。
⑶分組編碼。分組編碼是按數字順序進行分組,由某一特定號碼至另一特定號碼代表某一類項目的一定類別名稱的一種編碼方法。
目前,以及科目編碼要按照會計制度的規定設計,實際上主要是設計明細科目編碼的結構問題。會計科目編碼體系的設計方法可分為三類:
⑴定長定位。對於明細科目編碼的結構設計,大多數會計軟體採用定長定位方法,即科目編碼體系中各級科目編碼的長度是固定的。
⑵不定長方式。不定長方式是指科目編碼體系在不超過總長度的前提下,除一級科目編碼長度固定,其他各級科目編碼的長度是布固定的,可由用戶自行隨意設計。
⑶立體科目。立體科目方法是指將科目中大量重復的科目從科目體系中分離出來,按照項目進行存儲,並將項目和科目建設動態鏈接,在滿足優化會計科目體系的同時,達到精細核算的目的。
⑹ 一組字元{A,B,C,D,E,F,G}出現的頻率分別是{9,11,5,7,8,2,3}.設計最經濟
用二叉樹進行設計,頻率越高的字元越靠近root就好了
⑺ 在一個製鞋ERP系統中,如何更合理的規劃和設計「物料編碼」
首先佩服你自己做ERP系統。
物料編碼一般根據企業里流程設計不同而編碼方式也不相同,但一般逃不出
子父級關系的編碼方式:
即,每個原材料都有對應的父級,這點可以參考金碟的編碼方式,每級以「.」來分隔,這樣可以快速的找出當前分類下的材料,或從材料找到分類,如:1.01.01,這里是三級分類。
你可以根據企業當前編碼方式,再加以變更來編碼,如:
可以將第一級分類定為:原材料、成品、半成品
第二級為物料的子分類,第三級為具體的某個物料,當然如果供應商比較多的話,也可以再加一級是哪個供應商的。
⑻ 如何設計編碼表最為有效
摘要 1、首先我們打開要編輯的excel 電子表格
⑼ 怎麼設計條形碼
新建標簽紙 打開中琅條碼列印軟體,根據向導新建和列印機實際標簽紙尺寸相符的紙張,本文我們以80*70mm,邊距為1的標簽紙為例來為大家演示。