第一篇:VB程序設(shè)計(jì)課程設(shè)計(jì)
VB程序設(shè)計(jì)課程設(shè)計(jì)
1、目的
VB程序設(shè)計(jì)課程設(shè)計(jì)是考察學(xué)生對(duì)VB程序設(shè)計(jì)課程相關(guān)知識(shí)點(diǎn)掌握情況的重要環(huán)節(jié),也是激勵(lì)學(xué)生進(jìn)一步學(xué)習(xí)VB、提高運(yùn)用VB開(kāi)發(fā)實(shí)際計(jì)算機(jī)程序的能力。課程設(shè)計(jì)的重點(diǎn)在于學(xué)生利用VB開(kāi)發(fā)程序的能力。
2、課程設(shè)計(jì)題目
學(xué)生信息管理系統(tǒng)
3、程序功能
該程序具有建立數(shù)據(jù)庫(kù),建立數(shù)據(jù)庫(kù)表,添加數(shù)據(jù),刪除數(shù)據(jù),查詢學(xué)生每學(xué)期成績(jī)、不及格情況、積點(diǎn)情況等相關(guān)信息的功能。
4、實(shí)現(xiàn)要求
每個(gè)學(xué)生建立一個(gè)數(shù)據(jù)庫(kù)(名字自擬),數(shù)據(jù)庫(kù)中建立學(xué)生基本信息表(學(xué)號(hào)、姓名、性別、出生年、出生月、出生日、聯(lián)系電話、年級(jí)、班級(jí)、住址等)、學(xué)生成績(jī)表(學(xué)號(hào)、課程號(hào)、成績(jī)、學(xué)期等)、課程信息表(課程號(hào)、課程名稱、出版社、出版日期、版次、頁(yè)碼、價(jià)格、課程類(lèi)型(基礎(chǔ)課、專業(yè)基礎(chǔ)課、選修課等)、開(kāi)課學(xué)院等)。
把課程信息、每一學(xué)期的成績(jī)等分別輸入相應(yīng)的表中,其中學(xué)生基本信息表記錄不少于5個(gè)學(xué)生的信息。
在以上數(shù)據(jù)的基礎(chǔ)上,實(shí)現(xiàn)相關(guān)的程序功能(不僅僅第3條指定的功能)。
設(shè)計(jì)多界面程序,相關(guān)查詢結(jié)果應(yīng)由不同的界面顯示,每個(gè)同學(xué)顯示結(jié)果的形式應(yīng)盡量不同。
5、考核
根據(jù)學(xué)生實(shí)現(xiàn)程序功能多少(40分)、界面設(shè)計(jì)情況(20分)、課程設(shè)計(jì)報(bào)告撰寫(xiě)情況(20)、答辯情況(20分)進(jìn)行考核。雷同者應(yīng)重做。
6、課程設(shè)計(jì)報(bào)告內(nèi)容
1)課程設(shè)計(jì)題目
2)課程設(shè)計(jì)的目的3)程序功能介紹
4)程序界面設(shè)計(jì)與控件屬性設(shè)置
5)程序代碼編寫(xiě)
6)程序演示(將運(yùn)行過(guò)程用截圖方式截下來(lái),并對(duì)輸入數(shù)據(jù)、輸出的結(jié)果進(jìn)行適當(dāng)說(shuō)明)
7)課程學(xué)習(xí)與課程設(shè)計(jì)心得體會(huì)
7、上交材料
本次課程設(shè)計(jì)以小班為單位上交如下資料:
1)光盤(pán):每一小班建立一個(gè)目錄(專業(yè)年級(jí)班級(jí)),在此目錄下建立每個(gè)同學(xué)的目錄(學(xué)號(hào)姓名),在每個(gè)同學(xué)的目錄下保存該同學(xué)的電子版的課程設(shè)計(jì)報(bào)告、打包的程序。
2)紙制版的課程設(shè)計(jì)報(bào)告
第二篇:vb程序設(shè)計(jì)課程設(shè)計(jì)題目
VB程序設(shè)計(jì)課程設(shè)計(jì)
一.題目:
1.記事本的設(shè)計(jì)與實(shí)現(xiàn) 2.學(xué)生成績(jī)管理系統(tǒng) 3.彈球游戲
4.圖書(shū)館管理系統(tǒng) 5.打字練習(xí)程序 6.超市銷(xiāo)售管理 7.小型測(cè)試系統(tǒng) 8.倉(cāng)庫(kù)管理系統(tǒng) 9.猜數(shù)字游戲 10.工資管理系統(tǒng) 二.要求和說(shuō)明:
1.自己獨(dú)立完成,最終提交課程設(shè)計(jì)報(bào)告和實(shí)驗(yàn)成果
2.對(duì)各個(gè)系統(tǒng)實(shí)現(xiàn)功能進(jìn)行分析并設(shè)計(jì)好系統(tǒng)界面,要求界面設(shè)計(jì)美觀方便
3.課程設(shè)計(jì)報(bào)告格式:封面、題目、時(shí)間地點(diǎn)、要求、內(nèi)容、詳細(xì)步驟和過(guò)程、總結(jié) 1)功能描述
對(duì)系統(tǒng)要實(shí)現(xiàn)的功能進(jìn)行確切的描述。
2)概要設(shè)計(jì)
根據(jù)功能分析,建立系統(tǒng)的體系結(jié)構(gòu),即將整個(gè)系統(tǒng)分解成若干子模塊,用框圖表示各功能模塊之間的接口關(guān)系
3)詳細(xì)設(shè)計(jì)
詳細(xì)說(shuō)明各功能模塊的實(shí)現(xiàn)過(guò)程,所用到的算法、技巧等(附上代碼)。
4)效果及存在問(wèn)題
說(shuō)明系統(tǒng)的運(yùn)行效果(附上界面圖形)、存在哪些不足以及預(yù)期的解決辦法。
5)心得 :談?wù)勗谡n程設(shè)計(jì)過(guò)程中的心得體會(huì)。4.指定時(shí)間必須在實(shí)驗(yàn)機(jī)房上機(jī)
5.最終成績(jī)包括平時(shí)成績(jī)(30%)和最終考核成績(jī)(70%)
6.實(shí)驗(yàn)設(shè)計(jì)內(nèi)容必須以老師指定的題目為準(zhǔn),老師指定的題目為最終檢查的依據(jù) 三.內(nèi)容:
1. 仿照windows記事本應(yīng)用程序,要求實(shí)現(xiàn)新建,打開(kāi),保存文件,對(duì)文本進(jìn)行字體顏色編輯,對(duì)文本實(shí)現(xiàn)查找,能夠復(fù)制粘貼功能。
2. 學(xué)生成績(jī)管理系統(tǒng)要求實(shí)現(xiàn)用戶登陸管理,瀏覽、添加、刪除和修改學(xué)生的成績(jī)信息,提供多種成績(jī)的查詢方式。1)登陸模塊
每個(gè)用戶只有三次登陸機(jī)會(huì),三次均未能輸入正確的用戶名和密碼,系統(tǒng)將強(qiáng)行推出。參考界面如下所示
2)主控模塊
進(jìn)入系統(tǒng)主界面后,自動(dòng)打開(kāi)學(xué)生成績(jī)數(shù)據(jù)庫(kù),“學(xué)號(hào)”,“姓名”,“班級(jí)”,“英語(yǔ)”,“VB”,“數(shù)據(jù)庫(kù)”6個(gè)字段分別綁定相應(yīng)文本框,“總分”和“平均分”的內(nèi)容根據(jù)“英
語(yǔ)”,“VB”,“數(shù)據(jù)庫(kù)”文本框內(nèi)容的改變而改變。
單擊“首記錄”,“尾記錄”,“上一條”,“下一條”按鈕可以瀏覽數(shù)據(jù)庫(kù),但不能修改記錄。通過(guò)選擇相關(guān)菜單命令可以執(zhí)行相應(yīng)的操作。其中執(zhí)行“輸入”和“修改”命令后,“首記錄”和“尾記錄”按鈕隱藏,“上一條”,“下一條”按鈕變?yōu)椤按_定”和“取消”按鈕,參考界面如下:
3)查詢模塊
可以通過(guò)選擇不同的菜單命令進(jìn)入查詢模塊后,根據(jù)用戶輸入不同的查詢條件在查詢窗體中顯示查詢菜單,參考圖如下所示:
根據(jù)不同的查詢所得查詢界面參考下圖:
3.彈球游戲要求理解游戲玩法,正確設(shè)計(jì)游戲規(guī)則,合理設(shè)計(jì)實(shí)現(xiàn)算法,參照演示程序?qū)崿F(xiàn)功能。
4.圖書(shū)館管理系統(tǒng)要求實(shí)現(xiàn)功能有:用戶登陸,圖書(shū)的借閱和歸回,圖書(shū)信息的添加,修改,查詢和刪除操作。
5.打字練習(xí)程序要求自行設(shè)計(jì)程序界面,能夠?qū)崿F(xiàn)打字測(cè)試和打字練習(xí)功能,對(duì)打字正確率和速度進(jìn)行測(cè)試,并給出測(cè)試結(jié)果。
6. 超市銷(xiāo)售管理系統(tǒng)要求實(shí)現(xiàn)登陸管理,超市銷(xiāo)售商品管理(銷(xiāo)售商品的添加、刪除和修改)查看超市的全部銷(xiāo)售記錄,可按銷(xiāo)售記錄號(hào)、銷(xiāo)售商品名稱查詢相關(guān)銷(xiāo)售記錄、銷(xiāo)售統(tǒng)計(jì)等功能。
7.小型測(cè)試系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)要求能夠隨機(jī)生成20道數(shù)學(xué)計(jì)算題(要求有加,減,乘,除運(yùn)算,規(guī)定操作數(shù)的個(gè)數(shù)),對(duì)用戶結(jié)果進(jìn)行判斷,并能最終計(jì)算總成績(jī),要求用戶在規(guī)定的時(shí)間內(nèi)做完試題,超時(shí)自動(dòng)終止并給出成績(jī)。
8.倉(cāng)庫(kù)管理系統(tǒng)要求實(shí)現(xiàn)注冊(cè)登陸功能,對(duì)倉(cāng)庫(kù)信息的添加、刪除和修改,入庫(kù)和出庫(kù)的登記和查詢操作等。
9.猜數(shù)字游戲要求:游戲開(kāi)始電腦隨機(jī)產(chǎn)生一個(gè)數(shù)字不重復(fù)的四位數(shù);將猜的數(shù)填在框內(nèi)按回車(chē)或者確定按鈕提交;電腦會(huì)將提交的數(shù)與它自動(dòng)產(chǎn)生的數(shù)進(jìn)行比較,結(jié)果顯示成“*A*B”。A代表位置正確數(shù)字也正確,B代表數(shù)字正確但位置不正確,比如:“2A2B”表示有2個(gè)數(shù)字的位置正確且數(shù)值也正確,除此以外,還猜對(duì)了2個(gè)數(shù)字,但位置不對(duì);共有10次機(jī)會(huì),在10次內(nèi),如果結(jié)果為“4A0B”,游戲成功。如果10次里都沒(méi)有猜對(duì)游戲失敗。
10.工資管理系統(tǒng):建立職工數(shù)據(jù)庫(kù)表,能夠存儲(chǔ)每個(gè)職工當(dāng)月的工資信息,包括:編號(hào)、部門(mén)、姓名、基本工資、崗位工資、職務(wù)補(bǔ)貼、獎(jiǎng)金、房租、水電費(fèi)、實(shí)發(fā)工資等數(shù)據(jù)。系統(tǒng)應(yīng)具有增加人員、刪除人員、查詢數(shù)據(jù)、修改數(shù)據(jù)、統(tǒng)計(jì)實(shí)發(fā)工資、報(bào)表輸出、退出系統(tǒng)等功能。
第三篇:VB 課程設(shè)計(jì)
學(xué)生成績(jī)管理系統(tǒng)一、功能描述
首先簡(jiǎn)單地闡述本人所要實(shí)現(xiàn)系統(tǒng)的目的,然后應(yīng)較詳細(xì)的敘述本系統(tǒng)所要實(shí)現(xiàn)的功能。
************ *******
二、概要設(shè)計(jì)
1、系統(tǒng)功能模塊框圖設(shè)計(jì)
根據(jù)功能描述,建立系統(tǒng)的體系結(jié)構(gòu),即將整個(gè)系統(tǒng)分解成若干子功能模塊,并用框圖表示各功能模塊之間的銜接關(guān)系,并簡(jiǎn)要說(shuō)明各模塊的功能。
程序流程框圖如圖所示:(僅供參考)
圖1 程序流程圖
2、數(shù)據(jù)庫(kù)設(shè)計(jì)
包括數(shù)據(jù)庫(kù)的組成說(shuō)明,數(shù)據(jù)庫(kù)中各表的結(jié)構(gòu)說(shuō)明(包括字段名、字段類(lèi)型等),可以包含圖片例如下表:
表1 學(xué)生信息表
三、詳細(xì)設(shè)計(jì)
詳細(xì)說(shuō)明主要窗體的實(shí)現(xiàn)過(guò)程,包括窗體的設(shè)計(jì)圖片及其上所包含的控件名和屬性設(shè)置;
詳細(xì)說(shuō)明主要操作的代碼實(shí)現(xiàn)過(guò)程,包括過(guò)程間的調(diào)用關(guān)系(注:在此給出不完全代碼)。如下所示:
1、賬號(hào)登錄
帳號(hào)登錄模塊中登錄與注冊(cè)兩按鈕,單擊注冊(cè)會(huì)進(jìn)入注冊(cè)模塊中,單擊登錄會(huì)進(jìn)入系統(tǒng)進(jìn)行下一步的操作,帳號(hào)文本框與數(shù)據(jù)庫(kù)相連接,當(dāng)在帳號(hào)文本框輸入帳號(hào)后點(diǎn)擊登錄按鈕后,會(huì)在數(shù)據(jù)庫(kù)中進(jìn)行查詢看數(shù)據(jù)庫(kù)中是否會(huì)有該帳號(hào),且該帳號(hào)的密碼是否與密碼框中輸入的相同,如果相同會(huì)進(jìn)入系統(tǒng),如果不存在該賬號(hào)或密碼與帳號(hào)不相匹配,則會(huì)提示“帳號(hào)或密碼錯(cuò)誤”,帳號(hào)文本框會(huì)得到焦點(diǎn),讓重新輸入。
(1)窗體截圖(如圖2)
圖2 注冊(cè)窗體
(2)功能實(shí)現(xiàn)
2、學(xué)生信息查詢窗體
圖3 查詢窗體
四、調(diào)試中存在的問(wèn)題及解決方法
包括調(diào)試過(guò)程中遇到的主要問(wèn)題及采取的解決方法。例如:
1、注冊(cè)賬號(hào)出現(xiàn)的錯(cuò)誤
數(shù)據(jù)庫(kù)中帳號(hào)被設(shè)為主鍵,當(dāng)注冊(cè)時(shí)的帳號(hào)與數(shù)局庫(kù)中的帳號(hào)有相同時(shí)就會(huì)出錯(cuò)。
2、解決方法:在寫(xiě)入數(shù)據(jù)庫(kù)前先進(jìn)行查詢數(shù)據(jù)庫(kù)
五、心得體會(huì)
本人在本次實(shí)習(xí)中取得的收獲、遇到的困難、如何面對(duì)和克服各種困難、本系統(tǒng)的不足之處,將要改進(jìn)的思想等。
六、參考文獻(xiàn)
[1] 羅朝盛.Visual Basic 6.0程序設(shè)計(jì)教程(第3版).人民郵電出版社,2009年2月
[2] [3]
七、附錄
包括全部源程序清單(程序中應(yīng)有足夠的注釋)。
第四篇:VB課程設(shè)計(jì)
課程設(shè)計(jì)
學(xué) 院 班 級(jí)
指導(dǎo)老師
姓 名 學(xué) 號(hào) 成 績(jī)
2013年 月 10
日
一.課程設(shè)計(jì)題目
學(xué)生管理系統(tǒng)
二.功能描述
按設(shè)定的用戶名密碼進(jìn)行登錄后,可按需求進(jìn)行對(duì)數(shù)據(jù)庫(kù)中已有的學(xué)生信息及成績(jī)進(jìn)行查詢,添加,刪除,修改等操作。
三.概要設(shè)計(jì)
登錄界面功能:讓用戶進(jìn)行登錄。主界面功能:讓用戶選擇進(jìn)行哪項(xiàng)操作。
查詢學(xué)生信息菜單功能:輸入學(xué)生學(xué)號(hào),對(duì)該學(xué)生的個(gè)人信息以
及成績(jī)進(jìn)行查詢,若直接點(diǎn)擊查詢按鈕,則顯示全部學(xué)生個(gè)人信息及成績(jī)。
編輯學(xué)生信息菜單功能:可對(duì)數(shù)據(jù)庫(kù)中已有的學(xué)生信息進(jìn)行查
詢,添加,刪除,修改等操作。
學(xué)生信息維護(hù)菜單功能:可對(duì)數(shù)據(jù)庫(kù)中已有的學(xué)生成績(jī)進(jìn)行查
詢,添加,刪除,修改等操作。
四.詳細(xì)設(shè)計(jì)
五.效果以及存在問(wèn)題
說(shuō)明系統(tǒng)的運(yùn)行效果(附上運(yùn)行界面圖片)、存在哪些不足以及預(yù)期的解決辦法。
登錄界面
登錄學(xué)生管理系統(tǒng)
按查詢條件查詢
打開(kāi)修改學(xué)生信息子窗口
學(xué)生成績(jī)維護(hù)子窗口
垂直窗口排列
關(guān)于窗口
不足:1.沒(méi)有實(shí)現(xiàn)用戶登錄界面中的注冊(cè)功能
2.沒(méi)有實(shí)現(xiàn)主界面中文件下的新建和保存功能。
六.心得體會(huì)
經(jīng)過(guò)幾天的苦戰(zhàn),終于把課程設(shè)計(jì)粗略的做完了。剛開(kāi)始做的時(shí)候,毫無(wú)頭緒,一片茫然。好在書(shū)本上有類(lèi)似的實(shí)驗(yàn),可以供參考。盡管如此,真正做起項(xiàng)目來(lái),還是有著這樣那樣的困難,有時(shí)一個(gè)空格少打都會(huì)出錯(cuò),導(dǎo)致我檢查了半天才發(fā)現(xiàn)問(wèn)題所在。由于VB語(yǔ)法還運(yùn)用不熟練,很多代碼都是模仿書(shū)本上的敲的,許多代碼往往能編譯通過(guò),但很多都會(huì)拋出各種異常,讓人頭疼。有時(shí)系統(tǒng)就給出個(gè)有個(gè)參數(shù)沒(méi)有被指定值,就可以讓人搞的焦頭爛額。因此,寫(xiě)程序真的也很需要強(qiáng)大的耐心,只要熬下去了,當(dāng)你做出程序時(shí),也會(huì)倍有成就感。目前,程序是基本寫(xiě)完了,平常學(xué)的理論都得到了運(yùn)用,感覺(jué)自己的能力也增強(qiáng)了。一句話,實(shí)踐才是硬道理。
七.附錄代碼
(附上各模塊代碼)
1.登錄界面
Public Class Form1
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)Handles Button1.Click
Static n As Integer
If txtName.Text = “abc” And txtPassWord.Text = “123” Then
Dim form2 As New Form2()
form2.Show()
Me.Close()
Else
n = n + 1
If n < 5 Then
MsgBox(“請(qǐng)輸入正確的用戶名和密碼!”, MsgBoxStyle.Critical)
Else
MsgBox(“請(qǐng)輸入正確的用戶名和密碼!”, MsgBoxStyle.Critical)
Button1.Enabled = False
End If
End If
End Sub
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)Handles Button2.Click
Me.Close()
End Sub
Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)Handles Button3.Click
Dim form3 As New Form3()
form3.Show()
Me.Close()
End Sub
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs)Handles MyBase.Load
End Sub End Class
2.查詢學(xué)生菜單代碼
Public Class Form6
Private Sub Form6_Load(ByVal sender As System.Object, ByVal e As System.EventArgs)Handles MyBase.Load
Dim objConn As New OleDb.OleDbConnection
Dim objDaXS_KC As New OleDb.OleDbDataAdapter
Dim objDaXS As New OleDb.OleDbDataAdapter
Dim objCommXS_KC As New OleDb.OleDbCommand
Dim objCommXS As New OleDb.OleDbCommand
Dim objDsXS_KC As New DataSet
Dim objDsXS As New DataSet
objConn.ConnectionString = “Provider = Microsoft.jet.OLEDB.4.0;data source = 'D:XSCJ.mdb'”
objCommXS.CommandText = “ Select * From XS ”
objCommXS_KC.CommandText = “ Select * From XS_KC ”
objCommXS_KC.Connection = objConn
objDaXS_KC.SelectCommand = objCommXS_KC
objCommXS.Connection = objConn
objDaXS.SelectCommand = objCommXS
objConn.Open()
objDaXS_KC.Fill(objDsXS_KC, “XS_KC”)
objDaXS.Fill(objDsXS, “XS”)
objConn.Close()
DataGridView1.DataSource = objDsXS_KC.Tables(“XS_KC”)
DataGridView2.DataSource = objDsXS.Tables(“XS”)
End Sub
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)Handles Button1.Click
Dim objConn As New OleDb.OleDbConnection
Dim objDaXS_KC As New OleDb.OleDbDataAdapter
Dim objDaXS As New OleDb.OleDbDataAdapter
Dim objCommXS_KC As New OleDb.OleDbCommand
Dim objCommXS As New OleDb.OleDbCommand
Dim objDsXS_KC As New DataSet
Dim objDsXS As New DataSet
Dim WhereStr As String
WhereStr = “"
If Trim(TxtXH.Text)<> ”“ Then
WhereStr = ” 學(xué)號(hào)like “ + Trim(TxtXH.Text)
End If
objConn.ConnectionString = ”P(pán)rovider = Microsoft.jet.OLEDB.4.0;data source = 'D:XSCJ.mdb'“
objCommXS.CommandText = ” Select * From XS “
objCommXS_KC.CommandText = ” Select * From XS_KC “
If WhereStr <> ”“ Then
objCommXS.CommandText = objCommXS.CommandText & ”where“ & WhereStr
objCommXS_KC.CommandText = objCommXS_KC.CommandText & ”where“ & WhereStr
End If
objCommXS_KC.Connection = objConn
objDaXS_KC.SelectCommand = objCommXS_KC
objCommXS.Connection = objConn
objDaXS.SelectCommand = objCommXS
objConn.Open()
objDaXS_KC.Fill(objDsXS_KC, ”XS_KC“)
objDaXS.Fill(objDsXS, ”XS“)
objConn.Close()
DataGridView1.DataSource = objDsXS_KC.Tables(”XS_KC“)
DataGridView2.DataSource = objDsXS.Tables(”XS“)
End Sub End Class
3編輯學(xué)生信息菜單
Public Class Form7
Dim objDs As New DataSet
Dim objxstable As DataTable
Dim objda As New OleDb.OleDbDataAdapter
Dim wherestr As String
Public Sub refreshdata()
objda.Update(objDs, ”XS“)
objxstable.Clear()
bindgridview(wherestr)
End Sub
Public Sub bindgridview(ByVal strXH As String)
Dim objConn As New OleDb.OleDbConnection
Dim objComm As New OleDb.OleDbCommand
WhereStr = ”“
If Trim(TxtXH.Text)<> ”“ Then
wherestr = ” 學(xué)號(hào)like“ + Trim(TxtXH.Text)
End If
objConn.ConnectionString = ”P(pán)rovider=Microsoft.Jet.OLEDB.4.0;Data Source='D:XSCJ.mdb'“
objComm.CommandText = ” Select * From XS “
If WhereStr <> ”“ Then
objComm.CommandText = objComm.CommandText & ”where“ & WhereStr
End If
'把objConn設(shè)置為objConn的數(shù)據(jù)連接
objComm.Connection = objConn
objda.SelectCommand = objComm
'創(chuàng)建INSERT Command
Dim InsCommand As New OleDb.OleDbCommand(”INSERT INTO XS(學(xué)號(hào),姓名,專業(yè)名,性別,出生日期,總學(xué)分,備注)VALUES(?,?,?,?,?,?,?)“, objConn)
InsCommand.Parameters.Add(”學(xué)號(hào)“, OleDb.OleDbType.VarChar, 6, ”學(xué)號(hào)“)
InsCommand.Parameters.Add(”姓名“, OleDb.OleDbType.VarChar, 8, ”姓名“)
InsCommand.Parameters.Add(”專業(yè)名“, OleDb.OleDbType.VarChar, 10, ”專業(yè)名“)
InsCommand.Parameters.Add(”性別“, OleDb.OleDbType.VarChar, 2, ”性別“)
InsCommand.Parameters.Add(”出生日期“, OleDb.OleDbType.Date, Nothing, ”出生日期“)
InsCommand.Parameters.Add(”總學(xué)分“, OleDb.OleDbType.Integer, Nothing, ”總學(xué)分“)
InsCommand.Parameters.Add(”備注“, OleDb.OleDbType.VarChar, Nothing, ”備注“)
objda.InsertCommand = InsCommand
'創(chuàng)建Delte Command
Dim delcommand As New OleDb.OleDbCommand(”DELETE * from XS where 學(xué)號(hào)=?“, objConn)
delcommand.Parameters.Add(”學(xué)號(hào)“, OleDb.OleDbType.Char, 6, ”學(xué)號(hào)“)
objda.DeleteCommand = delcommand
'創(chuàng)建Update Command
Dim updCommand As New OleDb.OleDbCommand(”UPDATE XS SET 學(xué)號(hào)=?,姓名=?,專業(yè)名=?,性別=?,出生日期=?,總學(xué)分=?,備注=? WHERE 學(xué)號(hào)=?“, objConn)
updCommand.Parameters.Add(”學(xué)號(hào)“, OleDb.OleDbType.VarChar, 6, ”學(xué)號(hào)“)
updCommand.Parameters.Add(”姓名“, OleDb.OleDbType.VarChar, 8, ”姓名“)
updCommand.Parameters.Add(”專業(yè)名“, OleDb.OleDbType.VarChar, 10, ”專業(yè)名“)
updCommand.Parameters.Add(”性別“, OleDb.OleDbType.VarChar, 2, ”性別“)
updCommand.Parameters.Add(”出生日期“, OleDb.OleDbType.Date, Nothing, ”出生日期“)
updCommand.Parameters.Add(”總學(xué)分“, OleDb.OleDbType.Integer, Nothing, ”總學(xué)分“)
updCommand.Parameters.Add(”備注“, OleDb.OleDbType.VarChar, Nothing, ”備注“)
updCommand.Parameters.Add(”學(xué)號(hào)“, OleDb.OleDbType.VarChar, 6, ”學(xué)號(hào)“)
objda.UpdateCommand = updCommand
objConn.Open()
'打開(kāi)數(shù)據(jù)庫(kù)連接
objda.Fill(objDs, ”XS“)'填充數(shù)據(jù)
objxstable = objDs.Tables(”XS“)
objConn.Close()
'關(guān)閉數(shù)據(jù)集
'把DataGrid1的DataSource屬性設(shè)置為剛剛?cè)〉降臄?shù)據(jù)表,這樣就可以顯示數(shù)據(jù)了
DataGridView1.DataSource = objDs.Tables(”XS“)
End Sub
Private Sub DataGridView1_CellContentClick(ByVal sender As System.Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs)Handles DataGridView1.CellContentClick
TxtStuXH.Text = DataGridView1.CurrentRow.Cells.Item(0).Value.ToString '顯示學(xué)號(hào)
TxtStuXM.Text = DataGridView1.CurrentRow.Cells.Item(1).Value.ToString '顯示姓名
TxtZY.Text = DataGridView1.CurrentRow.Cells.Item(2).Value.ToString '顯示專業(yè)
TxtXB.Text = DataGridView1.CurrentRow.Cells.Item(3).Value.ToString '顯示性別
TxtCSRQ.Text = DataGridView1.CurrentRow.Cells.Item(4).Value.ToString '顯示出生日期
TxtStuZXF.Text = DataGridView1.CurrentRow.Cells.Item(5).Value.ToString '顯示總學(xué)分
TxtBZ.Text = DataGridView1.CurrentRow.Cells.Item(6).Value.ToString '顯示備注
End Sub
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)Handles Button1.Click
Dim objConn As New OleDb.OleDbConnection
Dim objDaXS As New OleDb.OleDbDataAdapter
Dim objCommXS As New OleDb.OleDbCommand
Dim objDsXS As New DataSet
Dim WhereStr As String
WhereStr = ”“
If Trim(TxtXH.Text)<> ”“ Then
WhereStr = ” 學(xué)號(hào)like “ + Trim(TxtXH.Text)
End If
objConn.ConnectionString = ”P(pán)rovider = Microsoft.jet.OLEDB.4.0;data source = 'D:XSCJ.mdb'“
objCommXS.CommandText = ” Select * From XS “
If WhereStr <> ”“ Then
objCommXS.CommandText = objCommXS.CommandText & ”where“ & WhereStr
End If
objCommXS.Connection = objConn
objDaXS.SelectCommand = objCommXS
objConn.Open()
objDaXS.Fill(objDsXS, ”XS“)
objConn.Close()
DataGridView1.DataSource = objDsXS.Tables(”XS“)
End Sub
Private Sub Form7_Load(ByVal sender As System.Object, ByVal e As System.EventArgs)Handles MyBase.Load
wherestr = ”“
bindgridview(wherestr)
End Sub
Private Sub butAdd_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)Handles butAdd.Click
Dim response As MsgBoxResult
response = MsgBox(”確定要添加記錄嗎?“, vbOKCancel + vbQuestion, ”系統(tǒng)提示“)
If response = MsgBoxResult.Ok Then
Dim myRow As DataRow = objxstable.NewRow()
myRow(”學(xué)號(hào)“)= TxtStuXH.Text
myRow(”姓名“)= TxtStuXM.Text
myRow(”專業(yè)名“)= TxtZY.Text
myRow(”性別“)= TxtXB.Text
myRow(”出生日期“)= TxtCSRQ.Text
myRow(”總學(xué)分“)= TxtStuZXF.Text
myRow(”備注“)= TxtBZ.Text
objxstable.Rows.Add(myRow)
refreshdata()
End If
End Sub
Private Sub butEdit_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)Handles butEdit.Click
Dim response As MsgBoxResult
response = MsgBox(”確定要修改記錄嗎?“, vbOKCancel + vbQuestion, ”系統(tǒng)提示“)
If response = MsgBoxResult.Ok Then '用戶選擇“確定”
'修改學(xué)號(hào)
objxstable.Rows.Item(DataGridView1.CurrentRow.Index).Item(0)= TxtStuXH.Text
'修改姓名
objxstable.Rows.Item(DataGridView1.CurrentRow.Index).Item(1)= TxtStuXM.Text
'修改專業(yè)
objxstable.Rows.Item(DataGridView1.CurrentRow.Index).Item(2)= TxtZY.Text
'修改性別
objxstable.Rows.Item(DataGridView1.CurrentRow.Index).Item(3)= TxtXB.Text
'修改出生日期
objxstable.Rows.Item(DataGridView1.CurrentRow.Index).Item(4)= TxtCSRQ.Text
'修改總學(xué)分
objxstable.Rows.Item(DataGridView1.CurrentRow.Index).Item(5)= TxtStuZXF.Text
'修改備注
objxstable.Rows.Item(DataGridView1.CurrentRow.Index).Item(6)= TxtBZ.Text
refreshdata()'更新并刷新顯示
End If
End Sub
Private Sub butDelete_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)Handles butDelete.Click
Dim response As MsgBoxResult
response = MsgBox(”確定要?jiǎng)h除記錄嗎?“, vbOKCancel + vbQuestion, ”系統(tǒng)提示“)
If response = MsgBoxResult.Ok Then '用戶選擇“確定”
'除學(xué)生成績(jī)表當(dāng)前記錄
objxstable.Rows.Item(DataGridView1.CurrentRow.Index).Delete()
refreshdata()'更新并刷新顯示
End If
End Sub End Class
4.學(xué)生成績(jī)維護(hù)菜單
Public Class Form4
Dim objDs As New DataSet
Dim objXSTable As DataTable
Dim objDa As New OleDb.OleDbDataAdapter
Dim WhereStr As String
Public Sub refreshdata()
objDa.Update(objDs, ”XS_KC“)
objXSTable.Clear()
bindgridview(WhereStr)
End Sub
Public Sub bindgridview(ByVal strXH As String)
Dim objConn As New OleDb.OleDbConnection
Dim objComm As New OleDb.OleDbCommand
WhereStr = ”“
If Trim(TxtXH.Text)<> ”“ Then
WhereStr = ” 學(xué)號(hào)like“ + Trim(TxtXH.Text)
End If
objConn.ConnectionString = ”P(pán)rovider=Microsoft.Jet.OLEDB.4.0;Data Source='D:XSCJ.mdb'“
objComm.CommandText = ” Select * From XS_KC “
If WhereStr <> ”“ Then
objComm.CommandText = objComm.CommandText & ”where“ & WhereStr
End If
'把objConn設(shè)置為objConn的數(shù)據(jù)連接
objComm.Connection = objConn
objDa.SelectCommand = objComm
'創(chuàng)建INSERT Command
Dim InsCommand As New OleDb.OleDbCommand(”INSERT INTO XS_KC(學(xué)號(hào),課程號(hào),成績(jī),學(xué)分)VALUES(?,?,?,?)“, objConn)
InsCommand.Parameters.Add(”學(xué)號(hào)“, OleDb.OleDbType.VarChar, 6, ”學(xué)號(hào)“)
InsCommand.Parameters.Add(”課程號(hào)“, OleDb.OleDbType.VarChar, 4, ”課程號(hào)“)
InsCommand.Parameters.Add(”成績(jī)“, OleDb.OleDbType.Integer, Nothing, ”成績(jī)“)
InsCommand.Parameters.Add(”學(xué)分“, OleDb.OleDbType.Integer, Nothing, ”學(xué)分“)
objDa.InsertCommand = InsCommand
'創(chuàng)建Delte Command
Dim delcommand As New OleDb.OleDbCommand(”DELETE * from XS_KC where 序號(hào)=?“, objConn)
delcommand.Parameters.Add(”序號(hào)“, OleDb.OleDbType.Char, 6, ”序號(hào)“)
objDa.DeleteCommand = delcommand
'創(chuàng)建Update Command
Dim updCommand As New OleDb.OleDbCommand(”UPDATE XS_KC set 學(xué)號(hào)=?,課程號(hào)=?,成績(jī)=?,學(xué)分=? where 序號(hào)=?“, objConn)
updCommand.Parameters.Add(”學(xué)號(hào)“, OleDb.OleDbType.VarChar, 6, ”學(xué)號(hào)“)
updCommand.Parameters.Add(”課程號(hào)“, OleDb.OleDbType.VarChar, 4, ”課程號(hào)“)
updCommand.Parameters.Add(”成績(jī)“, OleDb.OleDbType.Integer, Nothing, ”成績(jī)“)
updCommand.Parameters.Add(”學(xué)分“, OleDb.OleDbType.Integer, Nothing, ”學(xué)分“)
updCommand.Parameters.Add(”序號(hào)“, OleDb.OleDbType.Integer, Nothing, ”序號(hào)“)
objDa.UpdateCommand = updCommand
objConn.Open()
'打開(kāi)數(shù)據(jù)庫(kù)連接
objDa.Fill(objDs, ”XS_KC“)'填充數(shù)據(jù)
objXSTable = objDs.Tables(”XS_KC“)
objConn.Close()
'關(guān)閉數(shù)據(jù)集
'把DataGrid1的DataSource屬性設(shè)置為剛剛?cè)〉降臄?shù)據(jù)表,這樣就可以顯示數(shù)據(jù)了
DataGridView1.DataSource = objDs.Tables(”XS_KC“)
End Sub
Private Sub DataGridView1_CellContentClick(ByVal sender As System.Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs)Handles DataGridView1.CellContentClick
txtStuXKID.Text = DataGridView1.CurrentRow.Cells.Item(0).Value.ToString '顯示ID
txtStuXH.Text = DataGridView1.CurrentRow.Cells.Item(1).Value.ToString '顯示學(xué)號(hào)
txtStuKCH.Text = DataGridView1.CurrentRow.Cells.Item(2).Value.ToString '顯示課程號(hào)
txtStuCJ.Text = DataGridView1.CurrentRow.Cells.Item(3).Value.ToString '顯示成績(jī)
txtStuXF.Text = DataGridView1.CurrentRow.Cells.Item(4).Value.ToString '顯示學(xué)分
End Sub
Private Sub btnDdd_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)Handles butAdd.Click
Dim response As MsgBoxResult
response = MsgBox(”確定要添加記錄嗎?“, vbOKCancel + vbQuestion, ”系統(tǒng)提示“)
If response = MsgBoxResult.Ok Then
Dim myRow As DataRow = objXSTable.NewRow()
myRow(”學(xué)號(hào)“)= txtStuXH.Text
myRow(”課程號(hào)“)= txtStuKCH.Text
myRow(”成績(jī)“)= txtStuCJ.Text
myRow(”學(xué)分“)= txtStuXF.Text
objXSTable.Rows.Add(myRow)
refreshdata()
End If
End Sub
Private Sub btnEdit_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)Handles butEdit.Click
Dim response As MsgBoxResult
response = MsgBox(”確定要修改記錄嗎?“, vbOKCancel + vbQuestion, ”系統(tǒng)提示“)
If response = MsgBoxResult.Ok Then '用戶選擇“確定”
'修改學(xué)號(hào)
objXSTable.Rows.Item(DataGridView1.CurrentRow.Index).Item(1)= txtStuXH.Text
'修改課程號(hào)
objXSTable.Rows.Item(DataGridView1.CurrentRow.Index).Item(2)= txtStuKCH.Text
' 修改成績(jī)
objXSTable.Rows.Item(DataGridView1.CurrentRow.Index).Item(3)= txtStuCJ.Text
'修改學(xué)分
objXSTable.Rows.Item(DataGridView1.CurrentRow.Index).Item(4)= txtStuXF.Text
refreshdata()'更新并刷新顯示
End If
End Sub
Private Sub btnDelete_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)Handles butDelete.Click
Dim response As MsgBoxResult
response = MsgBox(”確定要?jiǎng)h除記錄嗎?“, vbOKCancel + vbQuestion, ”系統(tǒng)提示“)
If response = MsgBoxResult.Ok Then '用戶選擇“確定”
'除學(xué)生成績(jī)表當(dāng)前記錄
objXSTable.Rows.Item(DataGridView1.CurrentRow.Index).Delete()
refreshdata()'更新并刷新顯示
End If
End Sub
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)Handles Button1.Click
Dim objConn As New OleDb.OleDbConnection
Dim objDaXS As New OleDb.OleDbDataAdapter
Dim objCommXS As New OleDb.OleDbCommand
Dim objDsXS As New DataSet
Dim WhereStr As String
WhereStr = ”“
If Trim(TxtXH.Text)<> ”“ Then
WhereStr = ” 學(xué)號(hào)like “ + Trim(TxtXH.Text)
End If
objConn.ConnectionString = ”P(pán)rovider = Microsoft.jet.OLEDB.4.0;data source = 'D:XSCJ.mdb'“
objCommXS.CommandText = ” Select * From XS_KC “
If WhereStr <> ”“ Then
objCommXS.CommandText = objCommXS.CommandText & ”where“ & WhereStr
End If
objCommXS.Connection = objConn
objDaXS.SelectCommand = objCommXS
objConn.Open()
objDaXS.Fill(objDsXS, ”XS_KC“)
objConn.Close()
DataGridView1.DataSource = objDsXS.Tables(”XS_KC“)
End Sub
Private Sub Form4_Load(ByVal sender As System.Object, ByVal e As System.EventArgs)Handles MyBase.Load
WhereStr = ”"
bindgridview(WhereStr)
End Sub End Class
5.主菜單界面代碼
Public Class Form2
Private Sub quitMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)Handles quitMenuItem.Click
Me.Close()
End Sub
Private Sub importscoreMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)Handles importscoreMenuItem.Click
Dim form4 As New Form4
form4.MdiParent = Me
form4.WindowState = FormWindowState.Normal
form4.Show()
End Sub
Private Sub updateinfoMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)Handles updateinfoMenuItem.Click
Dim form7 As New Form7
form7.MdiParent = Me
form7.WindowState = FormWindowState.Normal
form7.Show()
End Sub
Private Sub selectinfoMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)Handles selectinfoMenuItem.Click
Dim form6 As New Form6
Form6.MdiParent = Me
form6.WindowState = FormWindowState.Normal
form6.Show()
End Sub
Private Sub cascadeMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)Handles cascadeMenuItem.Click
Me.LayoutMdi(MdiLayout.Cascade)
End Sub
Private Sub horizonMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)Handles horizonMenuItem.Click
Me.LayoutMdi(MdiLayout.TileHorizontal)
End Sub
Private Sub verticalMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)Handles verticalMenuItem.Click
Me.LayoutMdi(MdiLayout.TileVertical)
End Sub
Private Sub aboutMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)Handles aboutMenuItem.Click
Dim form5 As New Form5
form5.MdiParent = Me
form5.WindowState = FormWindowState.Normal
form5.Show()
End Sub
Private Sub ToolStripButton1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)Handles ToolStripButton1.Click
selectinfoMenuItem.PerformClick()
End Sub
Private Sub ToolStripButton2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)Handles ToolStripButton2.Click
updateinfoMenuItem.PerformClick()
End Sub
Private Sub ToolStripButton3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)Handles ToolStripButton3.Click
importscoreMenuItem.PerformClick()
End Sub
Private Sub ToolStripButton4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)Handles ToolStripButton4.Click
cascadeMenuItem.PerformClick()
End Sub
Private Sub ToolStripButton5_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)Handles ToolStripButton5.Click
aboutMenuItem.PerformClick()
End Sub
Private Sub ToolStripButton6_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)Handles ToolStripButton6.Click
quitMenuItem.PerformClick()
End Sub
Private Sub ToolStripStatusLabel1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)Handles ToolStripStatusLabel1.Click
aboutMenuItem.PerformClick()
End Sub End Class
八.參考文庫(kù)
百度文庫(kù),百度知道
第五篇:vb課程設(shè)計(jì)
Visual Basic課程設(shè)計(jì)報(bào)告
題目1: 貪吃蛇 難度:**** 題目2: 難度: 指導(dǎo)教師:
姓 名: 學(xué) 號(hào): 專 業(yè): 班 級(jí): 學(xué) 院:
日 期:
目錄
1、題目簡(jiǎn)介...................................................................................................錯(cuò)誤!未定義書(shū)簽。
2、設(shè)計(jì)思路與總體方案.................................................................................................................3
2.1 窗體Form1.vb【設(shè)計(jì)】...................................................................................................3 2.2窗體Form2.vb【設(shè)計(jì)】..................................................................................................11 2.3窗體Form3.vb【設(shè)計(jì)】..................................................................................................14 2.4 窗體Form4.vb【設(shè)計(jì)】.................................................................................................14 2.5窗體Form5.vb【設(shè)計(jì)】....................................................................................................2.6窗體Form6.vb【設(shè)計(jì)】..................................................................錯(cuò)誤!未定義書(shū)簽。2.6 標(biāo)準(zhǔn)模塊..........................................................................................................................14
3、設(shè)計(jì)過(guò)程遇到的主要問(wèn)題及解決方法...................................................................................16
4、設(shè)計(jì)中尚存的不足分析...........................................................................................................16
5、心得體會(huì)...................................................................................................................................17
6、參考文獻(xiàn)...................................................................................................................................17
1.題目簡(jiǎn)介
貪吃蛇是一種很流行的電子游戲。如圖1所示,一條蛇在棋盤(pán)狀的格子平面上爬行,由鍵盤(pán)控制其轉(zhuǎn)彎;格子上隨機(jī)出現(xiàn)五個(gè)數(shù)字(1~5),當(dāng)蛇的頭部碰到數(shù)字時(shí)會(huì)將數(shù)字“吃掉”,蛇的身體會(huì)變長(zhǎng)。當(dāng)蛇的頭撞到障礙物時(shí)或碰到自己身體時(shí),游戲結(jié)束。游戲結(jié)束時(shí),蛇身體越長(zhǎng)的分越高。
圖1 程序啟動(dòng)時(shí)界面如圖1所示,游戲平面有20*20個(gè)方格構(gòu)成。使用回車(chē)鍵可以暫
停(如圖2所示),蛇爬到邊界時(shí),如果未遇到障礙物,會(huì)從一側(cè)爬出再?gòu)牧硪粋?cè)爬入。如果運(yùn)動(dòng)過(guò)程中,其頭部碰到障礙物或自己,則被撞死,游戲結(jié)束。
圖2 如果該用戶的成績(jī)超過(guò)記錄成績(jī),則會(huì)顯示圖3所示的對(duì)話框提示輸入用戶名,以供記錄成績(jī),排行榜界面如圖4所示。
圖3
圖4
選擇“設(shè)置”菜單命令,打開(kāi)圖5所示的“設(shè)置”對(duì)話框。在該對(duì)話框中可以選
擇不同的障礙物形狀,也可指定背景和障礙物顏色。
圖5 為了使效果更好,我加了背景音樂(lè)和速度控制。
2、設(shè)計(jì)思路與總體方案
(說(shuō)明用到哪些控件并進(jìn)行難點(diǎn)分析,說(shuō)明所使用到的模塊、過(guò)程、變量、數(shù)組、自定義數(shù)據(jù)類(lèi)型及其相互關(guān)系,必要時(shí)給出系統(tǒng)結(jié)構(gòu)圖等圖表。
對(duì)如下事項(xiàng)逐步進(jìn)行必要的分析、說(shuō)明:
? 程序設(shè)計(jì)的主要思想,程序功能是如何實(shí)現(xiàn)的?
? 設(shè)計(jì)了幾個(gè)程序模塊(有幾個(gè)窗體模塊、幾個(gè)標(biāo)準(zhǔn)模塊),各個(gè)功能模塊的作者及想到之間的關(guān)系(模塊間是如何傳遞信息和數(shù)據(jù)的,采用什么方式,為什么?)?
? 程序中定義了哪些主要的變量(分別定義了哪些過(guò)程級(jí)變量?模塊級(jí)變量和全局變量),這些變量起什么作用?是否全局變量? 這里不需要給出大段的源程序,只需要給出關(guān)鍵的實(shí)現(xiàn)代碼即可。)2.1 窗體Form1.vb【設(shè)計(jì)】
這是主界面,但也是最難的環(huán)節(jié),之后要用到的控件與顯示都要在其基礎(chǔ)上發(fā)展。首先我們要將背景網(wǎng)格和蛇身畫(huà)出來(lái),由于受到了動(dòng)態(tài)添加控件的啟發(fā),我用了powerpacks中的ovalshape來(lái)構(gòu)造蛇身,lineshape來(lái)構(gòu)造線,為了滿足蛇的身體長(zhǎng)長(zhǎng),用到了數(shù)組。由于代碼之間有許多調(diào)配,在此我所舉的代碼皆主要起說(shuō)明作用,實(shí)際情況可看源代碼。代碼如下:
Public num As Integer = 4 ‘記錄蛇的長(zhǎng)度,即ovalshape的個(gè)數(shù)
Public j As String‘記錄Inputstring的字符串
Public p As Integer = 1‘記錄MsgBox所產(chǎn)生的值
Dim w As Integer
Dim d As Integer ‘為鍵盤(pán)方向確定一固定值
Dim recordname As String‘記錄玩家名字
Dim bnum As Integer = 1‘記錄障礙物的個(gè)數(shù)
Public recordlist(7)As String ‘記錄成績(jī)
Public recordscore(7)As Integer
Public gametime As Integer ‘記錄游戲進(jìn)行所用時(shí)間
Public gameinterval As Integer = 200 ‘記錄游戲Timer控件interval值
Public score As Integer ‘記錄得分
Public direction As Integer
Public line(41)As LineShape
Public food(4)As RectangleShape
Public eye(2)As OvalShape '蛇的眼睛
Public a(num)As OvalShape '蛇的身體
Public word(4)As Label
Imports Microsoft.VisualBasic.PowerPacks Public a(num)As OvalShape ‘a(chǎn)()為定義蛇身的數(shù)組,變量num用來(lái)記錄蛇身個(gè)數(shù)
Public line(41)As LineShape Dim canvas = New Microsoft.VisualBasic.PowerPacks.ShapeContainer
For i = 4 To 0 Step-1 a(i)= New OvalShape
a(i).Size = New Size(20, 20)a(i).Top = 360 a(i).Left = 120 + 20 * i a(i).FillStyle = FillStyle.Solid a(i).FillColor = Color.Yellow a(i).Parent = canvas Next
a(0).FillColor = Color.Red ‘給蛇上色 a(0).BackColor = Color.Red Dim i As Integer
canvas.parent = Me.Panel1 For i = 0 To 20 '形成網(wǎng)格,以兩點(diǎn)坐標(biāo)來(lái)確定線的位置
line(i)= New LineShape line(i).X1 = 0 line(i).X2 = 400 line(i).Y1 = 20 * i
line(i).Y2 = 20 * i line(i).Parent = canvas Next
For i = 21 To 41 line(i)= New LineShape line(i).X1 = 20 *(i21)line(i).Y1 = 0 line(i).Y2 = 400 line(i).Parent = canvas 蛇已經(jīng)做好,那么我們可以進(jìn)行下一步:讓蛇隨鍵盤(pán)的上下左右運(yùn)動(dòng)起來(lái)。這一步曾經(jīng)困擾我很久,但通過(guò)上網(wǎng)我發(fā)現(xiàn)每一個(gè)鍵盤(pán)都對(duì)應(yīng)著一個(gè)代碼,如:左37,上38,右39,下40。首先得讓控件響應(yīng)鍵盤(pán)事件,其次讓蛇動(dòng),而蛇的運(yùn)動(dòng)可看作蛇頭移動(dòng),蛇身跟隨前一個(gè)身體。由此可以用以下代碼解決:
Private Sub form_keydown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs)Handles Me.KeyDown Select Case e.KeyCode Case 37 If d <> 2 Then d = 0 ‘這樣能讓蛇不往回走
Case 38 If d <> 1 Then d = 3 Case 39 If d <> 0 Then d = 2 Case 40 If d <> 3 Then d = 1 End Select
End Sub Select Case d Case 2 For i = num To 1 Step-1 a(i).Left = a(i1).Top Next
a(0).Left += 20 Case 1 For i = num To 1 Step-1 a(i).Left = a(i1).Top Next
a(0).Top += 20 Case 0 For i = num To 1 Step-1
a(i).Left = a(i1).Top Next
a(0).Left-= 20 Case 3 For i = num To 1 Step-1 a(i).Left = a(i1).Top Next
a(0).Top-= 20 End Select 然后我們可以來(lái)設(shè)置食物來(lái)讓蛇吃,我用rectangleshape控件來(lái)制造食物,就像和畫(huà)出蛇身一樣寫(xiě),但是每當(dāng)被吃后它有出現(xiàn),而且不能出現(xiàn)在蛇身上。首先,它是隨機(jī)出現(xiàn)的,我們可用隨機(jī)函數(shù),然后可通過(guò)判斷讓它不出現(xiàn)在蛇身上。對(duì)于數(shù)字1,2,3,4,5;我用lebal控件,然后讓其和食物坐標(biāo)同步,這樣看起來(lái)就像數(shù)字在食物上一樣。代碼如下:
For i = 0 To 4 If a(0).Top = food(i).Top And a(0).Left = food(i).Left Then ‘判斷是否吃到
score += i + 1 ‘分?jǐn)?shù)增加 num += i + 1 ‘蛇身的個(gè)數(shù)增加 food(i).Visible = False word(i).Visible = False
ReDim Preserve food(4)ReDim Preserve word(4)food(i)= New RectangleShape food(i).Size = New Size(20, 20)Randomize()food(i).Left = Int(Rnd()* 20)* 20 ‘隨機(jī)確定新坐標(biāo)
food(i).Top = Int(Rnd()* 20)* 20 L2: For g = 0 To num1 If food(i).Left = a(g).Left And food(i).Top = a(g).Top Then
Call setloction(i)GoTo L2 End If
Next
food(i).FillStyle = FillStyle.Solid food(i).Parent = canvas word(i)= New Label word(i).Text = i + 1 word(i).Size = New Size(10, 10)
word(i).Top = food(i).Top + 5 word(i).Left = food(i).Left + 5 word(i).Parent = canvas ReDim Preserve a(num)‘蛇長(zhǎng)長(zhǎng),重新定義動(dòng)態(tài)數(shù)組
For k = numii1 If a(0).Top = barrier(k).Top And a(0).Left = barrier(k).Left Then
Timer1.Enabled = False a(0).FillColor = Color.Red lifetime-= 1 If score < 3 Then
If lifetime < 1 Then
MsgBox(“GAME OVER!”, 64, “貪吃蛇”)recordname = InputBox(“GAME OVER!” & Chr(13)& “你的成績(jī)?yōu)椤?& Int(score)& “分用時(shí)” & _ Int(gameinterval * gametime / 1000)& ”秒。“ & Chr(13)& ”請(qǐng)留下大名“, ”貪吃蛇“, ”無(wú)名氏“)Else
p = MsgBox(”Do you want to continue?“, vbYesNo, ”生命值“ & lifetime)If p = 6 Then
Exit For
End If
End If
Else
If lifetime < 1 Then
recordname = InputBox(”GAME OVER!“ & Chr(13)& ”你的成績(jī)?yōu)椤?& Int(score)& ”分用時(shí)” & _ Int(gameinterval * gametime / 1000)& “秒。” & Chr(13)& “請(qǐng)留下大名?”, “貪吃蛇”, “無(wú)名氏”)Else
p = MsgBox(“Do you want to continue?”, vbYesNo, “生命值” & lifetime)If p = 6 Then
Exit For
End If
End If
End If
Call record()Call initialize()Exit For
End If
Next 想要形成障礙物,在此我們需要用到文件的讀操作。主要代碼如下:
FileOpen(1, filelacation, OpenMode.Input)' 讀取墻壁,形成迷宮 bnum = 1 Dim L As Integer
Dim T As Integer
For i = 1 To 419 j = InputString(1, 2)If Val(j)= 1 Then
barrier(bnum)= New RectangleShape barrier(bnum).Left = 20 * L barrier(bnum).Top = 20 * T barrier(bnum).Size = New Size(20, 20)barrier(bnum).FillColor = barriercolor barrier(bnum).FillStyle = FillStyle.Solid barrier(bnum).Parent = canvas bnum += 1 End If
If Val(j)= 0 Then ‘用此方法使讀出的內(nèi)容與坐標(biāo)對(duì)應(yīng)
End If
If j = vbCrLf Then L-= 1 End If L += 1
If L = 20 Then L = 0 : T += 1 End If
Next
FileClose(1)在此基礎(chǔ)上便可調(diào)用其它的過(guò)程,比較簡(jiǎn)單。代碼如下:
Private Sub 開(kāi)始ToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)Handles 開(kāi)始ToolStripMenuItem.Click If Timer1.Enabled = False Then Timer1.Enabled = True
Exit Sub
End If
If Timer1.Enabled = True Then Timer1.Enabled = False
End If
End Sub
Private Sub 新開(kāi)局ToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)Handles 新開(kāi)局ToolStripMenuItem.Click Call initialize()End Sub
Private Sub 關(guān)于ToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)Handles 關(guān)于ToolStripMenuItem.Click MsgBox(“貪吃蛇vb2010.2016.3.20”, 64, “版本說(shuō)明”)End Sub
Private Sub 幫助ToolStripMenuItem1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)Handles 幫助ToolStripMenuItem1.Click Form3.Show()End Sub
Private Sub 設(shè)置ToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)Handles 設(shè)置ToolStripMenuItem.Click Form2.Show()End Sub
Private Sub 退出ToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)Handles 退出ToolStripMenuItem.Click
End
End Sub
Private Sub 排行榜ToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)Handles 排行榜ToolStripMenuItem.Click Form6.Show()End Sub
2.2窗體Form2.vb【設(shè)計(jì)】
這個(gè)界面是第二重要的,當(dāng)然它的設(shè)計(jì)也較麻煩。設(shè)計(jì)的障礙物的類(lèi)型用到了listbox控件,也用到了菜單欄與pictureBox控件。而調(diào)用的過(guò)程shapeview所用到的內(nèi)容與Form1.vb中的類(lèi)似,因此方便好多。
Private Sub Form2_Load(ByVal sender As System.Object, ByVal e As System.EventArgs)Handles MyBase.Load ListBox1.Items.Add(“方盒形”)ListBox1.Items.Add(“隧道形”)ListBox1.Items.Add(“螺旋形”)ListBox1.Items.Add(“路障形”)ListBox1.Items.Add(“彎曲形”)ListBox1.Items.Add(“怪異形”)ListBox1.Items.Add(“無(wú)障礙形”)PictureBox2.BackColor = Color.DarkGray PictureBox1.BackColor = Color.Aqua TextBox1.Text = lifetime Call shapeview()End Sub Private Sub ListBox1_SelectedIndexChanged(ByVal sender As Object, ByVal e As System.EventArgs)Handles ListBox1.SelectedIndexChanged
If ListBox1.SelectedIndex = 0 Then filelacation = “maze1方盒形.txt” filename = “方盒形” mazenum = 1 End If
If ListBox1.SelectedIndex = 1 Then filelacation = “maze1隧道形.txt” filename = “隧道形” mazenum = 2 End If
If ListBox1.SelectedIndex = 2 Then filelacation = “maze1螺旋形.txt” filename = “螺旋形”
mazenum = 3 End If
If ListBox1.SelectedIndex = 3 Then filelacation = “maze1路障形.txt” filename = “路障形” mazenum = 4 End If
If ListBox1.SelectedIndex = 4 Then filelacation = “maze1彎曲形.txt” filename = “彎曲形” mazenum = 5 End If
If ListBox1.SelectedIndex = 5 Then filelacation = “maze1怪異形.txt” filename = “怪異形” mazenum = 6 End If
If ListBox1.SelectedIndex = 6 Then
filelacation = “maze1無(wú)障礙形.txt” filename = “無(wú)障礙形” mazenum = 7 End If
For k = 1 To oldnum121)line1(i).X2 = 10 *(i單車(chē).wav“
'musicname = ”MUSIC陳奕迅-單車(chē).wav“
My.Computer.Audio.Play(My.Application.Info.DirectoryPath & ”MUSIC陳奕迅-單車(chē).wav“)End If
End Sub
Private Sub RadioButton6_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs)Handles RadioButton6.CheckedChanged If RadioButton6.Checked = True Then
'Form1.AxWindowsMediaPlayer1.Ctlcontrols.stop()
My.Computer.Audio.Stop()End If
End Sub End Class
2.6窗體Form5.vb[設(shè)計(jì)】
此窗體用來(lái)調(diào)節(jié)蛇運(yùn)動(dòng)的快慢程度。
Private Sub TrackBar1_Scroll(ByVal sender As System.Object, ByVal e As System.EventArgs)Handles TrackBar1.Scroll
Dim v As Integer v = TrackBar1.Value timeinterval = 500 /(2 ^ v)Label3.Text = TrackBar1.Value End Sub
2.7窗體Form6.vb[設(shè)計(jì)】
此窗體用來(lái)顯示玩家的成績(jī),用到了listBox控件來(lái)顯示成績(jī),點(diǎn)擊清除所有記錄可還原,recordlist()用來(lái)記錄文件中的每一行。Public Class Form6
Public Sub Form6_Load(ByVal sender As System.Object, ByVal e As System.EventArgs)Handles MyBase.Load For i = 1 To 7 ListBox1.Items.Add(Form1.recordlist(i))Next
End Sub
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)Handles Button1.Click ListBox1.Items.Clear()FileOpen(1, My.Application.Info.DirectoryPath & ”clear.txt“, OpenMode.Input)For i = 1 To 7 Form1.recordlist(i)= LineInput(1)ListBox1.Items.Add(Form1.recordlist(i))Next
FileClose(1)End Sub
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)Handles Button2.Click Me.Close()End Sub End Class
2.8標(biāo)準(zhǔn)模塊
定義各種變量
Imports Microsoft.VisualBasic.PowerPacks Module Module1
Public barriercolor As System.Drawing.Color = Color.DarkGray
‘記錄障礙物的顏色
Public panalcolor As System.Drawing.Color = Color.Aqua ‘記錄面板的顏色
Public oldnum As Integer
Public oldnum1 As Integer
Public bnum1 As Integer
Public filelacation As String = ”maze1螺旋形.txt“
Public filename As String = ”螺旋形"
Public timeinterval As Integer = 1000 Public mazenum As Integer = 2 ‘為每一個(gè)障礙物類(lèi)型做標(biāo)記
Public lifetime As Integer = 1 ‘生命次數(shù)
Public barrier(400)As RectangleShape End Module
3、設(shè)計(jì)過(guò)程遇到的主要問(wèn)題及解決方法
3.1剛開(kāi)始時(shí)對(duì)于畫(huà)出后面的線條時(shí)我是添加了41個(gè)Lineshape控件,一個(gè)個(gè)確定等距的坐標(biāo)將其畫(huà)下,廢了我好大的氣力,但后來(lái)受到了動(dòng)態(tài)添加控件的觸動(dòng)用數(shù)組將其解決。
3.2如何引發(fā)鍵盤(pán)事件曾一度困擾我,了解了鍵盤(pán)下所代表的代碼意義,之前一直使用的是select case keycode代碼,怎么也無(wú)法使其響應(yīng)。后來(lái)看看課本上關(guān)于鍵盤(pán)的代碼,隨便使用了select case e.keycode代碼,令我欣慰的是竟然成功了。
3.3下一個(gè)是如何在界面上顯示出障礙物。根據(jù)所提供的文件夾,了解起大概用法,為了讓我編程更容易,我對(duì)其文件做了一定的修改。
3.4最難的是過(guò)程之間的調(diào)用與聯(lián)系,解決的辦法就是不斷的進(jìn)行調(diào)試,修改。比如在我編寫(xiě)重新開(kāi)局的菜單代碼時(shí)總是會(huì)出現(xiàn)兩只蛇;又如在編寫(xiě)排行榜時(shí)便不是很方便的能使用listbox.Items.remove這行代碼,因此我得另辟蹊徑。
4、設(shè)計(jì)中尚存的不足分析
4.1由于我采用的編寫(xiě)方法是將完成這個(gè)貪吃蛇游戲所需滿足的要求分開(kāi),一個(gè)一個(gè)的進(jìn)行攻破,我會(huì)發(fā)現(xiàn)越往后編寫(xiě)越要考慮到之前的內(nèi)容,在解決程序之間的關(guān)系會(huì)越麻煩,調(diào)試的次數(shù)更多。而且編完后縱觀全局會(huì)發(fā)現(xiàn)代碼的結(jié)構(gòu)較混亂,重復(fù)性高,他人難以看的明白。
4.2 在定義變量時(shí)我盡量定義其為全局變量和模塊級(jí)變量。部分變量為了簡(jiǎn)單或難以翻譯為英文的僅僅使用了字母代替,對(duì)讀代碼有一定困難。
4.3 我所犯下的最大錯(cuò)誤就是使用控件來(lái)顯示蛇,因?yàn)樵谶\(yùn)行程序時(shí)蛇身會(huì)隨著長(zhǎng)度的增加閃爍的愈發(fā)厲害。可能是控件太多,程序運(yùn)行不流暢,效率不高。
4.4 我想在游戲中添加一些音樂(lè),并且用到了循環(huán)播放的代碼,但是至今我還是沒(méi)有想到如何能將播放中的音樂(lè)暫停。還有的就是怎樣才能同時(shí)播放兩種聲音。
4.5 對(duì)于排行榜的編寫(xiě)存在一些問(wèn)題,比如:怎樣才能使顯示的行間距更開(kāi);如何才能使所顯示的各項(xiàng)指標(biāo)在其對(duì)應(yīng)的列下,在這一點(diǎn)上有很大的缺陷。可能程序要用到dictionary方法。
4.6 當(dāng)我運(yùn)行程序時(shí),如果我點(diǎn)了界面上的某條線的話,蛇就不再響應(yīng)鍵盤(pán)事件了,必須使用ctrl+方向鍵才能使其響應(yīng)鍵盤(pán)事件。應(yīng)該是我點(diǎn)擊時(shí)失去了焦點(diǎn)導(dǎo)致無(wú)法正常運(yùn)行。
5、心得體會(huì)
這個(gè)程序從難度上講足足有四顆星,因此我想說(shuō)我確實(shí)摸索了很久,從界面的制作排版到代碼的編寫(xiě)。由于計(jì)算機(jī)編程知識(shí)當(dāng)初只學(xué)了些皮毛,很多次我在編程時(shí)不斷調(diào)試卻依然出現(xiàn)這樣那樣的毛病,可能是無(wú)意中拼寫(xiě)錯(cuò)誤,但有些確實(shí)是因?yàn)椴涣私鈜b的某些較為冷僻的用法所致。這段時(shí)間,常會(huì)向同學(xué)請(qǐng)教,也自覺(jué)地去借了些書(shū)看看,基本上完成了要求,但是功能、界面都還不是很完善,我會(huì)借助以后的時(shí)間繼續(xù)去加工的,我需要的是學(xué)以致用。
我體會(huì)到了編寫(xiě)程序是個(gè)有條理的邏輯過(guò)程,首先必須有個(gè)大致的思路,整體的規(guī)劃出來(lái)。然后再是分步地去具體完成,尤為重要的是需要投入相當(dāng)一部分精力去精益求精,這樣你的成果才不會(huì)是毛糙的。思維調(diào)動(dòng)是件另人愉快的事情,而我們應(yīng)該去學(xué)會(huì)享受腦力勞動(dòng)的過(guò)程,哪怕是一次次地失利。這就是2個(gè)月的課程設(shè)計(jì)所教會(huì)我的。
6、參考文獻(xiàn)
[2].王棟,visual basic程序設(shè)計(jì)實(shí)用教程,北京,清華大學(xué)出版社