操作控制表

2024-06-03

操作控制表(共2篇)

操作控制表 篇1

1 引言

树能清楚、形象地反映分类之间的层次关系。Windows窗体程序中用树形控件能较快实现对分类表的操作维护, 在Web页面中采用树形方式实现对分类表的操作维护资料不多, 实现起来复杂。但随着网页前端开发技术的发展, 尤其是jQuery的出现, 使得这一切都成为可能。在分析jQuery EasyUI插件基本属性和操作方法的基础上, 设计了通用性较强的分类数据表, 采用ASP.NET技术, 在Web页面创建分类树, 综合Web页面鼠标操作和弹出菜单DIV层使用, 添加相应事件方法, 实现了Web页面对分类表数据的操作维护。

2 分析及思路

可以把树的节点看成分类, 节点之间的关系也就反映了分类与分类之间的关系, 节点的添加、删除、修改以及位置移动形象生动地反映了对分类表的添加、删除、 修改以及变换层次关系的操作, 通过添加树的有关事件方法, 把对节点的操作映射到对分类表的操作。

jQuery EasyUI插件组中的树控件实现了在Web页面中能将分类数据以树形结构方式显示, 对树控件的复杂操作进行了封装, 提供了用户展开、折叠、拖拽、编辑和异步加载等功能, 降低了前端开发难度。

据jQuery EasyUI官方网站介绍, 树控件 (1.3.6版本) 中的每个节点都具备以下属性:

(1) id: 节点ID, 对加载远程数据很重要。

(2) text: 显示节点文本。

(3) state: 节点状态 , 'open' 或 'closed', 默认 : 'open'。如果为 'closed' 的时候, 将不自动展开该节点。

(1) checked: 表示该节点是否被选中。

(2) attributes: 被添加到节点的自定义属性。

(3) children: 一个节点数组声明了若干节点。

可依据树控件的属性、事件及方法, 设计相应的数据结构, 在Web页面中实现对分类表数据的操作维护, 主要使用id和text属性。为增强程序的通用性和易操作性, 假设分类之间的层次深度可以无限, 还要求能通过拖拽节点的方式改变层次关系。为此,(1) 要设计一个通用性较强的分类表 (表1),用一个字段(pid) 专门记录分类之间的层次关系, 这种结构能实现无限扩展; (2) Web页面加载时要对树初始化, 由于分类表的层次深度事先不清楚, 采用递归算法来初始化树是一种最佳选择, 且产生的数据要符合树控件的JSON数据格式; (3) 设置弹出菜单DIV层, 在分类树上单击鼠标右键能弹出菜单, 实现对节点的添加、删除、展开等基本操作, 还可根据用户需要扩展操作功能, 如维护分类的其他字段;(4) 添加节点的鼠标双击事件, 使节点名称 (Text值) 可以修改; (5) 通过添加拖拽有关事件方法, 改变节点之间的层次关系。Web页面操作要与服务器端对数据库的操作一致起来, 采用Ajax方式实现。

3 设计与实现

3.1 设计数据库

采用SQL Server 2008 R2数据库, 数据库名为CMS, 在数据库中建一个DocClass数据表, 字段名称和字段类型见表1,录入如图1所示的初始化数据。其中pid为“0”的记录代表一级分类, 在分类树中是一级节点。

3.2 设计界面

用VS2012新建一个网站后, 创建名为DocClass.aspx的Web窗体, 按如图2所示部署界面。

3.3 编码实现

3.3.1 前端

(1) 添加外部文件

(2) 页面布局

弹出层样式表:

(3) 构建分类树

构建分类树的方法有多种, 考虑到程序的通用性和运行效率, 采用异步加载模式, 即先创建一个空树, 然后指定一个服务器端URL, 执行检索后动态返回JSON数据来填充树并完成异步请求。本例加载分类表数据的

  • 标签的id为tt, data-options属性设置url:'g.aspx'。访问g.aspx后能获取如下JSON数据。

    (4) 鼠标右键弹出菜单, 如图3所示。

    (5) 添加下级节点

    对节点的操作可以结合使用弹出菜单来实现。鼠标在分类树上右键后弹出一个菜单, 选择不同的子菜单项执行节点操作, 如图4所示。增加下级节点的代码如下:

    (6) 添加兄弟节点

    增加兄弟节点的操作方法与增加下级节点的方法基本一致, 但在增加兄弟节点时, 要考虑一级节点 (节点层级为0)情况, 其相关代码如下:

    (7) 折叠所有节点

    (8) 展开所有节点

    (9) 折叠当前节点

    (10) 展开当前节点

    (11) 删除当前节点

    (12) 修改节点值

    按照一般操作习惯, 双击节点则可修改节点的Text值, 则可在

    • 的data-options属性中需添加如下代码:

      节点的Text值修改完毕后, 用户按回车键或转移焦点,则会触发onAfterEdit事件, 需要添加onAfterEdit事件, 将修改情况写入数据库, 如图5所示。

      (13) 修改节点详细值

      要实现对分类的详细信息修改, 则可在弹出菜单中选择“维护详细信息” , 执行modify () 函数 , 显示详细信息维护DIV界面, 如图6所示, 其代码如下:

      在弹出层单击“提交”按钮后, 客户端自动将修改数据回传至服务器端, 并根据服务器执行情况进行相应提示。

      单击弹出层“关闭”文字, 执行如下代码:

      (14) 移动节点

      图7、8显示了将“新建下级节点分类”节点通过拖拽方式移至“分类4”节点下, 从而改变分类之间的层次关系。要实现拖拽操作, 首先需要将分类表树data-options选项中的dnd值设置为true。

      3.3.2 后端

      (1) 添加使用命名空间

      (2) 声明私有变量

      (3) 产生初始化分类表树 (g.aspx)

      为减少数据库读写次数, 设计一个数据集 (ali), 将分类表的信息一次性存放其中, 能加快程序执行效率。

      (4) 编写递归函数

      (5) 添加、删除、修改等操作 (m.aspx)

      服务器端根据前端传回的参数进行对应操作, 并给出操作成功与否的提示。

      4 结语

      程序采用Visual Studio 2012 C# 编写, 所述代码均已在Windows 8.1专业版和Windows Server 2008 R2 +SP1中运行通过。

      在数据库管理系统中, 文中所讲实例是分类表操作维护的最基础方法, 可以直接使用。也可在此基础上, 增加程序运行错误处理机制, 使系统运行更为稳定; 增加身份认证机制, 使系统更为安全; 在分类表中增加字段, 满足多种需要;进一步研究树控件的属性、事件及方法的用法, 优化程序, 提高效能。

摘要:对分类表的操作维护是数据库管理应用系统的一项基本功能。通过研究jQuery EasyUI插件组的用法,采用ASP.NET技术,设计通用性较强的分类数据表,在Web页面创建分类树,综合Web页面鼠标操作和弹出菜单DIV层使用,添加相应事件方法,实现了对分类表数据的远程操作和维护。

关键词:jQuery技术,jQuery EasyUI插件,ASP.NET技术,C#语言,通用分类表,递归算法

操作控制表 篇2

班 级 :

姓 名: 学 号: 专 业: 实验完成的时间:

*********************************

一、实验目的

(1)(2)(3)(4)掌握顺序表的基本运算,熟悉对顺序表的一些基本操作和具体函数的定义。掌握顺序表的存储结构及其基本操作。

熟悉c语言程序的基本结构,掌握函数定义、调用等功能。

熟悉c语言环境的使用及程序的输入、编辑、调试和运行的全过程。

二、实验要求

(1)熟练掌握线性表的存储结构及其基本操作。

(2)理解所给出的算法,掌握顺序表在实际中的应用。

(3)将上机程序调试通过,并能独立完成一至两个拓展题目。

三、实验内容

实现顺序表上的插入、删除等操作。调试程序并对相应的输出作出分析;修改输入数据,预期输出并验证输出的结果。加深对有关算法的理解。

(1)主要内容:

#define MAXSIZE 100 /*宏定义*/ //#define OVERFLOW-2 #include “stdio.h” /*包含输入输出文件*/

typedef int data;typedef struct /*定义顺序表的结构*/ {data vec[MAXSIZE];/*顺序表数据成员所占据的存储空间*/ int last;/*顺序表中最后一个元素在数组中的下标(或向量中的位置)从0开始*/ }sequenlist;int insert(L,i,x)/*在顺序表的第i个元素之前插入一个新元素x*/ sequenlist *L;int i;data x;

{ int j;if(((*L).last)>=MAXSIZE-1){printf(“the list is overflow!n”);return(0);/*溢出判断*/ } else if((i<1)||(i>(*L).last+1)){printf(“position is not correct!n”);return(0);/*插入位置不正确*/ } else {for(j=(*L).last;j>=i-1;j--)/*后移元素*/(*L).vec[j+1]=(*L).vec[j];(*L).vec[i-1]=x;/*插入新元素*/(*L).last=(*L).last+1;/*修改last的值*/ } return(1);} void DELETET(L,i)sequenlist *L;int i;{ int j;if(i<1||(i>L->last+2))

printf(“删除的位置错误n”);else {

for(j=i;j<=(*L).last;j++)

(*L).vec[j-1]=(*L).vec[j];

(*L).last--;

} } void listprint(sequenlist *L)/*输出线性表*/ { int i;for(i=0;i<=(*L).last;i++)printf(“i,e=%d,%dn”,i,L->vec[i]);} main(){ sequenlist sl={{1,2,3,4,5,6,7,8,9,10},9};//直接给顺序表赋初值 sequenlist *L;/*定义一个指向顺序表类型的指针变量*/ int i,j,x;//elemtype e;

L=&sl;/*给指针变量赋值*/ printf(“请输入你插入的位置和数n”);scanf(“%d,%d”,&i,&x);printf(“这个插入的位置: %d n插入的数:%dn”,i,x);insert(L,i,x);listprint(L);printf(“请输入删除的位置:”);scanf(“%d”,&j);DELETET(L,j);listprint(L);}(2)预习思考题

(1)定义一个定位函数locate(L,x),具有元素检索的功能。当顺序表中存在一个值为x的数据元素时,返回第一次找到的数据元素的位序,否则,给出一个值,表示值为x的元素不存在。在主程序中调用该函数,分析操作结果。算法如下

int locat(L,x)/* x由主函数输入并接受locat的返回值 */ sequenlist *L;int x;{ int i;for(i=0;i<=(*L).last;i++)

if((*L).vec[i]==x)

return(i+1);/*如果存在x则返回x的位置*/ return 0;/*否则返回0 */ }

说明:主函数输入定位值X由函数locat(L,x)接收完成定位功能后返回x的位置,若X不存在则返回0,主函数接受返回值,若返回值不等于0则调用listprint(L)函数输出结果,否则输出X不在线性表中

(2)定义一个逆置函数diverse(L),把顺序表进行逆置。在主程序中调用该函数,分析操作结果。void diverse(L)sequenlist *L;{

int i,j,n,k;

n=(*L).last;

j=(*L).last/2;

for(i=0;i<=j;i++)

{ k=(*L).vec[i];

(*L).vec[i]=(*L).vec[n-i];

(*L).vec[n-i]=k;

} } 运行程序前

运行程序后

说明:主函数只需调用diverse(L)完成逆置功能,并调用listprint(L)函数输出结果。(3)定义一个函数delsame(L),把顺序表中重复的元素删除掉,只保留一个。在主程序中调用该函数,分析操作结果

void delsame(sequenlist *L){ int i = 0, j, t;for(i = 0;i <= L->last;i++){

for(t = i+1;t<= L->last;t++)

{

if(L->vec[i] == L->vec[t])

{

for(j = t;j<= L->last;j++)

L->vec[j-1] = L->vec[j];

L->last--;

}

} } } 运行程序前

运行程序后

说明:主函数只需调用delsame(L),把顺序表中重复的元素删除掉,只保留一个,并调用listprint(L)函数输出结果。

四、算法设计与编码

1.本实验用到的理论知识

顺序表的数据结构的定义,C语言中循环语句,if条件语句,函数定义、调用等相关知识。

2.算法概要设计 具体有以下函数:

(1)insert(L,i,x)在顺序表的第i个元素之前插入一个新元素x.(2)deletet(L,i)删除顺序表的第i个元素。(3)listprint(L)输出顺序表

(4)locate(L,x)定位函数,具有元素检索的功能(5)diverse(L)逆置函数,把顺序表进行逆置

(6)delsame(L), 把顺序表中重复的元素删除掉,只保留一个 主函数调用以上函数完成相关功能。3.运行与测试

(1)在调试程序的过程中遇到什么问题,是如何解决的?

在定位时出现多次返回0,在单步调试后,吧return 0 放到if语句外。

(2)程序运行的结果如何?

五、总结和心得

上一篇:金属/非金属氧化物下一篇:学生语文兴趣培养