网络办公助理设计与实现.docx
《网络办公助理设计与实现.docx》由会员分享,可在线阅读,更多相关《网络办公助理设计与实现.docx(15页珍藏版)》请在冰豆网上搜索。
网络办公助理设计与实现
网络办公助理设计与实现
绪论
C#简介
C#是一种新的面向对象编程语言,C#重要性替现在两个方面:
(1)它是专门为Microsoft与.NnetFramework的一起使用而设计的(功能全面的平台,用于分布式应用程序的开发,部署和执行).
(2)它是一种基于现代面向对象设计方法的语言,在设计时,Microsoft还研究了其他类似语言的经验,这些语言是近20年来面向对象规则得到广泛应用以来开发出来的.
C#就其本身而言只是一种语言,尽管它是用于生成面向.NET环境的代码,但它本身不是.NET的一部分.一些特性由.NET支持,但C#不支持.而另一些特性C#语言支持,.NET却不支持!
C#的优点:
(1)完全支持类和面向对象编程,包括接口和继承,虚函数和运算符重载的处理.
(2)定义完整,一致的基类集合.
(3)对自动生成XML文档说明的内置支持.
(4)自动清理动态分配的内存.
(5)可以用用户定义的属性标记类或方法.着可以用于文档说明,对编译有一定的影响(例如,把方法标记为只在调试时编译).
(6)对.NET基类库的完全访问权,并易于访问WindowsAPI(有时确实需要访问,但这是不常出现的).
(7)可以使用指针和直接内存访问,但该语言可以在没有他们的条件下工作.
(8)改变编译器选项,可以把程序编译为可执行文件或.NET组件库,该组件可以用ActiveX控件(COM组件)相同的方式由其他代码调用.
(9)C#可以用于编写ASP.NETWeb页面.
.NET简介
.NET是一种在Windows上编程的新构架-------一种新API.它的优点:
(1)它是一个库,且是对WindowsAPI的扩展,使用它可以调用Windows操作系统中的传统特性:
显示窗口和对话框,验证安全证书,调用基本操作系统服务,创建线程等;还可以使用一些新特性,例如访问数据库或接Internet,或提供Web服务.
(2).NET提供了程序的运行环境(.NET运行时).
.NET的改进特性:
(1)面向对象的编程:
.NET和C#从一开始就完全是基于面向对象的.
(2)优秀的设计:
一个基类库,这是从一种非常直观的方式设计出来的.
(3)语言的无关性:
有了.NET,VB.NET和C#和ManagedC++等所有语言都可以编译为通用的中间语言(IntermediateLanguege).这说明,语言可以用以前没有的方式交互操作.
(4)对动态Web页面的支持:
ASP具有很大的灵活性,但效率不是很高,这是因为他使用了解释性的脚本语言,且缺乏面向对象的设计,从而导致ASP代码比较凌乱.
.NET使用一种新技术ASP.NET为Web页面提供了一种集成式的支持.使用ASP.NET,可以编译页面中的代码,这些代码还可以使用.NET高级语言来编写,例如C#或VB.NET
(5)高效的数据访问:
一组.NET组件总称为ADO.NET,提供了对关系数据库和各种数据源的高效访问.这些组件也可以访问文件系统和目录..NET内置了XML支持,可以处理从非Windows平台导入的数据.
(6)代码共享:
.NET引入了程序集的概念,代替了传统的DLL,可以完美无暇地修补代码在应用程序之间的共享方式。
程序集有解决版本冲突的正式系统,程序集的不同版本可以同时存在.
(7)增强的安全性:
每个程序集还可以包含内置的安全信息,这些信息可以准确地指出谁或哪种类型的用户或进程可以调用什么类的哪些方法.这样就可以非常准确地控制程序集使用的方式.
(8)对安装没有任何影响:
有两种类型的程序集,共享程序集和私有程序集.共享程序集是可以用语所有软件的公共库,私有程序集只是用于某个软件.私有程序集功能完备,所以安装的过程非常简单,没有注册表项目,只需把相应的文件放在文件系统的相应文件夹中即可.Web服务的支持:
.NET集成了对开发Web服务的完全支持,用户可以开发出任何类型的应用程序.
(9)VisualStudio.NET:
.NET附带了一个新的开发环境VisualStudio.NET,它还可以很好地与C++,C#,VB.NET和ASP.NET代码合并使用.VisualStudio.NET集成了VisualStudio6环境中各种语言专用的所有最佳功能.
(10)C#:
是使用.NET的一种面向对象的新语言.
网络办公助理简介
基于诸多方便条件,我们将其用于我们的生活中,让我们的生活更适应现代化的发展.在
现在科技在不断更新,技术日新月异的情况下,我们的生活中很多办公模式还停留在原始阶段:
●当同一办公室的两位员工有问题探讨时,还得离开自己的位置交谈,这就会对其他人员造成影响。
●当有资源共享时,只是简单的共享,有着很大的安全隐患。
有些甚至还在使用纸介质。
●当要召开会议时。
既需要专人通知,浪费了人力资源,又需要会议室。
•为了方便办公,解决以上问题,我们开发了一款软件---网络办公助理(NOA)!
•此软件主要有以下优点:
•网络设置
•发送短信
•发布通知
•网上会议
•文件传输
•.NET是MS新推出的一种面向网络,支持各种用户终端的开发平台环境。
它将会带来一种软件革命。
•NET实现“3A”(AnyTime,AnyWhere,AnyDevice”);
即使用不同的开发语言,在不同的目标设备上作.它是一种能够横亘于整个网络,跨越各种操作系统和终端设备之上的操作与平台.
•随着.NET推出的一种新兴的开发语言C#,C#是MS将C和C++改良的产物,他继承了C和C++的优点,去掉的繁琐的东西,如指针(若使用,需指定unsafe关键字),模板,宏等,以及继承了VB的RAD特性,使得开发应用程序的周期大大缩短。
•与JAVA语言相比,C#是MS的产物,它与MS自己的操作系统windows有着更好的亲和能力。
•C#和.NET整个构架更适合客户端和服务端工作的混合。
•JAVA体系主要面向服务器端应用和企业级的应用,而在广泛使用Windows平台的中低端应用上,不如.NET有优势。
•正是因为DOTNET平台和C#开发语言的特点(安全性,兼容性等),因此我们选择用C#语言进行开发。
•这就是--------网络办公助理(NOA)
网络办公助理实现细节
•本软件采用了UDP协议与多点广播,其中多点广播用于发送短信功能;UDP协议用于发布通知,网上会议和文件传输功能。
此外,本软件还采用了多线程技术,使各个功能都能够并发执行。
网络办公助理的示意图如下:
主页面
启动
文
件
传
输
网
上
会
友
发
布
通
知
发
送
短
信
网
络
设
置
版
本
信
息
办公助理的功能特色:
•本软件设计是从用户的角度进行开发,处处为用户着想。
而且我们充分考虑到了用户可能在操作中出现的各种错误,本软件对一定错误都对用户进行友善的提示。
•由于C#可以支持多国语言,所以本软件可以支持中文,英文,日文,韩文,俄文等多种语言。
•同时本软件已经打包成为一个安装文件,安装十分简便,只需按照所给的提示,就可以进行安装,简单易行。
•一般的网络通信软件,都采用C/S或B/S模式。
本软件则省去了专用服务器;将服务器所具有的功能嵌入到软件中,使软件本身不仅具有客户端的功能,而且具有服务器的功能。
•传统的通信都采用对等网的形式进行通信.
而本软件不仅有点对点的通信,还有发广播的特点。
传统的通用软件如QQ,MSN等都需要登陆其服务器后,才能进行双方通信,不能保证信息的安全性。
而本软件只是在本局域网内流通,无需登陆服务器,有利于信息的保护。
该软件还有很强的扩展性,可以将很多功能加入进去。
●此软件我们在将来还将如一些语音交流,视频会议等功能添加进来。
●以及还有发送通知的权限,可以设置权限来管理办公人员是否能够发送通知等等。
●在网络会议室内显示在线人员等。
办公助理的用途
•办公助理的用途主要用在办公楼局域网内的计算机上。
–发送短信功能,是用于办公人员在不干扰别人的情况下,与另一个人进行交流。
–发布通知功能,能让主管人员不用在奔波于各个部门之间,只要使用发布通知功能,就可以通知到各个人,十分方便。
–网上会议功能,可以让大家能够随时地在网上进行开会,免除了开会要到会议室开会的麻烦,节约了时间.
–文件传输功能,可以使相邻计算机之间的文件交换变得十分简单,不必在用U盘等来拷贝,极大了方便了办公人员。
•由于DOTNET是MS新推出的战略平台,用C#进行Socket类的编程,难度较高;而且时间比较仓促,所以本软件还存在不少不足,一些扩展性的功能还没有实现。
以下是部分代码的实现
usingSystem.Reflection;
usingSystem.Runtime.CompilerServices;
//有关程序集的常规信息是通过下列
//属性集控制的。
更改这些属性值可修改与程序集
//关联的信息。
[assembly:
AssemblyTitle("")]
[assembly:
AssemblyDescription("")]
[assembly:
AssemblyConfiguration("")]
[assembly:
AssemblyCompany("")]
[assembly:
AssemblyProduct("")]
[assembly:
AssemblyCopyright("")]
[assembly:
AssemblyTrademark("")]
[assembly:
AssemblyCulture("")]
//程序集的版本信息包含下列4个值:
//主版本
//次版本
//内部版本号
//修订号
//您可以指定所有值,或使用“修订号”和“内部版本号”的默认值,方法为按如下方式
//使用“*”:
[assembly:
AssemblyVersion("1.0.*")]
//要对程序集进行签名,必须指定要使用的密钥。
有关程序集签名的更多信息,请参考
//Microsoft.NET框架文档。
//使用下面的属性控制用于签名的密钥。
//注意:
//(*)如果未指定密钥,则程序集不会被签名。
//(*)KeyName是指已经安装在计算机上的
//加密服务提供程序(CSP)中的密钥。
KeyFile是指包含
//密钥的文件。
//(*)如果KeyFile和KeyName值都已指定,则
//发生下列处理:
//
(1)如果在CSP中可以找到KeyName,则使用该密钥。
//
(2)如果KeyName不存在而KeyFile存在,则
//KeyFile中的密钥安装到CSP中并且使用该密钥。
//(*)要创建KeyFile,可以使用sn.exe(强名称)实用工具。
//在指定KeyFile时,KeyFile的位置应该相对于
//项目输出目录,即
//%ProjectDirectory%\obj\。
例如,如果KeyFile位于
//该项目目录,应将AssemblyKeyFile
//属性指定为[assembly:
AssemblyKeyFile("..\\..\\mykey.snk")]
//(*)“延迟签名”是一个高级选项-有关它的更多信息,请参阅Microsoft.NET框架
//文档。
[assembly:
AssemblyDelaySign(false)]
[assembly:
AssemblyKeyFile("")]
[assembly:
AssemblyKeyName("")]
IP的设定:
usingSystem;
usingSystem.Drawing;
usingSystem.Collections;
usingSystem.ComponentModel;
usingSystem.Windows.Forms;
namespaceNetStar
{
///
///UserIPDlg的摘要说明。
///
publicclassUserIPDlg:
System.Windows.Forms.Form
{
privateSystem.Windows.Forms.ButtonbtnOK;
privateSystem.Windows.Forms.ButtonbtnCancel;
privateSystem.Windows.Forms.TextBoxtxtUserID;
privateSystem.Windows.Forms.TextBoxtxtIPAddress;
privateSystem.Windows.Forms.Labellabel1;
privateSystem.Windows.Forms.Labellabel2;
///
///必需的设计器变量。
///
privateSystem.ComponentModel.Containercomponents=null;
publicUserIPDlg()
{
//Windows窗体设计器支持所必需的
InitializeComponent();
//TODO:
在InitializeComponent调用后添加任何构造函数代码
}
///
///清理所有正在使用的资源。
///
protectedoverridevoidDispose(booldisposing)
{
if(disposing)
{
if(components!
=null)
{
components.Dispose();
}
}
base.Dispose(disposing);
}
#regionWindowsFormDesignergeneratedcode
///
///设计器支持所需的方法-不要使用代码编辑器修改
///此方法的内容。
///
privatevoidInitializeComponent()
{
this.btnOK=newSystem.Windows.Forms.Button();
this.btnCancel=newSystem.Windows.Forms.Button();
this.txtUserID=newSystem.Windows.Forms.TextBox();
this.txtIPAddress=newSystem.Windows.Forms.TextBox();
this.label1=newSystem.Windows.Forms.Label();
this.label2=newSystem.Windows.Forms.Label();
this.SuspendLayout();
//btnOK
this.btnOK.DialogResult=System.Windows.Forms.DialogResult.OK;
this.btnOK.Location=newSystem.Drawing.Point(64,112);
this.btnOK.Name="btnOK";
this.btnOK.TabIndex=4;
this.btnOK.Text="确认";
//btnCancel
this.btnCancel.DialogResult=System.Windows.Forms.DialogResult.Cancel;
this.btnCancel.Location=newSystem.Drawing.Point(200,112);
this.btnCancel.Name="btnCancel";
this.btnCancel.TabIndex=5;
this.btnCancel.Text="放弃";
//txtUserID
this.txtUserID.AcceptsReturn=true;
this.txtUserID.AcceptsTab=true;
this.txtUserID.Location=newSystem.Drawing.Point(88,24);
this.txtUserID.Name="txtUserID";
this.txtUserID.Size=newSystem.Drawing.Size(200,21);
this.txtUserID.TabIndex=1;
this.txtUserID.Text="";
this.txtUserID.KeyDown+=newSystem.Windows.Forms.KeyEventHandler(this.txtUserID_KeyDown);
//txtIPAddress
this.txtIPAddress.AcceptsReturn=true;
this.txtIPAddress.AcceptsTab=true;
this.txtIPAddress.Location=newSystem.Drawing.Point(88,56);
this.txtIPAddress.Name="txtIPAddress";
this.txtIPAddress.Size=newSystem.Drawing.Size(200,21);
this.txtIPAddress.TabIndex=3;
this.txtIPAddress.Text="";
this.txtIPAddress.KeyDown+=newSystem.Windows.Forms.KeyEventHandler(this.txtIPAddress_KeyDown);
//label1
this.label1.AutoSize=true;
this.label1.Location=newSystem.Drawing.Point(8,24);
this.label1.Name="label1";
this.label1.Size=newSystem.Drawing.Size(66,17);
this.label1.TabIndex=0;
this.label1.Text="用户标识符";
this.label1.TextAlign=System.Drawing.ContentAlignment.MiddleCenter;
//label2
this.label2.AutoSize=true;
this.label2.Location=newSystem.Drawing.Point(32,56);
this.label2.Name="label2";
this.label2.Size=newSystem.Drawing.Size(42,17);
this.label2.TabIndex=2;
this.label2.Text="IP地址";
//UserIPDlg
this.AutoScaleBaseSize=newSystem.Drawing.Size(6,14);
this.CancelButton=this.btnCancel;
this.ClientSize=newSystem.Drawing.Size(306,151);
this.Controls.Add(this.label2);
this.Controls.Add(this.label1);
this.Controls.Add(this.txtIPAddress);
this.Controls.Add(this.txtUserID);
this.Controls.Add(this.btnCancel);
this.Controls.Add(this.btnOK);
this.FormBorderStyle=System.Windows.Forms.FormBorderStyle.FixedDialog;
this.MaximizeBox=false;
this.MinimizeBox=false;
this.Name="UserIPDlg";
this.StartPosition=System.Windows.Forms.FormStartPosition.CenterParent;
this.Text="输入用户标识符和IP地址对话框";
this.ResumeLayout(false);
}
#endregion
privatevoidtxtUserID_KeyDown(objectsender,System.Windows.Forms.KeyEventArgse)
{
if(e.KeyCode==Keys.Enter)
{
this.txtIPAddress.Focus();
}
}
PrivatevoidtxtIPAddress_KeyDown(objectsender,System.Windows.Forms.KeyEventArgse)
{
if(e.KeyCode==Keys.Enter)
this.btnOK.PerformClick();
}
publicstringGetUserID
{
get{returnthis.txtUserID.Text;}
}
publicstringGetIPAddress
{
get{returnthis.txtIPAddress.Text;}
}
}
}
usingSystem;
usingSystem.Drawing;
usingSystem.Collections;
usingSystem.Compone