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

  • 發(fā)布時(shí)間:2024-09-15 16:21:23
  • 來(lái)源:本站整理
  • 閱讀:
導(dǎo)讀:
    03年管信的考試題目上機(jī)練習(xí)   ?。ㄒ唬﹦?chuàng)建數(shù)據(jù)庫(kù)    1.按下列要求建立數(shù)據(jù)庫(kù)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?馮岳陽(yáng)?女?80-08-15?
  03年管信的考試題目上機(jī)練習(xí)

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

1.按下列要求建立數(shù)據(jù)庫(kù)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?馮岳陽(yáng)?女?80-08-15?82?95

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

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

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

2.按下列要求編寫(xiě)命令文件P1.PRG .

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

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

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

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

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

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

⑦將數(shù)據(jù)庫(kù)ST1中姓名含有‘安’字的記錄復(fù)制成數(shù)據(jù)庫(kù)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ū)動(dòng)器為A .即可在A驅(qū)動(dòng)器中建立文件P1.PRG.

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

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

(二)窗口設(shè)計(jì)

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

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

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

(10,15)

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

(20,65)

「解答」

用命令MODIFY COMMAND P2?來(lái)建立程序文件P2.PRG

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

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

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

前一條記錄。

參考程序如下:

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é)?號(hào):’+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)建立一個(gè)名為WINB,標(biāo)題為‘姓名查詢’的窗口。

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

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

(10,15)

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

(20,65)

「解答」

用命令MODIFY COMMAND P3?來(lái)建立程序文件P3.PRG.

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

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

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

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

使用了命令:

FIND? STXM?

或?SEEK?STXM .?

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

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

未找到,記錄指針指向庫(kù)文件尾部, 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‘請(qǐng)輸入學(xué)號(hào)’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ù)庫(kù):’+STR(SJK,3)

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

ELSE

?‘無(wú)此學(xué)號(hào)’

ACCEPT‘請(qǐng)輸入姓名’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ù)庫(kù):’+STR(SJK,3)

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

ELSE

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

ENDIF

ENDIF



WAIT

USE

RELEASE WINDOW WINB

SET TALK ON

RETURN

(三)屏幕設(shè)計(jì)

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

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

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

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

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

「解答」

操作要點(diǎn)如下:

①打開(kāi)屏幕設(shè)計(jì)窗口

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

②設(shè)計(jì)屏幕

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

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

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ù)庫(kù)文件P4.SCX及屏幕信息的備注文件P4.SCT.

④生成屏幕程序

Program / Generate

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

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

⑤運(yùn)行屏幕程序

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

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

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

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

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

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

「解答」

操作要點(diǎn)如下:

①打開(kāi)屏幕設(shè)計(jì)窗口

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

②設(shè)計(jì)屏幕

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

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

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

Input…?ST1.XM

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

單擊畫(huà)矩形工具?將上述對(duì)象圍繞在矩形框內(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è)置?同上機(jī)練習(xí)題(三) 1. )

③保存

File / Save?

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

④生成屏幕程序

Program / Generate / Generate?

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

⑤運(yùn)行屏幕程序

DO P5.SPR?

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

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

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

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

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

「解答」

操作要點(diǎn)如下:

①打開(kāi)屏幕設(shè)計(jì)窗口

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

②設(shè)計(jì)屏幕

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

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

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

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

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

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

單擊字段工具?在彈出的對(duì)話框中,設(shè)置一個(gè)日期型內(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ù)庫(kù)文件P6.SCX及屏幕信息的備注文件P6.SCT.

④生成屏幕程序

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

⑤運(yùn)行屏幕程序?DO P6.SPR

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

(四)菜單設(shè)計(jì)

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

菜單欄菜?單?項(xiàng)程序文件名

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

瀏覽記錄LL.SPR

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

姓名查詢XM.SPR

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

返回到WINDOWS桌面

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

「解答」

操作要點(diǎn)如下:

①打開(kāi)菜單設(shè)計(jì)窗口

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

器窗口。

②設(shè)計(jì)主菜單選項(xiàng)

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

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

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

③設(shè)計(jì)子菜單選項(xiàng)

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

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

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

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

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

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

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

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

子菜單選項(xiàng)‘返回到FOXPRO’, Result框中選擇Procedure,單擊Create,在對(duì)話框中輸入命令:

CLEAR

MODIFY WINDOW SCREEN

SET SYSMENU TO DE**ULT

ACTIVATE WINDOW COMMAND

RETURN

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

QUIT

④保存?File / Save

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

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

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

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

文件P7.SPR.

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

主菜單顯示如下:

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

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

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

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

③將管理信息GLXX的成績(jī)分為四檔:

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

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

「解答」

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

用命令MODIFY COMMAND P8?來(lái)建立程序文件P8.PRG .

參考程序如下:

SET TALK OFF

CLEAR

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

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.按下列要求編寫(xiě)程序文件P9.PRG .

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

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

若密碼不正確,顯示“第幾次密碼錯(cuò),請(qǐng)重新輸入!”。

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

「解答」

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

SET CONSOLE OFF

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

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

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

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

用命令MODIFY COMMAND P9?來(lái)建立程序文件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 '請(qǐng)輸入密碼******'

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

?'密碼錯(cuò)誤,退出!'

WAIT WIND

QUIT

ELSE

?

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

WAIT WIND

N=N+1

ENDIF

ENDIF

ENDDO

RELEASE WINDOW MMW

SET TALK ON

RETURN

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

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

按下列要求編寫(xiě)程序文件P10.PRG .

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

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

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

「解答」

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

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

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

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

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

SET TALK OFF

CLEAR

CLEAR ALL

USE TX

FL=.T.

DO WHILE FL

CLEAR

MXM=SPACE(6)

@10,10 SAY '請(qǐng)輸入姓名' GET MXM

READ

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

EXIT

ENDIF

LOCATE FOR XM=MXM

IF FOUND()=.T.

DISPLAY

ELSE

? '查無(wú)此人'

ENDIF

WAIT

ENDDO

USE

SET TALK ON

RETURN

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

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

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

的SM.

「解答」

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

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

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

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

COUNT TO TJSM WHILE SM=MSM

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

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

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

用命令MODIFY COMMAND P11?來(lái)建立程序文件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)已存在兩個(gè)數(shù)據(jù)庫(kù),學(xué)生信息數(shù)據(jù)庫(kù)ST.DBF,其字段有:

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

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

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

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

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

學(xué)號(hào)?姓名?平均成績(jī)

XXXX?XXX?XX.X

「解答」

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

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

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

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

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

索引。

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

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

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

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

每個(gè)學(xué)號(hào)XH所對(duì)應(yīng)的學(xué)生,?可以選讀多門(mén)課程。?從ST的第一個(gè)記錄的XH數(shù)值開(kāi)始,

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

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

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

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

別名- 字段名

或?別名。字段名

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

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

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

SET TALK OFF

CLEAR

CLEAR ALL

SELECT B

PCJ=0

USE KCCJ

INDEX ON XH TO KCCJID

SELECT A

USE ST

? '學(xué)號(hào)'+SPACE(4)+'姓名'+SPACE(4)+'平均成績(jī)'

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)已存在兩個(gè)數(shù)據(jù)庫(kù),學(xué)生信息數(shù)據(jù)庫(kù)ST.DBF,其字段有:

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

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

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

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

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

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

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

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

XXXX?XXX?XX?XX

「解答」

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

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

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

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

SET TALK OFF

CLEAR

CLEAR ALL

SELECT A

USE ST

ACCEPT '請(qǐng)輸入姓名' TO MXM

LOCATE FOR XM=ALLTRIM(MXM)

IF FOUND()

SELECT B

USE CJ

LOCATE FOR XH=ST- XH

SELECT A

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

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

ELSE

? '查無(wú)此人'

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 '請(qǐng)輸入姓名' TO MXM

LOCATE FOR XM=ALLTRIM(MXM)

IF FOUND()

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

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

ELSE

? '查無(wú)此人'

ENDIF

SET RELATION TO

CLOSE ALL

SET TALK ON

RETURN

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

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

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

的課程名KCM .

「解答」

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

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

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

用命令MODIFY COMMAND P14?來(lái)建立程序文件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

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

ENDIF

ENDDO

USE

SET TALK ON

RETURN

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

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

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

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

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

SR≤1000?征稅0 %

1000 SR≤2000?征稅5 %

2000 SR≤3000?征稅10 %

SR 3000?征稅20 %

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

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

「解答」

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

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

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

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

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

別名- 字段名

因而

SE=ZGR- SR*TAX

SJSR=ZGR- SR-SE

在計(jì)算過(guò)程中,若庫(kù)ZGR中記錄在庫(kù)ZGS中沒(méi)有,則要添加。?若庫(kù)ZGS中的記錄在庫(kù)ZGR

中沒(méi)有,則SE和SJSR均為0.

用命令MODIFY COMMAND P15?來(lái)建立程序文件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)閱讀