365網(wǎng)友提供計算機信息管理試題

  • 發(fā)布時間:2024-09-15 16:21:23
  • 來源:本站整理
  • 閱讀:
導(dǎo)讀:
    03年管信的考試題目上機練習(xí)   ?。ㄒ唬﹦?chuàng)建數(shù)據(jù)庫    1.按下列要求建立數(shù)據(jù)庫ST1.DBF .    XH(C,6)?XM(C,8)?XB(C,2)?CS(D,8)?SJK(N,3)?GLXX(N,3)    200101?安潛光?男?82-08-25?70?90    200114?毛?皓?男?83-06-08?65?70    200118?馮岳陽?女?80-08-15?
  03年管信的考試題目上機練習(xí)

(一)創(chuàng)建數(shù)據(jù)庫

1.按下列要求建立數(shù)據(jù)庫ST1.DBF .

XH(C,6)?XM(C,8)?XB(C,2)?CS(D,8)?SJK(N,3)?GLXX(N,3)

200101?安潛光?男?82-08-25?70?90

200114?毛?皓?男?83-06-08?65?70

200118?馮岳陽?女?80-08-15?82?95

200205?戴曉霞?女?81-07-18?60?65

200218?閆安雪?男?83-05-08?80?88

(XH、XM、XB、CS、SJK、GLXX分別表示:學(xué)號、姓名、性別、出生日期、數(shù)據(jù)庫、管理信息)

2.按下列要求編寫命令文件P1.PRG .

①復(fù)制數(shù)據(jù)庫ST1的結(jié)構(gòu),生成數(shù)據(jù)庫ST2.

②復(fù)制數(shù)據(jù)庫ST1的結(jié)構(gòu),生成數(shù)據(jù)庫ST3,其中只含字段XM、GLXX及SJK.

③將數(shù)據(jù)庫ST1復(fù)制成ST4.

④將數(shù)據(jù)庫ST1中,滿足80≤GLXX≤90的XM及GLXX復(fù)制成數(shù)據(jù)庫ST5.

⑤將數(shù)據(jù)庫ST1中1983年出生的男學(xué)生的記錄復(fù)制成數(shù)據(jù)庫ST6.

⑥將數(shù)據(jù)庫ST1中學(xué)號最后二位為‘18’的記錄復(fù)制成數(shù)據(jù)庫ST7.

⑦將數(shù)據(jù)庫ST1中姓名含有‘安’字的記錄復(fù)制成數(shù)據(jù)庫ST8.

「解答」

在COMMAND窗口中,輸入命令:?MODIFY?COMMMAND?P1

然后,在編輯窗口中輸入下列命令組。

USE ST1

COPY STRUCTURE TO ST2

COPY STRUCTURE TO ST3 FIELDS XM, GLXX, SJK

COPY TO ST4

COPY TO ST5 FIELDS XM, GLXX FOR GLXX =80 .AND. GLXX =90

COPY TO ST6 FOR SUBSTR(DTOC(CS),1,2)=‘83’。AND. XB=‘男’

COPY TO ST7 FOR SUBSTR(XH,5,2)=‘18’

COPY TO ST8 FOR‘安’$ XM

RETURN

最后,按Ctrl+W保存退出。

如果在COMMAND窗口中,先輸入命令:

SET DE**UAL TO A:

設(shè)置當(dāng)前驅(qū)動器為A .即可在A驅(qū)動器中建立文件P1.PRG.

如果數(shù)據(jù)庫文件沒有打開,要使用命令

COPY?FILE? 源文件名 ?TO? 目標(biāo)文件名 來復(fù)制文件。

(二)窗口設(shè)計

1.按下列要求編制窗口設(shè)計模塊程序文件P2.PRG .

①在位置(10,15)到(20,65)建立一個名為WINA,標(biāo)題為‘顯示記錄’的窗口。

②在該窗口中,按下圖所示的格式,逐條顯示數(shù)據(jù)庫ST1.DBF的記錄信息。

(10,15)

顯示記錄?姓名:XXX?學(xué)?號:XXXXXX?性別:X?出生日期:XX-XX-XX

(20,65)

「解答」

用命令MODIFY COMMAND P2?來建立程序文件P2.PRG

先定義窗口的名字、大小、標(biāo)題等,使用時要激活窗口,結(jié)束要釋放窗口。

使用數(shù)據(jù)庫先要打開,最后要關(guān)閉。

在窗口中按要求格式顯示一條記錄后,要用WAIT命令暫停一下,否則,后一條記錄會覆蓋

前一條記錄。

參考程序如下:

SET TALK OFF

CLEAR

DEFINE WINDOW WINA FROM 10,15 TO 20,65 FONT 'T黑體',11 TITLE‘顯示記錄’

ACTIVATE WINDOW WINA

USE ST1

DO WHILE .NOT. EOF()

@2,2 SAY‘姓名:’+XM

@2,25 SAY‘學(xué)?號:’+XH

@4,2 SAY‘性別:’+XB

@4,25 SAY‘出生日期:’+DTOC(CS)

WAIT

SKIP

ENDDO

USE

RELEASE WINDOW WINA

SET TALK ON

RETURN

2.按下列要求編制程序文件P3.PRG .

①在位置(10,15)到(20,65)建立一個名為WINB,標(biāo)題為‘姓名查詢’的窗口。

②對數(shù)據(jù)庫ST1.DBF的記錄進(jìn)行查看:先輸入學(xué)號查找,若無此學(xué)號,再輸入姓名查找記錄。

找到了,則在窗口中按下圖所示的格式顯示該記錄信息,否則顯示‘查無此學(xué)生’。

(10,15)

姓名查詢?姓?名:XXX?出生日期:XX-XX-XX?數(shù)據(jù)庫:XX?管理信息:XX

(20,65)

「解答」

用命令MODIFY COMMAND P3?來建立程序文件P3.PRG.

查找是從大量記錄中找出滿足條件的記錄,把記錄指針定位在要查找的記錄上。

查找有兩種方式:順序查詢和索引查詢。

題中按學(xué)號查找是采用順序查詢,命令為?LOCATE.?

按姓名查找是采用索引查詢,它必須在姓名XM為關(guān)鍵字段進(jìn)行索引的基礎(chǔ)上進(jìn)行,程序中

使用了命令:

FIND? STXM?

或?SEEK?STXM .?

可以通過FOUND()或EOF()函數(shù)來判斷是否查到記錄。

查到時,記錄指針總是指向第一個滿足條件的記錄,此時FOUND()函數(shù)為真, EOF()函數(shù)為假。

未找到,記錄指針指向庫文件尾部, FOUND()函數(shù)為假, EOF()函數(shù)為真。

參考程序如下:

SET TALK OFF

CLEAR

DEFINE WINDOW WINB FROM 10,15 TO 20,65 FONT 'T黑體',11 TITLE‘姓名查詢’

ACTIVATE WINDOW WINB

USE ST1

ACCEPT‘請輸入學(xué)號’TO STXH

LOCATE FOR XH=STXH

IF .NOT. EOF()

CLEAR

@2,2 SAY‘姓?名:’+XM

@2,25 SAY‘出生日期:’+DTOC(CS)

@4,2 SAY‘?dāng)?shù)據(jù)庫:’+STR(SJK,3)

@4,25 SAY‘管理信息:’+STR(GLXX,3)

ELSE

?‘無此學(xué)號’

ACCEPT‘請輸入姓名’TO STXM

INDEX ON XM TO STID

FIND STXM

IF .NOT. EOF()

CLEAR

@2,2 SAY‘姓?名:’+XM

@2,25 SAY‘出生日期:’+DTOC(CS)

@4,2 SAY‘?dāng)?shù)據(jù)庫:’+STR(SJK,3)

@4,25 SAY‘管理信息:’+STR(GLXX,3)

ELSE

?‘查無此學(xué)生’

ENDIF

ENDIF



WAIT

USE

RELEASE WINDOW WINB

SET TALK ON

RETURN

(三)屏幕設(shè)計

1.利用屏幕生成器,設(shè)計一個如下圖所示的屏幕文件P4.SPR .

屏幕要求:標(biāo)題——‘歡迎’

文本‘歡迎你參加自學(xué)考試’——字體為隸書,字號為22,顏色為紅色

進(jìn)入按鈕——功能設(shè)定為執(zhí)行命令:?WAIT WINDOW?‘該功能進(jìn)入系統(tǒng)’

退出按鈕——功能設(shè)定為退至FOXPRO主窗口?

「解答」

操作要點如下:

①打開屏幕設(shè)計窗口

用命令CREATE SCREEN P4,或系統(tǒng)菜單File / New / Screen,單擊New,打開屏幕生成器窗口。

②設(shè)計屏幕

單擊文本工具?創(chuàng)建文本對象?‘歡迎你參加自學(xué)考試’

Object / Font?設(shè)置字體,字號

Object / Pen Color?設(shè)置顏色

Screen / Layout / Title?設(shè)置標(biāo)題?歡迎

單擊命令按鈕工具?設(shè)置‘進(jìn)入’按鈕

Push button Prompts:?進(jìn)入

Variable…?JR

Valid…?WAIT WINDOW?‘該功能進(jìn)入系統(tǒng)’

單擊命令按鈕工具?設(shè)置‘退出’按鈕

Push button Prompts:?退出

Variable…?TC

Options:?選Terminate READ On Selection

③保存

File / Save?

保存,生成屏幕信息的數(shù)據(jù)庫文件P4.SCX及屏幕信息的備注文件P4.SCT.

④生成屏幕程序

Program / Generate

在彈出的對話框中,選Options…,可以設(shè)置設(shè)計者的注釋信息,如姓名、單位、地址、郵編等,

它們自動產(chǎn)生在屏幕程序的開頭。最后,單擊Generate ,生成屏幕程序文件P4.SPR.

⑤運行屏幕程序

DO P4.SPR?顯示出題意所要求的屏幕程序文件P4.SPR.

2.利用屏幕生成器,設(shè)計一個如下圖所示的逐條顯示數(shù)據(jù)庫ST1記錄的屏幕文件P5.SPR .

屏幕要求:標(biāo)?題——‘顯示記錄’

上一條按鈕——功能為顯示上一條記錄

下一條按鈕——功能為顯示下一條記錄

退出按鈕——功能為退至FOXPRO主窗口

「解答」

操作要點如下:

①打開屏幕設(shè)計窗口

用命令CREATE SCREEN P5 ;或用系統(tǒng)菜單File / New / Screen,單擊New,打開屏幕生成器窗口。

②設(shè)計屏幕

Screen / Layout / Title?設(shè)置標(biāo)題?顯示記錄

單擊文本工具?創(chuàng)建文本對象?姓名?

單擊字段工具?設(shè)置字段對象?XM

Input…?ST1.XM

類似方法可設(shè)置文本對象:學(xué)號、管理信息、數(shù)據(jù)庫;?字段對象XH、GLXX、SJK

單擊畫矩形工具?將上述對象圍繞在矩形框內(nèi)

單擊命令按鈕工具?設(shè)置上一條按鈕

Push button Prompts:?上一條

Variable…?SYT

Valid…?輸入下列代碼:

IF .NOT. BOF()

SKIP–1

ELSE

GO BOTTOM

ENDIF

SHOW GETS

RETURN?

單擊命令按鈕工具?設(shè)置下一條按鈕

Push button Prompts:?下一條

Variable…?XYT

Valid…?輸入下列代碼:

IF .NOT. EOF()

SKIP?

ELSE

GO TOP

ENDIF

SHOW GETS

RETURN?

(退出按鈕的設(shè)置?同上機練習(xí)題(三) 1. )

③保存

File / Save?

保存,生成屏幕信息的數(shù)據(jù)庫文件P5.SCX及屏幕信息的備注文件P5.SCT.

④生成屏幕程序

Program / Generate / Generate?

生成屏幕程序文件P5.SPR……

⑤運行屏幕程序

DO P5.SPR?

在窗口中按上(或下)一條按鈕,可以向上(或下)逐條顯示記錄。

3.利用屏幕生成器,設(shè)計一個如下圖所示的按出生日期查詢數(shù)據(jù)庫ST1記錄的屏幕文件P6.SPR .

屏幕要求:標(biāo)?題——‘按日期查詢’

查詢按鈕——輸入出生日期,查到了在屏幕中顯示記錄,否則顯示白空

(類似地可以設(shè)計按姓名查詢或按數(shù)據(jù)庫分?jǐn)?shù)查詢的屏幕文件)

「解答」

操作要點如下:

①打開屏幕設(shè)計窗口

用命令CREATE SCREEN P6,或系統(tǒng)菜單File / New / Screen,單擊New,打開屏幕生成器窗口。

②設(shè)計屏幕

Screen / Layout / Title?設(shè)置標(biāo)題?按日期查詢

單擊文本工具?創(chuàng)建文本對象?姓名、學(xué)號、數(shù)據(jù)庫、管理信息?

單擊字段工具?設(shè)置字段對象?XM、XH、SJK、?GLXX

(設(shè)置方法同上機練習(xí)題(三) 2. )

單擊畫矩形工具?將上述對象圍繞在矩形框內(nèi)

單擊文本工具?創(chuàng)建文本對象?輸入出生日期

單擊字段工具?在彈出的對話框中,設(shè)置一個日期型內(nèi)存變量MCS

Input…?MCS

Format…?選取Date

(若按姓名查詢,應(yīng)選取Character )

(若按分?jǐn)?shù)查詢,應(yīng)選取Numeric )

單擊命令按鈕工具?設(shè)置查詢按鈕

Push button Prompts:?查詢

Variable…?CXCS

Valid…?輸入下列代碼

LOCATE FOR CS=MCS

SHOW GETS

RETURN

③保存?File / Save?

保存,生成屏幕信息的數(shù)據(jù)庫文件P6.SCX及屏幕信息的備注文件P6.SCT.

④生成屏幕程序

Program / Generate / Generate?生成屏幕程序文件P6.SPR……

⑤運行屏幕程序?DO P6.SPR

在輸入出生日期框中,輸入欲查找的日期,單擊查詢按鈕,顯示查詢結(jié)果。

(四)菜單設(shè)計

有一個學(xué)生信息管理系統(tǒng),它的菜單選項及對應(yīng)的模塊程序(假設(shè)已存在)如下表所示:

菜單欄菜?單?項程序文件名

數(shù)據(jù)編輯追加記錄ZJ.SPR

瀏覽記錄LL.SPR

數(shù)據(jù)查詢學(xué)號查詢XH.SPR

姓名查詢XM.SPR

退出系統(tǒng)返回到FOXPRO

返回到WINDOWS桌面

使用菜單生成器,生成學(xué)生信息管理系統(tǒng)的主菜單程序文件P7.MPR .

「解答」

操作要點如下:

①打開菜單設(shè)計窗口

用命令CREATE MENU P7 ;或系統(tǒng)菜單File / New / Menu,單擊New,?打開菜單生成

器窗口。

②設(shè)計主菜單選項

在上圖中, Menu Level框處顯示Menu Bar,在此狀態(tài)下設(shè)計主菜單選項。

Prompt框中依次輸入主菜單選項‘?dāng)?shù)據(jù)編輯’、‘?dāng)?shù)據(jù)查詢’和‘退出系統(tǒng)’

Result下拉列表框中依次選擇Submenu?

③設(shè)計子菜單選項

在上圖中,選中‘?dāng)?shù)據(jù)編輯’項,單擊Create ,?此時, Menu Level框處顯示‘?dāng)?shù)據(jù)編輯’,

在此狀態(tài)下,設(shè)計‘?dāng)?shù)據(jù)編輯’菜單項的子菜單。

Prompt框中依次輸入子菜單選項‘追加記錄’及‘瀏覽記錄’

Result?下拉列表框中依次選擇Command

對‘追加記錄’項,輸入命令do ZJ.SPR,表示調(diào)用‘追加記錄’的屏幕文件。

對‘瀏覽記錄’項,輸入命令do LL.SPR,表示調(diào)用‘瀏覽記錄’的屏幕文件。

單擊Menu Level的下拉列表,選擇Menu Bar,返回上一層菜單,用同樣方法可以設(shè)計‘?dāng)?shù)據(jù)

查詢‘和’退出系統(tǒng)‘的子菜單選項。

子菜單選項‘返回到FOXPRO’, Result框中選擇Procedure,單擊Create,在對話框中輸入命令:

CLEAR

MODIFY WINDOW SCREEN

SET SYSMENU TO DE**ULT

ACTIVATE WINDOW COMMAND

RETURN

子菜單選項‘返回到WINDOWS桌面’, Result框中選擇Command,輸入命令:

QUIT

④保存?File / Save

生成菜單信息的數(shù)據(jù)庫文件P7.MNX及菜單信息的備注文件P7.MNT.

⑤生成菜單程序文件?Program / Generate?

在彈出的對話框中,?選擇Comment Options…,?可以設(shè)置設(shè)計者的注釋信息,如姓名、

單位、地址、郵編等,它們自動產(chǎn)生在菜單程序的開頭。?最后,單擊Generate ,生成菜單程序

文件P7.SPR.

⑥顯示主菜單窗口?Do?P7.MPR

主菜單顯示如下:

(五)數(shù)據(jù)管理模塊程序設(shè)計

1.按下列要求編制模塊程序文件P8.PRG .

①該模塊的功能是在窗口中對數(shù)據(jù)庫ST1統(tǒng)計數(shù)據(jù)。

②窗口位置為(5,10)到(12,60),窗口名為WIN ,標(biāo)題為“統(tǒng)計記錄”。

③將管理信息GLXX的成績分為四檔:

優(yōu)秀(GLXX≥85)?良好(70≤GLXX 85)?及格(60≤GLXX 70)?不及格(GLXX 60)

統(tǒng)計各檔成績的人數(shù),并在窗口中顯示統(tǒng)計結(jié)果。

「解答」

在程序中用命令DIMENSION S(4)來定義一數(shù)組,存放統(tǒng)計GLXX四檔成績的人數(shù)。

用命令MODIFY COMMAND P8?來建立程序文件P8.PRG .

參考程序如下:

SET TALK OFF

CLEAR

DEFINE WINDOW WIN FROM 5,10 TO 12,60 FONT 'T黑體',11 TITLE '統(tǒng)計記錄'

DIMENSION S(4)

STORE 0 TO S

USE ST1

DO WHILE .NOT.EOF()

DO CASE

CASE GLXX =85

S(1)=S(1)+1

CASE GLXX =70 .AND. GLXX 85

S(2)=S(2)+1

CASE GLXX =60 .AND. GLXX 70

S(3)=S(3)+1

CASE GLXX 60

S(4)=S(4)+1

ENDCASE

SKIP

ENDDO

ACTIVATE WINDOW WIN

@2,2 SAY '優(yōu)秀:'+STR(S(1),3)+'人'

@2,25 SAY '良好:'+STR(S(2),3)+'人'

@4,2 SAY '及格:'+STR(S(3),3)+'人'

@4,25 SAY '不及格:'+STR(S(4),3)+'人'

WAIT WINDOW

USE

RELEASE WINDOW WIN

SET TALK ON

RETURN

2.按下列要求編寫程序文件P9.PRG .

①屏幕提示“請輸入密碼”,輸入時密碼不顯示,密碼設(shè)為大寫“GLXX”。

②若密碼正確,執(zhí)行打開數(shù)據(jù)庫ST1,顯示記錄命令。

若密碼不正確,顯示“第幾次密碼錯,請重新輸入!”。

③如果密碼已連續(xù)錯三次,第四次輸入再錯,則退至WINDOWS桌面。

「解答」

首先,定義一個名為MMW的窗口,標(biāo)題為‘密碼窗口’,然后激活它。在輸入密碼之前,用命令

SET CONSOLE OFF

來屏蔽顯示,起到保密效果。?輸入密碼之后,再恢復(fù)屏蔽顯示。

密碼保存在變量PSW中,函數(shù)UPPER(ALLTRIM(PSW))的作用,是將輸入的密碼,除去前后

空格后轉(zhuǎn)換成大寫字符。

輸入密碼的次數(shù)保存在變量N中。

用命令MODIFY COMMAND P9?來建立程序文件P9.PRG .

參考程序如下:

SET TALK OFF

CLEAR

CLEAR ALL

DEFINE WINDOW MMW FROM 10,5 TO 28,75 FONT 'T黑體',11 TITLE '密碼窗口'

N=1

DO WHILE .T.

ACTIVATE WINDOW MMW

@2,5 SAY '請輸入密碼******'

SET CONSOLE OFF

ACCEPT TO PSW

SET CONSOLE ON

IF UPPER(ALLTRIM(PSW))=='GLXX'

CLEAR

USE ST1

LIST

WAIT WIND

USE

EXIT

ELSE

IF N =4

CLEAR

?'密碼錯誤,退出!'

WAIT WIND

QUIT

ELSE

?

?'第'+STR(N,1)+'次密碼錯,請重新輸入!'

WAIT WIND

N=N+1

ENDIF

ENDIF

ENDDO

RELEASE WINDOW MMW

SET TALK ON

RETURN

3.現(xiàn)已有(假設(shè)已存在)通訊信息數(shù)據(jù)庫TX.DBF,其字段有:

XM (姓名,字符型) ,?DH (電話,字符型) ,?DZ (地址,字符型)

按下列要求編寫程序文件P10.PRG .

①用格式化輸入語句接收一個用戶姓名,在TX中進(jìn)行查找記錄。

②若找到,則顯示該用戶記錄,?找不到,則顯示“查無此用戶”。

③重復(fù)上述過程,直到接收的字符為“8888”時,結(jié)束程序的運行。

「解答」

現(xiàn)在假設(shè)數(shù)據(jù)庫TX.DBF已經(jīng)存在的前提之下來編寫程序,在調(diào)試程序時,可以創(chuàng)建數(shù)據(jù)庫,

并模擬輸入一些記錄來進(jìn)行調(diào)試

程序中使用循環(huán)語句DO WHILE來實現(xiàn)連續(xù)查找,邏輯變量FL作為循環(huán)的條件,其初值為。T. ,

一旦輸入字符為‘8888’時,則將變量FL置為。F. ,或者用命令EXIT退出循環(huán),結(jié)束程序的運行。

用命令MODIFY COMMAND P10?來建立程序文件P10.PRG ,參考程序如下:

SET TALK OFF

CLEAR

CLEAR ALL

USE TX

FL=.T.

DO WHILE FL

CLEAR

MXM=SPACE(6)

@10,10 SAY '請輸入姓名' GET MXM

READ

IF FL=(ALLTRIM(MXM)='8888')

EXIT

ENDIF

LOCATE FOR XM=MXM

IF FOUND()=.T.

DISPLAY

ELSE

? '查無此人'

ENDIF

WAIT

ENDDO

USE

SET TALK ON

RETURN

4.現(xiàn)已有商品信息數(shù)據(jù)庫SP.DBF,其字段有:

SH (商品代號,字符型) ,?SM (商品名稱,字符型) ,?GG (規(guī)格,字符型)

按下列要求編寫程序文件P11.PRG ,?其功能是查找顯示出同一商品名稱有兩種以上規(guī)格

的SM.

「解答」

設(shè)置變量TJSM為同一商品名稱的不同規(guī)格的種類數(shù)。

先對商品名稱字段SM進(jìn)行索引,將商品名稱按不相同的分類集中在一起,?然后再統(tǒng)計每

一類商品名稱有多少種規(guī)格。

在統(tǒng)計中,先將每類的商品名稱SM賦給內(nèi)存變量MSM,暫時保存,利用命令

COUNT TO TJSM WHILE SM=MSM

統(tǒng)計該類中各種規(guī)格數(shù),并賦給變量TJSM.?當(dāng)TJSM =2時,即題意中所要查找的商品名稱。

條件子句WHILE SM=MSM的作用是:從當(dāng)前記錄開始,直到不滿足條件的記錄為止,對所

有已滿足條件的記錄進(jìn)行統(tǒng)計,實質(zhì)上就是起到統(tǒng)計每一類商品名稱的各種規(guī)格數(shù)的條件。

用命令MODIFY COMMAND P11?來建立程序文件P11.PRG ,參考程序如下:

SET TALK OFF

CLEAR

CLEAR ALL

TJSM=0

USE SP

INDEX ON SM TO SPID

DO WHILE NOT EOF()

MSM=SM

COUNT TO TJSM WHILE SM=MSM

IF TJSM =2

? '兩種以上規(guī)格的商品名稱有: '+ MSM

ENDIF

ENDDO

USE

SET TALK ON

RETURN

5.現(xiàn)已存在兩個數(shù)據(jù)庫,學(xué)生信息數(shù)據(jù)庫ST.DBF,其字段有:

XH (學(xué)號,字符型) ,?XM (姓名,字符型) ,?ZL (專業(yè),字符型)

成績數(shù)據(jù)庫KCCJ.DBF,其字段有:

XH (學(xué)號,字符型) ,?KCM (課程名,字符型) ,?CJ (成績,數(shù)值型)

按下列要求編寫程序文件P12.PRG ,其功能是統(tǒng)計每個學(xué)生各門課程的平均成績PCJ,

并在屏幕中按下列格式輸出:

學(xué)號?姓名?平均成績

XXXX?XXX?XX.X

「解答」

該題涉及到兩個數(shù)據(jù)庫之間的操作,一般情況下,要進(jìn)行關(guān)聯(lián)操作。其目的是將兩個在不同工作

區(qū)中打開的庫文件聯(lián)系起來,以便當(dāng)一個關(guān)聯(lián)庫文件的記錄指針移動時,與之被關(guān)聯(lián)庫文件的記錄

指針也隨之相應(yīng)移動。

建立關(guān)聯(lián)的方式可以通過索引關(guān)鍵字。

建立關(guān)聯(lián)的條件是兩個數(shù)據(jù)庫需在不同工作區(qū)中打開,?且被關(guān)聯(lián)庫文件需要按關(guān)聯(lián)字段進(jìn)行

索引。

關(guān)聯(lián)的命令為

SET?RELATION?TO?關(guān)聯(lián)字段名?INTO?被關(guān)聯(lián)庫名

在程序中, 1號工作區(qū)中打開關(guān)聯(lián)庫文件ST , 2號工作區(qū)中打開被關(guān)聯(lián)庫文件KCCJ,按關(guān)聯(lián)

字段XH建立關(guān)聯(lián)。

每個學(xué)號XH所對應(yīng)的學(xué)生,?可以選讀多門課程。?從ST的第一個記錄的XH數(shù)值開始,

在KCCJ中統(tǒng)計出該XH所對應(yīng)的各門課程的平均成績PCJ,并按照要求格式輸出。

依次循環(huán),即可統(tǒng)計出每個學(xué)生各門課程的平均成績。

由于該題在多庫之間的操作,從當(dāng)前工作區(qū)訪問其它工作區(qū)打開的庫文件中的某個字段時,

要在該字段名前加上前綴,?即:

別名- 字段名

或?別名。字段名

打開數(shù)據(jù)庫時,若沒有指定別名,則別名與庫文件同名。?因此,如果當(dāng)前2號工作區(qū)中打開的

是KCCJ,則XH是庫KCCJ中的學(xué)號,而ST- XH是另一工作區(qū)庫ST中的學(xué)號。

用命令MODIFY COMMAND P12?來建立程序文件P12.PRG ,參考程序如下:

SET TALK OFF

CLEAR

CLEAR ALL

SELECT B

PCJ=0

USE KCCJ

INDEX ON XH TO KCCJID

SELECT A

USE ST

? '學(xué)號'+SPACE(4)+'姓名'+SPACE(4)+'平均成績'

SET RELATION TO XH INTO KCCJ

SCAN

SELECT KCCJ

AVERAGE CJ TO PCJ WHILE XH=ST- XH

SELECT ST

? XH+SPACE(4)+XM+SPACE(4)+STR(PCJ,3)

ENDSCAN

SET RELATION TO

CLOSE ALL

SET TALK ON

RETURN

6.現(xiàn)已存在兩個數(shù)據(jù)庫,學(xué)生信息數(shù)據(jù)庫ST.DBF,其字段有:

XH (學(xué)號,字符型) ,?XM (姓名,字符型) ,?DZ (地址,字符型)

成績數(shù)據(jù)庫CJ.DBF,其字段有:

XH (學(xué)號,字符型) , SJK (數(shù)據(jù)庫,數(shù)值型) , GLXX (管理信息,數(shù)值型)

按下列要求編寫程序文件P13.PRG ,?其功能是從鍵盤輸入一姓名,?在ST.DBF和CJ.DBF

中查找該學(xué)生的成績,

若找不到,則顯示“查無此學(xué)生”。

若查找到,則在屏幕中按下列格式顯示該學(xué)生的成績:

學(xué)號?姓名?數(shù)據(jù)庫?管理信息

XXXX?XXX?XX?XX

「解答」

將庫ST作為當(dāng)前庫,學(xué)號XH作為主鍵,輸入被查找的學(xué)生姓名,保存在變量MXM中。

在庫ST中進(jìn)行查找,當(dāng)找到時,將用該學(xué)生的學(xué)號XH再次作為查找對象,在庫CJ中,

對外部鍵XH查找所對應(yīng)的記錄,這樣就可以在庫CJ中查到了該學(xué)生的SJK及GLXX成績。

用命令MODIFY COMMAND P13?來建立程序文件P13.PRG ,參考程序如下:

SET TALK OFF

CLEAR

CLEAR ALL

SELECT A

USE ST

ACCEPT '請輸入姓名' TO MXM

LOCATE FOR XM=ALLTRIM(MXM)

IF FOUND()

SELECT B

USE CJ

LOCATE FOR XH=ST- XH

SELECT A

? '學(xué)號'+SPACE(4)+'姓名'+SPACE(4)+'數(shù)據(jù)庫'+SPACE(4)+'管理信息'

? XH+SPACE(4)+XM+SPACE(4)+STR(CJ- SJK,3)+SPACE(4)+STR(CJ- GLXX,3)

ELSE

? '查無此人'

ENDIF

CLOSE ALL

SET TALK ON

RETURN

當(dāng)然,如果按主鍵XH將ST與CJ進(jìn)行關(guān)聯(lián),只需將上述程序修改一下即可,參考程序如下:

SET TALK OFF

CLEAR

CLEAR ALL

SELECT B

USE CJ

INDEX ON XH TO CJID

SELECT A

USE ST

SET RELATION TO XH INTO CJ

ACCEPT '請輸入姓名' TO MXM

LOCATE FOR XM=ALLTRIM(MXM)

IF FOUND()

? '學(xué)號'+SPACE(4)+'姓名'+SPACE(4)+'數(shù)據(jù)庫'+SPACE(4)+'管理信息'

? XH+SPACE(4)+XM+SPACE(4)+STR(CJ- SJK,3)+SPACE(4)+STR(CJ- GLXX,3)

ELSE

? '查無此人'

ENDIF

SET RELATION TO

CLOSE ALL

SET TALK ON

RETURN

7.現(xiàn)已存在兩個課程數(shù)據(jù)庫KC1.DBF和KC2.DBF?(內(nèi)容不完全相同) ,它們具有相同的結(jié)構(gòu),

其字段有:?KCM (課程名,字符型) ,?XS (學(xué)時數(shù),數(shù)值型) ,?ZL (專業(yè),字符型)

按下列要求編寫程序文件P14.PRG,其功能為查找并顯示同時出現(xiàn)在庫KC1和庫KC2中

的課程名KCM .

「解答」

將庫KC1作為當(dāng)前庫,把庫KC2的全部記錄添加到KC1的尾部,再按課程名KCM進(jìn)行索引,

這樣可以按課程名不相同的分類集中在一起。?然后,再統(tǒng)計每一類課程名的數(shù)量TJ .

若TJ=2 ,則說明了該類課程名是同時出現(xiàn)在兩個數(shù)據(jù)庫中。

用命令MODIFY COMMAND P14?來建立程序文件P14.PRG ,參考程序如下:

SET TALK OFF

CLEAR

CLEAR ALL

USE KC1

APPEND FROM KC2

INDEX ON KCM TO KCMID

DO WHILE NOT EOF()

MKCM=KCM

COUNT TO TJ WHILE KCM=MKCM

IF TJ=2

?‘同時出現(xiàn)在KC1和KC2中的課程名有:’+ MKCM

ENDIF

ENDDO

USE

SET TALK ON

RETURN

8.現(xiàn)已存在兩個數(shù)據(jù)庫,職工收入數(shù)據(jù)庫ZGR.DBF,其字段有:

GH (工號,字符型) ,?XM (姓名,字符型) ,?SR (收入,數(shù)值型)

納稅記錄數(shù)據(jù)庫ZGS.DBF,其字段有:

GH (工號,字符型) ,?SE (稅額,數(shù)值型) ,?SJSR (實際凈收入,數(shù)值型)

若征稅標(biāo)準(zhǔn)規(guī)定如下:

SR≤1000?征稅0 %

1000 SR≤2000?征稅5 %

2000 SR≤3000?征稅10 %

SR 3000?征稅20 %

按下列要求編寫程序文件P15.PRG ,?其功能是根據(jù)ZGR.DBF中收入SR及征稅標(biāo)準(zhǔn),

計算每個職工的稅額SE和實際凈收入SJSR ,然后相應(yīng)填入ZGS.DBF中的SE和SJSR.

「解答」

在1號工作區(qū)中打開ZGR,根據(jù)征稅標(biāo)準(zhǔn),先計算出征稅稅率TAX.

在2號工作區(qū)中打開ZGS,?求出稅額?SE=收入SR×稅率TAX

凈收入SJSR=收入SR-稅額SE

由于該題在多庫之間的操作,從當(dāng)前工作區(qū)訪問其它工作區(qū)打開的庫文件中的某個字段時,要在

該字段名前加上前綴,?即:

別名- 字段名

因而

SE=ZGR- SR*TAX

SJSR=ZGR- SR-SE

在計算過程中,若庫ZGR中記錄在庫ZGS中沒有,則要添加。?若庫ZGS中的記錄在庫ZGR

中沒有,則SE和SJSR均為0.

用命令MODIFY COMMAND P15?來建立程序文件P15.PRG ,參考程序如下:

SET TALK OFF

CLEAR

SELECT B

USE ZGS

REPLACE ALL SE WITH 0

REPLACE ALL SJSR WITH 0

SELECT A

USE ZGR

DO WHILE NOT EOF()

DO CASE

CASE SR 3000

TAX=0.2

CASE SR 2000 AND SR =3000

TAX=0.1

CASE SR 1000 AND SR =2000

TAX=0.05

OTHERWISE

TAX=0

ENDCASE

SELECT B

LOCATE FOR GH=ZGR- GH

IF NOT FOUND()

APPEND BLANK

REPLACE GH WITH ZGR- GH

ENDIF

REPLACE SE WITH ZGR- SR*TAX

REPLACE SJSR WITH ZGR- SR-SE

SELECT A

SKIP

ENDDO

SELECT B

LIST

CLOSE ALL

SET TALK ON

RETURN

相關(guān)閱讀