查看 dotNet 栏目文章
十二月
31

随机产生帐号信息

Author Dominic    Category dotNet     Tags ,

最近因为一个特定需要,需要产生大量帐号信息,要求是中文姓名需要随机产生,性别需要和姓名匹配,即男性姓名的性别需要是男性,女性姓名的性别需要是女性。参考wj2929兄弟的实现,我也做了一个。

首先,定义帐号实体:

   /// <summary>
    /// 账号基本信息
    /// </summary>
    public class AccountInfo
    {
        /// <summary>
        /// 账号中文姓名
        /// </summary>
        public string Name { get; set; }
        /// <summary>
        /// 账号对应性别
        /// </summary>
        public Sex Sex { get; set; }
        /// <summary>
        /// 账号对应的登陆名称
        /// </summary>
        public string Account { get; set; }
        /// <summary>
        /// 账号人员出生日期
        /// </summary>
        public DateTime Birthday { get; set; }
        /// <summary>
        /// 账户人员居住地
        /// </summary>
        public string City { get; set; }
        /// <summary>
        /// 账户密码
        /// </summary>
        public string Password { get; set; }
    }

    public enum Sex
    {
        男, 女
    }

再分别定义姓氏、男性姓名、女性姓名,在随机产生一个性别,并在之后随机产生一个按照性别归类的姓名即可:

    /// <summary>
    /// 随机产生帐号信息
    /// </summary>
    public class RandomAccount
    {
        static string[] strSurname = {"", "", "", "", "", "", "", "", "", "",
                               "", "", "", "", "", "", "", "", "", "",
                               "", "", "", "", "", "", "", "", "", "",
                               "", "", "", "", "", "", "", "", "", "",
                               "", "", "", "", "", "", "", "", "", "",
                               "", "", "", "", "", "", "", "", "", "",
                               "", "", "", "", "", "", "", "", "", "",
                               "", "", "", "", "", "", "", "", "", "",
                               "", "", "", "", "", "", "", "", "", "",
                               "", "", "", "", "", "", "", "", "", "" };
        static string[] strBoyName ={"", "", "", "", "", "", "", "", "", "",
                               "", "", "", "", "", "", "", "", "广", "",
                               "", "", "", "", "", "", "", "", "", "",
                               "", "", "", "", "", "", "", "", "", "",
                               "", "", "", "", "", "", "", "", "", "",
                               "", "", "", "", "", "", "", "", "", "",
                               "", "", "", "", "", "", "", "", "", "",
                               "", "", "", "", "", "", "", "", "", "",
                               "", "", "", "", "", "", "", "", "", "",
                               "", "", "", "", "", "", "", "", "", "",
                               "", "", "", "", "", "", "", "", "", "",
                               "", "", "", "", "", "", "", "", "", "",
                               "", "", "", "", "", "", "", "", "", "",
                               "", "", "", "", "", "", "", "", "", "",
                               "", "", "", "", "", "", "", "", "", "",
                               "" };
        static string[] strGirlName ={"", "", "", "", "", "", "", "", "", "",
                               "", "", "", "", "", "", "", "", "", "",
                               "", "", "", "", "", "", "", "", "", "",
                               "", "", "", "", "", "", "", "", "", "",
                               "", "", "", "", "", "", "", "", "", "",
                               "", "", "", "", "", "", "", "", "", "",
                               "", "", "", "", "", "", "", "", "", "",
                               "", "", "", "", "", "", "", "", "", "",
                               "", "", "", "", "", "", "", "", "", "",
                               "", "", "", "", "", "", "", "", "", "",
                               "", "", "", "", "", "", "", "", "", "",
                               "", "", "", "", "", "", "", "", "", "",
                               "", "", "", "", "", "", "", "", "", "",
                               "", "", "" };

        /// <summary>
        /// 随机产生一个账号信息
        /// </summary>
        /// <returns>完整AccountInfo对象</returns>
        public static AccountInfo GetNew()
        {
            var accountInfo = GenerateName();
            accountInfo.Birthday = GenerateBirthday();
            accountInfo.City = GenerateCity();
            accountInfo.Password = GenerationPassword();
            return accountInfo;
        }
        /// <summary>
        /// 随机产生一个合法日期
        /// </summary>
        /// <returns></returns>
        private static DateTime GenerateBirthday()
        {
            var r = new Random();
            return new DateTime(r.Next(1960, 2008), r.Next(1, 12), r.Next(1, 32));
        }
        /// <summary>
        /// 随机产生居住地
        /// </summary>
        /// <returns>城市名称</returns>
        private static string GenerateCity()
        {
            return String.Empty;
        }
        /// <summary>
        /// 随机产生密码
        /// </summary>
        /// <returns></returns>
        private static string GenerationPassword()
        {
            return Guid.NewGuid().ToString().Substring(0, new Random().Next(6, 20));
        }

        /// <summary>
        /// 随机产生一个人名称
        /// </summary>
        /// <returns>AccountInfo对象</returns>
        private static AccountInfo GenerateName()
        {
            int nPername;
            string strFullName;
            var nRan = new Random();

            var nSurname = nRan.Next(0, strSurname.Length);
            var nNum = nRan.Next(2, 4);

            var nSex = nRan.Next(0, 2);

            var accountInfo = new AccountInfo();
            if (nSex == 0)
            {
                accountInfo.Sex = Sex.男;
                //rbMale.Checked = true;
                nPername = nRan.Next(0, strBoyName.Length);
                strFullName = strSurname[nSurname] + strBoyName[nPername];

                if (nNum == 3)
                {
                    nPername = nRan.Next(0, strBoyName.Length);
                    strFullName = strFullName + strBoyName[nPername];
                }
                accountInfo.Name = strFullName;
                //accountInfo.Account = Helper.ChineseSpell.MakeSpellCode(strFullName,0);
                //tbFullName.Text = strFullName;
            }
            else
            {
                accountInfo.Sex = Sex.女;
                //rbFemale.Checked = true;
                nPername = nRan.Next(0, strGirlName.Length);
                strFullName = strSurname[nSurname] + strGirlName[nPername];

                if (nNum == 3)
                {
                    nPername = nRan.Next(0, strGirlName.Length);
                    strFullName = strFullName + strGirlName[nPername];
                }
                accountInfo.Name = strFullName;
                //accountInfo.Account = Helper.ChineseSpell.MakeSpellCode(strFullName, 0);
                //tbFullName.Text = strFullName;
            }
            return accountInfo;
        }

    }

其中为了随机产生和姓名一致的帐号登陆名称,我用到了将汉字转化为拼音的一个类,这个类可以在cnblogs上面找到。

这样一个基本完整的帐号信息就产生了,在实际应用中,我还根据帐号名称检查了帐号是否存在,如果已经存在则在Account属性后面不上随机数字来保证帐号不重复。

三月
5

用VS 2008开发Silverlight1.0程序的问题(模板和智能感知)

Author Dominic    Category dotNet, 软件应用     Tags ,

买了本章立民的书,里面用的是Silverlight1.0,可本机安装的是,微软网站上的Silverlightv1.0SDK.msi里面只有给VS 2005用的模板,直接导致在中不能直接根据模板新建的项目,而虽然目前已经有了开发Silverlight2.0的教程但是还是没有关于Silverlight2.0的任何下载,而Silverlight1.1只有alpha版,安装Silverlight1.1 SDK和Tools for ,竟然需要手工卸载Silverlight1.0,太麻烦了。想到之前解决VS中某个项目模板的问题,找到了在下新建Silverlight1.0项目的方法,顺便搞定了这种状况下的XAML智能感知(intellisense)的问题。

从其他机器安装了VS 2005的机器上面安装 1.0 SDK,在C:\Documents and Settings\[登录名]\My Documents\Visual Studio 2005\Templates\ProjectTemplates\Visual C#目录下的SilverlightJSApplication.zip拷贝出来,最后复制到安装机器上的C:\Documents and Settings\[登录名]\My Documents\Visual Studio 2008\Templates\ProjectTemplates\Visual C#目录下目录(需要手工建立)中,如果是在Vista下则目录结构前缀有所不同。重启即可在新建项目Visual C#节点下看到项目模板“ JavaScript Application”了。

新建Silverlight Javascript Application

这种情况下,默认的WPF编辑器还没有对文件XAML提供intellisense功能,现在没有智能感知功能怎么编程呀,可以利用提供的XML编辑器中有intellisense功能来暂时解决一下这个问题,操作方法是:在解决方案资源管理器中选中一个XAML文件(如Scene.xaml),在右键菜单中选择“打开方式”菜单,在弹出来的打开方式对话框中选中“XML编辑器”,并点击右侧的“设为默认值”按钮,确定即可,再编辑xaml文件看看有没有intellisense功能。

更改XAML默认打开方式 

SilverlightJSApplication.zip下载

Silverlightv1.0SDK.msi下载

http://download.microsoft.com/download/e/c/8/ec8e1688-7740-4d0a-9563-476adb8034fa/Silverlightv1.0SDK.msi

一月
22

WF中顺序工作流本地通讯事件触发及调用步骤

Author Dominic    Category dotNet     Tags , ,

Windows Workflow Foundation ()中顺序工作流是非常常用的一种工作流,而在工作流运行过程中通常会和宿主程序之间交换数据,用于从外部环境获取数据,同时将工作流的状态告诉外部环境。

工作流中用来达到此目的的activity有:WebServiceInput、WebServiceOutput、InvokeWebService、CallExternalMethod、HandleExternalEvent。前三个用于和WebServices交换数据,后两个用于本地的通讯。CallExternalMethod activity允许工作流来调用宿主中注册的程序,而HandleExternalEvent activity是让工作流通过宿主来监听对应的事件。

使用CallExternalMethod、HandleExternalEvent一般需要根据以下步骤:(以下借用《Programming Windows Workflow Foundation》中代码)

1、定义接口事件和相关的参数类型。

用ExternalDataExchange标签定义接口和事件。用Serializable标签定义参数类型。

    [ExternalDataExchange]
    public interface IBugFlowService
    {
        event EventHandler<BugAddedArgs> BugAdded;
        void AssignBug(Bug bug);
    }
    [Serializable]
    public class BugAddedArgs : ExternalDataEventArgs
    {
        private Bug _bug;

        public BugAddedArgs(Guid instanceId, Bug newBug):base(instanceId)
        {
            _bug = newBug;
        }

        public Bug NewBug
        {
            get
            {
                return _bug;
            }
            set
            {
                _bug = value;
            }
        }
    }


2、定义传送的对象

这一步也可以放在之前或其他文件中,但对象必须打上Serializable标签。

    [Serializable]
    public class Bug
    {
        private string _description;
        private int _id;
        private string _title;

        public Bug(int id, string title, string description)
        {
            _id=id;
            _title = title;
            _description = description;
        }

        public string Descrition
        {
            get { return _description; }
            set { _description = value;}
        }

        public int ID
        {
            get { return _id; }
            set { _id = value;}
        }

        public string Title
        {
            get {  return _title;}
            set{_title = value;}
        }
    }

3、实现约定的接口

实现第一步中约定的服务接口

    public class BugFlowService : IBugFlowService
    {
        public event EventHandler<BugAddedArgs> BugAdded;

        public void AssignBug(Bug bug)
        {
            Console.WriteLine("Assign '{0}' to developer", bug.Title);
        }

        public void CreateBug(Guid instanceID, Bug bug)
        {
            BugAddedArgs arg = new BugAddedArgs(instanceID, bug);
            EventHandler<BugAddedArgs> ev = this.BugAdded;
            if (ev != null)
            {
                ev(null, arg);
            }
        }
    }

4、设计工作流及参数

新建一个顺序工作流,并依次从ToolsBox中拖放HandleExternalEvent activity、CallExternalMethod activity。分别命名NewBug、AssignBug。

设置命名为NewBug的HandleExternalEvent activity的InterfaceType属性为IBugFlowService,指定EventName属性为BugAdded,设置e参数来代表传入的事件参数,点击右侧的省略号按钮来绑定(或创建并绑定)参数到公开域或属性(例如:_newBug)。

设置命名为AssignBug的CallExternalMethod activity的InterfaceType属性为IBugFlowService,指定MethodName属性为AssignBug,AssignBug需要一个参数bug,点击bug参数右侧的省略号按钮来绑定(或创建并绑定)参数到公开域或属性(例如:_bugToAssign),为MethodInvoking事件生成事件处理方法AssignBug_MethodInvoking。

        public Bug _bugToAssign;
        public BugAddedArgs _newBug;

        private void AssignBug_MethodInvoking(object sender, EventArgs e)
        {

            _bugToAssign = _newBug.NewBug;

        }

5、在宿主中执行工作流

修改宿主启动工作流地方相关代码:

    ExternalDataExchangeService dataService;
    dataService = new ExternalDataExchangeService();
    workflowRuntime.AddService(dataService);
    BugFlowService bugFlow = new BugFlowService();
    dataService.AddService(bugFlow);

    WorkflowInstance instance = workflowRuntime.CreateWorkflow(                                   typeof(wf_test1.chapter3_sequential));
    instance.Start();

    Bug bug = new Bug(1, "Bug Title", "Bug Description");
    bugFlow.CreateBug(instance.InstanceId, bug);

 

注意事项说明:

1、接口必须打上ExternalDataExchange标签,才能使用工作流的数据交换服务[DataExchangeService]。

2、事件中参数类型必须继承自ExternalDataEventArgs类,参数类型必须打上Serializable标签。

3、事件句柄建议使用EventHandler<T>的方式,否则可能收到“The event BugAdded has to be of type EventHandler where T derives from ExternalDataEventArgs”的错误提示。

4、需要引用System.Workflow.Activities命名空间。

八月
24

Codeplex最流行25个.net开源项目

Author Dominic    Category dotNet     Tags

《eWEEK》评出的Codeplex最流行25个开源项目
1. VMukti富媒体协作平台
2. Microsoft SQL Server Product Samples: Engine
3. Patterns & Practices: Enterprise Library
4. BlogEngine.NET
5. Patterns & Practices – Smart Client Guidance
6. NMVP Framework
7. 微软SQL Server Product Samples:数据处理
8. Patterns & Practices: Web Service Software Factory
9. Patterns & Practices – Web Client Software Factory
10. Fast Lightweight Expression Evaluator
11. 微软SQL Server Product Samples:集成服务
12. DocProject for Sandcastle
13. SharpMap – Open Source Mapping Engine for .Net 2.0
14. VFPX
15. 微软SQL Server Product Samples:分析服务
16. Flickr Metadata Synchr
17. AJAX Control Toolkit
18. 微软SQL Server Product Samples:报告服务
19. Enterprise Library Contrib
20. Farseer Physics Engine — 2D Physics For XNA
21. PublicDomain
22. PowerShell Community Extensions
23. Filter.NET
24. SharpZebra
25. ShizHost

专题推荐

标签

404错误 apache article CSS dotNet fckeditor Hack iOS iTouch javascript PayPal PHP rar ubuntu utf8 VMware VMware Tools weblinks Win2008 Windows Server 2008 Wordpress xajax XOOPS 上传 个人 中文 中文习惯 关键词 合肥 域名 安全 工作 文件类型 文章管理 时区 未分类 模块 模板 模组 电子地图 界面友好 禅意花园 网速 腾讯 配置管理

分类目录

新浪微博

存档

最近文章

近期评论

友情链接

分享按钮