是这样的,我想做一个考勤管理系统,是管理学生的,主要功能是:网络环境下设计的对学生日常考勤进行管理的信息系统,其中考勤管理子系统包括学生请假、旷课、迟到和早退登记、考勤审批、考勤统计、考勤查询、考勤公布等功能模块..由于是做第一个项目,虽然小,但也算是第一个吧,对考勤表和设计不知怎样下手好..大家有没有做过类似的,可否给些建议或资料给我参考一下,或对我写的几张表点评一下,谢谢...--考勤表,问题最多的是这个表,如果大家忙,可以只帮我看一下这个表,我感觉设计的很有问题,大家觉得考勤就一个表是否足够呢(要能满足上面---的要求)?是否多几个表来比较合适,比如请假单独一张表,等...
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;
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;
(
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数据
这样是可以减少NULL,我一开始也这样想,但我怕不好操作,其实我也不知好不好操作,因为我没做过...你能不能大体写一下考勤表,好让我参考一下,谢谢...
这个会不会太麻烦了点,大学一般一天11节课,包括晚上..那不是很辛苦...我是想通过人工输入,如:
学生是否请假,设计BOOL变量..这样不知行不?就是情况很多,不知怎样组织数据?
直接int,然后查询的时候分清就可以了
(2)考勤表中,那些Is**字段统统去掉,换成一个字段attendance nvarchar (200),设值就是[迟到,早退登记]等等(建议英文定义)
多个的话用特殊符号分开,如逗号,char(27)等。审核人的编号,日期,审核状态等字段别忘了;
(3)考勤查询、考勤公布两个模块类似,就是查询模块多了查询条件,处理起来就(attendance like '%迟到%' or attendance like '%早退登记%')这样写就ok了。
有审核权限的人在查询界面还能有审核操作
(4)考勤统计,不知道你要做出来的是什么样子的格式分布,我想象的是表格样式,表头是日期,如1号到31号,每行是每个学生,那操作也不难,按学生编号,日期排序,抽出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 节课缺席,生病。
(1)开新表,关于考勤类型定义(请假、旷课、迟到和早退登记),方便追加。相应的功能模快也要追加一个配置界面模块;
//你的意思是各位情况都 分别一张表,就是说请假一张表,迟到一张表,然后再汇总?(2)考勤表中,那些Is**字段统统去掉,换成一个字段attendance nvarchar (200),设值就是[迟到,早退登记]等等(建议英文定义)多个的话用特殊符号分开,如逗号,char(27)等。审核人的编号,日期,审核状态等字段别忘了;
(3)考勤查询、考勤公布两个模块类似,就是查询模块多了查询条件,处理起来就(attendance like '%迟到%' or attendance like '%早退登记%')这样写就ok了。
有审核权限的人在查询界面还能有审核操作
(4)考勤统计,不知道你要做出来的是什么样子的格式分布,我想象的是表格样式,表头是日期,如1号到31号,每行是每个学生,那操作也不难,按学生编号,日期排序,抽出attendance值后鉴别一下就可以了。其他的,如果你要统计有多少人是迟到的之类也不难,甚至可以做图表,画出曲线图趋势图,对比图等等谢谢(2)(3)(4)建议,我将在处理过程中对比着来做
当然不是了,只是一张新表,是关于你定义的考勤类型(只有一个字段),比如存放值absent,later等,结合第(2)点,考勤表attendance字段相应存放实际登入的考勤情况(就是上面那张新表字段的组合,多种情况用逗号隔开)。否则,你只在考勤表里面对每种考勤类型定义,以后再要追加新类型就得增加字段,程序就要多抽字段
(
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数据