学生考勤管理系统总结 97页

  • 279.50 KB
  • 2022-05-17 13:06:07 发布

学生考勤管理系统总结

  • 97页
  • 当前文档由用户上传发布,收益归属用户
  1. 1、本文档共5页,可阅读全部内容。
  2. 2、本文档内容版权归属内容提供方,所产生的收益全部归内容提供方所有。如果您对本文有版权争议,可选择认领,认领后既往收益都归您。
  3. 3、本文档由用户上传,本站不保证质量和数量令人满意,可能有诸多瑕疵,付费之前,请仔细先通过免费阅读内容等途径辨别内容交易风险。如存在严重挂羊头卖狗肉之情形,可联系本站下载客服投诉处理。
  4. 文档侵权举报电话:19940600175。
学生考勤管理系统总结篇一:学生考勤管理系统学生考勤管理系统可行性研究报告作者:日期: 学生考勤管理系统总结篇一:学生考勤管理系统学生考勤管理系统可行性研究报告作者:日期: 目录1项目背景。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。.22任务概述。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。.22.1项目目标。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。..22.2项目范围。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。..32.3初步想法。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。..33对现有系统的分析。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。33.1处理流程和数据流程。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。43.2局限性。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。54所建议的系统。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。..64.1对所建议系统的说明。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。64.2处理流程和数据流程。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。64.3改进之处。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。..84.4可行性分析。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。.94.4.1经济可行性。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。.94.4.2技术可行性。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。..94.4.3运行可行性。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。.94.4.4法律可行性。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。.95结论。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。..9 1项目背景目前国内高校中为保证出勤率普遍存在上课,开会,出早操等活动点名的情况,而且大部分是靠人工操作来实现,费时又费力。该项目针对这些活动考勤情况的运行状态进行分析和总结利用网络技术代替人工记录学生出勤情况,减少了考勤部门在人力物力方面的开资,并方便使用者和学生随时查看,体现了学生考勤的公平性与公开性。使用者为学校学生考勤管理中心工作人员,如各班班主任,各任课教师、各学院辅导员、各学院领导、各位学生本人及部分学校领导。该软件系统联入本校内部局域网,与其他与学生管理系统相关的系统联系,统一管理学生的考勤状况,使学校整体协调性更高;此外,各学院和各部门也可以通过共享系统信息,以更好地提高管理效果,为学校的教学活动带来更多的方便。2任务概述该系统主要功能模块为学生考勤管理中心信息管理、班主任对学生考勤信息的管理、任课教师对学生考勤信息的管理、辅导员对学生考勤信息的管理和学生对自己考勤信息的查询。系统能够使查询学生考勤信息变得更为轻易,并使这些信息更为一目了然。学生在登陆系统时,需输入学生的学号、姓名,其他人员需输入验证码登录。只有通过验证的身份才能进入系统进行相关的操作。系统间信息的传递也需要进行安全设置,以防止学生的考勤信息被恶意篡改。2.1项目目标学生考勤管理中心的系统目标:建立一个能灵敏、高效、及时,全面提高学生考勤管理的集成系统,辅助管理决策者及时、准确地做出决策。(1)实现学生考勤缺席情况的全面计算机处理,提高学校学生信息管理中心的工作效率和工作质量。(2)及时提供学生考勤情况的统计信息,提高管理水平。(3)与学生共享信息,使学生能随时查看自己的缺勤情况。 (4)为决策者提供更有效的信息,辅助其做出正确的决策,从而提高学校的运行状况。(5)自动更新、统计数据的改进2.2项目范围考勤信息记录了学生的缺课情况,它包括:缺课日期、第几节课、课程名称、学生姓名、学号、缺课类型(迟到、早退、请假及旷课)。试设计考勤管理系统,使之能提供以下功能:录入学生的缺课记录,修改学生的缺课记录,查询缺课情况,统计一段时间内(可以是一天或一个星期)旷课情况。除了要实现上述的基本功能之外,本系统还应该在细节上下工夫,优化了界面。另外还注意到保密安全性,使得信息在能公开的同时还能保证不被篡改。学生考勤管理系统有广大的用户群,这其中有老师、有教务处主任、有公司管理人员,也可以供给一般用户使用。同时该系统还支持在线请假功能,方便了学生和辅导员。总之该系统可以满足用户需求,实现对其管理的人员的考勤工作2.3初步想法学生考勤管理系统用于记录学生的缺课情况,它包括:缺课日期、第几节课、课程名称、学生姓名、学号、缺课类型(迟到、早退、请假及旷课)。优化界面使学生使用更加便捷,在保证信息共享的同时又注重了信息的安全性而不被篡改。该系统除了用于学生课堂的考勤,还可用于学生出早操情况的考核,开会出勤情况的考核等。而且可以进一步开发,与教务处学生成绩数据库相连接,将考勤结果作为平时成绩或期末成绩及评优的参考。另外该系统还可作为请假系统代替传统写请假条请假的问题。在安全方面,登陆系统时,需验证身份和密码,只有通过验证的身份才能进入系统进行相关的操作。系统间信息的传递也需要进行安全设置,以防止学生的考勤信息被恶意篡改。3对现有系统的分析目前高校学生上课考勤管理都是以任课老师上课点名,记录学生上课情况。对于请假需要通过向辅导员递交请假条并获得同意方能生效。这种模式在目前高校管理中暴露了不可避免的弊端:一、学生对自己整个学期的上课出勤情况没有整体的统计信息 二、班主任及辅导员对本班学生整个学期的上课出勤情况不易查看;三、学生请假不方便,如:学生生病或有其他急事需请假,必须找辅导员批假条,而辅导员事情比较多不可能经常坐在办公室里等着;四、在这种方式下,由于学生考勤信息需要多次登记、反复输入,因而出错率较高,效率也低下。五、各学院与学生考勤管理中心各自记录所有学生的考勤情况,对于各考勤表,考勤管理员要反复的执行登记、核对、统计,稍不注意就出错,对于错误的改正,更是麻烦。浪费人力并且效率低。六、数据不能共享,无法互相利用,互相参照,导致大量数据冗余。七、难避免考勤中的弄虚作假现象。在这种情况下,学生考勤管理中心只能一次又一次地扩大员工队伍,期望借此提高效率。但是事实上,工作效率不但没有改善,工资支出却年年增高,增加了学校的经济支出。在此情况下,开发一个新的、高效的、更加灵活方便、能实时记录学生考勤信息的学生考勤管理系统迫在眉睫。3.1处理流程和数据流程人工的考勤系统主要包括请假系统,考勤系统,管理中心,主要供学生,辅导员,任课老师,班主任所使用。如下为系统流程图:人工学生考勤系统请假系统考勤系统管理中心 请假条学生请假辅导员老师审批不同意请假成功同意请假失败在请假系统中,学生想要请假需要向辅导员老师写请假条并说明原因,获得辅导员的同意才能请假成功,否则失败。而学生的请假情况记录在请假条的存根上,在向任课老师请假时也需自己或请同学向老师出示请假条并说明原因,由任课老师在学生名单上记录为“请假”。辅导员、任课老师、学生只有通过查询请假条的存根或考勤表才可知道请假情况。请假任课老师学生名单出勤记录旷课学生辅导员考勤表查看任课老师3.2局限性该系统会浪费很多的时间而且会很麻烦,当学生需要请假时必须找到辅导员写请假条才行,另外课堂上由于是由任课老师通过点名的方式考勤所以会造成混乱不清更问题 。4所建议的系统所建议的系统将考勤的软件操作平台联入本校内部局域网的所有计算机,以及手持数据终端。与其他与学生管理系统相关的系统联系,统一管理学生的考勤状况,使学校整体协调性更高;此外,各学院和各部门也可以通过共享系统信息,以更好地提高管理效果,为学校的教学活动带来更多的方便。这样将完全代替人工系统以达到省时、省力、公平的目的。4.1对所建议系统的说明该系统主要利用计算机系统平台通过数据共享以取代人工系统在浪费时间和人力物力方面的问题。学生考勤管理系统可以具体提供以下功能1).录入学生的缺课记录:从键盘输入数据,输入格式为:缺课日期第几节课课程名称学生姓名学生学号缺课类型每行一条纪录。如:2017-06-023-4中国近代史纲要李晓明1010XXXX迟到2).修改某个学生的缺课记录:可以对缺课纪录的任意部分进行修改,然后显示一下修改后的纪录。3).查询某个学生的缺课情况:查询结果按照日期升序排序,同一天或一周内按照所缺课程的时间升序排序。4).统计某段时间内(一天或一周),旷课学生姓名及旷课节数,查询结果先按旷课节数降序排序,旷课节数相同的学生按姓名升序排序;5).统计某段时间内,有学生旷课的课程及旷课人次,按旷课人次由多到少排序,旷课人次相同的课程按课程名称升序排序;6).系统以菜单方式工作。4.2处理流程和数据流程学生考勤管理系统学生辅导员任课老师院系领导学校领导管理人员 建议的学生考勤管理系统可以供学生辅导员,任课老师,各级领导,管理人员登录观看,保证了数据的共享和公平性。开始用户登录学生班主任任课老师各级领导管理人员在线签到或请假查看考勤信息审批请假查看考勤信息提交考勤信息查看考勤信息审批请假查看考勤信息管理考勤信息退出系统结束建议的学生考勤管理系统包括录入学生的缺课信息、修改某学生的缺课信息、查询某学生的缺课信息、统计缺课信息及人次等:学生考勤管理系统录入学生的缺课信息修改某学生的缺课信息查询某学生的缺课信息统计某段时间内旷课学生姓名学号及缺课节数统计某时间内学生旷课的课程及旷课人次录课的姓程缺型入学学名名课缺生号课及类修改学生的缺课日期,节数课程名及缺课类型查询学生的缺课日期节数,课程名及缺课类型按显课姓旷数时示学名课间旷生及节按时升序示有生旷的课及旷人次间显学课程课 以下是该系统的在线请假功能的独立流程图开始用户登录在线请假查看考勤信息退出系统审批请假学生查看考勤信辅导员息结束4.3改进之处(1)实现了学生考勤信息的全面计算机处理,提高了学生考勤管理中心的工作效率和工作质量。(2)能够及时登记学生的考勤情况,提高了管理水平。(3)能够与学生共享信息,满足学生对各项信息处理的准确性、一致性、时效性和灵敏性的要求。(4)能够为决策者提供更加有效的信息,辅助其做出正确的决策,从而提高了学校的运行情况。(5)学生请假、辅导员批假都在网络上进行。(6)对班主任、任课教师、辅导员、考勤管理中心及学生的权限都进行了详细的设计。(7)规定了班主任、任课教师及辅导员对信息考勤信息的更改时间,超过了其相应的时间范围不能再对学生的考勤信息进行任何更改,只能进行查询操作。 4.4可行性分析该系统的建立可以取代传统的人工系统,简单便捷、方便有效。其优点将在以下几方面体现出:4.4.1经济可行性学校在每一间教室几乎都安装了电脑并且都连上了学校的网络,因此不需要采购电脑的费用,只需要维护、维修及网费。4.4.2技术可行性使用高效的学生考勤管理系统将使整个管理流程更为清晰,并使运作效率大幅提升。由于只需要录入员手工整理和通知一次,其余通过信息系统自动流动,信息将更为通畅。安全性方面,由于只在本校内部使用,有防火墙的保护,安全性很高。4.4.3运行可行性在系统运行初期,需要对学校工作人员进行培训,但不需要培训费。除了维护需要专员负责外,其他部分都易于操作,不会产生任何困难。4.4.4法律可行性本系统完全自主开发,不会与任何组织或个人产生任何法律上的冲突。5结论本系统能够取代传统的人工管理系统为代课老师上课节省了更多的时间和精力。而且在考勤信息的管理上带来效率上的提升,错误减少,管理方便,更加体现公平性等优点,同时支持在线请假的功能为辅导员的工作带来便捷也方便了 同学,且在实施上具有相当可行性,故应立即开始实施。 篇二:学生考勤管理系统CDIO一级项目个人总结报告项目名称专业班级姓学名号校园一卡通设计与集成(3)计算机*****班*****************指导教师二○一四年1月4日计算机科学与技 术系考勤管理系统一、系统分析与设计目的1、目的:(1)熟练掌握编程所需相关语言的基本知识和技能;(2)基本掌握面向对象程序设计的基本思路和方法;(3)能够利用所学的基本知识和技能,解决简单的面向对象程序设计问题。2、基本要求:(1)要求利用面向对象的方法以及C++的编程思想来完成系统的设计;(2)要求在设计的过程中,建立清晰的类层次;(3)在系统中至少要定义四个类,每个类中要有各自的属性和方法;(4)在系统的设计中,至少要用到面向对象的一种机制。3、创新要求:在基本要求达到后,可进行创新设计,如根据查找结果进行修改的功能。二、系统需求分析1、介绍考勤信息记录了学生的缺课情况,它包括:缺课日期、第几节课(连续用begin-end的形式表示)、课程名称(课程名称中不会出现空格)、学生姓名、缺课类型(迟到、早退、请假及旷课)。试设计考勤管理系统,使之能提供以下功能:1).录入学生的缺课记录:从键盘输入数据(提示:为避免重复从键盘输入数据,测试时可将数据存储在文件中,利用输入重定向功能读入),输入格式为: 缺课日期第几节课课程名称学生姓名缺课类型每行一条纪录。2017-04-292-4中国近现代文学史李云龙迟到2017-04-282-4大学生社交礼仪马志鹏旷课2).修改某个学生的缺课记录:可以对缺课纪录的任意部分进行修改,然后显示一下修改后的纪录。3).查询某个学生的缺课情况:查询结果按照日期升序排序,同一天内按照所缺课程的时间升序排序。4).统计某段时间内(以天为单位),旷课学生姓名及旷课节数,查询结果先按旷课节数降序排序,旷课节数相同的学生按姓名升序排序;5).统计某段时间内,有学生旷课的课程及旷课人次,按旷课人次由多到少排序,旷课人次相同的课程按课程名称升序排序;6).系统以菜单方式工作。(所谓菜单指用户可以自由选择所要执行的功能。学生可以通过以上功能录入信息、修改信息、查询信息、整理统计出所要了解的信息,除了要实现上述的基本功能之外,本系统还应该在细节上下工夫,使用户使用方便,在使用的过程中保持一个愉快的心情。学生考勤管理系统有广大的用户群,这其中有老师、有教务处主任、有公司管理人员,也可以供给一般用户使用。总之该系统可以满足用户需求,实现对其管理的人员的考勤工作。三、总体设计学生考勤管理系统包含五个大的功能,分别是:录入学生缺课信息、修改学生缺课信息、查询某个学生的缺课情况、统计某段时间内(以天为单位),旷课学生姓名及旷课节数和统计某段时间内,有学生旷课的课程及旷课人次。学生的缺课信息主要包含缺课日期,第几节课、课程名称,学生姓名,缺课类型。在录入学生缺课信息时根据系统提示逐一输入。每输入完一条信息,系统会提示是否继续输入,用户可以选择继续或返回主菜单。在修改学生缺课信息时,用户首先输入要修改的学生姓名,系统会检索如果系统中有该学生的相关信息则系统首先会提示用户修改该学生的那一部分信息,用户可自行选择。如果系统中没有该学生的相关信息,则系统会给相关提示,用户可以选择继续输入要修改的学生姓名或选择退出返回主菜单。在查询学生缺课信息时,用户先输入要查询的学生姓名,系统检索判断是否存在该学生的信息然后做出相应的提示。总之,用户可以方便的在系统提示下进行使用。学生考勤管理系统中功能模块图: 四、详细设计1、学生考勤管理系统中四个类的类层次图为: 图2学生考勤管理系统中中四个类的类层次图2、学生考勤管理系统中各功能模块的实现:图3学生考勤管理系统中菜单函数的功能图3、学生缺课信息录用功能模块:图4学生缺课信息录入的功能 4、修改某学生缺课信息功能的模块图图5学生考勤管理系统修改学生缺课信息功能图5、查询某学生缺课信息功能图:图6学生考勤管理系统查询学生缺课信息功能图 6、统计某段时间内旷课学生姓名及旷课节数功能模块:图7统计某段时间内旷课学生姓名及旷课节数功能图7、统计某段时间内,有学生旷课的课程及旷课人次功能模块图8统计某段时间内,有学生旷课的课程及旷课人次功能图 图9学生考勤管理系统中四个类的UML图五、系统调试程序编写完成后,我进行了程序调试。调试过程中,出现了以下问题:当录入学生缺课信息时,出现了无法退出录入函数的情况,主要原因是输入函数中while循环语句没有设置跳出循环的条件。除此之外,修改某学生缺课信息时,如果没有该学生的缺课信息,系统没有提示要用户没有该学生信息,也没有建议用户重新输入要修改的学生姓名。由此我发现了该系统修改学生缺课信息的不足。于是,我对修改函数进行了修改与完善。在该函数中,我设置了if语句用来判断系统中是否存有用户要修改的学生缺课信息。如果没有,则提示用户没有该学生的缺课信息,用户可以选择继续输入要修改的学生姓名或者退出修改环节,可以在循环语句中改变循环进行的条件从而终止循环。至于在修改后显示该学生的缺课信息,运行时发现系统并没有做到这一点,对源代码检查之后发现是修改函数中显示函数的调用出了点问题,显示函数的实参有误,应该把要修改缺课信息的学生所在的信息类对象作为实参,然后用显示函数的形参引用实参对象,通过对象调用信息类的成员函数,从而实现显示功能。至于该系统的查询功能的实现,在调试时发现还有欠缺,当随便输入一个学生姓名时,系统没有显示该学生的缺课信息,也没有提示系统没有找到该学生的有关信息,经过在查询函数while循环中加入一个if条件语句后,系统实现了提示用户的功能,如果系统中没有你要查询的学生缺课信息,系统将会提示用户,用户可以继续输入要查询的学生姓名也可以通过按系统设置的退出键选择退出查询环节。至于两个统计功能至今没有完善,主要是特定时间学生缺课次数和课程的缺课人次的统计问题尚待解决,现如今只完成了一两条学生缺课信息的统计。主要问题是特定时间这个前提条件对我造成了一定的障碍。对系统中存储的信息进行查找和统计运用对象指针比较方便,但我没有使用,也算有点遗憾。在调试过程中我出现的最严重的问题是函数形参引用对象数组,结果系统提示将近几十个错误,在我把函数形参改为对象数组后,错误一下减少了很多。还有比较突出的问题是整个程序不知哪掉了个}号系统会提示有错,但就不懂那专业术语啥意思。还有就是我以为派生类公有继承的基类的保护成员在派生类内为公有成员,可编译时才发现是不对的。通过认真调试,我发现我有了收获。六、结果分析这次的课设,我写的程序也没有什么独到之处,我觉得唯一可以从我的程序可以看出的是数组用得比较多,反正是没啥特色,不仅如此,还写得功能不全,实在是惭愧。现在在这里也只能说说它的不足之处了。类层次不够清晰,纵观整个程 序可以发现四个类之间的关系不甚恰当,我有这个感觉,但我不知如何改进。函数参数设定不够完美,整个程序中对指针的运用比较少。对于指针的巧妙运用把握得不够。还有就是容易missing,这都是些应该改掉的毛病。除此以外,我对于怎样用文件保存数据还没深入了解,但我将数据保存到文件后又因文件打不开而无法访问文件中的数据,对于动态链表,我不是很清晰,也就是说无法做到熟稔运用。在调试过程中我发现在主函数中把字符数组名name赋值给字符指针p即p=name;然后用coutp;语句可以输出字符数组里全部的内容,但利用函数返回指针值却不能做到这一点,在我思考一番后终于明白了,这与内存中的地址值有关。具体为什么我是解释不清了,在调用系统的显示功能时,如果在getname()函数前加一个*号输出的只是一个字符,不加反而能输出所有字符。getname()函数的返回值为指针类型,但前面说过利用函数返回指针类型的值并不能输出字符数组中所有的字符,为什么这里又可以呢?老天,这是为什么?我不知道这一知识,这也算我的程序的不足之处吧!对于两个统计函数的功能不全,我感到无能为力,我为了这两函数苦思了两天,硬是没凑合来。到后来,脑子里都乱了,运行时屏幕上尽是些乱七八糟的东西。老师帮我看看,看有没有什么简单的方法一下搞定它。结果不是很好,但过程够了就行。这也是自欺欺人的看法,让我再一次自责吧。七、总结这次的程序设计相对于上学期还是有了进步的。学生考勤管理系统要求至少要有四个类,在起初,对于定义哪四个类我是不清楚的,通过仔细的研读问题描叙终于在脑海里确定了这四个类。既然是学生考勤管理系统,那由学生缺课信息中的日期我想到了时间类,这是一个很简单的类。从系统的几大功能我又想到了系统的基础就是缺课学生的缺课信息,于是我又想到了一个信息类,还有两个类是根据两个统计功能想到的,在现在看来似乎有些不妥。通过这次的课程设计我明白了学习程序设计语言必须要勤做实验,通过实验总结经验。平时遇到的一些小问题一定要重视,越是基础的知识越要理解透彻。比如指针与数组方面的知识,一旦没有弄清楚,在设计程序时就会吃亏。这次的课设中,我遇到了很多的问题,有的通过思考或查看书本解决了,有的还留在脑子里,只有通过孜孜不倦的求索我们才会有进步,不懂得思考就不能真正的掌握一门知识。这次的实验给以了我警示,它让我明白我所掌握的知识还很欠缺,对于继承与派生这一章的知识,我以为自己勉强掌握了,这次实验后我发现我掌握得还不够。基类的保护成员公有继承到派生类,类外是否可以通过对象来访问呢,原先我认为是可以的,经过这次程序设计,我知道我错了。总之,我觉得做学问不应该马虎,对于所学一定要有深入的理解,这也是我这次课设得到的启示。 八、附录:源程序清单#includeiostream#includecstring#includewindows.husingnamespacestd;//时间类classtime{public:time(inty=0,intm=0,intd=0){year=y;month=m;day=d;}~time(){}protected:intyear,month,day;};//信息类classxinxi:publictime{public:xinxi(){tiaoshu++;}~xinxi(){tiaoshu--;}voidsetname(char*n){strcpy(name,n);}voidsettime(inty,intm,intd){year=y;month=m;day=d;}voidsetqklx(char*qk){strcpy(queke,qk);}voidsetjieci(char*jc){strcpy(jieci,jc);}voidsetkechen(char*kc){strcpy(kechen,kc);}char*getname(){char*n;n=name;returnn;}char*getqklx(){char*qk=queke;returnqk;}char*getjieci(){char*jc;jc=jieci;returnjc;}char*getkechen(){char*gk;gk=kechen;returngk;}int*gettime();private:charname[20];//姓名charjieci[3],kechen[10],queke[10];inttm[3];staticinttiaoshu;};intxinxi::tiaoshu=0;int*xinxi::gettime(){int*t; t=tm;tm[0]=year;tm[1]=month;tm[2]=day;returnt;}//缺课课程类classqkechen:publicxinxi{public:qkechen(){kcshu++;}~qkechen(){kcshu--;}intgetrc(xinxist1[],intn,intj);charqkn[20];//公有数据成员private:intrenci;staticintkcshu;//静态数据成员};intqkechen::kcshu=0;intqkechen::getrc(xinxist1[],intn,intj){renci=0;renci++;for(inti=0;ii++)if(*(st1[i+1].gettime()+1)==*(st1[j].gettime()+1)*(st1[i+1].gettime()+2)==*(st1[j].gettime()+2))if(strcmp(qkn,st1[i].getkechen())==0)renci++;returnrenci;}//缺课学生类classqstu:publicxinxi{public:qstu(){qst++;}~qstu(){qst--;}voidprint(xinxist1);intgetjs(xinxist1[],intn,intj);intsetjs(intjs=0){jieshu=js;}charqstn[20];private:intjieshu;staticintqst;//静态数据成员};intqstu::qst=0; //类的实现voidqstu::print(xinxist1){cout|缺课日期|第几节课|课程名称|缺课类型|endl;cout|*st1.gettime()|*(st1.gettime()+1)*(st1.gettime()+2)|st1.getjieci()|st1.getkechen()|st1.getqklx()|endl;}intqstu::getjs(xinxist1[],intn,intj){inti=0,js=0;xinximin;if(*(st1[j].getjieci()+2)!=)js=+2;elsejs++;for(i=0;ii++)if(*(st1[i+1].gettime()+1)==*(st1[j].gettime()+1)*(st1[i+1].gettime()+2)==*(st1[j]gettime()+2))if(strcmp(st1[i+1].getname(),qstn)==0){if(*(st1[i].getjieci()+2)!=)js=+2;elsejs++;}jieshu=js;returnjieshu;}//函数声明intshuru(xinxist1[]);voidchaxun(xinxist1[],qstuqt[]);voidxiugai(xinxist1[],intn);voidtongji1(xinxist1[],qstuqt1[]);voidtongji2(xinxist1[],qkechenqk1[]);voidcaidan();voidxiansi(xinxist1);voidsetqstn(xinxist1[],qstuqt1[],intn);voidsetqkn(xinxist1[],qkechenqk[],intn);//全局变量intg,k=1,b=1;intq=-1;charname[20],kechen[10],queke[10],jieci[3];inty,m,d;//主函数 intmain(){xinxitl[15];//定义15条信息类对象qstuqt[10];qkechenqk[6];intch;while(1){cout********欢迎进入学生考勤管理系统!*********endl;caidan();cout--------请选择菜单项:endl;cinch;switch(ch){case1:g=shuru(tl);break;case2:xiugai(tl,g);break;case3:chaxun(tl,qt);break;case4:tongji1(tl,qt);break;case5:tongji2(tl,qk);break;case6:exit(0);}}return0;}//菜单函数voidcaidan(){system(colorAcout*************************************************************endl;cout*学生考勤管理系统*endl;cout*************************************************************endl;cout1.-------------录入学生的缺课记录---------------------------*endl;cout2.-------------修改学生的缺课记录---------------------------*endl;cout3.-------------查询学生的缺课情况---------------------------*endl;cout4.--------统计某段时间内旷课学生姓名及旷课节数--------------*endl;cout5.--------统计某段时间内旷课的课程及旷课人次----------------*endl;cout6.----------------退出系统----------------------------------*endl;}//输入函数intshuru(xinxist1[]){chara;cout------输入开始!----endl;do{q++;cout请输入学生姓名endl;cinname;st1[q].setname(name); cout请输入课程名称endl;cinkechen;st1[q].setkechen(kechen);cout请输入缺课日期endl;cinymd;st1[q].settime(y,m,d);cout请输入缺课类型endl;cinqueke;st1[q].setqklx(queke);cout请输入缺课节次endl;cinjieci;st1[q].setjieci(jieci);cout是否还要继续输入:(y/n)endl;cina;}while(a==yreturnq+1;}//修改函数voidxiugai(xinxist1[],intn){intk=1,j=0,a[10];intflgh;inth;while(k==1){cout请输入你要修改缺课记录的学生姓名endl;cinname;flgh=0;for(inti=0;ii++)if(strcmp(name,st1[i].getname())==0)do{a[j]=i;cout1.修改日期2.修改节次3.修改课程名称4.修改缺课类型endl;cout请输入要选择的数值(1,2,3,4)endl;intb;cinb;if(b==1){cout请输入新日期endl;st1[i].settime(y,m,d);}elseif(b==2){cout请输入新节次endl;cinjieci;st1[i].setjieci(jieci);}elseif(b==3) {cout请输入新课程名称endl;cinkechen;st1[i].setkechen(kechen);}elseif(b==4){cout请输入新缺课类型endl;cinqueke;st1[i].setqklx(queke);}flgh=1;j++;}while(b1||bif(flgh==0){cout没有你要找的学生姓名,请重试要退出请按0endl;cink;}else{cout还要继续吗(1)退出请按0endl;cink;}}for(inti=0;ii++){h=a[i];xiansi(st1[h]);}}//查询函数voidchaxun(xinxist1[],qstuqt[]){charn=yintu[10];while(n==y){intj=0;cout输入你要查询的学生姓名:endl;cinname;inti=0;for(;ii++)if(strcmp(name,st1[i].getname())==0){u[j]=i;j++;}if(j==0){cout没有你所要的学生名字!//没有找到cout是否退出退出请按nn cinn;}for(inta=0;aa++){//只有一条信息if(j2){i=u[a];cout|缺课日期|第几节课|课程名称|缺课类型|endl;cout|*st1[i].gettime()|*(st1[i].gettime()+1)|*(st1[i].gettime()+2)|st1[i].getjieci()|st1[i].getkechen()|st1[i].getqklx()|endl;}//两条信息以上排序else{i=u[a];if(*(st1[i].gettime()+1)*(st1[i+1].gettime()+1))qt[i].print(st1[i]);elseif(*(st1[i].gettime()+1)==*(st1[i+1].gettime()+1)*(st1[i].gettime()+2)*(st1[i+1].gettime()+2))qt[i].print(st1[i]);elseif(*(st1[i].gettime()+1)==*(st1[i+1].gettime()+1)*(st1[i].gettime()+2)==*(st1[i+1].gettime()+2))if(strcmp(st1[i].getjieci(),st1[i+1].getjieci())==-1)qt[i].print(st1[i]);}cout是否继续查询(y/n)继续请按y退出按nendl;cinn;}}}//统计某段时间内旷课学生姓名及旷课节数voidtongji1(xinxist1[],qstuqt1[]){intd1=0,js=0;xinximin;if(g==0)cout没有你要统计的学生信息请返回菜单录入学生缺课信息endl;elseif(g==1){cout姓名:st1[0].getname()endl;if(*(st1[0].getjieci()+2)!=)js=+2;elsejs++; cout节数:jsendl;}else//信息按时间排序{inti=0;for(;i(g-1);i++){if(*(st1[i].gettime()+1)*(st1[i+1].gettime()+1)){min=st1[i];st1[i]=st1[i+1];st1[i+1]=st1[i];}elseif(*(st1[i].gettime()+1)==*(st1[i+1].gettime()+1)*(st1[i].gettime()+2)*(st1[i+1].gettime()+2)){min=st1[i];st1[i]=st1[i+1];st1[i+1]=st1[i];}elseif(*(st1[i].gettime()+1)==*(st1[i+1].gettime()+1)*(st1[i].gettime()+2)==*(st1[i+1].gettime()+2))d1++;}for(intj=0;j(g-d1);j++){cout*st1[j].gettime()*(st1[j].gettime()+1)*(st1[j].gettime()+2)endl;for(i=0;ii++){setqstn(st1,qt1,g);cout姓名:qt1[i].qstnendl;cout节数:qt1[i].getjs(st1,g,i)endl;}}}}//统计某段时间内旷课的课程及旷课人次voidtongji2(xinxist1[],qkechenqk1[]){intd1=0,rc=0;xinximin;if(g==0)cout没有你要统计的学生信息请返回菜单录入学生缺课信息endl;elseif(g==1){cout课程名:st1[0].getkechen()endl;rc++;cout人数:rcendl;}else{inti=0;for(;ii++) {if(*(st1[i].gettime()+1)*(st1[i+1].gettime()+1)){min=st1[i];st1[i]=st1[i+1];st1[i+1]=st1[i];}elseif(*(st1[i].gettime()+1)==*(st1[i+1].gettime()+1)*(st1[i].gettime()+2)*(st1[i+1].gettime()+2)){min=st1[i];st1[i]=st1[i+1];st1[i+1]=st1[i];}elseif(*(st1[i].gettime()+1)==*(st1[i+1].gettime()+1)*(st1[i].gettime()+2)==*(st1[i+1].gettime()+2))d1++;}for(intj=0;j(g-d1);j++){cout*st1[j].gettime()*(st1[j].gettime()+1)*(st1[j].gettime()+2)endl;for(i=0;ii++){setqkn(st1,qk1,g);cout课程名:qk1[i].qknendl;cout人数:qk1[i].getrc(st1,g,i)endl;}}}}//显示函数voidxiansi(xinxist1){cout|缺课日期|第几节课|课程名称|学生姓名|缺课类型|endl;cout|*(st1.gettime())|*(st1.gettime()+1)*(st1.gettime()+2)|st1.getjieci()|st1.getkechen()|st1.getname()|st1.getqklx()|endl;}//设置缺课学生名voidsetqstn(xinxist1[],qstuqt1[],intn){inti=0;for(;ii++){if(i==0)strcpy(qt1[0].qstn,st1[i].getname());elseif(strcmp(st1[i].getname(),st1[i+1].getname())!=0){strcpy(qt1[i].qstn,st1[i].getname());k++;}}} //设置有缺课学生的课程名voidsetqkn(xinxist1[],qkechenqk[],intn){inti=0;for(;ii++){if(i==0)strcpy(qk[0].qkn,st1[i].getkechen());elseif(strcmp(st1[i].getkechen(),st1[i+1].getkechen())!=0){strcpy(qk[i].qkn,st1[i+1].getkechen());b++;}} 篇三:学生考勤管理系统一、设计内容与设计要求1.设计内容:学生考勤管理系统1、问题描述学生信息包括:学号、姓名、性别、年龄、班级等信息。考勤信息包括:缺课日期、第几节课、课程名称、学生姓名、缺课类型(迟到、早退、请假和旷课)。2、功能要求(1)添加功能:程序能够添加学生的记录和缺课记录,提供选择界面供用户选择所要添加的类别。添加学生记录时,要求学号要唯一,如果添加了重复学号的记录时,则提示数据添加重复并取消添加。(2)查询功能:可根据学号、姓名等信息对已添加的学生记录进行查询,如果未找到,给出相应的提示信息,如果找到,则显示相应的记录信息。还可以按课程名、学生姓名对缺课记录进行查询。(3)显示功能:可显示当前系统中所有学生的记录和缺课记录,每条记录占据一行。(4)编辑功能:可根据查询结果对相应的记录进行修改,修改时注意学号的唯一性。(5)删除功能:主要实现对已添加的学生记录进行删除。如果当前系统中没有相应的记录,则提示“记录为空!”并返回操作。(6)统计功能:能根据多种参数进行统计。能按课程名统计出学生旷课的信息、还可以按姓名统计出任一学生的旷课情况。需要排序。(7)保存功能:可将当前系统中各类记录存入文件中,存入方式任意。(8)读取功能:可将保存在文件中的信息读入到当前系统中,供用户进行使用。目录一、需求分析。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。61.系统设计目的与意义。。。。。。。。。。。。。。。。。。。。。。。。。。。..62.系统功能需求(系统流程图)。。。。。。。。。。。。。。。。。。。。。。.63.系统功能流程图。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。.74.输入输出的要求。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。.7二、总体分析。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。71.系统功能分析。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。82.系统功能结构图。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。.8 三、详细设计。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。91.类设计:。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。..11四、界面设计与各功能模块的实现。。。。。。。。。。。。。。。。。。。。。。.121 1.界面设计。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。12五、系统调试。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。.141.首页进入学籍管理系统主菜单。。。。。。。。。。。。。。。。。。。。。..142录入学生信息缺课界面:。。。。。。。。。。。。。。。。。。。。。。。。..153.显示学生信息缺课界面。。。。。。。。。。。。。。。。。。。。。。。。。..164.查找学生信息界面。。。。。。。。。。。。。。。。。。。。。。。。。。。。.175.删除学生信息界面。。。。。。。。。。。。。。。。。。。。。。。。。。。。.186.修改学生信息。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。187.统计学生信息:。。。。。。。。。。。。。。。。。。。。。。。。。。。。。..19六、使用说明及心得体会。。。。。。。。。。。。。。。。。。。。。。。。。。.20七、附件。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。20一、需求分析1.系统功能流程 图2主程序初始化程序菜单程序录入显示查找删除修改统计保存退出3.输入输出的要求1.输入的要求:通过主函数体调用其他函数应用系统主控界面包括学生信息录入,查找等功能模块。学生信息录入功能完成学生信息和缺课信息的输入。记录查询功能可以对数据各分类的记录进行查询。2.输出的要求:1)能够按编号、姓名对学生的信息进行检索并将检索结果显示在屏幕上。2)可以统计全部学生缺课类型,及其缺课次数。3)如果检索不到相应的信息应提示用户。二、总体分析系统功能分析能够从屏幕上读取一个学生的信息和缺课信息并将信息存入到数据文件中。能够将指定的信息从文件中删除。能够按编号、姓名对学生的信息进行检索并将检索结果显示在屏幕上。可以统计全部学生缺课次数,及其缺课类型。要求有错误提示功能。如果检索不到相应的信息应提示用户。3 三、详细设计1.类设计:类:Person数据成员学号,姓名,性别,年龄,班级缺课类型,缺课次数,指针域doublenum;//学号charName[20];//姓名charsex;//性别doubleold;//年龄longdoubleG;//班级intDuty;//缺课类型(1-迟到,2-早退,3-请假,4-旷课)doubleSalary;//缺课次数Person*next;//指针域、成员函数Person()//基类构造{next=0;//指针域设置(转载自:.CDFDS.Com池锝范文网:学生考勤管理系统总结)为空}virtual~Person()//基类虚析构{}virtualvoidInput()=0;//从键盘输入数据virtualvoidInput(ifstreamifs)=0;//从文件输入数据virtualvoidOutput()=0;//向屏幕输出数据virtualvoidOutput(ofstreamofs)=0;//向文件输出数据virtualdoubleIning()=0;//计算次数friendclassCollege;类:Teacher(公共继承与Person类)数据成员:4 protected:intHours;//第几节课charB;//迟到日期charZ;//课程名称classschool成员函数:Tercher(){}voidInput()voidInput(ifstreamifs)voidOutput(ofstreamofs)doubleIning()迟到类:classAssistant:virtualpublicPerson数据成员:protected:intAllowance;intHours;//第几节课charB;//早退日期charZ;//课程名称成员函数:Assistant()voidInput()voidInput(ifstreamifs)voidOutput()voidOutput(ofstreamofs)doubleIning()请假类:classManager:virtualpublicPerson数据成员:protected:intAllowance;intHours;//第几节课charB;//请假日期charZ;//课程名 称5成员函数:Manager()voidInput()voidInput(ifstreamifs)voidOutput()voidOutput(ofstreamofs)doubleIning()旷课类:classTeacher_Assistant:publicTeacher,publicAssistant成员函数:Teacher_Assistant()voidInput()voidInput(ifstreamifs)voidOutput()voidOutput(ofstreamofs)doubleIning()学生类:classCollege数据成员private:Person*PL;voidClear();intCollege::Cfind(intID,Person**p1,Person**p2)成员函数:public:College();//构造~College();//析构voidAdd();//退出voidDelete();//删除voidModify();//修改voidPrint();//输出voidSave();//信息存盘6 voidLoad();//信息装入voidFind();//查找voidBuild();//导引voidStat();//统计四、界面设计与各功能模块的实现1.界面设计1.界面设计程序运行后会出现一个简捷的窗口,便于用户查询数据。2.功能模块实现设计通过主窗体调用其他窗体。应用系统主控界面包括学生信息录入,查找等功能模块。学生信息录入功能完成学生信息和成绩的输入。记录查询功能可以对数据各分类的记录进行查询。具体举例如下:1)输入函数:voidInput(){coutn学号:cinnum;coutn姓名:cinName;coutn性别:cinsex;coutn年龄:cinold;coutn班级:cinG;coutn第几节课:cinHours;Salary=Ining();voidschool::del(){student*p,*p2;intnum;cout请输入编号:cinnum;if(!find(p,num,^)){coutSORRY!找不到你要删除的内容!endl;7}2)删除函数 return;}(p-next)-output();p2=p-next;p-next=p2-next;deletep2;school::setkey(1);}2.类的派生之间的示意图PersonTercherAssitantMannagerTercher_Assitant五、系统调试1.首页进入学生考勤管理系统主菜单2录入学生信息界面:8 3.显示学生信息界面:4.修改学生信息六、使用说明及心得体会此次c++课程设计,在指导教师的精心教导下,我学会了如何用C++编写一个简单的应用程序。首先要对程序的设计要求有一个比较明确的认识,然后系统分析与系统设计,最后是代码设计与调试。程序实现上,设计了简单的查询界面,将各个功能集中出来按照程序编写原则,便于查询。七、附件源文件代码:#includefstream.h文件操作头文件#includestring.h字符串流classPerson//人员类(抽象类){protected:doublenum;//学号charName[20];//姓名charsex;//性别doubleold;//年龄9 longdoubleG;//班级intDuty;//缺课类型(1-迟到,2-早退,3-请假,4-旷课)doubleSalary;//缺课次数Person*next;//指针域public:Person()//基类构造{next=0;//指针域设置为空}virtual~Person()//基类虚析构{}virtualvoidInput()=0;//从键盘输入数据virtualvoidInput(ifstreamifs)=0;//从文件输入数据virtualvoidOutput()=0;//向屏幕输出数据virtualvoidOutput(ofstreamofs)=0;//向文件输出数据virtualdoubleIning()=0;//计算次数friendclassCollege;};classTeacher:virtualpublicPerson//迟到类{protected:intHours;//第几节课charB;//迟到日期charZ;//课程名称public:{Duty=1;Salary=800;}voidInput()//键盘补充输入其它数据{coutn学号:cinnum;coutn姓名:cinName;coutn性别:cinsex;coutn年龄:cinold;coutn班级:cinG;coutn第几节课:cinHours;Salary=Ining();}voidInput(ifstreamifs){ifsnumNamesexoldGDutyHoursSalary;}voidOutput(){coutnumtNametsextoldtGtDutytHourstSalarytendl;}voidOutput(ofstreamofs){ofsnumtNametsextoldtGtDutytHourstSalarytendl;}doubleIning(){if(Hours120)returnSalary+(Hours-120)*20;elsereturnSalary;}};classAssistant:virtualpublicPerson//早退{protected:intAllowance;10 intHours;//第几节课charB;//早退日期charZ;//课程名称public:Assistant(){Duty=2;Salary=650;Allowance=150;}voidInput(){coutn学号:cinnum;coutn姓名:cinName;coutn性别:cinsex;coutn年龄:cinold;coutn班级:cinG;coutn第几节课:cinHours;Salary=Ining();}voidInput(ifstreamifs){ifsnumNamesexoldGDutyHoursSalary;}voidOutput(){coutnumtNametsextoldtGtDutytHourstSalarytendl;}voidOutput(ofstreamofs){ofsnumtNametsextoldtGtDutytHourstSalarytendl;}doubleIning(){if(Salary70)returnSalary+Allowance+(Hours-70)*20;elsereturnSalary+Allowance;}};classManager:virtualpublicPerson//请假{protected:intAllowance;intHours;//第几节课charB;//请假日期charZ;//课程名称public:Manager(){Duty=3;Salary=750;Allowance=250;}voidInput(){coutn学号:cinnum;coutn姓名:cinName;coutn性别:cinsex;coutn年龄:cinold;coutn班级:cinG;coutn第几节课:cinHours;11 Salary=Ining();}voidInput(ifstreamifs){ifsnumNamesexoldGDutyHoursSalary;}voidOutput(){coutnumtNametsextoldtGtDutytHourstSalarytendl;}classCollege{private:Person*PL;voidClear();intCollege::Cfind(intID,Person**p1,Person**p2);public:College();//构造~College();//析构voidAdd();//退出voidDelete();//删除voidModify();//修改voidPrint();//输出voidSave();//信息存盘voidLoad();//信息装入voidFind();//查找voidBuild();//导引voidStat();//统计};College::College()//构造函数(创建1个头结点的链表){Person*p=newTeacher;PL=p;cout自动装入数据????????nBuild();}College::~College()//析构函数(仅保留1个头结点){Person*p=PL;while(p)//逐个删除结点,包括头结点{PL=p-next;deletep;p=PL;}PL=0;}voidCollege::Add()//增加{charc;do{coutn**增加**n//查找尾结点12 Person*p=PL;Teacher*pt;Assistant*pa;Manager*pm;Teacher_Assistant*pta;switch(ch){case1:pt=newTeacher;pt-Input();p-next=pt;break;case2:pa=newAssistant;pa-Input();p-next=pa;break;case3:pm=newManager;pm-Input();p-next=pm;break;case4:pta=newTeacher_Assistant;pta-Input();p-next=pta;break;default:return;}cout是否进行循环?y/nncinc;}while(c==y||c==YSave();}/查找voidCollege::Find(){doubleID;Person*p1;Person*p2;cout输入你要查询的编号:cinID;p1=PL-next;p2=PL;while(p1){if(p1-num==ID)break;//找到else{p2=p1;//继续查找p1=p1-next;}}if(!p1){cout找不到你所查询的人!!!n请确认你所查询的编号是否出错!!!nreturn;}else{coutn**出勤信息表**ncout学号姓名性别年龄班级缺课类型缺课次数n1 3p1-Output();}}//查找缺课结点(返回1-找到,0-未找到.结点指针由p1返回,p2为前看指针)intCollege::Cfind(intID,Person**p1,Person**p2){*p1=PL-next;*p2=PL;while(*p1){if((*p1)-num==ID)break;//找到else{*p2=*p1;//继续查找*p1=(*p1)-next;}return*p1?1:0;}voidCollege::Delete()//删除{coutn**删除**nintnum;Person*p1,*p2;cout编号:cinnum;if(!Cfind(num,p1,p2)){cout指定的人员没有找到!n}else{p2-next=p1-next;//连接deletep1;cout正确删除!n}Save();}voidCollege::Modify()//修改{coutn**修改**nintnum;Person*p1,*p2;cout编号:cinnum;if(!Cfind(num,p1,p2)){cout指定的人员没有找到!n} 14else{p1-Output();//输出原来的出勤信息(做提示)p1-Input();//输入新的出勤信息(更新)cout修改完成!n}Save();}voidCollege::Print()//输出出勤信息{coutn**出勤信息表**ncout学号姓名性别年龄班级缺课类型缺课次数nPerson*p=PL-next;if(!p){cout无出勤记录!nreturn;}while(p)//遍历链表,输出出勤信息{p-Output();p=p-next;}}voidCollege::Save()//出勤信息存盘?{ofstreamf(Person.dat,ios::out);//打开文件Person*p=PL-next;while(p){p-Output(f);p=p-next;}f.close();//关闭文件cout职工信息已经保存在Person.dat.n}voidCollege::Build()//出勤信息{charbuf[81];//临时空间intDuty;//人员类型Person*p2;//新建结点的指针longt;//读写位置Clear();ifstreamf(Person.dat,ios::in);Person*p=PL;//尾结点指针while(1)1 5{t=f.tellg();fbufbufDuty;if(f){switch(Duty){case1:p2=newTeacher;break;case2:p2=newAssistant;break;case3:p2=newManager;break;case4:p2=newTeacher_Assistant;break;default:f.close();return;}p-next=p2;p=p-next;f.seekg(t);p-Input(f);}elsebreak;f.close();}voidCollege::Load()//出勤信息录入{charah;intc;coutn**出勤信息录入**ndo{cout输入要录入的出勤人员个数:ncinc;for(inti=1;ii++){Person*p=PL;while(p-next)p=p-next;intch;cout输入出勤分类码[1-迟到,2-早退,3-请假,4-旷课]:cinch;Teacher*pt;Assistant*pa;Manager*pm;Teacher_Assistant*pta;switch(ch){case1:pt=newTeacher;pt-Input();p-next=pt;break;case2:pa=newAssistant;pa-Input(); 16p-next=pa;break;case3:pm=newManager;pm-Input();p-next=pm;break;case4:pta=newTeacher_Assistant;pta-Input();p-next=pta;break;default:return;}}Save();cout是否还要继续录入出勤信息??y/nncinah;}while(ah==Y||ah==y}voidCollege::Stat(){Person*p1;Person*p2;doubleSa=0;inta,b,i=0;doublec,d;cout选择你要统计的类别n[1-类别;2-次数;3-缺课总次数;]ncina;if(a==1){cout输入你要统计的类别:n[1-迟到,2-早退,3-请假,4-旷课]ncinb;p1=PL-next;p2=PL;while(p1){if(p1-Duty==b){i++;//找到p2=p1;//继续查找p1=p1-next;}else{p2=p1;//继续查找p1=p1-next;}17 }coutb类缺课次数是:iendl;}elseif(a==2){cout输入出勤下限:cinc;coutn输入出勤上限:cind;p1=PL-next;p2=PL;while(p1){if(p1-Salary=cp1-Salary=d){p1-Output();//找到p2=p1;//继续查找p1=p1-next;}else{p2=p1;//继续查找p1=p1-next;}elseif(a==3){Person*p=PL-next;while(p)//遍历链表{Sa=Sa+(p-Salary);p=p-next;}cout缺课总数是:Saendl;}elseif(a==4){Person*p=PL-next;while(p){i=i+1;p=p-next;}cout缺课次数是:iendl;cout统计完成!!!n}voidmain(){charch;Collegec;//定义大学对象do{ 18coutn☆☆学生考勤管理系统☆☆ncout1-添加ncout2-查询ncout3-编辑ncout4-删除ncout5-统计ncout6-读取ncout7-退出n请选择:ncinch;switch(ch){case1:c.Load();break;case2:c.Find();break;case3:c.Modify();break;case4:c.Delete();break;case5:c.Stat();break;case6:c.Print();break;case7:c.Add;break;}}while(ch!=7}19 篇四:学生考勤管理系统报告学生考勤管理系统信息科学与技术学院程序设计基础课程设计报告题目名称:学生姓名:学号:学生考勤管理系统喻思远2017508025计科11郭理专业班级:指导教师:2017年7月6 日学生考勤管理系统目录目录。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。..11.课程设计题目与要求。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。..21.1课题目的和要求。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。21.3课题意义。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。22总体设计。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。32.1功能模块设计。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。.32.2系统设计方案。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。..33详细设计。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。43.1数据结构设计。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。43.2主模块设计。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。.43.2.1建立学生缺课记录子模块。。。。。。。。。。。。。。。。。。。。。。。。。。。。..43.2.2修改学生缺课记录子模块。。。。。。。。。。。。。。。。。。。。。。。。。。。。..53.2.3修改学生缺课记录子模块。。。。。。。。。。。。。。。。。。。。。。。。。。。。..63.2.4查看单科旷课记录子模块。。。。。。。。。。。。。。。。。。。。。。。。。。。。..73.2.5查看学生旷课记录子模块。。。。。。。。。。。。。。。。。。。。。。。。。。。。..83.2.6载入学生旷课记录子模块。。。。。。。。。。。。。。。。。。。。。。。。。。。。..93.2.7储存学生旷课记录子模快。。。。。。。。。。。。。。。。。。。。。。。。。。。。104.运行结果。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。..124.1运行。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。.125.课程设计总结。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。16结束语。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。..16参考文献。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。..16附录:源代码。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。16-1- 学生考勤管理系统1.课程设计题目与要求1.1课题目的和要求设计目的:要求实现---“学生考勤管理程序”记录学生的缺课情况,它包括:缺课日期、第几节课、课程名称、学生姓名、缺课类型(迟到、早退、请假及旷课)。1.2设计要求:1.录入学生的缺课记录;2.修改某个学生的缺课记录;3.查询某个学生的缺课情况;4.统计某段时间内,某门课旷课学生姓名及旷课次数,按旷课次数由多到少排序;5.统计某段时间内,有学生旷课的课程及旷课人次,按旷课人次由多到少排序;6.系统以菜单方式工作。1.3课题意义程序实践是本科生重要教学环节之一。通过程序实践,强化学生的计算机应用技能,使学生验证、巩固和充实所学的理论知识,加深对相关内容的理解,拓宽知识面,培养学生的创新精神和实践能力学生考勤管理程序可以大大减缓学生考勤人员的工作量,方便了平时上课学生的出勤率的管理。-2 -学生考勤管理系统2总体设计2.1功能模块设计根据分析整个系统主要划分为7个功能模块,分别执行要求中的功能。数据管理中实现对学生的基本信息、课程的基本信息、学生缺课的查询、添加、删除和修改,以及具体缺课缺课内容,是迟到、早退、请假、旷课。查询管理通过根据学生姓名,课程姓名时间段儿等信息,查询单个学生的缺课记录,单科课的旷课记录,单个学生的旷课记录。功能模块图如图1所示。、学生考勤管理程序建立学生缺课记录图1功能模块图修改学生缺课记录查询学生缺课记录查看单科旷课记录查看学生旷课记录载入学生旷课记录储存学生旷课记录2.2系统设计方案此程序是过程性语言设计的。运用多种条件语句,主体采用的是链表指针。系统的设计采用了数组语句、选择语句和循环语句,在需要处理大量同类数据时,这样就使程序书写更加简洁。程序使用了布尔函数。选择语句多采用if多分支选择结构与switch语句。首先计算switch表达式,然后在caes子句中寻找值相等的常量表达式,并以此为入口符号,由此开始顺序执行。循环语句采用了for语句等、do-while语句,for语句用于已知循环次数的循环结构,括号中的三个量分别用来表示循环变量初值、循环终值和循环增量。do-while语句先循环后判断,Break语句在switch语句中,保证多分支情况的正确执行,在循环语句中,强制终止本层循环。保存和读取函数是典型的函数功能,一个程序是由若干个函数组成的,保存和读取函数是和其他函数互相调用的。-3- 学生考勤管理系统3详细设计3.1数据结构设计structxueke{charxueke_name[50];intpeople_num;};这是定义了一个xueke结构体,用来存放一个学科名及其相应的旷课人数;structstudent{charname[50];longtime;intlesson_time;charlesson_name[50];intchidao_num;intzaotui_num;intqingjia_num;intkuangke_num;structstudent*next;};这是定义了一个student的结构体,用来存放一个学生的考勤记录,其中有,字符数组name[50],lesson_name[50],分别存放学生名字,缺课课程名字;int型变量lesson_time,chidao_num,zaotui_num,qingjia_num,kuangke_num,分别来存放,缺课节次,迟到次数,早退次数,请假次数,旷课次数long型变量time,记录时间。3.2主模块设计3.2.1建立学生缺课记录子模块要建立的学生人数,学生基本信息(包括缺课时间、学生姓名、课程名称、节次、迟到次数、早退次数、请假次数、旷课次数)可用creat()函数如图1.-4- 学生考勤管理系统开始inti,b;structstudent*head,*p1,*p2;printf(请输入要建立资料的学生人数:scanf(%d,head=p2=NULL;p1=(structstudent*)malloc(LEN);输入第一个学生成绩head=p1;p2=p1;i=0;student_num++;iYN请输入第%d名学生信息:,i+1p2-next=p1;p2=p1;student_num++;i++p2-next=NULL结束图13.2.2修改学生缺课记录子模块根据要修改的学生姓名以及科目名称找到相应的信息,再选择要修改的项目进行单项修-5- 学生考勤管理系统开始charxiugai_name[50];charxiugai_xueke_name[50];intk;printf(请输入要修改的学生姓名与学科名称:scanf(%s%s,xiugai_name,xiugai_xueke_name);structstudent*p1,*p2;p2=(structstudent*)malloc(LEN);p1=head;p1=p1-next;strcmp(xiugai_name,p1name)!=0(p1next!=NULL)strcmp(xiugai_xueke_name,p1-lesson_name)!strcmp(xiugai_name,p1name)==0strcmp(xiugai_xueke_name,p1-lesson_name)==0显示修改菜单选择修改项目并完成修改结束改如图2图23.2.3修改学生缺课记录子模块根据人名可以查出该学生的所有缺课记录如图3-6- 学生考勤管理系统开始inti=0;charchaxun_name[50];structstudent*p;p=head;printf(请输入要查询的人名:scanf(%s,chaxun_name);istudent_numi++strcmp(chaxun_name,p-name)==0输出p所指向的结构体数据结束图33.2.4查看单科旷课记录子模块根据学科名称和时间范围查出所有在该范围内旷课的学生以及次数如图4-7- 学生考勤管理系统开始structstudent*p1,*p2,*p3;charlesson[50];longlook_time1,look_time2;intxunhuan_num=0;p3=(structstudent*)malloc(LEN);p1=head;p2=p1-nextxunhuan_numstudent_numYYp2!=NULLNNNp2-kuangke_nump1kuangke_numYp1=head;p2=p1-next;xunhuan_num++;p1=p2;p2=p2-next;交换p1与p2指向数据printf(请输入要查看的学科名称:scanf(%s,lesson);printf(请输入要查看的时间范围scanf(%ld%ld,look_time1,look_time2);p1=head;p1!=NULLp1=p1-next;strcmp(lesson,p1lesson_name)==0look_time1=p1-timep1time=look_time2输出学生姓名和旷课次数结束图43.2.5查看学生旷课记录子模块根据要查询的学科名称及时间段查出在改时间段内该门课上旷课的人数如图5-8- 学生考勤管理系统开始intn,i,j,zhongjian;structstudent*p1;charzhongjian_name[50];longlook_time1,look_time2;printf(请输入第%d个学科名称:,i+1);scanf(%s,a[i].xueke_name);a[i].people_num=0;printf(请输入要查看的时间范围由小到大scanf(%ld%ld,look_time1,look_time2);p1=head;i=0;YinNNp1!=NULLlook_time1=p1-timep1-time=look_time2Yp1=head;i++;NNi=0p1=p1-next;Ya[i].people_num+=p1-kuangke_num;(strcmp(a[i].xueke_name,p1-lesson_name)==0Yjn-1Yin-1-jNNNa[i].people_numa[i+1].people_numYi++;j++;交换a[i]与a[i+1]的数据输出学生姓名与旷课人数结束图53.2.6载入学生旷课记录子模块可以载入实现储存在当前文件夹中txt文件中所储存的数据如图6-9- 学生考勤管理系统开始structstudent*p1=NULL,*p2=NULL,*head=NULL;structstudentstudent_ziliao[100];inti=0,n=0;打开文件!feof(fp1)将文件里的数据存入结构体数组通过结构体数组建立链表结束图63.2.7储存学生旷课记录子模快进入系统界面,顺序的完成各项操作,进行数据的输入,信息的保存调用相应的函数打开相应的地址,查询各项信息。如图7-10- 学生考勤管理系统开始structstudent*p1;p1=head;打开文件xueshengziliao.txtp1!=NULLYN将数据写入文件p1=p1-next;结束图7-11- 学生考勤管理系统4.运行结果4.1运行开始菜单图1开始菜单主菜单-12- 学生考勤管理系统图2主菜单1.建立学生缺课记录图2建立学生缺课记录2.修改学生缺课纪录3.图3修改学生缺课记录3.查询学生缺课记录-13- 学生考勤管理系统图4查询学生缺课记录4.查看单科旷课记录图5查看单科旷课记录5.查看学生旷课记录-14- 学生考勤管理系统图6查看学生旷课记录6.载入学生旷课记录图7载入学生旷课记录7.储存学生旷课记录-15- 学生考勤管理系统图8储存学生旷课记录5.课程设计总结课程设计顺利完成,题目所要求的功能也都一一实现,可以对学生的缺课信息进行添加,修改,删除以及查询的显示。不过这个程序还有些不够完善,例如不能往当前文件夹中的txt文件中添加记录。结束语整个系统的设计过程对于我来说算是个学习、探索的过程,通过实践和对比别人开发程序的过程。在整个设计过程中,出现过很多的问题,很多繁琐的东西都需要反复的修改,主要是前期工作不彻底,对系统的需求分析的要求认识不够清楚,使得在后边的工作中不得不经常反复去修改。使我体会到设置中每一步的重要性。所以在分析一个问题时,我们需要站在一个有远见的高度。通过此次设计,我不但对C++语言编程有了更深刻的认识,积累了使用软件工程的思想来开发软件的经验,更重要的是学会了在对待问题时应该考虑到哪些方面和怎么解决问题。虽然时间紧迫但我学会了很多,也感到自身知识的贫乏,希望在日后的努力中能做出更完善的系统。参考文献谭浩强.C++语言程序设计.清华大学出版社[1]求是科技.VisualC++6.0信息系统开发.人民邮电出版社[2]附录:源代码-16- 学生考勤管理系统#includecstdio#includeiostream#includemalloc.h#includecstring#includeiomanip#defineNULL0#defineguding10#defineLENsizeof(structstudent)usingnamespacestd;intstudent_num;FILE*fp1;structxueke{charxueke_name[50];intpeople_num;};structstudent{charname[50];longtime;intlesson_time;charlesson_name[50];intchidao_num;intzaotui_num;intqingjia_num;intkuangke_num;structstudent*next;};voidchaxun(structstudent*head){inti;charchaxun_name[50];cout请输入要查询的人名:cinchaxun_name;structstudent*p;if(head==NULL)cout联系人为空p=head;for(i=0;istudent_num;i++){if(strcmp(chaxun_name,p-name)==0){cout缺课时间:p-time学生姓名:p-name课程名称:p-lesson_name节次:p-lesson_timeendl迟到次数:p-chidao_num早退次数:p-zaotui_num请假次数:p-qingjia_num旷课次数:p-kuangke_numendl;}-17- 学生考勤管理系统p=p-next;}}structstudent*xiugai(structstudent*head){charxiugai_name[50];charxiugai_xueke_name[50];intk;cout请输入要修改的学生姓名与学科名称【格式:学生姓名(空格)学科名称】:cinxiugai_namexiugai_xueke_name;structstudent*p1,*p2;p2=(structstudent*)malloc(LEN);p1=head;if(head==NULL){cout没有学生信息nreturnhead;}while((strcmp(xiugai_name,p1-name)!=0||strcmp(xiugai_xueke_name,p1-lesson_name)!=0)(p1-next!=NULL))p1=p1-next;if(strcmp(xiugai_name,p1-name)==0strcmp(xiugai_xueke_name,p1-lesson_name)==0){cout====================================修改信息=================================ncout1-修改缺课时间ncout2-修改学生姓名ncout3-修改课程名称ncout4-修改第几节缺课ncout5-修改迟到次数ncout6-修改早退次数ncout7-修改请假次数ncout8-修改旷课次数nncout================================================================================ncink;-18 -学生考勤管理系统switch(k){case1:cout请输入新的缺课时间:cinp1-time;break;case2:cout请输入新的学生姓名:cinp1-name;break;case3:cout请输入新的课程名称:cinp1-lesson_name;break;case4:cout请输入新的缺课节次:cinp1-lesson_time;break;case5:cout请输入新的迟到次数:cinp1-chidao_num;break;case6:cout请输入新的早退次数:cinp1-zaotui_num;break;case7:cout请输入新的请假次数:cinp1-qingjia_num;break;case8:cout请输入新的旷课次数:cinp1-kuangke_num;break;}}returnhead;}structstudent*creat(){inti,b;structstudent*head,*p1,*p2;cout请输入要建立资料的学生人数:cinb;head=p2=NULL;p1=(structstudent*)malloc(LEN);-19 -学生考勤管理系统cout【输入格式:缺课时间(空格)学生姓名(空格)课程名称(空格)第几节(空格)迟到次数(空格)早退次数(空格)请假次数(空格)旷课次数】ncout请输入第1名学生信息:cinp1-timep1-namep1-lesson_namep1-lesson_timep1-chidao_nump1-zaotui_nump1-qingjia_nump1-kuangke_num;head=p1;p2=p1;student_num+=1;for(i=1;ii++){p1=(structstudent*)malloc(LEN);cout请输入第i+1名学生信息:cinp1-timep1-namep1-lesson_namep1-lesson_timep1-chidao_nump1-zaotui_nump1-qingjia_nump1-kuangke_num;p2-next=p1;p2=p1;student_num+=1;}p2-next=NULL;returnhead;}voidprint(structstudent*head){structstudent*p;p=head;if(p==NULL)cout没有学生信息nwhile(p!=NULL){cout缺课时间:p-time学生姓名:setw(10)p-name课程名称:p-lesson_name节次:p-lesson_timeendl迟到次数:p-chidao_num早退次数:p-zaotui_num请假次数:p-qingjia_num旷课次数:p-kuangke_numendl;p=p-next;}}structstudent*tongji_lesson(structstudent*head){structstudent*p1,*p2,*p3;charlesson[50];longlook_time1,look_time2;intxunhuan_num=0;p3=(structstudent*)malloc(LEN);if(head==NULL)-20 -学生考勤管理系统{cout没有学生信息return(head);}p1=head;p2=p1-next;while(xunhuan_numstudent_num){while(p2!=NULL){if(p2-kuangke_nump1-kuangke_num){p3-chidao_num=p2-chidao_num;p3-kuangke_num=p2-kuangke_num;p3-qingjia_num=p2-qingjia_num;p3-zaotui_num=p2-zaotui_num;p3-lesson_time=p2-lesson_time;p3-time=p2-time;strcpy(p3-lesson_name,p2-lesson_name);strcpy(p3-name,p2-name);p2-chidao_num=p1-chidao_num;p2-kuangke_num=p1-kuangke_num;p2-qingjia_num=p1-qingjia_num;p2-zaotui_num=p1-zaotui_num;p2-lesson_time=p1-lesson_time;p2-time=p1-time;strcpy(p2-lesson_name,p1-lesson_name);strcpy(p2-name,p1-name);p1-chidao_num=p3-chidao_num;p1-kuangke_num=p3-kuangke_num;p1-qingjia_num=p3-qingjia_num;p1-zaotui_num=p3-zaotui_num;p1-lesson_time=p3-lesson_time;p1-time=p3-time;strcpy(p1-lesson_name,p3-lesson_name);strcpy(p1-name,p3-name);}p1=p2;p2=p2-next;}p1=head;p2=p1-next;xunhuan_num++;}cout请输入要查看的学科名称:-21- 学生考勤管理系统cinlesson;cout请输入要查看的时间范围【输入格式:时间(空格)时间】cinlook_time1look_time2;p1=head;while(p1!=NULL){if(strcmp(lesson,p1-lesson_name)==0look_time1=p1-timep1-time=look_time2)cout学生姓名:p1-name旷课次数:p1-kuangke_numendl;p1=p1-next;}returnhead;}structstudent*tongji_student(structstudent*head){structxuekea[10];intn,i,j,zhongjian;structstudent*p1;charzhongjian_name[50];longlook_time1,look_time2;if(head==NULL){cout没有学生信息nreturnhead;}cout请输入一共的学科数:cinn;for(i=0;ii++){cout请输入第i+1个学科名称:cina[i].xueke_name;a[i].people_num=0;}cout请输入要查看的时间范围由小到大【输入格式:时间(空格)时间】cinlook_time1look_time2;p1=head;for(i=0;ii++){while(p1!=NULLlook_time1=p1-timep1-time=look_time2){if(a[i].xueke_name==p1-lesson_name)a[i].people_num+=p1-kuangke_num;p1=p1-next;}p1=head;}for(j=0;jj++)for(i=0;in-1-j;i++){if(a[i].people_numa[i+1].people_num){zhongjian=a[i+1].people_num;a[i+1].people_num=a[i].people_num;-22- 学生考勤管理系统a[i].people_num=zhongjian;strcpy(zhongjian_name,a[i+1].xueke_name);strcpy(a[i+1].xueke_name,a[i].xueke_name);strcpy(a[i].xueke_name,zhongjian_name);}elseif(a[i].people_num==a[i+1].people_numstrcmp(a[i].xueke_name,a[i+1].xueke_name)0){zhongjian=a[i+1].people_num;a[i+1].people_num=a[i].people_num;a[i].people_num=zhongjian;strcpy(zhongjian_name,a[i+1].xueke_name);strcpy(a[i+1].xueke_name,a[i].xueke_name);strcpy(a[i].xueke_name,zhongjian_name);}}for(i=0;ii++){cout学科名称:a[i].xueke_name旷课次数:a[i].people_numendl;returnhead;}returnhead;}structstudent*zairu(){structstudent*p1=NULL,*p2=NULL,*head=NULL;structstudentstudent_ziliao[100];inti=0,n=0;if((fp1=fopen(xueshengziliao.txt,rb+))==NULL){printf(cannotopenfilenreturn(head);}while(!feof(fp1)){if(fread(student_ziliao[i],LEN,1,fp1)!=1){if(feof(fp1)){fclose(fp1);break;}printf(filereaderrorn}i++;}n=i;student_num=n;p1=p2=(structstudent*)malloc(LEN);head=p1;for(i=0;ii++){p1-chidao_num=student_ziliao[i].chidao_num;p1-kuangke_num=student_ziliao[i].kuangke_num;strcpy(p1-lesson_name,student_ziliao[i].lesson_name);p1-lesson_time=student_ziliao[i].lesson_time;-23 -学生考勤管理系统strcpy(p1-name,student_ziliao[i].name);p1-qingjia_num=student_ziliao[i].qingjia_num;p1-time=student_ziliao[i].time;p1-zaotui_num=student_ziliao[i].zaotui_num;p2-next=p1;p2=p1;p1=(structstudent*)malloc(LEN);}p2-next=NULL;return(head);}voidchucun(structstudent*head){structstudent*p1;p1=head;fp1=fopen(xueshengziliao.txt,wb+while(p1!=NULL){fwrite(p1,LEN,1,fp1);p1=p1-next;}fclose(fp1);cout储存成功n}voidmain(){structstudent*head;inta,b,c;zhuye:cout$$$$$$$$$$$$$$$$$$$$$$欢迎使用学生考勤管理系统V1.0.0$$$$$$$$$$$$$$$$$$ncout1_进入管理nnncout2_查看系统相关信息nnncout$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$nnnnncina;if(a==1){do{cout********************************************************************************ncout1_建立学生缺课记录ncout2_修改学生缺课记录ncout3_查询学生缺课记录ncout4_查看单科旷课记录ncout5_查看学生旷课记录ncout6_载入学生旷课记录n-24- 学生考勤管理系统cout7_储存学生旷课记录ncout8_退出考勤管理程序ncout********************************************************************************ncinb;switch(b){case1:head=creat();print(head);break;case2:head=xiugai(head);print(head);break;case3:chaxun(head);break;case4:head=tongji_lesson(head);break;case5:head=tongji_student(head);break;case6:head=zairu();print(head);break;case7:chucun(head);break;}}while(b!=8);}else{cout******************************本系统版权归喻思远个人所有!***********************ncout******************************请联系我:tel:18799760125,QQ:1010582017***********ncout******************************返回主页请按1*************************************ncinc;if(c==1)gotozhuye;}-25- 学生考勤管理系统}-26- 篇五:数据库学生考勤管理系统设计报告课程设计说明书课程设计名称:数据库系统课程设计课程设计题目:学生考勤管理系统学院名称:信息工程学院专业:计算机科学与技术班级:100451学号:10045124姓名:邬荣飞评分:教师:胡建明付峥2017年1月8日由每位学生填写、由任教教师保存待查1 一、需求分析:用户是系统的最终使用者,根据分析,本系统应当包括学生、班主任、任课老师、院系领导、学校领导、系统管理员六类用户。由于没有做前台以及设置管理权限等,所以目前为止可以为这几类用户提供这方面的人查询需求。比如学生可以查看自己的个人信息并且进行一些修改,还可以查看自己所在班级的信息;班主任可以查看自己的信息、所带班级信息以及学生信息;授课老师可以查看自己教授的课程的信息以及所带班级信息;还有就是提供了一些请假信息查询、出勤情况查询以及一些相关规定产生的处理结果。通过这个数据库,不仅能妥善管理相关的学生信息,还能处理一些考勤方面的情况。更需要说明的是这里面还包含一些简单的选课系统雏形,如有需要的话,改善后还能当做选课系统进行使用。下面具体说说各个实体间的需求分析:1.学生用户需求描述:学生对本系统的主要需求是:在线请假以及查看在校期间所有的上课出勤信息。在线请假需求:学生请假的全过程当中,学生可以随时查看请假的详细进展情况。查看出勤信息需求:学生可以查看在校期间所有学期上课出勤的详细信息,如:查看“数据库系统”这门课程在整个学期请假、旷课多少次等信息。其它需求:查看本人的基本信息,如本人的所属的院系、年级、专业、班级、学号、姓名、性别等。2.任课老师用户需求描述:任课老师对系统的主要需求是:管理所教班级学生的上课出勤信息以 及2查看所教班级学生的上课出勤信息。管理学生上课出勤需求:随着时间的变化,自动列出还没有在网上公布的学生上课出勤信息,系统自动根据学生请假系统,决定学生上课出勤的最终结果。查看学生出勤信息需求:查看所教班级学生整个学期出勤情况。3.班主任用户需求描述导员对本系统的主要需求是:审批本班学生本学期的在线请假以及查看本班学生本学期所有课程的上课出勤信息。审批学生请假需求:本班学生本学期在线请假申请后,自动提示导员有等待审批的请假信息,导员针对请假申请信息进行学生请假审批。查看学生上课出勤信息需求:查看本班学生整个学期有关课程的出勤统计信息及详细信息。其它需求:查看本班学生的基本信息等。二、系统功能分析:1.功能需求描述根据各类用户的需求描述,系统应当具备请假系统、考勤管理系统、后台管理系统这三大主要功能。请假系统功能需求:通过班主任以及院系领导批准请假信息。请假最长时间不能超过1个月,特殊情况除外。考勤管理功能需求:任课老师通过考勤管理系统,对学生上课出勤信息进行公开。请假系统要借助班主任才能完成,考勤管理系统要借助请假系统、班级课表安排才能完成,然而每学年课表都在变化,班主任安排也有在变化,学生也在变化,因此必须要求后台管理系统能根据系统需求,动态的、准 确3的更新系统数据。2.系统功能划分根据系统用户的需求,将本系统按功能划分成三大功能模块:请假系统、考勤系统、后台管理模块,涉及到六大类用户:学生、任课教师、班主任、院系领导、学校领导、系统管理员。3.请假系统模块本模块的功能是在线请假的实现及管理,主要涉及三大类用户:学生、班主任及院系领导用户,学生通过此功能模块进行在线请假及查看请假记录信息;班主任在线审批学生请假及查看请假记录信息;院系领导在线审批学生长时间的请假及查看请假记录信息。4.考勤系统模块本模块的功能是学生考勤信息统计的实现、查看及管理,涉及六大类用户中的所有用户。学生在线查看自己所有学年的出勤信息;任课老师在线管理学生出勤信息;班主任、院系领导、学校领导查看不同的范围的学生出勤信息。4 三、系统结构设计1.学生考勤系统的E-R模型编号名称编号所属院系n聘请姓名学号n专业1属于所属学院专业名称m授课编号姓名课程号课程名课程性质性别所属院系n专业nn学生n考勤m教师编号原因1请假属于编号n姓名性别职称编号学院领导性别班级院系1所属专业班主任1管理n班级班主任姓名所属学院性别学院1开设1编号名称假条课程学号??5 2.数据字典设计名字:班级信息描述:每一个班级的具体信息定义:班级信息=班级编号+班3.数据库表的逻辑结构设计级名称+班主任编号名字:班主任信息描述:每一位班主任的具体信息定义:班主任信息=编号+姓名+性别名字:教师信息描述:每一位教师的具体信息定义:教师信息=编号+姓名+性别+所属院系名字:课程信息描述:每一门课程的具体信息定义:课程信息=课程编号+课程名+班级名称+教师编号名字:请假条信息描述:每一请假条的具体信息定义:请假条信息=请假编号+班级名称+学生学号+请假原因+请假天数+课程名称+备注名字:学生信息描述:每一位学生的具体信息定义:学生信息=学号+姓名+性别+院系+班级名字:学生上课出勤纪录表描述:每一位学生的出勤信息定义:学生信息=学号+表编号+考勤状态+课程名称6 3.数据库表的逻辑结构设计(1)学生表student数据类型可否为空键引用char(10)否主键varchar(30)否char(5)否char(10)否char(40)否列名学生学号学生姓名性别班级名称院系名称(2)教师表teacher数据类型可否为空char(10)否char(20)否char(5)否Char(10)否键引用主键列名任课老师编号任课老师姓名性别院系名称7 (3)班主任表classteacher数据类型可否为空键引用char(5)否主键char(20)否char(5)否列名班主任编号班主任姓名性别(4)学生上课出勤记录表kaoqin_record数据类型可否为空键引用列名char(10)否主键上课出勤编号char(10)char(10)char(10)否否否外键学生学号学生上课考勤状态课程名称8 (5)课程信息表course数据类型可否为空char(10)否char(20)char(10)Char(10)否否否键引用主键列名课程编号课程名称班级名称外键任课老师编号(6)班级表classes数据类型可否为空char(10)否char(20)Char(5)否否键引用主键列名班级编号班级名称外键班主任编号 9(7)请假信息表qingjia数据类型可否为空键引用Char(10)否主键char(10)否外键Char(10)否外键varchar(200)否char(13)否Char(10)否Nchar(20)否列名请假编号班级名称学生学号请假原因课程名称请假天数备注4.约束条件(举例一个)对性别的约束:([性别]=男OR[性别]=女)1 05.视图的创建:1.班主任带班情况代码:SELECTTOP1000[班主任姓名],[班级名称],[班级编号],[班主任编号]FROM[学生考勤管理系统改进版].[dbo].[班主任带班情况]2.教师授课情况代码:SELECTTOP1000[任课老师编号],[任课老师姓名],[课程编号],[课程名称],[班级名称]FROM[学生考勤管理系统改进版].[dbo].[教师教授班级情况]1 13.学生请假情况代码:SELECTTOP1000[学生学号],[学生姓名],[班级名称],[课程名称],[请假原因],[任课老师名称],[请假天数],[备注]FROM[学生考勤管理系统改进版].[dbo].[学生请假情况]12 6.触发器的建立(举例一个)触发器实现的效果是:当请假天数超过三天时,处理方案为重修;小于三天(含三天)时,补课。代码:ALTERtrigger[dbo].[请假处理]on[dbo].[请假信息表]afterinsert,updateasupdate请假信息表set请假信息表.备注=重修where请假天数3update请假信息表set请假信息表.备注=补课where请假天数413 触发效果截图:7.存储过程做了一个存储过程:教师授课缺勤情况代码:ALTERproc[dbo].[教师授课缺勤情况]@选定教师char(20)as14 select学生学号,任课老师名称from学生上课出勤记录表where@选定教师=任课老师名称and学生上课考勤状态=否执行存储过程执行结果出勤记录表1 58.数据库关系图:1.班级-班主任2.教师-课程信息1 63.学生-出勤-请假四:心得体会本次试验开始的时候一头雾水,不知从何下手,目标是作出前台,可实际上做起来才知道难度。不过现在做出来了,特别有成就感,一字一句都是我自己的想法。感受不好说,上面都是我的心血,都在上面了。不足之处当然还有,比如实现的查询有限,表和表之间的联系还不够,这些不是一点两点能够解决的;另外表的创建至关重要,以后自己得注意了。当然课设之后还回去不断完善,我喜欢上了数据库这东西。 17五.参考文献1.(王珊、萨师煊)《数据库系统概论》、、高等教育出版社、2017年5月第4版2.(钱雪忠、罗海池、陈国俊)、《数据库原理及技术》清华大学出版社、、2017年2月第一版3.(李红)《数据库原理与应用》、、高等教育出版社、2017年1月第1版4.(DusanPetkovic)《SQLServer初学者指南》、、清华大学出版社、翻译:数据库系统概论》、、高等教育出版社、2017年5月第4版2.(钱雪忠、罗海池、陈国俊)、《数据库原理及技术》清华大学出版社、、2017年2月第一版3.(李红)《数据库原理与应用》、、高等教育出版社、2017年1月第1版4.(DusanPetkovic)《SQLServer初学者指南》、、清华大学出版社、翻译》、、清华大学出版社18