数据加载中……

2010年7月16日

asp.net三层架构

三层架构(3-tier application) 通常意义上的三层架构就是将整个业务应用划分为:表现层(UI)、业务逻辑层(BLL)、数据访问层(DAL)。区分层次的目的即为了“高内聚,低耦合”的思想。 
 1、表现层(UI):通俗讲就是展现给用户的界面,即用户在使用一个系统的时候他的所见所得。

 2、业务逻辑层(BLL Business Logic Layer):针对具体问题的操作,也可以说是对数据层的操作,对数据业务逻辑处理。

  3、数据访问层(DAL):该层所做事务直接操作数据库,针对数据的增、删、改、查。

  优点:

  1、开发人员可以只关注整个结构中的其中某一层;

  2、可以很容易的用新的实现来替换原有层次的实现;

  3、可以降低层与层之间的依赖;

  4、有利于标准化;

  5、利于各层逻辑的复用。

  缺点:

  1、降低了系统的性能。这是不言而喻的。如果不采用分层式结构,很多业务可以直接造访数据库,以此获取相应的数据,如今却必须通过中间层来完成。

  2、有时会导致级联的修改。这种修改尤其体现在自上而下的方向。如果在表示层中需要增加一个功能,为保证其设计符合分层式结构,可能需要在相应的业务逻辑层和数据访问层中都增加相应的代码。

所以考虑一个项目是不是应该应用三层/多层设计时, 先得考虑下是不是真的需要? 实际上大部分程序就开个WebApplication就足够了, 完全没必要作的这么复杂. 而多层结构, 是用于解决真正复杂的项目需求的。

posted @ 2010-07-16 08:53 seaship 阅读(158) | 评论 (0)编辑 收藏

2010年6月24日

VBA 编写考勤分析程序终于完成了

VBA 编写考勤分析程序终于完成了,从6月15号开始经过十几次的反复修改
6月24号终于推出了 1.0正式版。
编写目的:
目前公司考勤班次复杂,员工人数多,现有的考勤软件无法准确对所有员工打卡记录进行归类。
完全依靠人工进行分析每个员工的打卡记录。为了减少和减轻人工分析过程中大量的重复性劳动,
现利用EXCEL VBA 程序开发一套考勤分析程序。

实现功能:
1.自动计算正常上班时间和实际加班时间
2.自动标注出勤迟到,早退,漏打卡等出勤异常的员工打卡记录
3.自动排除重复打卡记录
4.标注排班表中未添加,但是有出勤记录的员工

存在问题:
1.必须在排班表中准确分配好员工的班次,否则出现错误
2.还需要人工核对异常出勤记录中是否存在请假
3.由于完全依靠CPU计算分析考勤数据,数据量大时会计算缓慢,需要提高计算机硬件配置

posted @ 2010-06-24 11:41 seaship 阅读(1060) | 评论 (1)编辑 收藏

2010年6月21日

企业网站做SEO的意义

现在企业都很注重宣传自己,只有宣传好自己,外界认同你了,你的企业才能更好的发展,而企业网站侧是一个企业形象宣传的窗口,对于一个陌生的客户要了解你们很多会先看看你的网站,从侧面了解一下,你公司的实力及产品信息等。这里说到的陌生的客户,(姑且让我这样称呼吧,)也是潜在的客户,他们是怎么样得知你的企业,我想有一部分是通过搜索找到的,说到搜索这里好像才和SEO搭上边吧,其实我觉得我在这里谈SEO应用于企业之中,可能有些多余的,因为作为SEOER都知道,通过SEO优化,让企业站排名靠前,可以网罗更多客源,事实上也是这样的,很多企业都是这样做的
企业网站,不说如何优化,想说说网站用户体验,这也是SEO里的一部分内容吧,企业站最好简洁明了,不要让人看了有找不着北的感觉。产品分类清析,说明详细,图文并茂,用户更容易找到TA想要的。另外很多人说企业站没什么内容更新,其实不然,一个行业相关的东西太多了,你可以找找技术方面、信息方面的内容,经常更一下,特别是逢年过节的时候,发表一些祝贺类的文章,表达一下企业对客户的祝贺,更能显示企业的亲和力及人文关怀。还有本论坛的一位朋友告诉我的:1、把网站首页的联系方式加粗加红,2、在网页右边增加滚动的网站留言板,或者在线QQ能给网站提升 300%的效果,但这样做有没有300%的效果不敢说,但肯定有一定的好处,红色字体最少可以引人注目,在线QQ及留言方便用户交流,大家可以试试。

总之通过企业网站能给企业来一定的销售量,而SEO能给企业站带来更多生机,当然企业网上的销售不能光靠一个企业站维持,还得在其他一些行业站发布一些相关信息,拿阿里巴巴、慧聪网来说,在这些网站上发布信息,客户通过他们网站内的搜索也能找到你,这里发布信息也有个技巧的,别人站内搜你也是通过关键词才能搜到,所以这里就用上SEO里的关键词选择。发布时你得选好关键词及发布的标题,这样搜索时你才能靠前,机会更大。

posted @ 2010-06-21 11:49 seaship 阅读(109) | 评论 (0)编辑 收藏

2010年6月20日

C# 连接ACCESS类

定义AccessDbClass类

变量声明处

       
string Dbpath= Application.StartupPath.Substring(0, Application.StartupPath.Substring(0, Application.StartupPath.LastIndexOf("\\")).LastIndexOf("\\"));
        
//  string Dbpath = "D:\\我的文档\\Visual Studio 2005\\Projects\\hrmgl\\hrmgl\\database\\db.mdb";
        ///  构造函数与连接关闭数据库
        
/// 构造函数
        
/// 
        
///ACCESS数据库路径

        public AccessDbClass()
        
{
           ConnString 
= "Provider=Microsoft.Jet.OleDb.4.0;Data Source=" + Dbpath + @"\database\db.mdb" ;
             
//  ConnString = "Provider=Microsoft.Jet.OleDb.4.0;Data Source=" + Dbpath;
            Conn = new OleDbConnection(ConnString);
            Conn.Open();
        }

        
///
        
/// 打开数据源链接
        
/// 
        
/// 

        public OleDbConnection DbConn()
        
{
            Conn.Open();
            
return Conn;
        }


        
/// 
        
/// 请在数据传递完毕后调用该函数,关闭数据链接。
        
/// 

        public void Close()
        
{
            Conn.Close();
        }






        
/// 数据库基本操作
        
/// 根据SQL命令返回数据DataTable数据表,
        
/// 可直接作为dataGridView的数据源
        
/// 
        
/// 

        public DataTable SelectToDataTable(string SQL)
        
{
            OleDbDataAdapter adapter 
= new OleDbDataAdapter();
            OleDbCommand command 
= new OleDbCommand(SQL, Conn);
            adapter.SelectCommand 
= command;
            DataTable Dt 
= new DataTable();
            adapter.Fill(Dt);
            
return Dt;
        }

        
/// 
        
/// 根据SQL命令返回数据DataSet数据集,其中的表可直接作为dataGridView的数据源。
        
/// 
        
/// 


        
/// 在返回的数据集中所添加的表的名称
        
/// 

        public DataSet SelectToDataSet(string SQL, string subtableName)
        
{
            OleDbDataAdapter adapter 
= new OleDbDataAdapter();
            OleDbCommand command 
= new OleDbCommand(SQL, Conn);
            adapter.SelectCommand 
= command;
            DataSet Ds 
= new DataSet();
            Ds.Tables.Add(subtableName);
            adapter.Fill(Ds, subtableName);
            
return Ds;
        }

posted @ 2010-06-20 17:06 seaship 阅读(696) | 评论 (0)编辑 收藏
VBA编写 考勤分析宏程序

为公司编写的一个宏程序,班次太多还没完成

Sub kqfx()
'取得打卡表的记录行数
kqcount = Sheet1.UsedRange.Rows.Count


'取得排班表的记录行数
pbcount = Sheet3.UsedRange.Rows.Count


For i = 2 To pbcount
   Sheet2.Cells(i, 
1= Sheet3.Cells(i, 1)
   Sheet2.Cells(i, 
2= CStr(Sheet3.Cells(i, 2))
   Sheet2.Cells(i, 
2).NumberFormat = "@"
   Sheet2.Cells(i, 
3= Sheet3.Cells(i, 3)
   Sheet2.Cells(i, 
4= Sheet3.Cells(i, 4)
   Sheet2.Cells(i, 
5= Sheet3.Cells(i, 5)

Next i
'创建汇总表完成

For i = 2 To pbcount
    y 
= 1 '打卡计数
    For j = 2 To kqcount
        
        
If Sheet2.Cells(i, 2= Sheet1.Cells(j, 1Then '相同员工
        
              
' cfjl = Sheet1.Cells(j, 6) 排除重复打卡记录 后续考虑
           
               
If Sheet1.Cells(j, 6<> "重复记录" Then
                   
                   Sheet2.Cells(i, y 
+ 9= Sheet1.Cells(j, 3'考勤时间行改成列
                   
                   y 
= y + 1
                   
               
End If
     
      
        
End If

   
Next j
   
Next i

'记录汇总完毕 开始分析

For i = 2 To pbcount



 
   flag 
= ""
   banci 
= Sheet2.Cells(i, 5)
   jb1 
= ""
   jb2 
= ""
   lbsj 
= 0
   Overtimes 
= 0
    
If IsEmpty(Sheet2.Cells(i, 10)) Or IsEmpty(Sheet2.Cells(i, 11)) Or IsEmpty(Sheet2.Cells(i, 12)) Or IsEmpty(Sheet2.Cells(i, 13)) Then
    
      flag 
= flag + "考勤记录不完整"
      
      Sheet2.Cells(i, 
9= flag
    end if

posted @ 2010-06-20 08:44 seaship| 编辑 收藏
仅列出标题