基于邮件传输的远程办公系统设计实现_第1页
基于邮件传输的远程办公系统设计实现_第2页
基于邮件传输的远程办公系统设计实现_第3页
基于邮件传输的远程办公系统设计实现_第4页
基于邮件传输的远程办公系统设计实现_第5页
已阅读5页,还剩63页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

济南大学毕业设计PAGE—PAGEIV—摘要一般的企事业单位的办公系统都运行在局域网内,遇到人员出差等可以利用公网电子邮件,但无法通过内部办公系统及时处理工作。该设计通过特定的数据格式,使用电子邮件作为通信通道,实现远程办公,可以突破目前办公软件局域网的限制。突破局域网限制还可以从网络层入手,但一般需要特殊网络设备,对于小型公司来讲,成本上不合理。本设计分为两大部分,第一部分为一个简单的公司内部办公系统,形式为网站。第二部分为一个windows窗口程序,用办公邮箱登陆。利用第三方的邮件服务,实现第一部分和第二部分间的相互通信。运用C#可以方便的实现邮件发送与接收,能快速的开发出小型企业网站。系统实现了工作任务的申请、布置、提交、审核等等。员工在外出差时,利用windows窗口程序可以进行任务的处理和申请。当然网站端还有基本的账户管理。本设计是针对具体的办公系统,实现的远程办公,虽然失去了一定的通用性,但其实用性大大提高。同时,作为毕业设计,其最重要的功能是可以熟悉使用C#进行电子邮件编程,熟悉使用开发简单的公司的办公系统。提升自己的分析问题、解决问题、动手实践的能力。关键词:远程办公;小型企业网站;SMTP协议;邮件客户端ABSTRACTMostofthecompany'sofficesystemcanonlyrunattheLANwhichtheyin.Whensomeoneofthemisonabusinesstrip,theycanusepublicemail,butcouldn’tgetworkdoneefficiently.Thisdesignthroughtheparticulardataformat,useemailasacommunicationchannel,torealizetheremoteoffice,canbreakthroughthelimitsoftheLAN.Wecanalsobreakthroughthelimitfromnetworklayer,butthatneedspecialnetworkequipment,forthesmallcompanyterms,thecostisnotreasonable.Thisdesignhastwoparts.Thefirstpartisawebsite,astheofficesystem.ThesecondpartisaWindowApplicationProgram,withofficeE-maillanded.Itusesothermailservicetoconnectthefirstpartandthesecondpart.C#canrealizemailsendingandreceivingconveniently.Acandevelopsmallwebsiterapidly.Itcanapply,layout,submit,examinemissionandsoon.Whenemployeesonbusinesstrips,theycanusethesecondpartapplyforandprocessingthetask.Ofcourse,thewebsitehasthebasicaccountmanagementfunctions.Thisdesignisforthespecificofficesystem,althoughlostsomegenerality,butthepracticalityisgreatlyincreased.Atthesametime,asthegraduationdesign,themostimportantfunctionisthatitletmelearnmoreaboutC#foremailprogrammingandfamiliarwithusedevelopcompany'sofficesystem.Improvemyselftoanalyzeandsolveproblems,andimprovetheabilityofpractice.Keywords:Telecommuting;Smallbusinesssite;TheSMTPprotocol;Mailclient

目录摘要 IABSTRACT II1前言 11.1选题背景与意义 11.2相关技术介绍 12需求分析 32.1系统中存在的角色 32.2分角色分析 32.3输入输出要求 42.4远程通信要求 53概要设计 63.1系统简介 63.2网站和windows窗口程序的关系 63.3网站部分介绍 63.4窗口程序部分介绍 74数据库部分的设计 84.1E-R简图 84.2基本表与参照关系 84.3工具类 145网站详细设计 155.1工程文件结构 155.2按模块介绍 165.2.1登陆模块 165.2.2员工增删改 185.2.3个人信息维护 245.2.4任务申请 255.2.5任务布置 275.2.6任务提交 295.2.7任务审核 325.2.8任务汇总查看 335.3母版页使用介绍 345.3.1基本使用 345.3.2相对路径与绝对路径的问题 355.4独立小功能介绍 365.4.1运用javascript关闭当前页 365.4.2判断当前机器是否联网 365.4.2输入日期时弹出日历控件 366窗口程序详细设计 396.1工程文件结构 396.2模块介绍 406.2.1任务查看 406.2.2任务申请 416.2.3任务提交 426.3补充介绍 437远程通信设计 457.1简介 457.2网站端发送消息 457.2.1布置任务时同时发送 457.2.2刷新任务池时,取出符合条件的发送 467.3窗口程序接消息 487.4窗口程序发消息 497.4.1申请时发送 497.4.2提交时发送 497.5网站端解析消息 498一个简单的流程测试 528.1简介 528.2测试 52结论 60参考文献 61致谢 62—PAGE64—1前言1.1选题背景与意义目前市场上有很多实现远程办公的商业软件。当公司内部信息系统在internet上无法访问时,这些软件就大有用武之地,软件相当于一个小工具,突破局域网限制,安装运行方便快捷,成本低,目前有:GoToMyCloud、51Mypc远程办公等等,其中也有免费版本,不过作为一个公司,考虑到安全性商业保密等等,一般会选择使用付费、有后期维护及升级的软件。所以从市场需求这方面考虑,此选题很有意义。解决远程办公有很多思路,用电子邮件作为通信通道是一个传统的解决方案,但其中又不乏创新。传统的使用电子邮件通信不能够让员工及时处理任务,邮件客户端与公司的工作流程又有一定的区别,联系不够紧密。本设计是针对具体的办公系统,实现的远程办公,虽然失去了一定的通用性,但其实用性大大提高。同时,作为毕业设计,其最重要的功能是可以熟悉使用C#进行电子邮件编程,熟悉使用开发简单的公司的办公系统,提升自己的分析问题、解决问题、动手实践的能力。1.2相关技术介绍基于电子邮件传输的远程办公系统设计采用的开发集成环境为VisualStudio2021,Framework版本为.NETFramework4.0,数据库使用的是集成的MicrosoftSQLServer2021。本设计中VisualStudio2021运行的操作系统环境为Windows7专业版。开发效率和用户体验都属一流。VisualStudio是微软公司推出的开发环境。是目前最流行的Windows平台应用程序开发环境。VisualStudio2021版本于2021年4月12日上市,其集成开发环境(IDE)的界面被重新设计和组织,变得更加简单明了。VisualStudio2021同时带来了NETFramework4.0、MicrosoftVisualStudio2021CTP(CommunityTechnologyPreview--CTP),并且支持开发面向Windows7的应用程序。除了MicrosoftSQLServer,它还支持IBMDB2和Oracle数据库。目前有五个版本:专业版、高级版、旗舰版、学习版和测试版。我使用的是旗舰版,完整版售价11899美元,升级版售价3799美元。鉴于经济实力,我使用的处在免费试用期的版本。a.网站采用技术,开发工具为VisualStudio2021,此集成开发环境功能异常强大,有丰富的服务器控件,还有集成的数据库开发界面,设计基本表,存储过程,表间参照,视图等等都十分方便。数据库的连接字符串可以自动生成,粘贴到web.config文件中。数据库文件放在专门的App_Data文件夹中。(1)账户管理采用GridView控件还用Session对象技术。(2)工作空间采用GridView控件,DropDownList控件,文件上传下载技术,Session对象技术,邮件的收发技术。(3)整体网站采用了母版页技术、JavaScript技术,还有外部样式表,也可以采用主题技术。b.窗口程序部分,也是用VisualStudio2021开发,语言选择都是C#,其提供的控件也丰富方便。(1)任务处理部分使用TreeView控件,webBrowser控件,contextMenuStrip控件技术,文件上传下载技术,邮件接收技术。(2)任务申请部分使用了openFileDialog控件,文件上传技术,邮件发送技术。(3)整体窗体间通信使用自定义的类,来记住当前用户信息。2需求分析2.1系统中存在的角色本系统是一个整合的小型企业办公系统,包含内部的信息系统,和外部的远程办公小工具。这个企业是虚拟出的企业,他是一家服务性企业,产品除了服务以外也有实物产品,经营形式较灵活。目标客户人群主要是大中城市的退休人员。这个企业名字为《畅享有限责任公司》。在本设计中用的是其别名怡然部落有限责任公司。具体详情不做过多介绍,它的来源为:第七届“挑战杯”济南大学学生创业计划大赛,本人也是其中的参与者之一,在此要感谢他们。系统中角色简单的分为:系统管理员、总经理、部门经理、员工。还有一个“任务”实体。当公司业务扩展时,还可以增添角色类型。2.2分角色分析a、员工可以对自己的账户信息进行维护,如修改联系方式,密码等等。对于其登陆所用的类似于工号的用户名不允许修改。员工可以进行任务申请,与自己相关的任务查看。b、部门经理,对自己部门下的员工进行管理,对他们申请的任务提交的任务进行审核,为他们布置任务,维护自己的账户信息。c、总经理,对所有的下属提交的任务和申请的任务进行审核,对下属反映上来的问题进行查看,对自己账户的管理,d、管理员具有最高权限,但不是所有权限。作为管理员要对数据库基本表进行维护,对整个系统的账户进行维护,为员工分配工号等等。其不能修改员工的密码,以及员工提交的任务。e、任务的状态有申请、建立、提交、审核、完成五种,按时间顺序转化如下图申请申请建立提交审核完成图2.1任务的生命周期图注:这里的“审核”是一个状态,而审核过程包含两种,一种是申请转化到建立,一种是提交以后工作流程图如下:员工员工部门经理总经理申请的任务提交的任务任务池图2.2办公流程图管理员在办公流程中,员工和部门经理都可以申请和提交任务,总经理和部门经理可以审核下属提交或申请的任务,也可以为下属布置任务。员工或部门经理,登录系统可以查看自己的已建立的任务,已建立意思就是需要完成之意。刚申请的任务必需要上级批准才能变成以建立状态。处理任务时有时会关联很多文件,所以系统要提供文件的上传下载功能。2.3输入输出要求由于员工对数据的存储的格式不了解,他们只是了解自己的办公流程,以及基本的windows操作系统的使用。所以在输入时要对员工填入的数据进行格式调整或者验证提示,例如,输入日期的时候要输入“yyyy-MM-dd”,当输入不符合要求时,要有对话框提示,这个可以使用javascript实现。对于输出,要求能对所有任务在网页上查看,包括任务的状态,关联的员工,起止时间等等。对于单个员工,要求他能查看自己的任务,查看自己任务的状态。老板能够看所有员工的情况,每月完成的任务量,联系方式等等。关于输出的响应时间,由于系统规模较小,网站内部的响应速度在目前主流企业小型服务器上基本不会出现问题。员工和老板的基本操作响应一般预计不会超过3秒2.4远程通信要求a、在网站端安排任务时,会同时发送相关邮件消息到员工工作邮箱,邮件延时取决于邮件服务的状态。一般不会出现大的延时。b、windows程序端能够根据员工登陆时的邮箱来从邮箱中提取出符合要求的邮件数据。c、员工在外提交的邮件消息,网站可以用设定好的邮箱(Boss邮箱)接收,然后解析判断,组合成记录存入相应数据库基本表。BBoss邮箱甲员工邮箱乙员工邮箱丙员工邮箱图2.3通信邮箱结构网站Windows程序注:这些邮箱都是同类型的,在本设计中都使用的是163邮箱。3概要设计3.1系统简介本设计分为两大部分,第一部分为一个简单的公司内部办公系统,形式为网站。第二部分为一个windows窗口程序,用办公邮箱登陆。利用第三方的邮件服务,实现第一部分和第二部分间的相互通信。运用C#可以方便的实现邮件发送与接收,能快速的开发出小型企业网站。系统实现了工作任务的申请、布置、提交、审核等等。员工在外出差时,利用windows窗口程序可以进行任务的处理和申请。当然网站端还有基本的账户管理。3.2网站和windows窗口程序的关系企业内部网站企业内部网站外部邮件服务远程办公助手(窗口程序)SMTPSMTPPOP3POP3图3.1整个系统的架构3.3网站部分介绍网站部分分为“账户管理模块”和“工作空间模块”。账户管理有四种身份,分别是管理员、老板、部门经理和员工。根据身份的不同,配置不同的操作权限。例如老板和管理员有一切权限,而员工只能对自己某些的信息进行修改更新。工作空间中有任务申请、我的任务、任务布置、任务审核、任务池汇总等部分。不同的模块针对不同的用户,任务申请和我的任务是针对员工的,其余的是针对部门经理和老板。具体结构如下图:企业网站企业网站工作空间账户管理个人信息更新密码修改增删改员工信息任务申请我的任务任务布置任务审核任务池汇总图3.2网站的结构3.4窗口程序部分介绍windows窗口程序部分分为两大模块,一个为“任务处理”,一个为“任务申请”。关于账户的管理部分可以在后期添加。任务处理部分简单地分为任务查看、任务编辑、任务提交、删除过期任务。任务申请部分没有子模块。结构如下图:窗口程序窗口程序任务处理任务申请任务查看任务编辑任务提交过期任务删除图3.3窗口程序的结构4数据库部分的设计4.1E-R简图公司内部上级对下级是管理关系,公司所有成员与任务的关系是处理关系,人员对部门的关系是隶属。在后期的表设计中,一些实体合并了,具体见下一节表设计。总经理总经理部门经理员工管理管理管理处理人任务图4.1系统E-R图上图中的“人”,是员工和部门经理、总经理的合并。他们三者都存放在一张表(Usertable)中,上图中实体的属性已略去,详见下一节表设计的截图。4.2基本表与参照关系本系统中使用了五张基本表,Department(部门表)、MissionPool(任务表)、MissionStateTable(任务状态表)、Usertable(用户表)、RoleTable(角色表)。数据库名称为yirandata,是怡然的拼音加上data构成。数据库中有一个查重的存储过程,有两张参照关系图。如下:图4.2基本表、参照和存储过程a、Department(部门表)设计截图:图4.3部门表部门表只设计了两个字段,一个是主键部门号(DepartmentNumber),一个是部门名称(DepartmentName)。数据类型如上图所示,主键DepartmentNumber为int型,DepartmentName为varchar(50)。b、MissionPool(任务表)设计截图:图4.4任务表此表未设主键,MissionId(任务号)可以被设置为主键。*TargetStaff(目标员工)为外键,参照Usertable(用户表)的Email字段。记录的是此条任务关联的执行员工,在布置任务时,领导必须指定期望执行的员工。*MissionSubject(任务主题),在系统中配合MissionState(任务状态)作为任务的标示,区分不同的任务。*MissionName(任务名)是一个保留字段,为将来其他功能的扩充做准备。在本设计中可以去掉。*MissionContent(任务内容)是任务的主体,员工通过浏览此内容而进行办公安排。*MissionState(任务状态),参照MissionStateTable(任务状态表)的MisStateId字段。*Attachmentpath(附件路径),存放的是与任务相关联的文件的文件名,注意是文件名,并不是文件在服务器上的完整路径。在服务器上有个专门存放关联文件的文件夹,详细设计里会提到。*BuiltTime(建立时间)记录的是任务建立的时间,为员工办公提供参考。*DeadlineTime(截止时间)记录的是任务失效的时间或是提交截止时间,为员工办公提供参考。*IsPosted(发送标记)标记任务是否被发送到目标员工的办公邮箱。当然,并不是所有任务都需要发送,任务池刷新时,只会将符合条件的任务发到目标员工的办公邮箱。“1”代表已发送,“0”代表未发送。c、MissionStateTable(任务状态表)设计截图图4.5任务状态表MissionStateTable(任务状态表)设计比较简单,主键为MisStateId(任务状态号),等二个字段为MisStateName(任务状态名),这个表的设计是为了显示给用户的时候更容易理解。而没直接在将任务表中的状态字段设计为文本是为了将来添加任务状态功能扩展时更加方便。抗异常的稳定性也更好。有了这个表实现员工按任务状态查询与自己相关的任务也方便许多。d、Usertable(用户表)设计截图图4.6用户表此表的UserID字段在设计中也未被使用,用作其他功能添加的保留。*UserName(用户名),目前的主键,用以标识用户,也是相应使用者的登陆名。*DepartID(部门号),参照Department(部门表)的DepartmentNumber字段。*UserType(用户类型),区别用户为普通员工还是领导等等,用以确定其操作权限。*PassWord(密码),登陆公司办公系统的密码,密码为空也可以登陆。注意这里的密码和窗口程序端登陆用的密码没有关联性,可以凭用户自己设置。*Email(办公邮箱),存放员工办公用的邮箱地址,用户可以自己修改。*PhoneNumber(号码),这个不用解释。*IsInService(登录标记),可以利用此字段判断此用户有没有登录。*RealName(真实姓名),方便使用,提升操作的可理解性。在布置任务时,选择员工的名字就可以得到其办公邮箱,而不用“领导”记住员工的邮箱。*Remain(保留),为以后功能添加所保留,目前也可以作为备注。e、RoleTable(角色表)设计截图图4.7角色表上表主键为RoleNumber(角色号),RoleName(角色名),目前有4条记录,管理员的角色号为“0”.f、Diagram1(参照图一)设计截图:图4.8参照关系一g、Diagram2(参照图二)设计截图图4.9参照关系二h、存储过程代码:ALTERPROCEDUREdbo.StoredProcedure1 @user1varchar(50)AS selectcount(*)fromUsertablewhereUserName=@user1 RETURN4.3工具类获得数据库字符连接串的类Tools:namespacePublic{publicclassTools{publicTools(){}///<summary>///获得数据库字符连接串///</summary>///<returns></returns>staticpublicstringGetConnectionString(){returnSystem.Configuration.ConfigurationManager.ConnectionStrings["CorpMgrConnectionString"].ConnectionString;}}}5网站详细设计5.1工程文件结构网站的名称叫做怡然部落信息管理系统,公司背景在上文中(2.1)有提到。本网站的开发由于大量使用服务器标准控件,于是没有使用MVC开发模式。网站所在的解决方安中有三个项目,分别是网站本身(bishe1hao),KSMISUsers和Net。后两个项目是类库输出型项目,网站bishe1hao引用了他们。项目KSMISUsers是指导老师提供的,我的设计对其内部的类进行了少许修改,登录功能依赖于此项目。在此项目中有一个User类,此类加session技术完成了网页间的通信,也可以完成权限的判断布置,具体见4.2.1。项目Net是从网上找到的免费开源的关于电子邮件编程的基础类库。当然其功能远远不止电子邮件编程,但本网站使用的只有其中接收邮件的类,发送邮件在System.Net.Mail中本来就含有。当然后继这两个项目都可以在生成网站时移除,只需要将他们生成的.dll文件放入网站的Bin文件夹中即可。这样.cs文件中对他们的引用就不会出现问题。下面我们来仔细看一下网站bishe1hao的文件组织结构,如下图:图5.1网站文件结构App_Code文件夹中有一个自定义类,用来获取web.config中的数据库连接字符串(见3.3)。App_Data文件夹中是数据库文件,Bin文件夹是自动生成和添加的.dll文件。bosspages文件夹中是一系列的员工没有权限的页面,具体见图4.2。css文件夹中是网站的外部样式表,本系统中基本没有使用。fileshare文件夹中是存放附件的服务器文件夹。images文件夹中的是网站的相关的图片。staffpages文件夹中是一系列的员工页面,具体见图4.3。。再往下面就是一个个的具体页,在后文中会有介绍。rilishiyan.aspx是测试页面和Default.aspx是登陆页面。图5.2bosspages文件夹图5.3staffpages文件夹5.2按模块介绍5.2.1登陆模块登陆界面采用简明的设计如下图:图5.4登陆页这些控件都是服务器控件,他们被放在一个htmltable控件中,这个table又被放在一个div中。这样方便布局,可以指定合适的背景图片。登录的过程为,先new一个KSMISUsers.User类的user对象,用这个对象调用Login函数,这个函数会返回一个枚举值,反应登录的结果。Login函数先将输入的用户名与数据库中的Usertable(用户表)中的记录比对,看有没有这样的用户名的用户记录,有的话就将之各个字段赋值给user对象的一些属性。然后再将用户输入的密码与user.Pwd对比,判断密码是否正确。这样就可以区分出到底是用户名错误还是密码错误。登录相关代码如下:protectedvoidbtnLogin_Click(objectsender,EventArgse){KSMISUsers.Useruser=newKSMISUsers.User(true);//true代表会生成权限列表KSMISUsers.LoginResultlr=user.Login(tbLoginName.Text,tbPwd.Text,Public.Tools.GetConnectionString());if(lr==KSMISUsers.LoginResult.Success){user.IsLogin=true;Session["LoginUser"]=user;KSHelper.UI.JsScripts.Redirect("Mainpage.aspx",Response);return;}if(lr==KSMISUsers.LoginResult.DbError||lr==KSMISUsers.LoginResult.NoUser||lr==KSMISUsers.LoginResult.PwdErr){KSHelper.UI.JsScripts.Prompt(user.GetLoginPrompt(lr),Response);return;}}说明:登陆地具体过程基本上完全在KSMISUsers.User类中完成,LoginResult是命名空间下的一个枚举变量,记录登录返回的结果。KSHelper.UI.JsScripts类也是指导老师提供的.dll文件,整个设计中,我仅仅是在这个登录按钮事件中使用了它,在这里他起了页面跳转和输出提示的作用。KSMISUsers.User类中Login函数代码如下:publicLoginResultLogin(stringstrLoginName,stringstrPwd,stringstrConnectionString){SqlConnectionconn=newSqlConnection(strConnectionString);stringstrSql=string.Format(@"Select*FromUsertableWhereUserName='{0}'",strLoginName);SqlCommandcmd=newSqlCommand(strSql,conn);try{conn.Open();SqlDataReadersdr=cmd.ExecuteReader();if(!sdr.Read()){sdr.Close();conn.Close();returnLoginResult.NoUser;}ReadAUser(sdr);//将数据库中读到的符合条件的记录存到User的相应的成员中。if(!this.IsPasswordCorrect(strPwd))returnLoginResult.PwdErr;sdr.Close();conn.Close();}catch{if(conn.State!=ConnectionState.Closed)conn.Close();returnLoginResult.DbError;}returnLoginResult.Success;}KSMISUsers.User类中Login函数中使用的其它函数如ReadAUser(sdr),IsPasswordCorrect(strPwd),不再一一介绍,具体参见工程文件,在毕业答辩结束后我将会在网上免费公开。5.2.2员工增删改涉及到这个模块的页面有3个,分别是Add_staff.aspx,Delete_staff.aspx,Update_staffinfo.aspx,从页面名称可以看出其功能。(1)、增加员工截图如下图5.5增加员工和邮箱输入框加了服务器验证控件RegularExpressionValidator,只需要设置ControlToValidate、ErrorMessage、ValidationExpression属性即可,ValidationExpression属性可以从网上获得正则表达式,也可以直接在开发环境中选取。用户名输入框含有非空验证,而且有一个焦点变化时数据库查重操作,代码如下:protectedvoiduser_name_TextChanged(objectsender,EventArgse){stringstrConnectionString=Public.Tools.GetConnectionString();SqlConnectionconn=newSqlConnection(strConnectionString);-conn.Open();//使用存储过程查重,不让用户名发生重复。SqlCommandcmd=newSqlCommand();cmd.CommandType=CommandType.StoredProcedure;cmd.CommandText="StoredProcedure1";//存储过程参见4.2hcmd.Connection=conn;SqlParameterparauser1=newSqlParameter("@user1",user_name.Text.Trim());cmd.Parameters.Add(parauser1);Int32count=(Int32)cmd.ExecuteScalar();//返回的是首行首列if(count>0){Response.Write("<scriptlanguage='javascript'>alert('你输入的用户名已被使用,请您换一个!');history.back();</script>");}conn.Close();conn.Dispose();}添加按钮click事件代码如下protectedvoidButton1_Click(objectsender,EventArgse){if(user_name.Text==""){Response.Write("<scriptlanguage='javascript'>alert('用®?户¡ì名?不?能¨¹为a空?!ê?');location.href='Add_staff.aspx';</script>");}inti,j;i=Int32.Parse(department.Text); //部门DropDownList未与数据库中的部门表绑定,但text和value与表中的记录对应,department.Text得到的是value.j=Int32.Parse(role.Text); //和上面类似stringConnectionString=Public.Tools.GetConnectionString();SqlConnectionconn=newSqlConnection(ConnectionString);stringstrSql="insertintoUsertable(UserName,DepartID,UserType,PassWord,Email,PhoneNumber,RealName)values('"+user_name.Text+"',"+i+","+j+",'"+pass_word.Text+"','"+email_address.Text+"','"+phone_number.Text+"','"+real_name.Text+"')";SqlCommandcmd=newSqlCommand(strSql,conn);try{conn.Open();if(cmd.ExecuteNonQuery()==1){Response.Write("<scriptlanguage='javascript'>alert('添¬¨ª加¨®成¨¦功|!ê?');location.href='Add_staff.aspx';</script>");}conn.Close();}catch{if(conn.State!=ConnectionState.Closed)conn.Close();}}(2)、删除员工部分做的较简洁,本来可以将修改和删除都整合到一起用GridView实现,但显得较单调。图5.6删除员工删除相关代码:protectedvoidButton1_Click(objectsender,EventArgse){Response.Write("<scriptlanguage='javascript'>confirm('areyousuretodothis?');</script>");stringConnectionString=Public.Tools.GetConnectionString();SqlConnectionconn=newSqlConnection(ConnectionString);stringstrSql=string.Format("DeleteFromUsertableWhereUserName='{0}'",TextBox1.Text.Trim());SqlCommandcmd=newSqlCommand(strSql,conn);try{conn.Open(); if(cmd.ExecuteNonQuery()==1){Response.Write("<scriptlanguage='javascript'>alert('删除成功!');location.href='Delete_staff.aspx';</script>");}else{Response.Write("<scriptlanguage='javascript'>alert(‘未找到符合条件的员工!’);location.href='Delete_staff.aspx';</script>");}conn.Close();}catch(Exceptionex){if(conn.State!=ConnectionState.Closed)conn.Close();Response.Write("<scriptlanguage='javascript'>alert(‘操作失败!’);location.href='Delete_staff.aspx';</script>");}}(3)、Update_staffinfo.aspx页面使用了GridView控件,效果截图如下图5.7员工信息修改这个修改是从“领导”的角度进行的,第一行处于编辑状态,可以看到一些能够修改的项。部门和职位显示的是联合查询出的字段,相关设置如下:数据源SELECT语句为SELECTUsertable.UserName,Usertable.Email,Usertable.PhoneNumber,Usertable.Remain,Usertable.RealName,RoleTable.RoleName,Department.DepartmentName,Usertable.DepartID,Usertable.UserTypeFROMUsertableINNERJOINRoleTableONUsertable.UserType=RoleTable.RoleNumberINNERJOINDepartment数据源的UPDATE语句为UPDATEUsertableSETUserName=@UserName,RealName=@RealName,Email=@Email,PhoneNumber=@PhoneNumber,Remain=@Remain,DepartID=@DepartID,UserType=@UserTypeWHERE(UserName=@oril_UserName)上述语句都是在界面化的查询生成器中自动生成的。也可以直接写好,粘贴入相应的地方。数据源的要注意的属性如下图:图5.8数据源属性注意第二个变黑的属性,他将与SQL语句中的@oril_UserName相对应。此处UserName是参数@UserName。在GridView中对应使用了原值作为筛选的必须要设置下图属性:图5.9GridView属性原值使用了几个,DataKeyNames中就需要几个值,而且要对应上。这样员工信息的修改就十分方便了!5.2.3个人信息维护本模块涉及到两个页面Pwd_change.aspx以及Self_info_alter.aspx。这两个页面设计的都较简单,页面截图如下图5.10个人信息修改图5.11密码修改用户名文本框Enabled属性为false,这样用户名就不会被随便修改了,当然实在想换用户名可以联系系统管理员修改。个人信息修改相关代码如下:privatevoidget_user(){KSMISUsers.Useruser=newKSMISUsers.User(false);//true代表需要导入权限Listuser=(KSMISUsers.User)Session["LoginUser"];(Master.FindControl("lblUserName")asLabel).Text=user.RealName.ToString();TextBox1.Text=user.UserName;TextBox2.Text=user.RealName;TextBox3.Text=user.MobilePhone;TextBox4.Text=user.Email;}protectedvoidPage_Load(objectsender,EventArgse){if(IsPostBack)return;get_user();}protectedvoidButton1_Click(objectsender,EventArgse){user=(KSMISUsers.User)Session["LoginUser"]; user.UserName=TextBox1.Text;user.RealName=TextBox2.Text;user.MobilePhone=TextBox3.Text;user.Email=TextBox4.Text;Session["LoginUser"]=user;stringConnectionString=Public.Tools.GetConnectionString();SqlConnectionconn=newSqlConnection(ConnectionString);stringstrSql="updateUsertablesetRealName='"+TextBox2.Text+"',PhoneNumber='"+TextBox3.Text+"',Email='"+TextBox4.Text+"'whereUserName='"+user.UserName+"'";SqlCommandcmd=newSqlCommand(strSql,conn);try{conn.Open();if(cmd.ExecuteNonQuery()==1){Label7.Text="信息修改成功!";this.get_user();}else{Response.Write("<scriptlanguage='javascript'>alert('修改密码失败!');location.href='history.back()';</script>");}conn.Close();}catch{if(conn.State!=ConnectionState.Closed)conn.Close();Response.Write("<scriptlanguage='javascript'>alert('数据库操作异常!');history.back();</script>");}}5.2.4任务申请任务申请是下级对上级的一个申请,涉及到的数据库基本表为MissionPool(任务表),页面为Work_apply.aspx,截图如下:图5.12员工申请任务说明,任务申请时,上传的附件被按一定规则重命名了,重命名的附件名前加上了员工工作邮箱的“@”符前面部分。申请任务代码如下:protectedvoidButton1_Click(objectsender,EventArgse){//附件重命名Randomrdm=newRandom();intsuijishu;suijishu=rdm.Next(1000);//生成1000以下的随机非负整数,种子值为当前时间stringuesrname=user.UserName;stringmissionname=TextBox1.Text.Trim()+suijishu.ToString();stringnewfilename="";//保存附件到服务器if(FileUpload1.FileName!=""){newfilename=uesrname+"_"+suijishu.ToString()+FileUpload1.FileName.ToString();try{FileUpload1.PostedFile.SaveAs(Server.MapPath("../fileshare/"+newfilename));//Image1.ImageUrl="images/"+newfilename+"";}catch(Exceptionex){Response.Write(ex.ToString());return;}}//将任务插入MissionPoolinti,j;i=1;j=0;stringstrdate;strdate=DateTime.Today.ToString();stringConnectionString=Public.Tools.GetConnectionString();SqlConnectionconn=newSqlConnection(ConnectionString);stringstrSql="insertintoMissionPool(MissionName,MissionContent,TargetStaff,MissionState,Attachmentpath,IsPosted)values('"+missionname+"','"+TextBox2.Text+"','"+user.Email+"',"+i+",'"+newfilename+"',"+j+")";SqlCommandcmd=newSqlCommand(strSql,conn);try{conn.Open();if(cmd.ExecuteNonQuery()==1){Response.Write("<scriptlanguage='javascript'>alert('申请成功请耐心等待审核!');location.href='Work_apply.aspx';</script>");}conn.Close();}catch(Exceptionex){if(conn.State!=ConnectionState.Closed)conn.Close();Response.Write(ex.ToString());}}5.2.5任务布置布置任务是上级对下级的一项工作,涉及到的数据库基本表为MissionPool(任务表),页面为Add_mission.aspx与任务申请页面相似。截图如下:图5.13布置任务注意:任务布置后就立马成为已建立状态,不需要经过申请传化为已建立的这一道审核手续。插入数据库的同时,还会和员工邮箱通信,通信这部分会在第六章中介绍。期望执行员工的控件和数据库中的Usertable(用户表)绑定,显示的是用户姓名,值是用户的办公邮箱。布置任务关键代码如下inti,j;i=2;j=1;stringstrdate;strdate=DateTime.Today.ToString();stringConnectionString=Public.Tools.GetConnectionString();SqlConnectionconn=newSqlConnection(ConnectionString);stringstrSql="insertintoMissionPool(MissionName,MissionContent,TargetStaff,MissionState,Attachmentpath,BuiltTime,DeadlineTime,IsPosted)values('"+TextBox1.Text+"','"+TextBox2.Text+"','"+DropDownList1.Text.Trim()+"',"+i+",'"+newfilename2+"','"+strdate+"','"+TextBox3.Text+"',"+j+")";SqlCommandcmd=newSqlCommand(strSql,conn);try{conn.Open();if(cmd.ExecuteNonQuery()==1){Mark=1;//用变量记住插入成功}conn.Close();}catch(Exceptionex){//异常处理}5.2.6任务提交这个过程涉及到多个页面,有Mywork_pool.aspx,Aboutdownload.aspx,等,涉及到的数据库基本表为MissionPool(任务表),由于网站并不是这个设计的主体(内容分量上是主体,但研究上不是主体),这个流程目前还不够完善,晚上思路是,再添加一个页面,将编辑好的数据重新存入数据库,将状态改为已提交,覆盖掉原先的已建立状态的先关任务。目前员工可以查看任务,编辑任务数据,就差一个提交页面。Mywork_pool.aspx实现的是任务查看,用的是GridView控件,其中SELECT语句中有一个参数来至于页面DropDownList控件的值,一个来源于session。DropDownList传的是任务状态,他和MissionStateTable(任务状态表)相绑定。session传的是当前用户的办公邮箱地址。页面截图如下:图5.14员工任务查看注意上述测试数据是在未添加附件时测试的,所以附件这一栏为空,后期又做了测试,附件模块基板功能能够实现但还有待完善。关于GridView部分的设置参见4.2.2节第三个部分。查看完任务后,选着其中的一条,然后再到Aboutdownload.aspx页面寻找相关的附件下载到当地。Aboutdownload.aspx页面截图如下:图5.15附件下载说明:上截图是员工1号的附件,这个页面是动态显示的,不同的员工来到这个页面能够看到的文件是不一养的,同一员工在不同的工作流程阶段来到这个页面看到的文件也是不同的。其实还有一种简单的实现方式,就是在Mywork_pool.aspx的页面中的GridView上添加一个包含LinkButton的模板列,设置好相关属性和事件关联即可实现附件下载。这个页面还有一个作用,就是当当前用户为空时,可以查看网站文件夹fileshare中全部的文件。本页面运用了PlaceHolder控件。下载代码节选:stringforename="";KSMISUsers.Useruser=newKSMISUsers.User(false);if(Session["LoginUser"]!=null){user=(KSMISUsers.User)Session["LoginUser"];(Master.FindControl("lblUserName")asLabel).Text=user.RealName.ToString();intindex=user.Email.IndexOf("@");forename+=user.Email.Substring(0,index);//获得邮件地址@符前的字符串}//构建PlaceHolder1,根据员工邮箱名称stringfile_folder=this.Server.MapPath("./fileshare/");DirectoryInfoinfo=newDirectoryInfo(file_folder);foreach(FileInfofiininfo.GetFiles()){if(forename=="")//若当前用户为空,则将所有文件都显示出来{LinkButtonl=newLinkButton();l.Text=fi.Name;l.ToolTip="下载";l.Font.Bold=true;l.Click+=newEv

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论