人员签到管理系统方案

合集下载

员工考勤平台管理制度

员工考勤平台管理制度

员工考勤平台管理制度一、总则为规范和统一员工的考勤管理,提高工作效率,增强企业内部管理,制定本管理制度。

二、适用范围本考勤管理制度适用于公司全体员工。

三、考勤系统公司将建立电子考勤系统,员工通过电子考勤机或手机App进行考勤打卡,每日上下班打卡需准时完成,迟到、早退、未打卡等情况将被记录。

四、工作时间1. 上班时间:公司规定的上班时间为每天8:30,员工需在规定时间内到岗上班。

2. 下班时间:公司规定下班时间为每天17:30,员工需在规定时间内完成工作交接后才能离岗。

3. 加班规定:员工如果需要加班,必须事先向直接主管提出申请,经批准后方可加班,并需要通过考勤系统记录加班时长。

五、考勤制度1. 打卡规定:员工需在考勤机或手机App上按规定时间打卡,打卡成功后才算完成考勤。

2. 请假规定:员工如需请假,必须提前向直接主管提出申请,经批准后方可请假,需要在考勤系统上填写请假事由及请假时间,否则按旷工处理。

3. 迟到早退:员工如有迟到或早退情况,需在考勤系统上填写迟到或早退事由,超过三次将会受到相应处罚。

4. 考勤异常处理:考勤系统会实时监控员工的考勤情况,如有异常情况,将由考勤管理员进行处理,员工应配合提供说明及证明材料。

六、考勤管理1. 考勤核实:每月底,考勤管理员将根据考勤系统记录核实员工的考勤情况,如有问题将与员工沟通核实。

2. 考勤统计:考勤管理员将按照公司规定对员工的考勤情况进行统计,定期向上级汇报,及时发现和解决问题。

3. 考勤奖惩:对于出勤优秀的员工,公司将给予相应的奖励;对于考勤不合格的员工,公司将给予相应的处罚,并记录在员工档案中。

七、审批流程1. 请假审批:员工向直接主管提出请假申请,主管审核后将请假信息录入系统,填写审批意见后方可生效。

2. 加班审批:员工向直接主管提出加班申请,主管审核后填写加班审批单,员工在考勤系统上记录加班时长后方可生效。

3. 考勤异议:如员工对考勤记录有异议,可向考勤管理员提出申诉,经核实后进行调整。

智慧签到系统设计方案

智慧签到系统设计方案

智慧签到系统设计方案智慧签到系统是一种利用智能化技术实现签到管理的系统。

通过利用智能设备(如手机、平板等)和相应的软件,可以方便地进行签到,提高签到的准确性和效率。

下面是一个智慧签到系统的设计方案,包括功能介绍、技术实现、使用流程等。

1. 功能介绍智慧签到系统应包括以下功能:- 学生签到:学生通过扫描二维码或输入指定的签到码进行签到。

- 教师管理:教师可以进行签到设置、查看签到情况和统计分析等操作。

- 管理员管理:管理员可以对系统进行用户管理、权限管理、日志查看等操作。

2. 技术实现智慧签到系统可以采用以下技术来实现:- 前端开发:使用HTML、CSS、JavaScript等技术进行界面设计和用户交互实现。

- 后端开发:使用后端语言(如Java、Python等)开发服务器端应用程序,实现签到逻辑和数据库操作。

- 数据库:使用关系型数据库(如MySQL、Oracle等)存储用户信息、签到记录等数据。

- 移动端应用开发:开发移动端应用程序,实现学生签到、教师管理等功能。

3. 使用流程智慧签到系统的使用流程如下:- 学生签到流程:1. 打开签到系统移动端应用程序。

2. 在应用程序界面中,选择相应的课程或活动。

3. 扫描二维码或输入指定的签到码。

4. 确认签到成功并显示签到时间。

- 教师管理流程:1. 打开签到系统移动端或网页端应用程序。

2. 登录教师账号。

3. 在应用程序界面中,选择相应的课程或活动。

4. 设置签到参数(如签到码、有效时间等)。

5. 开始签到。

6. 查看签到情况和统计分析。

- 管理员管理流程:1. 打开签到系统管理后台。

2. 登录管理员账号。

3. 进行用户管理、权限管理、日志查看等操作。

4. 安全和隐私考虑智慧签到系统需要考虑安全性和隐私保护,以确保用户信息不被泄露或滥用。

- 用户身份验证:使用账号密码、验证码等方式进行用户身份验证,确保只有合法用户才能进行签到和管理操作。

- 数据加密:对于传输的数据和存储的数据进行加密,防止数据在传输和存储过程中被截获和篡改。

考勤管理系统使用说明

考勤管理系统使用说明

考勤管理系统使用说明考勤管理系统使用说明1.引言本文档旨在详细介绍考勤管理系统的使用方法和功能说明,帮助用户快速上手并使用该系统进行考勤管理操作。

2.系统概述2.1 功能概述考勤管理系统是一个用于记录和管理员工上下班考勤情况的软件系统。

它提供了员工签到、签退、请假管理、统计报表等功能。

2.2 主要特点- 员工签到签退打卡功能,支持多种打卡方式(刷卡、指纹、人脸识别等)。

- 请假管理功能,员工可以申请请假并上报给上级审核。

- 自动统计考勤数据,考勤报表,提供数据分析和考勤情况查询功能。

- 管理人员可以设置考勤规则和班次排班。

3.系统安装与部署3.1 硬件要求- 服务器:推荐配置为4核CPU、8GB内存、100GB磁盘空间。

- 客户端:支持常见的操作系统,如Windows、MacOS、Linux 等。

3.2 软件要求- 操作系统:服务器端推荐使用Linux操作系统,客户端根据各自使用习惯选择操作系统。

- 数据库:系统需要使用MySQL数据库进行数据存储,版本要求为MySQL 5.7及以上。

3.3 系统部署步骤1.准备服务器环境,安装并配置操作系统和必要的软件;2.安装MySQL数据库,并进行相应的配置;3.考勤管理系统安装包,并解压到服务器指定目录;4.创建数据库,并导入系统提供的SQL脚本;5.配置系统相关参数,如数据库连接信息、考勤规则等;6.启动系统并进行测试。

4.用户使用指南4.1 用户登录1.打开考勤管理系统客户端;2.输入用户名和密码;3.登录按钮。

4.2 员工打卡1.进入系统后,打卡按钮;2.根据系统支持的打卡方式进行打卡,如刷卡、指纹、人脸识别等;3.打卡成功后,系统会显示打卡时间和签到/签退状态。

4.3 请假申请1.进入系统后,请假申请按钮;2.填写请假事由、起止日期等相关信息;3.提交申请,等待上级审核。

4.4 考勤统计1.进入系统后,考勤统计按钮;2.选择需要统计的时间范围;3.系统会自动计算考勤数据,并统计报表。

员工签到管理系统(软件工程)

员工签到管理系统(软件工程)

实践课题设计任务书指导教师签字:年月日摘要本文设计的员工签到管理系统是为了更好,更方便的管理公司员工考勤的信息。

此系统主要包括员工基本信息,员工签到管理等几个大模块。

每个大模块又分成了几个小的模块,如员工基本信息模块又分成了员工列表,扩展信息,离职管理等小的模块。

每个模块都完成了其相关信息的添加、修改、删除、查询和查看的功能,如员工列表模块就实现了员工信息的添加,修改,删除,查看和查询。

在开发此系统时用了代码生存器,生成了与数据库有关的一些代码以及一些常用的存储过程如记录的添加,删除和修改存储过程。

通过代码生成器生成的代码将数据访问层的很好的封装了起来,大大的提高了开发的效率。

系统功能的实现大大提高了公司管理员工信息的效率。

关键词:员工签到管理;员工签退管理;考勤统计;目录摘要 (2)第1章绪论 (4)1.1 课题背景 (4)1.2 研究内容 (4)1.3 分工及排序 (4)第2章需求分析 (5)2.1 业务分析 (5)2.2 功能需求分析 (5)第3章概要设计 (7)3.1 数据库概要设计 (7)3.1.1 表的设计 (7)3.1.2 实体关系图 (7)第4章系统设计 (9)4.1 数据库详细设计 (9)4.2界面设计 (11)4.2.1员工操作界面 (11)4.2.1.1 员工信息查询 (11)4.2.1.2 员工密码修改 (12)4.2.2管理员操作界面 (13)4.2.2.1 员工信息管理 (13)4.2.2.2 员工信息添加 (14)4.2.2.3 时间管理 (15)4.2.2.4 添加时间段 (16)4.2.2.5 签到查询 (16)4.2.2.6 签退查询 (17)4.2.2.7 考勤统计 (18)第5章运行及测试 (20)第6章结束语 (22)指导教师评语: (24)附录系统相关代码 (25)第1章绪论1.1 课题背景目前市场上流行的员工签到管理系统能够完成大多数的考勤任务,其硬件系统做的相当完善,但与之相对应的管理软件的功能还不够完全,少了一些必须的考勤项目,如员工签退管理、请假管理等等。

考勤系统搭建工作方案

考勤系统搭建工作方案

考勤系统搭建工作方案一、项目背景。

随着企业规模的不断扩大,人员管理的难度也在增加,传统的考勤方式已经不能满足企业的需求,因此需要建立一套科学合理的考勤系统,以提高企业的管理效率和员工的工作积极性。

二、项目目标。

1.建立一套全面的考勤管理系统,能够满足企业各部门的不同需求;2.提高员工的出勤率和工作积极性;3.提高企业的管理效率,减少人力成本;4.提高考勤数据的准确性和实时性。

三、项目内容。

1.系统需求分析。

考勤系统应该包括以下功能,员工签到、签退功能;请假、加班申请和审批功能;考勤数据统计和分析功能;考勤报表导出功能等。

2.技术选型。

考虑到系统的稳定性和扩展性,我们选择使用B/S架构,采用Java语言开发,数据库选用MySQL,前端采用HTML5+CSS3+JavaScript,后端采用Spring+SpringMVC+MyBatis框架。

3.系统架构设计。

考勤系统的架构设计应该包括前端界面、业务逻辑层、数据访问层和数据库四个部分。

前端界面应该简洁美观,易于操作;业务逻辑层应该包括各种考勤规则的实现;数据访问层应该包括对数据库的访问和操作;数据库应该包括员工信息表、考勤记录表、请假加班记录表等。

4.系统开发。

系统开发应该按照需求分析和架构设计进行,分为前端开发、后端开发和数据库开发三个部分。

前端开发应该包括页面设计和交互逻辑的实现;后端开发应该包括业务逻辑的实现和数据访问的实现;数据库开发应该包括数据库表的设计和存储过程的编写。

5.系统测试。

系统测试应该包括单元测试、集成测试和系统测试三个阶段。

单元测试应该保证每个模块的功能正确性;集成测试应该保证各个模块之间的协同工作正常;系统测试应该保证整个系统的功能和性能符合需求。

6.系统部署。

系统部署应该包括硬件环境的准备、软件环境的配置和系统安装三个部分。

硬件环境应该满足系统的性能需求;软件环境应该包括操作系统、数据库和应用服务器等;系统安装应该包括系统的部署和配置。

智慧考勤解决方案

智慧考勤解决方案

智慧考勤解决方案一、目的为实现公司人力资源的有效管理,规范员工出勤行为,提高工作效率,确保公司运营秩序,制定本智慧考勤解决方案。

此方案旨在通过科技手段,对员工考勤进行精细化管理,为公司和员工双方创造公平、公正、透明的工作环境。

二、适用范围本考勤管理制度适用于公司全体在编员工、试用期员工及临时工。

公司各分支机构、各部门应按照本制度执行员工考勤管理。

三、工作时间1. 公司标准工作时间为周一至周五,上午9:00至12:00,下午13:00至18:00,每日工作8小时,中午休息1小时。

2. 特殊岗位或部门可根据工作需要,经公司批准后实行弹性工作制或轮班制。

3. 公司将根据国家法定节假日安排,结合公司实际情况,调整休息日和假期。

4. 各部门负责人应合理安排员工工作,确保员工合法权益,避免过度加班。

5. 员工应严格遵守公司规定的工作时间,按时到岗,按时离岗,不得迟到、早退。

如有特殊情况,需按照请假制度提前申请。

四、考勤制度1、每日签到制度公司采用智慧考勤系统进行员工出勤管理。

员工每日需通过考勤系统进行签到,签到方式包括但不限于指纹识别、刷脸识别、员工卡刷卡等。

签到记录将作为员工出勤的原始依据。

2、签到次数和时间(1)每日签到次数:员工每日需签到两次,分别为上班签到和下班签到。

(2)上班签到时间:上午8:50至9:10,超出此时间段视为迟到。

(3)下班签到时间:下午18:00至18:20,提前签到视为早退。

3、因公外出未签到处理员工因公外出无法按时签到,需提前向直接上级报告并说明原因,由上级在考勤系统中进行备注。

未备注且未签到的,视为旷工。

4、忘记签到处理员工如因特殊情况(如紧急会议、突发事件等)忘记签到,应在当日内及时向直接上级说明情况,并由上级在考勤系统中进行备注。

逾期未备注的,视为未签到。

5、考勤管理责任分配(1)人力资源部门:负责制定、解释和修订考勤管理制度,监督各部门考勤执行情况,处理考勤异常问题。

会议签到工作方案

会议签到工作方案

会议签到工作方案一、背景和目的在现代社会中,会议是组织内部沟通协作、信息共享和决策制定的重要方式。

为了确保会议的顺利进行,必须对参会人员的签到工作进行有效管理。

本工作方案的目的是确保会议签到的准确性和高效性。

二、准备工作1. 签到系统:在会议室门口或指定区域设置电子签到系统,并配备工作人员提供帮助和指导。

2. 签到表格:提前制作会议签到表格,其中包括参会人员的姓名、职务、部门等信息,并预留签到栏。

三、流程和步骤1. 提前通知:在会议通知中明确提醒参会人员需要按时签到,并说明签到地点和时间。

2. 签到前准备:会议开始前,工作人员应提前到达签到地点,准备好签到表格、签到系统和相关物品。

3. 签到过程:3.1 参会人员到达签到地点后,工作人员迎接并引导其进行签到,提供必要的帮助。

3.2 参会人员根据签到表格填写个人信息,包括姓名、职务、部门等,并在签到栏进行签到确认。

3.3 工作人员核对参会人员填写的信息和签到情况的准确性,并进行记录。

3.4 对于无法参会的人员,工作人员应在签到表格上标记,并在后续提供会议纪要或相关材料。

4. 信息统计和分析:4.1 工作人员负责对签到表格中的数据进行整理和统计,并生成参会人数、出勤率等报告。

4.2 根据签到数据和报告,进行出勤情况的分析和总结,为后续的会议组织提供参考依据。

5. 签到结束:5.1 签到工作结束后,工作人员应对签到表格进行保存和备份,确保数据的安全性和保密性。

5.2 工作人员应及时清理签到区域,确保会议现场的整洁和安全。

四、注意事项1. 保护参会人员的隐私信息,对签到数据进行妥善保管,严禁泄露或滥用。

2. 如有特殊情况导致无法按时签到,参会人员应提前与工作人员沟通,寻求解决方案。

3. 在会议开始前和结束后,应向参会人员提供相关文件和资料,如会议议程、材料等。

4. 根据会议类型和规模的不同,可适当调整签到工作的流程和步骤,以满足实际需求。

五、总结通过制定有效的会议签到工作方案,能够提高会议签到的准确性和高效性,为会议的顺利进行提供保障。

签到系统设计方案

签到系统设计方案

签到系统设计方案签到系统设计方案签到系统是一种用于记录人员签到情况的系统,一般应用于公司、学校、考试等场景。

以下是一个基于电子设备的签到系统设计方案。

1. 系统概述该签到系统利用电子设备(如智能手机、平板电脑、电脑等)作为签到终端,通过扫描二维码或输入指定的签到码来完成签到操作。

系统将签到记录存储于服务器数据库中,管理人员可以通过网页或手机应用程序查看签到情况。

2. 系统架构该签到系统主要由签到终端、服务器和数据库三部分组成。

签到终端负责与用户进行交互,服务器负责处理签到请求和数据存储,数据库用于存储签到记录。

3. 签到终端设计用户可以通过扫描二维码或输入指定的签到码来完成签到操作。

签到终端软件应支持跨平台,如适用于Android、iOS等主流操作系统。

用户在签到过程中,软件应提供实时的签到信息反馈,如签到成功提示、签到时间显示等。

签到终端还应支持离线签到功能,即用户在没有网络连接的情况下,签到信息会在网络恢复后自动上传至服务器。

4. 服务器设计服务器应提供签到请求的接收和处理功能。

在接收到签到请求后,服务器会对签到码进行验证,检查签到码是否有效。

服务器还会记录签到人员的基本信息和签到时间,并将签到记录存储于数据库中。

服务器还应提供统计功能,可以按照时间、地点、人员等维度生成签到报表。

5. 数据库设计数据库主要用于存储签到记录。

数据库应设计表结构来存储签到人员的基本信息,包括姓名、工号/学号、联系方式等;签到时间和地点;签到码等信息。

签到记录表还可以添加一些冗余字段,如签到方式(通过扫描二维码或输入签到码)、签到状态(正常签到、迟到、早退等)。

6. 管理端设计管理人员可以通过网页或手机应用程序来管理签到系统。

管理端应提供用户管理、签到数据管理、统计报表生成等功能。

管理端还可以支持推送功能,当发现异常情况(如人员未签到)时,可以通过邮件、短信等方式通知相关人员。

7. 安全性设计为保证签到系统的安全性,系统应采取一些安全措施。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

《我的第一个管理系统》这是我的第一个人员签到签出管理系统。

A.可以实现的功能1.用户注册(只要内存足够可以实现无穷多个用户注册)2.用户签到记录用户员工是否迟到3.用户签退记录用户员工是否早退4.员工出勤情况查询(包括总共上班天数,迟到次数,早退次数)B.我认为程序比较好的地方1.如果内存可以系统可以让无穷多个用户实现注册。

2.可以让用户在任意时刻签到或者签退,并且如果内存足够可以实现无穷多次的签到或者签退,并且完整记录信息。

3.用户注册时候提供了注册名不会重复的功能,如果重复提示用户重新确定注册名。

4.在输入注册密码时让用户两次输入密码比较是否一样,如果不一样则提示用户密码不一致请重新输入。

5.所有密码在输入时全部以*回显,保证密码不会泄露。

6.每一步都有完整的提示指导用户操作,对每一种可能发生的情况都做了相应的处理(当然还会有我没有想到的情况)。

7.本程序是用纯C编写出来的,依靠的是链表指针操作,看起来不是很容易。

C.程序的主要思想1.不用C++里面的类,完全用结构体来代替。

2.先创建一个用户emp结构体,用来作为横向链表的节点,存储用户名,用户密码等基本信息。

3.再创建一个day签到签退结构体用来作为竖向节点,用来记录用户每天签到情况。

4.总体就是一个用户就是一个链表,每注册一个用户就在横向链表里插入一个节点记录用户名等基本信息,然后就是每个横向节点又作为每个用户签到链表的头结点,这样签到一次就在该用户对应的横节点下插入一个节点记录该用户签到情况。

D.程序的不足之处1.没有漂亮的界面,看起来不爽。

2.没有提供开除员工的取消用户注册的操作(其实也比较好实现,再多加一个函数就可以解决)。

(以实现)3.程序中用到大量的goto语句,这里不提倡使用。

4.记录数据不是十分充分,但是随时可以扩充。

5.如果程序意外停止,那么所有数据全部丢失,所以本系统不是用来用的,是用来看的。

6.程序重复代码有好多,其实可以精简。

7《此程序最终可以实现回车重新输入密码》《所有功能都实现了哈哈哈哈哈》#include<stdio.h>#include<stdlib.h>#include<string.h>#include<conio.h>typedef struct days{int stime;//上班时间int gotime;//下班时间char islate;//是否迟到Y为迟到N为没有迟到char isgoearly;//是否早退days *next;}day;typedef struct emplore{char join[20];//用户名char sec[20];//用户密码emplore *next;day *next1;}emp;int findjoin(emp *head,const char *name)//通过用户名查找{char C;while(head!=NULL){if(int(strcmp(head->join,name))==0){printf("请输入用户密码:\n");return 1;//查找到对应的用户名}else{head=head->next;}}if(head==NULL){printf("此用户名不存在,您现在需要注册吗?Y注册,N不注册\n");C=getche();//scanf("%c",&C);if(C=='Y')return 2;//需要注册elsereturn 3;//不需要注册}return 0;}int insert1(emp *&head,char *name,char *mima1)//用户注册时候需要的链表????注意head要用引用哦!{emp *p;p=(emp*)malloc(sizeof(emp));if(p==NULL){printf("注册失败\n");return 0;}elseprintf("\n恭喜您注册成功\n");strcpy(p->join,name);strcpy(p->sec,mima1);p->next=head;p->next1=NULL;//重要的一步一定要初始化为NULL方便标记head=p;return 0;}int findmima(emp *head,const char *name,const char *mima1)//一定是在有用户名的情况下{while(head!=NULL){if(int(strcmp(head->join,name))==0){if(strcmp(head->sec,mima1)==0){printf("\n密码正确请选择签到还是签退:\ne签到l签退t 退出系统\n");//提供选项让用户选择签到还是签退return 0;}else{printf("\n密码错误请重新输入:");return 1;}}elsehead=head->next;}return 0;}int cometime(day *&p)//输入签早到信息并且处理信息{printf("请输入签早到时间,相信你是诚实的哦\n");scanf("%d",&(p->stime));//这个地方一定要注意,这不是C++是纯C一定要注意啊if(p->stime>8)p->isgoearly='Y';elsep->isgoearly='N';p->islate='N';//实现分开处理的必要条件printf("您已经完成签到\n");return 0;}int goouttime(day *&p)//输入签退信息并且处理信息{printf("\n请输入签退时间,相信你是诚实的哦\n");scanf("%d",&(p->gotime));if(p->gotime<18)p->islate='Y';elsep->islate='N';p->isgoearly='N';//实现分开处理的必要条件printf("您已经完成签退\n");return 0;}int insert2(emp *head,char *name,day *p)//找到本用户的头结点并插入,这里找到的head就是该用户的头结点{while(head!=NULL){if(int(strcmp(head->join,name))==0){p->next=head->next1;head->next1=p;return 0;}head=head->next;}return 0;}int findrec(emp *head,char *name)//查找用户信息{int rday=0,rlate=0,rearly=0;day *p=NULL;while(head!=NULL){if(int(strcmp(head->join,name))==0){p=head->next1;while(p!=NULL){rday++;//记录一共签到多少次if(p->isgoearly=='Y')rearly++;if(p->islate=='Y')rlate++;p=p->next;}printf("总共有记录的条数:%d\n",rday);printf("总共有记录迟到的次数:%d\n",rlate);printf("总共有记录早退的次数:%d\n",rearly);return 0;//这一步是必要的哦}head=head->next;//这一步不要忘记啊}return 0;}int findname(emp *head,char *name)//查找用户信息{while(head!=NULL){if(int(strcmp(head->join,name))==0)return 1;head=head->next;}if(head==NULL)return 0;return 0;}int delete_q(emp *p)//删除本人还有其所有的记录{day *p1,*p2;if(p==NULL)return 0;p1=p->next1;free(p);while(p1!=NULL){p2=p1;p1=p1->next;free(p2);}return 0;}int goout(emp *&p,char *name,char *mima)//用户注销,返回一注销成功删除所有记录{emp *p1;if(p==NULL){printf("\n用户名不存在或密码错误\n");return 0;}if(p->next==NULL)//一定不是不能操作{if(strcmp(p->join,name)==0&&strcmp(p->sec,mima)==0){delete_q(p);p=NULL;printf("注销成功");return 1;}else{printf("密码错误,注销失败");return 0;}}if(strcmp(p->join,name)==0){if(strcmp(p->next->join,mima)!=0){p1=p;p=p->next;delete_q(p1);//printf("册成功yue");return 1;}}p1=p;while(p1->next!=NULL){if(strcmp(p1->next->join,name)==0&&strcmp(p1->next->sec,mima)==0) {//printf("%s %s",p1->next->sec,mima);p1->next=p1->next->next;delete_q(p1->next);printf("注销成功");return 1;}p1=p1->next;}printf("注销失败\n");return 0;}int change_mima(emp *p,char *name){char a[20],b[20];if(findname(p,name)==0){printf("\n该用户名不存在");return 0;}while(p!=NULL){if(int(strcmp(p->join,name))==0){printf("请输入用户密码");scanf("%s",a);if(strcmp(p->sec,a)!=0){printf("密码错误");return 0;}else{ loop7:printf("请输入您的新密码:\n");scanf("%s",a);printf("请重新输入您的新密码:\n");scanf("%s",b);if(strcmp(a,b)!=0){printf("两次新密码不一致请重新输入:");goto loop7;}else{strcpy(p->sec,a);printf("恭喜您密码更改成功");return 1;}}}}return 0;}/////////////////////////////////////////////////////////////////int main(){printf("+_+欢迎进入-_-欣欣-_-自动签到系统+_+\n");emp *head1=NULL;char name[20],mima[20],mimayangli[20],biao,kk;day *p1=NULL;int pp=0,pp1=0,i=0;loop:pp=0;pp1=0;i=0;printf("\n按任意键进入系统:\n");getch();//暂停loop6:printf("请选择操作:\nA查询,B签到,C注册,D退出,E用户注销,G更改用户密码(不区分大小写)\n");biao=getche();if(biao=='G'||biao=='g'){printf("\n请输入您要更改密码的用户名\n");scanf("%s",name);change_mima(head1,name);goto loop6;}if(biao=='e'||biao=='E'){printf("\n请输入您的用户名:\n");scanf("%s",name);printf("请输入密码:\n");i=0;while(kk=getch()){if(kk=='\r')break;if(kk=='\b'){i--;printf("\b ");printf("\b");if(i<=0)i=0;continue;}printf("*");mima[i]=kk;i++;}mima[i]='\0';if(goout(head1,name,mima)==1)//用户注销printf("\n用户注销成功,感谢您近期的使用\n");goto loop6;}if(biao=='d'||biao=='D'){printf("\n系统已近退出请按提示操作");goto loop;}if(biao=='a'||biao=='A')printf("\n现在您正处于查询状态中\n");goto loop3;}if(biao=='c'||biao=='C')goto loop4;printf("\n请输入用户名:\n");scanf("%s",name);pp=findjoin(head1,name);if(pp==2)//如果返回值是2那么就用户注册{loop4:printf("\n请输入您的注册名:\n");scanf("%s",name);if(findname(head1 , name)==1){printf("此用户名已存在请重新确定您的注册名");goto loop4;}loop5:printf("请输入您的注册密码:\n");i=0;while(kk=getch()){if(kk=='\r')break;if(kk=='\b'){i--;printf("\b ");printf("\b");if(i<=0)i=0;continue;}printf("*");mima[i]=kk;i++;mima[i]='\0';printf("\n请再次输入您的注册密码:\n");i=0;while(kk=getch()){if(kk=='\r')break;if(kk=='\b'){i--;printf("\b ");printf("\b");if(i<=0)i=0;continue;}printf("*");mimayangli[i]=kk;i++;}mimayangli[i]='\0';if(strcmp(mima,mimayangli)==0){insert1(head1,name,mima);printf("请继续选择您需要的操作\n");goto loop6;}else{printf("\n两次密码输入不同请重新输入");goto loop5;}}if(pp==3)goto loop;//这位用户选择退出从头开始if(pp==1)//如果返回值是1那么就输入密码{loop1:i=0;while(kk=getch()){if(kk=='\r')////break;if(kk=='\b'){i--;printf("\b ");printf("\b");if(i<=0)i=0;continue;}printf("*");mima[i]=kk;i++;}mima[i]='\0';}pp1=findmima(head1,name,mima);if(pp1==1)//如果返回值是一的话那么就要用户重新输入密码跳到输入密码处goto loop1;//这里就是把每一次签到或签退的情况分开处理if(pp1==0)//在密码这正确的情况下提示用户操作{p1=(day*)malloc(sizeof(day));//p1->next=NULL;biao=getch();if(biao=='t')goto loop;//这一步用户选择退出程序跳转到开头供下一位用户选择使用if(biao=='e')//cometime(p1);//这一步完成签早到信息并判断了是否迟到if(biao=='l')goouttime(p1);//这一步完成签退信息并判断了是否早退insert2(head1,name,p1);//这一步完成向头结点插入,每次插入都是最新的位置,这一步是必须的}printf("请重新选择操作或者选择退出\n");goto loop6;loop3:printf("请输入您要查询的用户名:\n");scanf("%s",name);if(findname(head1,name)==1)//如果返回值是1那么就用户存在{findrec(head1,name);}else{printf("用户名错误或者该用户不存在请重新选择操作");printf("\n");goto loop6;}printf("查询已完成请继续选择操作或者退出\n");goto loop6;return 0;}《此程序不足》《下面有修改过的程序》#include<stdio.h>#include<stdlib.h>#include<string.h>#include<conio.h>typedef struct days{int stime;//上班时间int gotime;//下班时间char islate;//是否迟到Y为迟到N为没有迟到char isgoearly;//是否早退days *next;}day;typedef struct emplore{char join[20];//用户名char sec[20];//用户密码emplore *next;day *next1;}emp;int findjoin(emp *head,const char *name)//通过用户名查找{char C;while(head!=NULL){if(int(strcmp(head->join,name))==0){printf("请输入用户密码(输入#表示密码输入结束):\n");return 1;//查找到对应的用户名}else{head=head->next;}}if(head==NULL){printf("此用户名不存在,您现在需要注册吗?Y注册,N不注册\n");C=getche();//scanf("%c",&C);if(C=='Y')return 2;//需要注册elsereturn 3;//不需要注册}return 0;}int insert1(emp *&head,char *name,char *mima1)//用户注册时候需要的链表????注意head要用引用哦!{emp *p;p=(emp*)malloc(sizeof(emp));if(p==NULL){printf("注册失败\n");return 0;}elseprintf("\n恭喜您注册成功\n");strcpy(p->join,name);strcpy(p->sec,mima1);p->next=head;p->next1=NULL;//重要的一步一定要初始化为NULL方便标记head=p;return 0;}int findmima(emp *head,const char *name,const char *mima1)//一定是在有用户名的情况下{while(head!=NULL){if(int(strcmp(head->join,name))==0){if(strcmp(head->sec,mima1)==0){printf("\n密码正确请选择签到还是签退:\ne签到l签退t退出系统\n");//提供选项让用户选择签到还是签退return 0;}else{printf("\n密码错误请重新输入:");return 1;}}elsehead=head->next;}return 0;}int cometime(day *&p)//输入签早到信息并且处理信息{printf("请输入签早到时间,相信你是诚实的哦\n");scanf("%d",&(p->stime));//这个地方一定要注意,这不是C++是纯C一定要注意啊if(p->stime>8)p->isgoearly='Y';elsep->isgoearly='N';p->islate='N';//实现分开处理的必要条件printf("您已经完成签到\n");return 0;}int goouttime(day *&p)//输入签退信息并且处理信息{printf("\n请输入签退时间,相信你是诚实的哦\n");scanf("%d",&(p->gotime));if(p->gotime<18)p->islate='Y';elsep->islate='N';p->isgoearly='N';//实现分开处理的必要条件printf("您已经完成签退\n");return 0;}int insert2(emp *head,char *name,day *p)//找到本用户的头结点并插入,这里找到的head就是该用户的头结点{while(head!=NULL){if(int(strcmp(head->join,name))==0){p->next=head->next1;head->next1=p;return 0;}}return 0;}int findrec(emp *head,char *name)//查找用户信息{int rday=0,rlate=0,rearly=0;day *p=NULL;while(head!=NULL){if(int(strcmp(head->join,name))==0){p=head->next1;while(p!=NULL){rday++;//记录一共签到多少次if(p->isgoearly=='Y')rearly++;if(p->islate=='Y')rlate++;p=p->next;}printf("总共有记录的条数:%d\n",rday);printf("总共有记录迟到的次数:%d\n",rlate);printf("总共有记录早退的次数:%d\n",rearly);return 0;//这一步是必要的哦}head=head->next;//这一步不要忘记啊}return 0;}int findname(emp *head,char *name)//查找用户信息{while(head!=NULL){if(int(strcmp(head->join,name))==0)return 1;head=head->next;}if(head==NULL)return 0;return 0;}///////////////////////////////////////////////////////////////// int main(){printf("+_+欢迎进入-_-欣欣-_-自动签到系统+_+\n");emp *head1=NULL;char name[20],mima[20],mimayangli[20],biao,kk;day *p1=NULL;int pp=0,pp1=0,i=0;loop:pp=0;pp1=0;i=0;printf("\n按任意键进入系统:\n");getch();//暂停printf("请选择操作:A查询,B签到,C注册,D退出(不区分大小写)\n");biao=getche();if(biao=='d'||biao=='D'){printf("\n系统已近退出请按提示操作");goto loop;}if(biao=='a'||biao=='A')goto loop3;if(biao=='c'||biao=='C')goto loop4;printf("\n请输入用户名:\n");scanf("%s",name);pp=findjoin(head1,name);if(pp==2)//如果返回值是2那么就用户注册{loop4:printf("\n请输入您的注册名:\n");scanf("%s",name);if(findname(head1 , name)==1){printf("此用户名已存在请重新确定您的注册名");goto loop4;}loop5:printf("请输入您的注册密码(输入到#表示密码输入完成):\n");i=0;while(kk=getch()){if(kk=='#')break;printf("*");mima[i]=kk;i++;}mima[i]='\0';printf("\n请再次输入您的注册密码(输入到#表示密码输入完成):\n");i=0;while(kk=getch()){if(kk=='#')break;printf("*");mimayangli[i]=kk;i++;}mimayangli[i]='\0';if(strcmp(mima,mimayangli)==0){insert1(head1,name,mima);printf("系统已经退出,想继续进入系统请重新开始\n");goto loop;}else{printf("\n两次密码输入不同请重新输入");goto loop5;}}if(pp==3)goto loop;//这位用户选择退出从头开始if(pp==1)//如果返回值是1那么就输入密码{loop1:i=0;while(kk=getch()){if(kk=='#')break;printf("*");mima[i]=kk;i++;}mima[i]='\0';}pp1=findmima(head1,name,mima);if(pp1==1)//如果返回值是一的话那么就要用户重新输入密码跳到输入密码处goto loop1;//这里就是把每一次签到或签退的情况分开处理if(pp1==0)//在密码这正确的情况下提示用户操作{p1=(day*)malloc(sizeof(day));//p1->next=NULL;biao=getch();if(biao=='t')goto loop;//这一步用户选择退出程序跳转到开头供下一位用户选择使用if(biao=='e')//cometime(p1);//这一步完成签早到信息并判断了是否迟到if(biao=='l')goouttime(p1);//这一步完成签退信息并判断了是否早退insert2(head1,name,p1);//这一步完成向头结点插入,每次插入都是最新的位置,这一步是必须的}printf("系统已经退出,想继续进入系统请重新开始\n");goto loop;loop3:printf("请输入用户名:\n");scanf("%s",name);if(findname(head1,name)==1)//如果返回值是1那么就用户存在{findrec(head1,name);}else{printf("用户名错误或者该用户不存在\n");printf("系统已经退出,想继续进入系统请重新开始\n");goto loop;}printf("系统已经退出,想继续进入系统请重新开始\n");goto loop;return 0;}《修改过的较好的程序》#include<stdio.h>#include<stdlib.h>#include<string.h>#include<conio.h>typedef struct days{int stime;//上班时间int gotime;//下班时间char islate;//是否迟到Y为迟到N为没有迟到char isgoearly;//是否早退days *next;}day;typedef struct emplore{char join[20];//用户名char sec[20];//用户密码emplore *next;day *next1;}emp;int findjoin(emp *head,const char *name)//通过用户名查找{char C;while(head!=NULL){if(int(strcmp(head->join,name))==0){printf("请输入用户密码(输入#表示密码输入结束):\n");return 1;//查找到对应的用户名}else{head=head->next;}}if(head==NULL){printf("此用户名不存在,您现在需要注册吗?Y注册,N不注册\n");C=getche();//scanf("%c",&C);if(C=='Y')return 2;//需要注册elsereturn 3;//不需要注册}return 0;}int insert1(emp *&head,char *name,char *mima1)//用户注册时候需要的链表????注意head要用引用哦!{emp *p;p=(emp*)malloc(sizeof(emp));if(p==NULL){printf("注册失败\n");return 0;}elseprintf("\n恭喜您注册成功\n");strcpy(p->join,name);strcpy(p->sec,mima1);p->next=head;p->next1=NULL;//重要的一步一定要初始化为NULL方便标记head=p;return 0;}int findmima(emp *head,const char *name,const char *mima1)//一定是在有用户名的情况下{while(head!=NULL){if(int(strcmp(head->join,name))==0){if(strcmp(head->sec,mima1)==0){printf("\n密码正确请选择签到还是签退:\ne签到l签退t退出系统\n");//提供选项让用户选择签到还是签退return 0;}else{printf("\n密码错误请重新输入:");return 1;}}elsehead=head->next;}return 0;}int cometime(day *&p)//输入签早到信息并且处理信息{printf("请输入签早到时间,相信你是诚实的哦\n");scanf("%d",&(p->stime));//这个地方一定要注意,这不是C++是纯C一定要注意啊if(p->stime>8)p->isgoearly='Y';elsep->isgoearly='N';p->islate='N';//实现分开处理的必要条件printf("您已经完成签到\n");return 0;}int goouttime(day *&p)//输入签退信息并且处理信息{printf("\n请输入签退时间,相信你是诚实的哦\n");scanf("%d",&(p->gotime));if(p->gotime<18)p->islate='Y';elsep->islate='N';p->isgoearly='N';//实现分开处理的必要条件printf("您已经完成签退\n");return 0;}int insert2(emp *head,char *name,day *p)//找到本用户的头结点并插入,这里找到的head就是该用户的头结点{while(head!=NULL){if(int(strcmp(head->join,name))==0){p->next=head->next1;head->next1=p;return 0;}head=head->next;}return 0;}int findrec(emp *head,char *name)//查找用户信息{int rday=0,rlate=0,rearly=0;day *p=NULL;while(head!=NULL){if(int(strcmp(head->join,name))==0){p=head->next1;while(p!=NULL){rday++;//记录一共签到多少次if(p->isgoearly=='Y')rearly++;if(p->islate=='Y')rlate++;p=p->next;}printf("总共有记录的条数:%d\n",rday);printf("总共有记录迟到的次数:%d\n",rlate);printf("总共有记录早退的次数:%d\n",rearly);return 0;//这一步是必要的哦}head=head->next;//这一步不要忘记啊}return 0;}int findname(emp *head,char *name)//查找用户信息{while(head!=NULL){if(int(strcmp(head->join,name))==0)return 1;head=head->next;}if(head==NULL)return 0;return 0;}/////////////////////////////////////////////////////////////////int main(){printf("+_+欢迎进入-_-欣欣-_-自动签到系统+_+\n");emp *head1=NULL;char name[20],mima[20],mimayangli[20],biao,kk;day *p1=NULL;int pp=0,pp1=0,i=0;loop:pp=0;pp1=0;i=0;printf("\n按任意键进入系统:\n");getch();//暂停loop6:printf("请选择操作:A查询,B签到,C注册,D退出(不区分大小写)\n");biao=getche();if(biao=='d'||biao=='D'){printf("\n系统已近退出请按提示操作");goto loop;}if(biao=='a'||biao=='A'){printf("\n现在您正处于查询状态中\n");goto loop3;}if(biao=='c'||biao=='C')goto loop4;printf("\n请输入用户名:\n");scanf("%s",name);pp=findjoin(head1,name);if(pp==2)//如果返回值是2那么就用户注册{loop4:printf("\n请输入您的注册名:\n");scanf("%s",name);if(findname(head1 , name)==1){printf("此用户名已存在请重新确定您的注册名");goto loop4;}loop5:printf("请输入您的注册密码(输入到#表示密码输入完成):\n");i=0;while(kk=getch()){if(kk=='#')break;printf("*");mima[i]=kk;i++;}mima[i]='\0';printf("\n请再次输入您的注册密码(输入到#表示密码输入完成):\n");i=0;while(kk=getch()){if(kk=='#')break;mimayangli[i]=kk;i++;}mimayangli[i]='\0';if(strcmp(mima,mimayangli)==0){insert1(head1,name,mima);printf("请继续选择您需要的操作\n");goto loop6;}else{printf("\n两次密码输入不同请重新输入");goto loop5;}}if(pp==3)goto loop;//这位用户选择退出从头开始if(pp==1)//如果返回值是1那么就输入密码{loop1:i=0;while(kk=getch()){if(kk=='#')break;printf("*");mima[i]=kk;i++;}mima[i]='\0';}pp1=findmima(head1,name,mima);if(pp1==1)//如果返回值是一的话那么就要用户重新输入密码跳到输入密码处goto loop1;//这里就是把每一次签到或签退的情况分开处理if(pp1==0)//在密码这正确的情况下提示用户操作{p1=(day*)malloc(sizeof(day));//p1->next=NULL;if(biao=='t')goto loop;//这一步用户选择退出程序跳转到开头供下一位用户选择使用if(biao=='e')//cometime(p1);//这一步完成签早到信息并判断了是否迟到if(biao=='l')goouttime(p1);//这一步完成签退信息并判断了是否早退insert2(head1,name,p1);//这一步完成向头结点插入,每次插入都是最新的位置,这一步是必须的}printf("请重新选择操作或者选择退出\n");goto loop6;loop3:printf("请输入您要查询的用户名:\n");scanf("%s",name);if(findname(head1,name)==1)//如果返回值是1那么就用户存在{findrec(head1,name);}else{printf("用户名错误或者该用户不存在请重新选择操作");printf("\n");goto loop6;}printf("查询已完成请继续选择操作或者退出\n");goto loop6;return 0;}《所有基本上都改好》#include<stdio.h>#include<stdlib.h>#include<string.h>#include<conio.h>typedef struct days{int stime;//上班时间int gotime;//下班时间char islate;//是否迟到Y为迟到N为没有迟到char isgoearly;//是否早退days *next;}day;typedef struct emplore{char join[20];//用户名char sec[20];//用户密码emplore *next;day *next1;}emp;int findjoin(emp *head,const char *name)//通过用户名查找{char C;while(head!=NULL){if(int(strcmp(head->join,name))==0){printf("请输入用户密码:\n");return 1;//查找到对应的用户名}else{head=head->next;}}if(head==NULL){printf("此用户名不存在,您现在需要注册吗?Y注册,N不注册\n");C=getche();//scanf("%c",&C);if(C=='Y')return 2;//需要注册elsereturn 3;//不需要注册}return 0;}int insert1(emp *&head,char *name,char *mima1)//用户注册时候需要的链表????注意head要用引用哦!{emp *p;p=(emp*)malloc(sizeof(emp));if(p==NULL){printf("注册失败\n");return 0;}elseprintf("\n恭喜您注册成功\n");strcpy(p->join,name);strcpy(p->sec,mima1);p->next=head;p->next1=NULL;//重要的一步一定要初始化为NULL方便标记head=p;return 0;}int findmima(emp *head,const char *name,const char *mima1)//一定是在有用户名的情况下{while(head!=NULL){if(int(strcmp(head->join,name))==0){if(strcmp(head->sec,mima1)==0){printf("\n密码正确请选择签到还是签退:\ne签到l签退t退出系统\n");//提供选项让用户选择签到还是签退return 0;}else{printf("\n密码错误请重新输入:");return 1;}}elsehead=head->next;}return 0;}int cometime(day *&p)//输入签早到信息并且处理信息{printf("请输入签早到时间,相信你是诚实的哦\n");scanf("%d",&(p->stime));//这个地方一定要注意,这不是C++是纯C一定要注意啊if(p->stime>8)p->isgoearly='Y';elsep->isgoearly='N';p->islate='N';//实现分开处理的必要条件printf("您已经完成签到\n");return 0;}int goouttime(day *&p)//输入签退信息并且处理信息{printf("\n请输入签退时间,相信你是诚实的哦\n");scanf("%d",&(p->gotime));if(p->gotime<18)p->islate='Y';elsep->islate='N';p->isgoearly='N';//实现分开处理的必要条件printf("您已经完成签退\n");return 0;}int insert2(emp *head,char *name,day *p)//找到本用户的头结点并插入,这里找到的head就是该用户的头结点{while(head!=NULL){if(int(strcmp(head->join,name))==0){p->next=head->next1;head->next1=p;return 0;}head=head->next;}return 0;}int findrec(emp *head,char *name)//查找用户信息{int rday=0,rlate=0,rearly=0;day *p=NULL;while(head!=NULL){if(int(strcmp(head->join,name))==0){p=head->next1;while(p!=NULL){rday++;//记录一共签到多少次if(p->isgoearly=='Y')rearly++;if(p->islate=='Y')rlate++;p=p->next;}printf("总共有记录的条数:%d\n",rday);printf("总共有记录迟到的次数:%d\n",rlate);printf("总共有记录早退的次数:%d\n",rearly);return 0;//这一步是必要的哦}head=head->next;//这一步不要忘记啊}return 0;}int findname(emp *head,char *name)//查找用户信息{while(head!=NULL){if(int(strcmp(head->join,name))==0)return 1;head=head->next;}if(head==NULL)return 0;return 0;}/////////////////////////////////////////////////////////////////int main(){printf("+_+欢迎进入-_-欣欣-_-自动签到系统+_+\n");emp *head1=NULL;char name[20],mima[20],mimayangli[20],biao,kk;day *p1=NULL;int pp=0,pp1=0,i=0;loop:pp=0;pp1=0;i=0;printf("\n按任意键进入系统:\n");getch();//暂停loop6:printf("请选择操作:A查询,B签到,C注册,D退出(不区分大小写)\n");biao=getche();if(biao=='d'||biao=='D'){printf("\n系统已近退出请按提示操作");goto loop;}if(biao=='a'||biao=='A'){printf("\n现在您正处于查询状态中\n");goto loop3;}if(biao=='c'||biao=='C')goto loop4;printf("\n请输入用户名:\n");scanf("%s",name);pp=findjoin(head1,name);if(pp==2)//如果返回值是2那么就用户注册{loop4:printf("\n请输入您的注册名:\n");scanf("%s",name);if(findname(head1 , name)==1){printf("此用户名已存在请重新确定您的注册名");goto loop4;}loop5:printf("请输入您的注册密码:\n");i=0;while(kk=getch()){if(kk=='\r')break;if(kk=='\b'){i--;printf("\b ");printf("\b");if(i<=0)i=0;continue;}printf("*");mima[i]=kk;i++;}mima[i]='\0';printf("\n请再次输入您的注册密码:\n");i=0;while(kk=getch()){if(kk=='\r')break;if(kk=='\b'){i--;printf("\b ");printf("\b");if(i<=0)i=0;continue;}printf("*");mimayangli[i]=kk;i++;}mimayangli[i]='\0';if(strcmp(mima,mimayangli)==0){insert1(head1,name,mima);printf("请继续选择您需要的操作\n");goto loop6;}else{printf("\n两次密码输入不同请重新输入");goto loop5;}}if(pp==3)goto loop;//这位用户选择退出从头开始if(pp==1)//如果返回值是1那么就输入密码{loop1:i=0;while(kk=getch()){if(kk=='\r')////break;if(kk=='\b'){i--;printf("\b ");printf("\b");if(i<=0)i=0;continue;}printf("*");mima[i]=kk;i++;}mima[i]='\0';}pp1=findmima(head1,name,mima);if(pp1==1)//如果返回值是一的话那么就要用户重新输入密码跳到输入密码处goto loop1;//这里就是把每一次签到或签退的情况分开处理if(pp1==0)//在密码这正确的情况下提示用户操作{p1=(day*)malloc(sizeof(day));//p1->next=NULL;biao=getch();if(biao=='t')goto loop;//这一步用户选择退出程序跳转到开头供下一位用户选择使用if(biao=='e')//cometime(p1);//这一步完成签早到信息并判断了是否迟到if(biao=='l')goouttime(p1);//这一步完成签退信息并判断了是否早退insert2(head1,name,p1);//这一步完成向头结点插入,每次插入都是最新的位置,这一步是必须的}printf("请重新选择操作或者选择退出\n");goto loop6;loop3:printf("请输入您要查询的用户名:\n");scanf("%s",name);if(findname(head1,name)==1)//如果返回值是1那么就用户存在{findrec(head1,name);}else{printf("用户名错误或者该用户不存在请重新选择操作");printf("\n");goto loop6;}printf("查询已完成请继续选择操作或者退出\n");。

相关文档
最新文档