《04web应用程序设计 张荟 毕业论文.docx》由会员分享,可在线阅读,更多相关《04web应用程序设计 张荟 毕业论文.docx(36页珍藏版)》请在课桌文档上搜索。
1、福生本科生毕业设计(论文)任务书2007年1月22B至2007年5月15S题目:打印技术在学生量化考核系统中的应用和探讨姓名:张荟学号:260401192学院:福大工程技术学院专业:WEB应用程序设计年级:2004级指导老师:(签名)系主任(或教研室主任):(签章)第一章绪论2其次章目前系统常用的打印方法简介4三.C#应用程序的几种打印方法81.重要的打印类8第三章简介19第四章学生量化考核系统概述214.1 系统设计思想214.2 系统总体结构图214.3 系统功能模块图224.3.1客户端服务设计224.3.2WEB端服务设计224.4 系统开发工具224.5 查询功能模块设计221. 5
2、.1查询条件功能设计224. 5.2搜寻功能设计235. 5.3打印功能设计234.6 系统管理功能模块设计244.6.1 用户权限功能设计244.6.2 数据导入功能设计244.6.3 后台管理功能设计24第五章实现错误!未定义书签。5.1 运用方法介绍265.2 程序代码解析26第六章成果36第七章参考文献36第八章附录36摘要学生量化考核系统基于MicrosoftVisualStudio2003前台开发平台,以SQ1.SerViCe2000作为后台数据库开发,整个系统总共划分为三大功能模块:量化查询模块,量化评分模块,系统管理模块。在整个系统中,打印功能是不行或缺的。尤其在该系统中查询模
3、块可以依据用户的要求显示出所需的信息,不同的用户有不同的需求,例如辅导员有时须要打印报表,假如该系统不支持打印技术,那么就须要用户复制须要打印的内容到如EXCE1.等中打印,操作烦琐,给用户带来诸多不便,因此系统自带打印功能操作起来便利、快捷,提高了工作效率与精确率。本课题主要是探讨目前很多系统中盛用的一些打印技术,并依据学生量化考核系统的特点,找寻一种适合本系统的打印方法,实现一键轻松打印的功能,便利用户,减轻服务器的承载负担。关键字:打印方法,C#,VB第一章绪论现在高校的学生各项信息的管理趋向于困难化和多元化,随着计算机的广泛应用,越来越多的高校均采纳了计算机化的管理模式。查询、修改、录
4、入、删除等基本操作都采纳了计算机的数据库技术。比起以前运用卡片的方法有了很大的进步,便利管理,易于更新,极大的便利了学生信息的管理工作。以前我国的大中专院校学生信息的管理水平停留在纸介质的基础上,那样的机制不能适应时代的发展,因为它奢侈了很多人力和物力,在信息时代这种传统的管理方法必定被计算机为基础的信息管理所取代。“学生量化考核系统”是一个学校不行缺少的部分,它的内容对于学校管理者和被管理者来说都至关重要,所以学生档案管理系统应当能够为用户供应足够的信息和快捷的查询手段。通过调查,几乎全部的大中专院校均以采纳了计算机化的管理模式,极大的便利了学校的学生量化的管理工作。作为计算机应用的一部分,
5、运用计算机对学生量化信息进行管理,具有着手工管理所无法比拟的优点。例如:检索快速、查找便利、牢靠性高、存储量大、保密性好、寿命长、成本低等。这些优点能够极大地提高学生档案管理的效率,也是学校的科学化、正规化管理,与社会接轨的重要条件。打印功能在学生量化考、核系统中是不行或缺的功能之一,在该系统其中查询模块可以依据用户的要求显示出所需的信息,不同的用户有不同的需求,例如辅导员有时须要打印报表,假如该系统不支持打印技术,那么就须要用户复制须要打印的内容到如EXCE1.等中打印,操作烦琐,给用户带来诸多不便,因此系统自带打印功能操作起来便利、快捷,提高了工作效率与精确率。当今,在很多系统中都自带打印
6、功能,只需轻轻的一点击,就能轻松的完成打印任务,实现打印功能有多种方法,诸如:利用.NET平台中的控件,WEB实现打印功能,利用组件来实现页面打印,在C#中实现,通过调用EXCE1.或者WORD,以及调用IE阅读器等多样的可行性方案,用户可依据各自不同的须要,选择适当的方法实现系统的打印功能。随着计算机技术的发展,软件平台功能越来越强大,高级语言的多样化,实现打印功能的方法不断创新,在不久的将来,开发者会充分的利用计算机本机的资源,调用本机的功能轻松化的满足用户的需求。QQQ在此毕业论文中,我将充分结合所学的学问以及课外搜集的技术,依据在大实训中参加的“学生量化考核系统”的建设中了解到该的用户
7、需求及系统特点,尽我所能地将其综合起来,尽可能完备地让用户实现打印功能。第二章目前系统常用的打印方法简介打印是编制应用程序过程中最困难的事情之一,不同的打印机供应了各种不同的功能。编写能充分利用打印机性能的子程序与编写应用程序的其它部分一样都很困难。庆幸的微软的Windows平台使打印工作变得相对简洁了,以下我就介绍几种打印方法:一.VisualBaSiC应用程序的几种打印方法1、采纳ViSUaIBaSiC供应简洁的打印函数PrintFOrm方法应用程序窗体的PrintFonn方法时,ViSUalBaSiC把窗体的位图送到当前打印机。该方法的优点在于它几乎不须要任何编程,但也有很大缺陷。最为突
8、出的是当低辨别率图形在高辨别率打印机上打印时.,其结果令人无法满足,会产生锯齿。下面代码将在打印机上打印窗体。PrivateSubCommand1_C1ick()用PrintFOnn打印Me.PrintForm打印窗体的可见区域EndSub2、用PrintCr对象用Printer对象可以进行高辨别率输出,但要想产生困难的打印输出,编程较为繁琐。Printer对象代表系统确省的打印机。Printer对象支持很多由窗体和图形框所支持的属性和方法,三种对象都有画线和画方框。应用程序可用以下列代码在Printer对象上画出一平方英寸的方框。它离左上角二英寸。留意:打印机以twips来测量距离。每英寸有
9、1440个twips。Printer.1.ine(2*1440,2*1440)-Step(1440,1440),B打印机、从窗体和图形框都有Circle、PaintPicturePrint、Pset、TCXtHCight、TeXtWidth方法。运用这些方法,应用程序可以为打印机生成高辨别率输出。打印文本干脆用Print方法,见下列代码:Printer.PrintHello,ChinaComputerWorld!,打印字符串Printer对象还有一些窗体和图形框都没有方法:NewPage告知打印机,程序对当前输出页的发送已经结束。Printer对象应起先新的一页。EndDoc告知VISUA1.
10、BASIC,程序创建文档结束。VISUA1.BASIC应将它发送到物理打印机上打印。KinDOC取消当前打印作业。应用程序应当终止由EndDOC和KinDOC所设定的每个打印作业。ZOOm属性用于定义打印输出的缩放因子。Copies属性用于定义打印的副本数目。这种方法通过敏捷的编程可以便利地调整字体、字型、线形、页面、纸张大小等,可打印出比较满足的效果。假如计算机上装有MicrosoftWord和MicrosoftExcel,则可把GRID的表格通过VB发送到这些应用程序中去,生成MicrosoftWord和MicrosoftExcel表格。这样可以充分利用它们的打印、编辑功能,打印出更志向的
11、效果。下面逐一介绍。3、采纳干脆将数据传送打印机的方法进行打印输出该方法也不太好用。有两种方法将数据送往打印机。第一种是用Print#方法,就象将数据写入一个文件一样写数据。另一种方法写端口,但不是送文本,而是送特定的PC1.语言,PC1.表示打印限制语言(PrintControl1.anguage)o它是一种特殊语言,用转义代码来限制打印机的详细动作。此方法实现起来颇为繁琐。4、运用RichTextBox控件的SelPrint方法假如你在编程时用到了RiChTeXtBOX限制,那么你可以运用该控件的SelPrint方法来打印,运用特别简洁。下面一段代码即用RiChTeXtBOX控件的SelP
12、rint方法来完成打印。PrivateSubCommand3_Click()SclPrint方法ComnionDialogl.Flags=CdlPDReturnDC+cd1PDNoPageNumsIfRTF1.Sel1.ength=0Then,RTFl为窗体的RiChTeXtBoX限制ConimonDialogl.Flags=ConimonDialogl.Flags+CdlPDAllPagesElseComnionDialogl.Flags=ConimonDialogl.Flags+CdlPDSelectionEndIfConimonDialogl.CancelError=TrueOnErro
13、rResumeNextComnionDialogl.ShowPrinterIfErr.Number=cdlCancelThenExitSubIfErr.NumberOThenBeepMsgBoxErrorprintingfile.&vbCr1.f+Err.Description,vbOKOnly+VbExclamation,PrintingError!zExitSubEndIfPrinter.Print”RTFl.SelPrintConimonDialogl.hDC打印RTFl控件的可见区域EndSub上面代码先进行打进设置,再进行打印。假如不须要设置,采纳下面代码更为简洁。RTFl.SelP
14、rintPrinter.hDC打印RTFl控件的可见区域5、可以在VB中调用Word供应的O1.E自动化服务假如计算机上装有MiCroSoftWord和MiCrOSOftExcel,则可把GRID的表格通过VB发送到这些应用程序中去,生成MicrosoftWord和MicrosoftExcel表格。这样可以充分利用它们的打印、编辑功能,打印出更志向的效果。下面代码说明VB如何与Word集成。PrivateSubCommand4_Click()调用Word打印DimobjWordAsObjectConstC1.ASSOBJECT=Word.ApplicationOnErrorGoToobjErr
15、orSetobjWord=CreateObject(C1.ASSOBJECT)objWord.Visible=TrueobjWord.Documents.AddWithobjWord.ActiveDocunient.Paragraphs.1.ast.Range.Bold=False.ActiveDocunient.Paragraphs.1.ast.Range.Font.Size=20.ActiveDocunient.Paragraphs.1.ast.Range.Font.Name=黑体.ActiveDocument.Paragraphs.1.ast.Range.Font.ColorIndex=
16、4.ActiveDocument.Paragraphs.1.ast.Range.Text=我是计算机世界读者!”EndWithClipboard.ClearClipboard.SCtTCXt通过剪切板向WORD传送数据!objWord.Selection.PasteobjWord.PrintPreview=True,预览方式,objWord.Printut,执行打印,objWord.QUit退出WordExitSubobjError:IfErr429ThenMsgBoxStr$(Err)&Error$SetobjWord=NOthing不能创建WOrd对象则退出ExitSubElseResum
17、eNextEndIfEndSub通过生成Word表格打印实现步骤如下:a.在declaration中写入:DimmswordAsObjectb.加入打印吩咐按钮(COnimand2),CAPTloN设为“生成WOrd表格”,写入下面代码:PrivateSubcommand2_Click()screen.MousePointer=11Setmsword=CreateObject(,word.basiczz)DimAppID,ReturnValueappID=Shell(/zd:office97officeWIN-WORD.EXEzz,1)运行Wordmsword.AppActivateMicro
18、softWorcrfullScreen.MousePointer=0EndSubc.写入以下过程full()Subfull()DimiAsInteger,jAsInteger,colAsInteger,rowAsIntegerDimcellcontentAsStringMe.Hidecols=4表格的列数row=gridrow,打印表的行数msword.fIlenewdefaultmsword.MsgBox”正在建立MS_WORD报表,请稍候,-imsword.Ieftparamsword.screenupdating0msword.tableinserttable,col,row,16,16
19、7msword.startofdocumentforj=0togridrow,表格的行数gridl.row=jFori=1TocolsGrild.col=iIfIsNull(gridl.text)Thencellcontent$=”ElseCellcontentJ=gridl.textEndIfmsword.Insertcellcontent$msword.nextcellNextiNextjmsword.tabledeleterowmsword.Startofdocumentmsword,tableselectrowmsword.tableheadings1msword.centerpara
20、msword.Startdocumentmsword.screenrefreshmsword.screenupdating1msword.MsgBox结束,-1Me.ShowEndSub通过发送到Excel实现表格打印步骤如下:加入打印吩咐按钮(Command3),CAPTlON设为生成EXCE1.表格,写入下面代码:PrivateSubcommand3_Click()DimiAsIntegerDimjAsIntegerDimxIAppAsExcel.ApplicationDimxIBookAsExcel.WorkbookDimxlSheetAsExcel.WorksheetSetxIApp=
21、CreateObject(Excel.Application*)xlApp.Visible=TrueSetxIBook=xlApp.Workbooks.AddSetxlSheet=xlBook.Worksheets(I)xlSheet.CelIs(6,1)=iFori=OTogridrowgridl.Row=iForj=OTo6Gridl.Col=jIfIsNull(Gridl.Text)=FalseThenxlSheet.Cells(i+5,j+1)=Gridl.TextEndIfNextjNextiEndSub三.C#应用程序的几种打印方法1 .重要的打印类PrintDocument用于将
22、输动身送到打印机。可实例化一个PrintDocument,设置一些属性描述打印的内容,然后调用Print方法。PrintDOCUnlerIt为要打印的每一页引发PrintPage事务。可向此事务的事务处理程序添加打印逻辑。.NET框架供应两个限制器:DefaUItPrintControIlCr呈现到打印机;PreviewPrintController呈现到PrintPreviewControl;通常,从来不必实现PrintController仅当要呈现到其他土面时才实现PrintControllero2 .打印逻辑须要做的第一件事是编写打印逻辑。这可通过处理PrintDocument上的事务来
23、完成。当调用PrintDocument.Print()方法时,引发下列事务:BeginPrint、PrintPage(一个或多个)、EndPrint;PrintPage事务的参数类型(PrintPageEventArgs)具有HaSMorePageS属性。假如在事务处理程序返回时,此属性设置为true,则PrintDOCUnIent设置新页并再次引发PrintPage事务。因此,PrintPage事务处理程序中的逻辑基本上是:运用事务参数中的信息页的内容。这些事务参数包含打印机的GraPhics、该页的PagCSettings、页的边界以及边距的大小;确定是否还要打印其他页;假如还有其他页,则
24、将HasMorePages设置为ture;假如没有其他页,则将HaSMOrePage设置为fasle;在最简洁的状况下,可以作为包含打印恳求的Form的一部分创建PrintDocument和处理PrintPage事务。可以打印的示例publicclassPrintCtl:Form(privatestringprintBuffer;privateFontprintFont;privateintStart1.ine;点击打印按钮时事务被触发privatevoidprint_Click(objectsender,EventArgse)fiIeToPrint=newStreamReader(wPrin
25、tMe.Txtw);try(printFont=newFont(aAtialv,10);PrintDocumentpd=newprintDocument();pd.PrintPage+=newPrintPageEventHandler(this.pd_PrintPage);pd.Print();)finally(fileToPrint.Close();)每个页被打印时触发事务privatevoidpd_PrintPage(objectsender,PrintPageEventArgsev)floatIpp=O;floatyPos=0;intcount=0;floatleftMargin=ev.
26、MarginBounds.1.eft;floattopMargin=ev.MarginBounds.Top;stringline=null;计算每页可以打印多少行运用MarginBoundslpp=ev.MarginBounds.Height/printFont.GetHeight(ev.Graphics);这里假定一行不会长过一页while(countlop&(Iine=StreamToPrint.Read1.ineO)!=null)yPos=topMargin+(count*printFont.GetHeight(ev.Graphics);打印预览不会工作yPos,newEv.Graphi
27、cs.DrawStringdine,printFont,Brushes.Black,IeftMargin,StringFormat();count+;)假如还有更多行则打印下一页if(line!=null)ev.HasMorePages=true;elseev.HasMorePages=false;)3 .定义自己的打印文档对于困难的打印作业或要在多个窗体间重复运用的打印逻辑,可以从PrintDocument派生一个新类,并将打印逻辑封装到该类中.在这种状况下,请通过重写OnPrintPage方法而不是运用事务来处理程序来处理PrintPage事务。publicclassTextFileDoc
28、unient:PrintDocumentprivateFontprintFont=null;privateStreamReaderStreamToPrint=null;publicTextFilePrintDocument(StreamReaderStreamToPoint):base()this.StreamToPrint=StreamToPrint;)重载OnBeginPrint设置我们要运用的字体protectedoverridevoidOnPrintPage(PrintPageEventArgsev)base.OnPrintPage(ev);floatIpp=0;floatyPos=0
29、;intcount=0;floatIeftMargin=ev.MarginBounds.1.eft;floattopMargin=ev.MarginBounds.Top;Stringline=null;计算每页的行数事务中运用MarginBoundslpp=ev.MarginBounds.Height/printFont.GetHeight(ev.Graphics);while(countlop&(Iine=StreamToPrint.Read1.ineO)!=null)yPos=topMargin+(count*printFont.GetHeight(ev.Graphics);打印预览不会工
30、作Ev.Graphics.DrawStringdine,printFont,Brushes.Black,IeftMargin,yPos,newStringFormat();count+;)/假如还有就接着打印if(line!=null)ev.HasMorePages=true;elseev.HasMorePages=false;)4 .允许用户选择打印机在打印逻辑工作正常以后,下一步是允许用户运用Windows“打印”对话框选择打印机。为此,创建PrintDOCUnIent并将其传递给PrintDiaIog。用户点击打印按钮时事务触发privatevoidprintButton_Click(o
31、bjectsender,EventArgse)StreamReaderStreamToPrint=newStreamReader(PrintMe.Txt);try(假定运用默认的打印机TextFiIePrintDoucmentpd=newTextFilePrintDocument(streamToPrint);PrintDialogdlg=newPrintDialogO;dig.Document=pd;DialogResultresult=dlg.ShowDialogO;if(result=DialogResult.OK)pd.Print();)finallyStreamToPrint.Clo
32、se();)显示效果如以下图所示:5 .允许用户选择页面设置用户可以选择打印机并打印文档后,可以允许他们选择页面设置,如纸张方向或边距大小。为此,创建PageSettingS实例并将其传递给PageSetUPDialog。用户点击打印按钮时触发此事务PrivatevoidpageSetupButton_Click(objectsender,EventArgse)PageSetupDialogpsDlg=newPageSetupDialogO;If(storedPageSettings=nul1)StoresPageSettings=newPageSettings();)psDlg.PageSe
33、ttings=storedPageSe11ings;psDlg.ShowDialogO;)然后可在用户打印文档时运用此自定义PageSettings实例。用户点击打印按钮时触发此事务privatevoidprintButton_Click(objectsender,EventArgse)StreamReaderStreamToPrint=newStreamReader(PrintMe.Txt);try(TextFilePrintDocumentpd=newTextFiIePrintDocument(streamToPrint);if(StoredPageSettings!=nul1)pd.De
34、faultpageSettings=StoredPageSettings;)PrintDialogdlg=newPrintDialogO;dig.Document=pd;DialogResultresult=dlg.ShowDialogO;if(result=DialogResult.OK)pd.Print();finallyStreamToPrint.Close();)显示效果如以下图所示:6 .显示“打印预览”窗口“打印预览”窗口运用户得以在打印他们的文档前预览该文档。可以通过创建PrintDOCUment并将其传递到PrintPreVieW对话框,将“打印预览”窗口添加到应用程序中。点击
35、打印按钮时触发此事务privatevoidprintPreviewButton_Click(objectsender,EventArgse)StreamReaderStreamToPrint=newStreamReader(aPrintMc,Txtv);try(TextFilePrintDocuinentpd=newTextFilePrintDocument(streamToPrint);if(StoredPageSettings!=nul1)pd.DefaultpageSettings=StoredPageSettings;)PrintPreviewDialogdlg=newPrintPre
36、viewDialogO;dig.Document=pd;dig.ShowDialogO;finallyStreamToPrint.CloseO;)显示如以下图所示:四、利用组件来实现页面打印的一种方法homepagesupportcontactusProducts当然,还须要供应一个打印连接,我们用JSCRIPT来做。!一hidefromoldbrowsers/ppbandppearethestartandendofthedynamiclink/window,location,hrefwillrefertothecurrentUR1.ofthepage/it,snicetomakeitopen
37、inanewwindowtoo!i.e.target=_blankvarppb=ahref=pri11tprintpage.asp?ref=/PrintThisPagezz;document,write(ppb+window,location,href+ppe);/end这里传递了一个当前路径给打印页面,请看呆以下的代码先举个xml的简洁例子运行上面这段代码就能看到百度网站了接下来创建一个PrirItPage.asp,一旦你在合适的位置插入了注释标记,剩下来的只是代码的事了%optionexplicitResponse.Buffer=True定义变量,正则表达式,XM1.,路径DimRefPa
38、ge,objXM1.,RegExRefPage=Request.QueryString(z*ref,z)ifRefPage=thenresponse,write非法路径”response,endendifSetobjXM1.=Server.CreateObject(zzMicrosoft.XM1.)objXM1.OpenGET,RefPage,FalseobjXM1.SendRefPage=objXM1.responseTextSetRegEx=NewRegExpRegEx.Global=True利用正则表达式来干活RegEx.Pattern=!一STARTPPOMITRefPage=RegE
39、x.Replace(refpage,(chr(253)RegEx.Pattern=RefPage=RegEx.Replace(refpage,(chr(254)RegEx.Pattern=chr(253)&chr(254)&*&chr(254)RefPage=RegEx.Replace(refpage,)SetRegEx=NothingSetobjXM1.=NothingResponse.WriteRefPage%假如你的脚本引擎版本在5.5或以上正则表达式的pattern可以这样写(.*?)五.用WEB实现打印看看.Noprintdisplay:none;).PageNextpage-bre
40、ak-after:always;).tdp(border-bottom:1solid#000000;border-left:1solid#000000;border-right:0solidItffffff;border-top:0solidttffffff;).tabp(border-color:#000000#000000#000000#000000;border-style:solid;border-top-width:2px;border-right-width:2px;border-bottom-width:Ipx;border-left-width:Ipx;).NOPRINTfont-family:宋体;font-size:9pt;)第1页 nbsp; 报表对一般的要求就够了 td