程序设计题.docx
《程序设计题.docx》由会员分享,可在线阅读,更多相关《程序设计题.docx(35页珍藏版)》请在冰豆网上搜索。
![程序设计题.docx](https://file1.bdocx.com/fileroot1/2023-1/23/b456bf23-a960-4392-9e1b-389259d15fcb/b456bf23-a960-4392-9e1b-389259d15fcb1.gif)
程序设计题
表下载
查询生成器:
1,2,3,4,15,
多表操作:
4,5,6,7,8,9,10,11,12,14,23,28(共11题)
单表操作:
13,16,17,18,19,(20,21),22,23,24,25,27,29(共13题)
1.在考生文件夹下有如下所示两个表文件:
仓库(仓库号(C10),城市(C10),面积(N8))
职工(仓库号(C10),职工号(C10),工资(N8))
请在考生文件夹下编写满足如下要求的程序PROG1:
检索出所有职工的工资都大于等于1220元的职工所管理的仓库信息,将结果保存在wh1(仓库号(C10),城市(C10),面积(N8))数据表文件中,并按面积降序排序。
仓库号城市面积
WH1北京370
WH2上海500
WH3广州200
WH4武汉400
仓库号职工号工资
WH2E11220
WH1E31210
WH2E41250
WH3E61230
WH1E71250
2.在考生文件夹下有如下所示两个表文件:
仓库(仓库号(C10),城市(C10),面积(N8))
职工(仓库号(C10),职工号(C10),工资(N8))
请在考生文件夹下编写满足如下要求的程序PROG1:
检索出有职工的工资大于1220元的职工所管理的仓库信息,将结果保存在wh1数据表(仓库号(C10),城市(C10),面积(N8))文件中,该文件的结构和仓库数据表文件的结构一致,并按面积升序排序。
3.在考生文件夹下包括三个数据表YISHENG.DBF(医生)、YAO.DBF(药品)、CHUFANG.DBF(处方),表结构如下:
YISHENG(职工号(N4),姓名(C8),职称(C8),部门(C6),年龄(N2))
YAO(药编号(N4),药名(C10),单位(C2),价格(N5),生产厂(C10))
CHUFANG(药编号(N4),数量(N2),日期(D8),职工号(N4),处方号(N4))
请在考生文件夹下编写满足如下要求的程序PROG1:
查询同一处方中,包含"感冒"两个字的药品的处方号、药名和生产厂,以及医生的姓名和年龄,把查询结果按处方号升序排序存入CC(姓名(C8),年龄(N2),处方号(N4),药名(C10),生产厂(C10))数据表中。
最后统计这些医生的人数(注意不是人次数),并在CC中追加一条记录,将人数填入该记录的处方号字段中。
职工号姓名职称部门年龄
1001杨阳主任医师内科45
1002王晓晨医师内科34
1003白晶医师内科33
1004赵彬医师内科27
1005于春鹏医士内科20
1006田园主任医师外科39
1007张妍医师外科32
1008孙佳医师外科31
1009李宇医士外科23
药编号药名单位价格生产厂
1复方甘草片瓶2.30同仁堂
2胃得乐瓶7.20西安制药厂
3感冒冲剂袋1.20同仁堂
4维生素C瓶9.40天津制药厂
5感冒通盒1.80上海制药厂
6维生素B2瓶7.60天津制药厂
7维生素B6瓶8.70天津制药厂
8康泰克盒11.00上海制药厂
9芬必得盒7.00西安制药厂
10青霉素盒24.00北京制药厂
11止疼散代8.10同仁堂
12先锋4号盒42.00北京制药厂
药编号数量日期职工号处方号
321999010710021
911999011410062
1211999011910013
321999022110014
511999032310015
121999040210036
421999042610047
611999050610058
1211999051710079
10119990524100310
11119990529100811
9119990601100812
2219990612100313
12119990623100614
3219990712100115
5119990725100416
7219990727100417
8119990730100318
10119990730100819
1219990731100220
4.(查询生成器)
在考生文件夹下有数据表stock_sl.dbf和stock_fk.dbf,表结构如下:
stock_sl(股票代码(C6),买入价(N7,2),现价(N7,2),持有数量(N6))
stock_fk(股票代码(C6),浮亏金额(N11,2))
请在考生文件夹下编写满足如下要求的程序PROG1:
(1)先根据表stock_fk复制生成表stock_fk1
(2)将现价比买入价低的股票信息存入stock_fk1表,其中:
浮亏金额=(买入价-现价)*持有数量
(3)根据stock_fk1表计算总浮亏金额,存入一个新表stock_z(浮亏金额(N11,2))中,该表最终只有一条记录。
股票代码(C6),买入价(N7,2),现价(N7,2),持有数量(N6)
60000010.007.481000
60000217.0015.362000
6000039.0010.403000
60000420.0012.764000
60000515.009.965000
60000111.0014.586000
60000710.007.481000
60000817.0015.362000
6000099.0010.403000
60001120.0012.764000
60001215.009.965000
60002011.0014.586000
60001410.007.481000
60001517.0015.362000
6000169.0010.403000
60001720.0012.764000
60001815.009.965000
60001911.0014.586000
5.在考生文件夹下有数据表文件“score_fs.dbf”,其表结构如下:
score_fs(学号(C10)、物理(N11)、高数(N11)、英语(N11)和平均分(N6,2))
成绩如果用-1表示,说明学生没有选学该门课程。
其中,该表前四个字段已有数据。
请在考生文件夹下编写满足如下要求的程序PROG1:
(1)计算每一个学生的平均分存入平均分字段。
注意:
分数为-1不记入平均分,例如一个学生的三门成绩存储的是90,-1,70,平均分应是80。
(2)根据上面的计算结果,生成一个新的表PJF(学号(C10),平均分(N6,2)),并且按平均分的降序排序,如果平均分相等,则按学号升序排序。
试完成上述要求,并调试运行菜单与程序。
学号(C10)、物理(N11)、高数(N11)、英语(N11)和平均分(N6,2)
2000241018990550.00
20002410278881000.00
200024103-170900.00
2000241048099770.00
2000241054399780.00
2000241064567890.00
20002410765-1640.00
2000241088990550.00
20002410978881000.00
200024110-170900.00
2000241118099770.00
2000241124399-10.00
20002411345-1890.00
20002411465-1640.00
2000241158990550.00
20002411678881000.00
2000241175670900.00
20002411880-1770.00
200024119-1-1780.00
2000241204567890.00
2000241216587640.00
操作步骤:
1:
使用MODICOMMPROG1命令进入编程窗口。
2:
使用USEscore_fs命令打开score_fs表。
3:
在score_fs表中循环
4:
menshu=0zongfen=0使每次循环开始时选课门数和总分为0
5;if物理<>-1then
menshu=menshu+1
zongfen=zongfen+物理
endif
if高数<>-1then
menshu=menshu+1
zongfen=zongfen+高数
endif
if英语<>-1then
menshu=menshu+1
zongfen=zongfen+英语
endif
依次判断是否选课
6:
replace平均分withzongfen/menshu
7:
使用sortfields学号,平均分topjfon平均分/d,学号生成要求的新表
8;关闭所有表
9:
使用CREATEMENUMENU1命令创建菜单。
6.在考生文件夹下有数据表stock_mm和stock_cs,表结构如下:
stock_mm(股票代码(C10),买卖标记(L1(.T.表示买进,.F.表示卖出)),单价(N10,2),本次数量(N10))
stock_cs(股票代码(C10),持仓数量(N10))
stock_mm表中一只股票对应多个记录,stock_cs表中一只股票对应一个记录.
请首先在考生文件夹下编写符合下列要求的程序PROG1.PRG:
(1)先根据表stock_cs复制生成表stock_cc;
(2)根据stock_mm统计每只股票的持仓数量,并将结果存放到stock_cc表;
计算方法:
买卖标记为.T.(表示买进),将本次数量加到相应股票的持仓数量;买卖标记为.F.(表示卖出),将本次数量从相应股票的持仓数量中减去。
(注意:
stock_cc表中的记录按股票代码从小到大顺序存放).
股票代码(C10),买卖标记(L1(.T.表示买进,.F.表示卖出)),单价(N10,2),本次数量(N10)
a123T20.00100
a123F21.0010
a234F24.00100
a345T234.0090
a234T59.00120
股票代码(C10),持仓数量
a123
a234
a345
7.在考生文件夹下有数据表CHENGJI.dbf和KECHENG.dbf,表结构如下:
CHENGJI(学号(C8),姓名(C10),课程(C10),成绩(N8,2))
KECHENG(课程(C10),最高分(N8,2),最低分,平均分,总分)
CHENGJI表用于记录学生的考试成绩,其中一个学生可以有多项记录(登记一个学生的多门成绩)。
KECHENG表的内容是所开课程,一门课程只有一个记录(表中有固定的已知数据)。
请在考生文件夹下编写符合下列要求的程序prog1:
(1)计算表CHENGJI中每门课程的最高分,并将结果存入KECHENG表的最高分字段中;
(2)根据上面的计算结果,生成一个按最高分降序排序的新表jcc(课程名(C10)最高成绩(N8,2))。
学号(C8),姓名(C10),课程名(C10),成绩(N8,2)
20050001季节VFP78.00
20050002赵小名VB65.00
20050001季节VB46.00
20050003洪文如QB90.00
20050002赵小名VFP88.00
20050004左文严VB65.00
20050005王丹VB66.00
20050006赵丹C70.00
课程(C10),最高分(N8,2)最低分,平均分,总分
VFP0.00
VB0.00
QB0.00
C0.00
[分析]
1、本题希望修改内容的表是KECHENG,所以应在KECHENG表中循环
2、修改KECHENG要以chengji表为依据,但成绩表用locafor按课程查找时,第一次遇到的并不是最高分,如何能让查找是第一次遇到的就是最高分?
---如果将chemgji按照课程、成绩(降)排序后,配合KECHENG使用,就可以大大简化程序
[方法一]
usechengji
sorton课程名,成绩/dtonew&&将每门课排在一起,且成绩高的在前。
备配合kecheng用
use
sele0
usekecheng
sele0
usenew
selekecheng
scan
kcm=课程
selenew
locafor课程=kcm
zgf=成绩
selekecheng
repl最高分withzgf
endscan
brow
sorton最高分/dtojcc
closall
cancel
[方法二]
Clea
Settalkoff
Sele0
useKECHENGaliakc
sele0
useCHENGJIaliacj
selekc
scan
kcm=课程
selecj
setfiltto课程=kcm
maxf=成绩
scan
ifmaxf<成绩
maxf=成绩
endi
ends
setfiltto
selekc
repl最高分withmaxf
ends
selekc
sorttojccon最高分/d
closeall
settalkon
cancel
8.在考生文件夹下有CHENGJI表和XUESHENG表,各表结构如下:
CHENGJI表(姓名(C10)、课程名(C10)、成绩(N8,2))
XUESHENG表(姓名(C10)、平均分(N16,2))
CHENGJI表用于记录学生的考试成绩,但一个学生可以有多条记录(登记一个学生的多门成绩)。
XUESHENG表是学生信息,一个学生只有一条记录(表中有固定的已知数据)。
请首先在考生文件夹下编写符合下列要求的程序PROG1.PRG:
根据CHENGJI表计算每个学生的平均分,并将结果存入XUESHENG表的平均分字段。
姓名(C10)、课程名(C10)、成绩(N8,2)
季节VFP78.00
赵小名VB65.00
季节VB46.00
洪文如QB90.00
赵小名VFP88.00
左文严VB65.00
王丹VB66.00
赵丹C70.00
姓名(C10)、平均分(N16,2)
赵小名0.00
季节0.00
洪文如0.00
左文严0.00
王丹0.00
赵丹0.00
Clea
Settalkoff
Sele0
useCHENGJIaliacj
sele0
useXUESHENGaliaxs
selexs
scan
xm=姓名
selecj
avertopjffor姓名=xm
selexs
repl平均分withpjf
endsc
closeall
settalkon
cancel
9.在考生文件夹下有数据表YUANGONG和ZHICHENG,表结构如下:
YUANGONG(职工编码(C10),姓名(C10),职称(C10),工资(N10,2),新工资(N10,2))
ZHICHENG(职称(C10),增加百分比(N10,2))
请首先在考生文件夹下编写符合下列要求的程序PROG1.PRG:
(1)将YUANGONG表复制到JCC表中;
(2)在JCC表中给每个员工增加工资,新工资=工资*(1+增加百分比/100),将计算结果存入相应记录的“新工资”字段中。
职工编码(C10),姓名(C10),职称(C10),工资(N10,2),新工资(N10,2)
990001王芳讲师1000.000.00
001234王李教授5000.000.00
980002前程讲师1100.000.00
908769刘运讲师1111.000.00
职称(C10),增加百分比(N10,2)
教授20.00
副教授20.00
讲师10.00
助教5.00
Clea
Settalkoff
Sele0
useYUANGONG
copytojcc
usejcc
sele0
useZHICHENGaliazc
selezc
scan
a=职称
b=增加百分比
selejcc
repl新工资with工资*(1+b/100)for职称=a
selezc
ends
closeall
settalkon
cancel
10.在考生文件夹下有数据表文件order_detail.dbf和order_list.dbf,表结构如下:
order_detail(订单号(C10),器件号(C10),单价(N10,2),数量(N4))
order_list(订单号(C10),订购日期(D8),总金额(N8,2))
请首先在考生文件夹下编写符合下列要求的程序PROG1.PRG:
(1)复制表order_list到表order_list1;
(2)根据order_detail表中的记录重新计算order_list1表的总金额字段的值;
(3)最后将order_list1表中的记录按总金额降序排序存储到od_new表中。
订单号(C10),器件号(C10),单价(N10,2),数量(N4)
99ABC992510.00100
99ABC99249.00200
01BCD992310.00200
02BCD99259.00100
订单号(C10),订购日期(D8),总金额(N8,2)
99ABC200101011000.00
01BCD200101012000.00
02BCD200201011000.00
11.在考生文件夹下有数据表order_detail.dbf和order_list.dbf,表结构如下:
order_detail(订单号(C10),器件号(C10),单价(N10,2),数量(N4))
order_list(订单号(C10),订购日期(D8),总金额(N8,2))
请首先在考生文件夹下编写符合下列要求的程序PROG1.PRG:
当order_detail表中的单价确定后,应该根据该表的"单价"和"数量"字段修改order_list表的总金额字段,现在有部分order_list记录的总金额字段值不正确,请编写程序挑出这些记录,并将这些记录存放到一个名为od_mod的表中(与order_list表结构相同),然后根据order_detail表的"单价"和"数量"字段修改od_mod表的总金额字段。
closall
sele0
useorder_listaliali
sele0
useorder_detailaliade
seleli
scan
ddh=订单号
selede
sum(单价*数量)tozjefor订单号=ddh
seleli
if总金额=zje
dele
else
repl总金额withzje
endif
endscan
brow
closall
cancel
12.在考生文件夹下有数据表order_detail,表结构如下:
order_detail(订单号(C10),器件号(C10),单价(N10,2),数量(N16))
请首先在考生文件夹下编写符合下列要求的程序PROG1.PRG:
(1)把“订单号”尾部字母相同并且订货相同(“器件号”相同)的订单合并为一张订单,新的“订单号”就取原来的尾部字母,“单价”取最低价,“数量”取合计;
(2)按“器件号”降序排序;
(3)最终记录的处理结果保存在表od_new(订单号(C3),器件号(C10),单价(N102)),数量(N16))中。
order_detail(订单号(C10),器件号(C10),单价(N10,2),数量(N16))
99ABC992510.00100
99ABC99259.00200
01BCD992310.00200
02BCD99259.00100
*prog1
closall
SELECTright(allt(Aa.订单号),1)as订单号,Aa.器件号,;
min(Aa.单价)as单价,sum(Aa.数量)as数量;
FROMaaGROUPBY1;
INTOTABLEod_new.dbf
closall
cancel
13.在考生文件夹下已有数据表文件“商品.dbf”,表结构如下:
商品(商品号C(10),出厂价N(10,2),单价N(10,2))
请首先在考生文件夹下编写符合下列要求的程序PROG1.PRG:
1)将商品表备份为BF,下列操作均在BF中进行;
2)将“商品号”前两位编号为“10”的商品“单价”修改为出厂单价提高10%;其他商品单价修改为出厂单价提高5%。
再在考生文件夹下设计一个名为MENU1的菜单,并生成一个名为MENU1.mpr的菜单程序,菜单格式如下:
计算退出
执行菜单程序时,单击“计算”菜单项,运行PROG1.PRG;单击“退出”菜单项,程序终止运行。
试完成上述要求,并调试运行菜单与程序。
商品(商品号C(10),出厂价N(10,2),单价N(10,2))
1035000112.000.00
1135000278.000.00
10350002100.000.00
2336000189.000.00
操作步骤:
1:
使用MODICOMMPROG1命令进入编程窗口。
2:
使用USE商品命令打开商品表。
3:
copytobf备份商品表为BF
4:
replace单价with出厂价*1.1forleft(商品号,2)='10'更新商品号前2位是10的记录
5;replace单价with