1、数据库系统课程设计题目: 考勤管理系统专业:计算机科学与技术年 级: 大二班 级:学 号:姓 名:指导老师:完成时间: 2017年6月8号b)添加修改出勤记录通过系统选用上班(I)或者下班(O)进行出勤记录的添加,如果上班记录 添加的时间晚于当个季节的上班时间,则会在迟到记录中加H班也是同 样的道理。c)加班记录通过系统可以选择添加加班小时数,同时添加加班记录的时刻会被记录在记 录表中。d)请假记录通过系统可以添加请假i己录,选择请假的起始时间和结束时间后,系统会自 动将请假的时间记录到记录表中。e)出差记录通过系统可以添加出差记录,选择出差的起始时间和结束时间后,系统会自 动将出差的时间记录
2、到记录表中。f)考勤统计系统可以自动汇总出勤表、加班表、请假表、出差表的数据,计算出每个员 工的考勤情况如加班小时数和退到次数等等。3.2用户界面设计完成数据库创建和功能说明以后,我们可以进行下一步工作,即设计用户界 面。a)登录认证窗口登录认证采用两种身份验证方式,管理员方式和员工方式。b)主窗体主窗体用来选择所要执行的功能。c)d)e)CZ)上下tmatrff今tMf建上下班时间设置窗体上下班时间窗体用来设置选中季节的对应上下班时间。考勤修改窗体考勤修改窗体用来记录每次的上下班时间。添加修改出勤记录界面出勤修改界面用来修改出勤记录,如迟到次数和早退次数等等。f)加班记录界面加班记录界面用来
3、记录加班信息。g)请假记录界面请假记录界面用来记录请假信息。h)出差记录界面出差记录界面用来记录出差信息。i)考勤统计窗口考勤统计窗口用来显示或者全部删除或者指定删除统计信息。j)注册窗口注册窗口用来注册新员工信息。k)忘记密码窗口忘记密码窗口用来重置密码。1)提交成功窗口提交成功窗口用来显示提交是否成功。3.3各功能模块的实现a) 数据模块的创建数据模块的创建通过导入PowcrDcsignrl6生成的脚本文件生成,导入的是数 据的结构,也可以和脚本一起导入数据,但是我选择的是手动输入数据。b) 上下班时间设置上下班时间的设置在与数据库连通之后,首先通过select语句查找出当前选择 的季节的
4、上下班时间,然后通过update进行上下班时间的更新。c) 添加修改出勤记录出勤记录的修改首先通过select查询到对应员工号,如果没有对应员工号则询 问是否要添加到员工表中,如果添加的话,顺便也会给统计表中插入一条新 员工的记录。查询成功后即可选择迟到次数和早退次数等等,输入相应的值 再按下提交(update)后即可将出勤信息修改。d) 加班记录加班记录的增加首先通过select查询到对应员工号,如果没有对应员工号则询 问是否要添加到员工表中,如果添加的话,顺便也会给统计表中插入一条新 员工的记录。查询成功后即可增加加班信息,加班信息包括加班时长和加班 日期,按下提交(insert)后即可将
5、加班记录增加到加班记录表中。e) 请假记录请假记录的增加首先通过select查询到对应员工号,如果没有对应员工号则询 问是否要添加到员工表中,如果添加的话,顺便也会给统计表中插入一条新 员工的记录。查询成功后即可增加请假信息,请假信息包括请假的起始时间 和结束时间以及请假的缘由,按下提交(insert)后即可将请假记录增加到请 假记录中。f) 出差记录出差记录的增加首先通过select查询到对应员工号,如果没有对应员工号则询 问是否要添加到员工表中,如果添加的话,顺便也会给统计表中插入条新 员工的记录。查询成功后即可增加出差信息,出差信息包括出差的起始时间 和结束时间以及出差的缘由,按下提交(
6、insert)后即可将出差记录增加到出 差记录中。g) 考勤统计考勤统计通过将各个分表如出勤表、请假表等表进行汇总,汇总出的数据存 入考勤统计表中。4-系统实现4.1系统总体设计系统总体采用面向对象设计方法进行设计开发。对象指的是类的实例。它将 对象作为程序的基本单元,将程序和数据封装其中,以提高软件的重用性、灵活 性和扩展性。加上QT所采用的就是C+的编程方法,选用面向对象编程方式成 为了一种必然。从以上对数据库和功能的分析总结出本系统需要一个登录模块,一个注册模 块,一个找回密码模块,一个功能选择模块,一个上下班时间设置模块,一个出 勤登记模块,一个考勤修改模块,一个请假登记模块,一个出差
7、登记模块,一共 是九个模块。ODBC数据库访问技术只适用于windows系统,因为需要在ODBC驱动程序 管理器中进行数据源注册,而只有windows才集成了 ODBC驱动程序管理器(“控 制面板/管理工具/数据源” )o ADO(ActiveX Data Object)具有跨系统平台特性,它 直接对DBMS数据库进行操作,即系统中必须有DBMS,但不需要驱动程序,不 需要注册数据源,所以具有很好的可移植性。由于开发环境选在Windows XP,使 用的数据库为Microsoft SQL Server 2005,因此采用ODBC的连接方式而不是ADO 方式。得益于采用面向对象的方式开发,软件在
8、开发过程中的测试可以采用单元测 试方法,独立测试每个模块即可,最后再组装到一起进行集成测试,这样可以尽 可能地节省时间。4.2 ODBC连接方式的实现开放数据库连接(。pen Database Connectivity, ODBC)是微软公司开放服务 结构(WCSA, Windows Open Services Architecture)中有关数据库的个组成部分, 它建立了一组规范,并提供了一组对数据库访问的标准API (应用程序编程接口)。 这些API利用SQL来完成其大部分任务oODBC本身也提供了对SQL语言的支持, 用户可以直接将SQL语句送给ODBC。这里我们只需要知道基本的ODBC
9、连接方 式和配制方法即可。Windows已经包含了应用程序、驱动管理器、驱动程序以及数据源,我们所要 做的就是配置好数据源,具体配置方法如下: 打开控制面板- 管理工具- 数据源(ODBC)oW) Mi) *(v)IP(T WflXH)W) Mi) *(v)IP(T WflXH)W) Mi) *(v)IP(T WflXH)大小2P *M miHlMI8m 2W/7H4 125) ttan=5M(C:N(fc)MgM B8TS ,手CBOMMU*mRJ(OO8C) *taBM 2CW7H4 U5JRM24CBM MSndov WndcMR 打开SWI Mkt)80 IIKD WOOimt计mn的
10、没.* Alcohol iSCSI Sharing 沔 CenterBftLo小 Internet 谀 1#Java蒙 ODBC (32 Q)ftRenvWindows DefenderWine询 Windows蹄1蜿 jwav)a由固fe 象皆i里珈 KUttff95,。KtCKlifiA任引to下。务,】W 单击添加按钮,准备添加一个新的数据源,这个数据源是与自己所写的程序 相关的。填与好名称,这个名称和后面程序进行ODBC连接有至关重要的联系, 服务器选择数据库所在的服务器,完毕之后选择下一步。 如图所示选择连接方式,输入正确的账号密码,单击下一步。 默认的数据库更改为要操作的数据库,点
11、击下一步。一直按下一步直到完成,然后单击测试数据源,如果测试成功则。DBC配 置成功,可以进行接下来的工作。测试结果Microsoft SQL Server ODBC 驱动程序牍本 06. 01.7601正在运行连接测试.后务 接建顶服 莆选与 图葛开 试靠所接 连 的卷|测试成功! |I确定接下来就是在QT中实现使用ODBC方式连接数据库: 在QT中使用数据库操作需要添加对应的头文件,以及在工程文件中添加对 SQL的支持。QT+= core gui| sql#1nclude ncTude nclude # H ncTude nclude nclude ncludegreaterThan(QT
12、_MAJOR_VERSION, 4): QT += widgetsTARGET = MyDBShow TEMPLATE = app | 一 添加完成后即可通过代码进行数据库的连接精品哉据军技通 db = QSqlDatabase::addDatabase(QOOBCM); db.setHostNafteC416-12M); db.sctDatabascNamc(MsqlservcrM); db.setUserNae(wsa);db.setPassword(*,so526*);if(!db.open()(QMessageBox:warning(thi%tMDdteBase open failed
13、! wMPlease check your DB setting!); exit(G); 其中,QSqlDatcbasc:addDatcbasc( QODBC” )为添加 ODBC 的驱动到 QT 程 序中,没有驱动的话也就无法正确连接数据库。sctHostName(”416-12”)为设置 想要连接的主机的名字,如果是远程服务器的话也可以直接输入IP地址。 setI)atabaseNamc(sqlscnrcr)为设置数据库的连接名,这里就用到了之前设置 数据源时的名称,这个连接名需要和数据源里面的名称样才能连接。 setUserName(sa)和setPassword(,sa520)分别为设
14、置登陆账号和密码,如果 采用的是Windows账户登陆的话就不需要设置这两项,不是的话就需要设置。 最后的那个opcnQ是用来判断是不是已经打开对应的数据库,成功的话会返 回true ,否则就是false ,表示不成功,需要重新设置。此外,在Microsoft SQL Server Management Studio中1可以直接导出对应表的增、 删、查、改脚本,具体方法如下:购 E(F) 性(R)M 依Ift我案(V)金 3R(T)(O)rran(A)足助 PowcrShell(H) 福gP)B 0 TYX_DB_AttendautoF-illBackground();QPalette pal
15、ette;palette.setBrush(QPalette:Background,QBrush(QPixmap(:/new/prefixl/img/background.jpg); / QPixmap pixmap(:/new/prefixl/img/background.jpg); this-setPalette(palette);密码输入时显示为加密模式,使用ui-PassvordEdit-setEchoModc(QLincF.dit:Password);回车的焦点设置为登陆按钮/回车焦点设置QShortcut *key = new QShortcut(QKeySequence(Qt:K
16、ey_Enter),this);QObject:connect(key,SIGNAL(acti vated(),this,SLOT(on_LandButton_clicked(); 按下登陆或注册或忘记密码时会将当前窗口隐藏,同时打开对应的窗口。4.4注册界面的实现用户注册界面主要用到的是两个按钮,一个提交,一个返回,其他的均为输入框,主要控件如下:控件类型控件名用途说明Q Push ButtonSubmitButton提交Return Button返回QT.ineEditPcrsonN umbcrl .incEdit输入用户名PasswordLineEdit输入密码NamcLincEdit输
17、入姓名TELLineEdit输入手机号码QDateBirthdayDateEdit选择生日在QT设计师模式中我设计完成的界面是这样的:员工注册注册信息禾英13日赤不孚符 不芸也过20个字符 不要13过20个字符 不受也过2个字符 格式如:2ou-(n-oi 不受超2120个字符 不登起过20个字符 不1312120个字符 如,英语四级 :湖南怅沙 清除入米用的手机号 清搐入常用的电子倍顼 是否已成为公司员工需要注意的是:必须输入的为员工号,其他可以填也可以不填,不填的话就找不回密码。4.5找回密码的实现找回密码界面主要使用三个按钮,四个输入框,部分主要控件如下:控件类型控件名用途说明QPush
18、ButtonPasswordPushButton确认用户名SubmitPushButton提交RcturnPushButton返回QLineEditPersonNumberLineEdit输入用户名NameLincEdir输入密码TELLineEdit输入手机号NewPasswordLineEdit输入新密码在QT设计师模式中我设计完成的界面是这样的:需要注意的是: 如果注册时没有输入姓名和手机号,在这里是找不回密码的,只有联系管理员 在数据库中修改。4.6主界面的实现主界面主要使用七个按钮,部分主要控件如下:控件类型控件名用途说明QPushButtonWorkSctButton上下班时间Wo
19、rkAttcndanccButton考勤修改AttendanceButton出勤管理OverTimeButton加班管理I xaveButton请假管理Errand Button出差管理WorkAttcndanccStatisticsButton考勤统计在QT设计师模式中我设计完成的界面是这样的:TextLabElLTWH1 间 TH|出师理WM*理谓偶童理出是管理考勤统it上下最言理考勤曾谭出)管理加地管理WCV9出旁勤烷计清选择想要进行的操作:需要注意的是:四周的弹簧和之前的一样,都是为了维持固定比例不变形。每个按钮是交叉分布的,所以有图的部分是点不了的。4.7上下班时间设置的实现上下班时
20、间设置界面主要使用两个显示标签,四个按钮,两个下拉框和两个 时间设置框,部分主要控件如下:控件类型控件名用途说明Q LabelCurrcntUpTimcShowLablc显示当前上班时间CurrentDownTimeShowIjible显示当前下班时间QPushButtonUpSubmitButton提交上班时间更改DownSubmitButton提交下班时间更改InitializationButton初始化上下班时间BackButton返回QComboBoxup season comboBox上班季节下拉框dovn scason comboBox下班季节下拉框QTimcEditDown ti
21、mcEdit下班时间设置框Up timeEdit上班时间设置框在QT设计师模式中我设计完成的界面是这样的:重置为初值只能重置当前页面的,而不是重置全部。 系统默认上班时间上午八点,下班时间晚上十点。上下班时间表是存在数据库中的,而不是存在程序之中。4.8考勤修改的实现考勤修改界面主要使用九个按钮,八个输入框和七个显示标签,部分主要控 件如下:控件类型控件名用途说明QPush ButtonPersonSubmitButton提交员工号returnButton返回Change WorkSubmitButton工作时间修改提交ChangcOvcrtimcSubmitButton加班时间修改提交Cha
22、nge IaveSubmitButton请假时间修改提交ChangeErrandSubmitButton出差时间修改提交Changcl 4itcSubmitButton迟到次数修改提交Change LcavccarlySubmitButton早退次数修改提交ChangeAbsenteeismSubmirButton旷工次数修改提交QLineEditPersonlineEdit员工号输入WorkTimcChangc lincEdit改变的工作时间OvefrimcChangc lincEdit改变的加班时间IaveTime(Lhange lineEdit改变的请假时间ErrandTimeChang
23、e hneEdit改变的出差时间LatclimcsChangc lineEdit改变的退到次数IeaveEarlyTimesChange lineEdit改变的早退次数/bsenteeismTimesChange lineEdit改变的旷工次数QLabelCurrcntWorkTimcNumbcrLabel显示当前工作时间CurrentOvertimeTimeNumberLabel显示当前加班时间CurrcntLcavcTimcN umbcrLabcl显示当前请假时间CurrentErrandTimeNumberljibel显示当前出差时间Currcntl.ateTimcsN umbcrLab
24、cl显示当前迟到次数Currentl-eaveearlyTimesNumberLabelCurrentAbsentecismTimesNumbcrLabcl显示当前早退次数显示当前旷工次数在QT设计师模式中我设计完成的界面是这样的:需要注意的是:只有输入了员工表中已有的员工号才能进行更改。如果输入的员工号不存在,可以选择新建一个员工信息,4.9出勤记录的实现出勤记录界面主要使用三个按钮,一个输入框,两个单选框和一个时间设置 框,部分主要控件如下:控件类型控件名用途说明QPush ButtonPcrsonN umbcrSubmi (Button提交员工号SubmitButton提交出勤信息Rct
25、urnButton返回QLineEditPersonN umberEditLine输入员工号Q RadioButtonIN radioButton选择上班OUT radioButton 2选择下班QDatcTimcEditlN()UT datcTimcEdit上下班时间记录在QT设计师模式中我设计完成的界面是这样的:出勤含理员工号谕入员工号:确定 I需要注意的是: 只有输入了员工表中已有的员工号才能进行信息记录。必须选择上班或者是下班,否则会提示错误无法提交信息。4.10加班记录的实现加班记录界面主要使用三个按钮,一个输入框,一个双精度自旋框和一个时 间设置框,部分主要控件如下:控件类型控件名
26、用途说明QPush ButtonPcrsonN umbcrSubmitButton提交员工号SubmitButton提交信息RcturnButton返回QLincEditPersonN umberlineEdit输入员工号QDoublcSpinBoxOvcrtimcLengthdoublcSpinBox输入加班时长QDateTimeEditOvcromcDatedateEdit加班记录日期在QT设计师模式中我设计完成的界面是这样的:加班管理厂提交 返回需要注意的是:只有输入了员工表中已有的员工号才能进行信息记录。这里的加班日期是指加班的那天而不是进行记录的那天。4. 11请假记录的实现请假记录
27、界面主要使用三个按钮,两个输入框和两个时间选择框,部分主要 控件如下:控件类型控件名用途说明Q Push ButtonPcrsonSubmitButton提交用户名SubmitButton提交信息RcturnButton返回QLincEclitPcrsonEditLine输入员工号QlcxtEditRcasontcxtEdit输入请假备注QDatcTimeEditIaveBegin dateTimcEdit请假起始时间LeaveEnd dateTimeEdit请假结束时间在QT设计师模式中我设计完成的界面是这样的:需要注意的是:只有输入了员工表中已有的员工号才能进行信息记录。 请假缘由字数没有
28、限制。4.12出差记录的实现出差记录界面主要使用三个按钮,两个输入框和两个时间设置框,部分主要 控件如下:控件类型控件名用途说明QPushButtonPersonSubmitButton提交员工号SubmitButton提交信息RcturnButton返回QI JncEditPcrsonliditl Jnc输入员工号QTextEditDescription textEdit输入出差备注QDatcTimeEditErrandBegin datcTimcEdit出差起始时间ErrandEnd datcTimcEdit出差结束时间在QT设计师模式中我设计完成的界面是这样的:需要注意的是:只有输入了员
29、工表中已有的员工号才能进行信息记录。具体描述部分没有字数限制。4.13考勤统计和记录删除的实现考勤统计和记录删除界面主要使用四个按钮和一个表格显示视图,部分主要 控件如下:控件类型控件名用途说明QPushButtonChooseDeletcButton选中行删除AllClearButton全部删除ShowStatisticButton显示统计信息Return Button返回QTableViewshowTableView显示表格在QT设计师模式中我设计完成的界而是这样的:考勤统计选中删除全部清零.显示考痂司返回“g5 皿5需要注意的是: 这里说的删除不是删除当前行,而是删除与当前表格相关的员工
30、的信息,如加 班表、出勤表中的相关信息全部删除。选中删除必须选中一行,否则会直接删除第一行的员工相关信息。六、实验心得本实验如果采用的是实验指导书中的方法去做的话,过程会稍显复杂,于是我选择 了我比较熟悉的QT来做,能够节约时间,实验期间主要心得与收获如卜-:1. 实验本身并不是很难,因为大多的实现方法就是增、删、查、改四项,真正有 问题的是实现部分,因为要考虑到各个组件和界面的交互操作。2. 代码本身不难写,难的是数据库的设计和界面的美工,这两个方面是这么久一 直没有涉及过的,尤其是界面的美工,对于我这种审美有点不对劲的人来说, 别人觉得好看的我不一定觉得好看,我觉得好看的别人觉得很难看。数
31、据库的 设计也是,要详细分析好各个数据项的数据类型,否则编写代码的时候会出现 很严重的类型匹配错误。3. 好的开发工具很重要。像VC+ 6.0这个软件年代太久远了,但是机房的电脑又 装不了我另一个比较熟悉的VS2015,所以只能锁定在QT。而且QT的版本选 择也是很重要,之前花了一天的时间下了又删,从QT5.9开始一直试到了 QT5.6 才能在XP系统上用,但是磨刀不误砍柴工,这点时间上的花费是值得的。4. 完成题目所要求的功能大概只花了两天时间,但是剩下的时间也不能玩,我刚 好可以把最近学的重构改善既有代码的设计这本书上的东西运用到实际 上来,对我的代码进行重构,这个过程很痛苦,因为有些地方
32、改了之后就会报 错,花费很多时间来换条路进行重构。但是结局是开心的,因为最后完成了我 的目标,使得代码的整洁度、可读性和鲁棒度都得到了不小的提升。目录一、实验目的2二、实验平台2三、实验内容2四、实验要求2五、实验步骤31. 系统需求分析31.1 系统功能分析31.2 系统功能模块设计(划分)31.3 与其它系统的关系31.4 数据流程图32. 数据库设计32.1 数据库需求分析42.2 数据库概念结构设计42.3 数据库逻辑结构设计42.4 使用PowerDesignerl6进行数据库的设计与建立62.5 使用Axure RP 8进行界面的设计73. 各功能模块的设计与实现73.1 功能说明
33、73.2 用户界面设计83.3 各功能模块的实现134. 系统实现144.1 系统总体设计144.2 ODBC连接方式的实现144.3 登陆界面的实现174.4 注册界面的实现184.5 找回密码的实现194.6 主界面的实现204.7 上下班时间设置的实现204.8 考勤修改的实现214.9 出勤记录的实现224.10 加班记录的实现234.11 请假记录的实现244.12 出差记录的实现244.13 考勤统计和记录删除的实现25六、实验心得26七、部分代码展示26精品七、部分代码展示/attendance_diange.qvoidsqlquery.bindVakjeCiASSWORD,14
34、)efsonNumba);sqlqueij.execO;AttcndaiKX_Chaf:ofLJPer5onNumbcrSubrnhButtoQ_ciickcdstatJnsertQ;exist = feke; 列晰员工&ui-grcxBojL-2- showQ; ui-gtoupBox_3-sh0wQ;ui-SubmitButton-showO;personNumber =vri-PersonNumbaEdidJDe-textO;rYK_DBqcndanE.dbo.PERSON);QSqlQuerysqlquety;sqlquay.cxccCSELECT PERSONFROMwhile(sq
35、kjuayjextO)(邮眼砌QSqlQueiy scqueryDD;sqlqua)rID.cxec(SELECT IDFROMQStting tempPersonlD =sqJquety.value(0).tDStiingO;itempPeisonID.compare(personNumbe =Q)如果存曲瑞I入的相同的员工号,贝呵以直接使用|TYX_DB_AttnxiarKe.ATrENDANC);if(sqkpetyIDJastO) (IDNumber = sqlquetyID.value(U).tDlntO + 1;adst = true;void Attendancc_Char:on
36、jSubmitButtoQ_ciickcdO /提if(ejdsO(QMessagB(Mcwaming(this,nQuei) wassuccessful,Query was successfuT1);ui-gpDupBoxu-2-showQ;ui-gpoupBo3L_3-showO; ui-SubmitButton-showO;else不磴输入的员工号,遐鞠健或者不新建返回QStringIO_radio; bool kt_ok = alsif(ui-IN_jadk)Button-isChccked() (IOqdio = T;ioi_ok = ttuc;)eke OUr_radioButmi
37、sChcddO)I0_iadio = ,0;k_ok = truintrct= QMessageBox:xjue$tion(this,QueryQMcssagdBoxzwaminKthiSjNochoice,Please select onel);QMcssagdBoxzwaminKthiSjNochoice,Please select onel);QMcssagdBoxzwaminKthiSjNochoice,Please select onel);failed,Do you want to create a new employee record?”,QMcssagcBoxzYes | Q
38、14essageBoxzNo,QMessageBox:Yes);遮ret = QMcssBox:Ycs) sqiquerj.ptepareCTNSERT INTO|TYXDBttnxlanccJ.dbo.PERSON(PERSONJPASSWORDDVALUESQSqlQucrysqJqucry;sqkjuerr.prqjarefINSERT INTOTYX_DB_Attendance.网.ATTENDANCm(irq,PERSVALUESONJgOtnjUOTIMq)”(:PERSCgASSWORD);(JDPERSON(JDPERSONPERSONPERSONsqlqueiy.bindVa
39、he(:PERSONJpersonNum叫;容 luupoppmasxsuuQIWUEPUanv p?oafcH InoshhJ -L +nFPZOSJOO- lasH EFfclszaz.2._UQgllmQJxajJSl.cafrT fqKA.XJOpulgppe.ADnblbs 二 INOSaados ZOSHHaJP onvLinoNI1?V ImolNIrp onv iH ILnolMOPQz CHZOSHHJdHHHH-铝 &ZQZ.S._UQS159C wo套-fawnmJ.IHHLIr d.p OZOSHadJ.P IDmHeaMd.sdrn :XUPJPOAU.S 基园重H、
40、 -Qaou.Gnbfbs fnqumNUOSWPAPOPP. 玄Aaun t awmuanmuml t SKrTisnlE a DUKHXX.AldnbrbsLn IhlnojChvhaJJHSm-Rv!SIH3NvaNaLLVH0qp】tupuaurfflGnxAIJ )(;xupndn Ae3Q9AAimil2A foaaJqpJ.0aqBA.XJ3nbs u VSJBS foou!IJOa.(0onpJA.XBnblbs n UmpIdnxalrxjanbjbs 背 VAJanblbs f(uosras9npuyqpprABnblbsmcEUOSJOSj 3ppnps2upmmuo.【oqpH8urpuapv