还有2个月毕业,事情蛮多的,因为自己的项目里经常出现无限极分类 为了方便就写了这个插件

http://39327.42la.com.cn/example/Sort.doc.htm

海子 Silvester.Hai@gmail.com [2012-4-3 15:02:30]

无限极分类下拉列表选择

HTML:
 
<div id="#sort"></div>
<a href="javascript:;" onclick="getpath1()">获取分类信息</a>

 

javascript:
<script type="text/javascript">
                     var n = $("#sort").Sorts({
                         startid: 0,
                         url: "/JsonSort.aspx"
                     });
                     //获取分类地址
                     function getpath1() {
                         alert(n.createpath());
                     }
</script>

 

参数说明:

startid 参数
分类选择时的开始ID,提供选择的根节点,默认值为:0
url 参数
指请求的地址 【/Sort/GetSort/】 get 参数 为 id=[num] 例子:【http://localhost:11251/Sort/GetSort/?id=12059】
返回json格式:
[ {"id":1,"type":"产品","parentid":0,"path":"0"},
{"id":2,"type":"企业","parentid":0,"path":"0"},
{"id":7,"type":"资讯","parentid":0,"path":"0"},
{"id":33,"type":"行业分类","parentid":0,"path":"0"}]

 

everyrequest:
每次选择都触发一次请求 即使本地变量里有值 默认值为 false
lChar:
区分每一个类切割的字符 默认值:“|”
sChar:
区分每一个类的每个节点切割的字符 默认值:“,”
forpath:
页面初始化时要加载的选择 默认值: null
posted @ 2012-04-04 19:18 Silvester 阅读(27) 评论(0) 编辑

      线性表包含 数据域和指针域 其中,data存储数据本身的值,next存储后继元素的地址 下面的图表示的是一个数据节点

单链表的结构示意图(包括空的单链表):

 

 

 

  1. 单链表的节点类:
    template<class T>
    class Node
    {
    public:
    T data;//数据
    Node<T> *next;//next指针
    Node()
    {
    this->next=NULL;//构造空的节点
    }
    Node(T data,Node<T> *next=NULL)//构造一个节点
    {
    this->data=data;
    this->next=next;
    }
    };
  2. 单链表类声明如下:
    #include<iostream>
    #include "Node.h" //单链表节点类
    template<class T>
    class SinglyLinkedList //单链表类
    {
    public:
    Node<T> *head;//单链表的头指针。
    SinglyLinkedList();//构造空的单链表。
    SinglyLinkedList(T value[], int n);//构造由指定的数组提供的单链表
    ~SinglyLinkedList();//析构
    bool isEmpty();//判断是否为空。
    int length();//获取长度
    Node<T>* getNode(int i);//返回第i(i>=0)个节点指针
    T get(int i);//返回第i个元素
    bool set(int i,T x);//设置第i个元素为x
    template<class T> friend std::ostream& operator<<(std::ostream& out,SinglyLinkedList<T> &list);
    Node<T>* insert(int i,T x);//插入第I个节点并返回第i个节点的指针
    bool remove(int i,T& old);//删除第i个元素,将删除的元素存放到old
    void clear();//清空单链表
    void concat(SinglyLinkedList<T> &list);//将List链接在当前单链表之后
    };
  3. 单链表部分如构造空的链表对象,析构,判断为空的实现,没有要讲的算法,实现如下:
    template<class T>
    SinglyLinkedList<T>::SinglyLinkedList()//构造空的单链表
    {
    this->head=NULL;
    }
    template<class T>
    SinglyLinkedList<T>::~SinglyLinkedList()//析构
    {
    clear();
    }
    template<class T>
    bool SinglyLinkedList<T>::isEmpty()//判断链表是否为空
    {
    return this->head==NULL;
    }
  4. 单链表的遍历操作,遍历单链表是指从第一个节点开始访问,沿着节点的Next可依次访问单链表中的各个节点,并且各个节点只被访问一次。实现的单链表遍历的基本算法如下:
    int j=0;
    Node<T> *p=head;
    while(p!=NULL&&j<i)
    {
    j++;
    p=p->next;
    }

    单链表的length(),get(),set(),clear()和输出等操作都基于以上算法。

    template<class T>
    int SinglyLinkedList<T>::length()
    {
    int i=0;
    Node<T> *p=head;//创建一个用于遍的变量
    while(p!=NULL)
    {
    i++;
    std::cout<<p->data;
    p=p->next;
    }
    return i;
    }
    template<class T>
    Node<T>* SinglyLinkedList<T>::getNode(int i)
    {
    if(i<0)
    return NULL;
    int j=0;
    Node<T> *p=head;
    while(p!=NULL&&j<i)
    {
    j++;
    p=p->next;
    }
    return p;
    }
    template<class T>
    T SinglyLinkedList<T>::get(int i)
    {
    Node<T> *p=getNode(i);
    if(p!=NULL)
    return p->data;
    T d;
    return d;
    //throw "单链表为空或者参数指定的元素不存在";
    }
    template<class T>
    bool SinglyLinkedList<T>::set(int i,T x)
    {
    Node<T> *p=getNode(i);
    if(p!=NULL)
    {
    p->data=x;
    return true;
    }
    return false;
    }
    template<class T>
    std::ostream& operator<<(std::ostream& out,SinglyLinkedList<T> &list)
    {
    Node<T> *p=list.head;
    out<<"(";
    while(p!=NULL)
    {
    out<<p->data;
    p=p->next;
    if(p!=NULL)
    out<<",";
    }
    out<<")\n";
    return out;
    }
    template<class T>
    void SinglyLinkedList<T>::clear()
    {
    Node<T> *p=head;
    while(p!=NULL)
    {
    Node<T> *q=p;
    p=p->next;
    delete q;
    }
    head=NULL;
    }

     

  5. 单链表的插入操作,单链表不像顺序表,对与表的插入和删除很简单:
    1. 空表插入/头插入
      Node<T> *q=NULL;
      if(head==NULL||i<0)//头插入(单链表为空或者)
      {
      q=new Node<T>(x,head);
      head=q;
      }
    2. 中间插入/尾插入
      p->next=new Node<T>(x,p->next);
    单链表insert()以及参数构造函数:
    template<class T>
    Node<T>* SinglyLinkedList<T>::insert(int i,T x)
    {
    Node<T> *q=NULL;
    if(head==NULL||i<0)//头插入(单链表为空或者)
    {
    q=new Node<T>(x,head);
    head=q;
    }
    else
    {
    int j=0;
    Node<T> *p=head;
    while(p->next!=NULL&&j<i-1)
    {
    j++;
    p=p->next;
    }
    q=new Node<T>(x,p->next);
    p->next=q;
    }
    return q;
    }

    template<class T>
    SinglyLinkedList<T>::SinglyLinkedList(T table[],int n)
    {
    head=NULL;
    if(n>0)
    {
    head=new Node<T>(table[0]);//创建节点
    Node<T> *rear=head;//创建一个指向头节点的指针
    int i=1;
    while(i<n)
    {
    rear->next=new Node<T>(table[i++]);
    rear=rear->next;
    }
    }
    }
  6. 单链表的删除操作也分两类:
    1. 头删除
      Node<T> *q=head;
      head=head->next;
      delete q;
    2. 中间/尾删除
      Node<T> *q=p->next;
      if(q!=NULL)//判断删除节点
      {
      p->next=q->next;//让删除节点的前驱Next指针下一节点
      delete q;//删除该节点
      }
    单链表的删除函数remove()实现:
    template<class T>
    bool SinglyLinkedList<T>::remove(int i,T &old)
    {
    if(i<0||head==NULL)
    {
    Node<T> *q=head;
    old=q->data;
    head=head->next;
    delete q;
    }
    else
    {
    Node<T> *p=getNode(i-1);//获取删除节点的前驱
    if(p!=NULL&&p->next!=NULL)//判断删除节点和删除节点是否为空
    {
    Node<T> *q=p->next;//新建一个节点指针,将删除接点复制过去
    old=q->data;
    p->next=q->next;//让删除节点的前驱Next指针下一节点
    delete q;//删除该节点
    return true;
    }
    }
    return false;
    }
  7. 单链表的链接函数:concat()
    template<class T>
    void SinglyLinkedList<T>::concat(SinglyLinkedList<T> &list)
    {
    if(this->head==NULL)
    {
    this->head=list->head;
    }
    else
    {
    Node<T> *p=head;
    while(p->next!=NULL)
    {
    p=p->next;
    }
    p=list->head;
    }
    list->head=NULL;//设置单链表为空,否则运行出错
    }

以上对C++单链表的分析 添加一个学生结构和一个测试函数:

Student.h

struct Student
{
char number[10]; //学号
char name[20]; //姓名
double score; //得分
friend std::ostream& operator<<(std::ostream& out,Student &stu)
{
out<<"学号:"<<stu.number<<" 姓名:"<<stu.name<<" 得分:"<<stu.score;
return out;
}
};

 主函数:

#include<iostream>
#include "SinglyLinkedList.h"
#include "Student.h"
void _TestToSinglyLinkedList()
{
Student data[]={{"090313018","Silvester",45.4},{"090313018","捐赠",45.4},{"090313018","版主",45.6}};
SinglyLinkedList<Student> m(data,3);
Student t;
std::cout<<(m.isEmpty()?"不为空!":"该链表为空!")<<std::endl;
std::cout<<"长度:"<<m.length()<<std::endl;
std::cout<<"移除2个学生"<<m.remove(1,t)<<std::endl;
std::cout<<"t:"<<t<<std::endl;
std::cout<<"2个学生信息"<<m.getNode(1)<<std::endl;
Student s={"415646","fdsfs",453.1};
std::cout<<m.get(1)<<m.set(1,s)<<m.insert(5,s)<<std::endl;
}
void main()
{
_TestToSinglyLinkedList();
system("pause");
}

 提供源代码下载地址:http://39327.42la.com.cn/DataFile/Code/C++/SinglyLinkedList.zip

posted @ 2012-02-01 23:07 Silvester 阅读(1063) 评论(1) 编辑

    第一篇对数据机构里的顺序表C++版的代码进行复习,顺序表对数据的操作添加,删除,插入等操作。

比较懒,其实里面也没有什么要讲的,代码要比文字容易懂多了。呵呵,主要用于自己学习

  1. 类模板声明如下:
    #include<iostream.h>
    template<class T>
    class SeqList
    {
    private:
    T *element;//顺序表
    int size;//顺序表的容量
    int len;//数组的大小
    public:
    SeqList(int Size=64);//构造函数
    SeqList(T value[],int n);//构造函数
    ~SeqList();
    bool isEmpty();//方法判断顺序表是否为空
    int length();//返回顺序表的长度
    T get(int i);//返回顺序表相应位置的数据
    bool set(int i,T x);
    friend ostream& operator<<(ostream& out,SeqList<T> &list);//友元函数,对输出操作符<< 进行操作符重载
    void insert(int i,T x);//在相应位置插入数据
    void insert(T x);//在顺序表末尾插入数据
    bool remove(int i, T& old);//移除相应位置的数据
    void clear();//清空顺序表
    };
  2. 顺序表模板类有两个构造函数,以及相应的析构函数,构造函数SeqList(intsize):
    template <class T>
    SeqList<T>::SeqList(int size)//构造函数
    {
    this->size=size<64?64:size;//三目运算表达式.
    this->element=new T[this->size];
    this->len=0;
    }
    template<class T>
    SeqList<T>::SeqList(T value[],int n)//构造函数提供数据指定数组的元素的格式
    {
    if(n>0)
    {
    this->element=new T[2*n];//申请一个双倍的空间;
    this->size=2*n;//
    for(int i=0;i<n;i++)
    {
    this->element[i]=value[i];//复制数据
    this->len=n;//更改长度
    }
    }
    }

    template<class T>
    SeqList<T>::~SeqList()
    {
    delete[] this->element;
    }
  3. 以及公共的操作方法:
    template<class T>
    bool SeqList<T>::isEmpty()//判断链表是否为空
    {
    return len==0;//
    }

    template<class T>
    int SeqList<T>::length()
    {
    return len;
    }

    template<class T>
    T SeqList<T>::get(int i)
    {
    if(i>=0&&i<len)
    return element[i];
    throw "参数无效";
    }
    template<class T>
    bool SeqList<T>::set(int i,T x)
    {
    if(i>=0&&i<len)
    {
    element[i]=x;
    return true;
    }
    return false;
    }
    template<class T>
    ostream& operator<<(ostream& out,SeqList<T> &list)//友元函数
    {
    out<<"(";
    if(list.len>0)
    {
    out<<list.element[0];
    for(int i=1;i<list.len;i++)
    {
    out<<","<<list.element[i];
    }
    }
    out<<")\n";
    return out;
    }
    template<class T>
    void SeqList<T>::insert(int i,T x)//在链表的I的位置插入元素T
    {
    if(len==size)//假如数据数组已经满
    {
    T *temp=element;
    element=new T[len*2];
    for(int i=0;i<size;i++)
    {
    element[i]=temp[i];
    size*=2;
    }
    }
    if(i<0) i=0;
    if(i>len) i=len;
    for(int j=len-1;j>=i;j++)//元素往后移动
    element[j+1]=element[j];
    element[i]=x;
    len++;
    }
    template<class T>
    void SeqList<T>::insert(T x)
    {
    insert(len,x);
    }
    template<class T>
    bool SeqList<T>::remove(int i, T& old)
    {
    if(i<len&&i>=0&&len>0)
    {
    old=element[i];
    for(int j=i;j<len;j++)//元素向前移动
    element[j]=element[j+1];
    len--;
    return true;
    }
    return false;
    }

    template<class T>
    void SeqList<T>::clear()
    {
    len=0;
    }
  4. main函数使用:
    #include "SeqList.h"
    void main()
    {
    int Data[5];
    for(int i=0;i<5;i++)
    {
    Data[i]=i*89;
    }
    SeqList<int> m(Data,5);
    cout<<"顺序表数据:"<<m<<"\n顺序表长度:"<<m.length()<<"\n\n返回顺序表3位置的元素"<<m.get(3)<<endl;
    }
  5. 提供下载地址:http://39327.42la.com.cn/DataFile/Code/C++/Application.zip
posted @ 2012-01-30 21:55 Silvester 阅读(225) 评论(0) 编辑

 

,大家好!我是新人第一次在博客园里发文章,技术含量不是很高.希望大家提供宝贵的意见.谢谢!

 

运行方式:

 

1.              服务器接受请求 后台一般处理程序,将音乐文件夹里, 音乐信息转换问Json字符串发送到客户端;

 

2.              客户端将字符串转换为Json对象,将其绑定到页面上;

 

3.              借用雅虎的播放器插件,将歌曲播放出来.

 

目录信息:

 

转换为Json对象格式:

 

  [{
Album:
"Sungha Jung - Perfect Blue",
MusicList:[
{ Title :
" Superstition",
Songe :
"Sungha Jung",Length:"10.41MB",
Links:
"Music/Sungha_Jung/Sungha Jung - Perfect Blue/07. Superstition.mp3"
},
{
Title :
" I Believe I Can Fly",
Songe :
"Sungha Jung",Length:"9.35MB",
Links:
"Music/Sungha_Jung/Sungha Jung - Perfect Blue/14. I Believe I Can Fly.mp3"
}
]
}]

 

 

后台一般处理程序:

 

Code:

privatestring JsonData()
{
DirectoryInfo MusicDatas
=new DirectoryInfo(HttpContext.Current.Server.MapPath("~/Music/Sungha_Jung/"));//歌曲在WEB根目录下/Music/Sungha_Jung/多个文件夹.
StringBuilder Jsons =new StringBuilder();//申请一个StringBuilder.
Jsons.Append("[");
foreach (DirectoryInfo File in MusicDatas.GetFileSystemInfos("*"))//遍历文件夹
{
Jsons.Append(
"{Album:\""+ File.Name +"\",MusicList:[");//专辑名称就是文件夹名
DirectoryInfo FileChild =new DirectoryInfo(File.FullName);
foreach (FileInfo Music in FileChild.GetFiles("*.mp3"))//遍历所有的MP3文件
{
string[] Ms = Music.Name.ToString().Split('.');//01. Happy New Year.mp3,歌曲名的格式,
double MuLength = Math.Round((Music.Length) / (1048576.0), 2);//歌曲大小转换到MB,并保留2位小数
string MapPaths = Music.Name.ToString();//歌曲的地址
Jsons.Append("{ Title :\""+ Ms[1] +"\", Songe :\"Sungha Jung\",Length:\""+ MuLength +"MB\",Links:\"Music/Sungha_Jung/"+ File.Name +"/"+ MapPaths +"\"},");
//拼接歌曲信息
}
Jsons.Remove(Jsons.Length
-1, 1);//去的最后一个","
Jsons.Append("]},");
}
Jsons.Remove(Jsons.Length
-1, 1);
Jsons.Append(
"]");
return Jsons.ToString();//返回字符串
}

 

客户端javascript代码:

 

客户端需要引用的文件,

<link rel="shortcut icon" href="http://images.cnblogs.com/favicon.ico"/> 
<link href="http://www.cnblogs.com/Style/index.css" rel="stylesheet" type="text/css"/>
<link href="http://www.cnblogs.com/MusicWeb/StyleSheet/Music.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="http://www.cnblogs.com/Javascript/jquery-1.6.min.js"></script>
<script type="text/javascript" src="http://www.cnblogs.com/Javascript/player-beta.js"></script>/*雅虎播放器插件*/
<script type="text/javascript">
$(document).ready(function () { CreateTable(); });
function CreateTable() {
var HandlerAssembly
="http://www.cnblogs.com/Sungha Jung/HandlerAssembly/Sungha_Jung.ashx";//后台处理程序地址
var Mus =null;//全局临时数据库;
$.ajax({
type:
'POST',
url: HandlerAssembly,
data:
'',
success: function (Datas) {
Mus
= eval("("+Datas+")");//字符串转换问Json对象
var Html ='';
for (var i =0; i < Mus.length; i++) {//遍历所有专辑
Html +='<tr><td colspan="4" style="font-size:20px;color:#000;background:#DB5600">'+ Mus[i].Album +'</td></tr>';
for (var m =0; m < Mus[i].MusicList.length; m++) {//遍历所有专辑下得歌曲
var Links ='http://39327.42la.com.cn/'+ Mus[i].MusicList[m].Links;//歌曲的链接
Html +='<tr><td>'+ (m +1) +'</td><td class="left"><a href="'+ Links +'">'+ Mus[i].MusicList[m].Title +'</a></td>';
Html
+='<td>'+ Mus[i].MusicList[m].Songe +'</td><td>'+ Mus[i].MusicList[m].Length +'</td></tr>';
//拼接歌曲信息
}
}
$(
"#content table").html(Html);//添加到页面
$("#content table tbody tr").hover(function () { $(this).css("background", "#ffc") }, function () { $(this).css("background", "#fff") })
//移动样式
}
})
}
</script>

 

Css文件

#content table
{
width
:100%;
text-align
:center;
border-left
:solid 1px #000;
border-bottom
:solid 1px #000;
background
:#FFF;
cursor
:pointer;
}
#content table thead
{
background
: #DB5600;
color
:Black;}
#content table tr td
{
border
:solid 1px #000;
padding
:1px;
border-left
:none;
border-bottom
:none;
}
#content table tr td.left
{
text-align
:left;
padding-left
:15px;
}

 

 

 

Demo:地址

 

http://39327.42la.com.cn/Sungha%20Jung.html

 



Demo:下载地址   http://u.115.com/file/dn3wqf7q#Sungha_Jung.zip

歌曲是我网站上得! 你的自己改地址.

 


posted @ 2011-09-08 11:59 Silvester 阅读(1700) 评论(9) 编辑