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