学生考勤管理系统课程设计报告
学生考勤项目计划书

学生考勤项目计划书目标:通过建立一个全面的学生考勤系统,提高学生出勤率和管理效率,帮助学校更好地进行学生管理和教学工作。
项目背景:学生考勤是学校管理的一个重要环节,关系到学校教学秩序和学生学习效果。
目前,许多学校仍然采用传统的考勤方式,存在信息不及时、数据不准确、工作效率低等问题。
因此,建立一个现代化的学生考勤系统势在必行,以提高学校管理水平,促进教学质量的提高。
项目内容:1. 系统需求分析:调研学校现有的考勤管理情况,了解各个班级的具体需求,制定系统实施方案。
2. 系统设计与开发:根据需求分析,设计学生考勤系统的功能模块,开发相应的软件程序。
3. 硬件设备采购:购买考勤机、读卡器等硬件设备,与软件程序进行配套使用。
4. 系统测试与调试:对系统进行全面的测试,确保各功能模块的正常运行。
5. 系统上线运行:在学校各个班级推广使用学生考勤系统,进行相关培训,确保系统正常运行。
6. 系统维护与更新:定期对系统进行维护和更新,保证系统的稳定性和安全性。
项目计划:1. 系统需求分析阶段(1个月):- 调研学校各班级的考勤管理情况,了解需求- 制定系统实施方案2. 系统设计与开发阶段(3个月):- 设计学生考勤系统的功能模块- 开发软件程序3. 硬件设备采购阶段(2个星期):- 购买考勤机、读卡器等硬件设备4. 系统测试与调试阶段(1个月):- 对系统进行全面的测试- 确保各功能模块的正常运行5. 系统上线运行阶段(1个月):- 推广使用学生考勤系统- 进行相关培训6. 系统维护与更新阶段(长期):- 定期维护系统,确保系统的稳定性和安全性预算及资源分配:1. 系统设计与开发费用:10万人民币2. 硬件设备采购费用:5万人民币3. 系统测试与调试费用:3万人民币4. 系统上线运行费用:2万人民币5. 系统维护与更新费用:每年1万人民币项目风险管理:1. 技术风险:需求分析不清晰,影响系统设计与开发进度;2. 运行风险:系统上线后出现故障,影响正常使用;3. 维护更新风险:定期维护与更新不及时,导致系统安全性下降。
学生考勤管理系统可行性分析报告

学生考勤管理系统可行性分析报告一、引言学生考勤管理是一项重要的学校管理工作,旨在监督、管理学生的出勤情况。
传统的考勤管理方式往往依赖于人工记录,存在着工作量大、易出错、信息管理不便等问题。
为了提高学校考勤管理的效率和准确性,开发一套学生考勤管理系统成为了必要的措施。
本报告围绕学生考勤管理系统的可行性进行分析,旨在为系统的开发和实施提供参考意见。
二、背景分析随着信息技术的快速发展和普及,学校管理信息化已经成为教育领域的重要趋势,也是推动教育改革的重要手段。
学生考勤管理是学校管理中的重要环节,在保障学生出勤情况的同时,对于学生学习纪律的监督和评估也具有重要意义。
而传统的考勤管理方式往往存在一些不足,包括:手工记录考勤数据,工作量大且容易出现错误;考勤信息的存储和传递不便,难以及时获取和分析考勤数据;学生作弊现象难以监控等。
三、目标和需求分析学生考勤管理系统的目标是实现学生考勤工作的自动化和信息化,提高工作效率和准确性。
系统的需求分析包括以下几个方面:1. 考勤数据输入:系统应提供方便快捷的考勤数据输入方式,如刷卡或指纹识别等,确保数据的准确性。
2. 数据存储和管理:系统应能够存储和管理大量的考勤数据,包括学生基本信息、考勤记录和考勤异常情况等。
3. 数据查询和分析:系统应提供灵活的数据查询和分析功能,方便教师和学校管理层获取各类考勤数据,进行考勤分析和学生评估。
4. 安全性和权限管理:系统应具备高度的数据安全性,确保考勤数据的保密性和防止非法访问。
同时,系统应具备权限管理功能,不同用户拥有不同的操作权限。
5. 可靠性和稳定性:系统应具备高可靠性和稳定性,能够长时间稳定运行,避免出现系统崩溃或数据丢失的情况。
四、技术可行性分析学生考勤管理系统的开发需要考虑技术可行性,包括硬件和软件方面的支持:1. 硬件支持:学生考勤管理系统需要一定的硬件设备支持,如考勤机、服务器等。
目前市场上已经存在各类考勤机和服务器产品,满足系统开发的硬件需求。
RFID校园考勤管理系统

课程设计报告书设计名称:课程名称:RFID 校园考勤管理系统物联网系统集成目录一、1.2.3.二、三、1.前言 (2)物联网的概念及体系结构 (2)物联网数据处理流程: (2)智慧校园考勤系统 (2)系统概述 (2)总体方案设计 (2)进出门管理 (2)2.3.4.5.四、会议管理 (2)实时智能警示 (2)统计分析 (2)安全管理 (2)分块报告——统计分析 (2)1.开发背景 (4)2.系统结构 (4)3.系统软件设计 (6)4.小结 (8)一、前言1. 物联网的概念及体系结构物联网是通过射频识别RFID(Radio Frequency IDentification)标签、红外应器、全球定位系统、激光扫描器等信息传感设备,按约定的协议,把各种物体接入互联网,进行信息交换和通信,以实现对物体的智能化识别、定位、跟踪、监控和管理。
互联网是将计算机连接起来,形成网络,从而实现人与人的信息交互,而物联网是利用RFID技术、传感器技术以及通信技术,将任意时间、地点的一切事物连接到互联网中,以实现物品的自动识别,达到物与物、物与人之间的互联与信息共享及信息交互。
物联网是各种感知技术的广泛应用[4]。
在所有需要的物体上装置EPC电子产品编码、海量的多种类型传感器等,利用射频识别技术扫描或传感技术捕获信息,并将此实时信息,通过各种有线或无线网络与互联网融合,将物体的信息实时准确地传递出去,并在相应的网络数据处理中心进行信息共享、信息交互或信息智能处理,然后将已处理的的信息通过物联网传播,实现对物体实施智能控制。
物联网将传感技术和人工智能相结合,利用云计算、模式识别等各种技术,从海量信息中分析、加工和处理出有意义的数据,以适应不同领域、不同用户的各种需求。
物联网的体系结构可分为4个层次:1)感知层物联网对物理世界各种信息的全面感知,通过EPC、RFID、传感器、阅读器、智能机器人等技术进行数据采集,实现“物”的识别,感知技术是物联网的最底层技术,是物联网的核心技术之一;2)网络层把感知层感知到的信息通过互联网、有线/无线通信网等网络,实时、准确、安全可靠地进行传送。
学生考勤系统的c语言课程设计.doc

学生考勤系统的c语言课程设计.课程设计说明学校,系:软件学院的专业化:软件工程学生的名字:卢清雪没有。
以下内容:1514011242设置项目标题:学生考勤系统的起止日期是从XXXX :年2月29日到XXXX 3月11日。
它指的是导师:财富第一章的设计目的。
本课程设计是本学期程序设计基础课程的实际应用,也是对所学知识的测试。
通过本课程设计可以达到的目的如下:1.巩固和深化对C课程基本内容和理论知识的理解和掌握。
2.掌握C语言编译和程序调试的基本技能。
3.用C语言进行基本的程序设计,逐步了解文件的一些相关操作,掌握函数的使用技巧,包括函数类型的选择和参数的传递方式。
4.掌握数组、指针、引用、文件等的编译方法。
提高用C语言解决实际问题的能力。
5.通过学生考勤系统的设计,源代码的编写,以及各种语法和函数在C语言中的使用,对较为复杂的结构、链接和文件的操作更加熟悉。
6.通过课程设计,将本学期学到的知识与实际应用相结合,培养自己的动手能力,加强各学科之间的联系,从而提高团队意识,加强团队之间的协调与合作,满足2.1学生考勤信息记录系统第二章总体设计的要求。
通过该系统,可以实现学生考勤信息的创建、录入、修改、查询和保存等操作的管理。
实验出勤信息包括学生姓名、学生编号、科目类型和每个科目的出勤信息。
主要功能:1)、可以完成考勤输入和修改2)、创建班级信息3)、设备查询4)、根据设计要求将考勤信息保存到文件2.2流程图中,绘制如下流程图:启动菜单24。
修改6。
5号出口。
查询23。
创建2。
查询11。
输入void creat(void),这是2.3中设置的主要功能。
无效保存(结构学生*,char[]);结构学生*负荷(char[));无效进入(void);/*输入函数*/void search _ 1(void);/*查询函数_ 1 */void search _ 2(void);/*查询函数_2*/void添加(void);无效修改(void);/*修改功能*/作废返回(作废);/*退出函数*/void _ 1();/* interface-1 */void _ 2();/*接口-2 */mune _ 1();mune _ 2();3.1函数和调用关系void _ 1();/*菜单功能1*/void mune_2() /*菜单功能2*/开始输入记录、查询个人、创建信息、修改信息、查询整班结束菜单_2退出系统1234 56休息休息休息休息休息休息;/*输入功能*/开始输入班级和学生人数p-num==大学体育大学英语口语C语言大学物理马克思大学英语高等数学输入学生对此班级的兴趣Y/N②返回菜单2 n退出开始无效搜索_1(无效);/*查询个人信息*/输入此人的班级和学生编号AP-num==此人出勤信息的真或假输出返回菜单2开始无效搜索_2(无效);/*查询班级信息*/输入班级查询并输出该班级的考勤信息。
考勤管理系统C语言课程设计

HUBEI UNIVERSITY OF AUTOMOTIVE TECHNOLOGYC语言程序设计课程设计报告课设题目:考勤管理系统专业:自动化班级: xxxxx姓名: xxxx成绩: xxxx目录1.课程设计目的 (3)2.需求分析 (3)2.1要求 (3)2.2任务描述 (4)2.3运行环境 (4)2.4开发工具 (4)3.总体设计 (4)3.1系统流设计 (4)3.2系统模块设计 (5)4.详细设计 (6)4.1数据结构设计 (6)4.2模块接口设计 (6)4.3 以下是几个主要模块的流程图: (7)5.运行结果 (10)5.1主菜单界面: (11)5.2信息录入界面: (12)5.3信息浏览界面: (13)5.4 信息查询界面: (15)5.5信息修改界面: (15)6.程序调试与测试 (17)6.1程序调试 (17)6.2程序测试 (19)7.问题与不足 (19)8.建议 (19)9.编程体会 (19)10.程序源代码: (20)11.参考文献 (38)12.用户使用手册 (38)1.课程设计目的1)通过课程设计,加深对结构化程序设计思想的理解,能对系统功能进行分析,并设计合理的模块化结构。
2)通过课程设计,进一步掌握C语言中重要的数据结构。
掌握并熟练运用指针、链表、结构体、文件等数据结构。
3)通过课程设计,提高程序开发能力,能运用合理的控制流编写清晰高效的程序。
4)通过课程设计,培养C语言知识运用和自学能力,真正的把课堂上获得的知识运用起来,培养自己对程序编写的兴趣,并能独立设计和实现一个小型系统。
5)通过课程设计,加强了自己的程序分析能力。
2.需求分析2.1要求1)遵循软件开发过程的基本规范;能灵活应用,初步具备运用C程序解决实际问题的能力。
2)运用结构化程序设计方法,按照课程设计题目要求,完成包括需求分析、数据结构设计、概要设计、详细设计、编写代码、调试和测试C程序等过程。
3)学会利用数组、结构体、链表进行相关信息表示。
125KHz门禁考勤软件设计

沈阳航空航天大学课程设计报告课程设计名称:物联网综合课程设计课程设计题目:125KHz门禁考勤软件设计与实现院(系):计算机学院专业:班级:学号:姓名:指导教师:完成日期:沈阳航空航天大学课程设计报告目录第1章总体设计方案 (2)1.1设计原理 (2)1.2设计思路 (3)1.3设计环境 (3)第2章详细设计方案 (5)2.1顶层方案图的设计与实现 (5)2.2功能模块的设计与实现 (5)2.2.1 信息管理的实现 (6)2.2.2 考勤记录的实现 (10)2.2.3 信息查询的实现 (13)第3章编程下载与硬件测试 (15)3.1编程下载 (15)3.2硬件测试及结果分析 (15)附录(课设程序源代码) (19)第1章总体设计方案1.1 设计原理RFID 技术,简单的说它是一种非接触的自动识别技术。
该技术的原理主要是利用射频信号和空间耦合的传输属性,从而能够对别识别的物体进行自动识别。
RFID 技术在门禁考勤方面发挥较大作用,这是因为RFID 系统可以将相关人员的信息、卡号这些资料全部存贮在一起,并且这些信息能够被系统快速识别,显示读卡时间。
而应用于RFID 技术的门禁考勤软件,只要将RFID 读写器替换掉传统的人工记录和管理方式,采用RFID 的系统,即可完成对人员考勤智能化管理的工作。
RFID 系统主要由电子标签、RFID 读写器和天线三部分构成。
每个相关人员的RFID 标签都是唯一的电子标签,其内部信息需要用EEPROM 进行存储相关人员的各项信息;而RFID读写器由RFID 控制器和RFID 天线构成,读写器主要用来读取和写入RFID 标签信息;而天线的作用就是用来传递RFID 读写器和RFID 标签之间的信息信号。
本课设题目名称为125KHz门禁考勤软件设计与实现,如今信息技术早已深入人们的生活的各个领域。
伴随人们对财务的安全与防盗意识的不断提高,于是对住宅区的安全性能和门禁的系统人性化要求越来越高。
基于php学生管理系统课程设计-概述说明以及解释

基于php学生管理系统课程设计-概述说明以及解释1.引言1.1 概述概述部分的内容可以包括以下方面:概述部分主要对基于PHP的学生管理系统课程设计进行介绍和总体概述。
本部分将简要介绍该课程设计的背景和意义,并概括描述文章后续章节的内容安排。
首先,学生管理系统作为现代教育管理的一个重要组成部分,对于高效管理学生信息以及教育资源的合理调配至关重要。
基于此,本次课程设计旨在利用PHP技术来设计和实现一个学生管理系统,以增强学校的教育管理效率和优化学生学习环境。
其次,本次课程设计的目的是通过自主设计和开发学生管理系统来提高学生信息管理和教育资源调配的效率。
通过使用PHP这一功能强大的编程语言,我们可以实现学生信息的录入、查询和更新等功能,同时还可以将这些数据与其他教育资源进行有效整合,进而提升学校教务工作的水平和效果。
在论文的后续章节中,我们将首先介绍PHP的基本概念和原理,以便读者对该语言有一个全面的了解。
接着,我们将详细阐述学生管理系统的设计原理,包括系统架构、数据库设计和用户界面设计等方面。
最后,我们将简要概述该系统实现的功能,并分析设计的优点和可能的改进方向。
通过本次课程设计,我们希望能够为教育管理者和学校提供一个可行的解决方案,以实现学生信息管理和教育资源调配的优化,推动教育管理的现代化和信息化发展。
同时,本次课程设计也能为学生提供一个实际动手开发项目的机会,提高他们在数据库设计和Web开发方面的实际应用能力。
1.2文章结构1.2 文章结构本文分为引言、正文和结论三部分。
每个部分的内容概述如下:1. 引言部分(Introduction)引言部分主要介绍本文的背景和目的。
首先,简要概述学生管理系统课程设计的背景,说明该系统的重要性以及其在教育管理中的作用。
接着,说明本文的结构,即阐明每个部分的主要内容和目标,为读者提供整体的了解。
2. 正文部分(Main Body)正文部分是本文的核心内容,主要分为三个子部分:PHP介绍、学生管理系统设计原理和实现功能。
《管理信息系统》课程设计实验报告

管理信息系统》课程设计实验报告课程名称:管理信息系统指导老师:* 院系:商学院专业班**姓名:**学号:**实验日实验地点:一机房《管理信息系统》课程设计任务书一.课程设计目的及意义:《管理信息系统》课程设计是在完成《管理信息系统》课程学习之后的一次实践性教学,是本课程理论知识的一次综合运用。
通过本课程设计,能够进一步加深对信息、信息系统、管理信息系统等基础理论知识的理解,能初步掌握结构化的生命周期法、面向对象法等系统工程方法,进一步加强熟练应用管理信息系统的操作技能,并能够借助于管理信息系统解决实际问题。
二.课程设计要求:1.本课程设计时间为一周。
2.本课程设计以教学班为单位进行上机操作及实验。
3.按照任务要求完成课程设计内容。
三.课程设计任务要求:1.任务内容:进入山东轻工业学院主页,在“网络资源”区域进入“网络教学平台”,输入各自的用户名和密码(学生学号及密码),进入本网络教学平台系统,在充分熟悉本系统的前提下,完成下列任务要求。
2.任务要求:①按照课程讲解的系统分析步骤和理论对本系统进行系统分析。
②绘制不少于3 个的主要业务流程图。
③描述上述主要业务流程图的逻辑处理功能。
④分析本系统的优缺点,提出改进意见,并描述改进的逻辑处理功能,绘制业务流程图。
四.课程设计评分标准:按照《管理信息系统课程设计大纲》的要求,本课程 1 学分,采用百分制计分,其中任务要求②占30分,任务要求③占30分,任务要求④占30分,考勤及实践表现占10分。
五.本课程设计自2011 年6 月27 日至2011 年7 月1 日。
实验项目名称:对教学管理系统进行系统分析一•课程设计目的及意义:《管理信息系统》课程设计是在完成《管理信息系统》课程学习之后的一次实践性教学,是本课程理论知识的一次综合运用。
通过本课程设计,能够进一步加深对信息、信息系统、管理信息系统等基础理论知识的理解,能初步掌握结构化的生命周期法、面向对象法等系统工程方法,进一步加强熟练应用管理信息系统的操作技能,并能够借助于管理信息系统解决实际问题。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
一.需求分析功能需求:1、录入学生的缺勤记录;2、修改某个学生的缺勤记录;3、查询某个学生的缺勤情况;4、统计某段时间内,缺勤学生学号及缺勤次数,按缺勤权值统计学生的负分值,并能进行排序;5、统计某段时间内,有学生旷课的课程及旷课人次,按旷课人次由多到少排序;6、系统以菜单方式工作数据需求本系统主要涉及的数据有学生缺课信息类和有关信息排序类。
学生缺课信息包括缺课时间,学生姓名,课程名称,第几节,学生迟到次数,早退次数,请假次数,旷课次数。
有关信息排序类包括对课程排序和对姓名排序。
性能需求要求系统具有可靠性,速度要快二、系统的主要功能(1)、录入学生的缺课记录,函数代码void input(records *r){}模块中。
首先提示用户按照正确的格式进行学生缺课记录的录入,这个步骤比较简单,只需要不断地将记录的每个数据项存入结构体对应的成员中。
(2)、修改某个学生的缺课记录,函数代码void edt(records *r){}模块中。
首先必须查找到你所需要修改的那位的学生全部缺课记录。
这个模块不需要定义新的结构体。
在修改前当然要检查记录是否为空了,不为空的话,可以设置下面这五个菜单供用户选择:1、缺课日期2、第几节课3、课程名称4、学生姓名5、缺课类型6、退出修改程序并返回系统主菜单。
修改很简单,仅需要对该学生的某个部分进行替换即可。
采用switch语句很快就解决。
最后实现对所选记录的修改,完成后更新原有的学生记录。
(3)、查询某个学生的缺课情况,函数代码void search(records *r){}模块中。
达到查询结果按照日期升序排序,同一天内按照所缺课程的时间升序排序的目的,(4)、统计,函数代码为void order_c(){}和void order_s(){}的类模块中。
其中实现对课程排序和对学生姓名的排序。
三、流程图学生考勤系统结构图:四、数据结构设计此程序运用多种条件语句,主体采用的是动态数组、指针。
系统的设计采用了数组语句、选择语句和循环语句,在需要处理大量同类数据时,这样就使程序书写更加简洁。
程序使用了布尔函数。
选择语句多采用if多分支选择结构与switch语句。
首先计算switch表达式,然后在caes子句中寻找值相等的常量表达式,并以此为入口符号,由此开始顺序执行。
循环语句采用了for语句等、do-while语句,for语句用于已知循环次数的循环结构,括号中的三个量分别用来表示循环变量初值、循环终值和循环增量。
do-while语句先循环后判断, Break 语句在switch语句中,保证多分支情况的正确执行,在循环语句中,强制终止本层循环。
保存和读取函数是典型的函数功能,一个程序是由若干个函数组成的,保存和读取函数是和其他函数互相调用的再有使用有关类的设计,学生缺课信息类和有关信息排序类,如下:class record //学生缺课信息类{public:void set(string d,int cno,string c,string s,int type){date.assign(d);//日期cname.assign(c);//课程名字sname.assign(s);//学生姓名this->cno=cno;//对缺课类型的选择为int型this->type=type;//缺课类型}void set(record re){date.assign(re.date);cname.assign(ame);sname.assign(re.sname);this->cno=o;this->type=re.type;}string date,cname,sname;int cno,type;};class records //实现学生旷课情况排序的类{public:records() //构造函数{r=new record[100];n=0;}void order_s() //姓名的排序{int i;int j;string *s=new string[n];int *c=new int [n];s[0].assign(r[0].sname);c[0]=1;int k=1,flag;for( i=1;i<n;i++){flag=0;for( j=0;j<k;j++)if(r[i].sname==s[j]){c[j]++;flag=1;break;}if(!flag){s[k]=r[i].sname;c[k++]=1;}}for(i=1;i<k;i++)for( j=i;j>0;j--){if(c[j]>c[j-1]){int tmp=c[j];c[j]=c[j-1];c[j-1]=tmp;string stmp=s[j];s[j]=s[j-1];s[j-1]=stmp;}}cout<<"旷课学生姓名\t旷课次数"<<endl;for(i=0;i<k;i++)cout<<s[i]<<"\t\t"<<c[i]<<endl;}void order_c() //课程排序{int i,j;string *s=new string[n];int *c=new int [n];s[0].assign(r[0].cname);c[0]=1;int k=1,flag;for( i=1;i<n;i++){flag=0;for(j=0;j<k;j++)if(r[i].cname==s[j]){c[j]++;flag=1;break;}if(!flag){s[k]=r[i].cname;c[k++]=1;}}for(i=1;i<k;i++)for( j=i;j>0;j--){if(c[j]>c[j-1]){int tmp=c[j];c[j]=c[j-1];c[j-1]=tmp;string stmp=s[j];s[j]=s[j-1];s[j-1]=stmp;}}cout<<"课程名\t旷课人次"<<endl;for(i=0;i<k;i++)cout<<s[i]<<"\t"<<c[i]<<endl;}record *r;int n;};把所有的学生记录都保存到一个文件里面,然后根据需要再将里面需要查找的元素进行查找,相应的排序可能就是将他们尽可能压进关联式容器map,有的部分就压入set里面,这些都是根据模块的功能来选定的。
可以这么说,选择好合理的数据结构查找与排序就可以一劳永逸了。
这点在后面部分会有详细的说明。
还有就是对各功能子函数的编写应用。
五、类设计系统中主要涉及了两个类:一个是class record //关于学生考勤基本信息类另一个是class records//实现学生旷课情况排序的类六、主要算法设计关键算法:旷课情况的排序:class records//实现学生旷课情况排序的类{public:records() //构造函数{r=new record[100];n=0;旷课记录的修改:cout<<"请输入要修改缺课记录的学生姓名: "<<flush;string t1,t3,t4;char tmp[30];int t2,t5,flag=0;cin>>tmp;t1.assign(tmp);for(i=0;i<r->n;i++)if(r->r[i].sname==t1){flag=7;break;}if(!flag){cout<<"查无此学生!"<<endl;return;}t1=r->r[i].date;t2=r->r[i].cno;t3=r->r[i].cname;t4=r->r[i].sname;t5=r->r[i].type;旷课项目的修改!cout<<"请输入要修改的项目:\n(1.缺课日期 2.缺课节次 3.缺课名称 4.学生姓名 5.缺课类型 6.全部) "<<flush;e0:cin>>flag;switch(flag){case 1:goto e1;case 2:goto e2;case 3:goto e3;case 4:goto e4;case 5:goto e5;case 6:goto e1;default:goto e0;}用到的知识点有:函数的作用域、函数的调用、数组赋值、函数循环、以及类的定义,另外还用到了for函数、getch函数、switch函数、case函数、default函数等等。
七、主要代码第一部分:学生考勤管理系统#include "stdlib.h"#include "hanshushixian.h"#include "record.h"#include <string>#include <iostream>#include <iomanip>#include <fstream>using namespace std;#include "record.h"int main(){c1: //主菜单实现system("cls");{cout<<"*************************************************************"<<endl;cout<<" *** ★欢迎访问学生考勤管理系统★***"<<endl;cout<<"*************************************************************"<<endl;cout<<" *** 系统主菜单: 1.显示所有学生的缺课记录***"<<endl;cout<<" *** 2.录入学生的缺课信息记录***"<<endl;cout<<" *** 3.查询某个学生的缺课情况***"<<endl;cout<<" *** 4.修改某个学生的缺课记录***"<<endl;cout<<" *** 5.删除某个学生的缺课记录***"<<endl;cout<<" *** 6.统计某段时间内旷课情况***"<<endl;cout<<" *** 7. 退出系统***"<<endl;cout<<"*************************************************************"<<endl;}cout<<"O(∩_∩)O 请选择你所需要的操作 O(∩_∩)O: "<<flush;int chose;c2:cin>>chose;if(chose==7)exit(0);records *r=new records();rd(r);switch(chose){case 1:pri(r);break;case 2:input(r);break;case 3:search(r);break;case 4:edt(r);break;case 5:del(r);break;case 6:search_s(r);break;default:goto c2;}cout<<"是否返回主菜单? (y/n)——你的选择: "<<flush;char yn;c3:cin>>yn;if(yn=='y')goto c1;else if(yn=='n')exit(0);else goto c3;return 0;}第二部分:record.h (类的设计部分)#include <iostream>#include <string>using namespace std;#ifndef record_class#define record_classclass record //关于学生考勤基本信息类{public:void set(string d,int cno,string c,string s,int type){date.assign(d);cname.assign(c);sname.assign(s);this->cno=cno;this->type=type;}void set(record & re){date.assign(re.date);//assign可以避免不必要的内存分配,可以提高效率cname.assign(ame);sname.assign(re.sname);this->cno=o;this->type=re.type;}string tostr(){string s;char tmp[3];s.assign(date);itoa(cno,tmp,10);s.append("#");s.append(tmp);//直接添加另一个完整的字符串s.append("#");s.append(cname);s.append("#");s.append(sname);itoa(type,tmp,10);s.append("#");s.append(tmp);return s;}string date;string cname;string sname;int cno;int type;};#endif record_class#ifndef records_class#define records_classclass records//实现学生旷课情况排序的类{public:records() //构造函数{r=new record[100];n=0;}void order_s() //姓名的排序{int i;int j;string *s=new string[n];int *c=new int [n];s[0].assign(r[0].sname);c[0]=1;int k=1,flag;for( i=1;i<n;i++){flag=0;for( j=0;j<k;j++)if(r[i].sname==s[j]){c[j]++;flag=1;break;}if(!flag){s[k]=r[i].sname;c[k++]=1;}}for(i=1;i<k;i++)for( j=i;j>0;j--){if(c[j]>c[j-1]){int tmp=c[j];c[j]=c[j-1];c[j-1]=tmp;string stmp=s[j];s[j]=s[j-1];s[j-1]=stmp;}}cout<<"旷课学生姓名\t旷课次数"<<endl;for(i=0;i<k;i++)cout<<s[i]<<"\t\t"<<c[i]<<endl;}void order_c() //课程排序{int i,j;string *s=new string[n];int *c=new int [n];s[0].assign(r[0].cname);c[0]=1;int k=1,flag;for( i=1;i<n;i++){flag=0;for(j=0;j<k;j++)if(r[i].cname==s[j]){c[j]++;flag=1;break;}if(!flag){s[k]=r[i].cname;c[k++]=1;}}for(i=1;i<k;i++)for( j=i;j>0;j--){if(c[j]>c[j-1]){int tmp=c[j];c[j]=c[j-1];c[j-1]=tmp;string stmp=s[j];s[j]=s[j-1];s[j-1]=stmp;}}cout<<"课程名\t旷课人次"<<endl;for(i=0;i<k;i++)cout<<s[i]<<"\t"<<c[i]<<endl;}record *r;int n;};#endif records_class第三部分:hanshushixian.h (功能子函数的实现部分)#include "record.h"#include <string>#include <iostream>#include <fstream>#include "stdlib.h"#include <iomanip>using namespace std;void wt(records *r)//实现对文件的输出{ofstream outf("data.txt");for(int i=0;i<r->n;i++)outf<<r->r[i].tostr()<<endl;outf<<"!"<<endl;}void rd(records *r)//实现对文件的输入{ifstream inf("data.txt");if(inf.eof()){cout<<"记录为空!"<<endl;return;}string t1,t3,t4;char tmp[30];int t2,t5;r->n=0;while(true){inf.getline(tmp,10,'#');if(tmp[0]=='!')break;t1.assign(tmp);inf.getline(tmp,3,'#');t2=atoi(tmp);inf.getline(tmp,30,'#');t3.assign(tmp);inf.getline(tmp,30,'#');t4.assign(tmp);inf.getline(tmp,3);t5=atoi(tmp);r->r[r->n++].set(t1,t2,t3,t4,t5);}}bool timechk(string t1){int year=atoi(t1.substr(0,2).c_str());int month=atoi(t1.substr(2,2).c_str());int day=atoi(t1.substr(4,2).c_str());if(!(t1.length()==6&&year>0&&year<99&&month>0&&month<13&&day>0&&day<32)) {cout<<"日期录入有误! 请重新录入: "<<endl;return false;}else return true;}void input(records *r)//录入学生的缺课记录{string t1,t3,t4;int t2,t5,flag=0;char yn;cout<<"录入一条学生缺课记录:"<<endl;//endl表示终止一行并刷新缓冲区m1:cout<<"请输入缺课日期: (例如110627) "<<flush;//flush表示刷新缓冲区cin>>t1;if(!(timechk(t1)))goto m1;m2:cout<<"请输入缺第几节课: "<<flush;cin>>t2;if(t2<1||t2>10){cout<<"节次录入有误! 请重新录入: "<<endl;goto m2;}cout<<"请输入缺课名称: "<<flush;cin>>t3;cout<<"请输入缺课学生姓名: "<<flush;cin>>t4;m3:cout<<"请输入缺课类型: (1.迟到 2.早退 3.请假 4.旷课) "<<flush;cin>>t5;if(t5<1||t5>4){cout<<"类型输入有误! 请重新录入: "<<endl;goto m3;}for(int i=0;i<r->n;i++)if(r->r[i].date==t1&&r->r[i].cno==t2&&r->r[i].cname==t3&&r->r[i].sname==t4&& r->r[i].type==t5){cout<<"该条记录已存在,是否添加为新记录? (y/n) "<<flush; n1:cin>>yn;if(yn=='y')break;else if(yn=='n')goto n2;else goto n1;}r->r[r->n++].set(t1,t2,t3,t4,t5);n2:cout<<"是否继续输入? (y/n) "<<flush;n3:cin>>yn;if(yn=='y')goto m1;else if(yn=='n'){cout<<"保存修改? (y/n) "<<flush;cin>>yn;if(yn=='y')wt(r);else return;}else goto n3;}void prione(record r){cout<<r.date<<"\t\t"<<o<<"\t"<<ame<<"\t\t"<<r.sname<<"\t\t"<<flush;switch(r.type){case 1:cout<<"迟到"<<endl;break;case 2:cout<<"早退"<<endl;break;case 3:cout<<"请假"<<endl;break;case 4:cout<<"旷课"<<endl;break;default:;}}void pri(records *r)//修改学生信息{if(r->n==0){cout<<"记录为空!"<<endl;return;}cout<<"\n序号\t缺课日期节次\t课程名称\t学生姓名\t缺课类型"<<endl;for(int i=0;i<r->n;i++){cout<<i<<"\t"<<flush;prione(r->r[i]);}}void edt(records *r)//修改学生信息{int i;if(r->n==0){cout<<"记录为空!"<<endl;return;}cout<<"请输入要修改缺课记录的学生姓名: "<<flush;string t1,t3,t4;char tmp[30];int t2,t5,flag=0;cin>>tmp;t1.assign(tmp);for(i=0;i<r->n;i++)if(r->r[i].sname==t1){flag=7;break;}if(!flag){cout<<"查无此学生!"<<endl;return;}t1=r->r[i].date;t2=r->r[i].cno;t3=r->r[i].cname;t4=r->r[i].sname;t5=r->r[i].type;cout<<"请输入要修改的项目:\n(1.缺课日期 2.缺课节次 3.缺课名称 4.学生姓名 5.缺课类型 6.全部) "<<flush;e0:cin>>flag;switch(flag){case 1:goto e1;case 2:goto e2;case 3:goto e3;case 4:goto e4;case 5:goto e5;case 6:goto e1;default:goto e0;}e1:cout<<"请输入缺课日期: (例如080612) "<<flush;cin>>t1;if(flag!=6)goto e6;e2:cout<<"请输入缺第几节课: "<<flush;cin>>t2;if(flag!=6)goto e6;e3:cout<<"请输入缺课名称: "<<flush;cin>>t3;if(flag!=6)goto e6;e4:cout<<"请输入缺课学生姓名: "<<flush;cin>>t4;if(flag!=6)goto e6;e5:cout<<"请输入缺课类型: (1.迟到 2.早退 3.请假 4.旷课) "<<flush;cin>>t5;e6:r->r[i].set(t1,t2,t3,t4,t5);char yn;cout<<"保存修改? (y/n) "<<flush;cin>>yn;if(yn=='y')wt(r);else return;}void del(records *r)//删除学生信息{if(r->n==0){cout<<"记录为空!"<<endl;return;}cout<<"请输入要删除的记录的序号: (输入-1删除全部) "<<flush;int flag;cin>>flag;if(flag>r->n-1&&flag<-1){cout<<"不存在所要删除的记录!"<<endl;return;}else if(flag==-1)r->n=0;else{for(int i=flag;i<r->n-1;i++)r->r[i].set(r->r[i+1]);r->n--;}char yn;cout<<"保存修改? (y/n) "<<flush;cin>>yn;if(yn=='y')wt(r);else return;}void search(records *r)//查找学生信息{if(r->n==0){cout<<"记录为空!"<<endl;return;}cout<<"请输入要查询的学生姓名: "<<flush;string str;int j=0,flag=0;cin>>str;for(int i=0;i<r->n;i++)if(r->r[i].sname==str){if(!flag)cout<<"\n序号\t缺课日期节次\t课程名称\t学生姓名\t缺课类型"<<endl;cout<<j++<<"\t"<<flush;prione(r->r[i]);flag=1;}if(!flag)cout<<"没有查到该学生的缺课记录!"<<endl;}void search_s(records *r)//一定范围查找学生信息{int i;if(r->n==0){cout<<"记录为空!"<<endl;return;}records *r1=new records();g1:cout<<"请输入要检索的时间范围: (例如110610-110612) "<<flush;string tmp,ld,hd;cin>>tmp;ld.assign(tmp.substr(0,6));hd.assign(tmp.substr(7,6));if(!timechk(ld)||!timechk(hd))goto g1;for(i=0;i<r->n;i++)if(r->r[i]pare(ld)>=0&&r->r[i]pare(hd)<=0&&r->r[i].type==4 )r1->r[r1->n++].set(r->r[i]);cout<<"请选择统计方式: (1.学生旷课情况降序显示 2.课程旷课情况降序显示)"<<flush;g2:cin>>i;switch(i){case 1:cout<<"\n在"<<ld<<"到"<<hd<<"期间学生旷课情况如下:"<<endl;r1->order_s();break;case 2:cout<<"\n在"<<ld<<"到"<<hd<<"期间课程旷课情况如下:"<<endl;r1->order_c();break;default:goto g2;}}八、系统运行结果样例当用户执行程序时首先会出现如下界面也是主菜单界面:当输入序号1时会出现所有学生记录:再选择y就会又回到主菜单界面,选n时就会退出。