第一篇:ATM系統(tǒng)實(shí)現(xiàn)報(bào)告(VB)
面向?qū)ο蠓椒ㄔO(shè)計(jì)與實(shí)現(xiàn)報(bào)告
—ATM機(jī)系統(tǒng)
軟件0802班
高曉亮
200807040203
一、概要
根據(jù)ATM的需求分析,該系統(tǒng)設(shè)計(jì)為2個(gè)子系統(tǒng):用戶系統(tǒng)、銀行工作人員系統(tǒng)。其中用戶系統(tǒng)主要使用戶在ATM上完成一些基本操作,例如:存款、取款、轉(zhuǎn)賬、查詢余額、修改賬戶密碼等銀行工作人員系統(tǒng)主要用來管理用戶賬戶、ATM機(jī)、事務(wù)。其具體功能和界面及代碼將在下文敘述。
說明:該系統(tǒng)主要代碼是用vb編寫,數(shù)據(jù)庫(kù)使用的是單機(jī)數(shù)據(jù)庫(kù)access。
二、用戶系統(tǒng)
A:主要界面介紹: 一)、待機(jī)界面:
1、功能:系統(tǒng)歡迎界面,點(diǎn)擊模擬按鈕開始模擬ATM機(jī)工作。
2、說明:由于沒有找到合適的廣告圖片,所以待機(jī)默認(rèn)先用藍(lán)色背景代替。
3、界面文字動(dòng)畫代碼如下:If Label5(0).Left > Me.ScaleWidth Then
Label5(0).Left = Me.Left100 End If
Label5(1).Move Label5(1).Left + 120
4、界面截圖如下:
二)、登陸界面:
1、功能:a、密碼框設(shè)置只能輸入6位
B、密碼輸入3次錯(cuò)誤,將凍結(jié)該賬戶
C、銀行卡號(hào)不存在、凍結(jié)或密碼錯(cuò)誤,均不能進(jìn)入系統(tǒng)
2、說明:因?yàn)楦縻y行卡號(hào)位數(shù)不太一樣,銀行卡號(hào)位數(shù)并未設(shè)置。
3、登陸確認(rèn)按鈕代碼如下: Private Sub Command27_Click()If Not Text7.Text = “" And Not Text8.Text = ”“ Then Dim sql As String sql = ”select * from 賬戶 where 銀行卡號(hào)='“ & Trim(Text7.Text)& ”'“
Adodc1.RecordSource = sql
Adodc1.Refresh
If Adodc1.Recordset(”狀態(tài)“)= ”凍結(jié)“ Then '判斷該賬戶狀態(tài)
MsgBox ”該賬戶已凍結(jié)!“
Text7.Text = ”“
Text8.Text = ”“
Else
sql = ”select * from 賬戶 where 銀行卡號(hào)='“ & Trim(Text7.Text)& ”' and 密碼=“ & Trim(Text8.Text)& ”“
Adodc1.RecordSource = sql
Adodc1.Refresh
If Adodc1.Recordset.EOF Then
MsgBox ”密碼錯(cuò)誤!“, 48, ”錯(cuò)誤提示“
Text8.Text = ”“
count1 = count1 + 1
If count1 >= 3 Then '三次輸入錯(cuò)誤凍結(jié)該賬戶
Adodc1.Refresh
sql = ”select * from 賬戶 where 銀行卡號(hào)='“ & Trim(Text7.Text)& ”'“
Adodc1.RecordSource = sql
Adodc1.Refresh
Adodc1.Recordset(”狀態(tài)“)= ”凍結(jié)“
Adodc1.Recordset.Update
MsgBox(”三次輸入錯(cuò)誤,該賬戶已被凍結(jié)“)
End If
Else
Label10.Visible = False
Label11.Visible = False
Text7.Visible = False
Text8.Visible = False
Command27.Visible = False Command28.Visible = False Command14.Visible = True Command15.Visible = True Command16.Visible = True Command17.Visible = True Command18.Visible = True Command19.Visible = True Command24.Visible = True Ynum = Text7.Text Adodc2.Refresh ’添加事務(wù) Adodc2.Recordset.AddNew
Adodc2.Recordset(”銀行卡號(hào)“)= Ynum
Adodc2.Recordset(”事務(wù)類型“)= ”用戶登錄“
Adodc2.Recordset(”時(shí)間“)= Now()
Adodc2.Recordset(”事務(wù)描述“)= ”用戶完成登陸“
Adodc2.Recordset.Update
Adodc2.Refresh Text7.Text = ”“ Text8.Text = ”“ End If End If Else MsgBox(”信息不全!請(qǐng)確認(rèn)“)End If End Sub
4、界面截圖如下:
三)、系統(tǒng)主界面
1、功能:ATM的主要功能陳列,供用戶選擇,其中包括存款、取款、轉(zhuǎn)賬、查詢余額、修改密碼、取卡、返回。當(dāng)賬戶登錄時(shí),將在事務(wù)表中記錄登錄時(shí)間。
2、說明:由于所有按鈕均只是用來調(diào)出對(duì)應(yīng)的功能的界面,并沒有實(shí)際功能,所以在此省略其按鈕代碼。
3、界面截圖如下:
四)、存款界面
1、功能:a、只允許用戶輸入100的整數(shù)值
b、當(dāng)文本框?yàn)榭諘r(shí)報(bào)錯(cuò)
c、實(shí)現(xiàn)用戶的存款功能
d、每存入一筆款,都將在事務(wù)表中記錄該操作
2、存款代碼如下:If Not Text12.Text = ”“ Then If Val(Text12.Text)Mod 100 = 0 Then Adodc1.Refresh Adodc1.Recordset(”余額“)= Adodc1.Recordset(”余額“)+ Val(Text12.Text)Adodc1.Recordset.Update Adodc1.Refresh Label15.Caption = ”存款成功“ ye = ye + Text12.Text Adodc2.Refresh Adodc2.Recordset.AddNew
Adodc2.Recordset(”銀行卡號(hào)“)= Ynum
Adodc2.Recordset(”事務(wù)類型“)= ”存款“
Adodc2.Recordset(”時(shí)間“)= Now()
Adodc2.Recordset(”事務(wù)描述“)= ”用戶存入“ & Text12.Text & ”元“
Adodc2.Recordset.Update
Adodc2.Refresh Text12.Text = ”“ Command33.Enabled = True Command32.Enabled = False Else MsgBox ”請(qǐng)輸入100的整數(shù)“ End If Else Label15.Caption = ”無款可存“ End If End Sub
3、界面截圖如下:
四)、取款界面
1、功能:a、用戶按相對(duì)應(yīng)數(shù)值的按鈕進(jìn)行取款
b、每個(gè)賬戶每天取款數(shù)不能超過2500
c、賬戶余額不足時(shí),報(bào)錯(cuò)
d、用戶每取走一筆款額,都將在事務(wù)表中記錄取走金額和時(shí)間
2、說明:由于不同數(shù)值按鈕的代碼很相似,所以這里僅給出100按鈕的代碼
3、存款代碼如下:Private Sub Command20_Click()Adodc1.Refresh If Adodc1.Recordset(”余額“)>= 100 Then Adodc1.Refresh Adodc1.Recordset(”余額“)= Adodc1.Recordset(”余額“)100 Adodc2.Refresh Adodc2.Recordset.AddNew
Adodc2.Recordset(”銀行卡號(hào)“)= Ynum
Adodc2.Recordset(”事務(wù)類型“)= ”取款“
Adodc2.Recordset(”時(shí)間“)= Now()
Adodc2.Recordset(”事務(wù)描述“)= ”用戶取走100元“
Adodc2.Recordset.Update
Adodc2.Refresh Else Label15.Caption = ”余額不足,取款失敗“ End If End Sub
4、取款界面截圖如下:
五)、查詢余額界面
1、功能:實(shí)現(xiàn)用戶查詢對(duì)應(yīng)賬戶的余額
2、查詢余額代碼如下:Private Sub Command17_Click()Command14.Visible = False Command15.Visible = False Command16.Visible = False Command17.Visible = False Command18.Visible = False Command19.Visible = False Label6.Visible = False Label7.Visible = False sql = ”select 余額 from 賬戶
where 銀行卡號(hào)= '“ & Ynum & ”'“ Adodc1.RecordSource = sql Adodc1.Refresh Label8.Caption = Adodc1.Recordset.Fields(”余額“)Adodc2.Refresh Adodc2.Recordset.AddNew
Adodc2.Recordset(”銀行卡號(hào)“)= Ynum
Adodc2.Recordset(”事務(wù)類型“)= ”查詢余額“
Adodc2.Recordset(”時(shí)間“)= Now()
Adodc2.Recordset(”事務(wù)描述“)= ”查詢余額“
Adodc2.Recordset.Update
Adodc2.Refresh Label9.Visible = True Label8.Visible = True End Sub
3、查詢余額界面截圖如下:
六)、轉(zhuǎn)賬界面
1、功能:a、實(shí)現(xiàn)用戶轉(zhuǎn)賬
b、需2次確認(rèn)賬戶信息,若信息輸入不全,賬戶余額不足,2次輸入不一樣,均不可完成轉(zhuǎn)賬
c、用戶每轉(zhuǎn)一筆賬,均將在事務(wù)表中記錄轉(zhuǎn)賬金額和時(shí)間
2、轉(zhuǎn)賬代碼如下:Private Sub Command30_Click()If Not Text11.Text = ”“ And Not Text10.Text = ”“ And Not Text9.Text = ”“ Then If Text10.Text = Text9.Text Then Adodc1.Refresh If Adodc1.Recordset(”余額“)>= Val(Text11.Text)Then Adodc1.Refresh Adodc1.Recordset(”余額“)= Adodc1.Recordset(”余額“)Me.picLOAD.Width)/ 2 'Me.picLOAD.Top = Me.ScaleHeight / 2Me.picLOAD.Width)/ 2 'Me.picLOAD.Top = Me.ScaleHeight / 2Me.picLOAD.Width)/ 2 'Me.picLOAD.Top = Me.ScaleHeight / 2-Me.picLOAD.Height Me.picLOAD.Visible = True 'DoEvents '釋放控制權(quán)
Me.ListView1.ListItems.Clear Dim addLIST As ListItem Dim ss As String Dim sql As String ss = App.Path + ”datadata.mdb“ Adodc1.ConnectionString = ”Provider=Microsoft.Jet.OLEDB.4.0;Jet OLEDB:Database Password=gxl;Persist Security Info=False;Data Source=“ & ss Adodc1.CommandType = adCmdText sql = ”select * from ATM“ Adodc1.RecordSource = sql Adodc1.Refresh '連接數(shù)據(jù)庫(kù)
Do While Not Adodc1.Recordset.EOF Set addLIST = ListView1.ListItems.Add(, , Adodc1.Recordset!ATM機(jī)編號(hào), , i)addLIST.SubItems(1)= IIf(IsNull(Adodc1.Recordset.Fields(”狀態(tài)“).Value), Adodc1.Recordset.Fields(”狀態(tài)“).Value)addLIST.SubItems(2)= IIf(IsNull(Adodc1.Recordset.Fields(”余額“).Value), Adodc1.Recordset.Fields(”余額“).Value)Adodc1.Recordset.MoveNext Loop Me.picLOAD.Visible = False End Sub
Private Sub Toolbar1_ButtonClick(ByVal Button As MSComctlLib.Button)Select Case Button.Index
Case Is = 2 '
ZhZCfrm.Show 1
Case Is = 3
' ZHZXfrm.Show 1
Case Is = 4
Call addLIST End Select End Sub
3、界面截圖:
”“, ”“,六)、單位信息界面
1、功能:顯示單位信息
2、代碼: Private Sub cmdBC_Click()'修改銀行信息 Dim s As String If Not Text1(0).Text = ”“ And Not Text1(1).Text = ”“ And Not Text1(2).Text = ”“ And Not Text1(3).Text = ”“ And Not Text1(4).Text = ”“ Then
s = ”update 銀行信息 set 銀行名稱='“ & Text1(0).Text & ”',銀行地址='“ & Text1(1).Text & ”',郵政編號(hào)='“ & Text1(2).Text & ”',負(fù)責(zé)人='“ & Text1(3).Text & ”', 聯(lián)系電話='“ & Text1(4).Text & ”'“
Adodc1.RecordSource = s
MsgBox(”修改成功“)
Adodc1.Recordset.Update
Else
MsgBox ”修改信息不全,請(qǐng)檢查!“
End If End Sub
Private Sub Form_Load()Dim ss As String Dim sql As String ss = App.Path + ”datadata.mdb“ Adodc1.ConnectionString = ”Provider=Microsoft.Jet.OLEDB.4.0;Jet OLEDB:Database Password=gxl;Persist Security Info=False;Data Source=“ & ss Adodc1.CommandType = adCmdText sql = ”select * from 銀行信息“ Adodc1.RecordSource = sql Adodc1.Refresh '連接數(shù)據(jù)庫(kù) End Sub
3、界面截圖:
七)、下面給出數(shù)據(jù)備份還原的代碼 Private Sub a14_Click()On Error GoTo ERR_line newname = App.Path & ”datadata.mdb“ datapath = App.Path & ”backup“ & Date & ” 備份卡.bak“ FileCopy newname, datapath MsgBox ”數(shù)據(jù)已備份到
“ & datapath, 64, ”提示“ Exit Sub ERR_line: MsgBox ”不能完成數(shù)據(jù)備份!“, 48, ”運(yùn)行錯(cuò)誤“ End Sub
Private Sub a15_Click()On Error GoTo ERR_line
Me.CommonDialog1.ShowOpen
snewname = Me.CommonDialog1.FileName
sdatapath = App.Path & ”datadata.mdb“
If snewname <> ”“ Then
If MsgBox(”還原后將覆蓋原有數(shù)據(jù),確定還原嗎?“, vbInformation + vbYesNo, ”提示“)= vbYes Then
FileCopy snewname, sdatapath
MsgBox ”數(shù)據(jù)已經(jīng)成功還原!請(qǐng)重新登陸 “, 48, ”提示“
Unload Me
Formload.Show
Else
Exit Sub End If
End If Exit Sub
ERR_line: MsgBox ”不能完成數(shù)據(jù)還原,請(qǐng)進(jìn)入系統(tǒng)后未做任何操作時(shí)進(jìn)行!“, 48, ”運(yùn)行錯(cuò)誤" End Sub
四、數(shù)據(jù)庫(kù)
本系統(tǒng)使用的是access數(shù)據(jù)庫(kù)。數(shù)據(jù)庫(kù)密碼為gxl。本系統(tǒng)共有5張表,分別為:ATM,事務(wù),系統(tǒng)用戶表,銀行信息,賬戶。
下面給出數(shù)據(jù)庫(kù)的相關(guān)截圖。
1、表圖:
2、ATM的設(shè)計(jì)視圖
3、事務(wù)的設(shè)計(jì)視圖
4、系統(tǒng)用戶表的設(shè)計(jì)視圖
5、銀行信息的設(shè)計(jì)視圖
6、賬戶的設(shè)計(jì)視圖
第二篇:VB人事管理系統(tǒng)[模版]
I 圖書管理系統(tǒng)一、課程設(shè)計(jì)的目的與要求.......................................2
二、題目分析...................................................3
三、設(shè)計(jì)思路...................................................3
四、調(diào)試過程...................................................5 4.1、設(shè)計(jì)工程框架..........................................5 4.1.1、設(shè)計(jì)登錄窗體....................................5 4.1.2、圖書基本信息管理模塊設(shè)計(jì)........................7 4.2、設(shè)計(jì)圖書信息編輯窗體..................................8 4.3、圖書信息管理窗體......................................9 4.4、圖書借閱管理模塊設(shè)計(jì).................................11 4.4.1、設(shè)計(jì)借閱證件類型編輯窗體.......................11 4.4.2、設(shè)計(jì)借閱證件類型管理窗體.......................13 4.4.3、設(shè)計(jì)借閱證件編輯窗體...........................14 4.4.4、設(shè)計(jì)借閱證件管理窗體...........................14 4.4.5、設(shè)計(jì)圖書借閱記錄查看窗體.......................16 4.4.6、設(shè)計(jì)圖書借閱信息編輯窗體.......................17 4.4.7、設(shè)計(jì)圖書歸還信息管理窗體.......................17 4.4.8、設(shè)計(jì)圖書借閱管理窗體...........................18 4.4.9、設(shè)計(jì)用戶信息編輯窗體...........................19
五、運(yùn)行結(jié)果.................................................21
六、課程設(shè)計(jì)總結(jié)..............................................21
七、參考文獻(xiàn)..................................................2I 圖書管理系統(tǒng)
摘要
隨著人類社會(huì)的發(fā)展,人類對(duì)知識(shí)的需求也不斷地增長(zhǎng)。在這種形勢(shì)下,書籍就漸漸地成為人們獲取并增長(zhǎng)知識(shí)的主要途徑,而圖書館就自然而然地在人們的生活中占據(jù)了一定的位置。繪本圖書與其他普通圖畫書的區(qū)別在于繪本圖書通常有獨(dú)立的繪畫著者,圖畫有個(gè)人風(fēng)格,畫面即情即景,可單幅成畫,容易提高兒童讀書的積極性。如何科學(xué)地管理繪本館不但關(guān)系到讀者求知的方便程度,也關(guān)系到繪本館的發(fā)展,因此,開發(fā)一套完善的繪本圖書館管理系統(tǒng)就成不可少了,圖書管理系統(tǒng)是典型的信息管理系統(tǒng)(MIS),其開發(fā)主要包括后臺(tái)數(shù)據(jù)庫(kù)的建立和維護(hù)以及前端應(yīng)用程序的開發(fā)兩個(gè)方面。
經(jīng)過分析,使用 Microsoft公司的Visual Basic6.0為開發(fā)工具,利用其提供的各種面向?qū)ο蟮目梢暬_發(fā)平臺(tái)作為開發(fā)工具,采用面向?qū)ο蠹夹g(shù),圖形化的應(yīng)用開發(fā)環(huán)境,尤其是它有一個(gè)功能極其強(qiáng)大的集成環(huán)境提供級(jí)開發(fā)人員,使得開發(fā)人員可通過菜單、界面、圖形瀏覽工具、對(duì)話框以及嵌入的各種生成器來輕松地完成各種復(fù)雜的操作。開發(fā)過程中不斷修正和改進(jìn),直到形成用戶滿意的可行系統(tǒng)。
本文介紹了在Visual Basic6.0環(huán)境下采用“自上而下地總體規(guī)劃,自下而上地應(yīng)用開發(fā)”的策略開發(fā)本系統(tǒng)的詳細(xì)過程,提出實(shí)現(xiàn)繪本圖書館信息管理、資源共享的基本目標(biāo),從而推動(dòng)邁向數(shù)字化繪本圖書館的步伐,并闡述系統(tǒng)結(jié)構(gòu)設(shè)計(jì)和功能設(shè)計(jì),從繪本圖書的入庫(kù)登記到查詢?yōu)g覽,形成了一個(gè)整體自動(dòng)化管理模式,從軟件工程的角度進(jìn)行了科學(xué)而嚴(yán)謹(jǐn)?shù)年U述。圖書管理系統(tǒng)
圖書管理基本業(yè)務(wù)活動(dòng)包括:對(duì)一本書的采編入庫(kù)、清除庫(kù)存、借閱和歸還等等。試設(shè)計(jì)一個(gè)圖書管理系統(tǒng),將上述業(yè)務(wù)活動(dòng)借助于VB數(shù)據(jù)庫(kù)管理系統(tǒng)完成。
關(guān)鍵字:圖書管理系統(tǒng);SQL Server數(shù)據(jù)庫(kù);Visual Basic開發(fā)語言;管理信息系統(tǒng)。
一、課程設(shè)計(jì)的目的與要求
掌握VB的數(shù)據(jù)庫(kù)編程技巧,及利用Access創(chuàng)建數(shù)據(jù)庫(kù)的方法,利用VB的數(shù)據(jù)庫(kù)控件與數(shù)據(jù)源建立連接,完成一個(gè)較為簡(jiǎn)單的數(shù)據(jù)庫(kù)管理系統(tǒng)的設(shè)計(jì)。每種書的登記內(nèi)容至少包括書號(hào)、書名、著者、現(xiàn)存量和總庫(kù)存量等五項(xiàng),對(duì)書目的相關(guān)信息均采用數(shù)據(jù)庫(kù)存儲(chǔ)。
系統(tǒng)應(yīng)實(shí)現(xiàn)的操作及其功能定義如下:
1)采編入庫(kù):新購(gòu)入一種書,經(jīng)分類和確定書號(hào)之后登記到圖書賬目中去。如果這種書 在帳中已有,則只將總庫(kù)存量增加。2)清除庫(kù)存:某種書已無保留價(jià)值,將它從圖書賬目中注銷。3)借閱:如果一種書的現(xiàn)存量大于零,則借出一本,登記借閱者的圖書證號(hào)和歸還期 限。
4)歸還:注銷對(duì)借閱者的登記,改變?cè)摃默F(xiàn)存量。5)顯示:顯示書庫(kù)信息。圖書管理系統(tǒng)
二、題目分析
圖書管理系統(tǒng)需要的功能分析如下:
管理系統(tǒng)具有多個(gè)管理員,管理員可以使用不同的用戶名和密碼進(jìn)入管理系統(tǒng),并可以修改自己的密碼;
(一)進(jìn)入系統(tǒng)后可以重新登錄該系統(tǒng);
(二)在系統(tǒng)中可以對(duì)數(shù)據(jù)庫(kù)進(jìn)行簡(jiǎn)單的操作;
(三)最基本的功能還應(yīng)具有可以編輯圖書——錄入、刪除圖書資料。圖書分類信息的添加、修改、刪除和查詢。此功能為圖書的分類管理提供依據(jù)。
(四)圖書基本信息的添加、修改、刪除和查詢。
(五)借閱證件分類信息的添加、修改、刪除和查詢。不同類型的借閱證件可以借閱的最大數(shù)量、最大天數(shù)和續(xù)借天數(shù)不同。
(六)圖書借閱證件的添加、修改、刪除、掛失和查詢。
(七)圖書借閱管理,包括圖書借閱、圖書歸還、圖書續(xù)借、圖書掛失和圖書催還等。
三、設(shè)計(jì)思路
系統(tǒng)運(yùn)作流程,該系統(tǒng)涉及到用戶以及管理員,在兩者之間進(jìn)行一系列的操作。管理員對(duì)圖書進(jìn)行錄入、刪除等操作,和用戶之間的交流則是進(jìn)行借閱圖書操作。運(yùn)作流程圖如圖1所示: 3 圖書管理系統(tǒng)
圖1 運(yùn)作流程圖
圖2所示,具體的操作流程: 圖書管理系統(tǒng)
圖2 具體的操作流程
四、調(diào)試過程 4.1、設(shè)計(jì)工程框架 4.1.1、設(shè)計(jì)登錄窗體
登錄窗體名稱為FrmLogin,它的界面布局如圖3所示: 圖書管理系統(tǒng)
圖3 界面布局
主窗體啟動(dòng)時(shí),首先打開登陸對(duì)話框。主窗體代碼如下: Private sub Form_load()Frmlogin.show1 End sub 如選的是退出系統(tǒng)菜單項(xiàng)時(shí),觸發(fā)mn_exit_click 事件,代碼如下:
Private sub mn_exit_click()Dbapi_disconnect End End sub 通過身份認(rèn)證時(shí),則進(jìn)入系統(tǒng)主界面如圖4所示: 圖書管理系統(tǒng)
圖4 進(jìn)入系統(tǒng)主界面
4.1.2、圖書基本信息管理模塊設(shè)計(jì)
圖書基本信息管理模塊可以實(shí)現(xiàn)以下功能: A、添加圖書基本信息。B、修改圖書基本信息。C、刪除圖書基本信息。D、查看圖書基本信息。圖書管理系統(tǒng)
4.2、設(shè)計(jì)圖書信息編輯窗體
圖書信息編輯窗體的名稱為FrmBookEdit,窗體的布局如圖5所示:
圖5 窗體的布局
代碼如下:
Private sub Cmd _OK_Click()With MyBookinfo BookNo=MakeStr(txtBookNo)‘圖書編號(hào) BookName=MakeStr(txtBookName)‘圖書名稱 Publisher=MakeStr(txtpulisher)
‘出版社 圖書管理系統(tǒng)
Author=MakeStr(txtAuthor)‘作者 Location=MakeStr(txtLocation)‘存放位置 Price=Val(txtPrice)‘價(jià)格 Total=Val(txtTotal)‘?dāng)?shù)量 Typeld=nBookTypeld ‘圖書分類 Descripition=MakeStr(txtDescripition)IfModify=False Then Insert Cmd_Ok.Enabled=False Else Call.UpDate(OnNo)End If End With Unload Me End Sub 4.3、圖書信息管理窗體
如圖6所示: 圖書系統(tǒng)管理界面 圖書管理系統(tǒng)
圖6 圖書系統(tǒng)管理界面
Private Sub TreeView1_Click()Focuskey=TreeView1_SelectdItem.Key CurBookTypeName=TreeView1.SelectdItem.Text CurBookTypeId=Val(Right(TreeView1.SelectdItem.Key,Len(TreeView1.SelectdItem.Key)-1))IfFocusKey=”a0” Then nTypeId=-1 Exit Sub End if bHaveSon=CurBookType.HaveSon(CurBookType.TypeId)10 圖書管理系統(tǒng)
If bHaveSon=False Then TreeView1.SelectedItem.ExpandedImage=4 TreeView1.SelectedItem.Image=4 TreeView1.SelectedItem.SelectImage=5 nType=CurBookType.TypeId CurBookType.GetInfo(CurBookType.TypeId)GridRefresh End sub
4.4、圖書借閱管理模塊設(shè)計(jì)
圖書借閱管理模塊可以實(shí)現(xiàn)以下功能: a.借閱證件類型管理。b.借閱證件管理 c.圖書借閱管理
4.4.1、設(shè)計(jì)借閱證件類型編輯窗體
借閱證件類型編輯窗體的名稱為FrmCardTypeEdit,如圖7所示: 圖書管理系統(tǒng)
圖7 閱證件類型編輯窗體
代碼:
Private Sub Cmd_Ok_Click()With MyCardType TypeName=MakeStr(txtTypeName)MaxCount=Val(txtMaxCount)MaxDays=Val(txtMaxDays)AddDays=Val(txtAddDays)If Modify=False Then Insert End Call.Upate(tId)End if End with Unload Me End sub 圖書管理系統(tǒng)
4.4.2、設(shè)計(jì)借閱證件類型管理窗體
借閱證件類型管理窗體的名稱為FrmCardType,窗體布局如圖8所示:
圖8 借閱證件類型管理窗體
代碼:
Private Sub GridRefresh()Adodc1.ConnectionString=conn ‘設(shè)置數(shù)據(jù)源
Adodc1.RecordSource=”SELECT ID AS編號(hào),TypeNameAS 類型名稱,MaxCount AS最大借閱數(shù)量,”+”MaxDays AS 最多借閱天數(shù),AddDays As 續(xù)借天數(shù) FROM CardType ORDER BY Id” Adodc1.Refresh‘設(shè)置列寬度 End sub 13 圖書管理系統(tǒng)
4.4.3、設(shè)計(jì)借閱證件編輯窗體
借閱證件類型編輯窗體的名稱為FrmCardsEdit,如圖9所示:
圖9 借閱證件類型編輯窗體
4.4.4、設(shè)計(jì)借閱證件管理窗體
設(shè)計(jì)借閱證件管理窗體的名稱為FrmCardS,如圖10所示: 圖書管理系統(tǒng)
圖10 設(shè)計(jì)借閱證件管理窗體
代碼:
Private Sub GridRefresh()Adodc1.ConnectionString=com If ComboCardStatus.ListIndex=0 Then SchCnd=”” Else SchCnd=
”
AND
c.Status=
”+Trim(ComboCardStatus.Text)+”” End if Adodc1.RecordSource=”SELECT c.CardNo AS借書證號(hào),c.Name AS 姓名,t.TypeName AS 類型,”+”c.Status AS 狀態(tài),t.MaxCount AS可借數(shù)量,t.MaxDays AS 借閱天數(shù),c.WorkPlace AS工作單位,”+”c.IdCard AS 有效證件號(hào)碼,c.CreateDate AS 發(fā)證日期” 圖書管理系統(tǒng)
+”FROM Cards c,CardType t WHERE c.TypeId=t.Id”+SchCnd +”O(jiān)RDER BY CardNo” Adodc1.Refresh ‘設(shè)置列寬度
If ComboCardStatus.ListIndex= 1 Then Cmd_Add.Enabled=Ture End if End sub
4.4.5、設(shè)計(jì)圖書借閱記錄查看窗體
用于查看指定借閱證件記錄,窗體名為FrmRecord,窗體布局如圖11所示:
圖11 查看指定借閱證件記錄 圖書管理系統(tǒng)
4.4.6、設(shè)計(jì)圖書借閱信息編輯窗體
設(shè)計(jì)圖書借閱信息編輯窗體的名稱為FrmBorrowEdit,此窗體的工作過程比較復(fù)雜,它的布局如圖12所示:
圖12 圖書借閱信息編輯窗體
4.4.7、設(shè)計(jì)圖書歸還信息管理窗體
設(shè)計(jì)圖書歸還信息管理窗體的名稱為FrmReturnEdit, 窗體布局如圖13所示: 圖書管理系統(tǒng)
圖13 設(shè)計(jì)圖書歸還信息管理窗體
4.4.8、設(shè)計(jì)圖書借閱管理窗體
設(shè)計(jì)圖書借閱管理窗體的名稱為FrmBorrow, 窗體布局如圖14所示:
圖14 設(shè)計(jì)圖書借閱管理窗體 圖書管理系統(tǒng)
如圖15所示:
圖15 設(shè)計(jì)圖書借閱管理窗體
4.4.9、設(shè)計(jì)用戶信息編輯窗體
用戶信息編輯窗體可以用來添加和修改用戶信息,窗體名稱為FrmUserEdit,窗體布局如圖16所示:
圖16 用戶信息編輯窗體
代碼: 圖書管理系統(tǒng)
Private sub Cmd_Ok_Click()With MyUser If
Modfiy=False
Or OriUser<>Trim(txtUserName)Then If.In_DB(MakeStr(txtUserName))=True Then MsgBox”用戶名已經(jīng)存在,請(qǐng)重新輸入” txtUserName.SetFocus txtUserName.SelStart=0 txtUserName.SelLenght=Len(txtUserName)Exit sub End if.UserName=MakeStr(txtUserName).Pwd=MakeStr(txtPass)If Modify=False Then.Insert Else.Update(OriUser)If
OriUser=CurUserName Trim(txtUserName)<>OriUser Then CurUser.UserName=Trim(txtUserName)CurUser.GetInfo(CurUserName)
End if End if End With
And
圖書管理系統(tǒng)
Unload Me End Sub
五、運(yùn)行結(jié)果
如圖17所示:
圖17 運(yùn)行結(jié)果
六、課程設(shè)計(jì)總結(jié)
通過本次課程設(shè)計(jì),我們不僅加深了平時(shí)的學(xué)習(xí)并且了解到更多關(guān)于Visual Basic和SQL Server的使用,并且利用所學(xué)知識(shí)將各個(gè)對(duì)象的使用結(jié)合起來制作了一個(gè)完整的系統(tǒng)。這個(gè)圖書館系統(tǒng)可以使操作員進(jìn)行一般的查詢圖書和會(huì)員信息、借閱和歸還圖書、整理圖書包括錄入和注銷圖書以及修改管理員密碼以保護(hù) 21 圖書管理系統(tǒng)
自己使用該系統(tǒng)的權(quán)利的功能。在結(jié)束了課程設(shè)計(jì)之后讓我們對(duì)Visual Basic 的各個(gè)控件有了更好地掌握之外,也讓我們了解了一個(gè)圖書管理系統(tǒng)的基本模式,學(xué)習(xí)之余擴(kuò)寬了知識(shí)面。雖然在平時(shí)的學(xué)習(xí)中通過老師的講授已經(jīng)基本掌握了Visual Basic的用法,但知識(shí)分散不牢固。通過本次設(shè)計(jì),我們可以靈活的將VB中的基本控件結(jié)合起來,制作了這個(gè)完整的系統(tǒng),并能準(zhǔn)確地使用所學(xué)的編程語言來制作該系統(tǒng)??梢哉f完成課程設(shè)計(jì)之后讓我們受益匪淺,同時(shí)也鍛煉了我們的獨(dú)立思考能力。相信通過本次實(shí)驗(yàn),我們可以更好的使用VB來制作一些其他系統(tǒng),能進(jìn)一步學(xué)習(xí)和使用VB.當(dāng)然,由于這是我們第一次進(jìn)行制作,水平和經(jīng)驗(yàn)限制了系統(tǒng)的功能。一些圖書管理應(yīng)有的功能暫時(shí)無法實(shí)現(xiàn),需要更加完善。相信在這次實(shí)驗(yàn)之后我們可以對(duì)圖書管理系統(tǒng)有進(jìn)一步的學(xué)習(xí)和研究,以得到更好的發(fā)展。
七、參考文獻(xiàn)
《Visual Basic程序設(shè)計(jì)》 譚浩強(qiáng),清華大學(xué)出版社 《VB語言程序設(shè)計(jì)》 林卓然,電子工業(yè)出版社
《Visual Basic 6.0程序設(shè)計(jì)》 劉新民,清華大學(xué)出版社 《Visual Basic 程序設(shè)計(jì)教程》 羅朝盛,人民郵電出版社 《Visual Basic 6.0高級(jí)編程》 [美]Julia,清華大學(xué)出版社 《Visual Basic程序設(shè)計(jì)教程習(xí)題及習(xí)題解答》劉瑞新,機(jī)械工業(yè)出版杜
《全國(guó)計(jì)算機(jī)等級(jí)考試二級(jí)教程-Visual Basic語言程序設(shè)計(jì)》劉炳文,高等教育出版社 圖書管理系統(tǒng)
附錄(源程序代碼)
權(quán)限設(shè)置的主要代碼: Option Explicit Public constr As String '數(shù)據(jù)庫(kù)連接信息 Public privilege As Integer '用戶權(quán)限 Public rst As ADODB.Recordset '數(shù)據(jù)庫(kù)內(nèi)的記錄 Public rst1 As ADODB.Recordset Public rst2 As ADODB.Recordset Public con As ADODB.Connection Public tablename As String Type userdata '用戶信息,包括用戶名,密碼和對(duì)應(yīng)的權(quán)限 user_id As String pwd As String right As Integer End Type Public Sub connect_db()constr = “Provider=Microsoft.Jet.OLEDB.4.0;” + “Data Source=” + App.Path + “dataComputerBookmanage.mdb” + “;Persist Security Info=False” '數(shù)據(jù)庫(kù)引擎+路徑
Set con = New ADODB.Connection '新建一個(gè)數(shù)據(jù)庫(kù)連接
con.CursorLocation = adUseClient '用于客戶端(ADOR)Recordset對(duì)象,游標(biāo)
庫(kù)屬性必須為adUseClient 圖書管理系統(tǒng)
con.ConnectionString = constr '連接信息 con.Open End Sub Function open_connection(table_name As String)Dim sqlstr As String Dim str As String Set con = New ADODB.Connection Set rst = New ADODB.Recordset con.CursorLocation = adUseClient sqlstr = “Provider=Microsoft.Jet.OLEDB.4.0;” + “Data Source=” + App.Path + “dataComputerBookmanage.mdb” + “;Persist Security Info=False” con.Open sqlstr str = “select * from ” & table_name & “" '執(zhí)行SQL查詢 rst.Open str, con, adOpenDynamic, adLockOptimistic rst.Requery End Function Public Sub check_privage(rightlevel As Integer)Dim right As Integer right = rightlevel Select Case right Case 1: '普通用戶,只能查詢圖書信息和借閱信息 Form1.xpcmdbutton1.Enabled = False Form1.xpcmdbutton2.Enabled = False Form1.xpcmdbutton3.Enabled = False 圖書管理系統(tǒng)
Form1.xpcmdbutton4.Enabled = False Form1.xpcmdbutton5.Enabled = True Form1.xpcmdbutton6.Enabled = True Form1.xpcmdbutton7.Enabled = False Form1.xpcmdbutton8.Enabled = False Form1.xpcmdbutton10.Enabled = False Form1.Show Unload frmLogin Case 2: '2級(jí)管理員,還可以借書和還書 Form1.xpcmdbutton1.Enabled = True Form1.xpcmdbutton2.Enabled = True Form1.xpcmdbutton3.Enabled = False Form1.xpcmdbutton4.Enabled = False Form1.xpcmdbutton5.Enabled = True Form1.xpcmdbutton6.Enabled = True Form1.xpcmdbutton7.Enabled = True Form1.xpcmdbutton8.Enabled = False Form1.xpcmdbutton10.Enabled = False Form1.Show Unload frmLogin Case 3: '3級(jí)管理員,可以錄入圖書 Form1.xpcmdbutton1.Enabled = True Form1.xpcmdbutton2.Enabled = True Form1.xpcmdbutton3.Enabled = True Form1.xpcmdbutton4.Enabled = False 圖書管理系統(tǒng)
Form1.xpcmdbutton5.Enabled = True Form1.xpcmdbutton6.Enabled = True Form1.xpcmdbutton7.Enabled = True Form1.xpcmdbutton8.Enabled = False Form1.xpcmdbutton10.Enabled = False Form1.Show Unload frmLogin Case 4: '系統(tǒng)管理員 Form1.xpcmdbutton1.Enabled = True Form1.xpcmdbutton2.Enabled = True Form1.xpcmdbutton3.Enabled = True Form1.xpcmdbutton4.Enabled = True Form1.xpcmdbutton5.Enabled = True Form1.xpcmdbutton6.Enabled = True Form1.xpcmdbutton7.Enabled = True Form1.xpcmdbutton8.Enabled = True Form1.xpcmdbutton10.Enabled = True Form1.Show Unload frmLogin End Select End Sub 登陸后權(quán)限的分配主要代碼如下:
If LCase(Trim(rst![登錄名]))= LCase(Trim(Text1.Text))Then If Trim(rst![密碼])= Trim(Text2.Text)Then 圖書管理系統(tǒng)
privilege = rst![權(quán)限] Call check_privage(privilege)'權(quán)限分配讀者管理主要代碼:
Private Sub Command1_Click()'添加記錄 Dim sql As String Dim param As ADODB.Parameter Dim cmd As ADODB.Command Set cmd = New ADODB.Command Set param = New ADODB.Parameter sql = ”select * from reader where [讀者編號(hào)]= ? “ If Command1.Caption = ”添加記錄“ Then Command1.Caption = ”確 定“ Command2.Enabled = False Command3.Enabled = False Command4.Enabled = False rst.AddNew Else If Text1.Text = ”“ Then frmMsg.Show frmMsg.notice.Visible = True frmMsg.Text1.Text = ”讀者編號(hào)不能為空!“ Command2.Enabled = True Command3.Enabled = True Command4.Enabled = True Command1.Caption = ”添加記錄“ 圖書管理系統(tǒng)
Exit Sub End If With param.Direction = adParamInput.Type = adBSTR.Size = 8.Value = Text1.Text End With cmd.Parameters.Append param cmd.CommandText = sql cmd.CommandType = adCmdText Set cmd.ActiveConnection = con Set rst1 = cmd.Execute '檢測(cè)讀者編號(hào)是否存在防止主鍵沖突 If rst1.RecordCount > 0 Then frmMsg.Show frmMsg.notice.Visible = True frmMsg.Text1.Text = ”此讀者編號(hào)已經(jīng)存在!“ rst.Cancel Command2.Enabled = True Command3.Enabled = True Command4.Enabled = True Command1.Caption = ”添加記錄“ Exit Sub End If 圖書管理系統(tǒng)
rst.Update frmMsg.Show frmMsg.notice.Visible = True frmMsg.Text1.Text = ”添加成功!“ Command2.Enabled = True Command3.Enabled = True Command4.Enabled = True Command1.Caption = ”添加記錄“ End If End Sub Private Sub Command2_Click()'刪除紀(jì)錄 Dim ans As String ans = Msgbox(”確定要?jiǎng)h除此記錄嗎?“, vbYesNo, ”提示“)If ans = vbYes Then rst.Delete rst.Requery Else Exit Sub End If End Sub Private Sub Command3_Click()'上一記錄 If rst.BOF Then frmMsg.Show frmMsg.info.Visible = True frmMsg.Text1.Text = ”已經(jīng)到達(dá)記錄頂端!“ 圖書管理系統(tǒng)
Exit Sub Else rst.MovePrevious End If End Sub
Private Sub Command4_Click()'下一記錄 If rst.EOF Then frmMsg.Show frmMsg.info.Visible = True frmMsg.Text1.Text = ”已經(jīng)到達(dá)記錄底端!“ Exit Sub Else rst.MoveNext End If End Sub Private Sub Command5_Click()Unload Me End Sub Private Sub Form_Load()Dim sql1 As String Set rst = New ADODB.Recordset sql1 = ”select * from reader“ '打開數(shù)據(jù)庫(kù)并對(duì)窗體控件賦值 Call connect_db rst.Open sql1, con, adOpenDynamic, adLockOptimistic
圖書管理系統(tǒng)
Set Text1.DataSource = rst Set Text2.DataSource = rst Set Text3.DataSource = rst Set Text4.DataSource = rst Set Text5.DataSource = rst Set Text6.DataSource = rst Set Text7.DataSource = rst Set Text8.DataSource = rst Text1.DataField = ”讀者編號(hào)“ Text2.DataField = ”讀者姓名“ Text3.DataField = ”性別“ Text4.DataField = ”電話號(hào)碼“ Text5.DataField = ”家庭地址“ Text6.DataField = ”讀者類別“ Text7.DataField = ”工作單位“ Text8.DataField = ”登記日期" End Sub Private Sub xptopbuttons1_Click()Unload Me End Sub Private Sub xptopbuttons2_Click()Me.WindowState = 1 End Sub Private Sub Frame1_DragDrop(Source As Control, X As Single, Y As Single)
圖書管理系統(tǒng)
End Sub
第三篇:uml建模報(bào)告ATM自動(dòng)柜員機(jī)系統(tǒng)
UML建模報(bào)告
(2010 / 2011 學(xué)年 第 2學(xué)期)
題 目:
基于UML的ATM自動(dòng)
柜員機(jī)系統(tǒng)
專
業(yè):
成員:
指
導(dǎo)
教
師:
基于UML的ATM自動(dòng)柜員機(jī)系統(tǒng)建模報(bào)告
一、需求分析
(1)功能需求:
1.登陸:客戶通過輸入正確的登陸密碼即可登陸ATM。
2.取款:允許客戶取出自己賬戶中的現(xiàn)金。3.客戶存款:允許客戶把現(xiàn)金存入自己賬戶。4客戶查詢余額:允許客戶查詢自己的賬戶余額。
5客戶轉(zhuǎn)賬:允許客戶將自己賬戶中的金額轉(zhuǎn)移至另一賬戶。6客戶更改密碼:允許客戶修改自己的登錄密碼。
(2)系統(tǒng)操作要求:
1.要求用戶每次取款數(shù)額為50的整數(shù)倍;
2.要求用戶一次取款數(shù)額不得大于1000元; 3.要求用戶一天取款數(shù)額不得超過5000元; 4.要求用戶每次取款數(shù)額不得大于賬戶余額; 5.要求用戶設(shè)置的登錄密碼為6位。
(3)系統(tǒng)性能要求:
1.要求反應(yīng)時(shí)間不得大于10秒鐘; 2. 系統(tǒng)設(shè)計(jì)目標(biāo):
ATM自動(dòng)取款機(jī)可以提供24小時(shí)不間斷服務(wù),操作簡(jiǎn)單,可以很方便為用戶提供取款、轉(zhuǎn)賬/匯款、查詢賬戶余額等服務(wù)。
(4)實(shí)現(xiàn)手段:
使用ASP.NET進(jìn)行界面設(shè)計(jì),建立一個(gè)數(shù)據(jù)庫(kù)保存客戶的賬戶信息,使用C#語言功能函數(shù)并對(duì)數(shù)據(jù)庫(kù)中的賬戶信息進(jìn)行操作。
二、總體設(shè)計(jì)
本系統(tǒng)總共分為登陸、查詢、存款、取款、轉(zhuǎn)賬、修改密碼等6個(gè)功能模塊。
1.登錄模塊:登陸模塊使用字符匹配算法,要求用戶在輸入賬號(hào)之后輸入登陸密碼,只有輸入正確的密碼才能登陸自己的賬戶。否則提示密碼錯(cuò)誤。
2.查詢模塊:用戶輸入正確的密碼后就可登陸自己的賬戶并接受服務(wù)。查詢功能允許用戶查得自己賬戶上的余額信息。
3.存款模塊:允許客戶向自己的賬戶中存入現(xiàn)金。
4.取款模塊:允許客戶從賬戶中取走現(xiàn)金,要求取出的金額不能大于所剩余款,否則提示余額不足。
5.轉(zhuǎn)賬模塊:允許客戶將自己賬戶中的金額轉(zhuǎn)移至另一賬戶。要求所轉(zhuǎn)的金額不能多于所剩余款,否則提示余額不足。
6.修改密碼模塊:允許用戶修改自己的登陸密碼,密碼仍然是6位數(shù)的,修改之后,下次登陸就應(yīng)該用新密碼。
三、詳細(xì)設(shè)計(jì) 用例圖:
類圖:
客戶取錢的協(xié)作圖:
其他功能的協(xié)作圖與此類似。
賬目類的狀態(tài)圖:
ATM系統(tǒng)的部署圖:
四、測(cè)試報(bào)告 我們?cè)诳蛻魯?shù)據(jù)庫(kù)中建立四個(gè)賬戶,如下:
其中四個(gè)屬性分別是客戶名、賬號(hào)、密碼、賬戶余額。打開網(wǎng)頁(yè),進(jìn)入初始頁(yè)面:
若選擇取回磁卡,顯示如下:
1.登錄功能測(cè)試
我們選擇繼續(xù)以進(jìn)行測(cè)試,單擊測(cè)試進(jìn)入如下頁(yè)面:
若輸入不存在的賬號(hào),則出現(xiàn)提示:
現(xiàn)在我們輸入正確的賬號(hào),這里以08060112為例:
單擊確認(rèn),系統(tǒng)將提示客戶輸入密碼,正確的密碼是“123456”,我們輸入“333333”以進(jìn)行測(cè)試,系統(tǒng)提示密碼錯(cuò)誤:
我們輸入正確的密碼“123456”,單擊確認(rèn),則進(jìn)入交易界面:
2.查詢功能測(cè)試
單擊查詢,顯示如下
與數(shù)據(jù)庫(kù)表中的number值比較可得,結(jié)果正確。3.取款功能測(cè)試
選擇返回,回到主菜單,單擊取款,系統(tǒng)提示客戶輸入取款金額:
我們輸入300單擊確認(rèn),顯示如下
單擊確定回到主菜單,單擊查詢,顯示如下:
余額為700,說明取款成功,取款功能順利實(shí)現(xiàn)。4.轉(zhuǎn)賬功能測(cè)試
單擊返回,回到主菜單,單擊轉(zhuǎn)賬,系統(tǒng)提示用戶輸入轉(zhuǎn)入賬號(hào),我們以轉(zhuǎn)入08060119為例:
單擊確認(rèn),系統(tǒng)提示轉(zhuǎn)賬金額,我們輸入300:
單擊確認(rèn),提示轉(zhuǎn)賬成功:
單擊確定回到主菜單,這時(shí)我們單擊查詢08060112的余額:
結(jié)果正確,我們?cè)偻ㄟ^數(shù)據(jù)庫(kù)查詢08060119的余額,打開表格,右擊,執(zhí)行,顯示如下:
結(jié)果也正確,說明轉(zhuǎn)賬功能也已順利實(shí)現(xiàn)。5.存款功能測(cè)試
單擊返回回到主菜單,單擊“存款”,我們通過輸入數(shù)值來模擬放入現(xiàn)金:
單擊確認(rèn),系統(tǒng)提示操作成功:
單擊“確定”回到主菜單,單擊查詢,顯示如下:
結(jié)果正確。
6.修改密碼功能測(cè)試
單擊返回回到主菜單,單擊“修改密碼”,系統(tǒng)提示如下:
我們將密碼修改為“555555”,輸入“555555”后,提示操作成功:
單擊確定就回到主菜單。這時(shí)我們?nèi)』卮趴ㄖ匦碌卿浺詼y(cè)試密碼是否已經(jīng)修改。依舊輸入卡號(hào)08060112,單擊確認(rèn),輸入舊密碼“123456”,提示密碼錯(cuò)誤:
單擊確定,重新輸入新密碼“555555”,單擊確認(rèn),則可順利登錄到主菜單
可見,密碼已經(jīng)修改成功,另一方面,我們查看數(shù)據(jù)庫(kù)中的數(shù)據(jù),右擊,執(zhí)行,顯示如下:
可以看到賬戶08060112的password屬性已經(jīng)變?yōu)椤?55555”,因此,修改密碼功能也能順利實(shí)現(xiàn)。至此,ATM系統(tǒng)的六大功能都已通過測(cè)試并正確無誤。
五、總結(jié)
通過這次UML建模的學(xué)習(xí),我們學(xué)會(huì)了很多知識(shí)。之前我對(duì)UML建模一無所知,但現(xiàn)在我已學(xué)會(huì)了一些UML建模的基本知識(shí),并學(xué)會(huì)了建立一些簡(jiǎn)單的模型。
雖然只有短短的幾個(gè)禮拜,但收獲卻是很大的。首先是分析問題的能力,剛拿到這個(gè)題,總覺得無從下手,不知道題目到底要我們做什么,心里只是干著急,不知道該干嘛。經(jīng)過一周的迷茫,我們開始靜下心來,分析題目,找參考書,嘗試性地進(jìn)行編程。到第三周,我們終于做出了一個(gè)成果并且編譯沒有錯(cuò)誤。之后就是嘗試運(yùn)行,運(yùn)行的過程中出現(xiàn)很多問題。比如轉(zhuǎn)賬,修改密碼等,但經(jīng)過我們細(xì)心的測(cè)試、排查,還是找到了錯(cuò)誤的原因并進(jìn)行了糾正。因此,我們的查錯(cuò)改錯(cuò)的能力也得到了提高。最重要的是,我們通過這次實(shí)習(xí)學(xué)會(huì)了互相合作,俗話說“三個(gè)臭皮匠頂個(gè)諸葛亮”,也許我們單獨(dú)做很難完成這個(gè)程序。但是只要我們團(tuán)結(jié)一致就沒有克服不了的困難。這次實(shí)習(xí)在我們的大學(xué)生活乃至整個(gè)人生中都有著非常重要的意義,是一筆不小的財(cái)富,難忘的經(jīng)歷。我們會(huì)以此為基礎(chǔ)走好人生的每一步。
以上是我們對(duì)UML建模的學(xué)習(xí)的一點(diǎn)總結(jié),同時(shí)也是為自己的未來整理好思路,為以后的學(xué)習(xí)做好準(zhǔn)備。UML建模,教會(huì)了我很多,而我要做的,就是在以后的學(xué)習(xí)與生活中更加努力的學(xué)習(xí)來迎接它帶來的知識(shí)與挑戰(zhàn)。
第四篇:JAVA課程設(shè)計(jì)報(bào)告ATM存取款系統(tǒng)
目 錄
1課程設(shè)計(jì)題目描述和基本設(shè)計(jì)要求...............................................................2 系統(tǒng)需求分析..................................................................................................2.1 功能需求分析 ······················································································
2.2 其他需求分析 ······················································································
3系統(tǒng)設(shè)計(jì)...........................................................................................................3.1 總體設(shè)計(jì) ······························································································
3.2 ATM柜員機(jī)界面設(shè)計(jì) ·········································································
3.3 各功能模塊設(shè)計(jì) ··················································································
3.3.1 登陸頁(yè)面模塊設(shè)計(jì) ································································
3.3.2 選擇服務(wù)模塊設(shè)計(jì) ································································
3.3.3 取款模塊設(shè)計(jì) ·······································································
3.3.4 退卡模塊設(shè)計(jì) ······································································· 3.4 異常處理情況說明 ·································································· 系統(tǒng)實(shí)現(xiàn)與測(cè)試..............................................................................................5總程序...............................................................................................................6 課程設(shè)計(jì)總結(jié)..................................................................................................6.1 遇到的問題及解決辦法 ······································································
6.2 心得體會(huì) ······························································································
ATM柜員機(jī) 課程設(shè)計(jì)題目描述和基本設(shè)計(jì)要求
ATM柜員機(jī)主要是由各個(gè)Windows窗口組成,它是由登錄頁(yè)面、選擇服務(wù)、取款、查詢余額、修改密碼和退卡等功能。它的各種按鈕的事件和功能可以簡(jiǎn)單的模擬ATM柜員機(jī)的要求。系統(tǒng)需求分析 2.1 功能需求分析
主要功能如下所述:
要求使用圖形用戶界面。當(dāng)輸入給定的卡號(hào)和密碼(初始卡號(hào)為000000和密碼為123456)時(shí),系統(tǒng)能登錄ATM柜員機(jī)系統(tǒng),用戶可以按照以下規(guī)則進(jìn)行:
? 查詢余額:初始余額為50000元
? ATM取款:每次取款金額為100的倍數(shù),總額不超過5000元,支取金額不允許透支。
? ATM存款:不能出現(xiàn)負(fù)存款。
? 修改密碼:只有舊密碼正確,新密碼符合要求,且兩次輸入相同的情況下才可以成功修改密碼。
2.2 其他需求分析
(1)性能描述
實(shí)時(shí)性好、靈活性強(qiáng)、易于不同年齡階段的人操作。(2)設(shè)計(jì)約束
開發(fā)工具:JCrator ProV3.5.0 運(yùn)行環(huán)境:Windows 2000以上 能實(shí)現(xiàn)用戶所定義的各項(xiàng)需求。(3)界面要求
以Windows窗口形式顯示,標(biāo)題欄為ATM柜員機(jī)名稱,右上角有最小化按鈕、最大化按鈕、關(guān)閉按鈕,不同的窗口中有不同的按鈕和選擇菜單。系統(tǒng)設(shè)計(jì) 3.1 總體設(shè)計(jì)
我所設(shè)計(jì)的ATM柜員機(jī)主要是由登錄頁(yè)面模塊還由選擇服務(wù)模塊組成,其中選擇服務(wù)模塊又由取款模塊、查詢余額模塊、修改密碼模塊、退卡模塊組成。其功能結(jié)構(gòu)圖如下所示:
圖1
ATM功能結(jié)構(gòu)示意圖
3.2 ATM柜員機(jī)界面設(shè)計(jì)
一個(gè)系統(tǒng)界面的好壞直接影響到用戶的操作,界面設(shè)計(jì)要求樣式美觀、簡(jiǎn)單明了、方便易操作。界面主要分為窗體、菜單、按鈕和文本輸入框幾個(gè)部分,分別執(zhí)行相應(yīng)的操作。
(1)窗體的設(shè)計(jì)
窗體整個(gè)框架使用Frame類構(gòu)造,F(xiàn)rame有自己的外邊框和自己的標(biāo)題,創(chuàng)建Frame時(shí)可以指定其窗口標(biāo)題,我創(chuàng)建的窗口標(biāo)題是各個(gè)不同功能的模塊的名字,比如說查詢余額,還有取款等。相應(yīng)源代碼為:WindowBox(String s,Account act){super(“ATM柜員機(jī)”);}、Selection(String s,Account act){ } super(s);向Frame窗口中添加組件使用add()。例如:button1 = new Button(“存款”);
p1.add(button1);this.add(p1);每個(gè)Frame在其右上角都有三個(gè)控制圖標(biāo),分別代表將窗口最小化、窗口最大化和關(guān)閉的操作,其中最小化和最大化操作Frame可自動(dòng)完成,而關(guān)閉窗口操作實(shí)現(xiàn)需要書寫有關(guān)的代碼,在我的程序中我采用的是對(duì)WINDOWS_CLOSING事件做出響應(yīng),調(diào)用dispose()方法關(guān)閉窗口。Frame也可以引發(fā)WindowsEvent類代表的窗口事件。相應(yīng)源代碼為:
addWindowListener(new WindowAdapter()//窗口偵聽器,以從此窗口接收窗口事件 {public void windowClosing(WindowEvent e)//處理窗口關(guān)閉事件
{ System.exit(0);} });}(2)窗體的主要結(jié)構(gòu)的設(shè)計(jì)
我所設(shè)計(jì)的窗口的主要結(jié)構(gòu)的特點(diǎn)就是每個(gè)窗口都對(duì)應(yīng)著一個(gè)特定的功能。比如說報(bào)各種各樣的錯(cuò),還有各種查詢余額、取款、選擇服務(wù)等,所以它們都是由各種按鈕和文本框,標(biāo)簽組成的,而聯(lián)系各個(gè)窗體成為一個(gè)整體的就是各個(gè)按鈕的監(jiān)聽事件。所以整個(gè)設(shè)計(jì)就趨向簡(jiǎn)單化了。
為了定義各個(gè)按鈕所對(duì)應(yīng)的命令和操作,首先需要將各個(gè)按鈕注冊(cè)給實(shí)現(xiàn)了動(dòng)作事件的監(jiān)聽接口ActionListener的監(jiān)聽者,然后為監(jiān)聽者定義actionPerformed(ActionEvent e)方法,在這個(gè)方法中調(diào)用e.getSource()或e.getActionCommand()來判斷用戶點(diǎn)擊的菜單子項(xiàng),并完成這個(gè)菜單子項(xiàng)定義的操作。
3.3 各功能模塊設(shè)計(jì) 3.3.1 登陸頁(yè)面模塊設(shè)計(jì)
與ATM柜員機(jī)打交道比較多的,也是大家對(duì)安全比較關(guān)心的問題:密碼。所以第一個(gè)界面就是要輸入密碼和卡號(hào)才能繼續(xù)服務(wù)。
我定義了文本框累的對(duì)象tf1,tf2。抓藥是用于輸入單行的文本;文本區(qū)調(diào)用public String getText()方法,獲取用戶想要的字符串。用來判斷輸入的密碼和卡號(hào)是否正確,如果不正確的話,則彈出密碼或卡號(hào)錯(cuò)誤的警告框,并用dispose()關(guān)掉窗口。
3.3.2 選擇服務(wù)模塊設(shè)計(jì)
在選擇服務(wù)模塊中,有各種ATM的服務(wù)功能,只要用戶在該界面中選擇按鈕,它就會(huì)彈出各個(gè)相應(yīng)的界面。每一個(gè)按鈕都有監(jiān)聽器,在選擇了按鈕后,java.awt.event中的ActionEvent類創(chuàng)建一個(gè)事件對(duì)象,并將它傳遞給方法public void actionPerformed(ActionEvent e)中的參數(shù)e,監(jiān)視器就會(huì)知道所發(fā)生的事件,對(duì)此事件進(jìn)行處理。
3.3.3 取款模塊設(shè)計(jì)
在取款模塊中,和其他的界面也是同樣的結(jié)構(gòu)。也是有一個(gè)文本框和一個(gè)按鈕還有標(biāo)簽組成的。用戶在文本框中輸入他想取的數(shù)額,但是必須是100的倍數(shù),而且每一次最多只能取5000塊。當(dāng)然了取款的時(shí)候也不能超過卡里的余額,再就是卡里的余額不可以為負(fù),否則就會(huì)彈出報(bào)錯(cuò)的窗口。3.3.4 退卡模塊設(shè)計(jì)
在退卡模塊設(shè)計(jì)中,這個(gè)方法就更加的簡(jiǎn)單了,它只是用了if(e.getSource()==button4){//退出
} System.exit(0);dispose();這個(gè)方法就可以實(shí)現(xiàn)了,這里就不再多說了。
3.4 異常處理情況說明
(1)打開、保存文件時(shí)的異常處理 需要處理的異常:IOException(2)數(shù)據(jù)庫(kù)訪問時(shí)的異常處理 需要處理的異常:SQLException(3)加載類時(shí)的異常處理
需要處理的異常:ClassNotFindException,當(dāng)應(yīng)用程序試圖使用Class類中的forName方法通過字符串名加載類時(shí),但是沒有找到具有指定名稱的類的定義。
(4)加載URL時(shí)的異常
需要處理的異常:MalformedURLException,拋出這一異常指示出現(xiàn)了錯(cuò)誤的 URL?;蛘咴谝?guī)范字符串中找不到任何合法協(xié)議,或者無法分析字符串。系統(tǒng)實(shí)現(xiàn)與測(cè)試
(1)編譯運(yùn)行程序后,將會(huì)看到如下的界面,如圖2所示。如果輸入的密碼或卡號(hào)不正確的話就會(huì)報(bào)右下圖的錯(cuò)誤。
圖2 主界面—登陸頁(yè)面
(2)選擇服務(wù)界面效果
當(dāng)輸入的密碼和卡號(hào)正確,單擊確定后就會(huì)進(jìn)入到選擇服務(wù)的界面,如圖3所示。然后就可以選擇所需要的服務(wù)了。
圖3 選擇服務(wù)界面
(3)取款界面,如圖4所示。
圖4 取款界面
(4)查詢余額界面,如圖7所示。
圖7 查詢余額界面
圖8 存款界面
圖9 轉(zhuǎn)賬界面
經(jīng)過測(cè)試,所有的功能基本上都實(shí)現(xiàn)了,而且運(yùn)行正常。.總程序
package ZDC;//主菜單
import java.awt.*;import java.sql.Connection;import java.sql.DriverManager;import java.sql.ResultSet;import java.sql.SQLException;import java.sql.Statement;import javax.swing.*;import java.awt.event.*;class Panel1 extends JPanel{ JLabel label1,label2;
Panel1(){
setLayout(new GridLayout(4,1));
label1=new JLabel(“
”+“銀行存取款系統(tǒng)”);label2=new JLabel(“
”+“歡迎你成為本行用戶,你可以選擇中文或英文方式”);
add(new JLabel());add(label1);add(label2);add(new JLabel());
} } class Panel2 extends JPanel{
JButton button1,button2;
Panel2(){
setLayout(new GridLayout(3,6));
button1=new JButton(“中文”);button2=new JButton(“英文”);
add(new JLabel());add(new JLabel());add(new JLabel());add(new JLabel());add(new JLabel());
add(new JLabel());add(new JLabel());add(button1);add(new JLabel());add(new JLabel());
add(button2);add(new JLabel());add(new JLabel());add(new JLabel());add(new JLabel());
add(new JLabel());add(new JLabel());add(new JLabel());
} } class Client extends JFrame implements ActionListener{
Panel1 panel1;Panel2 panel2;JFrame frame;
Client(String s){
super(s);
Container con=this.getContentPane();
con.setLayout(new GridLayout(2,1));
panel1=new Panel1();panel2=new Panel2();
con.add(panel1);con.add(panel2);
panel2.button1.addActionListener(this);
panel2.button2.addActionListener(this);
this.setVisible(true);this.pack();
}
public void actionPerformed(ActionEvent e){
if(e.getActionCommand()==“中文”){
this.setVisible(false);
new Client00(“輸入密碼”);
}
else if(e.getActionCommand()==“英文”){String inputValue = JOptionPane.showInputDialog(“Please input a value”);}
} } public class menu{
public static void main(String []args){
new Client(“用戶取款系統(tǒng)”);
}} package ZDC;
// 輸入密碼界面
import java.awt.*;import java.sql.Connection;import java.sql.DriverManager;import java.sql.ResultSet;import java.sql.SQLException;import java.sql.Statement;import javax.swing.*;import java.awt.event.*;class Panel01 extends JPanel{
JLabel label1,label2,label3,label4;JPasswordField textA;JTextField textC;
static JTextField textB;char t[]=new char[4];
Panel01(){
setLayout(new GridLayout(4,4));
for(int i=0;i<4;i++){t[i]=(char)(Math.random()*26+'a');}
String mm=new String(t);
label2=new JLabel(“請(qǐng)輸入卡號(hào):”);label1=new JLabel(“請(qǐng)輸入密碼:”);
label3=new
JLabel();label4=new
JLabel(“
請(qǐng)
輸
入
驗(yàn)
證”);label3.setBackground(Color.white);
碼
:
label3.setForeground(Color.red);
textC=new JTextField(10);textC.setForeground(Color.blue);
label3.setText(mm);
textA=new JPasswordField(6);textA.setEchoChar('*');textB=new JTextField(“");
for(int i=0;i<5;i++){add(new JLabel());}
add(label2);add(textB);add(new JLabel());add(new JLabel());
add(label1);add(textA);add(new JLabel());add(new JLabel());
add(label4);add(textC);add(label3);
} } class Panel02 extends JPanel{ JButton button1,button2;
Panel02(){
setLayout(new GridLayout(3,6));
button1=new JButton(”確定“);button2=new JButton(”取消“);
for(int i=0;i<7;i++){add(new
JLabel());}add(button1);add(new JLabel());
add(button2);for(int i=0;i<6;i++){add(new JLabel());}
} } class Client00 extends JFrame implements ActionListener{
Panel01 panel1;Panel02 panel2;JFrame frame;int i=0,j=0;
Client00(String s){
super(s);
Container con=this.getContentPane();
con.setLayout(new GridLayout(2,1));
panel1=new Panel01();panel2=new Panel02();
con.add(panel1);con.add(panel2);
JLabel());add(new
panel2.button1.addActionListener(this);
panel2.button2.addActionListener(this);
this.setVisible(true);this.pack();
}
public void actionPerformed(ActionEvent e){
char[] passwords=panel1.textA.getPassword();String password=new String(”000000“);
//設(shè)置賬號(hào)123456789的初始密碼為112626,每輸入一次都有提示,在連續(xù)輸入三次不正確后系統(tǒng)自動(dòng)退出。
”);}
if(e.getActionCommand().equals(“確定”))
if(panel1.textC.getText().equals(panel1.label3.getText())){
heshi();
}
else{JOptionPane.showMessageDialog(frame,“你輸入的驗(yàn)證碼有誤,請(qǐng)重新輸入。
else if(e.getActionCommand()==”取消“){this.setVisible(false);new Client08(”“);}
}
public void heshi(){
if(panel1.textA.getText().equals(”“)||panel1.textB.getText().equals(”“)){JOptionPane.showMessageDialog(frame,”
請(qǐng)輸入賬號(hào)、密碼!“);return;} try{ Class.forName(”sun.jdbc.odbc.JdbcOdbcDriver“);Connection con=DriverManager.getConnection(”jdbc:odbc:hello“,”“,”“);//連接數(shù)據(jù)庫(kù) Statement sql=con.createStatement();
String ql=panel1.textB.getText();
ResultSet rs=sql.executeQuery(”select cnima from card where cno=“+ql+”“);
if(rs.next()){
String qerycmima=panel1.textA.getText();
String s=rs.getString(1);
if(qerycmima.equals(s)){
JOptionPane.showMessageDialog(frame,”
連接成功!“);
this.setVisible(false);new Client01(”用戶取款系統(tǒng)“);
}else{ if(i!=2){i++;j=3-i;
JOptionPane.showMessageDialog(frame,”密碼有誤!你還有“+j+”次機(jī)會(huì),請(qǐng)你再仔細(xì)想想.“);
panel1.textA.setText(”“);}
else {JOptionPane.showMessageDialog(frame,”對(duì)不起,你輸入的密碼次數(shù)達(dá)三次,下次再見。“);System.exit(0);}
}
con.close();frame.repaint();
}
else{JOptionPane.showMessageDialog(null,”
該用戶不存在,重新輸入!“,”警告!“, JOptionPane.YES_NO_OPTION);
panel1.textA.setText(”“);panel1.textB.setText(”“);panel1.textC.setText(”“);return;}
}catch(SQLException g){ System.out.println(”E Code“+g.getErrorCode());System.out.println(”E M“+g.getMessage());
} catch(Exception e){ e.printStackTrace();
}
} } class Inputpassword{
public static void main(String []args){
new Client00(”用戶取款系統(tǒng)“);
}} package ZDC;//選擇界面
import java.awt.*;import java.sql.Connection;import java.sql.DriverManager;import java.sql.ResultSet;import java.sql.SQLException;import java.sql.Statement;import javax.swing.*;import java.awt.event.*;class Panel03 extends JPanel{
”);
for(int i=0;i<7;i++){add(new
JLabel());}add(button1);add(new
JLabel());add(new
JButton button1,button2,button3,button4,button5;
Panel03(){
setLayout(new GridLayout(8,6));
button1=new JButton(“查詢”);button2=new JButton(“取款”);
button3=new JButton(“轉(zhuǎn)賬”);button4=new JButton(“退出”);button5=new JButton(“存款JLabel());
add(button2);for(int
i=0;i<8;i++){add(new
JLabel());}add(button3);add(new JLabel());add(new JLabel());add(button5);
for(int i=0;i<17;i++){add(new JLabel());}add(button4);for(int i=0;i<7;i++){add(new JLabel());}
} } class Client01 extends JFrame implements ActionListener{
Panel03 panel1;JFrame frame;
Client01(String s){
super(s);
Container con=this.getContentPane();
panel1=new Panel03();con.add(panel1);
panel1.button1.addActionListener(this);panel1.button2.addActionListener(this);
panel1.button3.addActionListener(this);panel1.button4.addActionListener(this);panel1.button5.addActionListener(this);
this.setVisible(true);this.pack();
}
public void actionPerformed(ActionEvent e){
if(e.getActionCommand()==”取款“){
this.setVisible(false);
new Client02(”請(qǐng)選擇取款金額“);
}
else if(e.getActionCommand()==”查詢“){
this.setVisible(false);
new Client06(”查詢服務(wù)“);
}
else if(e.getActionCommand()==”存款“){
this.setVisible(false);
new Client05(”請(qǐng)選擇存款金額“);
}
else if(e.getActionCommand()==”轉(zhuǎn)賬“){
this.setVisible(false);
new Client04(”用戶轉(zhuǎn)賬服務(wù)“);
}
else if(e.getActionCommand()==”退出“){ this.setVisible(false);new Client08(”“);}
} } class Selectfunction{
public static void main(String []args){
new Client01(”用戶取款系統(tǒng)“);
new Client01(”用戶存款系統(tǒng)“);
} } package ZDC;//查詢功能
import java.awt.*;import java.sql.Connection;import java.sql.DriverManager;import java.sql.ResultSet;import java.sql.SQLException;import java.sql.Statement;import javax.swing.*;
import ZDC.Panel01;
import java.awt.event.*;class Panel06 extends JPanel{
JLabel label1,label2;JTextField textA;JFrame frame;
Panel06(){
setLayout(new GridLayout(4,4));label1=new JLabel(”你的余額為:“);
textA=new JTextField(6);
for(int i=0;i<5;i++){add(new JLabel());}
add(label1);add(textA);for(int i=0;i<9;i++){add(new JLabel());}
} } class Panel07 extends JPanel{
JButton button1,button2;
Panel07(){
setLayout(new GridLayout(3,6));
button1=new JButton(”繼續(xù)“);button2=new JButton(”查詢“);
for(int i=0;i<7;i++){add(new
JLabel());}add(button2);add(new JLabel());
add(button1);for(int i=0;i<7;i++){add(new JLabel());}
} } class Client03 extends JFrame implements ActionListener{
Panel06 panel1;Panel07 panel2;
Client03(String s){
super(s);
Container con=this.getContentPane();
con.setLayout(new GridLayout(2,1));
panel1=new Panel06();panel2=new Panel07();
con.add(panel1);con.add(panel2);
panel2.button1.addActionListener(this);
panel2.button2.addActionListener(this);
this.setVisible(true);this.pack();
}
JLabel());add(new
public void actionPerformed(ActionEvent e){
if(e.getActionCommand().equals(”繼續(xù)“)){
this.setVisible(false);
new Client01(”選擇服務(wù)種類“);
}
else if(e.getActionCommand()==”查詢“)showcjine();
}
public void showcjine(){
//String
url
=
”jdbc:odbc:driver={Microsoft
Access
Driver(*.mdb)};DBQ=bankSystem.mdb“;//程序直接使用當(dāng)前類目錄下的數(shù)據(jù)庫(kù)文件
try{
Class.forName(”sun.jdbc.odbc.JdbcOdbcDriver“);
Connection con=DriverManager.getConnection(”jdbc:odbc:hello“,”“,”“);//連接數(shù)據(jù)庫(kù) Statement sql=con.createStatement();String ql=Panel01.textB.getText();Class.forName(”sun.jdbc.odbc.JdbcOdbcDriver“);ResultSet rs=sql.executeQuery(”select cjine from card where cno=“+ql+”“);
if(rs.next()){
String ucjine=rs.getString(1);
panel1.textA.setText(ucjine);
}
else{JOptionPane.showMessageDialog(null,”
該用戶不存在“,”警告!“, JOptionPane.YES_NO_OPTION);}
con.close();
}catch(Exception ex){ ex.printStackTrace();
}
}
} class Searchfunction{
public static void main(String []args){
new Client03(”用戶查詢服務(wù)“);
}} package ZDC;
//查詢信息
import java.awt.*;import java.sql.Connection;import java.sql.DriverManager;import java.sql.ResultSet;import java.sql.SQLException;import java.sql.Statement;import javax.swing.*;import java.awt.event.*;class Panel11 extends JPanel{
JButton button1,button2;
Panel11(){
setLayout(new GridLayout(10,5));
button1=new JButton(”查詢余額“);
button2=new JButton(”查本卡信息“);
for(int i=0;i<=16;i++)add(new JLabel());
add(button1);
for(int i=0;i<=13;i++)add(new JLabel());
add(button2);
for(int i=0;i<=16;i++)add(new JLabel());} }
class Client06 extends JFrame implements ActionListener{
Panel11 panel11;JFrame frame;
Client06(String s){
super(s);
Container con=this.getContentPane();
panel11=new Panel11();
con.add(panel11);
panel11.button1.addActionListener(this);
panel11.button2.addActionListener(this);
this.setVisible(true);this.pack();}
public void actionPerformed(ActionEvent e){
if(e.getActionCommand()==”查詢余額“){
this.setVisible(false);
new Client03(”用戶查詢服務(wù)“);
}
else if(e.getActionCommand()==”查本卡信息“){ this.setVisible(false);
new Client07(”本卡信息“);
} } } class Searchinformation{
public static void main(String []args){
new Client06(”查詢服務(wù)“);
} } package ZDC;//轉(zhuǎn)賬功能
import java.awt.*;import java.sql.Connection;import java.sql.DriverManager;import java.sql.ResultSet;import java.sql.SQLException;import java.sql.Statement;import javax.swing.*;
import ZDC.Panel01;
import java.awt.event.*;class Panel08 extends JPanel{
JLabel label1,label2;JTextField textA,textB;
Panel08(){
setLayout(new GridLayout(4,4));
label1=new JLabel(”輸入預(yù)轉(zhuǎn)賬號(hào):“);label2=new JLabel(”輸入預(yù)轉(zhuǎn)金額:“);
textA=new JTextField(6);textB=new JTextField(6);
for(int i=0;i<5;i++){add(new JLabel());}
add(label1);add(textA);for(int i=0;i<6;i++){add(new JLabel());}
add(label2);add(textB);add(new JLabel());
} } class Panel09 extends JPanel{
JButton button1,button2;
Panel09(){
setLayout(new GridLayout(3,6));
button1=new JButton(”確定“);button2=new JButton(”取消“);
add(new JLabel());add(new JLabel());add(new JLabel());add(new JLabel());add(new JLabel());
add(new JLabel());add(new JLabel());add(button1);add(new JLabel());add(new JLabel());
add(button2);add(new JLabel());add(new JLabel());add(new JLabel());add(new JLabel());
add(new JLabel());add(new JLabel());add(new JLabel());
} } class Client04 extends JFrame implements ActionListener{
Panel08 panel1;Panel09 panel2;JFrame frame;
Client04(String s){
super(s);
Container con=this.getContentPane();
con.setLayout(new GridLayout(2,1));
panel1=new Panel08();panel2=new Panel09();
con.add(panel1);con.add(panel2);
panel2.button1.addActionListener(this);
panel2.button2.addActionListener(this);
this.setVisible(true);this.pack();
}
public void actionPerformed(ActionEvent e){
if(e.getActionCommand().equals(”確定“)){ zhuanzhang();//程序根據(jù)輸入賬號(hào)調(diào)用數(shù)據(jù)庫(kù),修改對(duì)應(yīng)金額數(shù)。
this.setVisible(false);
new Client01(”用戶取款系統(tǒng)“);
}
else if(e.getActionCommand()==”取消“){
this.setVisible(false);
new Client01(”用戶取款系統(tǒng)“);}
}
public void zhuanzhang(){
if(panel1.textA.getText().equals(”“)||panel1.textB.getText().equals(”“)){JOptionPane.showMessageDialog(frame,”
請(qǐng)輸入欲轉(zhuǎn)賬號(hào)、金額!“);return;} //String url = ”jdbc:odbc:driver={Microsoft Access Driver(*.mdb)};DBQ=bankSystem.mdb“;//程序直接使用當(dāng)前類目錄下的數(shù)據(jù)庫(kù)文件
try{
Class.forName(”sun.jdbc.odbc.JdbcOdbcDriver“);
Connection con=DriverManager.getConnection(”jdbc:odbc:hello“,”“,”“);//連接數(shù)據(jù)庫(kù) Statement sql=con.createStatement();String cno=panel1.textA.getText();String ql=Panel01.textB.getText();
Class.forName(”sun.jdbc.odbc.JdbcOdbcDriver“);
ResultSet ss=sql.executeQuery(”select cno from card where cno=“+cno+”“);String yjine=panel1.textB.getText();
int shjin=Integer.parseInt(yjine);
if(ss.next()){
ResultSet rs=sql.executeQuery(”select cjine from card where cno=“+ql+”“);if(rs.next()){ String queryjine=rs.getString(1);
int qyjine=Integer.parseInt(queryjine);
if(shjin String newjine=String.valueOf(newcjine);String newjine2=String.valueOf(newcjine2); sql.executeUpdate(”update card set cjine='“+newjine+”'where cno=“+ql+”“); sql.executeUpdate(”update card set cjine='“+newjine2+”'where cno=“+cno+”“);JOptionPane.showMessageDialog(frame,” 操作已成功,謝謝使用!“);this.setVisible(false);new Client01(”用戶取款系統(tǒng)“); } else{JOptionPane.showMessageDialog(null,” 請(qǐng)重新輸入金額!“,”警告!“, JOptionPane.YES_NO_OPTION); panel1.textB.setText(”“);return; } con.close();frame.repaint(); } con.close();frame.repaint(); } else{JOptionPane.showMessageDialog(null,” 警告!“, JOptionPane.YES_NO_OPTION);panel1.textA.setText(”“);} }catch(Exception ex){ ex.printStackTrace(); } } } class Transferfunction{ public static void main(String []args){ new Client04(”用戶轉(zhuǎn)賬服務(wù)“);}} package ZDC;//用戶取款 import java.awt.*;import java.sql.Connection;import java.sql.DriverManager;import java.sql.ResultSet;import java.sql.SQLException;import java.sql.Statement; 該用戶不存在,請(qǐng)重新輸入?!?“ import javax.swing.*; import ZDC.Panel01; import java.awt.event.*;class Panel04 extends JPanel{ JButton button1,button2,button3,button4; Panel04(){ setLayout(new GridLayout(4,6)); button1=new JButton(”100“);button2=new JButton(”200“); button3=new JButton(”300“);button4=new JButton(”500“); for(int i=0;i<7;i++){add(new JLabel());}add(button1);add(new JLabel());add(new JLabel()); add(button2);for(int i=0;i<8;i++){add(new JLabel());}add(button3);add(new JLabel()); add(new JLabel());add(button4);add(new JLabel()); } } class Panel05 extends JPanel{ JButton button1,button2,button3,button4; Panel05(){ setLayout(new GridLayout(4,6)); button1=new JButton(”800“);button2=new JButton(”1000“); for(int i=0;i<7;i++){add(new JLabel());}add(button1);add(new JLabel());add(new JLabel()); add(button2);for(int i=0;i<13;i++){add(new JLabel());} } } class Client02 extends JFrame implements ActionListener{ Panel04 panel1;Panel05 panel2;JFrame frame; Client02(String s){ super(s); Container con=this.getContentPane(); con.setLayout(new GridLayout(2,1)); panel1=new Panel04();panel2=new Panel05(); con.add(panel1);con.add(panel2); panel1.button1.addActionListener(this);panel1.button2.addActionListener(this); panel1.button3.addActionListener(this);panel1.button4.addActionListener(this); panel2.button1.addActionListener(this);panel2.button2.addActionListener(this); this.setVisible(true);this.pack(); } public void actionPerformed(ActionEvent e){ if(e.getActionCommand()==”100“){ this.setVisible(false); qukuan();//程序根據(jù)輸入金額和輸入卡號(hào),修改數(shù)據(jù)庫(kù)。 new Client01(”用戶取款系統(tǒng)“); } else if(e.getActionCommand()==”200“){ else if(e.getActionCommand()==”300“){ this.setVisible(false); qukuan(); new Client01(”用戶取款系統(tǒng)“);} this.setVisible(false); qukuan(); new Client01(”用戶取款系統(tǒng)“);} else if(e.getActionCommand()==”500“){ this.setVisible(false); qukuan(); new Client01(”用戶取款系統(tǒng)“);} else if(e.getActionCommand()==”800“){ this.setVisible(false); qukuan(); new Client01(”用戶取款系統(tǒng)“);} else if(e.getActionCommand()==”1000“){ } public void qukuan(){ try{ Class.forName(”sun.jdbc.odbc.JdbcOdbcDriver“);Connection con=DriverManager.getConnection(”jdbc:odbc:hello“,”“,”“);//連接數(shù)據(jù)庫(kù) Statement sql=con.createStatement();String ql=Panel01.textB.getText(); this.setVisible(false); qukuan(); new Client01(”用戶取款系統(tǒng)“);} ResultSet rs=sql.executeQuery(”select cjine from card where cno=“+ql+”“);if(rs.next()){ String mm=rs.getString(1);int nn= Integer.parseInt(mm); String qerycjine=panel1.button1.getActionCommand(); int queryjine=Integer.parseInt(qerycjine);if(queryjine if(updateMima==1){ JOptionPane.showMessageDialog(frame,” 操作已成功,謝謝使用!“);} this.setVisible(false); new Client01(”用戶取款系統(tǒng)“); } else{JOptionPane.showMessageDialog(null,” 你的卡余額已不足,請(qǐng)注意!“,”警告!“, JOptionPane.YES_NO_OPTION); } con.close(); frame.repaint(); } }catch(SQLException g){ System.out.println(”E Code“+g.getErrorCode());System.out.println(”E M“+g.getMessage()); } catch(Exception e){ e.printStackTrace(); } } } class Withdraw{ public static void main(String []args){ new Client02(”請(qǐng)選擇取款金額“); } } this.setVisible(false);new Client01(”用戶取款系統(tǒng)“);package ZDC; //存款功能 import java.awt.*;import java.sql.Connection;import java.sql.DriverManager;import java.sql.ResultSet;import java.sql.SQLException;import java.sql.Statement;import javax.swing.*; import ZDC.Panel01; import java.awt.event.*;class Panel10 extends JPanel{ JButton button1,button2,button3,button4; Panel10(){ setLayout(new GridLayout(4,6)); button1=new JButton(”100“);button2=new JButton(”200“); button3=new JButton(”300“);button4=new JButton(”500“); for(int i=0;i<7;i++){add(new JLabel());}add(button1);add(new JLabel());add(new JLabel()); add(button2);for(int i=0;i<8;i++){add(new JLabel());}add(button3);add(new JLabel()); add(new JLabel());add(button4);add(new JLabel()); } } class Panel14 extends JPanel{ JButton button1,button2,button3,button4; Panel14(){ setLayout(new GridLayout(4,6)); button1=new JButton(”800“);button2=new JButton(”1000“); for(int i=0;i<7;i++){add(new JLabel());}add(button1);add(new JLabel());add(new JLabel()); add(button2);for(int i=0;i<13;i++){add(new JLabel());} } } class Client05 extends JFrame implements ActionListener{ Panel04 panel1;Panel05 panel2;JFrame frame; Client05(String s){ super(s); Container con=this.getContentPane(); con.setLayout(new GridLayout(2,1)); panel1=new Panel04();panel2=new Panel05(); con.add(panel1);con.add(panel2); panel1.button1.addActionListener(this);panel1.button2.addActionListener(this); panel1.button3.addActionListener(this);panel1.button4.addActionListener(this); panel2.button1.addActionListener(this);panel2.button2.addActionListener(this); this.setVisible(true);this.pack(); } public void actionPerformed(ActionEvent e){ if(e.getActionCommand()==”100“){ this.setVisible(false); cunkuan();//程序根據(jù)輸入金額和輸入卡號(hào),修改數(shù)據(jù)庫(kù)。 new Client01(”用戶存款系統(tǒng)“); } else if(e.getActionCommand()==”200“){this.setVisible(false);new Client01(”用戶存款系統(tǒng)“);} //這里當(dāng)點(diǎn)擊取款金額200時(shí),程序返回上層操作界面。 } public void cunkuan(){ try{ Class.forName(”sun.jdbc.odbc.JdbcOdbcDriver“);Connection con=DriverManager.getConnection(”jdbc:odbc:hello“,”“,”“);//連接數(shù)據(jù)庫(kù) Statement sql=con.createStatement();String ql=Panel01.textB.getText();ResultSet rs=sql.executeQuery(”select cjine from card where cno=“+ql+”“); if(rs.next()){ String mm=rs.getString(1);int nn= Integer.parseInt(mm); String qerycjine=panel1.button1.getActionCommand(); int queryjine=Integer.parseInt(qerycjine);int newjine=nn+queryjine;String newjin=String.valueOf(newjine);int updateMima=sql.executeUpdate(”update card set cjine='“+newjin+”'where cno=“+ql+”“); if(updateMima==1){ JOptionPane.showMessageDialog(frame,” 操作已成功,謝謝使用!“);} this.setVisible(false); new Client01(”用戶存款系統(tǒng)“); } else{JOptionPane.showMessageDialog(null,” 請(qǐng)注意!“,”警告!“, JOptionPane.YES_NO_OPTION); this.setVisible(false);new Client01(”用戶取款系統(tǒng)“);} con.close(); frame.repaint(); }catch(SQLException g){ System.out.println(”E Code“+g.getErrorCode());System.out.println(”E M“+g.getMessage()); } catch(Exception e){ e.printStackTrace(); } } } class Depositfunction{ public static void main(String []args){ new Client05(”請(qǐng)選擇存款金額“); } } package ZDC;//顯示用戶信息 import java.awt.*;import java.sql.Connection;import java.sql.DriverManager;import java.sql.ResultSet;import java.sql.SQLException;import java.sql.Statement;import javax.swing.*; import ZDC.Panel01; import java.awt.event.*; class Panel12 extends JPanel{ JLabel label1,label2,label3,label4; JButton button1,button2;JTextField text1,text2,text3,text4; Panel12(){ setLayout(new GridLayout(9,6)); label1=new JLabel(”顯示用戶名:“);label2=new JLabel(”顯示性別:“); label3=new JLabel(”顯示身份證:“);label4=new JLabel(”顯示卡號(hào):“); button1=new JButton(”查詢“);text1=new JTextField(”“);text2=new JTextField(”“); button2=new JButton(”取消“);text3=new JTextField(”“);text4=new JTextField(”“); for(int i=0;i<8;i++)add(new JLabel());add(label1);add(text1); for(int i=0;i<4;i++)add(new JLabel());add(label2);add(text2); for(int i=0;i<4;i++)add(new JLabel());add(label3);add(text3); for(int i=0;i<4;i++)add(new JLabel());add(label4);add(text4); for(int i=0;i<15;i++)add(new JLabel());add(button1); add(new JLabel());add(new JLabel());add(button2); for(int i=0;i<7;i++)add(new JLabel());} } class Client07 extends JFrame implements ActionListener{ Panel12 panel12;JFrame frame; Client07(String s){ super(s); Container con=this.getContentPane(); panel12=new Panel12(); con.add(panel12); panel12.button1.addActionListener(this); panel12.button2.addActionListener(this); this.setVisible(true);this.pack();} public void actionPerformed(ActionEvent e){ if(e.getActionCommand()==”查詢“)showCard(); else if(e.getActionCommand()==”取消“){ this.setVisible(false); new Client01(”用戶取款系統(tǒng)“); } } public void showCard(){ String url = ”jdbc:odbc:driver={Microsoft Access Driver(*.mdb)};DBQ=bankSystem.mdb“;//程序直接使用當(dāng)前類目錄下的數(shù)據(jù)庫(kù)文件 try{ Connection con=DriverManager.getConnection(url);Statement sql=con.createStatement();String ql=Panel01.textB.getText();Class.forName(”sun.jdbc.odbc.JdbcOdbcDriver“);ResultSet rs=sql.executeQuery(”select * from user where ucno=“+ql+”“); if(rs.next()){ String uname=rs.getString(1); String usex=rs.getString(2); String uid=rs.getString(3); String ucno=rs.getString(4); panel12.text1.setText(uname); panel12.text2.setText(usex); panel12.text3.setText(uid); panel12.text4.setText(ucno);} else{JOptionPane.showMessageDialog(null,” 該用戶不存在“,”警告!“, JOptionPane.YES_NO_OPTION);} con.close(); } catch(Exception ex){ ex.printStackTrace(); } } } class Dislayuserinformation{ public static void main(String []args){ new Client07(”本卡信息“); } } package ZDC;//退出功能 class Client08{ static Athread threadA; Client08(String s){ threadA=new Athread(); threadA.start(); } } class Athread extends Thread{ static int j=1;public void run(){ for(;j<2;){ new Client08(”提示退出對(duì)話框“);try{sleep(30000);j++;} catch(InterruptedException e){} } System.exit(0);} } public class Exit{ public static void main(String []args){ new Client08(”“); } } package ZDC;//退卡 import java.awt.*;import java.sql.Connection; import java.sql.DriverManager;import java.sql.ResultSet;import java.sql.SQLException;import java.sql.Statement;import javax.swing.*; import java.awt.event.*;class Panel13 extends JPanel{ JLabel label; Panel13(){ label=new JLabel(” 此卡! “); setLayout(new GridLayout(10,1));add(new JLabel()); add(label);for(int i=0;i<6;i++)add(new JLabel());} } class Client09 extends JFrame{ Panel13 panel13; Client09(String s){ super(s); Container con=this.getContentPane(); panel13=new Panel13(); con.add(panel13); this.setVisible(true);this.pack();} } class bankSystem09{ 謝謝使用,請(qǐng)?jiān)?0秒內(nèi)退出 JLabel());add(new JLabel());add(new public void main(String []args){ new Client08(”提示退出對(duì)話框"); } } 6課程設(shè)計(jì)總結(jié) 6.1 遇到的問題及解決辦法 在此次課程設(shè)計(jì)中,我遇到了一些問題,如:對(duì)于面向?qū)ο蟮姆椒私獠粔蛲笍兀\(yùn)用到實(shí)際的軟件開發(fā)中存在著困難;對(duì)于Java語言,只學(xué)習(xí)到了一些最基本的知識(shí),這導(dǎo)致編寫程序時(shí)經(jīng)常出現(xiàn)一些語法錯(cuò)誤,而且要在短時(shí)間內(nèi)用Java語言來設(shè)計(jì)一個(gè)具體的系統(tǒng)是一個(gè)較大的挑戰(zhàn)。對(duì)于以上的問題,自己有清楚的認(rèn)識(shí),解決辦法是需要大量閱讀相關(guān)的書籍,對(duì)于書上以及網(wǎng)站上下載的資料中的Java實(shí)例必須有清楚的理解。對(duì)于實(shí)際動(dòng)手能力與系統(tǒng)開發(fā)的流程的適應(yīng),必須多進(jìn)行實(shí)際的練習(xí)與操作,才能有大的進(jìn)步。 6.2 心得體會(huì) 在這次的課程設(shè)計(jì)中,我主要運(yùn)用了Java語言的界面設(shè)計(jì)、異常處理、、Awt控件、Swing控件,輸入輸出流等,綜合運(yùn)用了Java語言。我深刻感受到了面向?qū)ο笳Z言中類庫(kù)的強(qiáng)大功能,掌握了運(yùn)用Java中的類實(shí)現(xiàn)某些基本功能,并學(xué)會(huì)了自己查詢使用類的方法,為以后的面向?qū)ο笳Z言的自學(xué)奠定了基礎(chǔ)。在以后的學(xué)習(xí)當(dāng)中,我會(huì)更加努力的學(xué)習(xí)好專業(yè)知識(shí),并將所學(xué)的知識(shí)用于實(shí)踐當(dāng)中去,以便牢固掌握知識(shí)。 摘要 庫(kù)存管理系統(tǒng)是典型的信息管理系統(tǒng)(MIS),其開發(fā)主要包括后臺(tái)數(shù)據(jù)庫(kù)的建立和維護(hù)以及前端應(yīng)用程序的開發(fā)兩個(gè)方面。對(duì)于前者要求建立起數(shù)據(jù)一致性和完整性強(qiáng).數(shù)據(jù)安全性好的庫(kù)。而對(duì)于后者則要求應(yīng)用程序功能完備,易操作易使用等特點(diǎn)。 經(jīng)過分析如此情況,我決定使用微軟公司的Visual Basic 6為開發(fā)工具,利用其提供的各種面向?qū)ο蟮拈_發(fā)工具,尤其是ADO,是能方便而簡(jiǎn)潔操縱數(shù)據(jù)庫(kù)的智能化對(duì)象,短期內(nèi)就可以開發(fā)出用戶滿意的可行系統(tǒng)。 主題詞:倉(cāng)庫(kù)管理;數(shù)據(jù)庫(kù);VB6;ADO 第 i 頁(yè) 目錄 摘要.................................................................................................................i ABSTRACT..........................................................................錯(cuò)誤!未定義書簽。第一章 緒論......................................................................................................1 1.1 選題背景...........................................................................................................1 1.2 設(shè)計(jì)目標(biāo)...........................................................................................................1 第二章 相關(guān)理論基礎(chǔ).......................................................................................2 2.1 Visual Basic 6.....................................................................................................2 2.1.1 Visual Basic 6的功能特點(diǎn).....................................................................2 2.1.2 Visual Basic 6中的基本概念.................................................................3 2.2 Access2000數(shù)據(jù)庫(kù)............................................................................................4 2.2.1 Access的總體結(jié)構(gòu).................................................................................4 2.2.2 VB6和Access的連接...........................................................................5 第三章 需求分析...............................................................................................6 3.1 需求分析...........................................................................................................6 3.1.1 系統(tǒng)數(shù)據(jù)流程圖....................................................................................7 3.1.2 功能需求及設(shè)計(jì)思想............................................................................7 第四章 系統(tǒng)設(shè)計(jì).............................................................................................11 4.1 系統(tǒng)功能設(shè)計(jì).................................................................................................11 4.1.1 系統(tǒng)功能模塊圖..................................................................................11 4.1.2 系統(tǒng)各模塊說明..................................................................................11 4.2 數(shù)據(jù)庫(kù)設(shè)計(jì).....................................................................................................12 4.2.1 創(chuàng)建數(shù)據(jù)庫(kù)..........................................................................................12 4.2.2 數(shù)據(jù)表結(jié)構(gòu)..........................................................................................12 4.2.3 數(shù)據(jù)庫(kù)中各表的關(guān)系..........................................................................16 第五章 倉(cāng)庫(kù)管理原型系統(tǒng)實(shí)現(xiàn).......................................................................16 5.1 數(shù)據(jù)庫(kù)實(shí)現(xiàn).....................................................................................................16 5.1.1 連接數(shù)據(jù)庫(kù)..........................................................................................17 5.1.2 建立數(shù)據(jù)表..........................................................................................18 5.2倉(cāng)庫(kù)管理系統(tǒng)主要界面及使用說明..............................................................18 5.2.1 系統(tǒng)登錄界面......................................................................................19 5.2.2 系統(tǒng)主界面..........................................................................................19 5.2.3 系統(tǒng)管理模塊......................................................................................20 第 ii 頁(yè) 5.2.4 倉(cāng)庫(kù)管理模塊......................................................................................22 5.2.5 物料管理模塊......................................................................................25 5.2.6 報(bào)表查詢模塊......................................................................................29 5.4 系統(tǒng)測(cè)試.........................................................................................................31 5.4.1 菜單測(cè)試..............................................................................................32 5.4.2各功能模塊測(cè)試...................................................................................32 5.4.3 數(shù)據(jù)跟蹤測(cè)試......................................................................................32 第六章 小結(jié)與展望.........................................................................................33 6.1 成績(jī)及不足.....................................................................................................33 6.1.1 成績(jī)......................................................................................................33 6.1.2 不足......................................................................................................33 6.2 展望.................................................................................................................34 致 謝..............................................................................................................36 參考文獻(xiàn)...........................................................................................................37 第 iii 頁(yè) 第一章 緒論 1.1 選題背景 隨著計(jì)算機(jī)技術(shù)的發(fā)展,計(jì)算機(jī)管理已越來越多地運(yùn)用到了各個(gè)領(lǐng)域。在現(xiàn)代企業(yè)的各個(gè)環(huán)節(jié)已離不開計(jì)算機(jī)了。各種各樣的管理軟件也應(yīng)運(yùn)而生。 企業(yè)的庫(kù)存物資管理往往是很復(fù)雜、很繁瑣的。由于所掌握的物料種類眾多,訂貨、管理、發(fā)放的渠道各有差異,各個(gè)企業(yè)之間的管理體制不盡相同,各類統(tǒng)計(jì)報(bào)表繁多,因此倉(cāng)庫(kù)管理必須編制一套倉(cāng)庫(kù)管理信息系統(tǒng),實(shí)現(xiàn)計(jì)算機(jī)化操作,而且必須根據(jù)企業(yè)的具體情況制定相應(yīng)的方案。 一般倉(cāng)庫(kù)管理系統(tǒng),總是根據(jù)所掌握的物資類別,相應(yīng)分成幾個(gè)部門來進(jìn)行物料的計(jì)劃,訂貨,核銷托收,驗(yàn)收入庫(kù),根據(jù)企業(yè)各個(gè)部門的需求來發(fā)送物資設(shè)備,并隨時(shí)按期進(jìn)行庫(kù)存盤點(diǎn),作臺(tái)帳,根據(jù)企業(yè)管理的需要按月、季度、進(jìn)行統(tǒng)計(jì)分析,產(chǎn)生相應(yīng)報(bào)表。根據(jù)我公司的實(shí)際情況分析,一般的倉(cāng)庫(kù)管理系統(tǒng)并不能滿足公司的需求,而且每套系統(tǒng)的成本也過高。因此有必要開發(fā)一套特定的倉(cāng)庫(kù)管理系統(tǒng)來提高公司的工作效率,減少因人為因素而導(dǎo)致的物料損失。通過對(duì)這些情況的仔細(xì)調(diào)查,我開發(fā)了下面的倉(cāng)庫(kù)管理系統(tǒng)。 1.2 設(shè)計(jì)目標(biāo) 倉(cāng)庫(kù)管理系統(tǒng)可主要實(shí)現(xiàn)下列目標(biāo): ? 操作簡(jiǎn)單方便、界面簡(jiǎn)潔美觀。? 能完成倉(cāng)庫(kù)的各種日常操作。 ? 能很好的預(yù)防各自人為因素產(chǎn)生的錯(cuò)誤操作 ? 能夠?yàn)橛脩籼峁┒喾N條件的查詢操作,為物料管理提供準(zhǔn)確及時(shí)的數(shù)據(jù) ? 可實(shí)現(xiàn)盤點(diǎn)報(bào)表及盤點(diǎn)后的物料調(diào)整 ? 具有很好的安全性,以保證數(shù)據(jù)的正確性 ? 可追溯數(shù)據(jù)的歷史信息,為系統(tǒng)完善提供依據(jù) 第 1 頁(yè) 第二章 相關(guān)理論基礎(chǔ) 本系統(tǒng)主要采用VB6 + Access2000相結(jié)合的技術(shù)來進(jìn)行開發(fā),用戶界面的設(shè)計(jì)是用VB6來進(jìn)行的,后臺(tái)數(shù)據(jù)庫(kù)使用Access2000。與數(shù)據(jù)庫(kù)的連接則使用ADO的相關(guān)功能來完成的。 在系統(tǒng)需涉及的一些相關(guān)技術(shù)概述如下。 2.1 Visual Basic 6 Visual意為“可視化的”,指的是一種開發(fā)圖形用戶界面的方法,所以Visual Basic是基于Basic的可視化的程序設(shè)計(jì)語言。在Visual Basic中,一方面繼承了Basic所具有的程序設(shè)計(jì)語言簡(jiǎn)單易用的特點(diǎn),另一方面在其編程系統(tǒng)中采用了面向?qū)ο?、事件?qū)動(dòng)的編程機(jī)制,用一種巧妙的方法把Windows的編程復(fù)雜性封裝起來,提供了一種所見即所得的可視化程序設(shè)計(jì)方法。VB6是指Visual Basic 6.0的版本。 2.1.1 Visual Basic 6的功能特點(diǎn) A)具有面向?qū)ο蟮目梢暬O(shè)計(jì)工具:在VB中,應(yīng)用面向?qū)ο蟮某绦蛟O(shè)計(jì)方法(OOP),把程序和數(shù)據(jù)封裝起來視為一個(gè)對(duì)象,每個(gè)對(duì)象都是可視的。程序員在設(shè)計(jì)時(shí)只需用現(xiàn)有工具根據(jù)界面設(shè)計(jì)要求,直接在屏幕上“畫”出窗口、菜單、按鈕、滾動(dòng)條等不同類型的對(duì)象,并為每個(gè)對(duì)象設(shè)置屬性。程序員的編程工作僅限于編寫相關(guān)對(duì)象要完成的功能程序,因而程序設(shè)計(jì)的效率可大大提高。 B)事件驅(qū)動(dòng)的編程機(jī)制:事件驅(qū)動(dòng)是非常適合圖形用戶界面的編程方式。在圖形用戶界面的應(yīng)用程序中,是由用戶的動(dòng)作即事件掌握著程序運(yùn)行的流向,每個(gè)事件都能驅(qū)動(dòng)一段程序的運(yùn)行。程序員只要編寫響應(yīng)用戶動(dòng)作的代碼,而各個(gè)動(dòng)作之間不一定有聯(lián)系。 C)提供了易學(xué)易用的應(yīng)用程序集成開發(fā)環(huán)境:在VB集成開發(fā)環(huán)境中,用戶可設(shè)計(jì)界面、編寫代碼、調(diào)試程序,直至把應(yīng)用程序編譯成可執(zhí)行文件在Windows中運(yùn)行,使用戶在友好的開發(fā)環(huán)境中工作。 D)結(jié)構(gòu)化的程序設(shè)計(jì)語言:VB6具有豐富的數(shù)據(jù)類型和結(jié)構(gòu)化程序結(jié)構(gòu),作為一種程序設(shè)計(jì)語言,它還有如下一些特點(diǎn):強(qiáng)大的數(shù)值和字符串處理功能;豐富的圖形指令,可方便地繪制各種圖形;提供靜態(tài)和動(dòng)態(tài)數(shù)組,有利于簡(jiǎn)化內(nèi)存的管理;過程可遞歸調(diào)用,使程序更為簡(jiǎn)練;支持隨機(jī)文件和順序文件的訪問;提供了一個(gè)可供應(yīng)用程序調(diào)用的包含多種類型的圖標(biāo)庫(kù);具有完善的運(yùn)行出錯(cuò)處 第 2 頁(yè) 理。 E)支持多種數(shù)據(jù)庫(kù)系統(tǒng)的訪問:利用數(shù)據(jù)控件可訪問的數(shù)據(jù)庫(kù)系統(tǒng)有:Microsoft Access、SQL server、DBASE、Microsoft FoxPro和Oracle等,也可以訪問Microsoft Excel、Lotus1-2-3等多種電子表格。 F)支持動(dòng)態(tài)數(shù)據(jù)交換(DDE)、動(dòng)態(tài)鏈接庫(kù)(DLL)和對(duì)象的鏈接與嵌入(OLE)技術(shù)。 G)完備的HELP聯(lián)機(jī)幫助功能:與Windows環(huán)境下的軟件一樣,在VB中,利用幫助菜單和F1功能鍵,用戶可以隨時(shí)方便地得到所需要的幫助信息。VB幫助窗口中顯示了有關(guān)的示例代碼,通過復(fù)制、粘貼操作可獲取大量的示例代碼,為用戶的學(xué)習(xí)和使用提供了極大的方便。 VB程序設(shè)計(jì)的概念就是面向?qū)ο蟮母拍?,?duì)象就是數(shù)據(jù)(DATA)和代碼(CODE)互相結(jié)合的綜合體。Windows上面的每一個(gè)圖標(biāo),包括窗口本身都是對(duì)象,如果沒有任何事情發(fā)生,對(duì)象處于停頓狀態(tài)。當(dāng)存在外來事件時(shí),程序段執(zhí)行,它的執(zhí)行是由外來事件決定的。因此是“事件”驅(qū)動(dòng)的。 編寫VB程序較為簡(jiǎn)單,首先將各個(gè)對(duì)象放在空白窗體上,然后將程序代碼分別添加給對(duì)象或圖標(biāo),將它們組合起來就可以隨意運(yùn)行了。 在VB中,窗體實(shí)際上是一個(gè)對(duì)象,VB的窗體含有許多內(nèi)嵌特性,這使得用戶界面部分的建立像是從一個(gè)目錄中挑選一個(gè)個(gè)合適的控件,而不是從零開始一步一步地建立控件。這種開發(fā)者能親眼看到的程序設(shè)計(jì)過程就是“可視化程序設(shè)計(jì)”(Visual Programming)。 2.1.2 Visual Basic 6中的基本概念 對(duì)象:面向?qū)ο缶幊蹋∣OP)的提法大家一定也很耳熟,雖然Visual Basic并不是完全的面向?qū)ο缶幊蹋怖昧藢?duì)象編程技術(shù)。對(duì)象簡(jiǎn)單地說就是大家經(jīng)常看到的各種窗口、按鈕、文本框甚至打印機(jī)等。 屬性:如同電視有黑白、彩色之分一樣,作為對(duì)象的Windows中的窗口也是有大有小,文本框的位置不可能完全一樣,菜單要顯示出不同的功能,這些都是由對(duì)象的屬性決定的。不同對(duì)象的屬性可能不同。屬性一般決定了對(duì)象的位置、大小、顯示等情況。 方法:就是對(duì)象能夠做的事,如打印機(jī)對(duì)象就有打印(Print)方法、窗口對(duì)象支持隱藏(Hide)方法、很多對(duì)象支持移動(dòng)(Move)方法等。 事件:就是對(duì)象對(duì)用戶各種操作的反映情況。如用戶用鼠標(biāo)按一下按鈕,就會(huì)觸發(fā)按鈕的“按”(Click)事件。 第 3 頁(yè) 控件:控件就是Visual Basic提供的編程用的模塊,與對(duì)象有直接的聯(lián)系,如同積木的木塊,使用這樣的控件,就可以像拼圖或堆積木一樣“搭”、“拼”你的程序界面。Visual Basic中使用控件,簡(jiǎn)化了Windows中的窗口、按鈕等對(duì)象的編程設(shè)計(jì)。每個(gè)控件都有各自的屬性、事件及方法。只需修改這些特征你就可以隨心所欲地編程了。最重要的是,你可以利用成千上萬的各種擴(kuò)充的控件來快速構(gòu)造幾乎能滿足你任何要求的程序。例如,如果你不滿意Windows簡(jiǎn)陋的媒體播放器,你就可以使用VB的多媒體控件在1小時(shí)以內(nèi)設(shè)計(jì)一個(gè)完全自己風(fēng)格的能夠播放CD、VCD的多媒體播放器,而功能完全與之相當(dāng)。 2.2 Access2000數(shù)據(jù)庫(kù) 作為Microsoft的office套件產(chǎn)品之一,Access已經(jīng)成為世界上最流行的桌面數(shù)據(jù)庫(kù)系統(tǒng)。Access與許多優(yōu)秀的關(guān)系數(shù)據(jù)庫(kù)一樣,可以讓你很容易地連接相關(guān)的信息而且還對(duì)其他的數(shù)據(jù)庫(kù)系統(tǒng)有所補(bǔ)充。它能操作其它來源的資料,包括許多流行的PC數(shù)據(jù)庫(kù)程序(如dBase,Paradox,Microsoft FoxPro)和服務(wù)器、小型機(jī)及大型機(jī)上的許多SQL數(shù)據(jù)庫(kù)。Access還完全支持Microsoft的OLE技術(shù)。 Access還提供windows操作系統(tǒng)的高級(jí)應(yīng)用程序開發(fā)系統(tǒng)。Access與其它數(shù)據(jù)庫(kù)開發(fā)系統(tǒng)之間相當(dāng)顯著的區(qū)別就是:您不用寫一行代碼,就可以在很短的時(shí)間里開發(fā)出一個(gè)功能強(qiáng)大而且相當(dāng)專業(yè)的數(shù)據(jù)庫(kù)應(yīng)用程序,并且這一愉快的過程是完全可視的!如果您能給它加上簡(jiǎn)短的VBA代碼,那么您的程序決不比專業(yè)程序員潛心開發(fā)的程序差。 2.2.1 Access的總體結(jié)構(gòu) Access將所有有名字的東西都成為對(duì)象(object),在Access 2000中,最重要的對(duì)象有表,查詢,窗體,報(bào)表,宏和模塊。 表:用戶定義的存儲(chǔ)資料的對(duì)象。每一個(gè)表都包含有關(guān)某個(gè)主體的信息。表包括存儲(chǔ)不同種類資料的字段(列),而記錄(行)則收集特定主體實(shí)例的所有信息。 查詢:為來自一個(gè)或多個(gè)表的資料提供定制視圖的對(duì)象。在Access中,可以利用圖形化的實(shí)例查詢機(jī)制(QBE)或通過SQL語句來建立查詢。你可以在查詢中選擇、更新、插入或刪除資料,也可以用查詢來建立新表。 窗體:窗體是主要的人機(jī)接口。大量的操作(幾乎所有)都要通過窗體完成。窗體通過運(yùn)行宏(macro)或Visual Basic for Applications(VBA)過程,來響應(yīng)大 第 4 頁(yè) 量的事件。Access 2000為我們提供了強(qiáng)大的(同時(shí)也是相當(dāng)方便的向?qū)В﹣斫?biāo)準(zhǔn)的Windows窗體。 報(bào)表:為格式化、計(jì)算、打印選定資料而設(shè)計(jì)的對(duì)象。它是衡量一個(gè)優(yōu)秀的數(shù)據(jù)庫(kù)的重要標(biāo)準(zhǔn)(有時(shí)甚至是唯一的標(biāo)準(zhǔn))。 宏:為了響應(yīng)已定義的事件,需要讓Access去執(zhí)行一個(gè)或多個(gè)操作,而宏就是對(duì)這些操作的結(jié)構(gòu)化的定義對(duì)象。它可以讓你像堆積木一樣建立一個(gè)功能強(qiáng)大的程序,而無須寫大量的代碼。 模塊:包括用VBA編碼的定制過程的一個(gè)對(duì)象。模塊提供了獨(dú)立的動(dòng)作流以捕獲錯(cuò)誤,而宏做不到。模塊能直接響應(yīng)窗體或報(bào)表事件,也可以從應(yīng)用程序的任何地方被調(diào)用。 2.2.2 VB6和Access的連接 在進(jìn)行系統(tǒng)開發(fā)時(shí),一個(gè)很重要的步驟就是建立數(shù)據(jù)庫(kù)的連接,即訪問數(shù)據(jù)庫(kù)。VB6提供了多種方式訪問數(shù)據(jù)庫(kù),其中以O(shè)DBC與ADO應(yīng)用最多。早期還有RDO,DAO等。 2.2.2.1 ODBC連接數(shù)據(jù)庫(kù) ODBC(Open Database Connectivity,開放數(shù)據(jù)庫(kù)連接)是微軟開放服務(wù)結(jié)構(gòu)中有關(guān)數(shù)據(jù)庫(kù)的一個(gè)組成部分。它建立了一組規(guī)范,并提供了一組應(yīng)用程序調(diào)用接口。用這樣一組接口建立的應(yīng)用程序,對(duì)數(shù)據(jù)庫(kù)的操作不依賴于任何數(shù)據(jù)庫(kù)管理系統(tǒng),不直接與任何DBMS打交道,由此可實(shí)現(xiàn)應(yīng)用程序?qū)Σ煌珼BMS的共享。數(shù)據(jù)庫(kù)操作的“數(shù)據(jù)源”對(duì)應(yīng)用程序是透明的,所有的數(shù)據(jù)庫(kù)操作由對(duì)應(yīng)DBMS的ODBC驅(qū)動(dòng)程序(ODBC Driver)完成。有了ODBC驅(qū)動(dòng)程序,數(shù)據(jù)源就變得十分廣泛,它可以是本機(jī)的某種數(shù)據(jù)庫(kù)格式的文件(如本機(jī)DOS目錄下的Access文件*.mdb),也可以是遠(yuǎn)程數(shù)據(jù)庫(kù)文件(如Microsoft SQL Server);它可以是目前已知的某種DBMS格式,也可以是一種全新的數(shù)據(jù)庫(kù)格式。 在ODBC方式中,不管底層網(wǎng)絡(luò)環(huán)境如何,也無論采用何種DBMS,用戶在程序中都使用同一套標(biāo)準(zhǔn)代碼,源程序可以不因底層的變化而重新編建或修改,從而減輕了開發(fā)維護(hù)的工作量,縮短了開發(fā)周期。但ODBC訪問數(shù)據(jù)庫(kù)的速度較慢,而且需為每個(gè)客戶端配置ODBC數(shù)據(jù)源。 2.2.2.2 ADO連接數(shù)據(jù)庫(kù) 微軟公司的ADO(ActiveX Data Objects)是一個(gè)用于存取數(shù)據(jù)源的COM組件。它提供了編程語言和統(tǒng)一數(shù)據(jù)訪問方式OLE DB的一個(gè)中間層。允許開發(fā) 第 5 頁(yè) 人員編寫訪問數(shù)據(jù)的代碼而不用關(guān)心數(shù)據(jù)庫(kù)是如何實(shí)現(xiàn)的,而只用關(guān)心到數(shù)據(jù)庫(kù)的連接。訪問數(shù)據(jù)庫(kù)的時(shí)候,關(guān)于SQL的知識(shí)不是必要的,但是特定數(shù)據(jù)庫(kù)支持的SQL命令仍可以通過ADO中的命令對(duì)象來執(zhí)行。 ADO包含一些頂層的對(duì)象: 連接,代表到數(shù)據(jù)庫(kù)的連接 記錄集,代表數(shù)據(jù)庫(kù)記錄的一個(gè)集合命令,代表一個(gè)SQL命令 記錄,代表數(shù)據(jù)的一個(gè)集合流,代表數(shù)據(jù)的順序集合 錯(cuò)誤,代表數(shù)據(jù)庫(kù)訪問中產(chǎn)生的意外 字段,代表一個(gè)數(shù)據(jù)庫(kù)字段 參數(shù),代表一個(gè)SQL參數(shù) 屬性,保存對(duì)象的信息 ADO向VB程序員提供了很多好處。包括易于使用,熟悉的界面,高速度以及較低的內(nèi)存占用。同傳統(tǒng)的數(shù)據(jù)對(duì)象層次(DAO和RDO)不同,ADO可以獨(dú)立創(chuàng)建。因此你可以只創(chuàng)建一個(gè)“Connection”對(duì)象,但是可以有多個(gè),獨(dú)立的“Recordset”對(duì)象來使用它。ADO針對(duì)客戶/服務(wù)器以及WEB應(yīng)用程序作了優(yōu)化。 ADO 是基于OLE DB的訪問接口,它是面向?qū)ο蟮腛LE DB技術(shù),繼承了OLE DB的優(yōu)點(diǎn)。屬于數(shù)據(jù)庫(kù)訪問的高層接口。開發(fā)人員在使用ADO時(shí),其實(shí)就是在使用OLE DB,不過OLE DB更加接近底層。ADO向我們提供了一個(gè)熟悉的,高層的對(duì)OLE DB的Automation封裝接口。 VB應(yīng)用程序Microsoft.Jet.OLEDBAccess2000數(shù)據(jù)庫(kù) 圖2.1 VB應(yīng)用程序與數(shù)據(jù)庫(kù)的連接 第三章 需求分析 3.1 需求分析 第 6 頁(yè) 軟件需求分析是軟件開發(fā)周期的第一個(gè)階段,也是關(guān)系到軟件開始成敗的關(guān)鍵步驟。準(zhǔn)確、完整和規(guī)范化的軟件需求是軟件開發(fā)成功的關(guān)鍵。 3.1.1 系統(tǒng)數(shù)據(jù)流程圖 在研究了用戶提供的原始資料及要求后,畫出了系統(tǒng)的數(shù)據(jù)流程圖如下所示。 增料操作產(chǎn)品管理物料管理訂單管理供應(yīng)商管理倉(cāng)位管理退料操作查詢倉(cāng)庫(kù)收料倉(cāng)庫(kù)發(fā)料生產(chǎn)計(jì)劃盤點(diǎn)報(bào)表 圖3-1 數(shù)據(jù)流程圖 3.1.2 功能需求及設(shè)計(jì)思想 3.1.2.1 總體架構(gòu)思想 本倉(cāng)庫(kù)管理系統(tǒng)是利用Client/Server結(jié)構(gòu),即客戶機(jī)/服務(wù)器模式。這種CS模式適用于局域網(wǎng)、安全性可以得到可靠的保證。它為數(shù)據(jù)提供了更安全的存取模式。響應(yīng)速度快。程序開發(fā)具有很強(qiáng)的針對(duì)性,因此,操作界面漂亮,形式多樣,可以充分滿足客戶自身的個(gè)性化要求。 第 7 頁(yè) VB應(yīng)用程序Access2000數(shù)據(jù)庫(kù) 圖3-2 C/S結(jié)構(gòu)示意圖 3.1.2.2 物料管理模塊 首先我們?yōu)槊恳粋€(gè)物料制定出唯一的一個(gè)代碼,在整個(gè)物料管理過程中都將以這個(gè)代碼來管理物料。設(shè)計(jì)代碼如下:1 Y Y Y – X X X X;其中1代表是物料。YYY代表序列號(hào),XXXX由系統(tǒng)自動(dòng)給出。每增加一個(gè)物料時(shí),系統(tǒng)都會(huì)給出此物料的代碼。 對(duì)于物料數(shù)量上的控制采用最大最小數(shù)量法。如果當(dāng)前數(shù)量小于最小數(shù)量,則需出訂單去采購(gòu),如果大于最大數(shù)量則不允許再出訂單。自動(dòng)訂單是根據(jù)這個(gè)原則產(chǎn)生的。 物料根據(jù)其價(jià)值分為A,B,C三類,可以為每一種類型的物料制定不同的控制方法。 A類物品:高值──價(jià)值占庫(kù)存總值70-80%的相對(duì)少數(shù)物品。通常為物品的15-20%。 B類物品:中值──總值占庫(kù)存總值的15-20%。物品數(shù)居中,通常占物品的30-40%。 C類物品:低值──庫(kù)存總值幾乎可以忽略不計(jì),只占5-10%。是物品的大多數(shù),通常占60-70%。 3.1.2.3 供應(yīng)商管理模塊 供應(yīng)商管理模塊記錄公司所有供應(yīng)商的情況,以保證每個(gè)供應(yīng)商都是經(jīng)過認(rèn)證的。并且為每個(gè)供應(yīng)商編制一個(gè)統(tǒng)一的代碼。以代碼來代表供應(yīng)商,可以減少數(shù)據(jù)庫(kù)中的數(shù)據(jù)量。 供應(yīng)商管理模塊還包括公司的物料在供應(yīng)商處的代碼。就像我們?nèi)ベI東西,我們不但要知道去哪里買,還要知道買什么。供應(yīng)商代碼只提供我們?nèi)ツ睦镔I,第 8 頁(yè) 而物料在供應(yīng)商的代碼則是解決了要買什么的問題。 系統(tǒng)為了統(tǒng)一管理,加強(qiáng)控制。將這兩個(gè)信息結(jié)合在一起給出一個(gè)綜合代碼。例如我們?nèi)ト嗣裆虉?chǎng)買一件衣服給出一個(gè)綜合代碼為4000-0001,而去長(zhǎng)發(fā)商場(chǎng)去買同一件衣服則給出的綜合代碼為4000-0002,這樣處理有利于更好的分清每個(gè)物料及供應(yīng)商之間的關(guān)系。為生產(chǎn)線提供更多的更全的數(shù)據(jù)。 3.1.2.4 產(chǎn)品管理模塊 物料是指公司從供應(yīng)商處買來的,是半成品。產(chǎn)品是公司生產(chǎn)的。同樣,我們也需為公司的每一個(gè)產(chǎn)品編制一個(gè)代碼。方便管理。另一方面,還需建立產(chǎn)品與物料之間的聯(lián)系。即產(chǎn)品組成表。表示某個(gè)產(chǎn)品是由哪些物料組成的。在制作生產(chǎn)計(jì)劃時(shí),只需給出生產(chǎn)的產(chǎn)品代碼,而無需給出每一個(gè)物料的代碼。 3.1.2.5 訂單管理模塊 訂單管理主要任務(wù)是產(chǎn)生訂單。產(chǎn)生定單的方法有兩種,一種是自動(dòng)定單。一種是手工下單。自動(dòng)定單是系統(tǒng)根據(jù)當(dāng)前的物料狀況及物料控制方法來對(duì)每一個(gè)物料進(jìn)行分析,如果符合下單條件則自動(dòng)產(chǎn)生一個(gè)訂單,經(jīng)確認(rèn)后就為有效訂單。在確認(rèn)過程中,可以對(duì)訂單進(jìn)行各種操作。手工下單就是人為地去采購(gòu)某一種物料,并且把這個(gè)訂單記錄到系統(tǒng)中去。自動(dòng)訂單可以一次下多個(gè)定單,手工下單只能一個(gè)一個(gè)產(chǎn)生訂單。 訂單是倉(cāng)庫(kù)進(jìn)行收料操作的基礎(chǔ)。 3.1.2.6 倉(cāng)庫(kù)收料 倉(cāng)庫(kù)根據(jù)系統(tǒng)發(fā)出的訂單進(jìn)行收料。 3.1.2.7 生產(chǎn)計(jì)劃管理模塊 此模塊主要是管理生產(chǎn)計(jì)劃。根據(jù)產(chǎn)品及生產(chǎn)數(shù)量,日期等不同將生產(chǎn)分為一批一批,利用生產(chǎn)計(jì)劃號(hào),即工單號(hào)來區(qū)分。每次計(jì)劃產(chǎn)生前,系統(tǒng)會(huì)根據(jù)產(chǎn)品組成表提供的信息來檢驗(yàn)當(dāng)前的物料狀況,如果物料不能滿足此次生產(chǎn),則不能成功產(chǎn)生生產(chǎn)計(jì)劃。 倉(cāng)庫(kù)的發(fā)料也是根據(jù)生產(chǎn)計(jì)劃來進(jìn)行的。每個(gè)生產(chǎn)計(jì)劃都會(huì)自動(dòng)產(chǎn)生一個(gè)發(fā)料清單。 3.1.2.8 倉(cāng)位管理模塊 第 9 頁(yè) 倉(cāng)位管理記錄了倉(cāng)庫(kù)每個(gè)倉(cāng)位存放的物料。 3.1.2.9 倉(cāng)庫(kù)發(fā)料 倉(cāng)庫(kù)根據(jù)生產(chǎn)計(jì)劃給出的工單號(hào)來進(jìn)行發(fā)料。發(fā)料時(shí),即可以一次性發(fā)多個(gè)料,即按工單發(fā)料;也可以按物料一個(gè)一個(gè)來發(fā)??勺杂蛇x擇。也可以兩種方法結(jié)合在一起來發(fā)料。 3.1.2.10 生產(chǎn)增料和退料 生產(chǎn)增料代表了生產(chǎn)損耗。為了核算每批產(chǎn)品的生產(chǎn)成本,因此增料操作需按生產(chǎn)計(jì)劃號(hào)來進(jìn)行。即每個(gè)生產(chǎn)增料都需確定到每個(gè)計(jì)劃號(hào),因此增料是以生產(chǎn)計(jì)劃號(hào)為基礎(chǔ)的。 生產(chǎn)退料是生產(chǎn)線將好的物料退回給倉(cāng)庫(kù)。 3.1.2.11 盤點(diǎn)管理 倉(cāng)庫(kù)每月,每季及每年都要進(jìn)行盤點(diǎn)。盤點(diǎn)時(shí)需提供盤點(diǎn)報(bào)表及盤點(diǎn)調(diào)整。 3.1.2.12 報(bào)表與查詢 需提供根據(jù)各種條件來得到查詢結(jié)果。條件即可以是單個(gè)條件也可以組合條件。查詢結(jié)果分為三個(gè)部分,一部分是基本信息,另一部分是訂單信息,以及生產(chǎn)計(jì)劃信息。 3.1.2.13 操作日志 記錄系統(tǒng)內(nèi)主要的數(shù)據(jù)的操作,以便日后查詢所需。 第 10 頁(yè) 第四章 系統(tǒng)設(shè)計(jì) 在進(jìn)行了需求分析、確定了設(shè)計(jì)思想之后,就要進(jìn)行系統(tǒng)的功能設(shè)計(jì)和數(shù)據(jù)庫(kù)的設(shè)計(jì)。 4.1 系統(tǒng)功能設(shè)計(jì) 4.1.1 系統(tǒng)功能模塊圖 在仔細(xì)分析了公司的物料數(shù)據(jù)圖后,決定將整個(gè)系統(tǒng)分為四大模塊,每個(gè)模塊又有若干個(gè)子模塊。整個(gè)系統(tǒng)功能模塊如下圖所示: 倉(cāng)庫(kù)管理系統(tǒng)系統(tǒng)管理模塊倉(cāng)庫(kù)管理模塊物料管理模塊報(bào)表查詢模塊重登錄修改密碼用戶管理退出入庫(kù)操作出庫(kù)操作退料操作增料操作倉(cāng)位管理盤點(diǎn)損益物料管理產(chǎn)品管理供應(yīng)商管理生產(chǎn)計(jì)劃訂單管理查詢出庫(kù)操作盤點(diǎn)報(bào)表圖4-1 系統(tǒng)功能模塊圖 4.1.2 系統(tǒng)各模塊說明 4.1.2.1 系統(tǒng)管理模塊 在此功能模塊,用戶可以進(jìn)行用戶間的切換,修改密碼,及退出。對(duì)于管理員和超級(jí)用戶還可以進(jìn)行用戶管理。 4.1.2.2 倉(cāng)庫(kù)管理模塊 倉(cāng)庫(kù)管理模塊可完成倉(cāng)庫(kù)的主要日常操作。包括收料,發(fā)料,增料,退料。同時(shí)還有倉(cāng)庫(kù)的倉(cāng)位管理及盤點(diǎn)調(diào)整。 第 11 頁(yè) 4.1.2.3 物料管理模塊 物料管理模塊可完成附加功能,利用這些功能可很好的防止由于人為因素造成的數(shù)據(jù)錯(cuò)誤。具體有物料管理,產(chǎn)品管理,供應(yīng)商管理,訂單管理和生產(chǎn)計(jì)劃管理。 4.1.2.4 報(bào)表查詢模塊 在此功能模塊,用戶可以進(jìn)行各種條件的查詢。實(shí)時(shí)了解整個(gè)公司的物料狀況。為決策提供依據(jù)。具體有查詢,操作日志及盤點(diǎn)報(bào)表。 4.2 數(shù)據(jù)庫(kù)設(shè)計(jì) 大多數(shù)應(yīng)用系統(tǒng)都需要后臺(tái)數(shù)據(jù)庫(kù)地支持。在Windows操作系統(tǒng)中,Access和SQL Server是最常見地網(wǎng)絡(luò)后臺(tái)數(shù)據(jù)庫(kù)。本系統(tǒng)是采用Access數(shù)據(jù)庫(kù)存儲(chǔ)數(shù)據(jù)。 4.2.1 創(chuàng)建數(shù)據(jù)庫(kù) 本系統(tǒng)采用了Access作為數(shù)據(jù)庫(kù)管理系統(tǒng)。先啟動(dòng)Access2000程序,然后創(chuàng)建名為“WMS”的數(shù)據(jù)庫(kù)。并為此數(shù)據(jù)庫(kù)設(shè)置密碼。 4.2.2 數(shù)據(jù)表結(jié)構(gòu) 本倉(cāng)庫(kù)管理系統(tǒng)的數(shù)據(jù)庫(kù)共包括12張數(shù)據(jù)表。4.2.2.1 用戶信息表 用戶信息表(Users)用來保存用戶(管理員,用戶)的信息,該表的結(jié)構(gòu)如表4-1所示。 表4-1 Users(用戶信息)表的結(jié)構(gòu) Users 表結(jié)構(gòu)序號(hào)12345字段user_nameuser_pwduser_leveluser_dateremark描述用戶名用戶密碼用戶權(quán)限用戶建立日期備注類型和長(zhǎng)度主鍵TextTextTextText是否否否可空否否否否是默認(rèn)值沒有沒有沒有沒有沒有Date/Time否 4.2.2.2 物料代碼表 物料代碼表(Materials)用來存放企業(yè)所需用的所有的物料。該表的結(jié)構(gòu)如表 第 12 頁(yè) 4-2所示。 表4-2 Materials(物料代碼)表的結(jié)構(gòu) Materials表結(jié)構(gòu)序號(hào)123456字段PartNumberDescriptionPartTypeDateAddByRemark描述物料代碼物料描述物料類型物料建立日期物料建立者備注類型和長(zhǎng)度主鍵TextTextTextTextText是否否否否可空否否否否否是默認(rèn)值沒有沒有沒有沒有沒有沒有Date/Time否 4.2.2.3 產(chǎn)品代碼表 產(chǎn)品代碼表(Productions)用來保存公司生產(chǎn)的所有產(chǎn)品的信息,該表的結(jié)構(gòu)如表4-3所示。 表4-3 Productions(產(chǎn)品代碼)表的結(jié)構(gòu) Productions表結(jié)構(gòu)序號(hào)12345字段ProductionPNProductionDescDateAddByRemark描述產(chǎn)品代碼產(chǎn)品描述產(chǎn)品建立日期產(chǎn)品建立者備注類型和長(zhǎng)度主鍵TextTextTextText是否否否可空否否否否是默認(rèn)值沒有沒有沒有沒有沒有Date/Time否 4.2.2.4 產(chǎn)品組成表 產(chǎn)品組成表(BoMs)用來記錄公司生產(chǎn)的產(chǎn)品是由哪些物料組成的。為倉(cāng)庫(kù)發(fā)料提供依據(jù)。該表的結(jié)構(gòu)如表4-4所示。 表4-4 BoMs(產(chǎn)品組成)表的結(jié)構(gòu) BoMs表結(jié)構(gòu)序號(hào)1234字段ProductionPNMaterialPNMaterialQTYRemark描述產(chǎn)品代碼物料代碼物料數(shù)量備注類型和長(zhǎng)度主鍵TextTextTextText否否否否可空否否否是默認(rèn)值沒有沒有沒有沒有 4.2.2.5 供應(yīng)商代碼表 供應(yīng)商代碼表(Suppliers)用來保存公司供應(yīng)商的信息。該表的結(jié)構(gòu)如表4-5所示。 表4-5 Suppliers(供應(yīng)商代碼)表的結(jié)構(gòu) 第 13 頁(yè) Suppliers表結(jié)構(gòu)序號(hào)1234567字段SupplierNumberSupplierNameSupplierAddressSupplierTelDateAddByremark描述供應(yīng)商代碼供應(yīng)商名稱供應(yīng)商地址供應(yīng)商電話供應(yīng)商建立日期供應(yīng)商建立者備注類型和長(zhǎng)度主鍵TextTextTextTextTextText是否否否否否可空否否否否否否是默認(rèn)值沒有沒有沒有沒有沒有沒有沒有Date/Time否 4.2.2.6 物料供應(yīng)商聯(lián)系表 物料供應(yīng)商聯(lián)系表(AVLs)用來保存物料在供應(yīng)商處的有關(guān)信息。也是系統(tǒng)產(chǎn)生訂單時(shí)的必要信息。該表的結(jié)構(gòu)如表4-6所示。 表4-6 AVLs(物料供應(yīng)商聯(lián)系)表的結(jié)構(gòu) AVLs表結(jié)構(gòu)序號(hào)12345678字段AVLNumberPartNumberSupplierNumberSupplierPNPriceDateAddByRemark描述物料供應(yīng)商綜合代碼物料代碼供應(yīng)商代碼供應(yīng)商物料代碼單價(jià)加入系統(tǒng)日期加入系統(tǒng)者備注類型和長(zhǎng)度主鍵TextTextTextTextCurrencyTextText是否否否否否否可空否否否否否否否是默認(rèn)值沒有沒有沒有沒有沒有沒有沒有沒有Date/Time否 4.2.2.7 訂單管理表 訂單管理表(POs)用來保存公司給供應(yīng)商買料的訂單,也是倉(cāng)庫(kù)收料的依據(jù)。該表的結(jié)構(gòu)如表4-7所示。 表4-7 POs(訂單管理)表的結(jié)構(gòu) POs表結(jié)構(gòu)序號(hào)12345678字段PONumberPartNumberQtyAVLNumberCloseDateCloseByStatusRemark描述訂單號(hào)碼物料代碼數(shù)量供應(yīng)商的綜合信息收料人收料日期訂單狀態(tài)備注類型和長(zhǎng)度主鍵TextTextTextTextTextTextText是否否否否否否可空否否否否否否否是默認(rèn)值沒有沒有沒有沒有沒有沒有沒有沒有Date/Time否 4.2.2.8 生產(chǎn)計(jì)劃產(chǎn)品管理表 生產(chǎn)計(jì)劃產(chǎn)品管理表(PP_Produciton)用來保存生產(chǎn)計(jì)劃的有關(guān)信息。該表的結(jié)構(gòu)如表4-8所示。 表4-8 PP_Produciton(生產(chǎn)計(jì)劃產(chǎn)品管理表)表的結(jié)構(gòu) 第 14 頁(yè) PP_Produciton表結(jié)構(gòu)序號(hào)12345678字段PlanNumProducitonDateProductionNumQTYStatusAddDateAddByRemark描述生產(chǎn)計(jì)劃號(hào)計(jì)劃生產(chǎn)日期生產(chǎn)的產(chǎn)品代碼生產(chǎn)的產(chǎn)品數(shù)量此生產(chǎn)計(jì)劃的狀態(tài)生產(chǎn)計(jì)劃制定日期生產(chǎn)計(jì)劃制定者備注類型和長(zhǎng)度主鍵TextTextNumberTextTextText是否否否否否Date/Time否可空否否否否否否否是默認(rèn)值沒有沒有沒有沒有沒有沒有沒有沒有Date/Time否 4.2.2.9生產(chǎn)計(jì)劃物料管理表 生產(chǎn)計(jì)劃物料管理表(PP_Material)用來保存生產(chǎn)計(jì)劃中的每一顆物料的使用狀況。此表是由生產(chǎn)計(jì)劃產(chǎn)品管理表和產(chǎn)品組成表通過計(jì)算而得到的。該表的結(jié)構(gòu)如表4-9所示。 表4-9 PP_Material(生產(chǎn)計(jì)劃物料管理)表的結(jié)構(gòu) PP_Material表結(jié)構(gòu)序號(hào)1234567字段PartNumPlanNumQtyOutByOutDateStatusRemark描述物料代碼生產(chǎn)計(jì)劃號(hào)數(shù)量發(fā)料人發(fā)料日期此次計(jì)劃的物料狀態(tài)備注類型和長(zhǎng)度主鍵TextTextNumberTextTextText否否否否否否可空否否否否否否是默認(rèn)值沒有沒有沒有沒有沒有沒有沒有Date/Time否 4.2.2.10 物料現(xiàn)狀表 物料現(xiàn)狀表(NowMaterials)用來保存當(dāng)前的物料狀況,同時(shí)為訂單的產(chǎn)生及生產(chǎn)計(jì)劃的制定提供物料依據(jù)。該表的結(jié)構(gòu)如表4-10所示。 表4-10 NowMaterials(物料現(xiàn)狀)表的結(jié)構(gòu) NowMaterials表結(jié)構(gòu)序號(hào)12348字段PartNumberCurrentQtyMinQtyMaxQtyRemark描述物料代碼當(dāng)前數(shù)量最小數(shù)量最大數(shù)量備注類型和長(zhǎng)度主鍵TextNumberNumberNumberText是否否否否可空否否否否是默認(rèn)值沒有沒有沒有沒有沒有 4.2.2.11 倉(cāng)庫(kù)倉(cāng)位管理表 倉(cāng)庫(kù)倉(cāng)位管理表(Locations)用來管理倉(cāng)庫(kù)的各個(gè)倉(cāng)位信息。該表的結(jié)構(gòu)如表4-11所示。 表4-11 Locations(倉(cāng)庫(kù)倉(cāng)位管理)表的結(jié)構(gòu) 第 15 頁(yè) Locations表結(jié)構(gòu)序號(hào)1234字段LocationTypeLocationNumPartNumRemark描述倉(cāng)位類型倉(cāng)位編號(hào)物料代碼備注類型和長(zhǎng)度主鍵TextTextTextText否是否否可空否否否是默認(rèn)值沒有沒有沒有沒有 4.2.2.12 操作日志表 操作日志表(DailyDate)用來保存用戶的所有操作信息。以便以后發(fā)現(xiàn)問題時(shí)查詢所需。該表的結(jié)構(gòu)如表4-12所示。 表4-12 DailyDate(操作日志)表的結(jié)構(gòu) DailyData表結(jié)構(gòu)序號(hào)1234字段OP_DateOP_ActionOP_ByRemark描述操作日期操作內(nèi)容操作者備注類型和長(zhǎng)度主鍵Date/Time否TextTextText否否否可空否否否是默認(rèn)值沒有沒有沒有沒有 4.2.3 數(shù)據(jù)庫(kù)中各表的關(guān)系 數(shù)據(jù)庫(kù)中各表之間的關(guān)系如圖4-2所示。 圖4-2 數(shù)據(jù)庫(kù)中各表的關(guān)系 第五章 倉(cāng)庫(kù)管理原型系統(tǒng)實(shí)現(xiàn) 5.1 數(shù)據(jù)庫(kù)實(shí)現(xiàn) 第 16 頁(yè) 5.1.1 連接數(shù)據(jù)庫(kù) 在進(jìn)行系統(tǒng)開發(fā)前,一個(gè)很重要的步驟就是建立數(shù)據(jù)庫(kù)的連接,即訪問數(shù)據(jù)庫(kù)。VB6提供了多種方式訪問數(shù)據(jù)庫(kù),其中以O(shè)DBC與ADO應(yīng)用最多。具體ODBC及ADO詳見相關(guān)理論部分。本系統(tǒng)采用ADO方式訪問數(shù)據(jù)庫(kù)。ADO數(shù)據(jù)庫(kù)連接主要分兩步進(jìn)行:一是引用ADO,二是使用ADO連接數(shù)據(jù)庫(kù)。 1.引用ADO 在VB6菜單“工程”“引用”-從中選擇 Microsoft ActiveX Data objects 2.8 library和 Microsoft ActiveX Data objects recordset 2.8兩個(gè)組件,這是在連接數(shù)據(jù)庫(kù)前所必做的工作。 圖5-1 引用ADO 第 17 頁(yè) 圖5-2 選擇ADO控件 2.使用ADO連接數(shù)據(jù)庫(kù) 本系統(tǒng)采用的是無源的數(shù)據(jù)庫(kù)連接方法,因?yàn)檎麄€(gè)系統(tǒng)都會(huì)使用到這個(gè)數(shù)據(jù)庫(kù),所以將數(shù)據(jù)庫(kù)的連接定義為全局變量。 Public Cn As New ADODB.Connection ‘定義數(shù)據(jù)源 Dim db_path As String ‘用于存放數(shù)據(jù)庫(kù)的路徑 Dim db_cn As String ‘連接數(shù)據(jù)源字符串 db_path = App.Path & “DataWMS.mdb” ‘指定數(shù)據(jù)庫(kù)文件 db_cn = “Provider=Microsoft.Jet.OLEDB.4.0;Data Source=” & db_path & “;Jet OLEDB:database password=123321;” ‘?dāng)?shù)據(jù)庫(kù)連接字符串 Cn.Open db_cn ‘打開數(shù)據(jù)源 5.1.2 建立數(shù)據(jù)表 本系統(tǒng)采用了Access作為數(shù)據(jù)庫(kù)管理系統(tǒng)。先啟動(dòng)Access2000程序,然后創(chuàng)建名為“WMS”的數(shù)據(jù)庫(kù)。并為此數(shù)據(jù)庫(kù)設(shè)置密碼。在數(shù)據(jù)庫(kù)中建立各表。表名稱及表結(jié)構(gòu)詳見系統(tǒng)設(shè)計(jì)中數(shù)據(jù)表的設(shè)計(jì)。 5.2倉(cāng)庫(kù)管理系統(tǒng)主要界面及使用說明 第 18 頁(yè) 本系統(tǒng)按用戶類別及使用功能可以分為管理員登錄、普通用戶登錄及超級(jí)用戶登錄三種。不同類型的用戶具有不同的權(quán)限。所有用戶的主操作界面相同,區(qū)別在于個(gè)別功能的使用權(quán)限。 5.2.1 系統(tǒng)登錄界面 設(shè)計(jì)思路與要點(diǎn):用戶運(yùn)行程序后,輸入用戶名與密碼,程序根據(jù)用戶名到后臺(tái)數(shù)據(jù)庫(kù)查詢用戶名和密碼是否正確,如果正確,則根據(jù)用戶名給出用戶所屬的級(jí)別,并根據(jù)級(jí)別給出相應(yīng)的權(quán)限。如沒有通過驗(yàn)證,則給出沒有通過驗(yàn)證的原因。 系統(tǒng)登錄界面如圖5-3所示。 圖5-3 倉(cāng)庫(kù)管理系統(tǒng)登錄界面 如果用戶名或密碼錯(cuò)誤,系統(tǒng)會(huì)分別提示,防止非法用戶進(jìn)入系統(tǒng)操作。 圖5-4 倉(cāng)庫(kù)管理系統(tǒng)密碼錯(cuò)誤界面 5.2.2 系統(tǒng)主界面 設(shè)計(jì)思路與要點(diǎn):用戶登錄通過后,進(jìn)入系統(tǒng)的主界面。主界面的菜單如果 第 19 頁(yè) 是灰色顯示,則表明此用戶沒有權(quán)限操作此功能。在主界面的狀態(tài)欄會(huì)顯示當(dāng)前用戶名和用戶權(quán)限。 界面如圖5-5所示。 圖5-5 倉(cāng)庫(kù)管理系統(tǒng)主界面 5.2.3 系統(tǒng)管理模塊 系統(tǒng)管理模塊主是功能是進(jìn)行本系統(tǒng)的一些常用管理工作,共有四個(gè)子模塊:重新登錄,修改密碼,用戶管理,退出。 5.2.3.1 重新登錄功能 進(jìn)入系統(tǒng)后,可選擇重新登錄在不現(xiàn)用戶之間進(jìn)行切換。界面如圖5-6所示。 圖5-6 系統(tǒng)重登錄界面 5.2.3.2 修改密碼功能 設(shè)計(jì)思路和要點(diǎn):用戶如需修改自己的登錄密碼,需輸入舊密碼與新密碼,程序在數(shù)據(jù)庫(kù)中修改用戶的密碼。 第 20 頁(yè) 界面如圖5-7所示。 圖5-7 修改密碼界面 5.2.3.3 用戶管理功能 設(shè)計(jì)思路和要點(diǎn):用戶管理是對(duì)使用此系統(tǒng)的所有用戶進(jìn)行管理。分為增加,刪除以及修改用戶信息。此功能只有管理員和超級(jí)用戶才能使用。普通用戶不能執(zhí)行此操作。 界面如圖5-8所示。 圖5-8 用戶管理界面 5.2.3.4 退出功能 退出即退出本系統(tǒng)。選擇系統(tǒng)管理下的退出即可。如圖5-9所示。 第 21 頁(yè) 圖5-9 退出系統(tǒng)菜單 5.2.4 倉(cāng)庫(kù)管理模塊 倉(cāng)庫(kù)管理模塊是本系統(tǒng)的核心模塊。根據(jù)倉(cāng)庫(kù)的日常操作共分有六個(gè)子模塊,分別是:入庫(kù)操作,出庫(kù)操作,退料操作,增料操作,倉(cāng)位管理和盤點(diǎn)損益。已基本包括了倉(cāng)庫(kù)管理的主要功能。 5.2.4.1 入庫(kù)操作 設(shè)計(jì)思路和要點(diǎn):入庫(kù)操作即倉(cāng)庫(kù)的收料,系統(tǒng)規(guī)定收料只能根據(jù)訂單來進(jìn)行。沒有訂單就不能完成收料。每個(gè)訂單都對(duì)應(yīng)一個(gè)入庫(kù)操作。這樣可以大大減少因人為因素產(chǎn)生的錯(cuò)誤。規(guī)范化倉(cāng)庫(kù)收料操作。選擇訂單號(hào)碼后,相關(guān)的訂單信息已會(huì)顯示出來。訂單號(hào)碼是由訂單管理模塊產(chǎn)生。倉(cāng)庫(kù)人員沒有權(quán)限產(chǎn)生訂單。 界面如圖5-10所示。 圖5-10 入庫(kù)操作界面 5.2.4.2 出庫(kù)操作 設(shè)計(jì)思想和要點(diǎn):出庫(kù)操作即倉(cāng)庫(kù)的發(fā)料,本系統(tǒng)規(guī)定倉(cāng)庫(kù)的發(fā)料需根據(jù)生產(chǎn)計(jì)劃來進(jìn)行。沒有生產(chǎn)計(jì)劃則不能發(fā)料。生產(chǎn)計(jì)劃的產(chǎn)生由專門模塊實(shí)現(xiàn)。生 第 22 頁(yè) 產(chǎn)計(jì)劃用工單來區(qū)分。每個(gè)工單的發(fā)料可有兩種方式,一種是按工單發(fā)料,即一次性將一個(gè)工單的全部所需物料全部發(fā)至生產(chǎn)線。另一種是按物料,即根據(jù)生產(chǎn)狀況,一個(gè)一個(gè)將物料發(fā)至生產(chǎn)線。選擇選擇發(fā)料類型,按工單或按物料。按工單的話,則選擇工單號(hào)即生產(chǎn)計(jì)劃號(hào),系統(tǒng)自動(dòng)將此工單的所有料發(fā)至生產(chǎn)線。 界面如圖5-11和圖5-12所示。 圖5-11 出庫(kù)操作按工單界面 圖5-12 出庫(kù)操作按物料界面 5.2.4.3 退料操作 設(shè)計(jì)思路和要點(diǎn):退料操作是針對(duì)生產(chǎn)線由于各種原因產(chǎn)生的生產(chǎn)中多領(lǐng)的物料退回倉(cāng)庫(kù)。退料時(shí)需選擇所退物料的料號(hào)及數(shù)量。程序會(huì)根據(jù)這些信息在數(shù)據(jù)庫(kù)中作出相應(yīng)的調(diào)整。 第 23 頁(yè) 界面如圖5-13所示。 圖5-13 退料操作界面 5.2.4.4 增料操作 設(shè)計(jì)思路和要點(diǎn):增料操作即由于生產(chǎn)損耗而需要增料。為了核算成本,增料需根據(jù)生產(chǎn)計(jì)劃號(hào)來進(jìn)行增料操作,這樣就可以清楚列出每次生產(chǎn)的損耗。 界面如圖5-14所示。 圖5-14 增料操作界面 5.2.4.5 倉(cāng)位管理 設(shè)計(jì)思路與要點(diǎn):倉(cāng)位管理是對(duì)倉(cāng)庫(kù)的各個(gè)倉(cāng)位進(jìn)行分配與管理。可以增加新的倉(cāng)位和修改倉(cāng)位存放的物料。 界面如圖5-15所示。 第 24 頁(yè) 圖5-15 倉(cāng)位管理界面 5.2.4.6 盤點(diǎn)損益 設(shè)計(jì)思路和要點(diǎn):每次盤點(diǎn)后,需根據(jù)盤點(diǎn)結(jié)果進(jìn)行某些物料的調(diào)整。調(diào)整分為收益和虧損。 界面如圖5-16所示。 圖5-16 盤點(diǎn)損益界面 5.2.5 物料管理模塊 此模塊的主要功能是對(duì)倉(cāng)庫(kù)和生產(chǎn)及倉(cāng)庫(kù)和物料的一些接口數(shù)據(jù)的管理。在現(xiàn)代企業(yè)中,每個(gè)系統(tǒng)之間都有一定的聯(lián)系。倉(cāng)庫(kù)系統(tǒng)也不例外,為了更好的管理倉(cāng)庫(kù),得到更全的數(shù)據(jù),減少因?yàn)槿藶橐蛩囟l(fā)生的錯(cuò)誤,倉(cāng)庫(kù)與其他系統(tǒng)也 第 25 頁(yè) 有一定的數(shù)據(jù)聯(lián)系。此模塊共有五個(gè)子模塊:物料管理,產(chǎn)品管理,供應(yīng)商管理,生產(chǎn)計(jì)劃和訂單管理。 5.2.5.1 物料管理 設(shè)計(jì)思路和要點(diǎn):物料管理模塊是管理企業(yè)的所有的物料,系統(tǒng)為每個(gè)物料給出一個(gè)代碼。在企業(yè)內(nèi)部以這個(gè)代碼來進(jìn)行收料,發(fā)料等操作。物料代碼是整個(gè)企業(yè)物料管理的基礎(chǔ)。因此物料代碼的管理是非常重要的。綜合公司的具體情況,決定物料代碼由程序根據(jù)一定的規(guī)則自動(dòng)產(chǎn)生。物料采用最大最小數(shù)量來控制。 界面如圖5-17所示。 圖5-17 物料管理界面 5.2.5.2 產(chǎn)品管理 設(shè)計(jì)思路和要點(diǎn):產(chǎn)品管理模塊主是對(duì)公司的所有產(chǎn)品進(jìn)行編碼及記錄產(chǎn)品的組成情況。相應(yīng)地分兩部分,一個(gè)是產(chǎn)品代碼管理,另一個(gè)是產(chǎn)品組成物料清單管理。產(chǎn)品代碼是由程序根據(jù)一定的規(guī)則產(chǎn)生。而產(chǎn)品組成物料清單則是由物料管理中的物料組成的。產(chǎn)品與物料最大的不同點(diǎn)在于產(chǎn)品是由公司生產(chǎn)出來的,而物料是由公司直接買來的。 界面如圖5-18和圖5-19所示。 第 26 頁(yè) 圖5-18 產(chǎn)品管理界面 圖5-19 產(chǎn)品物料組成清單界面 5.2.5.3 供應(yīng)商管理 設(shè)計(jì)思路和要點(diǎn):供應(yīng)商管理也分兩部分,一個(gè)是供應(yīng)商代碼管理,另一個(gè)是供應(yīng)商物料代碼管理。供應(yīng)商代碼管理是為了方便對(duì)供應(yīng)商進(jìn)行調(diào)整。供應(yīng)商 第 27 頁(yè) 加上供應(yīng)商的物料代碼組成了一個(gè)綜合信息。我們?yōu)槊總€(gè)綜合信息進(jìn)行編號(hào),方便管理。 界面如圖5-20和圖5-21所示。 圖5-20 供應(yīng)商代碼管理界面 圖5-21 供應(yīng)商物料代碼管理界面 5.2.5.4 生產(chǎn)計(jì)劃管理 設(shè)計(jì)思路和要點(diǎn):生產(chǎn)計(jì)劃管理需根據(jù)當(dāng)前的物料狀況來進(jìn)行。每次生產(chǎn)計(jì)劃以編號(hào)來劃分。編號(hào)由系統(tǒng)產(chǎn)生。計(jì)劃產(chǎn)生時(shí)系統(tǒng)會(huì)檢查物料狀況。如物料狀況不允許則不能成功產(chǎn)生生產(chǎn)計(jì)劃。 第 28 頁(yè) 界面如圖5-22所示。 圖5-22 生產(chǎn)計(jì)劃管理界面 5.2.5.5 訂單管理 設(shè)計(jì)思路和要點(diǎn):訂單可以系統(tǒng)自動(dòng)產(chǎn)生,也可以手工產(chǎn)生。自動(dòng)產(chǎn)生時(shí),根據(jù)物料的管理辦法,產(chǎn)生訂單可以是多個(gè)也可以是一個(gè)。而手工定單的產(chǎn)生只能是一個(gè)。定單產(chǎn)生后需進(jìn)行確認(rèn)才能生效。 界面如圖5-23所示。 圖5-23 訂單管理界面 5.2.6 報(bào)表查詢模塊 此模塊的主要功能是查詢及報(bào)表。5.2.6.1 查詢 第 29 頁(yè) 設(shè)計(jì)思路和要點(diǎn):根據(jù)各種查詢條件查詢物料信息。物料信息包含三部分,一為基本信息,二為訂單信息,三為生產(chǎn)計(jì)劃信息。適合所有使用者。 界面如圖5-24所示。 圖5-24 查詢界面 5.2.6.2 查詢?nèi)粘2僮?/p> 設(shè)計(jì)思路與要點(diǎn):對(duì)系統(tǒng)的每一次操作能應(yīng)及時(shí)地記錄下來,以便日后查詢。因此在數(shù)據(jù)庫(kù)中單獨(dú)創(chuàng)建一張表,用于記錄系統(tǒng)的日常操作,即倉(cāng)庫(kù)的各種日常操作。通過此功能,可能追溯系統(tǒng)數(shù)據(jù)的整個(gè)變化過程。使整個(gè)系統(tǒng)的運(yùn)行都在控制之內(nèi)。 界面如圖5-25所示。 第 30 頁(yè) 圖5-25 操作日志界面 5.2.6.3 盤點(diǎn)報(bào)表 設(shè)計(jì)思路和要點(diǎn):盤點(diǎn)報(bào)表可以根據(jù)盤點(diǎn)的需要,按物料編碼或按倉(cāng)位生成。盤點(diǎn)報(bào)表將列出當(dāng)前時(shí)刻,倉(cāng)庫(kù)中所有物料的數(shù)量及存放地點(diǎn),以便盤點(diǎn)時(shí)參考。同時(shí)此報(bào)表還可以輸出成各種格式,以方便用戶使用。 界面如圖5-26所示。 圖5-26 盤點(diǎn)報(bào)表界面 5.4 系統(tǒng)測(cè)試 第 31 頁(yè) 一般情況下,我們千辛萬苦開發(fā)出的程序總會(huì)存在一些問題,這就需要進(jìn)行測(cè)試。對(duì)于此系統(tǒng)的測(cè)試從以下幾方面進(jìn)行入手。 5.4.1 菜單測(cè)試 檢查每個(gè)菜單是否有效。5.4.2各功能模塊測(cè)試 設(shè)計(jì)一些數(shù)據(jù),利用各個(gè)模塊提供功能進(jìn)行測(cè)試。并檢查程序的防呆性,即程序是否能夠有效地防止一些明顯有錯(cuò)誤數(shù)據(jù)進(jìn)入系統(tǒng)。 5.4.3 數(shù)據(jù)跟蹤測(cè)試 打開后臺(tái)數(shù)據(jù)庫(kù),檢查各項(xiàng)數(shù)據(jù)是否與輸入的一致。及各個(gè)表及表中數(shù)據(jù)是否一致。 第 32 頁(yè) 第六章 小結(jié)與展望 整個(gè)倉(cāng)庫(kù)管理考試系統(tǒng)主要包括上面所寫的模塊及功能,基本上已經(jīng)能夠覆蓋了倉(cāng)庫(kù)日常管理中的主要操作。內(nèi)容也較為詳盡。由于時(shí)間、所學(xué)以及精力的關(guān)系,該系統(tǒng)還處于原型設(shè)計(jì)階段,許多預(yù)想的模塊還沒有能夠及時(shí)添加進(jìn)去。就是寫進(jìn)系統(tǒng)的也有部分模塊還可以更加好的進(jìn)行完善。 6.1 成績(jī)及不足 本倉(cāng)庫(kù)管理系統(tǒng)的設(shè)計(jì)和分析到目前為止還只是一個(gè)初始階段,在這段時(shí)間的設(shè)計(jì)過程中,從中得到了一些成績(jī),也有一些不足。 6.1.1 成績(jī) ? 能夠比較好的進(jìn)行需求分析,可行性分析以及系統(tǒng)設(shè)計(jì),來獨(dú)立開發(fā)一個(gè)較為小型的MIS系統(tǒng); ? 完成了倉(cāng)庫(kù)管理中日常使用最多的最主要的功能。? 具有很好的防呆功能。 ? 對(duì)數(shù)據(jù)的處理也有一定的聯(lián)系,可減少人為因素帶來的影響。? 較少的鍵盤輸入,大多數(shù)功能可只用鼠標(biāo)來完成操作。? 模塊化編程,為以后的改進(jìn)提供了方便。 6.1.2 不足 ? 系統(tǒng)只提供了鍵盤和鼠標(biāo)的輸入,沒有提供條碼掃描的輸入。? 系統(tǒng)沒有提供打印輸出的功能,如果需要打印還需借助其他的軟件。? 系統(tǒng)只是提供了一個(gè)簡(jiǎn)單的功能,與現(xiàn)代化的公司倉(cāng)庫(kù)定理還有不小的差距。 ? 系統(tǒng)的一些模塊的功能是理論化的,在實(shí)際中還有許多更復(fù)雜的情況并沒有考慮進(jìn)去。在以后實(shí)際作用過程中很有很多地方需改進(jìn)。 第 33 頁(yè) 6.2 展望 對(duì)于一個(gè)公司的倉(cāng)庫(kù)管理來說,該系統(tǒng)還只是一個(gè)雛形,沒有完成的事情還很多。有了現(xiàn)有的系統(tǒng)原型,還要與用戶溝通,將他們實(shí)際操作中的一些問題考慮進(jìn)去,逐步改進(jìn)上面談到的一些不足點(diǎn),完善整個(gè)系統(tǒng)。另外還需參照公司的其他系統(tǒng),開發(fā)出與其他系統(tǒng)的接口。 第 34 頁(yè) 結(jié) 束 語 通過緊張忙碌的三個(gè)多月的畢業(yè)設(shè)計(jì),我的個(gè)人能力得到了很大的提高。獲益匪淺,專業(yè)知識(shí)上也上了一個(gè)新臺(tái)階,對(duì)整個(gè)軟件設(shè)計(jì)開發(fā)的流程也有了更深刻的理解。 在我以前的工作中,總是先考慮編碼,然后再考慮其他的問題,導(dǎo)致在工作過程中經(jīng)常需調(diào)整用戶需求和進(jìn)度上的安排不盡如人意,經(jīng)常需加班來趕進(jìn)度。而在這次畢業(yè)設(shè)計(jì)中,我按照軟件工程的要求進(jìn)行,先進(jìn)行編碼前的前期工作,并按照老師為我們制定的進(jìn)度進(jìn)行,順利地完成了制定的任務(wù)。在整個(gè)工作過程中,感覺沒有像以前那樣匆忙,整個(gè)過程也很輕松。通過這次畢業(yè)設(shè)計(jì),將使我的工作習(xí)慣有一個(gè)很大的改進(jìn)。這些提高是終身受益的。 總之,通過這次畢業(yè)設(shè)計(jì)是使我各方面的知識(shí)得以融匯貫通,為我將來的工作開了一個(gè)好頭。我認(rèn)為這種改變是質(zhì)的飛躍。 由于時(shí)間倉(cāng)促,以及本人水平有限,只對(duì)該系統(tǒng)做了簡(jiǎn)單的開發(fā),設(shè)計(jì)中還存在一些不足之處,尚有待完善。最后,希望大家多多批評(píng)指導(dǎo), 敬請(qǐng)老師批評(píng)指正。 第 35 頁(yè) 致 謝 在本次畢業(yè)設(shè)計(jì)中,我從指導(dǎo)趙老師身上學(xué)到了很多東西。特別是對(duì)系統(tǒng)化的軟件工作對(duì)我影響最大,使我得到不少的提高這對(duì)于我以后的工作和學(xué)習(xí)都有一種巨大的幫助。在此表示衷心的感謝! 同時(shí),感謝三年來對(duì)我關(guān)心幫助的所有任課老師和同學(xué),特別是趙睿老師和我們的班主任老師在三年的學(xué)習(xí)給我的幫助。以及要感謝我們班的其他同學(xué),雖然我是一個(gè)人做畢業(yè)設(shè)計(jì)的,但在我遇到問題時(shí),我們是一起討論解決的。 總之一句話,感謝所有關(guān)心和幫助我的人。 第 36 頁(yè) 參考文獻(xiàn) 參考文獻(xiàn)表 [1] 史濟(jì)民,軟件工程——原理、方法與應(yīng)用,機(jī)械工業(yè)出版社,2002 [2] [美]Gary Cornell,VB6從入門到精通,北京希望電子出版社,1999 [3] 陳恩義,SQL Server 2000開發(fā)指南,清華大學(xué)出版社,2002 [4] 趙松濤,Visual Basic + SQL Server 2000 系統(tǒng)開發(fā)實(shí)錄,2007 [5] 盧湘鴻,Access 數(shù)據(jù)庫(kù)與程序設(shè)計(jì),電子工業(yè)出版社,2006 [6] 戴建耘,Access 2003數(shù)據(jù)庫(kù)教程,電子工業(yè)出版社,2007 第 37 頁(yè)第五篇:基于VB技術(shù)的倉(cāng)庫(kù)管理系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)