第一章作业分析.docx
《第一章作业分析.docx》由会员分享,可在线阅读,更多相关《第一章作业分析.docx(19页珍藏版)》请在冰豆网上搜索。
第一章作业分析
第一章
题目:
实验题(9)假设学院为每个研究生分配了一个长度固定的E-mail地址,地址中包括3个字符的用户名和8个字符的邮件服务器名(不包括“@”、“.”)。
请按___@_____.___格式创建一个掩码,以方便输入诸如abc@形式的地址。
分析:
本题要求同学们了解掩码中某些符号的特定含义。
用户名和服务器名由字母或数字组成,定义掩码时使用符号A(注意要大写),“@”与“.”是固定不变的,是原义字符,需要做在该字符前加上“\”符号。
步骤:
定义名为“电子邮件”的掩码过程如下:
1.在数据表设计视图中添加新字段E-mail,文本型,长度13个字符
2.将插入点停留在E-mail字段上,单击“常规”选项卡“输入掩码”行右侧按钮,见下图所示:
3.在提示保存表后,弹出“掩码向导窗口”对话框,用户可单击左下角的“编辑列表”按钮,打开“自定义‘输入掩码向导’”对话框,见下图:
4.单击该窗口中
按钮,添加新掩码
5.在随后打开对话框窗口中,输入下图所示内容,注意“输入掩码”文本框中输入的内容为AAA\@AAAAA\.AAA
6.单击“关闭”按钮,在“输入掩码向导”窗口中,现实刚刚创建的新掩码“电子邮件”,见图:
7.单击“下一步”按钮,在弹出的对话框中再次单击“下一步”按钮
8.在出现的下图所示窗口中,选择“像这样使用掩码中的符号”
9.单击完成,结束掩码的建立操作
10.切换到数据表视图,进行“E-mail”字段的输入操作
页首
第二章
题目:
实验题(4)计算研究生中最早和最晚入学的学生相差几年
分析:
这是一个嵌套查询,首先分别找出研究生中最早的入学日期和最晚的入学日期,然后将两个查询结果值相减,最后使用SELECT命令将这个差值作为计算字段的值输出,输出时所用到的数据源任意,为避免重复显示,可以使用DISTINCT命令消除相同记录;计算字段是个表达式,需要用AS子句为该字段增加一个字段名。
结果:
SELECTDISTINCT(SELECTYEAR(MAX(入学日期))FROM研究生)-(SELECTYEAR(MIN(入学日期))FROM研究生)AS相差年数
FROM研究生
题目:
实验题(7)生成一个查询,要求能显示每个系及其该系所培养的研究生的名字。
分析:
在涉及多表查询时,必须首先在关系视图中建立各表间的关系。
本题的关系视图入下图所示:
本题可以在查询设计视图中完成。
系与研究生之间没有直接关系,必须以“导师”表为桥梁产生间接联系,因此本题表面上与导师表无关,但查询设计视图中必须出现导师表。
结果:
查询设计视图如下图所示:
讨论:
如果查询设计视图上不出现导师表,则查询结果将达54行,为什么?
页首
第三章
题目:
实验题(11)输出导师马腾跃所带研究生中入学日期最早者姓名。
分析:
这是一个嵌套查询,步骤是首先找出马腾跃所带研究生的最早日期,再进一步查找马腾跃所带的研究生中谁的入学日期恰好与它相同,此时可输出这个(这些)研究生的名字。
结果:
SELECT研究生.姓名
FROM导师INNERJOIN研究生ON导师.导师编号=研究生.导师编号
WHERE入学日期=(SELECTMIN(入学日期)FROM导师INNERJOIN研究生ON导师.导师编号=研究生.导师编号WHERE导师.姓名='马腾跃')AND导师.姓名='马腾跃'
讨论:
本题最易犯的错误是省略最后部分的AND导师.姓名='马腾跃',此时执行查询,显示的结果也许还是对的,但从逻辑上说是错误的,为什么?
题目:
实验题(12)输出图示的交叉表,内容为各个导师(姓名)所带的不同研究方向男女研究生的最高分。
分析:
交叉表只能用“交叉表查询向导”完成。
交叉表向导的数据源只能是一个,而现在要求的内容涉及到两个表(导师表和研究生表)。
要解决这个问题,只能通过查询进行,将交叉表中相关字段在查询涉及视图中组成一个简单的查询,再以该查询作为交叉表的数据源,从而将多重数据源转换成单一数据源。
查询设计视图如下:
页首
第五章
题目:
实验题(6)找出所有姓李的导师的姓名及其所带研究生的姓名,在立即窗口中输出。
102
李向明
男
51
冯山谷
男
101
103
马大可
女
58
杨柳
男
102
104
李小严
女
63
周旋敏
女
104
马力
女
马德里
男
101
潘浩
女
104
结果:
SubData_Plus()
DimAAsInteger,BAsInteger
DimCAsInteger,DAsInteger
'4个原始数据
A=23:
B=12:
C=31:
D=19
CallLine1(20)'调用过程绘制第一条横线(20个-)
Debug.PrintA;Tab(6);B;Tab(12);A+B
Debug.PrintC;Tab(6);D;Tab(12);C+D
CallLine1(30)'调用过程绘制第二条横线(30个-)
Debug.PrintA+C;Tab(6);B+D;Tab(12);A+B+C+D
CallLine1(18)'调用过程绘制第三条横线(12个-)
EndSub
SubLine1(NAsInteger)'绘制N个"-"组成的横线
DimIAsInteger
IfN<15OrN>25ThenN=15
ForI=1ToN
Debug.Print"-";
NextI
Debug.Print'取消最后的";"作用
EndSub
页首
第六章
题目:
实验题(9)编写一个程序,上有一个文本框和一个按钮“四季”;单击一次按钮,文本框中显示一个季节名称,依次是红色的“春”、黄色的“夏”、蓝色的“秋”和绿色的“冬”,文字大小为72磅,字体依次为宋、仿宋、楷、黑,再次单击重复显示“春”。
窗体保存为“实验8”,见下图:
步骤:
1.选择“在设计视图中创建窗体”命令,在新窗体上添加一个文本框和一个按钮;
2.将按钮的标题修改为“四季”;
3.打开VBA代码窗口,在“对象”下拉列表框中选择按钮,本例为Command2,在“过程”下拉列表框中选择Click(单击事件);
4.在PrivateSubCommand2_Click()和EndSub之间输入下面的代码:
IfIsNull(Text0.Value)=TrueThen
Text0.ForeColor=vbRed
Text0.FontName="宋体"
Text0.Value="春"
ElseIfText0.Value="春"Then
Text0.ForeColor=vbYellow
Text0.FontName="仿宋"
Text0.Value="夏"
ElseIfText0.Value="夏"Then
Text0.ForeColor=vbBlue
Text0.FontName="楷体"
Text0.Value="秋"
ElseIfText0.Value="秋"Then
Text0.ForeColor=vbGreen
Text0.FontName="黑体"
Text0.Value="冬"
ElseIfText0.Value="冬"Then
Text0.ForeColor=vbRed
Text0.FontName="宋体"
Text0.Value="春"
EndIf
5.在“对象”下拉列表框中选择窗体Form,在“过程”下拉列表框中选择Load(加载事件);
6.在PrivateSubForm_Load()和EndSub之间输入下列代码:
Text0.FontSize=100'设置文本框中文字大小
Command2.SetFocus
Command2.Default=True'任何时候按下回车键相当于鼠标单击该按钮
7.关闭代码窗口,切换到“窗体视图”,然后回到窗体设计视图中调整文本框的大小和窗体的大小;
8.保存窗体。
页首
第七章
题目:
实验题(10)编写下图所示简易计算器,要求:
(1)参与计算的数据是1000及以内的实数,否则自动为0;
(2)计算精度均只保留小数两位;
(3)窗体启动和单击“清除”按钮后,4种运算符的单选按钮全部为灰色,文本框为0;
(4)除法运算时,如果除数为0则计算结果显示“ERROR”。
步骤:
1.新建一个窗体,在上面添加所需控件见下图所示,注意应该先添加选项组控件,再增加选项按钮,见下图;
2.利用窗口设计视图中的“格式”菜单命令“大小”和“对齐”,调整窗体上各个控件的大小与对齐方式
3.在VBA代码窗口中建立相应的事件过程,输入下列代码:
PrivateSubCommand20_Click()
IfIsNull(Frame8.Value)=TrueThen
MsgBox"请选择运算符!
"
EndIf
IfFrame8.Value=1Then
Text6.Value=Val(Text2.Value)+Val(Text4.Value)
EndIf
IfFrame8.Value=2Then
Text6.Value=Val(Text2.Value)-Val(Text4.Value)
EndIf
IfFrame8.Value=3Then
Text6.Value=Val(Text2.Value)*Val(Text4.Value)
EndIf
IfFrame8.Value=4AndVal(Text4.Value)=0Then
MsgBox"除数不能为零!
"
EndIf
IfFrame8.Value=4AndVal(Text4.Value)<>0Then
Text6.Value=Val(Text2.Value)/Val(Text4.Value)
Text6.Value=Format(Text6.Value,"0.0000")
EndIf
EndSub
PrivateSubCommand21_Click()
CallForm_Load
EndSub
PrivateSubCommand22_Click()
DoCmd.Close
EndSub
PrivateSubForm_Load()
Text2.Value=""
Text4.Value=""
Text6.Value=""
Text2.SetFocus
Command20.Default=True
Command21.Cancel=True
Frame8.Value=Null
EndSub
页首
第七章
题目:
实验题(3①~⑦)全部代码。
表7.4《数据库原理》成绩单
学号
姓名
成绩
等级
200401
刘伟
96
200402
秦建中
87
200403
张峻
67
200404
高萍
92
200405
林亦明
83
200406
宋海涛
71
……
……
……
……
代码:
DimCNAsADODB.Connection
DimRSAsADODB.Recordset
PrivateSubForm_Load()
OnErrorGoToloop1
文本8.Locked=True'该文本框表示等级,不能直接输入成绩值
DoCmd.OpenTable"数据库原理"
'成绩单表存在
DoCmd.CloseacTable,"数据库原理",acSaveNo
命令26.Enabled=False'表存在,无需创建表
SetCN=CurrentProject.Connection
SetRS=NewADODB.Recordset
RS.LockType=adLockOptimistic
RS.Open"数据库原理",CN,,,adCmdTable
IfRS.EOF=TrueAndRS.BOF=TrueThen'表中没有记录
命令15.Enabled=False
命令16.Enabled=False
文本12.Enabled=False
ExitSub
EndIf
文本2.Value=RS!
学号
文本4.Value=RS!
姓名
文本6.Value=RS!
成绩
文本8.Value=RS!
等级
ExitSub
loop1:
IfErr.Number=7874Then
文本2.Value=Null
文本4.Value=Null
文本6.Value=Null
文本8.Value=Null
MsgBox"成绩单不存在"
命令14.Enabled=False
命令15.Enabled=False
命令16.Enabled=False
命令18.Enabled=False
命令24.Enabled=False
EndIf
EndSub
PrivateSub命令14_Click()'新纪录按钮
'建立新记录
文本2.Value=Null
文本4.Value=Null
文本6.Value=Null
文本8.Value=Null
RS.AddNew
EndSub
PrivateSub命令15_Click()'前一记录按钮
RS.MovePrevious
IfRS.BOF=FalseThen
文本2.Value=RS!
学号
文本4.Value=RS!
姓名
文本6.Value=RS!
成绩
文本8.Value=RS!
等级
Else
RS.MoveNext
EndIf
EndSub
PrivateSub命令16_Click()'后一记录按钮
RS.MoveNext
IfRS.EOF=FalseThen
文本2.Value=RS!
学号
文本4.Value=RS!
姓名
文本6.Value=RS!
成绩
文本8.Value=RS!
等级
Else
RS.MovePrevious
EndIf
EndSub
PrivateSub命令17_Click()'退出按钮
DoCmd.Close
EndSub
PrivateSub命令18_Click()'保存记录按钮
'保存对当前记录的修改
IfRS.BOF=TrueAndRS.EOF=TrueThen'如果没有记录,添加新纪录
RS.AddNew
EndIf
RS!
学号=文本2.Value
RS!
姓名=文本4.Value
RS!
成绩=文本6.Value
RS!
等级=文本8.Value
RS.Update
命令15.Enabled=True
命令16.Enabled=True
命令24.Enabled=True
EndSub
PrivateSub命令24_Click()'删除当前记录按钮
'进行删除确认
DimSureAsByte
Sure=MsgBox("是否要删除当前记录(数据间左侧文本框)?
",vbYesNo+vbQuestion,"成绩管理")
IfSure=vbNoThenExitSub
RS.Delete
RS.MoveLast'转至最后记录,准备继续删除空记录
文本2.Value=RS!
学号
文本4.Value=RS!
姓名
文本6.Value=RS!
成绩
文本8.Value=RS!
等级
EndSub
PrivateSub命令26_Click()'创建表按钮
DoCmd.RunSQL"createtable成绩单(学号text(6),姓名text(3),成绩byte,等级text(4))"
命令14.Enabled=True'可以增加新纪录
命令18.Enabled=True'可以保存记录
命令18.SetFocus
命令26.Enabled=False'本命令按钮无效
SetCN=CurrentProject.Connection
SetRS=NewADODB.Recordset
RS.LockType=adLockOptimistic
RS.Open"成绩单",CN,,,adCmdTable
IfRS.EOF=TrueAndRS.BOF=TrueThen'表中没有记录
命令15.Enabled=False
命令16.Enabled=False
文本12.Enabled=False
ExitSub
EndIf
EndSub
PrivateSub文本21_Click()'均方差计算文本框
DimAvgAsSingle,IAsByte,NAsInteger,FAsSingle
'上述变量分别表示均数、循环变量、记录数、均方差
RS.MoveFirst
DoWhileRS.EOF=False
Avg=Avg+RS!
成绩
N=N+1
RS.MoveNext
Loop
Avg=Avg/N
RS.MoveFirst
ForI=1ToN
F=F+(RS!
成绩-Avg)^2
RS.MoveNext
NextI
F=Sqr(F/(N-1))
文本12.Value=F
RS.MoveFirst
EndSub
PrivateSub文本6_LostFocus()'根据成绩字段值,计算等级
'当插入点离开本文本框时,计算出“等级”值
IfVal(文本6.Value)>=85Then
文本8.Value="优秀"
ElseIfVal(文本6.Value)>=60Then
文本8.Value="及格"
Else
文本8.Value="不及格"
EndIf
EndSub