人事管理系统毕业论文.docx
人事管理系统摘要:在企业中,人事管理工作是非常重要的一项工作,它负责整个企业的日常人事安排,人员的人事管理等。高效的人事管理可以提高企业的市场竞争力,使企业具有更强的凝聚力和活力。为此,提高人事管理工作的效率,设计一套人事管理系统具有实际应用意义。 本文以JSP和MySQL 为开发工具,设计实现了一套基于web中小企业人事管理系统。在文中,首先分析了企业人事管理工作以及工作流程,根据分析结果设计了该系统应具有的功能;其次,对系统的各个功能模块进行了详细的描述,包括用户登录模块、留言板模块、人事部门信息发布模块、系统设置模块、员工管理模块、员工自助模块和操作记录模块;最后结合系统开发阶段和测试阶段中发现的问题以及解决问题的方法,总结了开发此系统所取得的经验和体会。 关键词:人事管理; JSP; MySQL .Abstract:In the enterprise, the personnel management is a very important job, it is responsible for the whole enterprise daily personnel arrangement, personnel management, etc. Efficient hr management can enhance the enterprise market competitiveness, make enterprise has stronger cohesion and vitality. Therefore, improve the efficiency of the personnel management, personnel management system designed a set of practical significance.Taking JSP and MySQL for development tools, designed and implemented a system based on web of small and medium-sized enterprise personnel management system. In this paper, firstly analyzes the business enterprise personal management work and work flow, according to the results of analysis designed this system should have function; Secondly, the system modules are described, including user login module, message board module, the personnel department information release module, system Settings module, staff management module, employees self-help module and operation records module; Based on the system development stage and the problems found in the testing phase and the methods to solve the problems, the total had developed the system has experience and experience. Keyword:personal administration;JSP;MySQL;目录人事管理系统1第一章 绪论31.1引言31.2项目研究背景31.3项目研究意义41.4系统概述41.5JSP概述51.6log4j概述61.7JSP运行环境61.8JDK 1.6与Tomcat 6.0安装与配置7第二章 系统分析与设计82.1 需求分析82.2 可行性分析82.2.1 经济可行性82.2.2 技术可行性82.2.3 操作可行性82.3 总体设计82.3.1 项目规划92.3.2 系统功能结构图92.3.3 具体系统功能需求描述92.4 系统数据库设计102.4.1 数据库E-R图102.4.2 数据库各实体图设计102.4.3 数据库表设计12第三章 详细设计143.1 登录模块设计143.2 员工基本信息模块153.2.1 查询员工基本信息163.2.2 增加员工基本信息163.2.3 修改员工基本信息163.2.4 删除员工基本信息163.3 操作日志模块17第四章 调试与测试184.1程序调试184.2 程序测试184.2.1 程序测试的重要性和目的184.2.2 测试方法设计184.2.3 测试的用例设计194.3 存在的问题及改进方法20第五章 总结20参考文献21致谢21第一章 绪论1.1 引言在当前的信息化管理浪潮下,我国的人事管理模式由传统的手工业务办理模式渐进的转向信息化,现代化的高效管理模式。在民政部门的大力支持下,宏达软件结合人事办公管理的实际情况和实践操作研发的新一代人事管理系统,使一直沿袭传统办公模式而产生的管理效率较低,经营管理水平相对滞后等现象得以改善;而这种新型的办公业务流程自动化、智能分析、科学宏观的管理模式已经成为各个单位的必然需求。1.2 项目研究背景人事管理系统的发展历史可以追溯到20世纪60年代末期。由于当时计算机技术已经进入实用阶段,同时大型企业用手工来计算和发放薪资既费时费力又非常容易出差错,为了解决这个矛盾,第一代的人事管理系统应运而生。当时由于技术条件和需求的限制,用户非常少,而且那种系统充其量也只不过是一种自动计算薪资的工具,既不包含非财务的信息,也不包含薪资的历史信息,几乎没有报表生成功能和薪资数据分析功能。但是,它的出现为人事管理的管理展示了美好的前景,即用计算机的高速度和自动化来替代手工的巨大工量,用计算机的高准确性来避免手工的错误和误差,使大规模集中处理大型企业的薪资成为可能。第二代的人事管理系统出现于20世纪70年代末。由于计算机技术的飞速发展,无论是计算机的普及性,还是计算机系统工具和数据库技术的发展,都为人事管理系统的阶段性发展提供了可能。第二代人事管理系统基本上解决了第一代系统1引用计算机毕业设计专业站: 21.3 项目研究意义随着网络技术的发展 ,传统的人工管理模式已经不适应当前企业的发展,这种管理方式存在着许多缺点,如:效率低、保密性差、数据量大、查询等都不方便,而且还会影响企业的发展。但人事管理系统是一个企业单位不可缺少的部分,所以一个好的人事管理系统会给企业带来更大的发展。基于WEB模式的人事管理系统适应了当前发展的潮流,作为计算机应用的一部分,使用计算机对人事信息进行管理,具有着手工管理所无法比拟的优点.例如:检索迅速、查找方便、可靠性高、存储量大、保密性好、寿命长、成本低等。这些优点能够极大地提高人事劳资管理的效率,也是企业的科学化、正规化管理,与世界接轨的重要条件。从另一方面推动了企业的向前发展。课题的目的是:针对企事业对人事管理的需求,开发人事管理系统,力求方便快捷实现人事档案的管理,推动企业的向前发展。1.4 系统概述事管理系统是典型的信息管理系统,其开发主要包括后台数据库的建立和维护以及前端程序的开发两方面。对于前者要求建立起资料一致性和完整性强、资料安全性好的数据库,而对于后者则要求英勇程序功能完备,易使用等特点。本系统主要基于Windows操作平台,主要试用JAVA SERVER PAGE来设计开发,该开发环境能很好的兼容其他的开发语言(如SQL,SELECT等语言),不仅提供了大量的生成器,表设计器,更显著的是它还提供了各种各样的向导。因此,开发起来极为方便、快捷!人事管理系统是一个企业单位不可缺少的部分,它的内容对于企业的决策者和管理者来说都至关重要,所以人事管理系统应该能够为用户提供充足的信息和快捷的查询手段。但一直以来人们使用传统人工的方式管理文件档案,这种管理方式存在许多缺点,如:效率低,保密性差,另外时间一长,将产生大量的文件和数据,这对于查找、更新、维护都带来了不少的困难。人事管理系统一般包括对人事档案的统计、查询、更新、删除等功能。如果人工直接统计的话,工作量将十分庞大。特别是,如果企业员工有几万或者几十万,人工统计将变得不肯想象。随着科学技术的不断提高,计算机科学日渐成熟,其强大的功能已为人们深刻认识,它已进入人类社会的各个领域并发挥着越来越重要的作用。用计算机可使人们从繁重而单调的统计运算至哦哦那个解脱出来,仅用一些简单的操作便可及时准确的获取需要的信息。作为计算机英勇的一部分,试用计算机对人事信息进行管理,具有手工管理所无法比拟的优点。例如:检索迅速、查找方便、可靠性高、存储量大、保密性好、寿命长、成本低。这些优点能够极大地提高人事管理的效率,也是企业的科学化、正规化管理与世界接轨的重要条件。因此,开发这样一个管理软件成为很有必要的事情,在设计一个系统时,首先要做好需求分析。合理的运用好JAVA SERVER PAGE的基本方法,建立一个适合企业的人事管理系统。1.5 JSP概述Java语言:Java语言是由Sun公司于1995年推出的编程语言。Java语言的特点:简单、面向对象、平台无关性、安全性、多线程在Java语言中,最小的单位是类。Java编写的源程序被编译后成为.class的字节码文件,最终通过执行该字节码文件执行Java程序Servlet技术Servlet是用Java语言编写的服务器端程序Servlet主要用于处理Http请求,并将处理的结果传递给浏览器生成动态Web页面Servlet具有可移植、功能强大、安全、可扩展和灵活等优点。JSP是在Servlet的基础上开发的一种新技术JavaBean技术:JavaBean是根据特殊的规范编写的普通的Java类,可称它们为“独立的组件”。JavaBean的最大优点就是充分提高了代码的可重用性,并且对程序的后期维护和扩展起到了积极的作用。 JavaBean可按功能划分为可视化和不可视化两种。在JSP中通常应用不可视化JavaBean,应用这种JavaBean可用来封装各种业务逻辑。通过应用JavaBean,可以很好地将业务逻辑和前台显示代码分离,这大大提高了代码的可读性和易维护性。JSP:全称Java Server Pages,是由Sun公司倡导,与多个公司共同建立的一种技术标准,它建立在Servlet之上,继承了JavaServlet的各项优秀功能。JSP是运行在服务器端的脚本语言,与其他的服务器端脚本语言一样,是用来开发动态网页的一种技术。JSP页面由传统的HTML代码和嵌入到其中的Java代码组成。JSP利用JavaBean和JSP元素,可以有效地将静态的HTML和动态数据区分开来,给程序的修改和扩展带来了很大的方便。1.6 log4j概述Log4j是Apache的一个开放源代码项目,通过使用Log4j,我们可以控制日志信息输送的目的地是控制台、文件、GUI组件、甚至是套接字服务器、NT的事件记录器、UNIX Syslog守护进程等;我们也可以控制每一条日志的输出格式;通过定义每一条日志信息的级别,我们能够更加细致地控制日志的生成过程。最令人感兴趣的就是,这些只需要通过一个属性配置文件来灵活地进行配置,而不需要修改应用的代码。因为目前在 Java 中最有名的 Log 方式, 首推是 Log4j, 另外 JDK 1.4 中也提供了Logging API。Log4j是在jakarta apache 项目下开发的一个开源的日志记录工具。1.7 JSP运行环境硬件环境:·处理器:Intel 奔腾或更高·内存:512M·硬盘空间:80GB·显卡:Geforce系列显示适配器或更高。软件环境:·操作系统:windows XP·数据库:MYSQL 5.0·开发平台:MyEclipse2.1.3软件开发环境:·JDK 1.6·MYSQL 5.0数据库·Tomcat 6.0 服务器1.8 JDK 1.6与Tomcat 6.0安装与配置安装好JDK和Tomcat后,要对系统的环境变量进行配置才能运行。点“我的电脑”右键>属性,选择“高级”>环境变量,在系统变量中新建下面几个变量。如图所示:JAVA_HOME vaule为c:Program FilesJavajdk1.6.0_02CLASSPATH vaule为 .;c:Program FilesJavaJDBCmsbase.jar;c:Program FilesJavaJDBCmssalserver.jar;c:Program FilesJavaJDBCmsutil.jar接着把编辑PATH变量设置我们需要的值如下 vaule为%SystemRoot%system32;%SystemRoot%;%SystemRoot%System32Wbem:%java_home%bin;%java_home%jrebin;%JAVA_HOME%bin;%CATALINA_HOME%bin;c:Program FilesJavaJDBCmsbase.jar;c:Program FilesJavaJDBCmssalserver.jar;c:Program FilesJavaJDBCmsutil.jar;c:Program FilesJavajdk1.6.0_02bin;%SystemRoot%system32;%SystemRoot%;%SystemRoot%System32Wbem;C:Program FilesCommon FilesThunder NetworkKanKanCodecs;C:Program FilesMySQLMySQL Server 5.0bin设置完以后重新启动tomcat,打开浏览器,在地址栏中输入http:/localhost:8080 进行验证配置是否成功。第二章 系统分析与设计2.1 需求分析需求分析是系统开发必要环节,也是重中之重。作为该过程的结果,需求规格说明书是对系统的功能和行为完整的描述。系统设计将来自于需求分析的抽象规格说明转变为面向真实世界的设计。一旦构建完成,该系统就会投入使用,同时会不可避免地产生更多的新需求。同时,需求过程与分析活动之间有相当程度的重叠,分析建模对于设定工作的范围和其他一些事来说是必要的,所以我们利用分析模型来描述需求过程,随着开发工作的继续,分析活动在工作中占的比例将变得越来越大,直到所有需求都已知。2.2 可行性分析2.2.1 经济可行性由于Mysql数据库和Tomcat服务器都是开源的免费的开发学习工具,而且,本系统使用灵活方便,所需的开发人员不多,技术也不是很复杂,开发周期较短,因此开发成本较低,所以说经济方便可行。2.2.2 技术可行性本系统采用的是JSP、Servlet和Mysql开发,Windows XP操作系统,用JSP+JAVA开发语言,当前的计算机硬件配置也能满足开发需求,由于JSP、Servlet功能强大,而Mysql灵活易维护在开发方面具有方便快捷、试用灵活的特点。以及目前的广泛实际应用,因此使用JSP、Servlet 、Mysql是开发轻平台的最佳组合从而说明本系统在技术方面是可行的。2.2.3 操作可行性本系统界面设计清晰友好,操作简介,功能完善,有一定的异常处理机制和提示信息,用户无需学习即可使用,因此使用方面可行。 2.3 总体设计2.3.1 项目规划根据需求分析所列出的功能,对整个系统做出总体设计登录页面对用户进行验证,是网站的第一层安全道,因此在这里进行严格验证,不是系统管理员将无法进入系统,管理员讲对员工基本信息、员工工作情况、调动历史、工作经历、培训信息、薪酬福利信息等进行管理,如查询,增加,修改,删除等功能。 2.3.2 系统功能结构图系统功能结构图2.3.3 具体系统功能需求描述(1) 员工基本信息查询:实现对员工信息的查询,添加,删除,修改等基本操作;(2) 员工调动历史管理:实现对员工调动历史信息的查询,添加,删除,修改等基本操作;(3) 员工工作经历管理:实现对员工工作经历信息的查询,添加,删除,修改等基本操作(4) 员工工作情况管理:实现对员工工作情况信息的查询,添加,删除,修改等基本操作(5) 员工培训信息管理:实现对员工培训信息信息的查询,添加,删除,修改等基本操作(6) 员工薪酬福利管理:实现对员工薪酬福利信息的查询,添加,删除,修改等基本操作2.4 系统数据库设计2.4.1 数据库E-R图2.4.2 数据库各实体图设计(1)员工基本信息实体图:(2)员工工作情况表:(3)员工调动历史:(4)员工工作经历表:(5)员工培训信息表:(6)员工薪酬福利信息表:2.4.3 数据库表设计该人事管理系统中的表主要有7张,包括员工基本信息表、员工工作情况表、员工调动历史表、员工工作经历表、员工培训信息表、员工薪酬福利信息表与系统管理员表,下面将依次给出各表。(1)员工基本信息表:员工编号,姓名,性别,生日,身份证号,籍贯,婚姻,子女数,紧急联系人;字段名数据类型可否为空键其他Idint(11)not nullPri员工编号namevarchar(20)not null员工姓名sexvarchar(4)not null性别birthdayvarchar(20)not null生日CIDvarchar(20)not null身份证号homevarchar(20)not null籍贯marryvarchar(10)not null婚姻childrenNoInt(10)not null子女数linkpeoolevarchar(20)not null紧急联系人(1)员工基本信息表(t_employee)(2)员工工作情况表:员工编号,姓名,岗位部门,职位,级别,合约期满时间;字段名数据类型可否为空键其他Idint(11)not nullPri员工编号namevarchar(20)not null姓名departmentvarchar(20)not null岗位部门positionvarchar(20)not null职位levelvarchar(20)not null级别expiretimevarchar(20)not null合约期满时间(2)员工工作情况表(t_worker)(3)员工调动历史表:员工编号,姓名,岗位部门,职位,级别,状态,调动时间;字段名数据类型可否为空键其他Idint(11)not nullPri员工编号namevarchar(20)not null姓名departmentvarchar(20)not null岗位部门positionvarchar(20)not null职位levelvarchar(20)not null级别statevarchar(20)not null状态removetimevarchar(20)not null调动时间(3)员工调动历史表(t_remove)(4) 员工工作经历表:员工编号,姓名,开始时间,结束时间,所在单位,岗位部门,职位;字段名数据类型可否为空键其他Idint(11)not nullPri员工编号namevarchar(20)not null姓名starttimevarchar(20)not null开始时间overtimevarchar(20)not null结束时间unitsvarchar(20)not null所在单位departmentvarchar(20)not null岗位部门statevarchar(20)not null职位(4) 员工工作经历表(t_experience)(5)员工培训信息表:员工编号,姓名,开始时间,结束时间,培训单位,专业,学历学位,费用方式,金额;字段名数据类型可否为空键其他Idint(11)not nullPri员工编号namevarchar(20)not null姓名starttimevarchar(20)not null开始时间overtimevarchar(20)not null结束时间unitsvarchar(20)not null培训单位majorvarchar(20)not null专业degreevarchar(20)not null学历学位costvarchar(20)not null费用方式momeyvarchar(20)not null金额(5)员工培训信息表(t_train)(6) 员工薪酬福利信息表:员工编号,姓名,基本工资,津贴,奖金基数,社保基数,公积金基数,公积金,养老保险,医疗保险,失业保险,工伤保险,生育保险;字段名数据类型可否为空键其他Idint(11)not nullPri员工编号namevarchar(20)not null姓名basepayvarchar(20)not null基本工资allowancevarchar(20)not null津贴bonusvarchar(20)not null奖金基数securityvarchar(20)not null社保基数jijshuvarchar(20)not null公积金基数fundsvarchar(20)not null公积金yanglaovarchar(20)not null养老保险yiliaovarchar(20)not null医疗保险shiyevarchar(20)not null失业保险gongshangvarchar(20)not null工伤保险shengyuvarchar(20)not null生育保险(6) 员工薪酬福利信息表(t_payment)(7)系统管理员表:字段名数据类型可否为空键其他usernamevarchar(20)not null管理员账号passwordvarchar(20)not null密码idInt(11)not nullPri编号(7)系统管理员表(t_admin)第三章 详细设计3.1 登录模块设计服务器端界面管理员输入的帐号和密码后就进入到管理界面。如果输入的用户名和密码都正确,则进入管理界面;如果输入的用户名或密码两者其中有一个错误,则跳转到failure.jsp界面。将页面输入的用户名,密码试用Method方法与数据库中的用户名,密码进行匹配,若正确则跳转到success.jsp.错误则跳转到failure.jsp。public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException Method method = new Method();String username = request.getParameter("username");System.out.println(username);String password = request.getParameter("password");System.out.println(password);Long id = method.queryAdmin(username, password);if(id != 0l)RequestDispatcher rd = request.getRequestDispatcher("/success.jsp");rd.forward(request, response);elseRequestDispatcher rd = request.getRequestDispatcher("/failure.jsp");rd.forward(request, response);登录界面:3.2 员工基本信息模块将所有的增删改查方法都写在Method方法里面。3.2.1 查询员工基本信息其主要的功能是对职工的信息进行查询,通过一个for循环语句,通过ShowEmployeeServlet调用Method方法将数据库中查询出的信息列表显示在页面3.2.2 增加员工基本信息其主要的功能是对职工的信息进行添加,通过AddEmployeeServlet调用Method方法对数据库进行插入操作,添加页面写有简单输入验证。3.2.3 修改员工基本信息其主要的功能是对职工的信息进行修改,通过UpdateEmployeeServlet调用Method方法对数据库进行插入操作,修改页面设置员工编号属性为disabled,无法更改,仅可读。3.2.4 删除员工基本信息其主要的功能是对职工的信息进行删除,通过DeleteEmployeeServlet调用Method方法对数据库进行插入操作3.3 操作日志模块(1) 配置Log4j环境BasicConfigurator.configure ()自动快速地使用缺省Log4j环境。PropertyConfigurator.configure ( String configFilename) 读取使用Java的属性文件编写的配置文件,该参数是一个完整的路径名称,指向一个包含Log4J配置信息的属性文件。DOMConfigurator.configure ( String filename ) 读取XML形式的配置文件。如:PropertyConfigurator.configure("log4j.properties");(2)就是获取日志记录器,这个记录器将负责控制日志信息。其语法为:public static Logger getLogger( String name),通过指定的名字获得记录器,如果必要的话,则为这个名字创建一个新的记录器。在对Logger实例进行命名时,没有限制,可以取任意自己感兴趣的名字。但一般取本类的名字作为Name。比如:Logger loggerConsole = Logger.getRootLogger();如:Logger loggerFile= Logger.getLogger("thisProject.file");(3)插入记录信息当上面的两个必要步骤执行完毕,您就可以轻松地使用不同优先级别的日志记录语句插入到您想记录日志的任何地方,其语法如下:Logger.debug ( Object message ) ;Logger.info ( Object message ) ;Logger.warn ( Object message ) ;Logger.error ( Object message ) ;第四章 调试与测试4.1程序调试在做系统时,代码部分肯定是会出现错误的,不管是自己写还是从网上或是其他渠道获得的。而一般情况下,调试程序时,系统会自动的将错误地方列表出来,这种错误比较容易改正。然而还会出现其他形式的错误,一般系统没有提示,单个程序运行起来并没有什么错误,但在整个项目中,却出现问题,这类的错误不容易解决,它很有可能是一些类的错误,也有可能是一些函数的调用错误,总之,这些错误是很难找的,需要大量的时间来排查和改正。4.2 程序测试4.2.1 程序测试的重要性和目的软件测试是对软件需求分析、设计、编码实现的审查,它是软件质量保证的关键步骤。通常对测试的定义有两中描述:1) 软件测试是为了发现错误而执行程序的过程;2)软件测试是根据软件开发各个阶段的规格说明和程序的内部结构而精心设计的一批测试用例,并利用这些测试用例运行程序以及发现错误的过程,即啊执行测试步骤。1测试应该尽早进行,因为软件的质量是在开发过程中形成的,缺陷是在不知不觉中引入的。测试的目的就是设计测试案例,通过这些测试案例来发现软件的缺陷和排除缺陷。测试的目的是在最小的成本和最少的时间内,通过设计合适的测试用例,系统地发现不同类别的错误。212引用韩万江编著软件工程案例教程M.北京:机械工业出版社,2007.54.2.2 测试方法设计本系统主要的测试方法是系统测试。系统测试是将软件系统,作为整个基于计算机系统的一个元素,与计算机硬件、外设、某些支持软件、数据和人员等元素组合在一起,对计算机系统进行一系列的组装测试和确认测试4.2.3 测试的用例设计测试用例:(系统测试)测试项目名称:苏钢集团人事管理系统-客户端测试用例编号:01测试人员:郭磊测试时间:2011-06-01测试项目标题:所有基本页面能正确显示连接测试内容:验证系统客户端首页是否能够正常显示验证系统客户端登录后其内容是否显示正常验证系统客户端内各模块内容信息是否正确测试环境与系统配置:软件环境:Microsoft Windows XP Professional+傲游浏览器+Internet Explorer 浏览器硬件环境:Inter(R)Celeron(R)1.60 GHz CPU+1.60 GHz 1.5GB内存网络环境:校园带宽测试输入数据随机测试次数:用两种浏览器进行测试预期结果:可以正确显示系统客户端首页、可以正确显示系统客户端登录后其内容可以正确显示系统客户端内各模块内容信息测试过程:登录http:/localhost:8080/Test对于每个模块点击进行查看其内容信息是否正确查看每个页面的连接是否有误测试结果:可以正确显示系统客户端首页、可以正确显示系统客户端登录后其内容可以正确显示系统客户端内各模块内容信息实现限制:无4.3 存在的问题及改进方法(1)、数据库中文乱码解决方法:在Sevrlet中对每个中文对象添加中文乱码处理代码:String sex = request.getParameter(employeeSex);(2)页面中文乱码解决:在接收参数时进行编码转换:String str = new String(request.getParameter("something").getBytes("ISO-8859-1"),"GBK");(3)多个JSP页面整合后的页面跳转存在问题:改用框架页面第五章 总结本次毕业论文设计在王晓峰老师的悉心指导和严格要求下业已完成,我想我需要对自己这段时间内完成的毕业论文设计做一个总结。几个月来忙碌紧张而又有条不紊的毕业设计,使我有机会对本专业的基本理论、专业知识和基本技术有了更深入的了解和体会,使我在四年中所学到的知识得到了系统和升华,真正达到了学以致用。 (1)从心态方面来说:在整个毕业论文设计的过程中我学到了做任何事情所要有的态度和心态,首先我明白了做学问要一丝不苟,对于出现的任何问题和偏差都不要轻视,要通过正确的途径去解决,在做事情的过程中要有耐心和毅力,不要一遇到困难就打退堂鼓,只要坚持下去就可以找到思路去解决问题的。在工作中要学会与人合作的态度,认真听取别人的意见,这样做起事情来就可以事倍功半。(2)从实践方面来说:在本次的毕业论文设计中,我充分的体会到了“实践出真知”这一点,书本上的知识是不够的,只有把理论与实践相结合才能够真正的学到知识。一个管理信息系统的设计,不可能一步到位,还需要不断的完善和补充。编程前的深思熟虑是减少程序调试工作量的重要方法,只有进行充分考虑,才会减少调试过程中的工作量。虽然在开始写程序之前我们做了多的准备工作,但在真正的写程序时仍然发现许多问题,有些问题是分析时的疏漏,有些则是如果不做无论如何也