精华内容
下载资源
问答
  • 这是一套学生上课考勤表excel模版下载,喜欢的人都来下载吧。该文档为学生上课考勤表excel模版下载,是一份很不错的参考资料,具有较高参考价值,感兴趣的可以下载看看
  • 统计A每个学生的suma(按时上课)sumb(按时下课)sumc(迟到)sumd(旷课) 如果suma=suamb,则正常出勤normal=suma; 如果suma>sumb,则早退early=suma-sumb; 迟到later=sumc; 旷课absenteeism=sumd 问题是 1.因为表里有...
  • printf(" 请输入新建立考勤表的总人数:"); scanf("%d",&j); head=p2=NULL; /*做空表*/ p1=(struct student*)malloc(LEN); printf(" 请输入第 1 名学生的姓名"); scanf("%s",p1->student_name); ...
  • 根据我们一年多在纪检工作中出现的漏洞和不足,我们纪律部所有成员做出新学期的工作计划: 一、不定时对晚自习进行学生到位情况检查,认真做好考勤工作,本着实事求是的原则做好与记录及违纪登记,贯彻执行,将定期...
  • 文章结合移动互联技术、二维码技术,结合学校教务管理系统的相关信息接口,构建一个基于Android平台的智慧考勤应用系统。...学生签到系统实时显示学生上课的课程,学生可以通过扫二维码的方式进行签到。
  • 学生请假管理系统.zip

    2020-03-19 21:49:32
    目前高校学生上课考勤管理都是以任课老师上课点名,记录学生上课出勤情况,学期末根据上课出勤及作业登记对学生平时成绩打分,然后把数据上交到各院系。学生请假以传统的写请假条的形式向各自班主任请假,时间长...
  • 2020年学生会纪律部的个人工作计划5篇 纪律部是学生会的一个重要部门,负责协调做好全体同学早读、晚自习和日常上课、集会、活动的考勤与检查,仪容仪表的检查,及时发现并制止各种违纪行为,配合学生工作部维护学校...
  • 大学纪检部部长个人工作计划范文 【篇一】 一、每天安排人员对早,晚到校的学生,迟到进行检查与登记. 二、每天晚间安排人员对篮球场进行管理. 三、每天晚上进行晚自习纪律检查和纪委考核. 四、每月对学生会...
  • 数据库实验二

    2019-02-22 17:17:00
    1.设计与建立上课考勤表Attend_???,能登记每个学生的考勤记录包括正常、迟到、旷课、请假。能统计以专业为单位的出勤类别并进行打分评价排序,如迟到、旷课、请假分别扣2,5,1分。可以考虑给一初始的分值,以免...

    实验要求

    1.设计与建立上课考勤表Attend_???,能登记每个学生的考勤记录包括正常、迟到、旷课、请假。能统计以专业为单位的出勤类别并进行打分评价排序,如迟到、旷课、请假分别扣2,5,1分。可以考虑给一初始的分值,以免负值。

    2.为major表与stud表增加sum_evaluation 数值字段,以记录根据考勤表Attend_???(Attendance)中出勤类别打分汇总的值。

    3.建立个人考勤汇总表stud_attend与专业考勤表major_attend,表示每个学生或每个专业在某时间周期(起始日期,终止日期)正常、迟到、旷课、请假次数及考勤分值。

    4.根据major表中的值与stud中的值,为考勤表Attend输入足够的样本值,要求每个专业都要有学生,有部分学生至少要有一周的每天5个单元(12,34,56,78,90,没有课的单元可以没有考勤记录)的考勤完整记录,其中正常、迟到、旷课、请假可以用数字或字母符号表示。

    5.建立触发器,当对考勤表Attend表进行相应插入、删除、修改时,对stud表的sum_evaluation 数值进行相应的数据更新。

    6.建立过程,生成某专业某时段(起、止日期)的考勤汇总表major_attend中各字段值,并汇总相应专业,将考勤分值的汇总结果写入到major表中的sum_evaluation中。

    create table T_attendscore_J122
    (
        mstatus nchar(2) primary key,
        score int
    );
    insert into T_attendscore_J122 values('正常',0);
    insert into T_attendscore_J122 values('请假',1);
    insert into T_attendscore_J122 values('迟到',2);
    insert into T_attendscore_J122 values('旷课',5);
    
    drop table T_attend_J122;
    create table T_attend_J122
    (
        sno char(10),
        mno char(2),
        sday date,
        unit char(2) check(unit in('12','34','56','78','90')),
        mstatus nchar(2) check(mstatus in('正常','请假','迟到','旷课')),
        constraint pk_T_attend primary key(sno,sday,unit),
        constraint fk_T_attend_sno foreign key(sno) references T_stud_J122(sno),
        constraint fk_T_attend_mno foreign key(mno) references T_major_J122(mno)
    );
    
    alter table T_stud_J122 add(sum_evaluation number);
    alter table T_major_J122 add(sum_evaluation number);
    
    insert into T_attend_J122 values('0902160122','02','11-11月-2018','12','正常');
    insert into T_attend_J122 values('0902160122','02','11-11月-2018','34','迟到');
    insert into T_attend_J122 values('0902160122','02','12-11月-2018','12','正常');
    insert into T_attend_J122 values('0902160122','02','12-11月-2018','78','正常');
    insert into T_attend_J122 values('0902160122','02','12-11月-2018','90','正常');
    insert into T_attend_J122 values('0902160122','02','13-11月-2018','12','旷课');
    insert into T_attend_J122 values('0902160122','02','13-11月-2018','34','请假');
    insert into T_attend_J122 values('0902160122','02','13-11月-2018','90','旷课');
    insert into T_attend_J122 values('0902160122','02','14-11月-2018','34','正常');
    insert into T_attend_J122 values('0902160122','02','14-11月-2018','56','正常');
    insert into T_attend_J122 values('0902160122','02','14-11月-2018','78','正常');
    insert into T_attend_J122 values('0902160122','02','15-11月-2018','12','请假');
    insert into T_attend_J122 values('0902160122','02','15-11月-2018','34','请假');
    insert into T_attend_J122 values('0902160122','02','15-11月-2018','78','正常');
    
    insert into T_attend_J122 values('0902160121','02','11-11月-2018','12','正常');
    insert into T_attend_J122 values('0902160121','02','11-11月-2018','34','迟到');
    insert into T_attend_J122 values('0902160121','02','12-11月-2018','12','迟到');
    insert into T_attend_J122 values('0902160121','02','12-11月-2018','78','正常');
    insert into T_attend_J122 values('0902160121','02','12-11月-2018','90','旷课');
    insert into T_attend_J122 values('0902160121','02','13-11月-2018','12','旷课');
    insert into T_attend_J122 values('0902160121','02','13-11月-2018','34','请假');
    insert into T_attend_J122 values('0902160121','02','13-11月-2018','90','旷课');
    insert into T_attend_J122 values('0902160121','02','14-11月-2018','34','正常');
    insert into T_attend_J122 values('0902160121','02','14-11月-2018','56','正常');
    insert into T_attend_J122 values('0902160121','02','14-11月-2018','78','正常');
    insert into T_attend_J122 values('0902160121','02','15-11月-2018','12','请假');
    insert into T_attend_J122 values('0902160121','02','15-11月-2018','34','请假');
    insert into T_attend_J122 values('0902160121','02','15-11月-2018','78','正常');
    
    insert into T_attend_J122 values('0902160120','02','11-11月-2018','12','正常');
    insert into T_attend_J122 values('0902160120','02','11-11月-2018','34','迟到');
    insert into T_attend_J122 values('0902160120','02','12-11月-2018','12','迟到');
    insert into T_attend_J122 values('0902160120','02','12-11月-2018','78','正常');
    insert into T_attend_J122 values('0902160120','02','12-11月-2018','90','正常');
    insert into T_attend_J122 values('0902160120','02','13-11月-2018','12','旷课');
    insert into T_attend_J122 values('0902160120','02','13-11月-2018','34','旷课');
    insert into T_attend_J122 values('0902160120','02','13-11月-2018','90','旷课');
    insert into T_attend_J122 values('0902160120','02','14-11月-2018','34','正常');
    insert into T_attend_J122 values('0902160120','02','14-11月-2018','56','正常');
    insert into T_attend_J122 values('0902160120','02','14-11月-2018','78','正常');
    insert into T_attend_J122 values('0902160120','02','15-11月-2018','12','请假');
    insert into T_attend_J122 values('0902160120','02','15-11月-2018','34','请假');
    insert into T_attend_J122 values('0902160120','02','15-11月-2018','78','正常');
    
    insert into T_attend_J122 values('0919160122','19','11-11月-2018','12','正常');
    insert into T_attend_J122 values('0919160122','19','11-11月-2018','34','迟到');
    insert into T_attend_J122 values('0919160122','19','12-11月-2018','12','迟到');
    insert into T_attend_J122 values('0919160122','19','12-11月-2018','78','正常');
    insert into T_attend_J122 values('0919160122','19','12-11月-2018','90','正常');
    insert into T_attend_J122 values('0919160122','19','13-11月-2018','12','旷课');
    insert into T_attend_J122 values('0919160122','19','13-11月-2018','34','请假');
    insert into T_attend_J122 values('0919160122','19','13-11月-2018','90','旷课');
    insert into T_attend_J122 values('0919160122','19','14-11月-2018','34','正常');
    insert into T_attend_J122 values('0919160122','19','14-11月-2018','56','正常');
    insert into T_attend_J122 values('0919160122','19','14-11月-2018','78','正常');
    insert into T_attend_J122 values('0919160122','19','15-11月-2018','12','请假');
    insert into T_attend_J122 values('0919160122','19','15-11月-2018','34','旷课');
    insert into T_attend_J122 values('0919160122','19','15-11月-2018','78','正常');
    
    insert into T_attend_J122 values('0919160121','19','11-11月-2018','12','正常');
    insert into T_attend_J122 values('0919160121','19','11-11月-2018','34','正常');
    insert into T_attend_J122 values('0919160121','19','12-11月-2018','12','迟到');
    insert into T_attend_J122 values('0919160121','19','12-11月-2018','78','正常');
    insert into T_attend_J122 values('0919160121','19','12-11月-2018','90','旷课');
    insert into T_attend_J122 values('0919160121','19','13-11月-2018','12','旷课');
    insert into T_attend_J122 values('0919160121','19','13-11月-2018','34','请假');
    insert into T_attend_J122 values('0919160121','19','13-11月-2018','90','旷课');
    insert into T_attend_J122 values('0919160121','19','14-11月-2018','34','正常');
    insert into T_attend_J122 values('0919160121','19','14-11月-2018','56','正常');
    insert into T_attend_J122 values('0919160121','19','14-11月-2018','78','正常');
    insert into T_attend_J122 values('0919160121','19','15-11月-2018','12','请假');
    insert into T_attend_J122 values('0919160121','19','15-11月-2018','34','旷课');
    insert into T_attend_J122 values('0919160121','19','15-11月-2018','78','正常');
    
    insert into T_attend_J122 values('0919160120','19','11-11月-2018','12','正常');
    insert into T_attend_J122 values('0919160120','19','11-11月-2018','34','迟到');
    insert into T_attend_J122 values('0919160120','19','12-11月-2018','12','迟到');
    insert into T_attend_J122 values('0919160120','19','12-11月-2018','78','正常');
    insert into T_attend_J122 values('0919160120','19','12-11月-2018','90','请假');
    insert into T_attend_J122 values('0919160120','19','13-11月-2018','12','迟到');
    insert into T_attend_J122 values('0919160120','19','13-11月-2018','34','请假');
    insert into T_attend_J122 values('0919160120','19','13-11月-2018','90','正常');
    insert into T_attend_J122 values('0919160120','19','14-11月-2018','34','正常');
    insert into T_attend_J122 values('0919160120','19','14-11月-2018','56','正常');
    insert into T_attend_J122 values('0919160120','19','14-11月-2018','78','正常');
    insert into T_attend_J122 values('0919160120','19','15-11月-2018','12','请假');
    insert into T_attend_J122 values('0919160120','19','15-11月-2018','34','旷课');
    insert into T_attend_J122 values('0919160120','19','15-11月-2018','78','正常');
    
    insert into T_attend_J122 values('0921160122','21','11-11月-2018','12','请假');
    insert into T_attend_J122 values('0921160122','21','11-11月-2018','34','迟到');
    insert into T_attend_J122 values('0921160122','21','12-11月-2018','12','正常');
    insert into T_attend_J122 values('0921160122','21','12-11月-2018','78','请假');
    insert into T_attend_J122 values('0921160122','21','12-11月-2018','90','迟到');
    insert into T_attend_J122 values('0921160122','21','13-11月-2018','12','迟到');
    insert into T_attend_J122 values('0921160122','21','13-11月-2018','34','请假');
    insert into T_attend_J122 values('0921160122','21','13-11月-2018','90','正常');
    insert into T_attend_J122 values('0921160122','21','14-11月-2018','34','旷课');
    insert into T_attend_J122 values('0921160122','21','14-11月-2018','56','正常');
    insert into T_attend_J122 values('0921160122','21','14-11月-2018','78','正常');
    insert into T_attend_J122 values('0921160122','21','15-11月-2018','12','迟到');
    insert into T_attend_J122 values('0921160122','21','15-11月-2018','34','旷课');
    insert into T_attend_J122 values('0921160122','21','15-11月-2018','78','正常');
    
    insert into T_attend_J122 values('0921160121','21','11-11月-2018','12','正常');
    insert into T_attend_J122 values('0921160121','21','11-11月-2018','34','迟到');
    insert into T_attend_J122 values('0921160121','21','12-11月-2018','12','正常');
    insert into T_attend_J122 values('0921160121','21','12-11月-2018','78','请假');
    insert into T_attend_J122 values('0921160121','21','12-11月-2018','90','迟到');
    insert into T_attend_J122 values('0921160121','21','13-11月-2018','12','请假');
    insert into T_attend_J122 values('0921160121','21','13-11月-2018','34','请假');
    insert into T_attend_J122 values('0921160121','21','13-11月-2018','90','正常');
    insert into T_attend_J122 values('0921160121','21','14-11月-2018','34','正常');
    insert into T_attend_J122 values('0921160121','21','14-11月-2018','56','正常');
    insert into T_attend_J122 values('0921160121','21','14-11月-2018','78','正常');
    insert into T_attend_J122 values('0921160121','21','15-11月-2018','12','迟到');
    insert into T_attend_J122 values('0921160121','21','15-11月-2018','34','旷课');
    insert into T_attend_J122 values('0921160121','21','15-11月-2018','78','正常');
    
    insert into T_attend_J122 values('0921160120','21','11-11月-2018','12','正常');
    insert into T_attend_J122 values('0921160120','21','11-11月-2018','34','迟到');
    insert into T_attend_J122 values('0921160120','21','12-11月-2018','12','正常');
    insert into T_attend_J122 values('0921160120','21','12-11月-2018','78','请假');
    insert into T_attend_J122 values('0921160120','21','12-11月-2018','90','迟到');
    insert into T_attend_J122 values('0921160120','21','13-11月-2018','12','迟到');
    insert into T_attend_J122 values('0921160120','21','13-11月-2018','34','请假');
    insert into T_attend_J122 values('0921160120','21','13-11月-2018','90','正常');
    insert into T_attend_J122 values('0921160120','21','14-11月-2018','34','正常');
    insert into T_attend_J122 values('0921160120','21','14-11月-2018','56','正常');
    insert into T_attend_J122 values('0921160120','21','14-11月-2018','78','正常');
    insert into T_attend_J122 values('0921160120','21','15-11月-2018','12','请假');
    insert into T_attend_J122 values('0921160120','21','15-11月-2018','34','旷课');
    insert into T_attend_J122 values('0921160120','21','15-11月-2018','78','正常');
    
    select T_attend_J122.mstatus,mno,sum(score)
    from T_attend_J122,T_attendscore_J122
    where T_attend_J122.mstatus=T_attendscore_J122.mstatus and 
    T_attend_J122.mstatus<>'正常'
    group by mno,T_attend_J122.mstatus
    order by sum(score);
    
    create table T_stud_attend_J122
    (
        sno char(10),
        stime date,
        etime date,
        normalcnt int,
        leavecnt int,
        latecnt int,
        absentcnt int,
        score number,
        constraint pk_T_stud_attend_time primary key(sno,stime,etime),
        constraint fk_T_stud_attend_sno foreign key(sno) references T_stud_J122(sno)
    );
    
    create table T_major_attend_J122
    (
        mno char(2),
        stime date,
        etime date,
        normalcnt int,
        leavecnt int,
        latecnt int,
        absentcnt int,
        score number,
        constraint pk_T_major_attend_time primary key(mno,stime,etime),
        constraint fk_T_major_attend_J122 foreign key(mno) references T_major_J122(mno)
    );
    
    drop trigger tg_T_attend_J122;
    create trigger tg_T_attend_J122
        before insert or update or delete on T_attend_J122
        for each row
    declare
        mnewscore binary_integer;
        moldscore binary_integer;
    begin 
        if inserting then
            select score into mnewscore from T_attendscore_J122 where mstatus=:new.mstatus;
            update T_stud_J122 set sum_evaluation=nvl(sum_evaluation,0)+mnewscore where T_stud_J122.sno=:new.sno;
        elsif updating then
            select score into mnewscore from T_attendscore_J122 where mstatus=:new.mstatus;
            select score into moldscore from T_attendscore_J122 where mstatus=:old.mstatus;
            update T_stud_J122 set sum_evaluation=nvl(sum_evaluation,0)-moldscore where T_stud_J122.sno=:old.sno;
            update T_stud_J122 set sum_evaluation=nvl(sum_evaluation,0)+mnewscore where T_stud_J122.sno=:new.sno;
        else 
            select score into moldscore from T_attendscore_J122 where mstatus=:old.mstatus;
            update T_stud_J122 set sum_evaluation=nvl(sum_evaluation,0)-moldscore where T_stud_J122.sno=:old.sno;
        end if;
    end;
    
    select sno,sum_evaluation from T_stud_J122 where sno='0902160122';
    insert into T_attend_J122 values('0902160122','02','16-11月-2018','56','请假');
    select sno,sum_evaluation from T_stud_J122 where sno='0902160122';
    
    drop procedure P_attend_J122;
    create procedure P_attend_J122 (pmno char,pstime date,petime date)as
        pscore int:=0;
    begin
        insert into T_major_attend_J122 values(pmno,pstime,petime,0,0,0,0,0);
        for cur in(
            select T_attend_J122.mstatus,count(T_attend_J122.mstatus)mstatus_cnt,sum(score)pscore
            from T_attend_J122,T_attendscore_J122
            where T_attend_J122.mstatus=T_attendscore_J122.mstatus and T_attend_J122.mno=pmno
            and sday>=pstime and sday<=petime
            group by T_attend_J122.mstatus)loop
            if cur.mstatus='正常' then
            update T_major_attend_J122 set normalcnt=cur.mstatus_cnt where mno=pmno and stime=pstime and etime=petime;
            elsif cur.mstatus='请假' then
            update T_major_attend_J122 set leavecnt=cur.mstatus_cnt where mno=pmno and stime=pstime and etime=petime;
            elsif cur.mstatus='迟到' then
            update T_major_attend_J122 set latecnt=cur.mstatus_cnt where mno=pmno and stime=pstime and etime=petime;
            elsif cur.mstatus='旷课' then
            update T_major_attend_J122 set absentcnt=cur.mstatus_cnt where mno=pmno and stime=pstime and etime=petime;
            end if;
            pscore:=pscore+cur.pscore;
        end loop;
        update T_major_attend_J122 set score=pscore where mno=pmno and stime=pstime and etime=petime;
        update T_major_J122 set sum_evaluation=pscore where mno=pmno;
    end;
    .
    /
    
    set linesize 200;
    select * from T_major_attend_J122;
    select * from T_major_J122;
    exec P_attend_J122('02','11-11月-2018','15-11月-2018');
    exec P_attend_J122('19','11-11月-2018','15-11月-2018');
    exec P_attend_J122('21','11-11月-2018','15-11月-2018');
    select * from T_major_attend_J122;
    select * from T_major_J122;

     

    转载于:https://www.cnblogs.com/jkzr/p/10419566.html

    展开全文
  • 设计与建立上课考勤表t_attend_j432,能登记每个学生的考勤记录包括正常、迟到、旷课、请假。能统计以专业为单位的出勤类别并进行打分评价排序,如迟到、旷课、请假分别扣2,5,1分。可以考虑给一初始的分值,以免...

    一、实验内容

        1.设计与建立上课考勤表t_attend_j432,能登记每个学生的考勤记录包括正常、迟到、旷课、请假。能统计以专业为单位的出勤类别并进行打分评价排序,如迟到、旷课、请假分别扣2,5,1分。可以考虑给一初始的分值,以免负值。

        2.为t_major_j432表与t_stud_432表增加sum_evaluation 数值字段,以记录根据考勤表t_attend_j432(Attendance)中出勤类别打分汇总的值(这两张表参考实验一)。

        3.建立个人考勤汇总表t_stud_atte_j432与专业考勤表t_major_atte_j432,表示每个学生或每个专业在某时间周期(起始日期,终止日期)正常、迟到、旷课、请假次数及考勤分值。

        4.根据实验一t_major_j432表中的值与t_stud_j432中的值,为考勤表t_attend_j432输入足够的样本值,要求每个专业都要有学生,有部分学生至少要有一周的每天5个单元(12,34,56,78,90,没有课的单元可以没有考勤记录)的考勤完整记录,其中正常、迟到、旷课、请假 可以用数字或字母符号表示。

        5.建立触发器,当对考勤表t_attend_j432表进行相应插入、删除、修改时,对t_stud_432表的sum_evaluation 数值进行相应的数据更新。

        6.建立过程,生成某专业某时段(起、止日期)的考勤汇总表t_major_atte_j432中各字段值,并汇总相应专业,将考勤分值的汇总结果写入到t_major_j432表中的sum_evaluation中。

    二、实验源程序

    conn c##u_j432/p123789
    --1.为学生表和专业表各添加一列:考勤分数
    desc t_stud_j432;
    desc t_major_j432;
    alter table t_stud_j432 add sum_evaluation number(3) default 100;
    alter table t_major_j432 add sum_evaluation number(3) default 500;
    desc t_stud_j432;
    desc t_major_j432;
    
    --2.建立考勤表
    --正常:A
    --迟到:B
    --旷课:C
    --请假:D
    --没课:E
    drop table t_attend_j432;
    create table t_attend_j432(
    	nowdate date not null,
    	sno varchar(10) not null,
    	name varchar(16) not null,
    	class12 varchar(4) not null,
    	class34 varchar(4) not null,
    	class56 varchar(4) not null,
    	class78 varchar(4) not null,
    	class90 varchar(4) not null,
    	constraint pk_attend_nowdate_sno primary key(nowdate,sno),
    	constraint ck_attend_class12 check(class12 in('A','B','C','D','E')),
    	constraint ck_attend_class34 check(class34 in('A','B','C','D','E')),
    	constraint ck_attend_class56 check(class56 in('A','B','C','D','E')),
    	constraint ck_attend_class78 check(class78 in('A','B','C','D','E')),
    	constraint ck_attend_class90 check(class90 in('A','B','C','D','E')),
    	constraint ck_attend_sno foreign key(sno) references t_stud_j432(sno));
    
    --2.插入一周数据:2018.11.13至2018.11.19
    insert into t_attend_j432 values(to_date('20181113','yyyymmdd'),'0921160114','李浩汉','A','B','C','A','E');
    insert into t_attend_j432 values(to_date('20181113','yyyymmdd'),'0921160115','李文博','A','E','C','E','E');
    insert into t_attend_j432 values(to_date('20181113','yyyymmdd'),'0921160117','徐聪','A','B','E','A','D');
    insert into t_attend_j432 values(to_date('20181113','yyyymmdd'),'0921160120','周文轩','E','A','E','E','D');
    --自己可添加数据
    
    --3.显示考勤表
    set linesize 150;
    set pagesize 100;
    col name format a7;
    col sno format a11;
    col class12 format a7;
    col class34 format a7;
    col class65 format a7;
    col class78 format a7;
    col class90 format a7;
    alter session set nls_date_format = 'yyyy-mm-dd';
    select * from t_attend_j432;
    
    --4.建立学生考勤表
    drop table t_stud_atte_j432;
    create table t_stud_atte_j432(
    	startdate date default to_date('21000101','yyyyddmm'),
    	stopdate date default to_date('19000101','yyyyddmm'),
    	sno varchar2(10),
    	sname varchar2(32),
    	class_a number(3) default 0,
    	class_b number(3) default 0,
    	class_c number(3) default 0,
    	class_d number(3) default 0,
    	result number(3) default 100,
    	constraint pk_stud_atte_sno primary key(sno),
    	constraint fk_stud_atte_sno foreign key(sno) references t_stud_j432(sno));
    
    --5.将学生表的所有学生插入学生考勤表
    insert into t_stud_atte_j432(sno,sname) select t_stud_j432.sno,t_stud_j432.sname from t_stud_j432;
    
    --6.显示学生考勤表
    col sname format a7;
    alter session set nls_date_format = 'yyyy-mm-dd';
    select * from t_stud_atte_j432;
    
    --7.建立专业考勤表
    drop table t_major_atte_j432;
    create table t_major_atte_j432(
    	startdate date default to_date('20181001','yyyyddmm'),
    	stopdate date default to_date('20181001','yyyyddmm'),
    	mno varchar2(2),
    	mname varchar2(32),
    	class_a number(3) default 0,
    	class_b number(3) default 0,
    	class_c number(3) default 0,
    	class_d number(3) default 0,
    	result number(3) default 500,
    	constraint pk_major_atte_sno primary key(mno),
    	constraint fk_major_atte_sno foreign key(mno) references t_major_j432(mno));
    
    --8.将专业表的所有专业插入专业考勤表
    insert into t_major_atte_j432(mno,mname) select t_major_j432.mno,t_major_j432.mname from t_major_j432;
    
    --9.显示专业考勤表
    col mname format a20;
    alter session set nls_date_format = 'yyyy-mm-dd';
    select * from t_major_atte_j432;
    
    --10.建立过程:汇总学生考勤数据,并将成绩更新到学生表中
    create or replace procedure p_stud_atte_j432
    as
    cursor stud_atte_line is select * from t_attend_j432;
    cur_atte t_attend_j432%rowtype;
    class_sa number(3);
    class_sb number(3);
    class_sc number(3);
    class_sd number(3);
    class_res number(3);
    
    time_min date;
    time_max date;
    begin
    delete from t_stud_atte_j432;
    insert into t_stud_atte_j432(sno,sname) select t_stud_j432.sno,t_stud_j432.sname from t_stud_j432;
    for cur_atte in stud_atte_line loop
    
    	select startdate into time_min from t_stud_atte_j432 where t_stud_atte_j432.sno=cur_atte.sno;
    	select stopdate into time_max from t_stud_atte_j432 where t_stud_atte_j432.sno=cur_atte.sno;
    	select class_a into class_sa from t_stud_atte_j432 where t_stud_atte_j432.sno=cur_atte.sno;
    	select class_b into class_sb from t_stud_atte_j432 where t_stud_atte_j432.sno=cur_atte.sno;
    	select class_c into class_sc from t_stud_atte_j432 where t_stud_atte_j432.sno=cur_atte.sno;
    	select class_d into class_sd from t_stud_atte_j432 where t_stud_atte_j432.sno=cur_atte.sno;
    	
    	if(time_min>cur_atte.nowdate)then
    		time_min:=cur_atte.nowdate;
    	end if;
    	if(time_max<cur_atte.nowdate)then
    		time_max:=cur_atte.nowdate;
    	end if;
    
    	if(cur_atte.class12='A')then
    		class_sa:=class_sa+1;
    	elsif(cur_atte.class12='B')then
    		class_sb:=class_sb+1;
    	elsif(cur_atte.class12='C')then
    		class_sc:=class_sc+1;
    	elsif(cur_atte.class12='D')then
    		class_sd:=class_sd+1;
    	end if;
    
    	if(cur_atte.class34='A')then
    		class_sa:=class_sa+1;
    	elsif(cur_atte.class34='B')then
    		class_sb:=class_sb+1;
    	elsif(cur_atte.class34='C')then
    		class_sc:=class_sc+1;
    	elsif(cur_atte.class34='D')then
    		class_sd:=class_sd+1;
    	end if;
    
    	if(cur_atte.class56='A')then
    		class_sa:=class_sa+1;
    	elsif(cur_atte.class56='B')then
    		class_sb:=class_sb+1;
    	elsif(cur_atte.class56='C')then
    		class_sc:=class_sc+1;
    	elsif(cur_atte.class56='D')then
    		class_sd:=class_sd+1;
    	end if;
    
    	if(cur_atte.class78='A')then
    		class_sa:=class_sa+1;
    	elsif(cur_atte.class78='B')then
    		class_sb:=class_sb+1;
    	elsif(cur_atte.class78='C')then
    		class_sc:=class_sc+1;
    	elsif(cur_atte.class78='D')then
    		class_sd:=class_sd+1;
    	end if;
    
    	if(cur_atte.class90='A')then
    		class_sa:=class_sa+1;
    	elsif(cur_atte.class90='B')then
    		class_sb:=class_sb+1;
    	elsif(cur_atte.class90='C')then
    		class_sc:=class_sc+1;
    	elsif(cur_atte.class90='D')then
    		class_sd:=class_sd+1;
    	end if;
    
    	class_res:=100-class_sb*2-class_sc*5-class_sd;
    	
    	update t_stud_atte_j432 set t_stud_atte_j432.startdate=time_min where t_stud_atte_j432.sno=cur_atte.sno;
    	update t_stud_atte_j432 set t_stud_atte_j432.stopdate=time_max where t_stud_atte_j432.sno=cur_atte.sno;
    	update t_stud_atte_j432 set t_stud_atte_j432.class_a=class_sa where t_stud_atte_j432.sno=cur_atte.sno;
    	update t_stud_atte_j432 set t_stud_atte_j432.class_b=class_sb where t_stud_atte_j432.sno=cur_atte.sno;
    	update t_stud_atte_j432 set t_stud_atte_j432.class_c=class_sc where t_stud_atte_j432.sno=cur_atte.sno;
    	update t_stud_atte_j432 set t_stud_atte_j432.class_d=class_sd where t_stud_atte_j432.sno=cur_atte.sno;
    	update t_stud_atte_j432 set t_stud_atte_j432.result=class_res where t_stud_atte_j432.sno=cur_atte.sno;
    	update t_stud_j432 set t_stud_j432.sum_evaluation=class_res where t_stud_j432.sno=cur_atte.sno;
    end loop;
    end;
    /
    show error
    
    --11.显示学生考勤表
    exec p_stud_atte_j432;
    col sname format a7;
    alter session set nls_date_format = 'yyyy-mm-dd';
    select * from t_stud_atte_j432;
    
    --12.查看两名学生的考勤记录,查看数据汇总是否正确
    select * from t_attend_j432 where name='冯玲';
    select * from t_attend_j432 where name='吴月颖';
    
    --13.建立过程:汇总专业考勤数据,并将成绩更新到专业表中
    create or replace procedure p_major_atte_j432(start_mtime date,stop_mtime date)
    as
    cursor major_atte_line is select * from t_attend_j432 where t_attend_j432.nowdate>=start_mtime and t_attend_j432.nowdate<=stop_mtime;
    cur_atte t_attend_j432%rowtype;
    class_ma number(3);
    class_mb number(3);
    class_mc number(3);
    class_md number(3);
    class_res number(3);
    begin
    delete from t_major_atte_j432;
    insert into t_major_atte_j432(mno,mname) select t_major_j432.mno,t_major_j432.mname from t_major_j432;
    
    for cur_atte in major_atte_line loop
    
    	select class_a into class_ma from t_major_atte_j432 where t_major_atte_j432.mno=substr(cur_atte.sno,3,2);
    	select class_b into class_mb from t_major_atte_j432 where t_major_atte_j432.mno=substr(cur_atte.sno,3,2);
    	select class_c into class_mc from t_major_atte_j432 where t_major_atte_j432.mno=substr(cur_atte.sno,3,2);
    	select class_d into class_md from t_major_atte_j432 where t_major_atte_j432.mno=substr(cur_atte.sno,3,2);
    
    	if(cur_atte.class12='A')then
    		class_ma:=class_ma+1;
    	elsif(cur_atte.class12='B')then
    		class_mb:=class_mb+1;
    	elsif(cur_atte.class12='C')then
    		class_mc:=class_mc+1;
    	elsif(cur_atte.class12='D')then
    		class_md:=class_md+1;
    	end if;
    
    	if(cur_atte.class34='A')then
    		class_ma:=class_ma+1;
    	elsif(cur_atte.class34='B')then
    		class_mb:=class_mb+1;
    	elsif(cur_atte.class34='C')then
    		class_mc:=class_mc+1;
    	elsif(cur_atte.class34='D')then
    		class_md:=class_md+1;
    	end if;
    
    	if(cur_atte.class56='A')then
    		class_ma:=class_ma+1;
    	elsif(cur_atte.class56='B')then
    		class_mb:=class_mb+1;
    	elsif(cur_atte.class56='C')then
    		class_mc:=class_mc+1;
    	elsif(cur_atte.class56='D')then
    		class_md:=class_md+1;
    	end if;
    
    	if(cur_atte.class78='A')then
    		class_ma:=class_ma+1;
    	elsif(cur_atte.class78='B')then
    		class_mb:=class_mb+1;
    	elsif(cur_atte.class78='C')then
    		class_mc:=class_mc+1;
    	elsif(cur_atte.class78='D')then
    		class_md:=class_md+1;
    	end if;
    
    	if(cur_atte.class90='A')then
    		class_ma:=class_ma+1;
    	elsif(cur_atte.class90='B')then
    		class_mb:=class_mb+1;
    	elsif(cur_atte.class90='C')then
    		class_mc:=class_mc+1;
    	elsif(cur_atte.class90='D')then
    		class_md:=class_md+1;
    	end if;
    
    	class_res:=500-class_mb*2-class_mc*5-class_md;
    	
    	update t_major_atte_j432 set t_major_atte_j432.startdate=start_mtime where t_major_atte_j432.mno=substr(cur_atte.sno,3,2);
    	update t_major_atte_j432 set t_major_atte_j432.stopdate=stop_mtime where t_major_atte_j432.mno=substr(cur_atte.sno,3,2);
    	update t_major_atte_j432 set t_major_atte_j432.class_a=class_ma where t_major_atte_j432.mno=substr(cur_atte.sno,3,2);
    	update t_major_atte_j432 set t_major_atte_j432.class_b=class_mb where t_major_atte_j432.mno=substr(cur_atte.sno,3,2);
    	update t_major_atte_j432 set t_major_atte_j432.class_c=class_mc where t_major_atte_j432.mno=substr(cur_atte.sno,3,2);
    	update t_major_atte_j432 set t_major_atte_j432.class_d=class_md where t_major_atte_j432.mno=substr(cur_atte.sno,3,2);
    	update t_major_atte_j432 set t_major_atte_j432.result=class_res where t_major_atte_j432.mno=substr(cur_atte.sno,3,2);
    	update t_major_j432 set t_major_j432.sum_evaluation=class_res where t_major_j432.mno=substr(cur_atte.sno,3,2);
    end loop;
    end;
    /
    show error
    
    --14.显示专业考勤表
    exec p_major_atte_j432('20181113','20181119');
    col mname format a20;
    alter session set nls_date_format = 'yyyy-mm-dd';
    select * from t_major_atte_j432;
    
    --15.建立触发器:当对考勤表进行相应插入、删除、修改时,对stud表的sum_evaluation数值进行相应的数据更新
    create or replace trigger tg_attend_j432
    after insert or update or delete on t_attend_j432
    begin
    p_stud_atte_j432;
    end;
    /
    
    --16.测试触发器
    column sno format a11;
    column sname format a7;
    column sex format a4;
    column tel format a12;
    column email format a32;
    column birthday format a11;
    column mno format a11;
    column majorno format a3;
    set linesize 150;
    set pagesize 100;
    alter session set nls_date_format = 'yyyy-mm-dd';
    --插入测试
    select * from t_stud_j432 where sname='郭泽华';
    insert into t_attend_j432 values(to_date('20181120','yyyymmdd'),'0919160110','郭泽华','B','B','B','E','E');
    select * from t_stud_j432 where sname='郭泽华';
    
    --删除测试
    select * from t_stud_j432 where sname='郭泽华';
    delete from t_attend_j432 where name='郭泽华' and nowdate=to_date('20181120','yyyymmdd');
    select * from t_stud_j432 where sname='郭泽华';
    
    --更新测试
    select * from t_attend_j432 where name='郭泽华';
    select * from t_stud_j432 where sname='郭泽华';
    update t_attend_j432 set class12='C' where name='郭泽华' and nowdate=to_date('20181119','yyyymmdd');
    select * from t_attend_j432 where name='郭泽华';
    select * from t_stud_j432 where sname='郭泽华';
    

    三、实验分析及过程截图

    1.实验思路:t_major_j432表与t_stud_432

        1)为学生t_stud_432和专业表t_major_j432分别添加一列result(用于记录每个学生和专业的考勤成绩)。

        2)建立考勤表t_attend_j432(记录方式正常:A;迟到:B;旷课:C;请假:D;没课:E),之后插入一周七天的数据。

        3)建立学生考勤表t_stud_atte_j432和专业考勤表t_major_atte_j432(同时导入学生和专业信息,学生和专业成绩初始值分别为100和500,其余值默认为0)。

        4)建立过程p_stud_atte_j432:汇总学生考勤数据,并将成绩更新到学生表中。

        5)建立过程p_major_atte_j432(start_mtime date,stop_mtime date):汇总专业考勤数据,并将成绩更新到专业表中。

        6)建立触发器tg_attend_j432:当对考勤表进行相应插入、删除、修改时,对t_stud_432表的result数值进行相应的数据更新。

    2.学生考勤数据汇总过程p_stud_atte_j432分析(专业考勤数据汇总过程类似,不再分析)

    create or replace procedure p_stud_atte_j432

    as

    cursor stud_atte_line is select * from t_attend_j432;--对考勤表建立游标

    cur_atte t_attend_j432%rowtype;

    class_sa number(3);--正常上课状态A的次数

    class_sb number(3);--上课迟到状态B的次数

    class_sc number(3);--上课缺勤状态C的次数

    class_sd number(3);--上课请假状态D的次数

    class_res number(3);--当前考勤成绩

    time_min date;--最小日期

    time_max date;--最大日期

    Begin

    --先删除学生考勤表的所有记录,然后插入所有学号和学生姓名,成绩默认为100,其他属性默认为0

    delete from t_stud_atte_j432;

    insert into t_stud_atte_j432(sno,sname) select t_stud_j432.sno,t_stud_j432.sname from t_stud_j432;

    for cur_atte in stud_atte_line loop--开启游标循环

    --获取学生考勤表的当前记录

    select startdate into time_min from t_stud_atte_j432 where t_stud_atte_j432.sno=cur_atte.sno;

    select stopdate into time_max from t_stud_atte_j432 where t_stud_atte_j432.sno=cur_atte.sno;

    select class_a into class_sa from t_stud_atte_j432 where t_stud_atte_j432.sno=cur_atte.sno;

    select class_b into class_sb from t_stud_atte_j432 where t_stud_atte_j432.sno=cur_atte.sno;

    select class_c into class_sc from t_stud_atte_j432 where t_stud_atte_j432.sno=cur_atte.sno;

    select class_d into class_sd from t_stud_atte_j432 where t_stud_atte_j432.sno=cur_atte.sno;

    if(time_min>cur_atte.nowdate)then--通过比较日期,来获取每个学生不同的考勤时间段

    time_min:=cur_atte.nowdate;

    end if;

    if(time_max<cur_atte.nowdate)then

    time_max:=cur_atte.nowdate;

    end if;

     

    if(cur_atte.class12='A')then--以下if判断都是对每节课状态判断,相应次数加一

    class_sa:=class_sa+1;

    elsif(cur_atte.class12='B')then

    class_sb:=class_sb+1;

    elsif(cur_atte.class12='C')then

    class_sc:=class_sc+1;

    elsif(cur_atte.class12='D')then

    class_sd:=class_sd+1;

    end if;

     

    if(cur_atte.class34='A')then

    class_sa:=class_sa+1;

    elsif(cur_atte.class34='B')then

    class_sb:=class_sb+1;

    elsif(cur_atte.class34='C')then

    class_sc:=class_sc+1;

    elsif(cur_atte.class34='D')then

    class_sd:=class_sd+1;

    end if;

     

    if(cur_atte.class56='A')then

    class_sa:=class_sa+1;

    elsif(cur_atte.class56='B')then

    class_sb:=class_sb+1;

    elsif(cur_atte.class56='C')then

    class_sc:=class_sc+1;

    elsif(cur_atte.class56='D')then

    class_sd:=class_sd+1;

    end if;

     

    if(cur_atte.class78='A')then

    class_sa:=class_sa+1;

    elsif(cur_atte.class78='B')then

    class_sb:=class_sb+1;

    elsif(cur_atte.class78='C')then

    class_sc:=class_sc+1;

    elsif(cur_atte.class78='D')then

    class_sd:=class_sd+1;

    end if;

     

    if(cur_atte.class90='A')then

    class_sa:=class_sa+1;

    elsif(cur_atte.class90='B')then

    class_sb:=class_sb+1;

    elsif(cur_atte.class90='C')then

    class_sc:=class_sc+1;

    elsif(cur_atte.class90='D')then

    class_sd:=class_sd+1;

    end if;

     

    class_res:=100-class_sb*2-class_sc*5-class_sd;--重新计算考勤成绩

    --将相关数据更新到学生考勤表

    update t_stud_atte_j432 set t_stud_atte_j432.startdate=time_min where t_stud_atte_j432.sno=cur_atte.sno;

    update t_stud_atte_j432 set t_stud_atte_j432.stopdate=time_max where t_stud_atte_j432.sno=cur_atte.sno;

    update t_stud_atte_j432 set t_stud_atte_j432.class_a=class_sa where t_stud_atte_j432.sno=cur_atte.sno;

    update t_stud_atte_j432 set t_stud_atte_j432.class_b=class_sb where t_stud_atte_j432.sno=cur_atte.sno;

    update t_stud_atte_j432 set t_stud_atte_j432.class_c=class_sc where t_stud_atte_j432.sno=cur_atte.sno;

    update t_stud_atte_j432 set t_stud_atte_j432.class_d=class_sd where t_stud_atte_j432.sno=cur_atte.sno;

    update t_stud_atte_j432 set t_stud_atte_j432.result=class_res where t_stud_atte_j432.sno=cur_atte.sno;

    --将成绩更新到学生表

    update t_stud_j432 set t_stud_j432.sum_evaluation=class_res where t_stud_j432.sno=cur_atte.sno;

    end loop;--直到遍历完整张考勤表

    end;

    /

    show error

     

    3.触发器tg_attend_j432分析

    create or replace trigger tg_attend_j432

    after insert or update or delete on t_attend_j432

    begin

    p_stud_atte_j432;--每次更改考勤表的数据,就重新汇总一次学生考勤表的数据

    end;

    /

    show error

     

     

    四、实验总结及改进

        本次实验最大的问题就是关于建表,有横表和竖表的建表方案,我是按照横标来建的,将属性值当成了属性,导致考勤表出现数据冗余(大量没课状态E)以及使得统计过程的复杂度提升,万幸还是做成了,在最后触发器那,每对考勤表就行一次操作,就从重新统计一次数据,如果数据量很大,会使得效率很低而且不合理,有待改进。

    横表建表方式
    学号 时期 姓名 第一节课 第二节课 第三节课 第四节课 第五节课
    0101 10.1 张三 正常 正常 请假 正常 缺勤
    0102 10.2 李四 缺勤 正常 迟到 正常 正常
    竖表建表方式
    学号 姓名 日期 第几节课 状况
    0101 张三 10.1 3 请假
    0101 张三 10.1 5 缺勤
    0102 李四 10.2 1 缺勤

     

    展开全文
  • 1.设计与建立上课考勤表Attend_???,能登记每个学生的考勤记录包括正常、迟到、旷课、请假。能统计以专业为单位的出勤类别并进行打分评价排序,如迟到、旷课、请假分别扣2,5,1分。可以考虑给一初始的分值,以免...

    一、目的与要求

    本实验主要是熟悉ORACLE的后台编程,包括触发器与过程的编制,可比较基于SQL Server的触发器与过程。

    二、操作环境

    同实验一

    三、实验内容

    1.设计与建立上课考勤表Attend_???,能登记每个学生的考勤记录包括正常、迟到、旷课、请假。能统计以专业为单位的出勤类别并进行打分评价排序,如迟到、旷课、请假分别扣2,5,1分。可以考虑给一初始的分值,以免负值。

    2.为major表与stud表增加sum_evaluation 数值字段,以记录根据考勤表Attend_???(Attendance)中出勤类别打分汇总的值。

    3.建立个人考勤汇总表stud_attend与专业考勤表major_attend,表示每个学生或每个专业在某时间周期(起始日期,终止日期)正常、迟到、旷课、请假次数及考勤分值。

    4.根据major表中的值与stud中的值,为考勤表Attend输入足够的样本值,要求每个专业都要有学生,有部分学生至少要有一周的每天5个单元(12,34,56,78,90,没有课的单元可以没有考勤记录)的考勤完整记录,其中正常、迟到、旷课、请假 可以用数字或字母符号表示。

    5.建立触发器,当对考勤表Attend表进行相应插入、删除、修改时,对stud表的sum_evaluation 数值进行相应的数据更新。

    6.建立过程,生成某专业某时段(起、止日期)的考勤汇总表major_attend中各字段值,并汇总相应专业,将考勤分值的汇总结果写入到major表中的sum_evaluation中。

     

    四、实验过程

    一、实验内容

    1.设计与建立上课考勤表t_attend_j524,能登记每个学生的考勤记录包括正常、迟到、旷课、请假。能统计以专业为单位的出勤类别并进行打分评价排序,如迟到、旷课、请假分别扣2,5,1分。可以考虑给一初始的分值,以免负值。

    2.为t_major_j524表与t_stud_524表增加sum_evaluation 数值字段,以记录根据考勤表t_attend_j524(Attendance)中出勤类别打分汇总的值(这两张表参考实验一)。

    3.建立个人考勤汇总表t_stud_atte_j524与专业考勤表t_major_atte_j524,表示每个学生或每个专业在某时间周期(起始日期,终止日期)正常、迟到、旷课、请假次数及考勤分值。

     

    conn u_j524/p123456
    --1.为学生表和专业表各添加一列:考勤分数
    desc t_stud_j524;
    desc t_major_j524;
    --2.为t_major_j524表与t_stud_524表增加sum_evaluation 数值字段
    alter table t_stud_j524 add sum_evaluation number(3) default 100;
    alter table t_major_j524 add sum_evaluation number(3) default 500;
    desc t_stud_j524;
    desc t_major_j524;
    
    --3.建立考勤表
    --正常:A
    --迟到:B
    --旷课:C
    --请假:D
    --没课:E
    
    --学号(sno)为外键 
    drop table t_attend_j524;
    create table t_attend_j524(
        nowdate date not null,
        sno varchar(10) not null,
        name varchar(16) not null,
        class12 varchar(4) not null,
        class34 varchar(4) not null,
        class56 varchar(4) not null,
        class78 varchar(4) not null,
        class90 varchar(4) not null,
        constraint pk_attend_nowdate_sno primary key(nowdate,sno),
        constraint ck_attend_class12 check(class12 in('A','B','C','D','E')),
        constraint ck_attend_class34 check(class34 in('A','B','C','D','E')),
        constraint ck_attend_class56 check(class56 in('A','B','C','D','E')),
        constraint ck_attend_class78 check(class78 in('A','B','C','D','E')),
        constraint ck_attend_class90 check(class90 in('A','B','C','D','E')),
        constraint ck_attend_sno foreign key(sno) references t_stud_j524(sno));

     

    4.根据实验一t_major_j524表中的值与t_stud_j524中的值,为考勤表t_attend_j524输入足够的样本值,要求每个专业都要有学生,有部分学生至少要有一周的每天5个单元(12,34,56,78,90,没有课的单元可以没有考勤记录)的考勤完整记录,其中正常、迟到、旷课、请假 可以用数字或字母符号表示。

     

    --2.插入一周数据:2019.10.13至2019.10.19
    
    --数据科学与大数据技术13名同学
    insert into t_attend_j524 values(to_date('20191013','yyyymmdd'),'0921170114','李一','A','B','C','B','C');
    insert into t_attend_j524 values(to_date('20191013','yyyymmdd'),'0921170115','李二','A','E','C','E','E');
    insert into t_attend_j524 values(to_date('20191013','yyyymmdd'),'0921170117','李三','A','B','C','A','E');
    insert into t_attend_j524 values(to_date('20191013','yyyymmdd'),'0921170120','李四','A','B','E','A','D');
    insert into t_attend_j524 values(to_date('20191013','yyyymmdd'),'0921170122','李五','E','A','E','E','D');
    insert into t_attend_j524 values(to_date('20191013','yyyymmdd'),'0921170123','李六','A','C','B','E','E');
    insert into t_attend_j524 values(to_date('20191013','yyyymmdd'),'0921170124','李七','A','E','C','E','E');
    insert into t_attend_j524 values(to_date('20191013','yyyymmdd'),'0921170207','张一','E','A','E','E','D');
    insert into t_attend_j524 values(to_date('20191013','yyyymmdd'),'0921170225','张二','B','A','B','A','D');
    insert into t_attend_j524 values(to_date('20191013','yyyymmdd'),'0921170226','张三','E','A','A','E','A');
    insert into t_attend_j524 values(to_date('20191013','yyyymmdd'),'0921170227','张四','C','A','E','A','D');
    insert into t_attend_j524 values(to_date('20191013','yyyymmdd'),'0921170209','张五','E','A','E','E','D');
    insert into t_attend_j524 values(to_date('20191013','yyyymmdd'),'0921170228','张六','A','B','E','A','D');
    
    --计算机科学与技术12名同学
    insert into t_attend_j524 values(to_date('20191013','yyyymmdd'),'0902170516','王二','B','A','B','A','D');
    insert into t_attend_j524 values(to_date('20191013','yyyymmdd'),'0902170520','王三','A','B','C','D','E');
    insert into t_attend_j524 values(to_date('20191013','yyyymmdd'),'0902170521','王四','B','A','A','A','B');
    insert into t_attend_j524 values(to_date('20191013','yyyymmdd'),'0902170523','杜豪','A','A','A','A','A');
    insert into t_attend_j524 values(to_date('20191013','yyyymmdd'),'0902170524','宋海磊','A','A','A','A','A');
    insert into t_attend_j524 values(to_date('20191013','yyyymmdd'),'0902170525','翟树杰','A','A','A','A','A');
    insert into t_attend_j524 values(to_date('20191013','yyyymmdd'),'0902170526','胡旭东','A','A','A','A','A');
    insert into t_attend_j524 values(to_date('20191013','yyyymmdd'),'0902170601','嬴政','B','A','A','A','B');
    insert into t_attend_j524 values(to_date('20191013','yyyymmdd'),'0902170602','刘邦','A','B','A','D','A');
    insert into t_attend_j524 values(to_date('20191013','yyyymmdd'),'0902170604','李广','C','A','B','A','D');
    insert into t_attend_j524 values(to_date('20191013','yyyymmdd'),'0902170605','李世民','A','A','B','A','D');
    insert into t_attend_j524 values(to_date('20191013','yyyymmdd'),'0902170625','赵匡胤','D','A','B','A','C');
    
    --物联网工程11名同学
    insert into t_attend_j524 values(to_date('20191013','yyyymmdd'),'0919170112','周一','B','A','A','A','B');
    insert into t_attend_j524 values(to_date('20191013','yyyymmdd'),'0919170120','周二','B','A','C','A','B');
    insert into t_attend_j524 values(to_date('20191013','yyyymmdd'),'0919170107','周三','A','B','C','B','C');
    insert into t_attend_j524 values(to_date('20191013','yyyymmdd'),'0919170109','周四','A','B','E','A','D');
    insert into t_attend_j524 values(to_date('20191013','yyyymmdd'),'0919170110','周五','A','B','E','A','D');
    insert into t_attend_j524 values(to_date('20191013','yyyymmdd'),'0919170115','周六','A','C','C','A','C');
    insert into t_attend_j524 values(to_date('20191013','yyyymmdd'),'0919170214','陈一','A','B','C','A','D');
    insert into t_attend_j524 values(to_date('20191013','yyyymmdd'),'0919170215','陈二','B','A','A','A','B');
    insert into t_attend_j524 values(to_date('20191013','yyyymmdd'),'0919170217','陈三','A','B','E','A','D');
    insert into t_attend_j524 values(to_date('20191013','yyyymmdd'),'0919170220','陈四','A','B','A','A','C');
    insert into t_attend_j524 values(to_date('20191013','yyyymmdd'),'0919170225','陈五','A','B','C','A','D');
    --3.显示考勤表
    set linesize 150;
    set pagesize 100;
    col name format a7;
    col sno format a11;
    col class12 format a7;
    col class34 format a7;
    col class65 format a7;
    col class78 format a7;
    col class90 format a7;
    alter session set nls_date_format='yyyy-mm-dd';
    select * from t_attend_j524;

    5.建立触发器,当对考勤表t_attend_j524表进行相应插入、删除、修改时,对t_stud_524表的sum_evaluation 数值进行相应的数据更新。

     

    --15.建立触发器:当对考勤表进行相应插入、删除、修改时,对stud表的sum_evaluation数值进行相应的数据更新
    create or replace trigger tg_attend_j524
    after insert or update or delete on t_attend_j524
    
    begin
    p_stud_atte_j524;
    end;
    /
     
    --16.测试触发器
    column sno format a11;
    column sname format a7;
    column sex format a4;
    column tel format a12;
    column email format a32;
    column birthday format a11;
    column mno format a11;
    column majorno format a3;
    set linesize 150;
    set pagesize 100;
    alter session set nls_date_format = 'yyyy-mm-dd';
    
    --插入测试
    select * from t_stud_j524 where sname='周五';
    insert into t_attend_j524 values(to_date('20191020','yyyymmdd'),'0919170110','周五','B','B','B','E','E');
    select * from t_stud_j524 where sname='周五';
     
    --删除测试
    select * from t_stud_j524 where sname='周五';
    delete from t_attend_j524 where name='周五' and nowdate=to_date('20191020','yyyymmdd');
    select * from t_stud_j524 where sname='周五';
     
    --更新测试
    select * from t_attend_j524 where name='周五';
    select * from t_stud_j524 where sname='周五';
    update t_attend_j524 set class12='C' where name='周五' and nowdate=to_date('20191019','yyyymmdd');
    select * from t_attend_j524 where name='周五';
    select * from t_stud_j524 where sname='周五';

    6.建立过程,生成某专业某时段(起、止日期)的考勤汇总表t_major_atte_j524中各字段值,并汇总相应专业,将考勤分值的汇总结果写入到t_major_j524表中的sum_evaluation中。

    --4.建立学生考勤表
    drop table t_stud_atte_j524;
    create table t_stud_atte_j524(
        startdate date default to_date('21000101','yyyyddmm'),
        stopdate date default to_date('19000101','yyyyddmm'),
        sno varchar2(10),
        sname varchar2(32),
        class_a number(3) default 0,
        class_b number(3) default 0,
        class_c number(3) default 0,
        class_d number(3) default 0,
        result number(3) default 100,
        constraint pk_stud_atte_sno primary key(sno),
        constraint fk_stud_atte_sno foreign key(sno) references t_stud_j524(sno));
        
        
    --5.将学生表的所有学生插入学生考勤表
    insert into t_stud_atte_j524(sno,sname) select t_stud_j524.sno,t_stud_j524.sname from t_stud_j524;
     
    --6.显示学生考勤表
    col sname format a7;
    alter session set nls_date_format = 'yyyy-mm-dd';
    select * from t_stud_atte_j524;
     
    --7.建立专业考勤表
    drop table t_major_atte_j524;
    create table t_major_atte_j524(
        startdate date default to_date('20191001','yyyyddmm'),
        stopdate date default to_date('20191001','yyyyddmm'),
        mno varchar2(2),
        mname varchar2(32),
        class_a number(3) default 0,
        class_b number(3) default 0,
        class_c number(3) default 0,
        class_d number(3) default 0,
        result number(3) default 500,
        constraint pk_major_atte_sno primary key(mno),
        constraint fk_major_atte_sno foreign key(mno) references t_major_j524(mno));
    
    --8.将专业表的所有专业插入专业考勤表
    insert into t_major_atte_j524(mno,mname) select t_major_j524.mno,t_major_j524.mname from t_major_j524;
     
    --9.显示专业考勤表
    col mname format a20;
    alter session set nls_date_format = 'yyyy-mm-dd';
    select * from t_major_atte_j524;
     
    --10.建立过程:汇总学生考勤数据,并将成绩更新到学生表中
    //cur_atte t_attend_j524%rowtype;为了使一个变量的数据类型与一个表中记录的各个列的数据类型相对应、一致
    /*
    class_sa number(3);--正常上课状态A的次数
    class_sb number(3);--上课迟到状态B的次数
    class_sc number(3);--上课缺勤状态C的次数
    class_sd number(3);--上课请假状态D的次数
    class_res number(3);--当前考勤成绩
    time_min date;--最小日期
    time_max date;--最大日期
    */
    create or replace procedure p_stud_atte_j524
    as
    cursor stud_atte_line is select * from t_attend_j524;
    cur_atte t_attend_j524%rowtype;
    
    class_sa number(3);
    class_sb number(3);
    class_sc number(3);
    class_sd number(3);
    class_res number(3);
     
    time_min date;
    time_max date;
    
    begin
    --先删除学生考勤表的所有记录,然后插入所有学号和学生姓名,成绩默认为100,其他属性默认为0
    delete from t_stud_atte_j524;
    insert into t_stud_atte_j524(sno,sname) select t_stud_j524.sno,t_stud_j524.sname from t_stud_j524;
    for cur_atte in stud_atte_line loop
        --获取学生考勤表的当前记录
        select startdate into time_min from t_stud_atte_j524 where t_stud_atte_j524.sno=cur_atte.sno;
        select stopdate into time_max from t_stud_atte_j524 where t_stud_atte_j524.sno=cur_atte.sno;
        select class_a into class_sa from t_stud_atte_j524 where t_stud_atte_j524.sno=cur_atte.sno;
        select class_b into class_sb from t_stud_atte_j524 where t_stud_atte_j524.sno=cur_atte.sno;
        select class_c into class_sc from t_stud_atte_j524 where t_stud_atte_j524.sno=cur_atte.sno;
        select class_d into class_sd from t_stud_atte_j524 where t_stud_atte_j524.sno=cur_atte.sno;
        --通过比较日期,来获取每个学生不同的考勤时间段
        if(time_min>cur_atte.nowdate)then
            time_min:=cur_atte.nowdate;
        end if;
        if(time_max<cur_atte.nowdate)then
            time_max:=cur_atte.nowdate;
        end if;
     
        if(cur_atte.class12='A')then
            class_sa:=class_sa+1;
        elsif(cur_atte.class12='B')then
            class_sb:=class_sb+1;
        elsif(cur_atte.class12='C')then
            class_sc:=class_sc+1;
        elsif(cur_atte.class12='D')then
            class_sd:=class_sd+1;
        end if;
     
        if(cur_atte.class34='A')then
            class_sa:=class_sa+1;
        elsif(cur_atte.class34='B')then
            class_sb:=class_sb+1;
        elsif(cur_atte.class34='C')then
            class_sc:=class_sc+1;
        elsif(cur_atte.class34='D')then
            class_sd:=class_sd+1;
        end if;
     
        if(cur_atte.class56='A')then
            class_sa:=class_sa+1;
        elsif(cur_atte.class56='B')then
            class_sb:=class_sb+1;
        elsif(cur_atte.class56='C')then
            class_sc:=class_sc+1;
        elsif(cur_atte.class56='D')then
            class_sd:=class_sd+1;
        end if;
     
        if(cur_atte.class78='A')then
            class_sa:=class_sa+1;
        elsif(cur_atte.class78='B')then
            class_sb:=class_sb+1;
        elsif(cur_atte.class78='C')then
            class_sc:=class_sc+1;
        elsif(cur_atte.class78='D')then
            class_sd:=class_sd+1;
        end if;
     
        if(cur_atte.class90='A')then
            class_sa:=class_sa+1;
        elsif(cur_atte.class90='B')then
            class_sb:=class_sb+1;
        elsif(cur_atte.class90='C')then
            class_sc:=class_sc+1;
        elsif(cur_atte.class90='D')then
            class_sd:=class_sd+1;
        end if;
        --重新计算考勤成绩
        class_res:=100-class_sb*2-class_sc*5-class_sd;
        --将相关数据更新到学生考勤表
        update t_stud_atte_j524 set t_stud_atte_j524.startdate=time_min where t_stud_atte_j524.sno=cur_atte.sno;
        update t_stud_atte_j524 set t_stud_atte_j524.stopdate=time_max where t_stud_atte_j524.sno=cur_atte.sno;
        update t_stud_atte_j524 set t_stud_atte_j524.class_a=class_sa where t_stud_atte_j524.sno=cur_atte.sno;
        update t_stud_atte_j524 set t_stud_atte_j524.class_b=class_sb where t_stud_atte_j524.sno=cur_atte.sno;
        update t_stud_atte_j524 set t_stud_atte_j524.class_c=class_sc where t_stud_atte_j524.sno=cur_atte.sno;
        update t_stud_atte_j524 set t_stud_atte_j524.class_d=class_sd where t_stud_atte_j524.sno=cur_atte.sno;
        update t_stud_atte_j524 set t_stud_atte_j524.result=class_res where t_stud_atte_j524.sno=cur_atte.sno;
        update t_stud_j524 set t_stud_j524.sum_evaluation=class_res where t_stud_j524.sno=cur_atte.sno;
    end loop;
    end;
    /
    show error
     
    
    
    --11.显示学生考勤表
    exec p_stud_atte_j524;
    col sname format a7;
    alter session set nls_date_format = 'yyyy-mm-dd';
    select * from t_stud_atte_j524;
     
    --12.查看两名学生的考勤记录,查看数据汇总是否正确
    select * from t_attend_j524 where name='王二';
    select * from t_attend_j524 where name='王三';
     
    --13.建立过程:汇总专业考勤数据,并将成绩更新到专业表中
    create or replace procedure p_major_atte_j524(start_mtime date,stop_mtime date)
    as
    cursor major_atte_line is select * from t_attend_j524 where t_attend_j524.nowdate>=start_mtime and t_attend_j524.nowdate<=stop_mtime;
    cur_atte t_attend_j524%rowtype;
    class_ma number(3);
    class_mb number(3);
    class_mc number(3);
    class_md number(3);
    class_res number(3);
    begin
    delete from t_major_atte_j524;
    insert into t_major_atte_j524(mno,mname) select t_major_j524.mno,t_major_j524.mname from t_major_j524;
     
    for cur_atte in major_atte_line loop
         ---赋值进去 
        select class_a into class_ma from t_major_atte_j524 where t_major_atte_j524.mno=substr(cur_atte.sno,3,2);
        select class_b into class_mb from t_major_atte_j524 where t_major_atte_j524.mno=substr(cur_atte.sno,3,2);
        select class_c into class_mc from t_major_atte_j524 where t_major_atte_j524.mno=substr(cur_atte.sno,3,2);
        select class_d into class_md from t_major_atte_j524 where t_major_atte_j524.mno=substr(cur_atte.sno,3,2);
     
        if(cur_atte.class12='A')then
            class_ma:=class_ma+1;
        elsif(cur_atte.class12='B')then
            class_mb:=class_mb+1;
        elsif(cur_atte.class12='C')then
            class_mc:=class_mc+1;
        elsif(cur_atte.class12='D')then
            class_md:=class_md+1;
        end if;
     
        if(cur_atte.class34='A')then
            class_ma:=class_ma+1;
        elsif(cur_atte.class34='B')then
            class_mb:=class_mb+1;
        elsif(cur_atte.class34='C')then
            class_mc:=class_mc+1;
        elsif(cur_atte.class34='D')then
            class_md:=class_md+1;
        end if;
     
        if(cur_atte.class56='A')then
            class_ma:=class_ma+1;
        elsif(cur_atte.class56='B')then
            class_mb:=class_mb+1;
        elsif(cur_atte.class56='C')then
            class_mc:=class_mc+1;
        elsif(cur_atte.class56='D')then
            class_md:=class_md+1;
        end if;
     
        if(cur_atte.class78='A')then
            class_ma:=class_ma+1;
        elsif(cur_atte.class78='B')then
            class_mb:=class_mb+1;
        elsif(cur_atte.class78='C')then
            class_mc:=class_mc+1;
        elsif(cur_atte.class78='D')then
            class_md:=class_md+1;
        end if;
     
        if(cur_atte.class90='A')then
            class_ma:=class_ma+1;
        elsif(cur_atte.class90='B')then
            class_mb:=class_mb+1;
        elsif(cur_atte.class90='C')then
            class_mc:=class_mc+1;
        elsif(cur_atte.class90='D')then
            class_md:=class_md+1;
        end if;
     
        class_res:=500-class_mb*2-class_mc*5-class_md;
        
        update t_major_atte_j524 set t_major_atte_j524.startdate=start_mtime where t_major_atte_j524.mno=substr(cur_atte.sno,3,2);
        update t_major_atte_j524 set t_major_atte_j524.stopdate=stop_mtime where t_major_atte_j524.mno=substr(cur_atte.sno,3,2);
        update t_major_atte_j524 set t_major_atte_j524.class_a=class_ma where t_major_atte_j524.mno=substr(cur_atte.sno,3,2);
        update t_major_atte_j524 set t_major_atte_j524.class_b=class_mb where t_major_atte_j524.mno=substr(cur_atte.sno,3,2);
        update t_major_atte_j524 set t_major_atte_j524.class_c=class_mc where t_major_atte_j524.mno=substr(cur_atte.sno,3,2);
        update t_major_atte_j524 set t_major_atte_j524.class_d=class_md where t_major_atte_j524.mno=substr(cur_atte.sno,3,2);
        update t_major_atte_j524 set t_major_atte_j524.result=class_res where t_major_atte_j524.mno=substr(cur_atte.sno,3,2);
        update t_major_j524 set t_major_j524.sum_evaluation=class_res where t_major_j524.mno=substr(cur_atte.sno,3,2);
    end loop;
    end;
    /
    show error
    
    --14.显示专业考勤表
    exec p_major_atte_j524('20191013','20191019');
    col mname format a20;
    alter session set nls_date_format = 'yyyy-mm-dd';
    select * from t_major_atte_j524;

     

    二、总代码

     

    conn u_j524/p123456
    --1.为学生表和专业表各添加一列:考勤分数
    desc t_stud_j524;
    desc t_major_j524;
    alter table t_stud_j524 add sum_evaluation number(3) default 100;
    alter table t_major_j524 add sum_evaluation number(3) default 500;
    desc t_stud_j524;
    desc t_major_j524;
    
    --2.建立考勤表
    --正常:A
    --迟到:B
    --旷课:C
    --请假:D
    --没课:E
    
    --学号(sno)为外键 
    drop table t_attend_j524;
    create table t_attend_j524(
        nowdate date not null,
        sno varchar(10) not null,
        name varchar(16) not null,
        class12 varchar(4) not null,
        class34 varchar(4) not null,
        class56 varchar(4) not null,
        class78 varchar(4) not null,
        class90 varchar(4) not null,
        constraint pk_attend_nowdate_sno primary key(nowdate,sno),
        constraint ck_attend_class12 check(class12 in('A','B','C','D','E')),
        constraint ck_attend_class34 check(class34 in('A','B','C','D','E')),
        constraint ck_attend_class56 check(class56 in('A','B','C','D','E')),
        constraint ck_attend_class78 check(class78 in('A','B','C','D','E')),
        constraint ck_attend_class90 check(class90 in('A','B','C','D','E')),
        constraint ck_attend_sno foreign key(sno) references t_stud_j524(sno));
    
    --2.插入一周数据:2019.10.13至2019.10.19
    
    --数据科学与大数据技术13名同学
    insert into t_attend_j524 values(to_date('20191013','yyyymmdd'),'0921170114','李一','A','B','C','B','C');
    insert into t_attend_j524 values(to_date('20191013','yyyymmdd'),'0921170115','李二','A','E','C','E','E');
    insert into t_attend_j524 values(to_date('20191013','yyyymmdd'),'0921170117','李三','A','B','C','A','E');
    insert into t_attend_j524 values(to_date('20191013','yyyymmdd'),'0921170120','李四','A','B','E','A','D');
    insert into t_attend_j524 values(to_date('20191013','yyyymmdd'),'0921170122','李五','E','A','E','E','D');
    insert into t_attend_j524 values(to_date('20191013','yyyymmdd'),'0921170123','李六','A','C','B','E','E');
    insert into t_attend_j524 values(to_date('20191013','yyyymmdd'),'0921170124','李七','A','E','C','E','E');
    insert into t_attend_j524 values(to_date('20191013','yyyymmdd'),'0921170207','张一','E','A','E','E','D');
    insert into t_attend_j524 values(to_date('20191013','yyyymmdd'),'0921170225','张二','B','A','B','A','D');
    insert into t_attend_j524 values(to_date('20191013','yyyymmdd'),'0921170226','张三','E','A','A','E','A');
    insert into t_attend_j524 values(to_date('20191013','yyyymmdd'),'0921170227','张四','C','A','E','A','D');
    insert into t_attend_j524 values(to_date('20191013','yyyymmdd'),'0921170209','张五','E','A','E','E','D');
    insert into t_attend_j524 values(to_date('20191013','yyyymmdd'),'0921170228','张六','A','B','E','A','D');
    
    --计算机科学与技术12名同学
    insert into t_attend_j524 values(to_date('20191013','yyyymmdd'),'0902170516','王二','B','A','B','A','D');
    insert into t_attend_j524 values(to_date('20191013','yyyymmdd'),'0902170520','王三','A','B','C','D','E');
    insert into t_attend_j524 values(to_date('20191013','yyyymmdd'),'0902170521','王四','B','A','A','A','B');
    insert into t_attend_j524 values(to_date('20191013','yyyymmdd'),'0902170523','杜豪','A','A','A','A','A');
    insert into t_attend_j524 values(to_date('20191013','yyyymmdd'),'0902170524','宋海磊','A','A','A','A','A');
    insert into t_attend_j524 values(to_date('20191013','yyyymmdd'),'0902170525','翟树杰','A','A','A','A','A');
    insert into t_attend_j524 values(to_date('20191013','yyyymmdd'),'0902170526','胡旭东','A','A','A','A','A');
    insert into t_attend_j524 values(to_date('20191013','yyyymmdd'),'0902170601','嬴政','B','A','A','A','B');
    insert into t_attend_j524 values(to_date('20191013','yyyymmdd'),'0902170602','刘邦','A','B','A','D','A');
    insert into t_attend_j524 values(to_date('20191013','yyyymmdd'),'0902170604','李广','C','A','B','A','D');
    insert into t_attend_j524 values(to_date('20191013','yyyymmdd'),'0902170605','李世民','A','A','B','A','D');
    insert into t_attend_j524 values(to_date('20191013','yyyymmdd'),'0902170625','赵匡胤','D','A','B','A','C');
    
    --物联网工程11名同学
    insert into t_attend_j524 values(to_date('20191013','yyyymmdd'),'0919170112','周一','B','A','A','A','B');
    insert into t_attend_j524 values(to_date('20191013','yyyymmdd'),'0919170120','周二','B','A','C','A','B');
    insert into t_attend_j524 values(to_date('20191013','yyyymmdd'),'0919170107','周三','A','B','C','B','C');
    insert into t_attend_j524 values(to_date('20191013','yyyymmdd'),'0919170109','周四','A','B','E','A','D');
    insert into t_attend_j524 values(to_date('20191013','yyyymmdd'),'0919170110','周五','A','B','E','A','D');
    insert into t_attend_j524 values(to_date('20191013','yyyymmdd'),'0919170115','周六','A','C','C','A','C');
    insert into t_attend_j524 values(to_date('20191013','yyyymmdd'),'0919170214','陈一','A','B','C','A','D');
    insert into t_attend_j524 values(to_date('20191013','yyyymmdd'),'0919170215','陈二','B','A','A','A','B');
    insert into t_attend_j524 values(to_date('20191013','yyyymmdd'),'0919170217','陈三','A','B','E','A','D');
    insert into t_attend_j524 values(to_date('20191013','yyyymmdd'),'0919170220','陈四','A','B','A','A','C');
    insert into t_attend_j524 values(to_date('20191013','yyyymmdd'),'0919170225','陈五','A','B','C','A','D');
    
    
    
    /*
    set linesize 150;//输出一行字符个数,缺省为80
    set pagesize 0; //输出每页行数,缺省为24,为了避免分页,可设定为0。
    */
    
    --3.显示考勤表
    set linesize 150;
    set pagesize 100;
    col name format a7;
    col sno format a11;
    col class12 format a7;
    col class34 format a7;
    col class65 format a7;
    col class78 format a7;
    col class90 format a7;
    alter session set nls_date_format='yyyy-mm-dd';
    select * from t_attend_j524;
    
    
    --4.建立学生考勤表
    drop table t_stud_atte_j524;
    create table t_stud_atte_j524(
        startdate date default to_date('21000101','yyyyddmm'),
        stopdate date default to_date('19000101','yyyyddmm'),
        sno varchar2(10),
        sname varchar2(32),
        class_a number(3) default 0,
        class_b number(3) default 0,
        class_c number(3) default 0,
        class_d number(3) default 0,
        result number(3) default 100,
        constraint pk_stud_atte_sno primary key(sno),
        constraint fk_stud_atte_sno foreign key(sno) references t_stud_j524(sno));
        
        
    --5.将学生表的所有学生插入学生考勤表
    insert into t_stud_atte_j524(sno,sname) select t_stud_j524.sno,t_stud_j524.sname from t_stud_j524;
     
    --6.显示学生考勤表
    col sname format a7;
    alter session set nls_date_format = 'yyyy-mm-dd';
    select * from t_stud_atte_j524;
     
    --7.建立专业考勤表
    drop table t_major_atte_j524;
    create table t_major_atte_j524(
        startdate date default to_date('20191001','yyyyddmm'),
        stopdate date default to_date('20191001','yyyyddmm'),
        mno varchar2(2),
        mname varchar2(32),
        class_a number(3) default 0,
        class_b number(3) default 0,
        class_c number(3) default 0,
        class_d number(3) default 0,
        result number(3) default 500,
        constraint pk_major_atte_sno primary key(mno),
        constraint fk_major_atte_sno foreign key(mno) references t_major_j524(mno));
    
    --8.将专业表的所有专业插入专业考勤表
    insert into t_major_atte_j524(mno,mname) select t_major_j524.mno,t_major_j524.mname from t_major_j524;
     
    --9.显示专业考勤表
    col mname format a20;
    alter session set nls_date_format = 'yyyy-mm-dd';
    select * from t_major_atte_j524;
     
    --10.建立过程:汇总学生考勤数据,并将成绩更新到学生表中
    //cur_atte t_attend_j524%rowtype;为了使一个变量的数据类型与一个表中记录的各个列的数据类型相对应、一致
    /*
    class_sa number(3);--正常上课状态A的次数
    class_sb number(3);--上课迟到状态B的次数
    class_sc number(3);--上课缺勤状态C的次数
    class_sd number(3);--上课请假状态D的次数
    class_res number(3);--当前考勤成绩
    time_min date;--最小日期
    time_max date;--最大日期
    */
    create or replace procedure p_stud_atte_j524
    as
    cursor stud_atte_line is select * from t_attend_j524;
    cur_atte t_attend_j524%rowtype;
    
    class_sa number(3);
    class_sb number(3);
    class_sc number(3);
    class_sd number(3);
    class_res number(3);
     
    time_min date;
    time_max date;
    
    begin
    --先删除学生考勤表的所有记录,然后插入所有学号和学生姓名,成绩默认为100,其他属性默认为0
    delete from t_stud_atte_j524;
    insert into t_stud_atte_j524(sno,sname) select t_stud_j524.sno,t_stud_j524.sname from t_stud_j524;
    for cur_atte in stud_atte_line loop
        --获取学生考勤表的当前记录
        select startdate into time_min from t_stud_atte_j524 where t_stud_atte_j524.sno=cur_atte.sno;
        select stopdate into time_max from t_stud_atte_j524 where t_stud_atte_j524.sno=cur_atte.sno;
        select class_a into class_sa from t_stud_atte_j524 where t_stud_atte_j524.sno=cur_atte.sno;
        select class_b into class_sb from t_stud_atte_j524 where t_stud_atte_j524.sno=cur_atte.sno;
        select class_c into class_sc from t_stud_atte_j524 where t_stud_atte_j524.sno=cur_atte.sno;
        select class_d into class_sd from t_stud_atte_j524 where t_stud_atte_j524.sno=cur_atte.sno;
        --通过比较日期,来获取每个学生不同的考勤时间段
        if(time_min>cur_atte.nowdate)then
            time_min:=cur_atte.nowdate;
        end if;
        if(time_max<cur_atte.nowdate)then
            time_max:=cur_atte.nowdate;
        end if;
     
        if(cur_atte.class12='A')then
            class_sa:=class_sa+1;
        elsif(cur_atte.class12='B')then
            class_sb:=class_sb+1;
        elsif(cur_atte.class12='C')then
            class_sc:=class_sc+1;
        elsif(cur_atte.class12='D')then
            class_sd:=class_sd+1;
        end if;
     
        if(cur_atte.class34='A')then
            class_sa:=class_sa+1;
        elsif(cur_atte.class34='B')then
            class_sb:=class_sb+1;
        elsif(cur_atte.class34='C')then
            class_sc:=class_sc+1;
        elsif(cur_atte.class34='D')then
            class_sd:=class_sd+1;
        end if;
     
        if(cur_atte.class56='A')then
            class_sa:=class_sa+1;
        elsif(cur_atte.class56='B')then
            class_sb:=class_sb+1;
        elsif(cur_atte.class56='C')then
            class_sc:=class_sc+1;
        elsif(cur_atte.class56='D')then
            class_sd:=class_sd+1;
        end if;
     
        if(cur_atte.class78='A')then
            class_sa:=class_sa+1;
        elsif(cur_atte.class78='B')then
            class_sb:=class_sb+1;
        elsif(cur_atte.class78='C')then
            class_sc:=class_sc+1;
        elsif(cur_atte.class78='D')then
            class_sd:=class_sd+1;
        end if;
     
        if(cur_atte.class90='A')then
            class_sa:=class_sa+1;
        elsif(cur_atte.class90='B')then
            class_sb:=class_sb+1;
        elsif(cur_atte.class90='C')then
            class_sc:=class_sc+1;
        elsif(cur_atte.class90='D')then
            class_sd:=class_sd+1;
        end if;
        --重新计算考勤成绩
        class_res:=100-class_sb*2-class_sc*5-class_sd;
        --将相关数据更新到学生考勤表
        update t_stud_atte_j524 set t_stud_atte_j524.startdate=time_min where t_stud_atte_j524.sno=cur_atte.sno;
        update t_stud_atte_j524 set t_stud_atte_j524.stopdate=time_max where t_stud_atte_j524.sno=cur_atte.sno;
        update t_stud_atte_j524 set t_stud_atte_j524.class_a=class_sa where t_stud_atte_j524.sno=cur_atte.sno;
        update t_stud_atte_j524 set t_stud_atte_j524.class_b=class_sb where t_stud_atte_j524.sno=cur_atte.sno;
        update t_stud_atte_j524 set t_stud_atte_j524.class_c=class_sc where t_stud_atte_j524.sno=cur_atte.sno;
        update t_stud_atte_j524 set t_stud_atte_j524.class_d=class_sd where t_stud_atte_j524.sno=cur_atte.sno;
        update t_stud_atte_j524 set t_stud_atte_j524.result=class_res where t_stud_atte_j524.sno=cur_atte.sno;
        update t_stud_j524 set t_stud_j524.sum_evaluation=class_res where t_stud_j524.sno=cur_atte.sno;
    end loop;
    end;
    /
    show error
     
    
    
    --11.显示学生考勤表
    exec p_stud_atte_j524;
    col sname format a7;
    alter session set nls_date_format = 'yyyy-mm-dd';
    select * from t_stud_atte_j524;
     
    --12.查看两名学生的考勤记录,查看数据汇总是否正确
    select * from t_attend_j524 where name='王二';
    select * from t_attend_j524 where name='王三';
     
    --13.建立过程:汇总专业考勤数据,并将成绩更新到专业表中
    create or replace procedure p_major_atte_j524(start_mtime date,stop_mtime date)
    as
    cursor major_atte_line is select * from t_attend_j524 where t_attend_j524.nowdate>=start_mtime and t_attend_j524.nowdate<=stop_mtime;
    cur_atte t_attend_j524%rowtype;
    class_ma number(3);
    class_mb number(3);
    class_mc number(3);
    class_md number(3);
    class_res number(3);
    begin
    delete from t_major_atte_j524;
    insert into t_major_atte_j524(mno,mname) select t_major_j524.mno,t_major_j524.mname from t_major_j524;
     
    for cur_atte in major_atte_line loop
         ---赋值进去 
        select class_a into class_ma from t_major_atte_j524 where t_major_atte_j524.mno=substr(cur_atte.sno,3,2);
        select class_b into class_mb from t_major_atte_j524 where t_major_atte_j524.mno=substr(cur_atte.sno,3,2);
        select class_c into class_mc from t_major_atte_j524 where t_major_atte_j524.mno=substr(cur_atte.sno,3,2);
        select class_d into class_md from t_major_atte_j524 where t_major_atte_j524.mno=substr(cur_atte.sno,3,2);
     
        if(cur_atte.class12='A')then
            class_ma:=class_ma+1;
        elsif(cur_atte.class12='B')then
            class_mb:=class_mb+1;
        elsif(cur_atte.class12='C')then
            class_mc:=class_mc+1;
        elsif(cur_atte.class12='D')then
            class_md:=class_md+1;
        end if;
     
        if(cur_atte.class34='A')then
            class_ma:=class_ma+1;
        elsif(cur_atte.class34='B')then
            class_mb:=class_mb+1;
        elsif(cur_atte.class34='C')then
            class_mc:=class_mc+1;
        elsif(cur_atte.class34='D')then
            class_md:=class_md+1;
        end if;
     
        if(cur_atte.class56='A')then
            class_ma:=class_ma+1;
        elsif(cur_atte.class56='B')then
            class_mb:=class_mb+1;
        elsif(cur_atte.class56='C')then
            class_mc:=class_mc+1;
        elsif(cur_atte.class56='D')then
            class_md:=class_md+1;
        end if;
     
        if(cur_atte.class78='A')then
            class_ma:=class_ma+1;
        elsif(cur_atte.class78='B')then
            class_mb:=class_mb+1;
        elsif(cur_atte.class78='C')then
            class_mc:=class_mc+1;
        elsif(cur_atte.class78='D')then
            class_md:=class_md+1;
        end if;
     
        if(cur_atte.class90='A')then
            class_ma:=class_ma+1;
        elsif(cur_atte.class90='B')then
            class_mb:=class_mb+1;
        elsif(cur_atte.class90='C')then
            class_mc:=class_mc+1;
        elsif(cur_atte.class90='D')then
            class_md:=class_md+1;
        end if;
     
        class_res:=500-class_mb*2-class_mc*5-class_md;
        
        update t_major_atte_j524 set t_major_atte_j524.startdate=start_mtime where t_major_atte_j524.mno=substr(cur_atte.sno,3,2);
        update t_major_atte_j524 set t_major_atte_j524.stopdate=stop_mtime where t_major_atte_j524.mno=substr(cur_atte.sno,3,2);
        update t_major_atte_j524 set t_major_atte_j524.class_a=class_ma where t_major_atte_j524.mno=substr(cur_atte.sno,3,2);
        update t_major_atte_j524 set t_major_atte_j524.class_b=class_mb where t_major_atte_j524.mno=substr(cur_atte.sno,3,2);
        update t_major_atte_j524 set t_major_atte_j524.class_c=class_mc where t_major_atte_j524.mno=substr(cur_atte.sno,3,2);
        update t_major_atte_j524 set t_major_atte_j524.class_d=class_md where t_major_atte_j524.mno=substr(cur_atte.sno,3,2);
        update t_major_atte_j524 set t_major_atte_j524.result=class_res where t_major_atte_j524.mno=substr(cur_atte.sno,3,2);
        update t_major_j524 set t_major_j524.sum_evaluation=class_res where t_major_j524.mno=substr(cur_atte.sno,3,2);
    end loop;
    end;
    /
    show error
    
    --14.显示专业考勤表
    exec p_major_atte_j524('20191013','20191019');
    col mname format a20;
    alter session set nls_date_format = 'yyyy-mm-dd';
    select * from t_major_atte_j524;
     
    --15.建立触发器:当对考勤表进行相应插入、删除、修改时,对stud表的sum_evaluation数值进行相应的数据更新
    create or replace trigger tg_attend_j524
    after insert or update or delete on t_attend_j524
    
    begin
    p_stud_atte_j524;
    end;
    /
     
    --16.测试触发器
    column sno format a11;
    column sname format a7;
    column sex format a4;
    column tel format a12;
    column email format a32;
    column birthday format a11;
    column mno format a11;
    column majorno format a3;
    set linesize 150;
    set pagesize 100;
    alter session set nls_date_format = 'yyyy-mm-dd';
    
    --插入测试
    select * from t_stud_j524 where sname='周五';
    insert into t_attend_j524 values(to_date('20191020','yyyymmdd'),'0919170110','周五','B','B','B','E','E');
    select * from t_stud_j524 where sname='周五';
     
    --删除测试
    select * from t_stud_j524 where sname='周五';
    delete from t_attend_j524 where name='周五' and nowdate=to_date('20191020','yyyymmdd');
    select * from t_stud_j524 where sname='周五';
     
    --更新测试
    select * from t_attend_j524 where name='周五';
    select * from t_stud_j524 where sname='周五';
    update t_attend_j524 set class12='C' where name='周五' and nowdate=to_date('20191019','yyyymmdd');
    select * from t_attend_j524 where name='周五';
    select * from t_stud_j524 where sname='周五';
    展开全文
  • Redis位图

    千次阅读 2020-05-24 17:52:58
    上课签到时间到了,张三老师开始点名了,每点一名同学就新增加一条记录,我们数据库会把这条记录写到学生考勤表里,到学期末考核的时候汇总根据学生迟到次数计算总学分。假设一个班级50个学生,一天4课时,一个星期...

    上课签到时间到了,张三老师开始点名了,每点一名同学就新增加一条记录,我们数据库会把这条记录写到学生考勤表里,到学期末考核的时候汇总根据学生迟到次数计算总学分。假设一个班级50个学生,一天4课时,一个星期就要记录1000条记录,那么如果说我们根据学生的学号顺序记录学生签到信息,通过“0”和“1”来表示,“1”就代表学生签到,“0”代表学生迟到,那么我们一个星期只要保存20条数据即可。

    Redis也有这样的结构名叫位图,位图最小的单位是bit,每个bit是由0或1构成,我们的字符串就是由很多个bit数组组成的,所以我们在使用位图的时候是可以把一组bit转换成字符串,也可以由字符串转换成bit数组。

    位图基本用法

    如下,“h”的ACSLL码是0110 1000

    > setbit name 1 1    #设置位图的位置(integer) 0> setbit name 2 1(integer) 0> setbit name 4 1(integer) 0> get name          #获取这个位图转换成字符串的值"h"> getbit name 1     #获取位图的某个位置是否有值(integer) 1> getbit name 3(integer) 0

    字符串转位图

    > set kh h       #存字符串OK> getbit kh 1    #第二个位置的bit是1(integer) 1> getbit kh 3    #第四个位置的bit是0(integer) 0

    注意:如果对应位的字节是不可打印字符,redis会显示该字符的十六进制形式。

    > setbit x O 1(integer) 0> setbit x 1 1(integer) 0> get x"\xc0"

    统计和查找

    Redis位图提供bitcount和bitpos指令,bitcount用来统计一定范围内1的个数,bitpos用来查找指定范围内出现的第一个0或者1。

    这里我们需要注意的是参数start_index和end_index是字节索引,简单的来说就是他们只能是8的倍数而不是指定值。

    咱们对照下图来看

    > set name helloOK127.0.0.1:6379> bitcount name    #计数所有的1的个数(integer) 21127.0.0.1:6379> bitcount name 0 1    #获取前两个字符出现1的个数(integer) 7127.0.0.1:6379> bitcount name 0 0    #获取第一个字符出现1的个数(integer) 3127.0.0.1:6379> bitpos name 1    #获取第一个1出现的位置(integer) 1127.0.0.1:6379> bitpos name 0    #获取第一个0出现的位置(integer) 0127.0.0.1:6379> bitpos name 1 1 1    #获取第二个字符1出现的位置(integer) 9

    关于位图批量操作

    我们通过setbit和getbit指令来操作位图都是一次操作一个位,那么有时候我们需要一次性操作多个位,如何操作呢?

    在Redis3.2版本之前我们可以使用管道来一次性操作多个指令,redis给我们提供了bitfield指令,该指令有三个子指令分别是get、set、incrby它们都可以对指定位片段进行读写,但是最多只能处理64个连续的位,如果超过64位,就得使用多个子指令,bitfield 可以一次执行多个子指令。

    Get

    下面我们来看例子,还是使用上面的name=hello

    字母 数值 二进制
    h 104 0110 1000
    e 101 0110 0101
    l 108 0110 1100
    l 108 0110 1100
    o 111 0110 1111
    > bitfield name get u4 0    #第一个位开始取4个位(0110),结果为无符号数(u)(integer) 6> bitfield name get u3 2    #第三个位开始取3个位(101),结果为无符号数(u)(integer) 5> bitfield name get i4 0    #第一个位开始取4个位(0110),结果为有符号数(i)(integer) 6> bitfield name get i3 2    #第三个位开始取3个位(101),结果为有符号数(i)(integer) -3

    下面我们才试试批处理

    > bitfield name get u4 0 get u3 2 get i4 0 get i3 2(integer) 6(integer) 5(integer) 6(integer) -3

    有符号数是指获取的位数组中第一个位是符号位,剩下的才是值。如果第一位是1,那就是负数。无符号数表示非负数,没有符号位,获取的位数组全部都是值。有符号数最多可以获取 64 位,无符号数只能获取 63 位(因为 Redis 协议中的integer是有符号数,最大 64 位,不能传递 64 位无符号值)。

    Set

    下面我们来使用set,把hello的e变成a,a的ASCLL码是97

    >bitfield name set u8 8 97    #从第八位开始,接下来的8位用无符号的ASCLL码97代替(integer)101 >get name"hallo"

    Incrby

    这个指令用来自增,如果自增到最大值的时候会溢出,如果是无符号那么就变成0,如果是有符号的就会变成负数,向下自增反之。

    bitfield指令提供溢出策略的指令overflow,用户可以指定类型,默认为:wrap,溢出及折返,还可以选择失败:fail,失败不执行,截断:sat,溢出就停留。

    > bitfield name incrby u4 2 1    #从第三个位开始,对接下来的4位元符号数+ 1(integer) 11> bitfield name incrby u4 2 1(integer) 12> bitfield name incrby u4 2 1(integer) 13> bitfield name incrby u4 2 1(integer) 14> bitfield name incrby u4 2 1(integer) 15####sat> bitfield name overflow sat incrby u4 2 1    #保持最大值(integer) 15####fail> bitfield name overflow fail incrby u4 2 1    #不执行(nil)####wrap> bitfield name incrby u4 2 1    #溢出折返(integer) 0

     

    一名正在抢救的coder

    笔名:mangolove

    CSDN地址:https://blog.csdn.net/mango_love

    GitHub地址:https://github.com/mangoloveYu

     

    展开全文
  • 有一张考勤表,表中包含三个字段,分别是日期、课程名和上课学生姓名 这是一张较为简单的流水表,本例将简单探寻我们能够实现的查询功能 查询功能梳理: 1° 准备测试数据: create table attend (dt ...
  • 一款查课App的探索

    2018-02-24 00:14:01
    在博主学校,有查课的传统,就是一堆不同专业的课程,由不同专业的学生去考勤,来激励学生上课。 换成逻辑层,就是数据库的操作。 正文: 理解了业务逻辑后,转换为需要使用的技术点。 1. 为了便捷性,选择...
  • 【点名】是对当代学生群体最有影响力的“起床闹铃”是师生间不屈不挠的的斗智斗勇更是一场妙趣横生的猫鼠游戏学校里一般通过老师课前点名来完成和核对学生们的考勤只要你不去上课,老师必点名那么,你知道当老师点名...
  •  一、总体情况良好 (一)教学管理 1、教师 (1)整体教学秩序良好,教师按要求携带点名册、考勤表正常上课,板书工整、未发现私自调课、调教室问题。大部分教师都能认真执行课堂教学规范,按照授课计划执行,教学...
  • 二、规范办学行为 : 我校坚决按照上级有关文件精神制定作息时间,安排学生的作息时间;注重学生对全面发展,积极创造条件开齐课程,开足课时。 教师按时到校,9月1日正式上课,教师首批作业要求在9月1日。 三...
  •  3、正式上课第一天,狠抓学生常规纪律及学习行为,一切要求按时按质按量完成。如有不好现象,立即找学生谈话,讲清道理,并要求其在班级表态,或检讨或谈犯错后的心态及感受,让全体学生引以为戒并重视起来。 4、...
  •  1、严格考勤制度,按作息时间上下班。全面贯彻新课程计划,按课程表上课,开足课程,上足课时。 2、各教研组在深入学习课程标准的基础上,定出切实可行的教研计划,认真配合学校做好校本培训工作、教师业务培训...
  • 文明之星评比细则.doc

    2021-01-19 12:03:38
     二、 各项评比细则 1 、出勤(10分) 1)每天上午7:10分、下午1:10分到校,每节课打正式上课铃没有进入课室的为迟到。 2)迟到、旷课要扣分,病假不扣分。 3)迟到校由保安门口登记,每节课由科任老师每节课在课堂...
  •  5、负责教师考勤、缺代课统计和学生学籍、毕业升级转退的管理。 6、负责平时、期中、期末考试的组织管理,搞好期中、期末教学质量分析和登统工作。 7、负责月教学行为的管理,对备课、上课、作业、辅导进行检查...

空空如也

空空如也

1 2
收藏数 21
精华内容 8
关键字:

学生上课考勤表