人员签到管理系统
- 格式:doc
- 大小:173.50 KB
- 文档页数:38
考勤管理系统使用说明考勤管理系统使用说明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、规范性:通过考勤管理系统的自动化操作,规范化了员工考勤行为和出勤规律,促进了企业管理的规范化。
5、安全性:考勤管理系统的数据存储在计算机中,在保证备份和安全防范的前提下,保证了数据的安全性。
三、考勤管理系统的实际应用考勤管理系统的实际应用可以从以下方面展开:1、劳动力成本控制:通过考勤管理系统的数据分析功能,可以发现员工出勤率低、加班时间过长、迟到早退等不良出勤情况,及时调整员工工作时间,有效控制劳动力成本。
学校考勤管理系统
1.系统概述
考勤管理系统是校园一卡通应用中的一种常见的系统。
考勤管理系统由考勤终端机具、交换机、管理工作站和各种服务器构成。
考勤终端机具安装在各考勤点,使用有线或无线的方式接入网络,考勤数据通过网络实时主动上传到服务器端。
考勤系统的原理是,利用持卡人在考勤终端上刷卡,从而记录刷卡人的信息以及刷卡的时间信息,考勤软件根据设定的班次规则计算得出人员出勤的信息,得到人员的出勤报表。
管理人员通过安装在工作站上的管理程序,可以查询指定人员的考勤明细数据、统计数据以及分析数据。
2.系统功能
考勤管理子系统具备以下功能:
➢考勤制度设定
根据用户的需要和实际情况,可任意设定符合自己的作息制度,例如法定假日、各类事假、轮休、上下班班次设定。
➢考勤排班
对员工班次可以根据规律,例如每周循环、每天循环、定期循环等做自动套用设定,这样可以快速、智能的对员工班次进行设置。
同时支持对跨天、跨班次、加班等异常出勤的自动处理。
➢手工签到处理
对于种种特殊原因,不能刷卡签到的,可以通过管理人员手工输入上班时间代替签卡;对请假、出差等,也采用类似签到方式,能够起到刷卡考勤相同的作用.
➢考勤结果分析处理
通常情况下,存储于考勤机中的数据由管理软件自动采集,加以处理后,可
形成完整的报表用以打印输出,完全不用专人管理。
➢信息查询及管理
可以对人员出勤、部门出勤、人员打卡种种情况进行细致的查询、并且加以统计,再以自己预先设定的格式打印输出报表,在检索时,能够根据人员卡号、指定日期、部门进行。
该报表完全可以用来做为薪资计算的可靠依据。
会务服务签到系统一.系统概述会议签到系统,是专门为政府(党政、人大、政协等)、高校、大中型企事业单位的会务部门,高效、有序、可管理化地组织实施规模化会议而量身定制一套智能化系统。
系统集成集合各种新兴的硬、软件,实现会议管理自动化。
系统采用了目前最先进的非接触IC卡技术,与会人员在会议签到器的感应区内出示会议卡,便可完成会议签到操作。
它不仅仅省却了会议主办者的会议签到、到会人员统计等无益的劳动,实时显示到会情况、查询统计、会后管理,大大提高了行政效率。
RFID会议无障碍身份识别系统,以高防伪、远距离识别的RFID技术为核心,辅以数码摄像和红外感应技术,满足了现代化大型会议对身份识别及签到等管理工作的需求;特别适合用于一些高级、重要的大型会议上,这类大型会议参会人员都具有一定的身份,如果采用传统刷卡签到的模式,在礼节和方便性上将完全不可取,且不够人性化;本系统改变了以往传统刷卡的管理模式,以全新的无障碍开放式通道模式,当与会人员佩戴代表证通过时,无需主动刷卡,系统将自动识别并记录通过人员的信息。
由于系统采用开放式通道模式,无需主动刷卡,大大提高了人员通行速度,系统设计更人性化。
会议签到系统是整个会议系统必不可少的部分,随着计算机技术的发展,传统的会议签到方式也逐渐电子化。
我们推出的会议签到系统(含政府会议签到系统、企事业单位会议签到系统、大型团体会议签到系统等)是多媒体会议系统的组成部分。
会议签到系统是为了实现各政府、机关、企事业单位所召开会议的签到数据采集、数据统计信息查询过程自动化,实现会议管理自动化专门研制的所开发的非接触射频卡会议签到系统,去除了以往人工使用签到表的签到制度,本系统采用了目前最先进的非接触RFID签到技术,与会人员只需通过会签机区域,便可快速同时完成多人会议签到操作,实现远距离签到工作。
它方便了参会人员的出席签到、会议管理人员的统计和查询;为有效地掌握、管理参会人员出入和出席情况提供了轻松的解决方案。
科密a1考勤管理系统科密A1考勤管理系统是一套集考勤、考勤统计、假期管理、工资核算等多种功能于一身的人力资源管理软件。
它采用先进的计算机技术,为企业提供完整、准确、高效的考勤管理服务。
科密A1考勤管理系统的设计目标是帮助企业和员工实现相互共赢的目标。
对于企业来说,它能够实现自动化考勤、减少人工成本、提高工作效率、精细管理员工信息、提高企业管理水平。
对于员工来说,它能够提供方便快捷的考勤方式、提供准确的考勤信息、方便员工自主申请假期、提供高效的工资核算。
科密A1考勤管理系统最重要的功能之一是自动化考勤。
企业只需在系统中添加员工信息,员工可以使用自己的账户和密码登录系统进行签到,签退,迟到,早退等信息的记录。
企业可以根据员工签到信息在后台统计迟到早退情况,方便管理人员对员工的工作纪律进行监督和管理。
此外,系统还支持异常考勤处理。
如果员工因病请假或因公外出等原因无法按时到达工作岗位,管理人员可以通过系统的请假申请和外出申请功能,对员工的请假或外出进行审批,保证员工的权益得到充分保障。
同时,系统还可以支持加班和补班的考勤管理,满足企业各类工作安排的需求。
科密A1考勤管理系统还提供假期管理功能,包括年假、病假、事假等各类型别的假期处理及管理,自动累计假期余额和消耗量并提醒员工使用剩余假期,管理人员还可以实时查看员工已用和剩余的假期情况,方便助理管理人员对假期情况进行管理。
从工资核算角度来看,科密A1考勤管理系统可以自动根据考勤数据进行工资计算,同时还支持年度个人所得税个人申报,方便企业对员工工资的核算和管理。
总之,科密A1考勤管理系统是一套高度自动化、效率高、专业化、全面化的人力资源管理软件,具有简单直观易操作的优点,能够大幅度增强企业内部管理效率和员工工作质量,为企业和员工提供更好的服务,推动企业持续创新发展和优秀员工的持续成长。
会议签到系统介绍会议签到系统是一种方便、高效的管理工具,可以用于会议、培训、活动等场合的参与者签到和数据记录。
通过使用会议签到系统,可以实现自动化的签到过程,提高工作效率,减少人力资源的投入。
会议签到系统的功能主要包括以下几个方面:参与者信息管理、签到管理、数据统计与分析。
首先,会议签到系统可以方便地管理与会者的信息,包括姓名、单位、职务等。
这些信息可以提前录入系统,也可以在现场进行录入。
通过系统的参与者信息管理功能,可以实现对参与者信息的快速查询和更新。
会议签到系统可以实现签到管理的自动化。
与传统的纸质签到相比,会议签到系统可以大大简化签到的流程。
参与者只需通过扫描二维码或输入个人信息即可完成签到。
签到系统可以实时记录参与者的签到时间和地点,并生成签到报表,方便会议组织者进行后续统计和分析。
会议签到系统还可以提供数据统计与分析的功能。
通过对签到数据的统计和分析,可以了解参与者的人数分布、单位分布等情况。
这些数据可以帮助会议组织者评估会议的参与度和效果,为下一次会议的策划和组织提供参考依据。
同时,签到系统还可以实现参与者的实时互动和反馈,增强会议的参与感和互动性。
会议签到系统的优点主要体现在以下几个方面:首先,会议签到系统可以大大节省签到的时间和人力成本。
传统的纸质签到需要人工核对参与者的信息,耗时且易出错。
而会议签到系统可以实现自动化的签到过程,减少了人工干预的机会,提高了签到的准确性和效率。
会议签到系统可以提高会议的组织和管理水平。
通过系统化的参与者信息管理和签到管理,可以更好地掌握会议的参与者情况和签到情况。
会议组织者可以根据签到数据进行统计和分析,及时调整会议的策划和安排,提高会议的质量和效果。
会议签到系统可以提供更好的参与者体验和互动性。
参与者只需简单地扫描二维码或输入个人信息即可完成签到,省去了繁琐的手动操作。
同时,签到系统还可以实现实时互动和反馈,使参与者更加积极主动地参与会议和活动。
签到系统设计方案签到系统设计方案签到系统是一种用于记录人员签到情况的系统,一般应用于公司、学校、考试等场景。
以下是一个基于电子设备的签到系统设计方案。
1. 系统概述该签到系统利用电子设备(如智能手机、平板电脑、电脑等)作为签到终端,通过扫描二维码或输入指定的签到码来完成签到操作。
系统将签到记录存储于服务器数据库中,管理人员可以通过网页或手机应用程序查看签到情况。
2. 系统架构该签到系统主要由签到终端、服务器和数据库三部分组成。
签到终端负责与用户进行交互,服务器负责处理签到请求和数据存储,数据库用于存储签到记录。
3. 签到终端设计用户可以通过扫描二维码或输入指定的签到码来完成签到操作。
签到终端软件应支持跨平台,如适用于Android、iOS等主流操作系统。
用户在签到过程中,软件应提供实时的签到信息反馈,如签到成功提示、签到时间显示等。
签到终端还应支持离线签到功能,即用户在没有网络连接的情况下,签到信息会在网络恢复后自动上传至服务器。
4. 服务器设计服务器应提供签到请求的接收和处理功能。
在接收到签到请求后,服务器会对签到码进行验证,检查签到码是否有效。
服务器还会记录签到人员的基本信息和签到时间,并将签到记录存储于数据库中。
服务器还应提供统计功能,可以按照时间、地点、人员等维度生成签到报表。
5. 数据库设计数据库主要用于存储签到记录。
数据库应设计表结构来存储签到人员的基本信息,包括姓名、工号/学号、联系方式等;签到时间和地点;签到码等信息。
签到记录表还可以添加一些冗余字段,如签到方式(通过扫描二维码或输入签到码)、签到状态(正常签到、迟到、早退等)。
6. 管理端设计管理人员可以通过网页或手机应用程序来管理签到系统。
管理端应提供用户管理、签到数据管理、统计报表生成等功能。
管理端还可以支持推送功能,当发现异常情况(如人员未签到)时,可以通过邮件、短信等方式通知相关人员。
7. 安全性设计为保证签到系统的安全性,系统应采取一些安全措施。
考勤管理系统1)系统概况考勤系统主要包括考勤设置和考勤记录的统计与输出,快速输出企业的工作量情况。
考勤系统不仅限于简单的上下班签到,对于企业的规范化管理更是至关重要。
目前大部分厂家的签到数据已经不局限于考勤系统中的自有数据,更是兼容了出入、通道、车辆道闸等员工在公司内部有效行为产生的数据。
通过可靠的签到终端和后台管理系统,实现企事业单位员工上下班时的签到记录可查,保障员工在工作时间和区域内的安全健康;通过分析统计呈现员工的工作时长,对人力资源进行有效运用,满足当前及未来发展的需要,保证组织目标实现与成员发展的最大化。
另一方面,通过考勤系统的约束,可有效改变人性的懒惰、上班拖沓等现象,让员工养成优秀的习惯,将更好的状态带入工作中去,提升工作效率。
系统通过TCP/IP或无线通讯完成终端与后台的数据交互,签到规则通过后台传送到终端,部分判断直接由终端处理,减轻服务器负担;同时支持多种识别方式终端,待机状态可显示公司宣传文字或多媒体信息,签到时显示人员档案照片和现场照片,识别成功后将数据上传到服务器进行存储,进行分析统计,同时以备日后对数据的可靠性进行核对。
2)业务流程考勤系统分为考勤终端和后台管理两部分,终端依照预订的签到规则,在既定时段与范围内允许员工签到,反馈员工签到成功或其他提示,并将签到数据传输到数据库统一存储。
后台管理系统进行考勤规则设置、员工排班、数据分析,呈现相关的工时统计及异常结果分析等。
管理员在确认员工班次后,登陆考勤管理后台设置公司考勤规则及员工排班,员工在终端签到后,签到记录实时通过TCP/IP传至数据库进行存储,需要查看统计报表时,管理员对记录进行数据分析操作,记录按照预设的考勤规则和排班进行分析,最终结果呈现在不同的考勤报表中,完成考勤结果统计。
3)系统拓扑图系统通过TCP/IP或无线通讯完成终端与后台的数据交互,签到规则通过后台传送到终端,部分判断直接由终端处理,减轻服务器负担;同时支持多种识别方式终端,待机状态可显示公司宣传文字或多媒体信息,签到时显示人员档案照片和现场照片,识别成功后将数据上传到服务器进行存储,进行分析统计,同时以备日后对数据的可靠性进行核对。
全易通人事考勤管理系统软件操作流程图一、系统登录与权限设置1. 用户登录a. 打开全易通人事考勤管理系统软件。
b. 输入正确的用户名和密码。
c. 点击“登录”按钮。
2. 权限设置a. 登录系统后,管理员进入系统设置页面。
b. 在权限设置中,可以添加、修改或删除用户权限。
c. 确定每个用户的操作权限,如查看、新增、修改、删除等。
二、基础数据管理1. 员工管理a. 点击“员工管理”模块。
b. 输入员工信息,如姓名、性别、部门等。
c. 点击“保存”按钮。
2. 部门管理a. 进入部门管理页面。
b. 添加、修改或删除部门信息。
c. 确定每个部门的权限设置。
三、考勤管理1. 考勤规则设置a. 进入考勤规则设置页面。
b. 设定考勤规则,如上班时间、下班时间、迟到早退限定等。
c. 确认设置后保存。
2. 签到打卡a. 员工在上班时间内打开全易通人事考勤管理系统软件。
b. 点击“签到打卡”按钮。
c. 系统记录员工的签到时间并实时更新。
3. 请假申请a. 员工进入请假申请页面。
b. 选择请假类型、请假日期和请假事由。
c. 提交申请,等待审批结果。
4. 加班申请a. 员工进入加班申请页面。
b. 选择加班日期和加班时长。
c. 提交申请,等待审批结果。
5. 考勤记录查询a. 员工或管理员进入考勤记录查询页面。
b. 输入查询条件,如日期范围、员工姓名等。
c. 系统显示符合条件的考勤记录列表。
四、报表与统计分析1. 考勤统计报表a. 管理员进入考勤统计报表页面。
b. 选择统计日期范围和部门。
c. 生成考勤统计报表,包括迟到早退次数、请假次数等数据。
2. 人事分析报告a. 管理员进入人事分析报告页面。
b. 选择分析范围和关键指标,如员工流失率、出勤率等。
c. 生成人事分析报告,供管理决策参考。
五、系统管理与设置1. 数据备份与恢复a. 在系统管理页面选择数据备份与恢复功能。
b. 点击“备份”按钮,将系统数据备份到指定位置。
c. 需要时,可通过“恢复”功能将备份数据还原到系统。
《我的第一个管理系统》这是我的第一个人员签到签出管理系统。
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;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=='#')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 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");goto loop6;return 0;}。