music 网络日志
发表于 :2008-05-17 13:36

原帖及讨论:http://bbs.bccn.net/thread-213640-1-1.html

0点过了。可还没睡意,可能是平时都是2点过才睡觉习惯了吧。不知道干什么,好无聊。因为生病了,不想看书;接的项目也还没完成,可也不想做。好久没写东西了,这无聊之时,来记录一个故事吧,这可是一个真实的故事(傻瓜才信,不信的更傻--不看完这文章是你的损失)。

注:以下反出现“同学”的地方都使用“C”代替,我自己使用“M”代替,老总“A”。

   前些天一个同学告诉我:“我上班的时候玩游戏,怎么老总知道.难不成他在办公室里装有监视器.”

“呵呵,这个很难说,不过应该是不会的.”M说:。

T:“那老总是怎么知道我玩游戏的呢?”

M:“这个问题还得好好研究下,或许他还可能真的是在办公室的某处装有摄像头监视呢,哈哈!”

T:“是啊,我也这样怀疑过,因为办公室里出了我,别的同事玩游戏他也知道。神了这!”

M:“那他不是一个人可以监视你门多个呀?也,他还玩得高级呢,还弄个一对多的关系出来了。而你办公室里的任何一个人玩游戏他都能准确准时的逮住你们,你们老总够强大的哈!”

M:“这让我想起了软件设计的知识。”

   观察者定义了对象间一对多的关系,当一个对象的状态变化时,所有依赖它的对象都得到通知并且自动地更新。

T:“你是不是做软件做疯了,这也能和软件设计拉上关系?别虾扯了,说正事吧。”

M:“我说的就是正事呀,哎,你娃还是老脾气不改,别人话都没说完你就打断别人自己来插上几句,还是讲点原则撒,让别人说完了你在接到来。你先听到,我说完了你在说。”

M:“你仔细看看我上面提到的软件设计知识点,你们老总可以监视你们多个人,当你们玩游戏他就可以准确准时的逮到你们,用程序来说就是当你们一玩游戏的时候就调用了PlayGame()方法吗?而当PlayGame()方法是被监视起的,当PlayGame()被调用的时候就会自动的通知监视者(你们老总),这样很明显,他就知道你们在拿他的钱吃饭不给他做事,反而在办公室里玩游戏了,逮到你你就该着了。不过你也要调过头想想,老总这样做也是有原因的,毕竟他投资了资本出来是想得到回报的,是吧?”

T:“打住,打住。你呀,还不是老脾气不改,还好意思说我。你看你,一说到软件设计,你就巴不得一口气把你掌握的东西唱完!”

M:“呵呵,彼此彼此!”

----面向对象设计模式[观察者模式]

T:“说实话,我不做程序好多天,可我还是难忘曾经的那写天!听到你说面这样说,我到是对这个软件设计方案有点兴趣了,你能不能说详细点来听听?”

M:“行啊,难得你有这份兴趣,我就用个示例来给你简单的介绍下吧!”

T:“话说多个朋友多条路,呵呵,多个同学还多个聊天吹牛的,嘘--小点声,别让那家伙听到了。”

M:“其实无论你是在使用.NET还是java开发,这两个平台的事件模型就是一个典型的观察者模式的体现。我就以.NET平台的C#语言来做个简单示例介绍。”

M:“首先,我们需要定义一个委托,通过委托将两个类的交互进行了绑定,当员工玩游戏的方法PalyGame()调用后,触发委托类型的PlayGame事件,而该事件将被委托给老总(admin)的呼叫老总(Notify)方法处理。”
/// <summary>
/// 定义委托
/// </summary>
public delegate void DelegateMonitorEmployee(object sender, CustomeEvetnArgs e);


M:“你是一个人,用面向对象的思想来说的话,那么你就是一个对象吧?抽象的人类对象,在公司里,你作为一名员工,那我们就计算机语言来抽象出员工这个对象Employee,你要玩游戏,而且在玩游戏的时候还会被老总给逮住,那你得去做一个PlayGame方法吧,这里我们很显然需要定义一个委托类型的事件,把游戏的方法Games()通过事件关联起来。”

//员工类
public class Employee
{
    private string _name;
    public string Name
    {
        get { return _name; }
        set { _name = value; }
    }

    private int _age;
    public int Age
    {
        get { return _age; }
        set { _age = value; }
    }

    /// <summary>
    /// 委托类型的事件
    /// </summary>
    public event DelegateMonitorEmployee PlayGame;

    public void Gages()
    {
        if (PlayGame != null)
        {
            CustomeEvetnArgs e = new CustomeEvetnArgs();
            e.Name = this._name;
            e.Age = this._age;
            PlayGame(this, e);
        }
    }
}

T:“你上面CustomeEvetnArgs这是什么玩意,以前我做程序的时候好象没看到过这个东东,是不是自己定义的?”

M:“不错的吗?会发现问题了?不错,CustomeEvetnArgs是自己定义的一个类,他继承于系统EventArgs类,用来传递消息的,等会你就知道了,你玩游戏就是通过它把你的的名字等信息传递到老总那去的。既然你这么急着知道他是干什么的,那看看下面的定义。”
/// <summary>
/// 事件参数基类EventArgs专门用于传递事件数据

/// 定义了两个成员,通过它可以传递两个数据(Name,Age)
/// </summary>
public class CustomeEvetnArgs:EventArgs
{
    string name = string.Empty;
    public string Name
    {
        get { return name; }
        set { name = value; }
    }

    int age = 0;
    public int Age
    {
        get { return age; }
        set { age = value; }
    }

    public CustomeEvetnArgs()
    { }
}


M:“下面我们来看看老总(Admin)类里是怎么处理的,当员工(Employee)玩游戏(调用了PlayGame)的时候老总是怎么得到通知的。”
//老总类
public class Admin
{
    /// <summary>
    /// 呼叫老总--

    /// 通过CustomeEvetnArgs事件把玩游戏的员工信息传递过来
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    public void Notify(object sender,CustomeEvetnArgs e)
    {
        StringBuilder resutl = new StringBuilder();
        resutl.Append("员工:" + e.Name + " ");
        resutl.Append("年龄:" + e.Age.ToString() + "岁 ");
        resutl.Append("正在玩游戏! ");
        resutl.Append("时间:" + DateTime.Now.ToString());
        Console.WriteLine(resutl);
    }
}


M:“到这里,整个监视过程我们就完全建立好了。现在是该做实验的时候到了。老同学(Employee),你在去玩游戏试试,看看老总(Admin)是不是可以通过我们上面花这么多的功夫去建立的这个观察(监视)你的系统呢?”

T:“你说得比唱得还好听,就这么几十句代码,有你说的那么神吗?不就不信,好,我去试试。”

--张三(呵呵,前面忘了说,我那同学叫张三,今年22岁了。)打开了电脑,游戏启动。
class Program
{
    static void Main(string[] args)
    {
        Employee employee = new Employee();
        employee.Name = "张三";
        employee.Age = 22;
        Admin admin = new Admin();

        //通过DelegateMonitorEmployee将两个类的交互进行了绑定,当employee.Games方法调用后,
        //触发PlayGame事件,而该事件将被委托给admin的Notify方法处理。
        employee.PlayGame += new DelegateMonitorEmployee(admin.Notify);
        employee.Gages();
    }
}


--这时,老总办公室里的警报声响了,发出了信号;
 

--小张刚刚启动游戏,突然办公室门开了。进来了一个“人(Admin)”。

A:“张三,你胆子够大的嘛,昨天玩游戏还罚款你100个大洋,你今天还赶玩?等会到我办公室去我们聊一会!”

--哈哈,估计这次我这为同学要被洗白。。。。期待被抄中ing.......

文章到处结束,希望大家多多支持。

study┆ 阅读(112) ┆ 评论 (18)


发表于 :2008-05-16 10:09

   长期经受试用30天的软件的苦恼,今天在google上找到一组很有效果的序列号,试用了一下通过了。好了,以后就可以长期的用了,の,痛苦。还好了。在这里保留一下,免的以后又忘了。

             

Dreamweaver 8序列号:
S/N: WPD800-57533-91832-61682 or WPD800-50036-22132-61740
S/N: WPD800-58838-49132-19616
S/N: WPD800-58436-27232-80204
S/N: WPD800-54236-82932-27874tested and working with Demo 8
S/N: DWW600-58026-46355-83953
flash 8序列号:
WPD800-52030-26332-07528
S/N: WPD800-56232-80732-71073
S/N: WPD800-58436-27232-80204enjoy guys...
S/N: WPD800-59937-30832-96861
S/N: WPD800-56234-27332-11944tested and works with 8.0 Demo
firework 8序列号:
S/N: WDF6-93DR-KK2E-DZK6
S/N: WPD800-56832-40132-92566
S/N: WPD800-50030-42332-50942  WPD800-53531-17532-20947

study┆ 阅读(276) ┆ 评论 (57)


发表于 :2008-05-12 10:07

一、从控制台读取东西代码片断:
using System;

class TestReadConsole
{
    public static void Main()
    {
        Console.Write(Enter your name:);
        string strName = Console.ReadLine();
        Console.WriteLine( Hi + strName);
    }
}
二、读文件代码片断:
using System; 
using System.IO; 

public class TestReadFile 

    public static void Main(String[] args) 
    { 
        // Read text file C:\temp\test.txt 
        FileStream fs = new FileStream(@c:\temp\test.txt , FileMode.Open, FileAccess.Read); 
        StreamReader sr = new StreamReader(fs);  
        
        String line=sr.ReadLine();
        while (line!=null)
        {
            Console.WriteLine(line);
            line=sr.ReadLine();
        }   
        
        sr.Close();
        fs.Close();
    } 

三、写文件代码:
using System; 
using System.IO; 

public class TestWriteFile 

    public static void Main(String[] args) 
    { 
        // Create a text file C:\temp\test.txt 
        FileStream fs = new FileStream(@c:\temp\test.txt , FileMode.OpenOrCreate, FileAccess.Write); 
        StreamWriter sw = new StreamWriter(fs); 
        // Write to the file using StreamWriter class 
        sw.BaseStream.Seek(0, SeekOrigin.End); 
        sw.WriteLine( First Line ); 
        sw.WriteLine( Second Line); 
        sw.Flush(); 
    } 

四、拷贝文件:
using System;
using System.IO;

class TestCopyFile
{
    public static void Main()
    {
        File.Copy(c:\\temp\\source.txt, C:\\temp\\dest.txt );  
    }
}
五、移动文件:
using System;
using System.IO;

class TestMoveFile
{
    public static void Main()
    {
        File.Move(c:\\temp\\abc.txt, C:\\temp\\def.txt );  
    }
}
六、使用计时器:
using System;
using System.Timers;

class TestTimer
{
    public static void Main()
    {
        Timer timer = new Timer();
        timer.Elapsed += new ElapsedEventHandler( DisplayTimeEvent );
        timer.Interval = 1000;
        timer.Start();
        timer.Enabled = true;

        while ( Console.Read() != 'q' )
        {
             //-------------
        }
    }
    public static void DisplayTimeEvent( object source, ElapsedEventArgs e )
    {
        Console.Write(\r{0}, DateTime.Now);
    }
}
七、调用外部程序:
class Test 

    static void Main(string[] args) 
    { 
        System.Diagnostics.Process.Start(notepad.exe); 
    } 
}

ADO.NET方面的:
八、连接Access数据库:
using System;
using System.Data;
using System.Data.OleDb;

class TestADO
{
    static void Main(string[] args)
    {
        string strDSN = Provider=Microsoft.Jet.OLEDB.4.0;Data Source=c:\\test.mdb;
        string strSQL = SELECT * FROM employees ;

        OleDbConnection conn = new OleDbConnection(strDSN);
        OleDbCommand cmd = new OleDbCommand( strSQL, conn );
        OleDbDataReader reader = null;
        try
        {
            conn.Open();
            reader = cmd.ExecuteReader();
            while (reader.Read() )
            {
                Console.WriteLine(First Name:{0}, Last Name:{1}, reader[FirstName], reader[LastName]);
            }
        }
        catch (Exception e)
        {
            Console.WriteLine(e.Message);
        }
        finally
        {
            conn.Close();
        }
    }

九、连接SQL Server数据库:
using System;
using System.Data.SqlClient;

public class TestADO
{
    public static void Main()
    {
        SqlConnection conn = new SqlConnection(Data Source=localhost; Integrated Security=SSPI; Initial Catalog=pubs);
        SqlCommand  cmd = new SqlCommand(SELECT * FROM employees, conn);
        try
        {        
            conn.Open();

            SqlDataReader reader = cmd.ExecuteReader();            
            while (reader.Read())
            {
                Console.WriteLine(First Name: {0}, Last Name: {1}, reader.GetString(0), reader.GetString(1));
            }
        
            reader.Close();
            conn.Close();
        }
        catch(Exception e)
        {
            Console.WriteLine(Exception Occured -->> {0},e);
        }        
    }
}
十、从SQL内读数据到XML:
using System;
using System.Data;
using System.Xml;
using System.Data.SqlClient; 
using System.IO; 

public class TestWriteXML

    public static void Main()
    { 

        String strFileName=c:/temp/output.xml;

        SqlConnection conn = new SqlConnection(server=localhost;uid=sa;pwd=;database=db);

        String strSql = SELECT FirstName, LastName FROM employees; 

        SqlDataAdapter adapter = new SqlDataAdapter(); 

        adapter.SelectCommand = new SqlCommand(strSql,conn);

        // Build the DataSet
        DataSet ds = new DataSet();

        adapter.Fill(ds, employees);

        // Get a FileStream object
        FileStream fs = new FileStream(strFileName,FileMode.OpenOrCreate,FileAccess.Write);

        // Apply the WriteXml method to write an XML document
        ds.WriteXml(fs);

        fs.Close();

    }
}
十一、用ADO添加数据到数据库中:
using System;
using System.Data;   
using System.Data.OleDb;   

class TestADO
{  
    static void Main(string[] args)  
    {  
        string strDSN = Provider=Microsoft.Jet.OLEDB.4.0;DataSource=c:\test.mdb;  
        string strSQL = INSERT INTO Employee(FirstName, LastName) VALUES('FirstName', 'LastName') ;  
                   
        // create Objects of ADOConnection and ADOCommand   
        OleDbConnection conn = new OleDbConnection(strDSN);  
        OleDbCommand cmd = new OleDbCommand( strSQL, conn );  
        try  
        {  
            conn.Open();  
            cmd.ExecuteNonQuery();  
        }  
        catch (Exception e)  
        {  
            Console.WriteLine(Oooops. I did it again:\n{0}, e.Message);  
        }  
        finally  
        {  
            conn.Close();  
        }          
    } 
}  
十二、使用OLEConn连接数据库:
using System;
using System.Data;   
using System.Data.OleDb;   

class TestADO
{  
    static void Main(string[] args)  
    {  
        string strDSN = Provider=Microsoft.Jet.OLEDB.4.0;DataSource=c:\test.mdb;  
        string strSQL = SELECT * FROM employee ;  

        OleDbConnection conn = new OleDbConnection(strDSN);
        OleDbDataAdapter cmd = new OleDbDataAdapter( strSQL, conn ); 

        conn.Open();
        DataSet ds = new DataSet();
        cmd.Fill( ds, employee );
        DataTable dt = ds.Tables[0];

        foreach( DataRow dr in dt.Rows )
        {
            Console.WriteLine(First name: + dr[FirstName].ToString() + Last name: + dr[LastName].ToString());
        }
        conn.Close();  
    } 
}  
十三、读取表的属性:
using System;
using System.Data;   
using System.Data.OleDb;   

class TestADO
{  
    static void Main(string[] args)  
    {  
        string strDSN = Provider=Microsoft.Jet.OLEDB.4.0;DataSource=c:\test.mdb;  
        string strSQL = SELECT * FROM employee ;  

        OleDbConnection conn = new OleDbConnection(strDSN);
        OleDbDataAdapter cmd = new OleDbDataAdapter( strSQL, conn ); 

        conn.Open();
        DataSet ds = new DataSet();
        cmd.Fill( ds, employee );
        DataTable dt = ds.Tables[0];

        Console.WriteLine(Field Name DataType Unique AutoIncrement AllowNull);
        Console.WriteLine(==================================================================);
        foreach( DataColumn dc in dt.Columns )
        {
            Console.WriteLine(dc.ColumnName+ , +dc.DataType + ,+dc.Unique + ,+dc.AutoIncrement+ ,+dc.AllowDBNull );
        }
        conn.Close();  
    } 

ASP.NET方面的
十四、一个ASP.NET程序:
<%@ Page Language=C# %>
<script runat=server>
   
    void Button1_Click(Object sender, EventArgs e) 
    {
        Label1.Text=TextBox1.Text;
    }

</script>
<html>
<head>
</head>
<body>
    <form runat=server>
        <p>
            <br />
            Enter your name: <asp:TextBox id=TextBox1 runat=server></asp:TextBox>
        </p>
        <p>
            <b><asp:Label id=Label1 runat=server Width=247px></asp:Label></b>
        </p>
        <p>
            <asp:Button id=Button1 onclick=Button1_Click runat=server Text=Submit></asp:Button>
        </p>
    </form>
</body>
</html>
http://www.netcxy.com/cs/20080107/8592-1.html

study┆ 阅读(188) ┆ 评论 (97)


发表于 :2008-05-11 12:35

    今天有点忙,先来报个到。以后写点什么吧。谢谢。

study┆ 阅读(161) ┆ 评论 (45)


发表于 :2008-05-11 12:15

我已经在这儿安家了,我的网址是http://b.bcbbs.net/study/default.aspx,欢迎你时常过来做客,大家多多交流哦。我会把一些新鲜有趣的东西记录下来一块与你分享。也希望你记住我的BLOG地址,你可以把她添加到你的收藏夹,也可以把她复制下来告诉你的朋友们。

   :)

系统┆ 阅读(83) ┆ 评论 (19)


个人信息
首页形像照片
姓名:study
职业:computer
年龄:
位置:
中国,**
个性介绍:happy就好
编程联盟博客 相册
music 音乐
显示播放列表
编程联盟 | 编程论坛 | 关于本站 | 站点地图 | 友情链接 | 联系我们