• 主页
  • 基础类
  • 应用实例
  • 新技术前沿

讨论下考勤系统的设计,谢谢。。。

HNLGDXYJS 2008-11-19 09:39:00
是这样的,我想做一个考勤管理系统,是管理学生的,主要功能是:

网络环境下设计的对学生日常考勤进行管理的信息系统,其中考勤管理子系统包括学生请假、旷课、迟到和早退登记、考勤审批、考勤统计、考勤查询、考勤公布等功能模块..

由于是做第一个项目,虽然小,但也算是第一个吧,对考勤表和设计不知怎样下手好..大家有没有做过类似的,可否给些建议或资料给我参考一下,或对我写的几张表点评一下,谢谢...

--考勤表,问题最多的是这个表,如果大家忙,可以只帮我看一下这个表,我感觉设计的很有问题,大家觉得考勤就一个表是否足够呢(要能满足上面---的要求)?是否多几个表来比较合适,比如请假单独一张表,等...
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;
...全文
242 点赞 收藏 29
写回复
29 条回复
莫聆 2011年02月26日
最主要的问题,还是业务领域没有分析好,这个表的设计是靠自己的直觉设计的吧,没有明确的业务领域模型是很难设计出合适的数据库。
回复 点赞
romettyu 2010年07月26日
學習學習阿
回复 点赞
tiyuzhongxin789 2008年11月22日
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数据

回复 点赞
HNLGDXYJS 2008年11月22日
谢谢大家,先这样先,以后有问题再问..
回复 点赞
HNLGDXYJS 2008年11月21日
回21楼:
(1)开新表,关于考勤类型定义(请假、旷课、迟到和早退登记),方便追加。相应的功能模快也要追加一个配置界面模块;
//你的意思是各位情况都 分别一张表,就是说请假一张表,迟到一张表,然后再汇总?

(2)考勤表中,那些Is**字段统统去掉,换成一个字段attendance nvarchar (200),设值就是[迟到,早退登记]等等(建议英文定义)多个的话用特殊符号分开,如逗号,char(27)等。审核人的编号,日期,审核状态等字段别忘了;


(3)考勤查询、考勤公布两个模块类似,就是查询模块多了查询条件,处理起来就(attendance like '%迟到%' or attendance like '%早退登记%')这样写就ok了。
有审核权限的人在查询界面还能有审核操作


(4)考勤统计,不知道你要做出来的是什么样子的格式分布,我想象的是表格样式,表头是日期,如1号到31号,每行是每个学生,那操作也不难,按学生编号,日期排序,抽出attendance值后鉴别一下就可以了。其他的,如果你要统计有多少人是迟到的之类也不难,甚至可以做图表,画出曲线图趋势图,对比图等等

谢谢(2)(3)(4)建议,我将在处理过程中对比着来做。。。
回复 点赞
HNLGDXYJS 2008年11月21日
回22楼,谢谢了,我就是想要这种效果,我自已转不过弯了,老是觉得不知怎样组织数据,关于时间,考勤这些,现在好了,
你给了我一条思路,我决定就用这种式建立考勤表,试一下效果怎样。。呵呵。。

各位大大,不知还有什么建议不?本人万分感激。。
回复 点赞
nick_yangzj 2008年11月21日
[Quote=引用 24 楼 HNLGDXYJS 的回复:]
回21楼:
(1)开新表,关于考勤类型定义(请假、旷课、迟到和早退登记),方便追加。相应的功能模快也要追加一个配置界面模块;
//你的意思是各位情况都 分别一张表,就是说请假一张表,迟到一张表,然后再汇总?
(2)考勤表中,那些Is**字段统统去掉,换成一个字段attendance nvarchar (200),设值就是[迟到,早退登记]等等(建议英文定义)多个的话用特殊符号分开,如逗号,char(27)等。审核人的编号,日期,审核状态等字段别忘了;

[/Quote]

当然不是了,只是一张新表,是关于你定义的考勤类型(只有一个字段),比如存放值absent,later等,结合第(2)点,考勤表attendance字段相应存放实际登入的考勤情况(就是上面那张新表字段的组合,多种情况用逗号隔开)。否则,你只在考勤表里面对每种考勤类型定义,以后再要追加新类型就得增加字段,程序就要多抽字段。。。
回复 点赞
HNLGDXYJS 2008年11月20日
那我最做实时的吧,其实我也不知道其中的难度问题,不过我感觉应该实时的比较适合一点,还请mythqxh 指点一下
回复 点赞
mythqxh 2008年11月20日
跟硬件有关系的。实时是每敲一次卡的数据立即反馈到服务器。定期收数据是指定每天的几点统一把一天的数据收上来,然后做处理。
回复 点赞
HNLGDXYJS 2008年11月20日
[Quote=引用 11 楼 mythqxh 的回复:]
你要做实时的还是定期收数据的?
[/Quote]

不好意思,我不明白这两者的区别,我一开始只想练一下手,努力想了几天,就想了这些,还有一些数据库连接的,我想跟C++联合起来..可是我不明白实时与定期收数据的区别,能否简要说一下..谢谢...

还有,不管是实时还是定期收数据,如果这位大哥做过的话,可否分享一下经验,因为我很想通过一个项目来提高一下自已,做哪能种类型的倒无所谓.然后再做一个难一点的,可现在就这个都把我难住了...

请大家多多发言,关于表的设计等等...表设计好了,查询这些才能下手,不然老是一头雾水,不知从何下手...

谢谢大家...
回复 点赞
rockyvan 2008年11月20日
[Quote=引用 18 楼 HNLGDXYJS 的回复:]
这个会不会太麻烦了点,大学一般一天11节课,包括晚上..那不是很辛苦...
我是想通过人工输入,如:
学生是否请假,设计BOOL变量..这样不知行不?
就是情况很多,不知怎样组织数据?
[/Quote]
手动输入的话,那你就只需要采集异常出勤的数据就可以了,其它的就全部视为正常出勤,这样能省很多事情。

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 节课缺席,生病。

回复 点赞
super_iven 2008年11月20日
up
回复 点赞
mythqxh 2008年11月20日
你要做实时的还是定期收数据的?
回复 点赞
Non_Recursive 2008年11月20日
[Quote=引用 9 楼 dobear_0922 的回复:]
fa_ge (鶴嘯九天) 是做考勤的,楼主可以问问他
[/Quote]

up,希望这位大大出来分享一下经验...
回复 点赞
szzwl 2008年11月20日
我也打算做点小管理系统
回复 点赞
nick_yangzj 2008年11月20日
(1)开新表,关于考勤类型定义(请假、旷课、迟到和早退登记),方便追加。相应的功能模快也要追加一个配置界面模块;
(2)考勤表中,那些Is**字段统统去掉,换成一个字段attendance nvarchar (200),设值就是[迟到,早退登记]等等(建议英文定义)
多个的话用特殊符号分开,如逗号,char(27)等。审核人的编号,日期,审核状态等字段别忘了;
(3)考勤查询、考勤公布两个模块类似,就是查询模块多了查询条件,处理起来就(attendance like '%迟到%' or attendance like '%早退登记%')这样写就ok了。
有审核权限的人在查询界面还能有审核操作
(4)考勤统计,不知道你要做出来的是什么样子的格式分布,我想象的是表格样式,表头是日期,如1号到31号,每行是每个学生,那操作也不难,按学生编号,日期排序,抽出attendance值后鉴别一下就可以了。其他的,如果你要统计有多少人是迟到的之类也不难,甚至可以做图表,画出曲线图趋势图,对比图等等
回复 点赞
dobear_0922 2008年11月20日
fa_ge (鶴嘯九天) 是做考勤的,楼主可以问问他
回复 点赞
Non_Recursive 2008年11月20日
班级表还是要好吧,方便汇总信息,班级间的评比等...
回复 点赞
Non_Recursive 2008年11月20日
我觉得考勤表可像三楼说得那样,学生是否迟到或请假可用一个数字表示,没有就不用填,就是不用BOOL变量,
直接int,然后查询的时候分清就可以了
回复 点赞
HNLGDXYJS 2008年11月20日
[Quote=引用 17 楼 rockyvan 的回复:]
學生考勤?
你是如何採集數據的?
不管你如何採集數據,3個信息一定要採集到:
1、學號
2、日期
3、時間
假如一天有3節課,大致可以這樣:
———————————————————————————
學號,日期,時間1,時間2,時間3,時間4,時間5,時間6
———————————————————————————

———————————————————————————
其中時間1為第一節課開始時間…
[/Quote]

这个会不会太麻烦了点,大学一般一天11节课,包括晚上..那不是很辛苦...

我是想通过人工输入,如:
学生是否请假,设计BOOL变量..这样不知行不?

就是情况很多,不知怎样组织数据?
回复 点赞
发动态
发帖子
MS-SQL Server
创建于2007-09-28

1.4w+

社区成员

25.3w+

社区内容

MS-SQL Server相关内容讨论专区
社区公告
暂无公告