asp.net C# 无限分类递归算法?

dys_198102 2009-11-28 10:54:58
type_id type_name parent_id (数据表product的数据结构)
7 家用电器 0
8 手机数码 0
9 电脑产品 0
10 日用百货 0
11 洗衣机 19
12 平板电视 19
13 电热水器 19
14 家庭音响 19
15 燃气热水器 19
16 空调冰箱冷柜 19
17 DVD/USB播放器 19
18 电视附件 19
19 大 家 电 7
20 生活电器 7
21 厨房电器 7
22 个人护理 7
23 汽车用品 7
24 吸尘器 20
25 电熨斗 20
26 饮水机 20
27 取暖电器 20
28 加湿器 20
29 净化器 20
现在我要提取出来做成这样的菜单

家用电器
洗衣机 平板电视 电热水器 家庭音响 燃气热水器 空调 冰箱冷柜
DVD/USB播放器 电视附件 家电服务 家电下乡

生活电器
电饭煲 电磁炉 燃气灶 吸油烟机 电压力锅 电饼铛榨汁 蔬解毒机 煮蛋器 酸奶机 其它厨房电器


手机数码
GSM手机 对讲机 手机通讯
如果我用普通的算法,虽然只有一个表,我要查询两次,现在想用一个递归算法把它弄出来。

下边是我写的代码C#:
protected void leftmenu()
{
using (SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["webtest1"].ToString()))
{
conn.Open();
string sql = "select * from QX_Products_Class";

DataSet set = new DataSet();
SqlDataAdapter dr = new SqlDataAdapter(sql,conn);
dr.Fill(set, "Customers");

StringBuilder sb = new StringBuilder();

foreach(DataRow custRow in set.Tables["Customers"].Rows)
{
if (custRow["parent_id"].ToString() == "0")
{
sb.Append("<h3><a href='product.aspx?id=" + custRow["type_id"].ToString() + "' id='M_" + custRow["type_id"].ToString() + "'>" + custRow["type_name"].ToString() + "</a></h3>");



}
else
{
sb.Append("<ul id='menu_body_title'>");
sb.Append("<li><a href='#'>" + custRow["type_name"].ToString() + "</a></li>");
sb.Append("</ul>");
}


}
this.Label1.Text = sb.ToString();


}
}
这个肯定不对,求正解,谢谢
...全文
1140 26 打赏 收藏 转发到动态 举报
写回复
用AI写文章
26 条回复
切换为时间正序
请发表友善的回复…
发表回复
zorou_fatal 2009-11-30
  • 打赏
  • 举报
回复
Use Stack.

Do not use recursive looping.
dys_198102 2009-11-30
  • 打赏
  • 举报
回复
如果不用treeview控件哪,有没有别的方法?
vip__888 2009-11-30
  • 打赏
  • 举报
回复
vip__888 2009-11-30
  • 打赏
  • 举报
回复
        /// <summary>
/// 控件绑定
/// </summary>
private void TreeViewBind()
{
string sql = "select * from tree";
DataSet ds = SqlHelper.dataSet(SqlHelper.connectionString, CommandType.Text, sql);//此处调用了获的dt的代码,不加入了,自己写.
DataView dv = ds.Tables[0].DefaultView;
dv.RowFilter = "treeNo=0";
TreeView1.ShowCheckBoxes = TreeNodeTypes.All;
foreach (DataRowView drv in dv)
{
TreeNode node = new TreeNode();
node.Text = drv["treeName"].ToString();
node.Value = drv["treeId"].ToString();
node.Expanded = false;
TreeView1.Nodes.Add(node);
AddReplies(dv, node);
}
}

/// <summary>
/// 递归绑定子节点
/// </summary>
/// <param name="dv"></param>
/// <param name="node"></param>
private void AddReplies(DataView dv, TreeNode node)
{
dv.RowFilter = "treeNo='"+node.Value+"'";
foreach (DataRowView row in dv)
{
TreeNode replyNode = new TreeNode();
replyNode.Text = row["treeName"].ToString();
replyNode.Value = row["treeId"].ToString();
replyNode.Expanded = false;
node.ChildNodes.Add(replyNode);
AddReplies(dv, replyNode);
}
}
mamiaoquan 2009-11-29
  • 打赏
  • 举报
回复
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
//TreeView1.Attributes.Add("onclick", "ReturnValue()");//
//BindTreeView();
SqlConnection conn = new SqlConnection("server=;database=db;uid=sa;pwd=;");
try
{
conn.Open();
SqlDataAdapter da = new SqlDataAdapter("select * from 表 ", conn);
ds = new DataSet();
da.Fill(ds);
this.ViewState["ds"] = ds;
}
catch (Exception ex)
{
Response.Write(ex.Message);
}
finally
{
conn.Close();
}

//调用递归函数,完成树形结构的生成
AddTree(0, (TreeNode)null);

}
}
public void AddTree(int leibie_fatherid, TreeNode pNode)
{
DataView dvTree = new DataView(ds.Tables[0]);
//过滤ParentID,得到当前的所有子节点
dvTree.RowFilter = "[parent_id ] = " + leibie_fatherid;

foreach (DataRowView Row in dvTree)
{
TreeNode Node = new TreeNode();
if (pNode == null)
{ //添加根节点
Node.Text = Row["type_name"].ToString();
TreeView1.Nodes.Add(Node);
Node.Expanded = true;
AddTree(Int32.Parse(Row["type_id "].ToString()), Node); //再次递归
}
else
{ //?添加当前节点的子节点
Node.Text = Row["type_name"].ToString();
pNode.ChildNodes.Add(Node);
Node.Expanded = false;
AddTree(Int32.Parse(Row["type_id"].ToString()), Node); //再次递归
}
}
}
mohugomohu 2009-11-28
  • 打赏
  • 举报
回复
    string blank = "        ";
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
string body = ShowNodes(0, 0);
lblBody.Text = body;
}
}
private string ShowNodes(int pid, int level)
{
string body = "";
DataTable dt = da.Query("select * from DropDownList where ParentId=" + pid.ToString());
for (int i = 0; i < dt.Rows.Count; i++)
{
string space = "";
for (int j = 0; j < level; j++)
{
space += blank;
}
body += "<br>" + space + dt.Rows[i]["MyName"].ToString();
body += "<a style='font-size:12px' href='#' " +
"onclick='showDialog(\""+dt.Rows[i]["MyId"].ToString()+"\",\""+
dt.Rows[i]["MyName"].ToString()+"\")'>添加子节点</a>";
body += ShowNodes(Convert.ToInt32(dt.Rows[i]["MyId"].ToString()), level+1);
}
return body;
}
bt_lose 2009-11-28
  • 打赏
  • 举报
回复
http://topic.csdn.net/u/20091128/11/ea8b0fc5-3d2b-463a-99df-497d0ec9754a.html
帮我看看吧。。急急急
满衣兄 2009-11-28
  • 打赏
  • 举报
回复
你要是个好同学就自己试着写,先把原理弄明白,然后就好写了,因为这种牵扯到数据库的东西虽然原理一样,但是具体写法是不同的,所以没有通用的方法.
一个最简单的例子就是斐波那契额数列的递归实现。我建议先弄明白递归算法的实现在来自己动手写。

using System;
using System.Collections.Generic;
using System.Data;
using System.Data.SqlClient;
using System.Windows.Forms;
using System.Text;

namespace 企业人事管理系统
{
class Public_Fun
{
#region[公共变量]
DataSet DS;
DataTable DT;
SQL_Link Link = new SQL_Link();
bool Tree_Node_P = false;
#endregion

#region[函数] [TreeView递归函数]
软件开发网


#region [函数] [树型2级显示]
public void Fun_Tree(TreeView TREE,SqlConnection Link_Conn)
{
DS = Link.SQL_Select("select * from Basic_Bm", Link_Conn);
DT = DS.Tables[0];
if (Tree_Node_P == false)
{
foreach (DataRow DR in DT.Rows)
{
if (DR.ItemArray[1].ToString() == "0")


{
TreeNode TN = new TreeNode();
TN.Text = DR.ItemArray[0].ToString();
TREE.Nodes.Add(TN);
}
http://www.mscto.com

}
Tree_Node_P = true;
}

foreach (DataRow DR_2 in DT.Rows)
{
foreach (TreeNode TN_2 in TREE.Nodes)
软件开发网


{
if (DR_2.ItemArray[1].ToString() == TN_2.Text)
{
TreeNode TN_3 = new TreeNode();
TN_3.Text = DR_2.ItemArray[0].ToString();

TN_2.Nodes.Add(TN_3);
Fun_Tree_2(TN_3);
}
}
}
}
#endregion

#region [函数] [树型>3级递归]
public void Fun_Tree_2(TreeNode T_Name)
{
foreach (DataRow DR_2 in DT.Rows)
{
if (DR_2.ItemArray[1].ToString() == T_Name.Text)


{
TreeNode TN_3 = new TreeNode();
TN_3.Text = DR_2.ItemArray[0].ToString();
T_Name.Nodes.Add(TN_3);
Fun_Tree_2(TN_3);
}
}
}
#endregion

#endregion


}
}


dys_198102 2009-11-28
  • 打赏
  • 举报
回复
我的好像不能用这个树型控件,要全部显示才行。我以前做的都是查询二次,这次想用递归的方式试试。
dys_198102 2009-11-28
  • 打赏
  • 举报
回复
你的代码还是没看懂, TreeViewNode 这个没怎么用过。。。。,我好好看看。
aihui109 2009-11-28
  • 打赏
  • 举报
回复
  //“公共”模块不参与权限控制
if ("角色控制" == drAry[nIndex][_dtblModule.strMduCommonColumn.ColumnName].ToString())
{
//如果此角色拥有该模块的功能数为0,则不显示此菜单
object obj = new perVwRolePowerTableAdapter().GetRolePowerCount(drAry[nIndex][_dtblModule.strModuleCodeColumn.ColumnName].ToString(), base.UserRoleCode);
if (0 == Convert.ToInt32(obj))
{
continue;
}
}



这段代码你不用看 。。
aihui109 2009-11-28
  • 打赏
  • 举报
回复
我的代码是以第三方treeview为例,但基本思路是差不多的,我这里主要少了构建html的代码,下面是我数据库的格式,跟你的差不多。

2009-4-9 0:00:00 00 Boigle一卡通 -1
2009-4-15 14:35:32 0000 人员管理 00
2009-4-15 14:41:23 000000 人员维护 0000
2009-4-16 13:20:34 000001 部门维护 0000
2009-4-16 13:26:07 000003 角色维护 0000
2009-4-16 13:27:40 0003 系统管理 00
2009-4-16 13:27:59 000300 模块维护 0003
2009-4-16 13:31:40 000301 模块功能维护 0003
2009-4-16 16:02:27 000302 角色权限维护 0003
2009-4-20 19:02:12 000303 个人密码更改 0003
NULL NULL NULL NULL
dys_198102 2009-11-28
  • 打赏
  • 举报
回复
嗯,得学习学习,给个参考模式吧。弄了一个晚上了。。。
满衣兄 2009-11-28
  • 打赏
  • 举报
回复
这个最基本的算法还是自己写吧,多花点时间就是了。
dys_198102 2009-11-28
  • 打赏
  • 举报
回复
呵呵,我说的是本人水平低,别误会。。。
dys_198102 2009-11-28
  • 打赏
  • 举报
回复
楼上的有一部分看不懂,太麻烦了点吧,唉,水平太低
aihui109 2009-11-28
  • 打赏
  • 举报
回复
不好意思,楼主,我后面加了个补充,你删掉一个吧。。
aihui109 2009-11-28
  • 打赏
  • 举报
回复
public partial class MenuTree : PageBase
{
private DataSetModule.perTbModuleDataTable _dtblModule;

new protected void Page_Load(object sender, EventArgs e)
{
if (!this.IsPostBack)
{
InitTreeView();
}
}

/// <summary>
/// 初始树根节点
/// </summary>
private void InitTreeView()
{
//清除所有树节点
trvwCur.Nodes.Clear();
perTbModuleTableAdapter adp = new perTbModuleTableAdapter();
_dtblModule = adp.GetDisplayModule();

DataRow[] drAry = _dtblModule.Select(_dtblModule.strParentMduCodeColumn.ColumnName + "='-1'");

TreeViewNode trn = new TreeViewNode();
trn.Text = drAry[0][_dtblModule.strModuleNameColumn.ColumnName].ToString();
trn.Attributes.Add("MenuNo",drAry[0][_dtblModule.strModuleCodeColumn.ColumnName].ToString());
trn.Attributes.Add("UrlPath", drAry[0][_dtblModule.strPageFilePathColumn.ColumnName].ToString());
trn.Expanded = (drAry[0][_dtblModule.strMduExpandColumn.ColumnName].ToString() == "展开" ? true : false);
trvwCur.Nodes.Add(trn);

CreateTreeView(trn, drAry[0][_dtblModule.strModuleCodeColumn.ColumnName].ToString());
}

/// <summary>
/// 构建树
/// </summary>
/// <param name="trn">树节点</param>
/// <param name="strParentNodeCode">父节点编码</param>
private void CreateTreeView(TreeViewNode trn, string strParentNodeCode)
{
DataRow[] drAry = _dtblModule.Select(_dtblModule.strParentMduCodeColumn.ColumnName + "='" + strParentNodeCode + "'");

for (int nIndex = 0; nIndex < drAry.Length; nIndex++)
{
//“公共”模块不参与权限控制
if ("角色控制" == drAry[nIndex][_dtblModule.strMduCommonColumn.ColumnName].ToString())
{
//如果此角色拥有该模块的功能数为0,则不显示此菜单
object obj = new perVwRolePowerTableAdapter().GetRolePowerCount(drAry[nIndex][_dtblModule.strModuleCodeColumn.ColumnName].ToString(), base.UserRoleCode);
if (0 == Convert.ToInt32(obj))
{
continue;
}
}

TreeViewNode trnChild = new TreeViewNode();
trnChild.Text = drAry[nIndex][_dtblModule.strModuleNameColumn.ColumnName].ToString();
trnChild.Attributes.Add("MenuNo", drAry[nIndex][_dtblModule.strModuleCodeColumn.ColumnName].ToString());
trnChild.Attributes.Add("UrlPath", drAry[nIndex][_dtblModule.strPageFilePathColumn.ColumnName].ToString());
trnChild.Expanded = (drAry[nIndex][_dtblModule.strMduExpandColumn.ColumnName].ToString() == "展开" ? true : false);
trn.Nodes.Add(trnChild);

CreateTreeView(trnChild, drAry[nIndex][_dtblModule.strModuleCodeColumn.ColumnName].ToString());
}
}
}
aihui109 2009-11-28
  • 打赏
  • 举报
回复
/// <summary>
/// 初始树根节点
/// </summary>
private void InitTreeView()
{
//清除所有树节点
trvwCur.Nodes.Clear();
perTbModuleTableAdapter adp = new perTbModuleTableAdapter();
_dtblModule = adp.GetDisplayModule();

DataRow[] drAry = _dtblModule.Select(_dtblModule.strParentMduCodeColumn.ColumnName + "='-1'");

TreeViewNode trn = new TreeViewNode();
trn.Text = drAry[0][_dtblModule.strModuleNameColumn.ColumnName].ToString();
trn.Attributes.Add("MenuNo",drAry[0][_dtblModule.strModuleCodeColumn.ColumnName].ToString());
trn.Attributes.Add("UrlPath", drAry[0][_dtblModule.strPageFilePathColumn.ColumnName].ToString());
trn.Expanded = (drAry[0][_dtblModule.strMduExpandColumn.ColumnName].ToString() == "展开" ? true : false);
trvwCur.Nodes.Add(trn);

CreateTreeView(trn, drAry[0][_dtblModule.strModuleCodeColumn.ColumnName].ToString());
}

/// <summary>
/// 构建树
/// </summary>
/// <param name="trn">树节点</param>
/// <param name="strParentNodeCode">父节点编码</param>
private void CreateTreeView(TreeViewNode trn, string strParentNodeCode)
{
DataRow[] drAry = _dtblModule.Select(_dtblModule.strParentMduCodeColumn.ColumnName + "='" + strParentNodeCode + "'");

for (int nIndex = 0; nIndex < drAry.Length; nIndex++)
{
//“公共”模块不参与权限控制
if ("角色控制" == drAry[nIndex][_dtblModule.strMduCommonColumn.ColumnName].ToString())
{
//如果此角色拥有该模块的功能数为0,则不显示此菜单
object obj = new perVwRolePowerTableAdapter().GetRolePowerCount(drAry[nIndex][_dtblModule.strModuleCodeColumn.ColumnName].ToString(), base.UserRoleCode);
if (0 == Convert.ToInt32(obj))
{
continue;
}
}

TreeViewNode trnChild = new TreeViewNode();
trnChild.Text = drAry[nIndex][_dtblModule.strModuleNameColumn.ColumnName].ToString();
trnChild.Attributes.Add("MenuNo", drAry[nIndex][_dtblModule.strModuleCodeColumn.ColumnName].ToString());
trnChild.Attributes.Add("UrlPath", drAry[nIndex][_dtblModule.strPageFilePathColumn.ColumnName].ToString());
trnChild.Expanded = (drAry[nIndex][_dtblModule.strMduExpandColumn.ColumnName].ToString() == "展开" ? true : false);
trn.Nodes.Add(trnChild);

CreateTreeView(trnChild, drAry[nIndex][_dtblModule.strModuleCodeColumn.ColumnName].ToString());
}
}
dys_198102 2009-11-28
  • 打赏
  • 举报
回复
protected void leftmenu(int parentid)
{
using (SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["webtest1"].ToString()))
{
conn.Open();
string sql = "select * from QX_Products_Class where parent_id="+parentid;


DataSet set = new DataSet();
SqlDataAdapter dr = new SqlDataAdapter(sql,conn);
dr.Fill(set, "Customers");


StringBuilder sb = new StringBuilder();
if (parentid == 0)
{

foreach (DataRow custRow in set.Tables["Customers"].Rows)
{
sb.Append("<h3 class='C'><a href='product.aspx?id=" + custRow["type_id"].ToString() + "' id='M_" + custRow["type_id"].ToString() + "'>" + custRow["type_name"].ToString() + "</a></h3>");


}
}
else
{
foreach (DataRow custRow in set.Tables["Customers"].Rows)
{
sb.Append("<ul id='menu_body_title'>");
sb.Append("<li><a href='#'>" + custRow["type_name"].ToString() + "</a></li>");
sb.Append("</ul>");
}
}

this.Label1.Text = sb.ToString();

}
}
哪位高手帮我看看,怎么弄。郁闷。。。
加载更多回复(6)
.Net精品就业班课程表 : 1、.Net基础加强(10天) 核心技术课程 常用数据结构(List、Dictionary、Array)、多态、常用设计模式、反射、常用.net类库、泛型、IO流、委托事件、正则表达式、XML、反射、GC等。 2、数据库开发及ADO.Net(6天) 核心技术课程 数据库开发基础、Microsoft SQLServer基础、SQL语言基础、索引、事务、SQL语言高级技术(空值处理、聚合与分组、数据分页、Union、日期函数、类型转换函数、流控函数、表连接、子查询、存储过程、触发器)、数据库设计范式、数据库调优。 ADO.Net(行集、数据集、类型化数据集、SQLHelper、SQL注入漏洞防范、数据绑定)。 3、三层架构MIS项目(5天) 查看项目演示 功能点 本项目基于流行的三层架构(DAL+BLL+UI)。 主要功能点:高安全性的用户管理体系、高安全性的异构系统数据导入导出、拼音检索、复合检索、无限级次数据管理、个性化邮件群发、Excel文件导入导出。 技术点 ADO.Net技术应用、SQLServer、MD5安全算法、基于NPOI的Excel文件处理、树状结构数据处理、归、CodeSmith、代码生成器、三层架构。 项目说明 这是一个用WinForm技术实现的系统,传智播客在开课的半个月就安排一个项目,体现了传智播客“项目驱动学习”的先进教学理念。 4、网页开发与JavaScript(7天) 查看案例演示 核心技术课程 HTML基础加强、css(包含Div+CSS布局)、JavaScript、Dom(事件、window对象、document对象、对话框、定时器、粘贴板、动态Dom、跨浏览器兼容性解决方案、JS压缩和CDN、Internet Explorer Developer Toolbar)、JQuery(JQuery函数、隐式迭代、链式编程、id选择器、tag选择器、CSS选择器、层次选择器、表单选择器、过滤选择器、复合选择器、节点导航、节点操作、样式操作、事件、动画、JQuery Cookie、JQuery Live、JQueryUI)。 课程说明 CSS、JavaScript是ASP.Net开发的基础,把这些掌握好了就能很轻松的学会ASP.Net;Dom是实现网页动态效果的技术,在网站越来越个性化年代,招聘企业对应聘者的Dom水平要求非常高;JQuery是近几年异军突起的JavaScript框架库,几乎成了Web前端开发事实上的标准,大部分企业都是使用JQuery进行Web前端的开发。 学完了这阶段课程,学员将学会开发主流网站的前端效果,比如:焦点图、滚动展示图、网页防复制、网页自定义菜单、WebOS、美女时钟、无刷新评论、评分控件、表格特效、图片悬浮详细信息、微博界面、QQ消息框效果、Div对话框等。 5、ASP.Net开发(12天) 核心技术课程 自己动手写Web服务器(Socket、多线程)、ashx模式Web开发、ViewState、Cookie、Session、Http协议、Web开发基本原则、XSS漏洞防范、Request对象、Response对象、Server对象、虚拟路径、HttpHandler深入、ASP.Net生命周期、WebForm原理、服务端基本控件、WebShell漏洞防范、HTML服务端控件、验证框架、MasterPage、数据绑定控件(ObjectDataSource、列表类绑定控件、GridView、FormView、ListView、Repeater、高效率分页)、CKEditor、Membership、缓存、互联网调优(SEO、HTML压缩、页面静态化、移除ViewState、表单GET化)、URL重写、错误处理、AJAX(XMLHTTP、JQuery AJAX、Json)、全局文件、HttpHandler与HttpModule、IIS配置。 课程说明 由于微软对ASP.Net进行高度封装,因此ASP.Net入门非常简单,开发人员不需要了解HTML、JavaScript、Http协议也可以快速开发出一个Web系统,正因为如此,社会上充斥着大量这样的“拖控件的开发人员”,使得很多Java、PHP等语言的开发人员诋毁ASP.Net开发人员的时候经常会说“你们什么都不懂,就会拖控件”。ASP.Net的快速开发是ASP.Net非常大的一个优点,可以加快开发效率,这是行业的发展趋势,但是局限于这样的“傻瓜化开发方式”的开发人员的竞争力和成长性都是非常有限的,遇到ASP.Net一些高级技术(比如ASP.Net MVC、SEO、网站调优、服务端客户端混合编程、AJAX等)的时候就完全不能胜任。通过上一个阶段的HTML、JavaScript、Dom的学习,学员已经有了很好的HTML、JavaScript基础;在ASP.Net课程的一开始,不是直接教学员怎么拖ASP.Net控件进行快速开发,而是通过ashx的模式开发原始的动态网站,让学员明白“请求—处理—响应模型”、“Http协议、Http无状态”、“c#代码渲染生成浏览器端JavaScript”、“ViewState的作用”、“Session的原理”等这些基本而又重要的原理,从而扫清后面ASP.Net知识学习的基础性障碍。 由于访问量非常大,因此互联网项目的开发对ASP.Net开发人员的要求非常高,所以我们安排了互联网调优、缓存、网站防黑等内容。 ASP.Net中控件数量是非常多的,讲解ASP.Net的教材通常要上千页,让初学者望而生畏,其实ASP.Net大部分控件相似性非常强的,同类型的控件学会了一个那么其他控件也就很容易学会了。比如只要学会了DropDownList,那么RadioButtonList、ListBox、CheckBoxList、BulletedList等几乎不用学就会用;再比如只要学会了ListView,那么Repeater、GridView、FormView等控件也是触类旁通。传智播客认真钻研教学,对知识进行分类、整理、提炼精华,让学员在短时间内掌握ASP.Net技术。 ASP.Net中有一些技术是有局限性的,传智播客根据这些技术在企业中的实际应用情况进行了调整、补充。比如项目中几乎没有在UI层直接访问数据库的,而是采用三层架构,因此我们不讲解UI层直连数据库的控件SQLDataSource,而是把主要精力放在讲解三层架构开发模式。再比如ASP.Net内置的AJAX解决方案UpdatePanel只在部分要求不高的内网项目中才被使用,因此我们在讲解UpdatePanel的使用和原理之外,把更多的时间放在讲解企业中用的最多的JQuery AJAX解决方案上。 6、B/S系统项目(7天) 项目说明 1、网上图书商城。这是一个典型的B2C网上商城,使用经典的复杂三层架构(工厂模式)进行开发。涉及图书管理、搜索、订单管理、导航管理等核心模块。在讲解ASP.Net基础后安排这样一个B2C网上商城系统,让学员在实际项目中将学到的知识学以致用。 2、办公自动化OA系统。这是一个典型的基于ASP.Net技术的OA协同办公项目,包含了权限管理、公告管理、文档管理、工作流、论坛管理、新闻模块管理、人员管理等典型的OA系统模块。 3、数据采集和邮件群发。这是一个基于多线程的邮件营销平台,核心技术包括网络爬虫、多线程、HTML解析、邮件发送、生产者消费者模式等。 注:以上三个案例,上课时会根据每个班的课堂反馈选择其中一个案例予以讲解学习。 7、如鹏网项目(9天) 查看项目演示 功能点 站内搜索、栏目管理、视频播放(完全模仿优酷视频页面)、焦点图、静态页面生成(新浪、搜狐等大型网站普遍采用的技术)、文章管理、无刷新评论、评论的无刷新分页、敏感词过滤、用户管理、友情链接管理、缓存管理、广告位管理、RSS输出、水印设置、无刷新上传图片、搜索引擎优化设置、数据备份恢复、伪静态设置、网上商城、订单管理、在线支付(支持支付宝、财付通、块钱等第三方支付平台)、网站调优(数据库优化、缓存、静态页、CSS Spirit、js压缩)。 技术点 搜索引擎技术:Lucene.Net、多线程开发、爬虫技术、网页分析、正则表达式、Log4Net日志框架、Quartz.Net定时作业调度。 大型互联网开发技术:代码生成、网页静态化、基于JQuery的Web2.0页面开发、AJAX、SEO、网站调优、采集器、RSS/XML、网站防黑(防XSS攻击、防注入漏洞攻击、防CC攻击、防挂马、防盗链、敏感词过滤、广告帖智能过滤)、IIS管理与调优、流量分析、第三方脚本嵌入(广告、统计代码、内容联盟等)、图片服务器分离。 项目说明 如鹏网项目是已经上线三年的网站,日访问量最高20000人次,网址www.rupeng.com。本系统旧版本基于PHP、J2EE技术,由如鹏网开发者亲手操刀用.net重写新版本。系统分为前台Web界面、后台管理界面、站内搜索、监控客户端四个子系统。 大型互联网站由于访问量非常大,因此不是那些单纯用ASP.Net控件拖拽开发的开发人员能够开发的,也不是闭门造车能够造出来的,必须是在实际项目中经过无数访问者的使用、反馈、修改才能做出来的。搜房网、汽车之家等大型网站中用到的网站静态化、图片服务器分离、高性能缓存、HTML/JS压缩、CDN、CSS Sprite、负载均衡、Memcached、镜像服务器同步等问题不是那些随手写出来的所谓在线商城、电子商务系统所所能够涉及到的。 这个项目完全按照高访问量互联网站进行设计,通过这个项目,学员不仅可以在实战中巩固对前面学习的ASP.Net、ADO.Net、WinForm等知识的掌握,还可以掌握网站防黑、缓存、SEO、静态化、搜索引擎技术、AJAX等大型互联网开发中涉及到的技术。 8、.Net新技术(Windows Phone、ASP.Net MVC)(6天) 项目说明 未来是移动互联网的时代,未来将是Windows Phone、Android、iphone三足鼎立的时代,掌握了移动开发的技能的人是就业市场的抢手货。微软推出的Windows Phone平台是微软在移动互联网时代的一个重量级产品,微软对于WindowsPhone7的推广力度非常大,因此很多公司也开始进行Windows Phone7产品的研发,2011年下半年Windows Phone7开发人员的需求将会出现井喷,为了帮助学员掌握移动3G开发技术,传智播客.Net班加入了Windows Phone开发课程,采用传智播客独创的WP7Simulator教学平台,学员可以做出一个基于云计算架构的LBS系统。点击查看传智播客独创WP7Simulator教学平台。 ASP.Net MVC是微软推出的区别于ASP.Net WebForm的Web开发新技术,由于ASP.Net MVC解决了ASP.Net WebForm的很多缺点,非常适合大型、中型项目的开发,一经推出就受到了.Net开发社区的追捧,很多.Net开发人员的职位要求中都提到了MVC,可见掌握ASP.Net MVC技术必将提升自己就业的砝码。 9、就业指导(2天) 项目说明 总结以往所学知识,讲解《传智播客.Net面试、笔试宝典》,介绍简历、笔试、面试等所需的知识和技巧。

62,074

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧