版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第6章系教學(xué)管理系統(tǒng)之教務(wù)管理子系統(tǒng)
—基本的數(shù)據(jù)庫應(yīng)用
6.1教學(xué)管理系統(tǒng)案例分析
6.2相關(guān)知識(shí)點(diǎn)
6.3實(shí)現(xiàn)方法
6.4案例總結(jié)
6.1教學(xué)管理系統(tǒng)案例分析
6.1.1任務(wù)的提出
自動(dòng)化與信息工程系的教務(wù)干事日常工作繁忙,如果教學(xué)管理仍然采用手工管理方式,其工作效率低?,F(xiàn)希望有一個(gè)應(yīng)用程序,能夠?qū)ψ詣?dòng)化與信息工程系的學(xué)生所學(xué)習(xí)的課程進(jìn)行管理、記錄該系學(xué)生選修課程的信息、對(duì)開設(shè)課程的成績進(jìn)行數(shù)據(jù)維護(hù)并能夠提供給學(xué)生進(jìn)行成績查詢。這些日常教學(xué)工作如果能夠使用計(jì)算機(jī)進(jìn)行管理,將提高工作效率。自動(dòng)化與信息工程系的教學(xué)管理系統(tǒng)主要由兩個(gè)子系統(tǒng)組成:教務(wù)管理子系統(tǒng)和學(xué)生教務(wù)子系統(tǒng)。本章講解教務(wù)管理子系統(tǒng)的實(shí)現(xiàn),學(xué)生教務(wù)子系統(tǒng)的實(shí)現(xiàn)將在第7章講述。
教務(wù)管理子系統(tǒng)的實(shí)現(xiàn)主要是使用數(shù)據(jù)集組件TTable。通過本章子系統(tǒng)的實(shí)現(xiàn),我們將學(xué)習(xí)對(duì)數(shù)據(jù)庫中的數(shù)據(jù)進(jìn)行維護(hù)的方式之一,即使用數(shù)據(jù)集組件所提供的諸多方法來操作數(shù)據(jù)集中的數(shù)據(jù)。
6.1.2系統(tǒng)設(shè)計(jì)
1.自動(dòng)化與信息工程系教學(xué)管理系統(tǒng)之系統(tǒng)功能分析
本系統(tǒng)主要有以下功能要求:
●所開設(shè)課程的信息維護(hù),包括增加、刪除和修改課程信息。
●學(xué)生選課信息維護(hù),包括添加、刪除選課信息。
●課程成績維護(hù),包括輸入、修改課程成績。
●
學(xué)生成績查詢,包括學(xué)生所學(xué)課程成績和該課程的基本統(tǒng)計(jì)信息。
2.系統(tǒng)功能模塊設(shè)計(jì)
自動(dòng)化與信息工程系教學(xué)管理系統(tǒng)由教務(wù)管理子系統(tǒng)和學(xué)生教務(wù)子系統(tǒng)組成。此處給出本章的教務(wù)管理子系統(tǒng)的功能模塊圖,如圖6.1所示。
圖6.1教務(wù)管理子系統(tǒng)功能模塊圖
6.1.3數(shù)據(jù)庫設(shè)計(jì)及實(shí)現(xiàn)
1.?dāng)?shù)據(jù)庫需求分析
教學(xué)管理系統(tǒng)需要以下數(shù)據(jù)項(xiàng):
●課程:課程編號(hào)、課程名稱、講課教師、學(xué)分、學(xué)時(shí)、課程簡(jiǎn)介;
●學(xué)生:學(xué)號(hào)、姓名、性別、班級(jí);
●成績:學(xué)生、課程、成績;
●班級(jí):班級(jí)編號(hào)、班級(jí)名稱、所屬院系;
●
教師:教師編號(hào)、姓名、性別、所屬研究室。
2.數(shù)據(jù)庫概念結(jié)構(gòu)設(shè)計(jì)
圖6.2是本系統(tǒng)的E-R模型圖,圖中省略了各實(shí)體的屬性。
圖6.2教學(xué)管理系統(tǒng)E-R圖
3.數(shù)據(jù)庫邏輯結(jié)構(gòu)設(shè)計(jì)
根據(jù)圖6.2所示的E-R圖,需要5個(gè)基本信息表:教師信息、課程信息、班級(jí)信息、學(xué)生信息和成績信息。由于使用本系統(tǒng)的不僅僅是自動(dòng)化與信息工程系的教務(wù)干事,每個(gè)學(xué)生都可以登錄到學(xué)生教務(wù)子系統(tǒng)進(jìn)行課程選擇或成績查詢,因此需要對(duì)不同的登錄人員進(jìn)行用戶名和密碼認(rèn)證并進(jìn)行權(quán)限檢查以防止出現(xiàn)越權(quán)行為。用戶名、密碼和權(quán)限數(shù)據(jù)保存在1個(gè)數(shù)據(jù)表——用戶信息表中。這6個(gè)數(shù)據(jù)表的結(jié)構(gòu)見表6-1~表6-6。
表6-1USER_INFO(用戶)信息表
表6-3STUDENT(學(xué)生)基本信息表
表6-5COURSE(課程)基本信息表
表6-6SCORE(成績)信息表
4.?dāng)?shù)據(jù)庫結(jié)構(gòu)的實(shí)現(xiàn)
在SQLServer2000的企業(yè)管理器中創(chuàng)建數(shù)據(jù)庫TEACH,在查詢分析器中用CREATETABLE語句創(chuàng)建各數(shù)據(jù)表。
1)創(chuàng)建用戶信息表
CREATETABLEUSER_INFO(
IDCHAR(8)NOTNULLCONSTRAINTUSER_PKPRIMARYKEY,
PASSWDCHAR(10)NOTNULL,
AUTHORITYCHAR(1)NOTNULL
)
2)創(chuàng)建班級(jí)基本信息表
CREATETABLECLASS(
IDCHAR(6)NOTNULLCONSTRAINTCLASS_PKPRIMARYKEY,
NAMEVARCHAR(20)NOTNULL,
DEPARTMENTVARCHAR(20),
)
3)創(chuàng)建學(xué)生基本信息表
CREATETABLESTUDENT(
IDCHAR(8)NOTNULLCONSTRAINTSTU_PKPRIMARYKEY,
NAMEVARCHAR(20)NOTNULL,
SEXCHAR(1),
CLASSCHAR(6)CONSTRAINTCLASS_FKFOREIGNKEYREFERENCESCLASS(ID)
)
4)創(chuàng)建教師基本信息表
CREATETABLETEACHER(
IDCHAR(3)NOTNULLCONSTRAINTTEACHER_PKPRIMARYKEY,
NAMEVARCHAR(20)NOTNULL,
SEXCHAR(1),
OFFICEVARCHAR(20)
)
5)創(chuàng)建課程基本信息表
CREATETABLECOURSE(
IDCHAR(4)NOTNULLCONSTRAINTCOU_PKPRIMARYKEY,
NAMEVARCHAR(30)NOTNULL,
TEACHERCHAR(3)NOTNULLCONSTRAINTT_FKFOREIGNKEYREFERENCESTEACHER(ID),
CREDIT_HOURSMALLINT,
PERIODSMALLINT,
INTROVARCHAR(600)
)
6)創(chuàng)建成績信息表
CREATETABLESCORE(
IDINTIDENTITY(1,1)NOTNULLCONSTRAINTSCORE_PKPRIMARYKEY,
STUDENTCHAR(8)NOTNULLCONSTRAINTS_FKFOREIGNKEYREFERENCES
STUDENT(ID),
COURSECHAR(4)NOTNULLCONSTRAINTC_FKFOREIGNKEYREFERENCES
COURSE(ID),
SCORESMALLINT
)
6.2相
關(guān)
知
識(shí)
點(diǎn)
6.2.1本章案例使用到的新組件
1.TMaskEdit組件
TMaskEdit組件用于輸入單行文本,主要用于有格式要求的數(shù)據(jù)輸入(如電話號(hào)碼、日期等),它能夠根據(jù)定制的格式來強(qiáng)迫用戶輸入指定格式的數(shù)據(jù)。
該組件位于組件面板的“Additional”標(biāo)簽頁,類名為TMaskEdit。
TMaskEdit組件的主要屬性如下:
EditMask屬性
該屬性用于設(shè)置輸入掩碼字符串,決定了輸入數(shù)據(jù)及數(shù)據(jù)顯示的格式。當(dāng)輸入的數(shù)據(jù)不符合要求時(shí),該對(duì)象將拒絕接受此數(shù)據(jù)。
EditMask屬性是一個(gè)TEditMask對(duì)象,實(shí)際上是一個(gè)字符串。掩碼字符串包含用“;”分隔的三個(gè)部分:
(1)掩碼本身。具體含義如下:
L:只能輸入字母。
l:只能輸入字母,但可以不輸入。
A:允許輸入字母或數(shù)字。
a:允許輸入字母或數(shù)字,但可以不輸入。
0:只能輸入數(shù)字。
9:只能輸入數(shù)字,但可以不輸入。
#:只能輸入數(shù)字或正負(fù)號(hào),但可以不輸入。
>:將該字符后的所有字符轉(zhuǎn)換為大寫字符,直至結(jié)束或遇到“<”。
<:將該字符后的所有字符轉(zhuǎn)換為小寫字符,直至結(jié)束或遇到“>”。
C:可輸入任意一個(gè)字符。
c:可輸入任意一個(gè)字符,但可以不輸入。
::通常用來分隔時(shí)間的時(shí)、分、秒。
/:
通常用來分隔日期的年、月、日,將顯示默認(rèn)的字符,如“-”。
(2)指明掩碼字符是否作為數(shù)據(jù)的一部分。
該部分的值取0或1。值為0,掩碼字符不作為數(shù)據(jù)的一部分;值為1,則掩碼字符作為數(shù)據(jù)的一部分。
(3)指明用什么字符代替未輸入的字符。例如,課程編號(hào)由1個(gè)字母和3個(gè)數(shù)字組成,在輸入課程編號(hào)時(shí),可以使用掩碼字符串“L000;1;_”來進(jìn)行輸入數(shù)據(jù)的限制。
Text屬性
該屬性可以取到該組件對(duì)象輸入的文本內(nèi)容。
TMaskEdit組件其實(shí)就是在文本編輯框的基礎(chǔ)上加上了數(shù)據(jù)格式的限制,TEdit的常用方法及事件TMaskEdit組件也具有。如Clear方法、ClearSelection方法、SelectAll方法、OnChange事件、OnKeyPress事件等,詳見前面關(guān)于文本編輯框TEdit組件的介紹。
2.TDBText組件
TDBText組件類似于TLabel組件,只是TDBText組件用于顯示數(shù)據(jù)庫表中記錄的指定字段的值。因?yàn)門DBText組件顯示的是表中當(dāng)前記錄指定的字段的值,所以它顯示的內(nèi)容也是動(dòng)態(tài)的,在其中顯示的內(nèi)容隨著記錄指針的移動(dòng)而變化。
TDBText組件位于組件面板的DataControls選項(xiàng)卡上,如圖6.3所示。
圖6.3組件面板上的DataControls選項(xiàng)卡
TDBText組件的主要屬性如下:
DataSource屬性
該屬性是所有數(shù)據(jù)控制組件都有的,意義也相同,詳見TDBGrid組件關(guān)于該屬性的介紹。
DataField屬性
大多數(shù)的數(shù)據(jù)控制組件如TDBText、TDBEdit、TDBMemo、TDBLookupComboBox等均具有該屬性,是因?yàn)檫@些組件對(duì)象都是與數(shù)據(jù)庫中表的某一個(gè)字段的值綁定在一起的,所以要指定該組件對(duì)象是與哪個(gè)字段綁定的。而TDBGrid組件沒有該屬性,是因?yàn)門DBGrid組件不是與某單個(gè)字段相關(guān)聯(lián)的。
3.TDBEdit組件
TDBEdit組件是專門用于顯示、編輯數(shù)據(jù)庫表中當(dāng)前記錄的某個(gè)字段值的數(shù)據(jù)控制組件。在應(yīng)用程序中,我們常常用一個(gè)TDBEdit組件來對(duì)應(yīng)表中的一個(gè)字段。同樣,通過設(shè)置其DataSource、DataField屬性可以為TDBEdit組件對(duì)象指定表中相應(yīng)的字段。
如果希望用戶能夠通過TDBEdit組件修改數(shù)據(jù)庫表中的字段值,還要設(shè)置TDBEdit組件的ReadOnly屬性值為False;若ReadOnly屬性值為True,則只能瀏覽不能修改數(shù)據(jù)。
TDBEdit組件位于組件面板的DataControls選項(xiàng)卡上,如圖6.3所示。
4.TDBMemo組件
TDBMemo組件能夠顯示多行文本,也允許用戶在其中輸入和修改多行文本信息,它是Delphi中用來顯示和編輯數(shù)據(jù)庫表中的大二進(jìn)制類型的文本字段的唯一的數(shù)據(jù)控制組件。
TDBMemo組件位于組件面板的DataControls選項(xiàng)卡上,如圖6.3所示。
1)TDBMemo組件的主要屬性
ScrollBar屬性
該屬性指定TDBMemo組件是否顯示滾動(dòng)條。
AutoDisplay屬性
由于TDBMemo組件中包含著大量的文本信息,因此應(yīng)用程序在運(yùn)行過程中要顯示其中的信息便需要花費(fèi)很多的時(shí)間,特別是當(dāng)用戶移動(dòng)記錄指針時(shí),要更新TDBMemo組件中顯示的信息,這樣會(huì)大大減慢程序的運(yùn)行速度。為此Delphi為TDBMemo組件設(shè)定了AutoDisplay屬性,用來控制是否自動(dòng)顯示表中的備注型字段。當(dāng)AutoDisplay設(shè)置為False時(shí),在TDBMemo組件中只顯示其對(duì)應(yīng)表中的字段名而不顯示字段中的文本信息,用戶如果想瀏覽字段中的文本信息,雙擊TDBMemo組件即可;當(dāng)設(shè)置AutoDisplay屬性為True時(shí),會(huì)自動(dòng)顯示其對(duì)應(yīng)數(shù)據(jù)庫表中的字段值。
WordWrap屬性
該屬性指定在TDBMemo組件中輸入文本信息且輸入到右邊界時(shí),是否自動(dòng)換行。
2)TDBMemo組件主要的方法
在應(yīng)用程序運(yùn)行過程中,用戶對(duì)TDBMemo組件中顯示的文本信息是不能夠進(jìn)行剪切、復(fù)制和粘貼操作的,要想實(shí)現(xiàn)這些功能,用戶必須在程序中調(diào)用TDBMemo的CutToClipboard、CopyToClipboard和PasteFromClipboard方法分別來實(shí)現(xiàn)剪切、復(fù)制和粘貼操作。
5.TDBLookupComboBox組件
TDBLookupComboBox組件在數(shù)據(jù)庫應(yīng)用程序中的作用比較大。例如,我們?cè)谛薷恼n程信息時(shí),課程信息中有授課的教師信息,該教師信息在課程信息表中是教師的員工編號(hào),該員工編號(hào)是教師信息表中的主鍵,在課程信息表中是外鍵。在編輯該教師信息時(shí),首先受到外鍵約束,不能隨意修改;其次我們希望以下拉框的形式提供給我們選擇而不是輸入,并且希望下拉框中顯示的數(shù)據(jù)為教師的姓名,這樣更符合用戶的需求。這樣,提供給用戶選擇的是教師姓名(教師姓名在教師信息表中),而實(shí)際修改的卻是課程信息表中的教師編號(hào)。這樣的要求,看似比較復(fù)雜難于實(shí)現(xiàn),但使用TDBLookupComboBox組件卻可以輕松實(shí)現(xiàn)。
TDBLookupComboBox組件位于組件面板的DataControls選項(xiàng)卡上,如圖6.3所示。
TDBLookupComboBox組件的主要屬性如下:
DataSource屬性
該屬性指定修改的數(shù)據(jù)來自哪個(gè)數(shù)據(jù)集。
DataField屬性
該屬性指定修改的數(shù)據(jù)是數(shù)據(jù)集的哪個(gè)字段。
ListSource屬性
該屬性指定在下拉列表中提供選擇的數(shù)據(jù)來自哪個(gè)數(shù)據(jù)集。
ListField屬性
該屬性指定在下拉列表中提供選擇的數(shù)據(jù)來自數(shù)據(jù)集的哪個(gè)字段。
KeyField屬性
該屬性非常重要,在提供選擇的數(shù)據(jù)與真正修改的數(shù)據(jù)之間一定是有聯(lián)系的,由KeyField來說明這種聯(lián)系。該屬性可以在下拉列表中進(jìn)行選擇,提供選擇的是ListSource屬性對(duì)應(yīng)的數(shù)據(jù)集的全部字段,該屬性的值應(yīng)該是與DataSource、DataField指定的字段值相對(duì)應(yīng)的那個(gè)字段名稱。
設(shè)置好上述屬性,就可以在應(yīng)用程序中實(shí)現(xiàn):提供選擇的是一組來自于一個(gè)數(shù)據(jù)表的某一字段的數(shù)據(jù),而實(shí)際修改的是另一個(gè)數(shù)據(jù)表中的某字段值。
6.2.2TTable數(shù)據(jù)集組件對(duì)數(shù)據(jù)的操作
1.TTable組件的記錄導(dǎo)航
TTable組件提供了一系列方法,對(duì)數(shù)據(jù)集中的記錄進(jìn)行導(dǎo)航,也即進(jìn)行當(dāng)前記錄的定位。
First方法
該方法將記錄指針移動(dòng)到數(shù)據(jù)集的第一條記錄。
Last方法
該方法將記錄指針移動(dòng)到數(shù)據(jù)集的最后一條記錄。
Prior方法
該方法將記錄指針移動(dòng)到當(dāng)前記錄的前一條記錄。
Next方法
該方法將記錄指針移動(dòng)到當(dāng)前記錄的后一條記錄。
MoveBy方法
該方法接收一個(gè)Integer參數(shù),將記錄指針移動(dòng)到當(dāng)前記錄的向前或向后指定數(shù)目的記錄。
使用上述方法,結(jié)合BOF、EOF屬性可以遍歷數(shù)據(jù)表中的每一條記錄。常用的方式
如下:
Table1.First;
whilenotTable1.EOFdo
begin
<處理當(dāng)前的記錄>
Table1.Next;
end;
2.TTable組件中的數(shù)據(jù)維護(hù)
數(shù)據(jù)集中的數(shù)據(jù)維護(hù)主要包括數(shù)據(jù)記錄的添加、修改和刪除。Delphi為TTable數(shù)據(jù)集組件提供了相應(yīng)的方法用于其中的數(shù)據(jù)維護(hù)。
Edit方法
如果應(yīng)用程序想對(duì)數(shù)據(jù)集中的數(shù)據(jù)記錄進(jìn)行修改,我們必須將數(shù)據(jù)集設(shè)置成編輯狀態(tài)。Edit使數(shù)據(jù)集處于編輯狀態(tài),以便進(jìn)行修改及刪除等操作。當(dāng)數(shù)據(jù)集處于編輯狀態(tài)時(shí),移動(dòng)記錄指針或調(diào)用Post方法都可以將當(dāng)前記錄的修改寫回到磁盤數(shù)據(jù)庫表中。在程序中,
Edit方法和Post方法常常配合在一起使用,用于修改表中的記錄。
Append、Insert方法
Append和Insert方法都是將數(shù)據(jù)集組件置成插入狀態(tài),以在表中插入新記錄。Append方法是在表的尾部插入一條空白記錄,Insert方法是在當(dāng)前記錄的后面插入一條空白記錄。不過增加記錄到一個(gè)具有索引的表中時(shí),都是按照索引順序?qū)懭肫湮恢?,也就是說對(duì)于索引表Append方法和Insert方法的作用是一樣的。
Insert方法和
Append方法插入的記錄是空白記錄,要真正插入一條新記錄,我們還必須給新的空白記錄的各個(gè)字段賦值,最后調(diào)用Post方法,將插入的記錄寫回?cái)?shù)據(jù)庫表。
Post方法
Post方法將插入或修改的記錄寫回磁盤上的數(shù)據(jù)庫表,即投寄。當(dāng)投寄成功時(shí)數(shù)據(jù)集回到瀏覽狀態(tài),若投寄不成功數(shù)據(jù)集仍然保持原有狀態(tài)。
Post方法既可以顯式地調(diào)用,也可以隱含地調(diào)用。當(dāng)數(shù)據(jù)集處于編輯狀態(tài)或插入狀態(tài),且移動(dòng)記錄指針時(shí),Delphi會(huì)隱含地調(diào)用Post方法,將當(dāng)前記錄的修改寫回?cái)?shù)據(jù)庫表;當(dāng)程序調(diào)用Append方法或Insert方法時(shí),也會(huì)隱含地調(diào)用Post方法,將先前數(shù)據(jù)集的修改寫回?cái)?shù)據(jù)庫表。
Cancel方法
Cancel方法用于取消當(dāng)前的操作。當(dāng)程序還未調(diào)用Post方法對(duì)記錄的修改寫回?cái)?shù)據(jù)庫表時(shí),調(diào)用Cancel方法,可以將記錄恢復(fù)到?jīng)]有修改之前的狀態(tài)。在調(diào)用Cancel方法時(shí),它總是將數(shù)據(jù)集置成瀏覽狀態(tài)。
Delete方法
Delete方法用于刪除表中的記錄。調(diào)用Delete方法時(shí),將刪除表中當(dāng)前記錄,并且自動(dòng)地將記錄指針移到被刪記錄的下一條記錄,同時(shí)將數(shù)據(jù)集置成瀏覽狀態(tài)。
AppendRecord方法
語法:ProcedureAppendRecord(constValues:arrayofconst);
InsertRecord方法
語法:ProcedureInsertRecord(constValues:arrayofconst);
AppendRecord和InsertRecord方法分別與Append和Insert方法相似。它們都是用于在表中插入一條新記錄,但這兩個(gè)方法比Append和Insert方法更簡(jiǎn)單、更方便一些,它們直接在表中插入一條新記錄,新記錄的各個(gè)字段值組成的數(shù)組作為AppendRecord或InsertRecord方法的參數(shù)傳遞給新記錄,并且不需顯式地調(diào)用Post方法即可將插入的新記錄寫回?cái)?shù)據(jù)庫表。
在給插入的新記錄賦字段值時(shí),字段值數(shù)組可以為每一個(gè)字段提供一個(gè)值,或從左邊一列開始依次為字段賦值。用戶也可以省略字段序列后面的一些字段值,將會(huì)用空值來填充這些字段;用戶也可以對(duì)那些明確希望用空值填充的字段傳遞給保留字NIL。
例如,數(shù)據(jù)表t1,有編號(hào)、姓名、成績?nèi)齻€(gè)字段,可使用AppendRecord方法插入一條記錄:
AppendRecord(['003','張三',90]);
SetFields方法
語法:ProcedureSetFields(constValues:arrayofconst);
調(diào)用該方法可以修改表中當(dāng)前記錄的多個(gè)字段的值。調(diào)用該方法之前必須將數(shù)據(jù)集部件置成編輯狀態(tài),調(diào)用該方法之后,還要調(diào)用Post方法,才能真正將當(dāng)前記錄的修改寫回?cái)?shù)據(jù)庫表。調(diào)用該方法時(shí),被修改的字段值必須要與表中實(shí)際存在的字段名對(duì)應(yīng),并且數(shù)據(jù)類型要相匹配。
Lookup方法
使用Lookup方法可用來查詢數(shù)據(jù),對(duì)數(shù)據(jù)表本身沒有任何影響。
Lookup方法用于從參數(shù)KeyFields、KeyValues所標(biāo)識(shí)的行中返回指定字段的值,其返回值是一個(gè)可變類型數(shù)組,存儲(chǔ)返回的數(shù)據(jù)。其語法如下:
FunctionLookup(constKeyFields:String;constKeyValues:Variant;constResultFields:String):Variant;其中:
KeyFields標(biāo)識(shí)查找的字段,若是多個(gè)字段,字段間用分號(hào)分隔;
KeyValues標(biāo)識(shí)與KeyFields標(biāo)識(shí)中的字段應(yīng)相匹配;
ResultFields標(biāo)識(shí)返回字段,如果是多個(gè)字段,字段間用分號(hào)分隔。
例如,下列代碼將t_score數(shù)據(jù)集中查找student字段值為“20060058”且course字段值為“C001”的記錄,返回該記錄的score字段值并輸出:
procedureTForm1.Button1Click(Sender:TObject);
var
r:variant;
s:string;
begin
t_score.Open;
r:=t_score.Lookup('student;course',vararrayof(['20060058','C001']),'score');
s:=r;
showmessage(s);
end;
Locate方法
Locate方法能夠按照特定的條件進(jìn)行記錄定位。雖然同樣可以用來查詢數(shù)據(jù),但與Lookup方法不同的是,查找到符合條件的記錄指針將指向該記錄,該記錄成為當(dāng)前記錄,并返回True;若未定位成功,當(dāng)前記錄不變,并返回False。其語法如下:
FunctionLocate(constKeyFields:String;constKeyValues:Variant;Options:TLocateOptions)
:Boolean;
其中:
KeyFields、KeyValues同Lookup方法;
Options指定Locate方法的查找選項(xiàng),參數(shù)值為loCaseInsensitive(忽略大小寫)和loPartialKey(模糊查詢)的集合。
例如,下列代碼同樣在t_score數(shù)據(jù)集中查找student字段值為“20060058”且course字段值為“C001”的記錄,并輸出該記錄的score字段值:
procedureTForm1.Button1Click(Sender:TObject);
var
r:variant;
s:string;
begin
t_score.Open;
ift_score.Locate('student;course',vararrayof(['20060058','C001']),[])then
begin
s:=t_score['score'];
showmessage(s);
end;
end;
3.TTable組件中的字段值的引用
除了使用方法對(duì)數(shù)據(jù)進(jìn)行操作,有時(shí)需要直接引用數(shù)據(jù)集中當(dāng)前記錄的字段值,以取其值或?qū)ζ滟x值。引用TTable組件對(duì)象當(dāng)前記錄的字段值的方式如下:
1)通過“數(shù)據(jù)集對(duì)象名['字段名']”形式直接引用字段值
這種對(duì)字段值的引用形式最常用也最簡(jiǎn)單。例如,數(shù)據(jù)集Table1對(duì)應(yīng)著數(shù)據(jù)表COURSE,下列語句將COURSE表當(dāng)前記錄的ID字段的值賦值給Edit1的Text屬性,以顯示當(dāng)前記錄的ID字段值:
Edit1.Text:=Table1['ID'];下列語句將Edit1的文本內(nèi)容賦值給COURSE表當(dāng)前記錄的ID字段,以修改當(dāng)前記錄的ID字段值:
Table1['ID']:=Edit1.Text;
2)通過字段組件對(duì)字段的值進(jìn)行引用
數(shù)據(jù)庫表的每一列在應(yīng)用程序中都有其對(duì)應(yīng)的一個(gè)字段組件。在應(yīng)用程序運(yùn)行過程中,隨著數(shù)據(jù)集組件被激活,對(duì)應(yīng)于數(shù)據(jù)庫表中每一列的字段組件便動(dòng)態(tài)地被創(chuàng)建。字段組件又稱字段對(duì)象,它對(duì)應(yīng)著數(shù)據(jù)庫表中的列即字段,字段對(duì)象是不可見的組件。在設(shè)計(jì)過程中,程序設(shè)計(jì)人員利用字段編輯器(FieldsEditor)還可以創(chuàng)建永久性的字段組件。
字段組件在應(yīng)用程序中始終是不可見的組件,在程序運(yùn)行過程中如此,在程序設(shè)計(jì)階段也是如此。但字段組件在應(yīng)用中起著非常重要的作用,可以說它是所有數(shù)據(jù)控制組件從數(shù)據(jù)庫表中顯示、編輯數(shù)據(jù)的基礎(chǔ)。這是因?yàn)樽侄谓M件直接對(duì)應(yīng)著數(shù)據(jù)庫表中的字段,瀏覽和修改表中的數(shù)據(jù)必須通過字段組件。
由于動(dòng)態(tài)生成的字段組件是沒有自己的名字的,因此必須利用特殊的手段獲得數(shù)據(jù)庫表中各字段對(duì)應(yīng)的字段組件,然后對(duì)字段進(jìn)行訪問,方式有如下兩種:
(1)使用數(shù)據(jù)集組件的Fields屬性。
數(shù)據(jù)集組件的Fields屬性是與數(shù)據(jù)集組件相關(guān)聯(lián)的數(shù)據(jù)庫表中各個(gè)字段對(duì)應(yīng)的動(dòng)態(tài)字段組件的名字列表。因此我們可以通過Fields屬性的下標(biāo)(即索引號(hào))來訪問各字段組件,從而訪問數(shù)據(jù)庫表中的各個(gè)字段。索引號(hào)從0開始,也就是說數(shù)據(jù)庫表中第一個(gè)字段對(duì)應(yīng)著Fields列表的0索引,第二個(gè)字段對(duì)應(yīng)的Fields的索引號(hào)為1,以此類推。
下面的例子是訪問COURSE表的第一個(gè)字段并在編輯框Edit1中顯示其字段值,設(shè)數(shù)據(jù)集Table1與數(shù)據(jù)庫表COURSE相關(guān)聯(lián):
Edit1.Text:=Table1.Fields[0].AsString;下面的代碼是將編輯框Edit1中的字符值賦值給COURSE表中當(dāng)前記錄的第一個(gè)字段,以實(shí)現(xiàn)修改COURSE表當(dāng)前記錄的字段值:
Table1.Fields[0].AsString:=Edit1.Text;
(2)使用數(shù)據(jù)集組件的FieldByName方法。
在數(shù)據(jù)集組件中有一個(gè)FieldByName方法,專門用于訪問數(shù)據(jù)集組件中動(dòng)態(tài)生成的字段組件。調(diào)用FieldByName方法時(shí),必須把數(shù)據(jù)庫表中的字段名作為參數(shù)傳給FieldByName,調(diào)用該方法后便可以得到該字段所對(duì)應(yīng)的字段組件。這樣通過字段組件我們便可以讀寫數(shù)據(jù)表中相應(yīng)的字段值了。下面是訪問COURSE表中的ID字段的代碼:
Edit1.Text:=Table1.FieldByName('ID').AsString;
Table1.FieldByName('ID').AsString:=Edit1.Text;6.2.3數(shù)據(jù)庫自動(dòng)連接
一般的應(yīng)用程序均有自己實(shí)現(xiàn)的用戶驗(yàn)證功能,進(jìn)行使用該應(yīng)用程序的用戶名、密碼及權(quán)限的驗(yàn)證。在這種情況下肯定不希望出現(xiàn)進(jìn)行數(shù)據(jù)庫連接的對(duì)話框,否則將有使用應(yīng)用程序和登錄數(shù)據(jù)庫服務(wù)器的兩套用戶信息,會(huì)讓用戶感到極不方便。但是登錄大部分的數(shù)據(jù)庫服務(wù)器進(jìn)行數(shù)據(jù)庫連接時(shí),要求提供操作數(shù)據(jù)庫的用戶名及密碼,不出現(xiàn)輸入用戶名及密碼的對(duì)話框,用戶信息怎樣提供呢?這就涉及到怎樣實(shí)現(xiàn)無需輸入連接數(shù)據(jù)庫的用戶信息就能夠進(jìn)行數(shù)據(jù)庫的自動(dòng)連接。
實(shí)現(xiàn)數(shù)據(jù)庫的自動(dòng)連接要使用TDatabase組件,除了設(shè)置其AliasName、DatabaseName之外,還有兩個(gè)重要屬性要進(jìn)行設(shè)置:
LoginPrompt屬性
LoginPrompt屬性應(yīng)該設(shè)置為False,此時(shí)將不顯示數(shù)據(jù)庫連接對(duì)話框。
Params屬性
通過Params屬性設(shè)置連接參數(shù),一般要設(shè)置的參數(shù)有USERNAME和PASSWORD,其他參數(shù)根據(jù)需要決定是否進(jìn)行設(shè)置。Params參數(shù)的設(shè)置可以在Params屬性中直接進(jìn)行,如圖6.4所示;也可以通過雙擊TDatabase組件對(duì)象,在彈出的Database對(duì)話框中進(jìn)行設(shè)置,如圖5.13所示。圖6.4中的參數(shù)之所以很多,是因?yàn)樵贒atabase對(duì)話框中點(diǎn)擊了“Defaults”按鈕,導(dǎo)入了默認(rèn)參數(shù)。
圖6.4TDatabase組件對(duì)象的Params屬性設(shè)置
6.2.4主細(xì)表
有些時(shí)候,我們希望一個(gè)數(shù)據(jù)集中的數(shù)據(jù)是跟隨另外一個(gè)數(shù)據(jù)集的當(dāng)前記錄在發(fā)生變化。例如,我們?cè)诓僮髡n程信息表對(duì)應(yīng)數(shù)據(jù)集時(shí),希望教師信息表對(duì)應(yīng)數(shù)據(jù)集的內(nèi)容跟隨課程信息表對(duì)應(yīng)數(shù)據(jù)集的當(dāng)前記錄而發(fā)生變化,目的是反映出講授某門課程的教師信息。例如,課程信息表當(dāng)前記錄的課程編號(hào)是“C005”,講授教師員工號(hào)是“T06”,希望在教師信息表對(duì)應(yīng)的數(shù)據(jù)集中只有教師員工號(hào)為“T06”的數(shù)據(jù)記錄,這樣我們可以非常方便地獲取到“C005”課程的授課教師的姓名、所屬教研室等信息,因?yàn)榇藭r(shí)在教師信息表對(duì)應(yīng)數(shù)據(jù)集中,只有該教師信息一條記錄。而有時(shí),我們希望是這樣的情況,課程信息表的當(dāng)前記錄是哪門課程,在成績表對(duì)應(yīng)數(shù)據(jù)集中只有選修該門課程的所有學(xué)生的成績信息,這樣我們就可以非常方便地根據(jù)課程來瀏覽成績信息。
這種情況在實(shí)際應(yīng)用中是非常多見的,我們稱之為主細(xì)表結(jié)構(gòu),跟隨主表的當(dāng)前記錄而發(fā)生變化的表稱為明細(xì)表。
實(shí)現(xiàn)主細(xì)表結(jié)構(gòu),需要設(shè)置明細(xì)表數(shù)據(jù)集組件對(duì)象的兩個(gè)屬性:
MasterSource屬性
MasterSource屬性指定主表對(duì)應(yīng)的TDataSource組件對(duì)象名。
MasterFields屬性
MasterFields屬性指定主表和明細(xì)表之間建立聯(lián)系的字段。主表和明細(xì)表之間建立一對(duì)多關(guān)系時(shí),可能不只是基于一個(gè)字段,可能有多個(gè)字段。如果有多個(gè)字段,那么在說明MasterFields屬性時(shí),多個(gè)字段之間要用分號(hào)隔開。
在設(shè)計(jì)階段一般是使用字段連接設(shè)計(jì)器(FieldLinkDesigner)為兩個(gè)數(shù)據(jù)表創(chuàng)建一對(duì)多的關(guān)系,在ObjectInspector中雙擊明細(xì)表TTable組件的MasterFields便可以打開FieldLinkDesigner,進(jìn)行一對(duì)多關(guān)系的創(chuàng)建。如創(chuàng)建COURSE表和TEACHER表之間的主細(xì)表關(guān)系時(shí),使用FieldLinkDesigner設(shè)置明細(xì)表數(shù)據(jù)集對(duì)象的MasterFields,如圖6.5所示。
圖6.5使用FieldLinkDesigner設(shè)置MasterFields屬性
6.3實(shí)
現(xiàn)
方
法
6.3.1教務(wù)管理子系統(tǒng)功能模塊的創(chuàng)建
在Delphi7中創(chuàng)建一個(gè)新的工程,工程名為“TEACH.dpr”。
1.登錄窗體
本工程的第一個(gè)窗體是登錄窗體,窗體文件名是“clerk_login.pas”。用于用戶身份驗(yàn)證。整個(gè)應(yīng)用程序的數(shù)據(jù)庫連接也在此窗體中實(shí)現(xiàn)。登錄窗體的布局如圖6.6所示。
圖6.6登錄窗體布局
表6-7登錄窗體中主要組件對(duì)象及屬性表
用戶登錄的功能在“登錄”按鈕button1的OnClick事件中完成,代碼如下:
procedureTf_login.Button1Click(Sender:TObject);
begin
try
mydb.Open;
t_user.Filter:='id='''+edit1.Text+'''';
t_user.Filtered:=true;
t_user.Open;
except
application.MessageBox('請(qǐng)與系統(tǒng)管理員聯(lián)系。','數(shù)據(jù)庫連接錯(cuò)誤',MB_OK);
application.Terminate;
end;
ift_user.RecordCount=1then
begin
ift_user['passwd']=edit2.Textthen
begin
ift_user['authority']='0'then
begin
f_login.Hide;
f_clerk.Show;
end
else
application.MessageBox('您不具備使用本系統(tǒng)的權(quán)限!','用戶權(quán)限錯(cuò)誤',MB_OK);
end
else
application.MessageBox('請(qǐng)確認(rèn)密碼!','密碼錯(cuò)誤',MB_OK);
end
else
application.MessageBox('請(qǐng)確認(rèn)用戶名!','用戶名錯(cuò)誤',MB_OK);
end;
2.主要功能窗體
主要功能窗體名為“clerk_main.pas”。教務(wù)管理子系統(tǒng)有兩部分功能:課程信息維護(hù)和成績數(shù)據(jù)維護(hù)。因此,使用PageControl組件的兩個(gè)TabSheet來實(shí)現(xiàn)這兩部分功能。為了對(duì)照普通組件和數(shù)據(jù)控制組件以凸顯數(shù)據(jù)控制組件的優(yōu)點(diǎn),將添加課程信息和刪除、修改課程信息分別處理,因此在“課程管理”頁中又使用了一個(gè)PageControl組件,其兩個(gè)TabSheet分別對(duì)應(yīng)添加和刪改課程信息。
1)添加課程信息
該界面的功能是添加課程信息,在界面上輸入課程的具體信息,點(diǎn)擊“確認(rèn)”按鈕,將該課程信息添加至COURSE表;點(diǎn)擊“取消”按鈕,則課程信息不添加至數(shù)據(jù)表。
界面布局如圖6.7所示,其主要組件及屬性見表6-8。
表6-8
添加課程界面主要組件對(duì)象及屬性表
圖6.7添加課程
關(guān)閉該窗體,整個(gè)應(yīng)用程序應(yīng)該關(guān)閉。在該窗體的OnClose事件中加入如下代碼:
procedureTf_clerk.FormClose(Sender:TObject;varAction:TCloseAction);
begin
application.Terminate;
end;添加課程信息時(shí)要提供教師編號(hào),由于教師編號(hào)直接輸入不方便,且易違反外鍵約束。故使用Combobox組件進(jìn)行教師信息的選擇,這比輸入的方式要方便許多,而且當(dāng)中的教師信息來自于表TEACHER,所以不會(huì)違反外鍵約束。此處的教師信息是不隨教學(xué)子系統(tǒng)的使用而發(fā)生變化的,所以在Combobox組件對(duì)象中填入教師號(hào)及姓名在窗體創(chuàng)建時(shí)完成即可。窗體的OnCreate事件代碼如下:
procedureTf_clerk.FormCreate(Sender:TObject);
begin
t_teacher.Open;
combobox1.Clear;
whilenott_teacher.Eofdo
begin
combobox1.AddItem(t_teacher['id']+','+t_teacher['name'],nil);
t_teacher.Next;
end;
end;沒有查看課程編號(hào)是否重復(fù)之前,不能進(jìn)行添加操作,讓“確認(rèn)”不可用,代碼在TabSheet4的OnShow事件中:
procedureTf_clerk.TabSheet4Show(Sender:TObject);
begin
button2.Enabled:=false;
end;查看在數(shù)據(jù)表COURSE中是否已經(jīng)有此課程編號(hào)存在,若存在此編號(hào)還要添加該條記錄,將違反主鍵約束。為了避免違反主鍵約束,放置命令按鈕進(jìn)行檢查,若該課程編號(hào)在當(dāng)前數(shù)據(jù)表COURSE中沒有重復(fù),“確認(rèn)”按鈕才可用,否則給出提示信息。
procedureTf_clerk.Button1Click(Sender:TObject);
begin
t_course.Filter:='id='''+trim(MaskEdit1.Text)+'''';
t_course.Filtered:=true;
t_course.Open;
ift_course.RecordCount=1then
begin
showmessage('該課程編號(hào)已存在,請(qǐng)重新輸入!');
button2.Enabled:=false;
end
else
begin
showmessage('該課程編號(hào)可用!');
button2.Enabled:=true;
end;
end;
“取消”按鈕的功能是不將輸入的數(shù)據(jù)添加到數(shù)據(jù)表中,無需做什么操作,只需將前面輸入的內(nèi)容清除:
procedureTf_clerk.Button3Click(Sender:TObject);
begin
button2.Enabled:=false;
maskedit1.Text:='';
edit2.Text:='';
combobox1.Text:='';
spinedit1.Value:=0;
spinedit2.Value:=0;
memo1.Lines.Clear;
end;
“確認(rèn)”按鈕的功能是將當(dāng)前輸入的數(shù)據(jù)添加至數(shù)據(jù)表COURSE中。添加記錄時(shí)數(shù)據(jù)集組件提供了Append與AppendRecord兩種方法,注意兩者的區(qū)別。為了使教師信息更加詳細(xì)一些以便用戶確認(rèn)教師,在下拉框中給出了教師編號(hào)和姓名,在此要將這兩個(gè)信息分離,取出教師編號(hào)添加至TEACHER字段中。記錄添加后,應(yīng)將前面輸入的內(nèi)容清除。代碼如下:
procedureTf_clerk.Button2Click(Sender:TObject);
var
len1,len2,len:integer;
s1,s2,str:string;
begin
s1:=trim(combobox1.Text);
s2:=strpos(pchar(s1),pchar(','));
len1:=length(s1);
len2:=length(s2);
len:=len1-len2;
str:=copy(s1,1,len);//取教師列表中的教師編號(hào)
t_course.Filtered:=false;
t_course.Open;//t_course.AppendRecord([maskedit1.Text,trim(edit2.Text),str,spinedit1.Value,spinedit2.Value,memo1.
Text]);
t_course.Append;
t_course['id']:=maskedit1.Text;
t_course['name']:=trim(edit2.Text);
t_course['teacher']:=str;
t_course['credit_hour']:=spinedit1.Value;
t_course['period']:=spinedit2.Value;
t_course['intro']:=memo1.Text;
t_course.post;
Button3Click(nil);
end;
2)刪除、修改課程信息
本界面的功能是對(duì)課程信息進(jìn)行刪除或修改操作。用一個(gè)RadioGroup組件對(duì)象讓用戶選擇對(duì)課程信息做刪除還是修改操作。刪除、修改是對(duì)現(xiàn)有的課程信息進(jìn)行操作,此處用一個(gè)DBGrid組件對(duì)象以表格形式給出現(xiàn)有的全部課程,以提供給用戶進(jìn)行選擇。當(dāng)選定數(shù)據(jù)表格中的一行時(shí),在界面的右側(cè)給出該課程的具體信息,刪除操作時(shí)提供給用戶進(jìn)行課程確認(rèn),修改操作時(shí)直接在其中修改課程信息。點(diǎn)擊“確認(rèn)”按鈕,確認(rèn)刪除或修改;點(diǎn)擊“取消”按鈕,取消前面的刪除或修改操作。
圖6.8刪除、修改課程
表6-9刪除、修改課程界面主要組件對(duì)象及屬性表
表6-9刪除、修改課程界面主要組件對(duì)象及屬性表
“刪除修改課程信息”頁顯示時(shí),數(shù)據(jù)表格中應(yīng)該出現(xiàn)現(xiàn)有全部課程的課程編號(hào)及課程名稱信息。TabSheet5的OnShow事件代碼如下:
procedureTf_clerk.TabSheet5Show(Sender:TObject);
begin
t_course.Filtered:=false;
t_course.Open;
dbgrid2.Columns[0].Width:=60;
dbgrid2.Columns[1].Width:=149;
dbgrid2.Refresh;
end;點(diǎn)擊“取消”按鈕,取消前面所做的更新。Button5的OnClick事件代碼如下:
procedureTf_clerk.Button5Click(Sender:TObject);
begin
t_course.Cancel;
end;點(diǎn)擊“確認(rèn)”按鈕,判斷是刪除還是修改操作,并執(zhí)行相應(yīng)操作。注意由于課程編號(hào)是SCORE數(shù)據(jù)表中的外鍵,刪除課程信息時(shí)可能會(huì)違反外鍵約束。為了避免違反外鍵約束,刪除課程信息之前應(yīng)該先將SCORE數(shù)據(jù)表中的該課程的選修信息刪除,刪除前要讓用戶確認(rèn)。
procedureTf_clerk.Button4Click(Sender:TObject);
begin
caseradiogroup1.ItemIndexof
0:
ifapplication.MessageBox('確認(rèn)刪除該課程信息嗎?','刪除確認(rèn)',MB_OKCANCEL)=IDOK
then
begin
t_score.Filter:='course='''+t_course['id']+'''';
t_score.Filtered:=true;
t_score.Open;
ift_score.RecordCount>0then
begin
ifapplication.MessageBox('刪除該課程信息將刪除成績表中此課程全部成績信息,確認(rèn)刪除嗎?','刪除確認(rèn)',MB_OKCANCEL)=IDOKthen
begin
whilenott_score.Eofdo
t_score.Delete;
t_course.Delete;
end;
end
else
t_course.Delete;
end;
1:
t_course.Post;
end;
end;
3)成績管理
本界面的功能是按課程對(duì)該課程的成績數(shù)據(jù)進(jìn)行維護(hù)。在下拉框中選擇課程編號(hào),并在下方顯示該課程的具體信息以便教務(wù)干事確認(rèn)課程。確認(rèn)是該課程后,點(diǎn)擊“確認(rèn)”按鈕,將在下方的數(shù)據(jù)表格中顯示課程編號(hào)、選修學(xué)生的學(xué)號(hào)及課程成績,只有成績列是可修改的,輸入成績數(shù)據(jù)即可。
圖6.9成績管理
表6-10成績管理界面主要組件對(duì)象及屬性表
編輯成績信息,是針對(duì)某一門課程進(jìn)行的,首先要確定課程的編號(hào)。課程的編號(hào)直接輸入不夠方便,在此使用ComboBox組件對(duì)象進(jìn)行課程編號(hào)的選擇。在“成績管理”頁顯示時(shí),應(yīng)該在ComboBox2中填入現(xiàn)有的全部課程編號(hào)。TabSheet2的OnShow事件代碼如下:
procedureTf_clerk.TabSheet2Show(Sender:TObject);
begin
dbgrid1.Columns[0].Width:=130;
dbgrid1.Columns[1].Width:=150;
dbgrid1.Columns[2].Width:=110;
dbgrid1.Enabled:=false;
t_course.Close;
t_teacher_1.Close;
t_course.DisableControls;
t_course.Filtered:=false;
t_course.Open;
combobox2.Clear;
whilenott_course.Eofdo
begin
combobox2.AddItem(t_course['id'],nil);
t_course.Next;
end;
end;
在下拉框中選擇某課程編號(hào)后,下方立刻顯示該課程的具體信息,注意顯示的是教師姓名而非教師號(hào),而教師姓名數(shù)據(jù)在COURSE表中是沒有的,存在于TEACHER表中。怎樣使教師表的當(dāng)前記錄動(dòng)態(tài)地根據(jù)課程表的當(dāng)前記錄發(fā)生變化,從而使得教師表的當(dāng)前記錄即為教授課程表當(dāng)前記錄課程的教師信息?這里采用了主細(xì)表的方式,即COURSE表為主表,TEACHER表為明細(xì)表。主細(xì)表是通過明細(xì)表的MasterSource及MasterFields屬性來設(shè)置的。
點(diǎn)擊“確認(rèn)”按鈕,確認(rèn)編輯該課程的成績數(shù)據(jù),數(shù)據(jù)表格dbgrid2中顯示該門課程的全部選修信息,提供給用戶編輯成績。
procedureTf_clerk.Button6Click(Sender:TObject);
begin
t_score.Filter:='course='''+t_course['id']+'''';
t_score.Filtered:=true;
t_score.Open;
dbgrid1.Enabled:=true;
end;圖6.10用戶登錄窗體
6.3.2系統(tǒng)的實(shí)現(xiàn)
通過以上步驟,本案例已完成。程序啟動(dòng)后,首先會(huì)彈出一個(gè)用戶登錄窗體,如圖6.10所示。
輸入用戶名和密碼后,單擊“登錄”按鈕,程序驗(yàn)證用戶名、密碼和權(quán)限,若其中任一處驗(yàn)證失敗,將分別給出提示信息。驗(yàn)證通過,將顯示主要功能窗體,如圖6.11所示。
圖6.11添加課程信息
輸入課程編號(hào),點(diǎn)擊“查看編號(hào)是否沖突”按鈕,若數(shù)據(jù)表中已存在該課程
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2026年度滁州市瑯琊區(qū)事業(yè)單位公開招聘工作人員10名筆試備考題庫及答案解析
- 2025年太宰治偵探社筆試及答案
- 2026年提升建筑工程安全質(zhì)量的案例分析
- 2025年岳陽市人事考試及答案
- 2026山西白求恩醫(yī)院山西醫(yī)學(xué)科學(xué)院急需緊缺高層次人才招聘5人筆試備考試題及答案解析
- 2026年扁平化組織的高效協(xié)作總結(jié)
- 2025年高速公路發(fā)展集團(tuán)筆試及答案
- 2026浙江杭州市之江外語實(shí)驗(yàn)學(xué)校招聘教師1人(民辦)筆試模擬試題及答案解析
- 2026上半年海南事業(yè)單位聯(lián)考萬寧市招聘73人(第1號(hào))考試備考題庫及答案解析
- 2025年南充事業(yè)單位檢驗(yàn)考試題及答案
- 東北大學(xué)2015年招生簡(jiǎn)章
- 建筑材料運(yùn)輸及售后服務(wù)方案
- 資金管理辦法實(shí)施細(xì)則模版(2篇)
- IATF16949-質(zhì)量手冊(cè)(過程方法無刪減版)
- 江蘇省南京市2025屆高三學(xué)情調(diào)研試卷語文
- 河南省安陽市滑縣2024-2025學(xué)年高二數(shù)學(xué)上學(xué)期期末考試試題文
- 客房服務(wù)員:高級(jí)客房服務(wù)員考試資料
- GB/T 6974.5-2023起重機(jī)術(shù)語第5部分:橋式和門式起重機(jī)
- 心臟血管檢查課件
- 運(yùn)用PDCA循環(huán)管理提高手衛(wèi)生依從性課件
- 《高職應(yīng)用數(shù)學(xué)》(教案)
評(píng)論
0/150
提交評(píng)論