数学建模社区-数学中国

标题: DIY系列之——某校图书证条形码制作 [打印本页]

作者: buguniaoo1991    时间: 2011-9-28 18:30
标题: DIY系列之——某校图书证条形码制作
DIY系列之——某校图书证条形码制作
1 x; V. Z) q- F) q0 b8 A! t5 E5 X5 g% y: [0 J5 {. ^/ ]7 G- V
小谷同学 2011/9/25
3 W* h8 G) d" L* X" R! S" t& C: E* E  H" I1 I
摘要
+ s: B  B3 q& |1 W8 F3 ]+ ]" E! S
8 q; m* n3 p. }: s/ j) O关键词: 条形码: z- O' y) B# p5 Z" g2 S0 Y  ^: O

$ G  J: b6 g" f- ^  M& f/ n由于印刷质量问题和长期的使用,某些同学的读书证可能会产生读卡不灵敏现象。为了便于解决这些问题,本文给出某校图书证上条形码的编码规则,并给出由这些规则生成条形码的过程。最后本文对条形码在日常应用中可能出现的问题进行了分析,并提出相应的解决方案。
8 ?: R/ t9 u4 @5 n+ r6 X
" M6 I. X& p* S5 y目录; X5 M5 y, I2 W+ T9 B. z
+ Q9 B; q7 Z7 R7 d& q" Y
1.某校图书证编码规则
# E: Z& G2 y2 |: m2 M* G# y* t3 K6 |
2.条形码制作的过程
2 ^! M  E1 J! p, g
4 k6 Y  c' E( P* S3.打印与测试% y2 G7 w- v5 X
) D2 K8 G1 d) m+ W
4.扩展应用3 p6 F; K' J. @: b

" w2 c4 E. E* Y$ @! @% h5.关于本例的一些思考
: Q) B0 |! Q( f6 h* T8 q% d: L
6 p$ j8 v: i* {( E4 t" C* ?6.免责声明与使用注意事项
6 U9 R5 O9 D" f7 z% v
* u% t0 \; X% s% m7.参考文献
0 ?% j* Y1 Q( B' Y- k% ]2 u) \8 ]: W. [% ^4 c! f
8.附录
' z$ b9 X0 |7 \3 u" l. @' ~4 n# o
; J$ M5 W3 U- F7 X! i/ [
! t  i: A( C0 j! ~
+ r$ P4 \- y" m' @" e
% c% y% p- g; u7 c( p7 R/ z条形码(barcode)是将宽度不等的多个黑条和空白,按照一定的编码规则排列,用以表达一组信息的图形标识符。常见的条形码是由反射率相差很大的黑条(简称条)和白条(简称空)排成的平行线图案。有关条形码的更多资料参见文[1]。
9 n( s% O' x7 |# p; j" `6 [4 D, P& J/ I, N/ o6 t! w1 J6 T5 c
在日常生活中,我们不可避免地要接触大量的条形码,其中最常见的就是图书证了。而某些同学的图书证经常丢失。此外,某些同学的图书证由于缺乏保护,会频繁出现录入不灵敏现象。于是在谴责图书证的印刷质量之余,动手DIY一张图书证,自己进行质量控制,则可以使其更加灵敏地识别,大大减少进入图书馆的时间,大大缩短借书时刷卡的时间,提高学习和工作效率。图书证中携带关键信息的就是条形码,于是DIY的重点也是如何得到对应的条形码。0 n# r2 v3 Z! d7 V

9 H. S$ E+ M2 f% D2 I. o9 ^" g" i! O, i1.某校图书证编码规则1 J; e# y1 {0 F4 P- v

) i; A) n- {- q; o* V由于所使用的编码方式不同,在了解常用编码规则(参见Internet)的基础上,必须通过对特定图书证的观察才可得出其特殊的编码规则。本文通过,对一种常见的图书证的观察,得出其编码规则如下:
# Z0 u/ V" t* o0 @! [# V: z; Z9 h$ Z; ^, M7 ~% ^- S. O
①该条形码部分由两种不同宽度的黑白条组成,是一种类code39编码方式;我们假设宽条代表1,窄条代表0;并假设在最后多一个白色宽条,以便使黑白条码的个数相等,方便程序处理。. @5 k7 F& i. _8 c! m5 B

9 R9 y2 }! t/ [8 w②图书证的白色条码都是一样的,分为以下三部分:
/ \: v7 H$ j5 L$ Q# A+ l& |
( _7 f7 A7 i6 k  C, T, c# S% h1)起始部分:10001;2)数据部分:13个01001;3)终止部分:10001,与起始码一致。
& J3 ~5 i4 Z5 U* @9 P% D3 v
. M' U7 I0 U) b③图书证的黑色条码是携带学号信息的关键,分为以下三部分:/ K4 _' P2 _4 g; V& E, P; O
. X) n/ ^* I9 Y) X6 x
1)起始部分:00110;4 Z7 Q( N/ L" M6 N  x

% Y) m( G- z. E8 Q0 E% i  R2)中间部分:13个数字(即学号12位+图书证序号),每个数字对应的代码如表一所示; , s0 Y; u) W7 |$ J
4 I5 r" s5 {; l" A
表一 某校图书证号每个数字对应的代码$ f4 {& d+ Q- P7 e- G/ D

! g6 }3 [1 W/ `# `数字 代码 代码数字来源 数字 代码 代码数字来源
" K% L; _1 k. ~9 x1 10001  1:0001                     6 01100 6:0110 ' X: d; T2 Y9 j+ T: h
2 01001 2:0010                     7 00011 8:1000
) W/ @) a4 T! q0 \$ W3 11000 3:0011                     8 10010 9:1001
  q" a( U0 j. W9 r, P) I4 00101 4:0100                     9 01010 10:1010
9 k& n9 M  u/ \0 c9 q5 10100 5:0101                     0 00110 12:1100                    
4 U( Q# m% O0 M% H0 m+ i( o2 n% B8 n( e& f0 B/ l. C
说明:每个数字由五个黑条组成,两宽三窄;代码前四位是数字的8421码的倒序,由于最多只能出现两个宽条,于是一次选取最多只出现两个1的8421码作为序号的代码;代码的最后一位用以校验,凑齐“两宽三窄”。- k) E& b6 n+ S' p3 i' F# w

# o2 L4 G9 L/ q6 c5 h3)终止部分:00110,与起始部分以及数字0的代码都一致。
2 Q4 Q9 N3 n8 t5 {" ]9 C3 k. y3 @+ [
2.条形码的制作过程" L( _4 l; X  [; P
3 j! P+ C( c* b7 m) Z
黑色和白色可以用二值图像来表示,于是我们的关键是如何得到与条形码对应的二维矩阵。
5 L% E6 H1 r4 V) A! b% Q0 L) s+ W
定义窄条即代码0的像素宽度为w,宽条即代码1的像素宽度为2w(一般取w=1即可);定义二维矩阵在黑色像素点处值是0,在白色像素点处值是1。此立即上得出与学号对应的条形码的二值图像的矩阵。
6 t5 e  X& {+ h' C1 {/ w7 m3 h1 l% ?8 D* j" G7 h/ @
条形码效果如图所示(程序代码见附件所示)。
% Y/ Z  Y' ~" C& I) E 1.png
, C9 C9 ?* q5 H% v' q, r. ?3 o9 {6 ^图一 所得条形码效果图& y% f4 s' [) O

. f* E  S5 Q) F8 ^0 T3.打印与测试
  y6 L" l& d8 x! ]8 y' L7 T
5 W/ ^7 z$ K( m有的制造商在批量打印图书证时不太用心,加上可能设备老旧,所以难免会使某些同学的图书证出现杂纹等印刷质量问题。
% e( b# ]. Z% n0 Q
" q7 P5 a7 P5 {8 r因此,在DIY的过程中,尽量采用分辨率较高的打印机。对于分辨率较低的打印机,通过修改程序,扩大条形码的宽度,也可打印出质量上乘的条形码(本文测试时采用HP Color LaserJet 2820彩色激光一体机)。
0 Q' C# y7 \9 ^; E% i+ h1 _. X+ z% L0 v5 o2 d/ K
为了方便进行测试,本文打印出不同大小的条形码。
, f1 Y' ^  T5 D4 M/ y" D! b- Q2 z0 E! W$ K  U' k
测试一:将其用透明胶带粘在硬纸板上。  s/ f& Y+ a; A; z! Q

& P" b" x9 W( z, b结果令人遗憾,读卡机根本不识别。通过与图书证比较发现:
0 s. U/ L4 ~* N; X
1 V+ ]# i& m' O& B$ k0 s  l图书证正面的塑胶反射能力很弱,在灯光下几乎看不到灯在其上的虚像;而透明胶带的反射能力很强,可以地清楚灯地虚像。
% l. d0 E/ O% v. r7 ]
) [. e8 r& N) p9 L测试二:找到原因后进行,将与原图书证同样的大小的条形码用胶水贴在硬纸片上,结果顺利该校图书馆通过门禁。We are in now!!6 r8 Z6 j7 _7 K& g2 E3 i( t' \

- t( Z' h, _# F( D( ^4 z& l效果如图二所示。3 w& r$ ~) H1 }+ W: [7 G
2.png * p$ z" N0 S" t0 M6 T
图二 打印效果图$ P; |7 E' e& _; n' {
测试三:用打印出的不同大小的条形码逐一进行测试,只有在一定的大小范围才可以通过测试。这说明了,条形码扫描器(注:本文使用的是全角度扫描器,其通过光学系统产生多条扫描线)是有一定的大小识别范围的。0 I7 }. r5 O; J' h/ k& ~) Z
6 X$ i& B* V" c1 c4 t4 j& m
4.扩展应用
3 \/ w% f' A2 o
. r! P& k" G$ `3 H为了达到逼真的效果,我们做出了图书证模板(MATLAB版),该模板根据用户提供的证号、系部和姓名、照片、字体等信息,自动生成可供彩色打印的图书证如图三。& L: }, M. L6 a6 Z; Y" h" \; K; W
3.png
- E. q+ m- T9 r1 O图三 可供彩色打印的图书证
/ G7 Z( N7 {! o. P7 N- d8 n0 p; p+ p1 ]# e: k
过后,我们会给出相应的网页版、C++版、VB版等等。
' Z) @9 |8 {% `. H7 ^5 G, w
1 m3 j  O" n0 ]/ V, s5.关于本例的一些思考1 G$ M7 a  M! ~* S
% @- P8 d3 ^+ [4 d; f+ n$ K/ T
由相关文献,可知条码技术具有以下优点:
, `4 ?, `% p, I: b+ R& p
( }: f. E1 D" U6 m  1)、输入速度快;   |0 k" @( p9 o$ G! t7 G$ q3 W
) q) D5 g3 N' |7 T& m, x' r
  2)、可靠性高;
& q* w* ^7 q% L, G! G3 l/ f' d4 h' N, T, a; M0 L
  3)、采集信息量大;
9 t: t" i7 y, y6 s
" @$ x' u) `& C  4)、灵活实用;) }6 r+ V/ H- i
0 E# _' h6 {6 g( v
5)、条码标签易于制作
: Q4 b9 a9 ?( @1 W) `  u
  n8 q6 l, y8 ]7 ]) H$ R$ P6)、识别设备操作容易,不需要特殊培训;6 t: S. x- h/ E  ]# m3 W+ x; o
" _" F2 R  g% B$ V
7)、设备也相对便宜。* u' z! v/ v& S3 T( ~

3 c4 b0 S& C0 [+ F, c2 ~因此,在平时可以自己构造的加密的编码规则,利用现成的条形码扫描器,可以很快实现特定功能的组建嵌入式的或基于PC的条形码识别系统。
* m: F6 W5 q# h) x& D' i  S4 h9 |' X, @: b  k7 L
由本文看,尽管一维条形码在各个领域获得了广泛的应用,但其安全性值得商榷。于是,在安全性要求较高或者要求条形码携带更多信息的领域,人们普遍采用二维码。常见的二维码如图四所示(更多资料参照文[2])。) i0 y4 @. N* X  Y
4.png
( G9 w) ~& Y* s图四:常见的二维码* S) T- R- y/ L+ L- a0 m% f
3 q# q% i# X9 x
6.免责声明与注意事项
; l: m8 e2 D. @
  y! {; s3 b" q+ i" ?版权所有,翻版必究。
5 s# P- `$ Y+ ?. F
! Z, e8 N% o; j技术在于交流。本文旨在交流条形码制作技术,并为个人制作提供质量较为上乘的图书证的方法,非经相关方面授权,严禁用于商业用途。有不法分子由此牟利而产生的法律责任,与本人无关。  E5 g' F# Q! p- L& e' Y7 M

1 r0 x% ]; e* j- V7 X任何单位或个人认为本文可能涉嫌侵犯其合法权益,应向本文作者提出书面权利通知,并提供身份证明、权属证明及详细侵权情况证明。作者在收到相关法律文件后,将会依法尽快删除本文中违反法律的内容。
# B# m0 O  k0 U3 A1 ?: f5 a
9 H4 p# O) h0 l$ b- f7.$ J7 b# W* t  c, B
参考文献
6 ^' r, }: r( e* B0 o2 g8 o! F
5 e2 p( ]2 s4 h0 k* ?# B[1]条形码—百度百科http://baike.baidu.com/view/13740.htm[2010-09-25]
1 _- f/ }! n( ~/ k" W
4 Q- Z- ~! o/ g& R' I8 S, X& I[2]二维码—百度百科http://baike.baidu.com/view/132241.htm[2010-09-25]
: s/ h: ^+ {# F' k; b: U2 u; G% t. g: A1 x& I# N- }2 J/ A
8.1 f3 I8 X3 v/ E( o" L. T8 Y3 M7 l7 {
附录8 ~+ H, T3 o5 o( E' \& x5 O

; P: O# l; i% o  e6 v相应的MATLAB程序代码如下(该程序经过简单修改,可以写成函数的形式,更方便地进行各种编码规则的条形码的生成):( h* i/ Y1 Y% u( d, \8 i) I
: @4 ^( j+ }0 ~$ W; n1 k+ f( ^4 Q# w& B( q1 R
%barcode.m
3 D1 O' z! {/ J8 Q. U" m3 s
/ F0 V5 V( K* Q%生成学号a对应的条形码
: F  u6 W( g! i7 }  C# f0 \& p# [9 r7 a  `0 |/ {$ P- n
%2011/09/25 13:24 BY小谷同学
: a3 S2 a+ f% U1 d3 W1 r# K
4 K* r6 p: I' P& u# C( c* G) ^5 t% X% oa='1234567890123';%学号,自行更改: l  g5 G1 k4 K& i2 h

+ z1 s$ T, H. D; ~& ]4 c1 T1 s2 XBlack_num=[1,0,0,0,1;0,1,0,0,1;1,1,0,0,0;0,0,1,0,1;1,0,1,0,0;3 t2 A# E  J7 u( x. U3 Z2 \

' c7 N, Y* Z7 z$ f) p) U9 D0,1,1,0,0;0,0,0,1,1;1,0,0,1,0;0,1,0,1,0;0,0,1,1,0];%数字编码
8 A- Q' J" e: O$ b- r2 `3 g) M0 `1 F* D
White_num=[0,1,0,0,1];%插入符的编码6 Z  |! a+ A& ?9 a1 L

" |! G. G4 s) k%Black_SE='00110';! j8 S  @, n6 d2 m6 g4 t! p
! Q5 `% {/ j) C- ~9 u
%White_SE='10001';White_M='01001';  Q" \. Q1 }$ a7 w0 L( S; x
' s+ b7 x9 |) l9 o$ X" M  F. W3 h, X  N
barheight=30;%定义条形码的高度/ a2 ~& s# m2 n4 Z4 k8 \& X
% ~4 r/ @$ P  g* @0 A
barwidth=1;%定义条形码的像素宽度: _. v5 W" E8 N. k$ b/ [& A
- {1 i' f+ u4 n) c$ ?5 A

6 k( W9 B. n/ k. \0 z%可以对特定长度的输入进行控制,本文规定长度为139 J" ?+ @/ J% [
8 m6 X! s7 R! K. s4 B5 [+ N
if length(a)~=13
# S* `6 l2 q' ?, B* x% i& i/ a+ k/ m/ G3 w. C. H  i5 f6 _
9 w6 U9 A, f3 p  M/ W7 K" e
error('图书证必须有13个数字');
5 h2 ~7 \, o% S, E0 D- a# O! B2 n3 e+ h) ?) E1 p# g
end, A$ Q  N+ T$ _, N6 n6 K: l
6 t7 N4 `  R- o& U$ L
* S* g# a: p3 o6 Y- H9 H9 X
barcode_SE=[0,1,1,0,1,0,0,1,0,0,1,0,1,1];( m5 y, `9 @/ O& ?2 J7 e
# x/ Z$ v; `  i" w5 E
%为方便,直接人工得出起始与终止部分的条形码
( n4 |' c% E2 c' Z6 b7 H& C/ Q/ z9 r* z' \# l0 e
%也可以由程序生成.  \& q( t( U+ b
8 U$ H, {/ [* O# ?+ \6 @
total=length(a)*(7+7);) B# p* Z7 ?5 \( g7 C" F
; g+ J9 Y6 O. v5 n2 ?% [0 U6 A8 E
%条形码的总像素宽
" o* k2 t- Y( F7 w7 n1 [+ U1 {, b* h8 `- w# q
%也可以不用求,因MATLAB提供的均是动态数组
1 ]; c1 y& A$ m8 ]4 |. k. s4 g# O0 |
s=1;%计数,记录
' q# {  y' G9 w: M/ N6 E- A: a9 T( x2 P+ ^( U$ i( @- a

4 z. Y2 ^* g* V8 x%由于利用for语句容易出现不可预料的错误5 B; J9 Q7 g, g( b4 c* x

$ \! j; \7 U; y- Z%大部分是数组的行标与列标的调用问题,于是采用while循环# b8 H4 R% G0 F& I  m
+ \$ d4 A/ P8 q
%嵌套循环,得出数据部分2 }, w+ R; a) p3 }: K1 b
% a# }( [- h2 Z$ I+ V2 g* X
m=1;1 R% u4 W7 O1 D  Q$ u, h: d7 T$ c
/ v% k1 o6 t( ]( I/ {9 T1 G
while m<14 & r  D  j/ C5 J5 ^) f
1 @$ M5 k+ y: e/ r) \- w: @

; y' Y% G" i, h" Nif a(m)=='0';7 V7 T" [" ]& r! K) I$ _
" [. k. t3 P1 m8 s8 l: @

( a" f7 W2 [8 G- Mt=10;
( W- y3 S7 v+ \' y' d+ V" V& |1 T; W" [4 A0 C6 N; ^; |$ q# p

- r: Z9 S( M6 P. w" h: ]' E% t%若为数字零,应该调用的下标是10& j; r( [6 R6 J% D- Q
4 e. @' @, A9 @- _1 O5 O3 l! n6 _1 r$ }  }

* h' X( X9 D0 Z- E8 W7 Xelse
7 E; W. n/ {1 w; w4 A
3 p( y9 U) M5 z* `' o9 {, u& p
( ?. V, g( b; z6 N7 gt=double(a(m)-48);
3 Z/ @" w( |) s9 z; Y: K6 a- [8 H4 j9 k: X5 K$ q; X
%由于输入是ascii字符,转换为整数需要减去30H,即48
! a3 o3 _1 k+ C6 |1 d' E: Q) w+ B5 a( p
4 P! c7 K2 @3 Q- H" V$ `
end
" c! F9 A5 v# U- }3 e7 u+ U. K6 ?% J$ x& O4 g6 C8 Q
# p$ C' A3 z) E! _/ Z
n=1;%同样的while循环2 t" |' E6 s$ D
2 x# n5 [4 A/ @( z  [

9 K: r  R% \7 O$ Q& L6 ?. @; Kwhile n<67 ~0 L* n$ j1 ]8 z8 W

7 G- k/ [- u* D( c* L
8 N4 \' q  b  r% Hif Black_num(t,n)==09 @- U& |7 w$ d6 @& S$ m' m
4 p6 m$ q  R% Y4 u! j! E" V9 b7 h
* s) ?) R4 e( F( Y* u# Z2 G
barcode_M(s)=0;
& }: ]$ V% }2 Y4 n/ c8 O. C+ l3 f0 g7 X& l
5 Z! |9 [( H8 H$ J$ `# K3 E( p" \
s=s+1;: H8 G/ R5 }1 `" x$ ^
  [6 s/ O, I( A' w
4 A: _/ [7 [, E2 }: Z# Z& Z
else
: a( d" q, X2 V& Y
" f& d" m; s4 ~' q) V) J) o
% |  h! w7 k$ U7 y9 T: M; U7 Qbarcode_M([s,s+1])=[0,0];
5 {3 E: B4 z$ k& w% o! a
/ U5 O! N2 J+ E8 `* G1 C- z, y
( G# V. @" V) m* J" n6 Zs=s+2;
# g+ Z% g1 D! p+ u
) i1 t2 J1 P0 ]; k: g$ x" Q
$ e$ w% N* e# V' f* P) c8 iend' @: J8 g4 {! e1 x

/ h# F- O$ c; g. }& C; t
: W5 z: L$ J* J& i5 nif White_num(n)==0
1 A" O: _/ t; p! K1 \- c. J4 h. l3 N; I' n# J/ N5 C
& `  \% V( N3 n; V% J$ |8 V
barcode_M(s)=1;( }' X+ z) d7 ~6 h. {2 n' L

5 T7 @: A1 P8 Q9 z& ~4 X
5 h# n9 S( s. j  ns=s+1;5 z9 @" g8 H* s! @, A7 G
: V. R* f& ~& e+ c

0 K4 l7 C0 B" N2 g5 m* F4 q, T$ f+ ^else
; |% e% a7 |6 J/ e# o* `
; n: a) Q& f: v5 @: I! x0 s' [  `" F+ }; N: Y
barcode_M([s,s+1])=[1,1];, d6 d. H' P  P( t

9 C$ r! @2 R: g% w, L- J- N
  ]7 `! p. X! x! F6 p. w/ ]& W' Os=s+2;  i0 i/ m# R& t7 J9 A; i6 N1 G
( p+ d& ^6 b" c" B4 g, D$ _

& b2 w2 S1 Q8 p/ L% r2 {' Hend% a, H' y: u0 }* y& K8 q

, f+ @5 p4 p, ^9 Z8 l- {; q6 `# t3 J- @9 o3 Z- k
n=n+1;
8 B) s  G- _' i0 |3 u# c9 h
# ]8 n% K- ^* Y# A; X
' g7 z% n4 ]3 Z1 P) ]5 @- dend2 C. y+ e( U/ n8 [, L
6 r& w7 M: i* `: p/ M! U+ E
m=m+1;7 Z+ g- N" h. \6 P+ t

% q5 h  e8 [1 o0 }) Nend. F  r: E, q  t' z4 M

# ?3 a! {' a0 q8 J, w* U4 U
4 L; u& b( @# N0 G: vbcode=ones(barheight,1)*[barcode_SE,barcode_M,barcode_SE];
' B; ]5 o& {$ R3 c+ Y, W5 E* T7 B4 @
%将一位矩阵拉宽,生成给定高度的条形码对应的二值图像的矩阵/ X  ~2 O! L4 J4 ]

5 N+ J7 Q8 ^! O% _; k2 C' [bcode=bcode==1;%将数组转换为逻辑数组(Logic Array)
! d9 f) w* P* Q' \" C
1 k9 A% \! T5 ^! Simshow(bcode)%显示所得到得条形码
) P, D, S2 l: @( L7 |1 z" b0 m; e2 B/ \
%然后可以自行存贮得到的条形码, `+ c3 I1 _2 e5 B
, E8 x% r! k! h# D# q
%然后用PS等工具得出具有自己特色图书证啦) M! b& h& n; x* c; s& ]9 X5 T! o
- U! G- w9 b- a6 l% K8 [

6 _3 T) h" n; A; [' ]
作者: 孤独的修行者    时间: 2011-9-29 15:16
够强大!!!
作者: lszf    时间: 2011-9-29 20:04
强啊
作者: freedomfox    时间: 2011-9-29 20:36
很强大啊,
/ G! J- [( Q9 }8 K3 L5 T% o) r; X- @可惜首先我联想到的是可以用来制作假的书本条形码,用于还不见了的书,,我这是在犯罪吧?
作者: buguniaoo1991    时间: 2011-9-29 23:50
freedomfox 发表于 2011-9-29 20:36   {" X( ~8 ~$ h
很强大啊,7 M& ?2 P9 x- {; X4 P- `
可惜首先我联想到的是可以用来制作假的书本条形码,用于还不见了的书,,我这是在犯罪吧?{:3_ ...

* U0 o3 v' _' N% m& v. t( d可以,不过你的学校肯定有记录,一旦发现,后果很严重的;+ ^) C& l2 k5 x0 |6 x. s1 k
目前我想到是:: ^4 k8 H, m. H9 |
一、去周围学校的图书馆。
* r$ T6 V. l6 k二、自己丢的图书证自己做一个一模一样的来。
9 L. S! k' m" P1 R三、将图片弄到手机上,然后用手机刷进图书馆,吸引眼球* d, r2 y4 B  Y* u# z
四、将来毕业再回学校,再做一个图书证进图书馆4 n) h1 X- x% B8 \0 j; i. B

作者: 书呆子    时间: 2011-10-2 22:53
呵呵呵: n6 O* z3 x% a0 e+ J+ x7 `( W2 v
。。




欢迎光临 数学建模社区-数学中国 (http://www.madio.net/) Powered by Discuz! X2.5