是这样的,我想做一个考勤管理系统,是管理学生的,主要功能是:网络环境下设计的对学生日常考勤进行管理的信息系统,其中考勤管理子系统包括学生请假、旷课、迟到和早退登记、考勤审批、考勤统计、考勤查询、考勤公布等功能模块..由于是做第一个项目,虽然小,但也算是第一个吧,对考勤表和设计不知怎样下手好..大家有没有做过类似的,可否给些建议或资料给我参考一下,或对我写的几张表点评一下,谢谢...--考勤表,问题最多的是这个表,如果大家忙,可以只帮我看一下这个表,我感觉设计的很有问题,大家觉得考勤就一个表是否足够呢(要能满足上面---的要求)?是否多几个表来比较合适,比如请假单独一张表,等...
create table school.CheckOnWork  --主要是这个考勤表,我觉得写的很烂,大家可不可以帮忙改看一下,或给些建议
(
  s_id char(10) ,     --学生学号
  k_weeks int,   --这是星期几,比如星期天,一,二,等
  k_week int,     --这是第几周
  k_lesson int,    --这是一天中的第几节课
  k_schoolyear char(10) ,      --这是哪能个学年  k_grade char(5),   --这是学生的所在班级
  
  IsLater char(2),     --记录是否迟到
   IsAbsent char(2),  --记录是否制度
  IsAskleave char(2),--记录是否请假
   k_why char(50)     --请假理由);
--下面两个表是用户表,一个是学生的,一个是老师的,用来注册用的,大家觉得这样可以吗?有什么好的建议吗?
CREATE TABLE `s_user` (
  `s_id` char(10) NOT NULL,
  `s_name` char(10) default NULL,
  `passwad` char(20) default NULL,
  PRIMARY KEY  (`s_id`)
) ENGINE=InnoDB DEFAULT CHARSET=gb2312;
CREATE TABLE `t_user` (
  `T_id` char(10) NOT NULL,
  `T_name` char(10) default NULL,
  `passwad` char(20) default NULL,
  PRIMARY KEY  (`T_id`)
) ENGINE=InnoDB DEFAULT CHARSET=gb2312;--下面是班级表
CREATE TABLE classinfo (   
  c_grade char(5) NOT NULL,
  c_directer char(10) default NULL,
  c_dept char(5) default NULL,
  c_amount int(11) default NULL,
  c_checkwork char(5) default NULL,
  PRIMARY KEY  (c_grade)
) ENGINE=InnoDB DEFAULT CHARSET=gb2312;--下面是学生基本信息,这个倒没什么...自已考虑应该可以完成.
CREATE TABLE `student` (
  `s_id` char(10) character set latin1 NOT NULL default '',
  `s_name` char(10) default NULL,
  `s_grade` char(5) default NULL,
  `s_age` int(11) default NULL,
  `s_phone` char(15) character set latin1 default NULL,
  `s_address` varchar(50) default NULL,
  `s_image` longblob,
  `s_other` varchar(100) default NULL,
  `s_borndata` datetime NOT NULL default '0000-00-00 00:00:00',
  `s_sex` char(2) default NULL,
  PRIMARY KEY  (`s_id`)
) ENGINE=InnoDB DEFAULT CHARSET=gb2312;
--教师表
CREATE TABLE `teacher` (
  `T_ID` char(10) NOT NULL,
  `T_Name` char(10) default NULL,
  `T_Age` int(11) default NULL,
  `T_Phone` char(10) default NULL,
  `T_Sex` char(5) default NULL,
  PRIMARY KEY  (`T_ID`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

解决方案 »

  1.   

    create table school.CheckOnWork  --主要是这个考勤表,我觉得写的很烂,大家可不可以帮忙改看一下,或给些建议
    (
      s_id char(10) ,     --学生学号
      k_weeks int,   --这是星期几,比如星期天,一,二,等
      k_week int,     --这是第几周
      k_lesson int,    --这是一天中的第几节课
      k_schoolyear char(10) ,      --这是哪能个学年  k_grade char(5),   --这是学生的所在班级
      
      IsLater char(2),     --记录是否迟到
       IsAbsent char(2),  --记录是否制度
      IsAskleave char(2),--记录是否请假
       k_why char(50)     --请假理由);班级就不用记录了吧,通过学号查找学生表就可以得到了。
    IsLater char(2),     --记录是否迟到
       IsAbsent char(2),  --记录是否制度
      IsAskleave char(2),--记录是否请假    
    个人看法可以做一个类型表,例如1代表迟到,2代表请假之类的,然后在CheckOnWork表中改为考勤类型就行了,这样的话,表中就不会有太多的null数据
      

  2.   

    先谢谢三楼,你的意思是类似这样?`k_012_AskleaveLateAbsent` int default NULL,  --用0,1,2w分别表示请假,迟到,缺席
     这样是可以减少NULL,我一开始也这样想,但我怕不好操作,其实我也不知好不好操作,因为我没做过...你能不能大体写一下考勤表,好让我参考一下,谢谢...
      

  3.   

    fa_ge (鶴嘯九天) 是做考勤的,楼主可以问问他
      

  4.   

    那我最做实时的吧,其实我也不知道其中的难度问题,不过我感觉应该实时的比较适合一点,还请mythqxh 指点一下
      

  5.   


    这个会不会太麻烦了点,大学一般一天11节课,包括晚上..那不是很辛苦...我是想通过人工输入,如:
    学生是否请假,设计BOOL变量..这样不知行不?就是情况很多,不知怎样组织数据?
      

  6.   

    我觉得考勤表可像三楼说得那样,学生是否迟到或请假可用一个数字表示,没有就不用填,就是不用BOOL变量,
    直接int,然后查询的时候分清就可以了
      

  7.   

    (1)开新表,关于考勤类型定义(请假、旷课、迟到和早退登记),方便追加。相应的功能模快也要追加一个配置界面模块;
    (2)考勤表中,那些Is**字段统统去掉,换成一个字段attendance nvarchar (200),设值就是[迟到,早退登记]等等(建议英文定义)
        多个的话用特殊符号分开,如逗号,char(27)等。审核人的编号,日期,审核状态等字段别忘了;
    (3)考勤查询、考勤公布两个模块类似,就是查询模块多了查询条件,处理起来就(attendance like '%迟到%' or attendance like '%早退登记%')这样写就ok了。
       有审核权限的人在查询界面还能有审核操作
    (4)考勤统计,不知道你要做出来的是什么样子的格式分布,我想象的是表格样式,表头是日期,如1号到31号,每行是每个学生,那操作也不难,按学生编号,日期排序,抽出attendance值后鉴别一下就可以了。其他的,如果你要统计有多少人是迟到的之类也不难,甚至可以做图表,画出曲线图趋势图,对比图等等
      

  8.   

    手动输入的话,那你就只需要采集异常出勤的数据就可以了,其它的就全部视为正常出勤,这样能省很多事情。Table_Attendance
    StudentNo,AtDate,  LessonNo,AtStatus,Reason
    ——————————————————————
    00000001 ,2008/1/1,3       ,Late    ,NULL
    00000002 ,2008/2/9,5       ,Absent  ,Sick--00000001 在2008/1/1第3 节课迟到,没有原因。
    --00000002 在2008/2/9第5 节课缺席,生病。
      

  9.   

    回21楼:
    (1)开新表,关于考勤类型定义(请假、旷课、迟到和早退登记),方便追加。相应的功能模快也要追加一个配置界面模块;
    //你的意思是各位情况都 分别一张表,就是说请假一张表,迟到一张表,然后再汇总?(2)考勤表中,那些Is**字段统统去掉,换成一个字段attendance nvarchar (200),设值就是[迟到,早退登记]等等(建议英文定义)多个的话用特殊符号分开,如逗号,char(27)等。审核人的编号,日期,审核状态等字段别忘了;
    (3)考勤查询、考勤公布两个模块类似,就是查询模块多了查询条件,处理起来就(attendance like '%迟到%' or attendance like '%早退登记%')这样写就ok了。
      有审核权限的人在查询界面还能有审核操作
    (4)考勤统计,不知道你要做出来的是什么样子的格式分布,我想象的是表格样式,表头是日期,如1号到31号,每行是每个学生,那操作也不难,按学生编号,日期排序,抽出attendance值后鉴别一下就可以了。其他的,如果你要统计有多少人是迟到的之类也不难,甚至可以做图表,画出曲线图趋势图,对比图等等谢谢(2)(3)(4)建议,我将在处理过程中对比着来做
      

  10.   


    当然不是了,只是一张新表,是关于你定义的考勤类型(只有一个字段),比如存放值absent,later等,结合第(2)点,考勤表attendance字段相应存放实际登入的考勤情况(就是上面那张新表字段的组合,多种情况用逗号隔开)。否则,你只在考勤表里面对每种考勤类型定义,以后再要追加新类型就得增加字段,程序就要多抽字段
      

  11.   

    create table school.CheckOnWork  --主要是这个考勤表,我觉得写的很烂,大家可不可以帮忙改看一下,或给些建议
    (
      s_id char(10) ,     --学生学号
      k_weeks int,   --这是星期几,比如星期天,一,二,等
      k_week int,     --这是第几周
      k_lesson int,    --这是一天中的第几节课
      k_schoolyear char(10) ,      --这是哪能个学年  k_grade char(5),   --这是学生的所在班级
      
      IsLater char(2),     --记录是否迟到
       IsAbsent char(2),  --记录是否制度
      IsAskleave char(2),--记录是否请假
       k_why char(50)     --请假理由);班级就不用记录了吧,通过学号查找学生表就可以得到了。
    IsLater char(2),     --记录是否迟到
       IsAbsent char(2),  --记录是否制度
      IsAskleave char(2),--记录是否请假    
    个人看法可以做一个类型表,例如1代表迟到,2代表请假之类的,然后在CheckOnWork表中改为考勤类型就行了,这样的话,表中就不会有太多的null数据