第一篇:oracle学生成绩管理系统设计
阶段1.1成绩管理系统实体关系设计
一、实验目的和要求
(1)熟练掌握实体关系设计的方法。(2)通过需求分析结果,掌握E-R图。
二、实验内容和原理
实体关系设计是在需求分析的一个环节过程,在这一过程中产生E-R图,该图由实体、属性和联系三个要素构成。逻辑结构设计的任务就是把概念设计阶段建立的基本E-R图按照选定的系统软件支持的数据模型,转换成相应的逻辑模型。这种转换要符合关系数据模型的原则。
E-R图向关系模型转换时要解决如何将实体和实体间的联系转换为关系,并确定这些关系的属性和码,这种转换一般按下面的原则进行。
(1)一个实体转换为一个关系,实体的属性就是关系的属性,实体的码就是关系的码。
(2)一个联系也转换为一个关系,联系的属性及联系所连接的实体的码都转换为关系的属性,但关系的码会根据联系的类型变化。
三、主要仪器设备
计算机一台、Powerdesinger运行环境
四、操作方法与实验步骤
在成绩管理系统中,需要管理学生、课程和成绩,以及它们之间的联系。因此在该系统的E-R图中,实体分别为学生、老师、课程。为了便于掌握,学生实体的属性分别有学号、姓名、性别;课程实体的属性有课程编号、课程名称、学期、课程学分;教师实体的属性有教师编号、姓名、性别。学生实体与课程实体有选课关系,而且一个学生可以选择多门课程,一门课程也可以被多个学生选择,因此学生和课程之间的联系是m:n联系。教师实体与课程实体有教授关系,一名教师可以教多门课程,一门课程也可以被多个教师教授,因此教师和课程之间的联系是m:n联系。学生在选课后会产生成绩,教师授课后会产生授课地点及授课学期。根据上述分析,绘出的E-R图如下图所示。
阶段1.2 成绩管理系统结构设计
一、实验目的和要求
1.了解数据库中列的属性以及各个属性的含义。2.掌握为不同的列选择不同的属性及范围。
二、实验内容和原理
在管理信息系统中,物理结构设计主要是指如何将通过逻辑结构设计所得的系统逻辑结构型转换为物理模型,并明确地指出系统的物理存储结构。本实验主要是利用CASE工具集PowerDesigner对成绩管理系统进行物理结构的设计。
三、主要仪器设备
计算机一台、Powerdesinger 运行环境、Oracle运行环境
四、操作方法与实验步骤
在物理结构设计中需要考虑为每列设计合适的数据类型。成绩管理系统中,学生(学号、姓名、性别)关系里,学号采用int来表示就可以了,而姓名设置成varchar2(20),性别只需要设置为char(2)。因为性别不是男就是女,因此只会占用两个字节。所以最终我们可以将其物理表结构设置为:t_student(stuid int,stuname varchar2(20),sex char(2)。依照上述,课程的物理表结构为:t_course(couid int,couname varchar2(20),term char(2),credit number(3,1))。教师的物理存储表结构为:t_teacher(teaid int,teaname varchar2(20),sex char(2))。选课的物理表结构为:t_selcour(sid int,cid int,score number.(4,2))。教课的物理表结构为:t_teacour(tid int,cid int,teaaddr varchar2(30),term char(2))。
(1)通过手动编写SQL语句方式建立数据库后台
上述创建了代表学生实体的表t_student,其中stuid设置为主键,唯一标识一个学生。
表t_course用来代表课程实体,其中采用couid来标识一门课程。当课程名称的长度大于20个字符时,varchar2可以自动扩展。
物理实体在物理结构中用t_teacher表来表示,teaid用来唯一标识一位教师,因此其不能空
选课表t_selcour中学生编号参考t_student表中的stuid,此时sid为外键,课程编号cid也作为外键参考t_course中的couid(2)通过PowerDesigner建立数据库后台。
第四步:到此,系统的概念模型就全部设计好了。接下来单击菜单“工具”→“生成物理属性模型”选项,就会弹出“物理数据模型生成选项”对话框,如下图:
在“常规”选项卡中选择“生成新的物理模型”单选钮,并选择DBMS为“OPACLE Version 10g”,“名称”文本“MyPhysicalDataModel”,并单击“确认”按钮,在弹出得到路径选择对话框中输入你想要放置生成的物理数据模型文件的位置,系统就会自动在指定的路径下生成一个名为“MyPhysicalDataModal.pdm”的文件,并生成系统的物理模型,如下图
CONGC
从菜单中选择 Database---Generate Database选项。PowerDesigner将会在指定的路径下生成一个名字为*.sql 的文本文件。里面存放可供Oracle 执行的用来建立数据库实体的SQL语句。
阶段1.3 成绩管路系统存储过程设计
一、实验目的和要求
(1)了解存储过程的设计目的以及方法。(2)掌握存储过程的创建。
二、实验内容和原理
存储过程是在数据中定义的程序块,它存放在数据库服务端数据字典里。采用存储过程可以提高过程代码程序的执行速度和代码共享度。具体有以下几个特点。(1)过程存放在服务器端,减少了网络传输的延时,提高了速度。(2)过程在执行一次之后,会驻留内存,后续的执行无需再经编译过程,提高了执行效率。
三、主要仪器设备
计算机一台,Oracle运行环境
四、操作方法与实验步骤
1、创建存储过程先向表t_student中插入数据,具体如下所示
2、每次向表t_student中插入数据时,只需要运行该过程就可以了。具体如下所示。表t_student中的列stuid被设置为主键,因此不可以存在重复值。在第二次运行时,因为输入的第一个参数id与表中已存在的数据相同,所以插入时出现错误。
3、继续向表中插入两条记录,其中当参数id不重复时,过程成功完成。
4、不仅可以通过存储过程向表中插入数据,也可以通过一般的SQL语句向表中插入数据,如下所示。
5、向表中插入数据时,需要注意数据类型以及长度都需要与表中定义的相符,否则会出现错误,具体如下所示。
6、t_course表中列term被定义为char且长度为2,因此在插入数据时该列最大长度为2,超过该值会出现错误。课程表中只有已经存在的课程编号才能被插入到选课表中,否则会出错,这样就保证了数据的一致性。
7、t_selcour表的另外一个外键为第一列sid,在插入时只有当该值存在于学生表中的学生编号时,才能被成功插入,否则也会出现错误,具体如下所示。
8、对于向表t_teacour中插入数据时,同样需要满足外键参考主键的约束条件,具体如下所示。
9、向表t_teacour中插入一行记录,其中tid存在于表t_teacher的列teaid中,cid存在于表t_course列couid中。如果插入的值不符合外键约束条件,会出现错误,具体如下所示。
10、在完成对表插入值后,可以关联表查询记录。比如:查询教师编号为1的教师所带的课程编号、教师姓名、课程名称、课程学分信息,具体如下所示。实现了查询编号为1的老师所带的课程编号、课程名称等信息。在查询时,为表命名别名时为了方便,各个表的连接通过主键外键约束来实现。
查看t_course及t_selcourse中的值
五、实验结果与分析
实验结果如上截图所示。
六、讨论、心得
grant select不支持对表中选定的几列授权,只能将整个表的select权限授权出去。所以实验中先建立了基于选课信息表的视图SelectiveInfo1,视图中包含成绩列,学号列以及班级列(不包含其他的列)再将对视图SelectiveInfo1的select权限授予角色teacher。
不同的用户可以创建相同的表格,teacher用户创建了table1,student用户也创建了table1,且这两个表格式完全相同的,那么其他用户需要用这两个表格时,可以用teacher.table1和student.table1加以区分。
实验中遇到的问题可以上网百度,网上资源很丰富。
第二篇:Oracle期末实习报告——VBOracle学生成绩管理系统
Oracle期末实习报告
——VB/Oracle学生成绩管理系统
实习学期:班级: 学号: 姓名: 指导老师:
2014—2015第一学期
一、项目概述
使用学生成绩管理系统数据库XSCJ作为后台数据库,以Microsoft Visual Basic 6.0为前台开发工具,开发一个数据库应用系统。本系统的功能包括学生信息的查询;学生信息的录入、修改和删除;学生成绩的录入和删除。
二、总体设计
2.1 XSCJ数据库设计
1、学生成绩管理数据库中包含四个表:学生信息表(XSB)、学生照片表(XSZP)、课程表(KCB)、成绩表(CJB);
2、创建学生课程成绩视图(XS_KC_CJ);
3、使用触发器实现删除学生对应成绩和照片(xs_delete);
4、使用完整性约束实现删除对应成绩记录;
5、使用存储过程实现更新成绩和总学分(CJ_Data)。
2.2 前台设计
1、主窗体,包含本系统所有功能的选择;
2、学生信息查询窗体;
3、学生信息管理窗体;
4、学生成绩录入窗体。
三、详细设计
3.1 XSCJ数据库详细设计
3.1.1 表格设计
学生信息表(XSB)
包含学号(XH)、姓名(XM)、性别(XB)、出生时间(CCSJ)、专业(ZY)、总学分(ZXF)、备注(BZ)等列。
学生照片表(XSZP)
包含学号(XH)、照片(ZP)等列。课程表(KCB)
包含课程号(KCH)、课程名(KCM)、开课学期(KKXQ)、学时(XS)、学分(XF)等列。
成绩表(CJB)
包含学号(XH)、课程号(KCH)、成绩(CJ)等列。
3.1.2 学生课程成绩视图设计
通过学号将学生表和成绩表联系起来,通过课程号将成绩和课程表联系起来,包含学号、姓名、专业、课程号和成绩等列,所有学生的选课情况都保存在视图中,即任意一个学号和任意一个课程号都在视图中有对应的一条记录,如果成绩表(CJB)存在对应的记录则在成绩视图中显示成绩,不存在则显示为NULL。
3.1.3 触发器设计
通过创建学生表(XSB)的DELETE触发器实现当删除学生记录时,同步删除成绩表(CJB)中该学生的成绩记录和照片表(XSZP)中的照片记录。3.1.4 完整性约束的设计
用参照完整性约束实现当删除课程记录后,同步删除成绩表(CJB)中所有学生的该课程的成绩记录。
3.1.5 储存过程的设计
创建存储过程CJ_Data,参数包含:学号(in_xh)、课程号(in_kch)和成绩(in_cj)。根据课程号查询该课程对应的学分,根据学号和课程号查询该成绩记录,删除原来成绩记录。如果成绩>=60,则该学生总学分(ZXF)减去该课程的学分,如果新成绩=-1(表示删除该成绩记录),则存储过程结束。增加成绩记录,如果成绩>=60,则该学生总学分(ZXF)加上该课程的学分。
3.2 前台详细设计
3.2.1 主窗体的设计
主窗体包含本系统所有功能的选择,其他的所有功能界面都将作为主窗体的子窗体,运行时直接在主窗体中显示。包含主要功能有:学生信息查询、学生信息管理、学生成绩录入。
3.2.2 学生信息查询窗体设计
可以满足简单查询的需要,什么条件都不输入则显示所有记录。可以输入条件进行简单的模糊查询,各个条件之间为与的关系。在查询的结果中,鼠标单击一行记录时,可以查看此学生的备注和照片。
3.2.3 学生信息管理窗体设计
通过输入学生学号后单机“查询”按钮可以在窗口中的各个控件中显示当前学生的具体信息。单击“更新”按钮可以对学生信息进行添加和修改。单击“删除”按钮可以删除相应的学生记录。当删除一条学生记录时,触发器XS_DELETE会自动到CJB中删除此学生的成绩记录,并到XSZP表中删除此学生的照片记录,以保证数据的参照性完整。
3.2.4 学生成绩录入窗体设计
用户选择课程名和专业后,单击“查询”按钮,下方的表格中会从视图XS_KC_CJ中列出与课程名和专业都对应的学生的学号、姓名、课程号和所选课程的成绩。如果未选该课程则成绩为空。当移动表格中的记录集时,学号、姓名和成绩文本框中将列出对应的数据。在成绩文本框中输入新成绩或修改旧成绩,单击“更新”按钮则调用存储过程CJ_Data向CJB表中插入一行新成绩或修改原来的成绩。单击“删除”按钮则调用储存过程CJ_Data删除CJB表对应的一行成绩记录。
四、功能实现
4.1 XSCJ数据库功能实现
4.1.1 创建表空间
CREATE TABLESPACE STUDENT LOGGING DATAFILE 'D:apptaooradataXSCJSTUDENT01.DBF' SIZE 100M;
4.1.2 创建表
学生表(XSB)
CREATE TABLE XSB(XH char(6)
XM char(8)
XB char(2)NOT NULL PRIMARY KEY, NOT NULL, DEFAULT '1' NOT NULL, CSSJ date NOT NULL, NULL, NULL,NULL ZY char(12)
ZXF number(2)BZ varchar2(200));课程表(KCB)
CREATE TABLE KCB(NOT NULL PRIMARY KEY, NOT NULL,NULL, NULL, NOT NULL KCH char(3)
KCM char(16)
KKXQ XS
XF);number(1)number(2)number(1)
成绩表(CJB)
CREATE TABLE CJB(XH char(6)NOT NULL, KCH char(3)NOT NULL, CJ number(2)NULL, PRIMARY KEY(XH, KCH));学生照片表(XSZP)
CREATE TABLE XSZP(XH char(6)NOT NULL PRIMARY KEY, ZP blob NULL);4.1.3 插入样本数据
数据为课本后学生信息数据。
4.1.4 创建视图XS_KC_CJ CREATE VIEW XS_KC_CJ AS SELECT XSB.XH,XSB.XM, XSB.ZY, KCB.KCH,KCB.KCM,CJB.CJ FROM XSB CROSS JOIN KCB LEFT OUTER JOIN CJB ON CJB.XH=XSB.XH AND CJB.KCH=KCB.KCH;4.1.5 创建触发器
CREATE OR REPLACE TRIGGER xs_delete AFTER DELETE ON XSB FOR EACH ROW DECLARE PRAGMA AUTONOMOUS_TRANSACTION;BEGIN DELETE FROM CJB WHERE XH=:OLD.XH;DELETE FROM XSZP WHERE XH=:OLD.XH;COMMIT;END;
/*声明自治事务*/ 4.1.6 创建存储过程CJ_Data CREATE OR REPLACE PROCEDURE CJ_Data(in_xh IN char, in_kch IN char, in_cj IN number)AS in_count number;in_xf number:=0;in_cjb_cj number:=0;BEGIN SELECT XF INTO in_xf FROM KCB WHERE KCH=in_kch;SELECT COUNT(*)INTO in_count FROM CJB WHERE XH=in_xh AND KCH=in_kch;IF in_count>0 THEN
SELECT CJ INTO in_cjb_cj FROM CJB WHERE XH=in_xh AND KCH=in_kch;DELETE FROM CJB WHERE XH=in_xh AND KCH=in_kch;IF in_cjb_cj>=60 THEN UPDATE XSB SET ZXF=ZXF-in_xf WHERE XH=in_xh;END IF;END IF;IF in_cj<>-1 THEN
INSERT INTO CJB VALUES(in_xh, in_kch, in_cj);IF in_cj>=60 THEN UPDATE XSB SET ZXF=ZXF + in_xf WHERE XH=in_xh;END IF;END IF;COMMIT;END;4.1.7 创建完整性约束
ALTER TABLE CJB ADD CONSTRAINT FK_KC FOREIGN KEY(KCH)REFERENCES KCB(KCH)ON DELETE CASCADE;4.2 前台功能实现
4.2.1 主窗体实现
代码:
Private Sub search_Click()stu_query.Show stu_query.ZOrder 0 End Sub Private Sub manage_Click()stu_manage.Show stu_manage.ZOrder 0 End Sub Private Sub insert_Click()cj_insert.Show cj_insert.ZOrder 0 End Sub 页面设计:
功能:
主窗体包含其他三个功能窗体,可以切换学生信息查询、学生信息管理、学生成绩录入功能子窗体
4.2.2 学生信息查询窗体
页面设计:
功能展示:
可以满足简单查询的需要,什么条件都不输入则显示所有记录。可以输入条件进行简单的模糊查询,各个条件之间为与的关系。在查询的结果中,鼠标单击一行记录时,可以查看此学生的备注和照片。
当查询学号为101101的学生时,展示该学生的各种信息。
4.2.3 学生信息管理窗体
页面设计:
功能展示:
通过输入学生学号后单机“查询”按钮可以在窗口中的各个控件中显示当前学生的具体信息。单击“更新”按钮可以对学生信息进行添加和修改。单击“删除”按钮可以删除相应的学生记录。当删除一条学生记录时,触发器XS_DELETE会自动到CJB中删除此学生的成绩记录,并到XSZP表中删除此学生的照片记录,以保证数据的参照性完整。
先查询到学号为101101的学生信息,然后载入图片,点击更新后数据库的信息就随之更新了。
4.2.4 学生成绩录入窗体
页面设计:
功能展示: 用户选择课程名和专业后,单击“查询”按钮,下方的表格中会从视图XS_KC_CJ中列出与课程名和专业都对应的学生的学号、姓名、课程号和所选课程的成绩。如果未选该课程则成绩为空。当移动表格中的记录集时,学号、姓名和成绩文本框中将列出对应的数据。在成绩文本框中输入新成绩或修改旧成绩,单击“更新”按钮则调用存储过程CJ_Data向CJB表中插入一行新成绩或修改原来的成绩。单击“删除”按钮则调用储存过程CJ_Data删除CJB表对应的一行成绩记录。
查询到学号为101101、课程名为离散数学的学生成绩,在成绩文本框更改成绩,点击更新后数据库里的成绩就随之更改了,相应的总学分也会通过储存过程更改。
五、小结与体会
这次实习让我收获非常大。在oracle数据库方面,我又复习巩固了数据库创建、表格创建、视图、触发器、储存过程、完整性约束等方面知识。而且更加深刻认识到这些知识在实际应用中的作用。在前台方面,第一次使用VB 6.0写前台程序,虽然具体设计和代码大多都是参考书上的讲解,但是,我还是学会了很多东西,特别是前台设计的思路。
在实习过程中我也遇到过很多问题。比如,在刚开始使用VB 6.0时,我一直无法实现和数据库关联。我明明是按照书上的代码来操作的,但是还是实现不了相应的功能。后来我通过上网查资料、和同学探讨等方式,终于明白原来是机房的电脑配置中出了点问题。在修改过一个配置文件后,我终于能让前台和数据库链接上了,仅这一个问题就花费了我一上午的时间,但是能够顺利解决让我感到非常兴奋。我觉得实习的意义就在于在犯错和解决错误的过程中成长。这种通过上网查资料、和小伙伴讨论的过程,也是提升自我学习能力的途径。所以,虽然过程比较艰辛,但是还是蛮开心的。
最后,我感觉在我完成的这个学生成绩管理系统中还存在一些设计不够合理的地方,一些功能也不够优化。但是限于目前知识水平有限、时间比较紧,只能先这样提交。但是我会利用以后的课余时间继续完善这个学生成绩管理系统的。学习就是在不断地完善中进步的嘛。
第三篇:学生成绩管理系统设计学案
学生成绩管理系统设计学案
一、教学目标
1、能力目标
能够进行需求分析,设计要实现的功能,并能画出数据流图、设计数据字典、E-R图。
2、知识目标
(1)掌握需求分析的方法
(2)概念设计方法
(3)逻辑设计方法及相关概念
(4)物理设计方法及相关概念
二、预备知识
1、预习P182-P187,了解本次课的授课任务
2、理解以下概念:
数据流图、数据字典、E-R图、需求分析(可以借助互联网络搜集资料加深对概念的理解)
3、了解概念设计、逻辑设计方法
三、授课过程
1、回答老师根据预备知识的要求所提的问题
2、参照课本内容通过分小组进行任务分析,设计出本小组想要制作的演示文稿的风格及主题。
3、通过小组合作创建演示文稿并美化。
4、进行组内评价、组间评价,欣赏各小组评价出的优秀作品。
5、总结本节课所学到的知识,在实际操作过程中遇到的问题,解决的办法及心得体会。
四、课后作业
制作市场计划演示文稿
第四篇:学生成绩管理系统
//*学生成绩管理系统*//
#include
#define N 3
struct student
{
int no;
char name[20];
float english;
float computer;
float math;
float average;
};
void getclass(struct student *class_gishui)
{
int i;
printf(“请输入%d个学生的学号 姓名 英语 计算机 数学n”,N);
for(i=0;i { printf(“第%d个学生”,i+1); scanf(“%d%s%f%f%f”,&class_gishui[i].no,&class_gishui[i].name,&class_gishui[i].english,&class_gishui[i].computer,&class_gishui[i].math); } } void print_class(struct student *class_gishui) { int i; for(i=0;i { class_gishui[i].average=(class_gishui[i].english+class_gishui[i].computer+class_gishui[i].math)/3; } printf(“学生信息表如下:n”); printf(“学号tt姓名tt英语tt计算机tt数学tt平均成绩n”); for(i=0;i printf(“%dtt%stt%ft%ft%ft%fn”,class_gishui[i].no,class_gishui[i].name,class_gishui[i].english,class_gishui[i].computer,class_gishui[i].math,class_gishui[i].average); } void paixu(struct student *class_gishui) { int i,j,flag; struct student t[1]; for(i=0;(i { flag=0; for(j=0;j if(class_gishui[j].average>class_gishui[j+1].average) { t[0]=class_gishui[j]; class_gishui[j]=class_gishui[j+1]; class_gishui[j+1]=t[0]; flag=1; } if(flag==0) break; } printf(“排序后学生成绩为:n”); printf(“学号t姓名t英语tt计算机tt数学tt平均成绩n”); for(i=0;i printf(“%dt%st%ft%ft%ft%fn”,class_gishui[i].no,class_gishui[i].name,class_gishui[i].english,class_gishui[i].computer,class_gishui[i].math,class_gishui[i].average); } void main() { struct student class_gishui[N]; getclass(class_gishui); print_class(class_gishui); paixu(class_gishui); } Option Explicit Option Base 1 Dim st()As String Dim grade()As chengji, str1$, str2$, prog()As kecheng Private Sub chengji_Click()' 输出序号、成绩及分数 Cls Dim i% Print str1 For i = LBound(grade)To UBound(grade)Print grade(i).xh;grade(i).xm;Space(4Len(Trim(grade(i).xm)));grade(i).score(1);grade(i).score(2);Spc(5);grade(i).score(3);Spc(8);grade(i).score(4);Spc(8);grade(i).score(5);Spc(4);grade(i).aver Next i End Sub Private Sub kecheng_Click()'在窗口输出课程的内容 Cls Dim i% Print str2 For i = LBound(prog)To UBound(prog)Print prog(i).bh;Spc(12);prog(i).name;Spc(12);prog(i).xf Next i End Sub Private Sub paiming_Click()'利用加权平均分排名 Dim i%, j%, m%, n%, p% Cls Print str1 & “ 加权平均分” & “ 排名” m = LBound(grade): n = UBound(grade)For i = m To n p = 1 For j = 1 To n If grade(i).aver < grade(j).aver Then p = p + 1 grade(i).rank = p Next j Next i For i = m To n Print grade(i).xh;grade(i).xm;Space(4-Len(Trim(grade(i).xm)));grade(i).score(1);grade(i).score(2);Spc(5);grade(i).score(3);Spc(8);grade(i).score(4);Spc(8);grade(i).score(5);Spc(2);grade(i).aver, grade(i).rank Next i End Sub Private Sub pjf_Click()Cls Dim i%, j%, n%, m%, sum% m = UBound(prog): n = UBound(grade)Print str2;Spc(4);“平均分” For i = 1 To 5 sum = 0 For j = 1 To n sum = sum + grade(j).score(i)prog(i).pjf = sum / n Next j Print prog(i).bh;Spc(10);prog(i).name;Spc(10);prog(i).xf;Spc(10);prog(i).pjf Next i End Sub Private Sub renshu_Click()Cls Dim bn(1 To 5, 5 To 9)As Integer, t As Integer, x As Integer, i%, j%, m%, n% n = UBound(prog): m = UBound(grade)Print “范围”;Spc(1);“<60”;Spc(7);“60~70”;Spc(7);“70~80”;Spc(7);“ 80~90”;Spc(7);“90~100” For j = 1 To n For i = 1 To m Select Case grade(i).score(j)Case 0 To 60 bn(j, 5)= bn(j, 5)+ 1 Case 60 To 70 bn(j, 6)= bn(j, 6)+ 1 Case 70 To 80 bn(j, 7)= bn(j, 7)+ 1 Case 80 To 90 bn(j, 8)= bn(j, 8)+ 1 Case 90 To 100 bn(j, 9)= bn(j, 9)+ 1 End Select Next i Print prog(j).name;bn(j, 5), bn(j, 6), bn(j, 7), bn(j, 8), bn(j, 9)Next j End Sub Private Sub bujige_Click()Cls Dim i%, j%, t% Print Spc(2);“学号”;Spc(5);“姓名”;Spc(5);“不及格课程”;Spc(6);“学分”;Spc(4);“成绩” For i = 1 To UBound(grade) t = 0 For j = 1 To UBound(prog) If grade(i).score(j)< 60 Then t = t + 1 End If If t > 1 And grade(i).score(j)< 60 Then Print Tab(25);prog(j).name;Tab(38);Format(prog(j).xf, “0.0”);Spc(2);grade(i).score(j) ElseIf t = 1 And grade(i).score(j)< 60 Then Print Spc(3);grade(i).xh;grade(i).xm;Tab(25);prog(j).name;Tab(38);Format(prog(j).xf, “0.0”);Spc(4);grade(i).score(j) End If Next j Next i End Sub Private Sub youdengsheng_Click()Cls Dim i%, j%, t% Print Tab(3);“学号”;Spc(6);“姓名”;Spc(4);“英语”;Spc(4);“数学”;Spc(4);“VB”;Spc(3);“物理”;Spc(3);“专业概论”;Spc(3);“平均成绩”;Spc(3);“名次” For i = 1 To UBound(grade) t = 0 For j = 1 To UBound(prog) If grade(i).score(j)>= 95 Then t = t + 1 End If Next j If grade(i).aver >= 90 Or grade(i).rank <= 3 Or(t = 2 And grade(i).aver >= 85)Then Print Tab(3);grade(i).xh;Tab(13);grade(i).xm;Tab(21);grade(i).score(1);Spc(3);grade(i).score(2);Spc(3);grade(i).score(3);Spc(3);grade(i).score(4);Spc(3);grade(i).score(5);Spc(8);Format(grade(i).aver, “0.00”);Spc(5);grade(i).rank End If Next i End Sub Private Sub chengjitiao_click()Cls Dim i% For i = LBound(grade)To UBound(grade)Print “学号”;Spc(6);“姓名”;Spc(8);“英语”;Spc(6);“数学”;Spc(4);“体育”;Spc(6);“物理”;Spc(5);“化学”;Spc(6);“加权平均分”;Spc(5);“平均分”;Spc(5);“名次” Print Spc(2);grade(i).xh;grade(i).xm;Spc(0);grade(i).score(1);Spc(5);grade(i).score(2);Spc(5);grade(i).score(3);Spc(5);grade(i).score(4);Spc(5);grade(i).score(5);Spc(9);grade(i).aver;Spc(7);grade(i).aver;Spc(5);grade(i).rank Next i End Sub第五篇:简易学生成绩管理系统