项目管理系统最后结果.doc_第1页
项目管理系统最后结果.doc_第2页
项目管理系统最后结果.doc_第3页
项目管理系统最后结果.doc_第4页
项目管理系统最后结果.doc_第5页
已阅读5页,还剩25页未读 继续免费阅读

下载本文档

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

文档简介

项目管理信息系统一、目录一、目录1二、任务书2三、正文23.1设计目的23.2建立用户全局函数及自定义事件33.2.1全局函数f_encypt33.2.2自定义事件uo_dw_freedow33.2.3自定义事件uo_dw_delete43.2.4自定义事件shifter43.2.4自定义事件dberror43.3功能分析53.4表的设计63.5系统实现83.5.1主窗口83.5.2用户登陆窗口93.5.3部门数据录入与维护窗口103.5.4人员信息窗口123.5.5人员数据检索窗口133.5.6项目数据管理窗口163.5.7项目数据查询窗口183.5.8项目数据录入、编辑窗口193.5.9用户管理窗口223.5.10密码修改窗口243.5.11用户数据的录入和编辑窗口253.5.12数据备份窗口263.5.13运行界面28四、总结284.1系统评价284.1 .1系统特色294.1.2系统不足及改进294.1.3课程设计心得29五、参考文献30二、任务书图书馆查阅资料: 王雪娥 方俊 孙翠丽 设计并创建并联接数据库: 方俊 王雪娥 创建表格及主键、外键、及索引,并编入数据: 方俊 王雪娥 代码编写: 王雪娥 方俊 孙翠丽 吕剑豪 创建数据窗口对象: 孙翠丽 王雪娥 方俊 建立用户自定义事件并建立全局函数:方俊 各功能窗口模块化设计: 王雪娥:用户登陆窗口 部门数据录入和维护窗口 人员数据检索窗口 用户管理窗口 方俊: 人员数据录入、维护和查询窗口 项目数据显示窗口 项目录入、编辑窗口 用户数据录入、编辑窗口 孙翠丽: 项目数据查询窗口 部门人数统计窗口 更改密码窗口 吕剑豪:系统主窗口 数据备份窗口菜单应用设计:王雪娥论文编写:王雪娥 方俊 孙翠丽 吕剑豪三、正文3.1设计目的进一步加深、巩固学生所学专业课程的基本理论知识,理论联系实际,进一步培养学生综合分析问题和解决问题的能力。使学生得到搜集、处理、应用资料信息的实践训练,同时全面考察学生所掌握的基本理论知识及其实际业务能力,从而达到提高学生素质的最终目的。3.2建立用户全局函数及自定义事件3.2.1全局函数f_encypt/功能:加密/参数:字符串/返回值:字符串integer i,li_kllenstring ls_zmklli_kllen=len(a_ymm)for i=1 to li_kllenls_zmkl=ls_zmkl+char(asc(mid(a_ymm,i,1)+i+li_kllen)nextreturn ls_zmkl3.2.2自定义事件uo_dw_freedowif getrow()0 thenif deleterow(0)=1 thenmessagebox(提示,当前记录已被删除,请按“保存”按纽提交) end ifend if3.2.3自定义事件uo_dw_deleteif this.update()0 thencommit using sqlca;messagebox(提示,数据已存盘)elserollback using sqlca;messagebox(提示,数据无法存盘,exclamation!)end if3.2.4自定义事件shifterif key=keyenter! or key=keydownarrow! thenkeybd_event(9,0,0,0)keybd_event(9,0,2,0)return(0)end ifif key=keydownarrow! thenkeybd_event(16,0,0,0)keybd_event(9,0,0,0)keybd_event(9,0,2,0)keybd_event(16,0,2,0)return(1)end if3.2.4自定义事件dberror/显示错误信息messagebox(数据库错误,错误代码+string(sqldbcode)+rn+错误信息+sqlerrtext)return(1)3.3功能分析本系统以项目信息(项目编码,项目名称,开发经费,应用情况和参加人员),以及项目开发人员自身的信息(编码,姓名,性别,出生年月,职称和部门)为主线,以部门表等为辅表,实现了项目和人员信息的录入、查询和管理等功能,展示了用POWERBUILDER9.0开发系统的方法和技巧。系统功能模块分析(1) 系统登陆(2) 数据处理l 部门数据维护l 人员数据维护、查询l 项目数据维护、查询(3)统计报表l 部门人数统计l 项目数据统计(4)系统管理l 更改密码l 数据备份(5)窗口管理(6)系统帮助3.4表的设计部门信息表部门信息表用于记录单位中所有部门及部门编码,主键为部门号(dept_id)。表结构如上表所示人员信息表人员信息表用于记录单位员工的主要信息,主键是员工号(p_id)。表结构如上表所示。其中性别字段用1位字符表示,M表示男,F表示女。项目信息表项目信息表用于记录项目信息,主键是项目编码pro_id。表结构如上表所示。项目参与人员表 项目参与人员表member用于记录项目开发的参与人员,主键是项目编码和员工号。因为一个项目可能有多人参与,而一个人也可能参与多个开发项目,因此单独用此表来记录,而没有在项目信息表或人员信息表中几记载,这样做的目的在于减少数据的冗余。系统用户信息表其中,用户类型字段用1位字符表示,0表示管理用户,1表示普通用户。3.5系统实现3.5.1主窗口这是窗口的closequery事件脚本long ll_returnll_return=messagebox(提示,确定要退出吗!,question!,yesno!,1)if ll_return=2 thenreturn 1 /不关闭窗口elsereturn 0 /关闭窗口end if这段程序的作用是当用户系统主窗口时,系统会提示用户是否确认退出,以避免用户的误操作导致系统终止运行,如上图所示。3.5.2用户登陆窗口定义全局变量string gs_userid,gs_pwdboolean gb_manager确定按纽的clicked事件代码string ls_name,ls_pw,ls_typels_name=sle_name.textls_pw=sle_pw.textif ls_name thenselect passwd,user_typeinto :gs_pwd,:ls_typefrom userswhere user_id=:ls_name;if f_encypt(ls_pw)gs_pwd or sqlca.sqlcode0 thenif ii_time=3 thenmessagebox(error,sorry you can not!)halt closeelseii_time+messagebox(error,please again!)end ifsle_name.setfocus()elseif ls_type=0 thengb_manager=trueend ifgs_userid=ls_nameopen(w_main)close(parent)end ifend if单行编辑框的modified事件代码if keydown(keyenter!) then if this.text= then return else setfocus(cb_ok) cb_ok.triggerevent(clicked!) end ifend if3.5.3部门数据录入与维护窗口定义窗口的实例变量integer ii_id新增按钮的clicked事件代码string ls_maxidlong ll_rowcount,ll_rowll_rowcount=dw_department.rowcount()if ll_rowcount0 thenls_maxid=dw_department.getitemstring(ll_rowcount,dept_id)ii_id=integer(ls_maxid)+1elseii_id=1end ifll_row=dw_department.insertrow(0)dw_department.scrolltorow(ll_row)dw_department.setitem(ll_row,dept_id,string(ii_id)dw_department.setfocus()下面的代码作用是给数据窗口设定事物对象并检索数据。dw_department.settransobject(sqlca)dw_department.retrieve()下面依次是删除、更新、保存、关闭按钮的clicked事件dw_department.deleterow(0)dw_department.update()dw_department.event ue_save()close(parent)该窗口用来录入、维护和查询人员数据3.5.4人员信息窗口下面的代码作用是给数据窗口设定事物对象并检索数据。dw_personnel.settransobject(sqlca)dw_personnel.retrieve()/保存数据窗口的selete语法is_selete=dw_personnel.describe(daeawindow.table.selete)新增按钮的clicked事件代码string ls_maxidlong ll_rowcount,ll_rowll_rowcount=dw_personnel.rowcount()if ll_rowcount0 thenls_maxid=dw_personnel.getitemstring(ll_rowcount,p_id)ii_id=integer(ls_maxid)+1elseii_id=1end ifll_row=dw_personnel.insertrow(0)dw_personnel.scrolltorow(ll_row)dw_personnel.setitem(ll_row,p_id,string(ii_id,0000)dw_personnel.setfocus()查找按钮的clicked事件代码string ls_selectlong ll_rowcountopenwithparm(w_find_personnel,dw_personnel)ls_select=message.stringparmif ls_select= then return/根据返回的字符串重新构造数据窗口的select语句。以达到查询的目的dw_personnel.modify(datawindow.table.select=+ls_select+)ll_rowcount=dw_personnel.retrieve()if ll_rowcount0 thencb_delete.enabled=trueelsecb_delete.enabled=falseend if/把数据窗口的select语句设为原来的值dw_personnel.modify(datawindow.table.select=+ls_select+)下面依次是删除、更新、保存、关闭按钮的clicked事件dw_department.deleterow(0)dw_department.update()dw_department.event ue_save()close(parent)该窗口在w_personnel中cb_find的clicked事件打开,用来执行对人员数据的检索功能。3.5.5人员数据检索窗口该窗口在w_personnel中的cb_find的clicked事件打开,用来执行对人员数据的检索功能。窗口的open事件脚本idw_action=message.powerobjectparmdw_dept.settransobject(sqlca)dw_dept.retrieve()dw_dept.insertrow(0)sle_id.setfocus()确定按纽的clicked事件脚本string ls_input,ls_selectls_select=lower(idw_action.describe(datawindow.table.select)if rb_id.checked=true thenif sle_id.text thenls_input=sle_id.textls_select=ls_select+where p_id=+ls_input+closewithreturn(parent,ls_select)elsemessagebox(提示,请输入查询条件!)end ifelseif rb_name.checked=true thenif sle_name.text thenls_input=sle_name.textls_select=ls_select+where name like%+ls_input+%closewithreturn(parent,ls_select)elsemessagebox(提示,请输入查询条件!)end ifelse ls_input=dw_dept.getitemstring(dw_dept.getrow(),deptid)if not isnull(ls_input) thenls_select=ls_select+where dept_id=+ls_input+closewithreturn(parent,ls_select)elsemessagebox(提示,请输入正确的查询条件!)end ifend ifrb_id的clicked事件脚本sle_name.enabled=falsedw_dept.enabled=falsesle_id.enabled=truesle_id.setfocus()rb_name的clicked事件脚本sle_id.enabled=falsedw_dept.enabled=falsesle_name.enabled=truesle_name.setfocus()rb_dept的clicked事件脚本sle_id.enabled=falsesle_name.enabled=falsedw_dept.enabled=truedw_dept.setfocus()该窗口用来对项目进行录入和维护,同时提供检索功能。3.5.6项目数据管理窗口窗口的open的事件代码Long ll_rowcountdw_member.SetTransobject (SQLCA)ll_rowcount=dw_member.Retrieve()IF ll_rowcount=0 THENcb_edit.Enabled=Falsecb_delete.Enabled=FalseEND IFis_select=dw_member.Describe(datawindow.table.select)cb_edit的clicked事件脚本Long ll_rowString ls_proidll_row=dw_member.GetRow()ls_proid=dw_member.GetItemString(ll_row,pro_id)OpenWithParm(w_project_edit,ls_proid)cb_find的clicked事件脚本String ls_selectLong ll_rowcountOpenWithParm(w_find_project,dw_member)ls_select=Message.StringParmIF ls_select=THEN Returndw_member.Modify(datawindow.table.select=+ls_select+)ll_rowcount=dw_member.Retrieve()IF ll_rowcount0 THENcb_edit.Enabled=TRUEcb_delete.Enabled=TrueELSEcb_edit.Enabled=FALSEEND IFdw_member.Modify(datawindow.table.select=+ls_select+)cb_delete的clicked事件脚本String ls_proidIF MessageBox(警告,删除记录将无法恢复!rn确实要删除当前项目信息吗?,Exclamation!,YesNo!,2)=1 THENls_proid=dw_member.GetItemString(dw_member.GetRow(),pro_id)IF NOT IsNull(ls_proid) THENDELETE FROM member WHERE pro_id=:ls_proid;DELETE FROM project WHERE pro_id=:ls_proid;MessageBox(提示,当前项目信息已被删除)ELSEMessageBox(提示,没有可删除的记录)END IFEND IFCb_refersh的clicked事件脚本Long ll_rowcountll_rowcount=dw_member.Retrieve()IF ll_rowCount0 THENcb_edit.Enabled=Truecb_delete.Enabled=TrueELSEcb_edit.Enabled=Falsecb_delete.Enabled=FalseEND IF3.5.7项目数据查询窗口该窗口在w_project_list中cb_find的事件打开,用来对项目数据进行查询。该窗口在w_project_list中cb_find的clicked事件打开,用来对项目数据进行查询。定义窗口的实例变量datawindow idw_action编写窗口的open事件脚本idw_action=message.powerobjectparmdw_project.settransobject(sqlca)dw_personnel.settransobject(sqlca)dw_project.retrieve()dw_project.insertrow(0)dw_personnel.retrieve()dw_personnel.insertrow(0)dw_project.setfocus()编写的cb_ok事件clicked脚本string ls_input,ls_selectls_select=lower(idw_action.describe(datawindow.table.select)if rb_pro.checked=true thenls_input=dw_project.getitemstring(dw_project.getrow(),proid)if not isnull(ls_input) thenls_select=ls_select+where pro_id=+ls_input+closewithreturn(parent,ls_select)elsemessagebox(提示,请输入正确的查询条件)end ifelsels_input=dw_personnel.getitemstring(dw_personnel.getrow(),pid)if not isnull(ls_input) thenls_input=ls_select+where p_id=+ls_input+closewithreturn(parent,ls_select)elsemessagebox(提示,请输入正确的查询条件)end ifend if编写cb_close的clicked事件脚本closewithreturn(parent,)3.5.8项目数据录入、编辑窗口该窗口在项目数据显示窗口w_project_list的“新增”和“编辑”按钮的click事件中打开,用来对项目进行录入或编辑。(窗口的类型及属性如上图。)定义实例变量窗口的open()事件脚本dw_project.settransobject(sqlca)dw_member.settransobject(sqlca)if message.stringparm=new thenstring ls_maxidlong ll_rowcount,ll_rowinteger li_idthis.title=this.title+录入select max(pro_id) into :ls_maxid from project;if integer(ls_maxid)0 thenli_id=integer(ls_maxid)+1elseli_id=1end ifdw_project.retrieve()ll_row=dw_project.insertrow(0)dw_project.scrolltorow(ll_row)dw_project.setitem(ll_row,pro_id,string(li_id,0000)dw_member.retrieve(string(li_id,0000)is_proid=string(li_id,0000)dw_project.setfocus()elsethis.title=this.title+编辑dw_project.retrieve(message.stringparm) dw_member.retrieve(message.stringparm) is_proid=message.stringparmend if上面的语句判断接受的参数,如果是新增记录,则在获得最大项目ID后,把它赋给新添加记录的相关字段;如果是编辑记录,则把数据调出来编辑。新增的click事件脚本是:long ll_rowll_row=dw_member.insertrow(0)dw_member.scrolltorow(ll_row)dw_member.setitem(ll_row,pro_id,is_proid)dw_member.setfocus()删除的click事件脚本:dw_member.deleterow(0)cb_new.enabled=truecb_save.enabled=true编写dw_member的数据窗口空件Itemchanged事件脚本:long ll_rowstring ls_pidfor ll_row=1 to this.rowcount()ls_pid=this.getitemstring(ll_row,p_id)if not isnull(ls_pid) thenif data=ls_pid and (ll_rowrow) thenmessagebox(提示,该人员也存在,stopsign!)cb_new.enabled=falsecb_save.enabled=falsereturn 1elsecb_new.enabled=true cb_save.enabled=trueend ifend ifnext以上是用来检查人员是否重复保存的click事件是:long ll_rowstring ls_pidfor ll_row=1 to this.rowcount()ls_pid=this.getitemstring(ll_row,p_id)if not isnull(ls_pid) thenif data=ls_pid and (ll_rowrow) thenmessagebox(提示,该人员也存在,stopsign!)cb_new.enabled=falsecb_save.enabled=falsereturn 1elsecb_new.enabled=true cb_save.enabled=trueend ifend ifnext3.5.9用户管理窗口该窗口用来管理登陆用户的数据与之关联的数据窗口对象d_user_list窗口的open事件脚本:dw_user.settransobject(sqlca)dw_user.retrieve()数据窗口空件的rowfocuschanged事件脚本:IF this.GetRow()0 THEN this.SelectRow(0,False) this.SelectRow(currentrow,True)END IF以上语句用来实现当前行的高亮显示新增的clicked事件脚本:OpenwithParm(w_user_edit,addnewuser)dw_user.Retrieve()编辑的click事件脚本:Long ll_rowString ls_useridll_row=dw_user.GetRow()IF ll_row0 THEN ls_userid=dw_user.GetItemString(ll_row,user_id) IF NOT IsNull(ls_userid) THEN OpenWithParm(w_user_edit,ls_userid) dw_user.Retrieve() END IFEND IF删除的clicked事件脚本:Long ll_rowll_row=dw_user.GetRow()IF ll_row0 THENIF MessageBox(警告,删除记录将无法恢复!确定要删除当前用户信息吗!,Exclamation!,YesNo!,2)=1 THEN dw_user.DeleteRow(0) IF dw_user.Update()0 THEN COMMIT USING SQLCA; MessageBox(提示,无法删除当前记录!)else ROLLBACK USING SQLCA; MessageBox(提示,无法删除当前记录!) END IF END IFEND IF3.5.10密码修改窗口Open事件脚本:dw_project.settransobject(sqlca)dw_project.retrieve()Sle_oldpw的modified事件脚本:sle_newpw.setfocus()sle_newpw的modified的事件脚本:sle_newpwag.setfocus()sle_newpwag的modified事件脚本:if this.textsle_newpw.text thenmessagebox(错误,两次输入的密码不一样,请重输!) this.setfocus()elsecb_ok.setfocus()end ifcb_ok的clicked的事件脚本:String ls_cpwdIF f_encypt(sle_oldpw.Text)gs_pwd THENMessageBox(错误,原密码错误,请输入!)sle_oldpw.Setfocus()ELSEIF sle_newpw.Textsle_newpwag.Text THENMessageBox(错误,前后新密码不一致,请输入!)sle_newpw.SetFocus()ELSEls_cpwd=f_encypt(sle_newpw.Text) /加密UPDATE usersSET passwd = :ls_cpwdWHERE user_id = :gs_useridUSING SQLCA;IF SQLCA.SQLNRows 0 THENCOMMIT USING SQLCA;MessageBox(提示,密码已成功更改!)gs_pwd=ls_cpwdELSEROLLBACK USING SQLCA;MessageBox(错误,无法更改密码!)END IFCLOSE(parent)END IF3.5.11用户数据的录入和编辑窗口该窗口在w_user_list窗口的cb_new和cb_edit的clicked事件中打开,实现用户数的录入和编辑。窗口open事件脚本:string ls_parmls_parm=message.stringparmdw_user.settransobject(sqlca)if ls_parm=addnewuser thenthis.title=this.title+录入dw_user.retrieve()dw_user.scrolltorow(dw_user.insertrow(0)elsethis.title=this.title+编辑dw_user.retrieve(ls_parm)end ifcb_save的clicked事件脚本:long ll_rowstring ls_pwdw_user.accepttext()ll_row=dw_user.getrow()ls_pw=dw_user.getitemstring(ll_row,passwd)ls_pw=f_encypt(ls_pw)dw_user.setitem(ll_row,passwd,ls_pw)if dw_user.update()0 then commit using sqlca;messagebox(提示,数据已存盘)else rollback using sqlca; messagebox(提示,数据无法存盘,exclamation!)end if上述语句首先驱除数据窗口中的passwed字段的值,对其加密处理后再赋给该字段,然后更新数据库。3.5.12数据备份窗口Open事件脚本:String ls_path/取默认备份路径ls_path=ProfileString(project.ini,backup,path,)sle_path.Text=ls_path上述语句从配置文件中取出备份路径,并在sle_path中显示出来。Pb_browse的图象clicked事件脚本:String ls_path = c:projectbackupInteger li_resultli_result = GetFolder(选择备份文件夹,ls_path)IF li_result=1 THENsle_path.text=ls_pathEND IFCb_ok的clicked事件的脚本:String ls_path,ls_runBoolean lb_fexistls_path=sle_path.textIF trim(ls_path)=OR Isnull(ls_path) THENMessageBox(提示,请输入或选择备份目录)sle_path.SetFocus()ReturnELSEIF DirectoryExists(ls_path)=FALSE THENIF MessageBox(提示,ls_path+不存在,是否创建该目录,Question!,yesNo!,1)=1 THENInteger li_filenumIF CreateDirectory (ls_path)1 THENMessageBox(提示,无法创建目录)Close(parent)ReturnEND IFELSEsle_path.SetFocus()END IFEND IFEND IFSEtProfileS

温馨提示

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

评论

0/150

提交评论