当前位置:文档之家› Wabacus框架数据编辑的非正式文档

Wabacus框架数据编辑的非正式文档

Wabacus框架数据编辑的非正式文档
Wabacus框架数据编辑的非正式文档

Wabacus编辑篇非正式文档

作者:星星

二○一○年十一月十二日

1.1 配置规则

(一)、更新语句配置规则

类型更新字段配置规则条件子句配置规则

字段数据可以来自

1、常量、

2、hidden=0或hidden=3的(配置了updatecol=”其它列”的

除外。)*2

3、被别的hidden=0或hidden=3的通过updatecol属性引用

的hidden=1或hidden=2的。*2

4、通过定义的变量*3

5、uuid{}或sequence{序列名} *4

只有在oracle数据库中配置的插入语

句可能会配置where条件子句,其它

任何数据库都不需要在插入数据库的

SQL语句中配置条件子句。*5

字段数据来自类型与左侧“更新字段

配置规则”相同。

对于EditableDetailReportType或

EditableFormReportType两种报表类

型,保存成功后,如果想以修改模式

显示当前添加的记录,则需要配置

标签的condition属性,配置

规则如*7所述,如果通过oninsert配

置了后置js动作,且跳转到了别的页

面,则不需配置它。

后置 字段数据可以来自

1、常量、

2、hidden=0或hidden=3的(配置了updatecol=”其它列”的

除外。)

3、hidden=1或hidden=2的。

4、通过定义的变量

5、uuid{}或sequence{序列名}(一般在update更新字段中用这些

数据没什么意义)

字段数据来自类型与左侧“更新字段

配置规则”相同。

无字段数据可以来自

1、常量、

2、hidden=0或hidden=3的(配

置了updatecol=”其它列”的除

外。)

3、hidden=1或hidden=2的。

注意,不能用通过

定义的变量

说明:

*1:所有数据(包括更新或插入语句的更新字段数据以及where条件中的数据等)均不能从{non-value}、{non-fromdb}、{sequence}等类型的中获取,因为它们跟数据库无关。

*2、如果一个显示的是一个字段的值,但更新时是更新另一个字段的值(比如一个学生表中存放一班级编号的字段,显示时是显示根据班级编号从班级表中查到的班级名称,但更新时是要更新学生表的班级编号字段),此时可以为此配置一updatecol属性,让它指向定义要更新的字段的(即从学生表中获取的班级编号字段数据的),通过@{}方式进行引用,要更新的字段

的此时必须要定义成hidden=”1”或hidden=”2”的形式。如果是指向自己,则updatecol属性相当

于没配置。

如果一个(比如上面的显示班级名称的)通过updatecol属性指向了另一个,

则当前的数据不能出现在更新字段以及where条件子句中,被它引用的可以出现在任何地

方。

对于hidden=0或hidden=3的列,也只有其property或其updatecol对应的property属性出

现在update或insert更新子句中,在修改或新增时才会显示输入框,而没有出现在其中的列不会显示

输入框,尽管它可能出现在where子句中。而且如果只出现在update子句中,没有出现在insert子句

中,则只有更新时会显示输入框,插入时不会显示输入框,反之亦然。

对于hidden=1或hidden=2的列,且没有被其它hidden=0或hidden=3的列通过updatecol引用,

则只能出现在update的更新子句中和所有where子句中,但永远不会为它显示输入框,如果出现在在update的更新子句中,则只会将刚取出的原始值传进去。

*3、更新的数据来源除了各个定义的各个列。还可以通过在

中定义的变量。

变量有如下几种类型:

序列,定义格式为,这种情况只支持那些支持

序列的数据库,比如oracle。

uuid,定义格式为,框架会自动为每次插入或更新生成一

个全球唯一的uuid做为当前变量值。

其它表的字段数据,定义格式为

表 where ...”/>,这里多出一个变量类型,在取数据和将它写入其它字段时,都会用到此变量类型。所

以取数据的字段类型要与用到此数据的字段类型要一致,都要与配置的变量类型相符。,这里的where

条件子句的数据来源也有如下几种:

1)、常量、

2)、hidden=0或hidden=3的(配置了updatecol=”其它列”的除外。)

3)、hidden=1或hidden=2的。

4)、通过定义的变量,不过如果要用到其它变量,则须定义在所使用变量的后

面。否则取不到。

之所以要将uuid或sequence定义成变量,而不是直接写在插入数据的SQL语句中,是因为有的

自动生成的主键值不仅要做为一个表的主键,还要做为另外一个表的外键,如果直接写在插入第一个

表的语句中,第二个表想用它做为外键无法取到。所以可以定义成一个变量,这样在执行所有插入SQL

语句前,会先生成好变量的值,比如生成好一个UUID或从相应的sequence对象中取好一个数据,这

样要用到它的地方,都可以使用,比如第一个表将它插入到主键字段,第二个表将它更新到外键字段。

不管是哪种类型的变量,在更新数据的SQL语句中使用它们时,都是通过#{变量名}进行引用。

例如:

update tbl_class(@{classno},@{classname},@{description},clob2=#{desc}) where id=@{ID} and uuid=@{UUID};

update tbl_student(classno=@{classno}) where classno=@{classno};

]]>

into

insert

tbl_class(ID=#{id},UUID=#{uuid},@{classno},@{classname},@{studentcount}, @{teach},@{description}) where id=#{id} and uuid=#{uuid};

]]>

上面是一个oracle数据库的插入语句,且要插入大字段数据,所以在插入语句中出现where子句。而且where子句中要用到刚刚插入的ID和UUID做为条件,且它们都是自动生成的,不是从页面上获取的,所以必须定义成变量的形式后面才能取到。

如果是用oracle10g的jdbc驱动,则可以不在insert语句中加上where子句,配置如下所示:

into

tbl_class(ID=sequence{seq_test_id},UUID=

insert

uuid{},@{classno},@{classname},@{studentcount},@{teach},@{description}) where id=#{id} and uuid=#{uuid};

]]>

可以看到,不用定义变量了,ID字段值和UUID字段值直接配置成sequence{seq_test_id}和uuid{}即可。因为后面不需用到它们。

如果要用到其它表的某个字段数据,则必须定义成变量,不能在SQL语句中直接写xx字段=foreign{select ...}。而必须像上面第一个一样,先定义一个变量,从别的表中取好数据,在更新字段中直接使用此变量。

*4、对于自动生成的ID,如果用UUID或sequence,则可以在插入时直接写成字段名=sequence{序列名}或字段名=uuid{}即可。当然如果这个自动生成的ID还需要本SQL语句的多个地方,或其它SQL 语句中用到,则必须定义成变量,这一块上面已有介绍。

上面介绍了两种自动生成ID的方式,对于有的数据库的自动增长的ID,比如sqlserver,mysql,则更简单,只要在插入数据的SQL语句中不在更新字段中插入此字段即可,这样插入时,此字段就不会从JA V A端插值进去,而是由数据库自动增长生成。

*5、对于oracle数据库的大字段的配置的添加记录的SQL语句,如果其中出现Clob、

Blob字段,则有两种解决办法:

1)、不管是使用哪个版本,都使用oracle10g的驱动,即大小为1.884KB的ojdbc14.jar包。,

这样大字段跟普通字段一样,配置没任何特殊之处,不需在插入语句中配置where子句。

2)、如果驱动不是上面的驱动,而新增数据的SQL语句,即insert语句中有clob、blob字段,

则需要在SQL语句中跟上where短语,和中where子句配置方式完全一样,条件

数据来源与左侧“更新字段配置规则”相同。

*6、在where条件子句中,如果某个条件是通过like进行匹配,即字段名 like %@{property}%

的形式进行配置,此时前后%与@{property}之间不能有空格。

下面示例两个数据库类型比较复杂查询条件子句的配置:

sqlserver:

delete from tbl_student where sno like %@{sno}% and DATEDIFF(d, birthday,

@{birthday}) = 0;

oracle:

delete from tbl_student where sno like %@{sno}% and

to_char(birthday,'yyyy-mm-dd')=to_char(to_date(@{birthday},'mm/dd/yyyy

HH24:MI:SS'),'yyyy-mm-dd');

*7、对于EditableDetailReportType、EditableFormReportType两种报表类型,添加成功后,默认是

跳转到进入添加页面前的页面中。如果想改变成:

1)、跳转到以update形式显示当前新添加记录的页面,则需要配置的condition属性,在

此如何为当前报表的查询条件设置新添加的数据,以便新页面能显示新添加的记录。

例如,某个可编辑细览报表或Form报表,部分配置如下所示:

into

tbl_student;

insert

因为要确保跳转到新页面后能显示新添加的报表数据,需要将name为txtno的查询条件赋值为新

添加记录的sno列的数据,所以将的condition属性配置为txtno=@{sno},等号前面是要赋值

的name属性,等号后面是要用哪个列的数据为它赋值,配置相应列对应的property,并用@{}括住。

如果在新页面要显示当前新添加的数据时,要给多个查询条件赋值才能取到新添加的数据,则用

逗号分隔它们。如果要赋的值没有用@{}括住,则说明是常量。

如果在显示新添加数据时,某个查询条件的值只要保持刚进入添加页面的原样,不需为它赋新值,

则不用在condition属性中配置它。

因为在添加数据时,无法取到自动增长ID、sequence、uuid等数据,也不能取到没提供输入框的

的列数据,所以查询条件不能以这些列的数据做为查询条件。

2)、跳转到一其它页面,比如跳转到其它报表或表单,而不是进入以前的表单中。则通过配置

的oninsert事件,在oninsert配置的javascript函数中进行跳转,并阻止老报表的加载,提高

性能。即配置为如下模式:

tbl_student;

insert

into

在formpage1OnInsert函数中利用window.location.href或者refreshData()进行跳转。

2、添加和修改的客户端校验方法要另外专门为每个配置了客户端校验的报表动态生成,且不能

放在addDataForListReportType()等方法中,这些方法是所有可编辑报表共用,而校验方法是每个报表

都有自己的。在点击保存时,先调用自动生成的校验方法,校验通过后再调用

addDataForListReportType()等方法。

(二)配置回调JS函数

中,可以配置onupdate属性,配置的值为一javascript函数名。当保存完修改后,框架就

会回调此函数。用户在实现此函数时,可通过全局变量WX_UPDATE_ALLDATA获取到当前保存的

所有数据。

另还,还可以指定执行回调函数时,是否需要中止报表页面的加载,指定方式为javascipt函数名后跟

上“|true或false”,true表示中止,false表示不中止,这也是默认情况。

一般情况下,如果回调函数是执行页面跳转,则可以指定为true,即中止掉更新操作后加载页面进行

显示,因为页面都要跳转了,没必要加载当前报表页面,否则显示效果不好且影响性能。

如果回调函数只是完成一个其它操作,不跳离当前报表页面,则指定为false,即不中止当前报表页面

的显示。例如

同样有一个oninsert属性,用于配置完成插入动作后执行的js函数。

有一个ondelete属性,用于配置完成删除动作后执行的js函数。

这两个属性的配置方式与onupdate完全相同,也可以指定是否中止当前报表页面的显示。

1.2 类型映射关系

1、日期类型

Wabacus类型数据库类型默认格式JA V A类型

date date(yyyy-mm-dd)

yyyy-MM-dd

java.util.Date time time(HH:MM:SS)

HH:mm:ss

timestamp timestamp yyyy-MM-dd HH:mm:ss

cdate date yyyy-MM-dd

java.util.Calendar ctime time HH:mm:ss.SS(精确到毫秒)

ctimestamp timestamp yyyy-MM-dd HH:mm:ss.SS

2、其它类型

wabacus类型数据库类型JA V A类型

int integer(4字节) Integer

long bigint(8字节) Long

short smallint(2字节) Short

byte tinyint(1字节) Byte

float float(4字节) Float

double double(8字节) Double

bigdecimal numeric java.math.BigDecimal

varchar char/varchar String

boolean bit Boolean

clob Clob String

blob Blob byte[]

数据库类型中,这里只列出标准类型,对于特定数据库类型的特定字段类型,可以从上面找到相应的字段类型进行配置,比如mysql的text、mediumtext、longtext三种类型都对应上面的clob类型。

说明:

1、如果某个输入框日期的输入模式不是上面的默认格式,则配置类型时,需要配置为“类型名{格式}”,比如date{MM/dd/yyyy}、time{HH:mm:ss.SS}等等。比如、等等。

在只读的报表中,如果当前列是显示日期,且要支持列过滤,则也要考虑给它指定日期类型的模式,因为在过滤时,也算是日期输入的一种方式,所以如果当前列的日期显示模式不是默认模式,则也要指定。

在类型中指定的模式,也是显示的默认模式,如果没有配置格式化方法,则用这里指定的模式进行显示。

上面在大括号中指定的格式必须是java.text.SimpleDateFormate类能识别的pattern,因为在将字符串转换为日期类型时,就是通过此类的parse方法完成,所以指定的模式要它能认识。

2、对于这几种类型的数字:int、long、float、double,如果输入时希望允许以某种模式进行输入,比如对于浮点数,允许用户输入32,532,574.4735这种格式,则也可以在配置类型时通过{模式}来指定输入的模式。比如double{“#,###0.00”}。注意,配置的模式必须是java.text.DecimalFormat类能识别的,因为在将字符串与实际数字相互转换时需要用到这个类的parse()方法。

注意:

1.3 格式化配置规则

1、的format属性配置规则

1)、可以配置一个或多个格式化方法,配置规则为:方法1名(参数1,参数2,......);方法2名(参数1,参数2,......);。它们会依次对当前列数据进行格式化,最后返回的结果是所有格式化方法格式化后的结果。

2)、每个参数的配置规则为:[类型]参数值,其中类型为上面列出的所有wabacus类型,如果没有配置,则做为varchar,即String类型处理。如果配置的“[类型]”不是个合法类型,则会报错,

如果是String类型,参数值为常量,则必须用’’号(即单引号)括住。

例如:

[int]33:表示是一个int型参数,参数值为33。

[boolean]true:表示是一个boolean型参数,参数值为true。

[clob]’hello’、[varchar]’hello’、’hello’都表示是一个字符串类型的参数,参数值为hello

[bigdecimal]3.5、表示是一个BigDecimal类型的参数,参数值为3.5。

[date]2010-6-17表示是一个java.util.Date类型,日期值为2010-6-17

[time]19:30:38 表示是一个java.util.Date类型,时间值为19:30:38

19:30:38表示是一个java.util.Date类型,日期值为2010-6-17 19:30:38 [timestamp]2010-6-17

[cdate]2010-6-17表示是一个java.util.Calendar类型,日期值为2010-6-17 [ctime]19:30:38 表示是一个java.util. Calendar类型,时间值为19:30:38

19:30:38表示是一个java.util.Calenda类型,日期值为2010-6-17 19:30:38 [ctimestamp]2010-6-17

[fafgafa]3.5会报错,因为 [fafgafa]不是一个有效的类型。

如果格式化方法用到一其它列数据做为参数,则配置格式为“@{其它的property}”,不用配置类型,它的类型由相应的type属性决定。

另外,有一个特殊参数:[rrequest],如果某个参数声明为这种形式(注意后面不用跟参数值),则说明此格式化方法接受一com.wabacus.system.ReportRequest类型的参数,运行时,系统会将当前的com.wabacus.system.ReportRequest对象传到此位置中。千万要注意,只能声明为[rrequest],不区分大小写,后面不能跟其它任何值。例如[rrequest]ddd,则会报错。

3)、所有格式化方法第一个参数必须为要格式化的数据,在配置时此参数不用配置出来,格式化时,系统会自动将当前列的数据传入。

如果一个格式化方法只有这一个要格式化的数据的参数,则在的format属性中配置它时,只需配置方法名即可,当然也可以配置为“方法名()”。

另外,有一点需要非常注意,如果一列配置了多个格式化方法,则第一个参数,即当前要格式化的数据的类型千万要注意:只有第一个格式化方法的此参数类型与当前的type属性保持一致,后面的格式化方法第一个参数的类型只能是字符串类型,这是因为后面的格式化方法在格式化时接受的要格式化的数据都是前面格式化方法格式化好后返回的,根据下面的第4)条约定,每个格式化方法必须返回字符串类型,所以后面的格式化方法接受的要格式化的数据必须是字符串类型。

4)、所有格式化方法必须返回String类型的值,即格式化好的字符串。

2、在标签中对某个列进行格式化时,不能改变此列数据的类型,即格式化前是什么类型,格式化后仍要保持为相应类型。比如之前声明为int型,则格式化后还要是int型,不能变为字符串等其它类型,这一点与通过的format属性配置格式化方法不同。

3、如果一个即通过format属性配置了格式化方法,又在标签中对它进行了格式化,则会先执行标签中的格式化,然后在显示时再利用format属性中配置的格式化方法进一步格式化。

4、在系统配置文件中可以通过format-class配置项配置格式化类,在每个报表的的formatclass属性中也可以配置本报表所用的格式化类,都可以同时配置多个,用分号分开。

查找格式化方法的顺序为:先从本报表的的formatclass配置的类中查找,如果没找到,则从系统配置文件的format-class配置项注册的格式化类中查找,如果还没找到,再从内置的系统配置文件的format-class配置项中注册的格式化类中查找,如果还没找到,则抛出异常。

1.4 ID字段配置规则

ID类型配置规则

assigned 就是普通的列,配置没有任何特殊,以某个列对应的字段为关键字段,以在其输入框上输入的数据做为关键码。

identity 自动增长,配置显示时,像普通字段一样配置,但不要出现在update和insert的更新字段列表中,这样插入和更新时都不会对这个字段做任何操作,而是由数据库自己完成。sequence 序列,只有oracle等数据库类型支持这种方式,配置此列的显示时没有什么不同,只是在更新和插入数据的SQL语句时,配置格式为“字段名=sequence{获取ID的序列名}”。uuid 由系统自动生成一32位全球唯一的ID,配置此列的显示时没有什么不同,只是在更新和插入数据的SQL语句时,配置格式为“字段名=uuid{}”

foreign 由其它表的一个或多个字段数据组合做为当前表的ID字段的值。配置显示时没有什么不同,只是在配置更新和插入数据的SQL语句时,配置格式为:

“字段名=foreign{select 字段 from 其它表 where xx=@{xxxx}}”,这样插入和更新当

前表的此字段数据时,就会每次执行这条SQL语句来获取当前字段的数据进行更新。

注意:

1、其中的where条件表达式中可以像中配置的SQL语句一样,引

用当前数据表的某个字段值做为条件,引用方式完全一样,即@{的property},

不过在获取被引用列的数据时,这里获取的是用户输入的最新值(如果允许编辑的话),

而不像update或delete引用更新前的值。

2、如果当前字段的数据类型不为varchar,则需指定,指定方式为“字段名=foreign{[类

型]select 字段 from 其它表 where xx=@{xxxx}}”,如果查询的字段与当前字段不是

同种类型,则要在查询SQL语句中将其转换为相应类型查出来。

注意:

1、当要更新的表中有上面sequence、uuid、foreign三种之一的字段时,在配置

的相应表的更新SQL语句时,必须将要更新的字段列表全部列出来,而不能配置为update 表名或insert

表名这种简洁方式,因为要指定哪个或哪些字段是采用上面三种之一的方式来设置值。

2、不管是增、删、改哪一种的where子句,都不能出现foreign{select ....}这种条件子句。对于oracle

的添加语句,如果有大字段,且想根据通过UUID或sequence产生的列的条件更新大字段,可则以在

where子句中配置这两种条件子句:id字段=uuid{}或id字段=sequenct{序列名}。

例如insert tbl (colid=uuid{},col2=@{大字段propert}.....) where colid=uuid{}

或者insert tbl (colid=sequence{seq_test_id},col2=@{propert}.....) where colid=sequence{seq_test_id},其

中seq_test_id是某个序列名

上面两种都是合法的。注意,这种情况时,条件中的子句要与更新中的子句完全一样,包括大小写,

中间的空格数等。所以这种条件子句不能用like或其它函数进行比较。

1.5 自定义标签

每个报表可以定义多个标签来显示报表的不同部分在不同的位置。比如一个报表,可以采

用如下方式显示:




也可以采用如下方式来显示:




两种显示方式都是合法的。

但是有一种例外情况,如果一个报表是依赖于同一页面的另一个报表,即配置了depends属性,则它所有部分的显示只能放在一个中,不能拆分成多个来显示,比如上面的报表report12,如果它是依赖别的报表的一个从报表,则只能采用方式一进行显示,而不能像方式二那样分拆成多个

1.6 输入提示功能

1、EditableListFormReportType、 EditableListReportType

2、EditableDetailReportType2三种报表类型的编辑输入框不能配置输入提示功能。其它类型的编辑输入框以及所有查询条件输入框都可以配置输入提示功能

2、配置时,在中配置一个子标签,可以配置width属性:如果为-1(默认情况),则与所在输入框宽度保持一致;count属性:指定显示提示的条数;showlabel属性:true 时为提示列显示标题,即每个配置的label部分;false时,则不显示标题部分,默认为true。

输入提示的数据源通过一子标签配置,可以配置为从一SQL语句中查询同来,也可以配置为一个类,此类必须继承AbsTypePromptDataSource类,在实现的getResultDataList()方法中返回符号条件的结果,具体可以参考测试类com.wabacus.test.TestTypePromptDataSource。提示的每列配置为一子标签,有一matchmode属性,如果为0(默认情况),则当前列不参与输入匹配,如果为1,则从起始位置开始匹配,如果为2,则从任意位置匹配用户输入。

这里的matchmode的匹配模式只对客户端匹配时起作用,在服务器端的匹配,不在此控制,如果是SQL语句,就通过条件是用like还是用=号进行匹配,如果是JAVA类,则indexOf()方法是>0还是==0决定匹配模式。

1.7 下拉框关联功能

假设A下拉框的选项数据依赖于B下拉框,在配置A下拉框时,需要将A下拉框的depends属性配置为B下拉框所在的name属性或所在标签的property属性。

假设B下拉框配置如下所示:

在配置A下拉框的选项时分两种情况:

1)、如果A下拉框的下拉选项是直接硬编码在报表配置文件或资源文件中,则配置如下所示:

通过

2)、如果A下拉框的选项数据列表是从数据库中获取,则配置如下所示:

当B下拉框选中“全部”选项时,即传到A下拉框的value为空字符串时,默认A下拉框不显示任何选项(上面的配置就是默认情况),如果想当B下拉框选中“全部”选项,即value取值为空字符串时,A下拉框显示全部选项(而不是默认的不显示任何选项),则配置如下所示:

1)、如果A下拉框的下拉选项是直接硬编码在报表配置文件或资源文件中,则配置如下所示:

2)、如果A 下拉框的选项数据列表是从数据库中获取,则配置如下所示:

如果A 下拉框的某个或某些选项没有配置type 属性,或配置为空字符串,则这些下拉选项不依赖于父下拉框选中的数据,一直显示出来。

如果type 属性配置了,且配置值不为空,即依赖于父下拉框的某个选项是否选中才显示,则必须将父下拉框的值用 []括住,即使依赖的父下拉选项的值是空字符串,也要写成[]形式。但有如下两个特殊情况:

1、如果A 下拉框的某个或某些选项,只有当A 下拉框有选项数据时,才显示出来,如果没有选项数据,则不显示出来,此时只需将A 下拉框的这些选项的type 属性均配置为type=”true”即可。注意,不能配置为type=”[true]”,后者表示的是依赖于父下拉框的值为“true ”的下拉选项。 例如

2、如果A 下拉框的某个或某些选项,当A 下拉框没有下拉选项数据时(因为A 下拉框依赖于B 下拉框,所以当B 下拉框的某个选项在A 下拉框中没有对应数据,则A 下拉框可能为空)才显示出来,而当A 下拉框有选项数据时不显示出来,则将其type 属性配置为false ,即type=”false”,注意不能配置为type=”[false]”。例如:

这样“无”这个下拉选项只有当A 下拉框中没有选项数据时才会显示出来。

A 下拉框的下拉选项的type 属性有如下几种类型: A 下拉选项的type 属性

特点

不配置,或配置为空字符串,例如:

当前下拉选项的显示不依赖于父下拉框B 所选中的选项,而是一直显示出来

配置为true ,即

type=”true”/>

注意不是type=”[true]”形式

配置为false ,即

与父下拉框B 的选项数据无关,只有当A 下拉框自己没有符合条件的选项数据显示时,此下拉选项才显示出来 配置为[父下拉选项的值],如果对应的父下拉选项的值为空字符串,则配置为[]

只有父下拉框相应选项被选中时,此下拉选项才显示出来。A 下拉框的一个下拉选项数据可以配置同时对应多个B 下拉框的选项数据,分别用[]括住,这样当B 下拉框的这些选项数据有一个被选中时,当前下拉选项就显示出来。例如type=”[300001][]”,则当B 下拉选项选中值为300001或值为空字符串的选项时,此选项都显示出来

设计说明: 下拉框所在位置

父下拉框行为

子下拉框行为

查询条件及编辑框中显示单元格时就填充的下拉框(即fillmode=1)

onchange 事件时,刷新子下拉框的数据

第一次显示及后面刷新数据时,均先取出父下拉框的选中数据,并据此选择符合条件的选项数据进行显示。

编辑框中点击单元格才显示的下拉框

在子下拉框的onfocus 事件中,取出父下拉框的值,并将它传到后台取出符合条件的选项数据进行显示。因为点中子下拉框所在td 显示子下拉框时,父下拉框并不存在,所以是从父下拉框所在td 中获取父下拉框的选中数据

刷新下拉框数据的JS 函数说明:

function reloadSelectBoxData(serverurl,selectboxid,focusthis)

参数serverurl:刷新子下拉框数据的URL,里面有如下两个重要参数:

INPUTBOXID:要刷新下拉选项数据的子下拉框的ID,在服务器端程序中,要以此从ReportBean 中取到下拉框对象,所以如果当前下拉框是显示在数据自动列表中时,这个ID并不包括行号部分。

PARENTV ALUE:父下拉框的选中数据。

参数 selectboxid:要刷新数据的子下拉框的ID,这个ID的作用是在从服务器端取到子下拉框的选项数据后,根据此ID要能找到下拉框对象,并对它选项数据进行更新。因此如果当前下拉框是显示在数据自动列表中时,要带上行号,也就是下拉框的真正ID,否则没办法找到此下拉框对象。这是这个id与上面serverurl中的INPUTBOXID参数不同的地方。

参数focusthis:标识,可取值为true和false,true:表示刷新完子下拉框的数据后,将焦点给它,即调它的focus()函数。false则不手动将焦点给它,即不凋用它的focus函数。

因为对于fillmode=1,即显示td时即显示的下拉框,必须传入true,即将子下拉框得到焦点,这样才能保证它一定会调用失去焦点事件,将新值赋给所属td,否则焦点一直在父下拉框中,只有手工点击了子下拉框它的值才会起作用,设置到所属td中。

对于fillmode=2,即点击时才显示的下拉框,则必须传入false,因为点击后它已经获得了集点,更新了其数据时不需再调它的focus()函数,否则在IE中有问题。

1.8 文件上传功能

1、文件上传类型的输入框,其inputbox有如下几个属性:

maxsize:允许上传的最大文件大小,以KB为单位,如果没有配置,则不限制上传文件的大小allowtypes:允许上传的文件类型,配置允许上传的文件的后缀,如果有多个,用“;”分隔。例如:“.jpg;.png;.gif”

filename:文件上传的新文件名,如果没有配置,则不改变上传文件的文件名,保留原名。如果配置了此属性,则上传后,以此配置的文件名做为文件名。此配置项有几个特殊配置值:

{date}:以当前日期做为文件名;{time}:以当前时间做为文件名;{timestamp}:以当前日期时间的毫秒数做为文件名,可以保持每次上传的文件名不重复。

savepath:上传的文件在服务器端保存路径,必须配置。

displaytype:文件的显示类型,可取值为:textbox(默认值),以文本框显示上传文件的路径或URL;

image:以标签显示上传的图片文件。

rooturl:如果本文件上传后,需要通过URL在前台访问,由需配置此属性,指定访问上传文件的根URL,以便能系统能正确地拼凑出上传文件的访问URL。

对于displaytype配置为image,则必须配置rooturl属性,否则标签无法显示到上传的图片。

对于displaytype配置为textbox,如果配置了rooturl,则文本框中显示访问此上传文件的URL路径。如果没有配置此属性,则文本框中显示上传文件在服务器端的存放完整路径deletetype:如果配置为0,则不在弹出的文件上传窗口中显示“删除”按钮,上传文件后,用户无法删除被上传的文件;

如果配置为1(默认情况),则在弹出的文件上传窗口中显示“删除”按钮,点击删除时,只会清除掉输入框中的路径(数据库中的路径要点击“保存”后才会被清除),但不会删除文件;

如果配置为2,则在弹出窗口中点击“删除”按钮时,一方面会清除路径(数据库中的路径要点击“保存”后才会被清除),另一方面会立即把上传的文件删除掉。

styleproperty:这是所有都具有的属性,用于配置当前输入框的显示样式字符串。对于文件上传输入框类型,如果displaytype为image,则此属性可配置所有标签支持的样式字符串,如果配置为textbox,则此属性配置,即文本框支持的样式字符串。

2、文件上传输入框,不管是textbox显示类型还是image显示类型,都不是像其它输入框类型一样,

通过onblur事件将数据填充到所属中,而是统一在文件上传后,上传界面调用的parent.set...方法

中进行设置。

1.9 弹出新窗口输入框

设计1、配置:

这种类型的输入框的有如下属性:

width:弹出窗口的宽度

height:弹出窗口的高度

styleproperty:不是配置弹出窗口的显示样式字符串,而是配置源输入框的显示样式字符串,也就

是textbox的样式,比如上面配置为size=30。

另外,弹出窗口的页面URL,配置在此标签内容中,即配置在弹出页面的URL

在URL中可以带上静态和动态参数,动态参数是指以某列的数据做为参数,格式为“参数名=@{某

列对应的的property}”,例如:

上面的sname和sno两个参数名对应的参数值分别从property为name和sno的中对应的字段动

态获取。

设计2:

1、弹出的页面,即上面poppageurl指向的页面,即可以是一JSP,也可以是一servlet。在此页面程

序中,除了可以获取配置URL中所带的参数值,比如获取上面URL中传入的两个参数的值:

request.getParameter(“sname”)、request.getParameter(“sno”)。

还有如下几个特定参数名的参数值可以从request中获取到:

PAGEID:当前弹出窗口所属页面ID;

REPORTID:当前弹出窗口所属报表ID;

INPUTBOXID:输入框ID;

OLDV ALUE:弹出输入框的数据

上面几个参数数据可以按需获取。

2、在弹出页面的任意位置,调用一下此自定义标签

3、在弹出的页面中,可以以任意形式组织数据选择方式,比如以树菜单、表格、单纯复选框等形式。

当选中完后,调用框架的selectOK()函数,传入被选好数据的字符串即可。这个函数是由框架自动生

成的javascript函数,用户只需直接调用即可,它只有一个参数,即选中的数据字符串。

1.10 数据自动列表报表的行选择

1、对于可编辑数据自动列表报表,都有行选中功能,而且可以通过配合Ctrl或Shift键进行同时选中

多行的功能

对于普通的数据自动列表报表,则可以通过标签的rowselect属性配置当前报表是否需要

行选中功能,此属性默认值为0,即不具有行选中功能,如果配置为1,则具有单行选中功能;如果配置为2,则具有同时选中多行功能(配合Ctrl键或Shift键)。

2、配置行选中的回调函数

当一个报表无论是默认具有行选中功能(比如可编辑自动列表报表),还是通过配置rowselect属性为1或2具有行选中功能,都可以通过标签的selectcallback属性配置一个或多个行选中后的javascript回调函数,如果有多个,用“,”号分隔。这样,当选中此报表一行或多行时,框架会自动调用用户配置的这些回调函数。所有回调函数都有且只有一个Array类型的参数,按选中次序存放用户本次选中的一个或多个对象。

注意:对于可编辑的数据自动列表报表类型,如果选中的行是新增的行,还没有保存到数据库中,则不会将其对象传递到回调函数中。

在回调函数中,通过传入的对象,可以取到这些选中行所有对象。如果想在回调函数中获取某个单元格的值,可以通过在配置此td对应的时,将的rowselectvalue属性配置为true即可,这样在回调函数中,通过此对象的getAttribute(“name”)即可获得当前对应的property(column),通过此对象的getAttribute(“value”)即可获得当前单元格的数据,然后在回调函数中进行使用。

1.11 主从报表

1、分为两种类型(实现方式):

一种是在主报表点击一条记录某个字段的链接后,异步加载跳转到从报表上,也就是目前最常见的,这种方式的主从报表分别配置在两个两个页面上。

另一种是主从报表显示在同一个页面上。也是配置在同一个页面上,即同一个中,这里介绍的主要是这种情况的实现。

2、一个主报表可以被多个从报表依赖,一个从报表也可以依赖另外一个从报表,依赖层级不限。只有数据自动列表报表才能被别的报表依赖,数据细览报表不能被依赖。

3、如果多个从报表依赖同一个主报表,则它们在自己的dependsparams属性配置的动态参数中,如果某个动态参数是引用主报表同一列()数据做为参数值,则它们的动态参数的参数名必须相同。例如主报表A有一列

现在它有二个从报表B、C,它们的配置如下所示:

B报表:

C报表:

因为上面B、C报表都依赖主报表A,且都用到A报表的sno列做为动态参数值,所以它们引用此参数值的参数名必须相同,这里都为txtno,不能A叫txtno1,B叫txtno2。

7、如果主从报表显示在ForwardPageType页面类型,即在目标页面采用自定义标签,则从报表所有部分的显示必须显示在一个标签中。不能分拆成多个此标签来显示不同的部分比如,只能采用如下方式显示:




而不能采用如下方式来显示:




1.12 行分组报表

1、行分组的必须依次配置在最前面,包括hidden不为0,以及sequence、non-fromdb类型的列的前面。也就是如果有一个不参与分组,则其后所有的都不参与分组。

排第一个的为一级分组,排第二个的为二级分组,依次类推。参与分组的也可以是中的,但也必须在其它不参与分组的的前面,且的hidden必须是为0。

如果一个参与分组,则将其rowgroup属性配置为true。

2、参与分组的的hidden属性必须为0,且column不能为{sequence}和{non-fromdb}。

3、这个行分组以及下面的树形行分组,在数据库端实现时,都是按用户配置的次序将它们对应的字段放在查询数据的SQL语句order by子句的最前面,也就是说它们对应的字段排序优先级最高。这样可以使取出的数据是按分组要求排好序的。

默认的分组字段排序顺序为升序,如果用户在sql语句的order by子句中已经指定了要按分组字段排序,则会使用用户配置的排序顺序对分组字段进行排序。

1.13 树形表格报表

1、参与树形分组的必须依次配置在最前面,包括hidden不为0,以及sequence、non-fromdb类型的列的前面。也就是如果有一个不参与树形分组,则其后所有的都不参与树形分组。

排第一个的为一级分组,排第二个的为二级分组,依次类推。参与树形分组的不能是中的

如果一个参与分组,则将其treerowgroup属性配置为true。

2、参与树形分组的的hidden属性必须为0,且column不能为{sequence}和{non-fromdb}。

3、一个报表不能同时配置行分组与树形分组,只能配置为其中一种。

4、如果多个配置了参与树形分组,它们只会显示在一列中,列标题为第一个配置的label

5、对于配置了treerowgroup属性为true的列,其valuestyleproperty属性配置的样式对其整行都有效,比如某个报表的“班级名称”树形分组列配置了valuestyleproperty=”bgcolor=’#cccccc’”;,则其显示效果如下图所示:

可以看到,此分组列的行都显示为这个背景色。

6、对于树形分组,显示样式可以通过的如下几个属性进行指定:

treeborder属性:树形表格的边框类型,可取值如下所示:

0:只显示表格的竖线边框,显示效果如下图所示:

1:显示竖线边框以及分组之间的横线,但不显示数据行之间的横线,显示效果如下图所示

2:默认值,显示数据行的边框,但不显示树枝节点所在列的横线边框,显示效果如下图所示

3:显示所有边框,显示效果如下图所示

treecloseable属性:指定表格树是否可折叠,如果为true,则可折叠,如果为false,则不可折叠。默认为true。

initstate属性:当表格树配置为可折叠时,可以通过此属性指定表格树的非根节点的初始状态,如果配置为open,则所有树枝节点为展开状态,如果配置为close,则所有非顶层树枝节点为收缩状态。默认为open

1.14 报表统计

如果一个报表需要统计功能,则在标签下配置了子标签,支持如下几种类型的统计:

avg:取平均数

max:取最大值

min:取最小值

count:统计数量

sum:求和

统计行的每列也是在中配置一个子标签,此子标签有如下属性:startcolindex属性:配置当前统计列从哪一列开始显示,指定此列的序号,第一个的序号从0开始。

在计算列序号时,hidden不为0的列也占据一个序号;不占据序号,不过中的

也依次占据序号。

colspan属性:指定此统计列所占的单元格个数。

以上两个属性就指定了当前统计列的显示位置。

例如某个配置如下所示:

---0

---1

---2

---3

---4

---5

---6

---7

---8

clickorderby="true"/>---9

---10

---11

---12

---13

valuestyleproperty="bgcolor='#dddddd' align='right'">

平均年龄:@{avg(age)}

valuestyleproperty="bgcolor='#dddddd'">

最大日期:@{max(birthday)}

下各列()对应的序号如上面标识所示。

上面的下面配置了两列统计,第一列的startcolindex和colspan属性指定了它占据序号为0到11之间的列。

第二个统计列占据了column属性为sex和birthday的两列,即最后两列。

从上可以看出,在通过startcolindex属性指定序号时,所有都算上,包括hidden为0,1,2,3等列。在通过colspan指定所占的列时,则只算显示出来的列,即hidden为0的列,如果显示在页面上,则还包括hidden为3的列;如果显示在Excel文档中,则还包括hidden为2的列。

文本编辑器设计

四川师范大学成都学院高级语言程序课程设计 文本编辑器设计 学生姓名xxx 学号x 所在学院x 专业名称x 班级x级x班 指导教师x 成绩 x学院 二○一四年十二月

课程设计任务书

文本编辑器设计 内容摘要:当今,计算机以及网络技术的飞速发展,社会正快速向信息化社会前进,我们需要更智能,更专业的软件帮助我们完成工作,从而提高了工作效率。 目前文本编辑器种类很多,所提供的功能也很多,但是能满足用户实现多种功能和进行C++程序语言的编译与运行很少,不能更好的适应当前用户的要求。本设计所完成的文本编辑器功能是针对学习C++程序语言,因此我们利用C++程序设计虚拟机和软件用户以及使用者的应用过程形成一整套完整的编写代码,编译,运行。本文本编辑器的开发主要包括界面窗口的菜单栏和工具栏,还有链接C++语言虚拟机实现编译与运行。操作系统为Windows 7。 关键词:文本编辑器C++程序语言编译运行 The design of text editor Abstract:Today, the rapid development of computer and network technology, society is rapidly advancing to the information society, we need a more intelligent, more professional software to help us to finish the work, so as to improve work efficiency. At present, many text editors species, to provide the function of many, but can satisfy the compiling and running the user to achieve a variety of functions and the C++ programming language is very few, can better adapt to the requirements of the current user. The completion of the design of the text editor function is for learning C++ programming language, so we use the C++ program design of virtual machines and software users and users of the application process of form a complete set of code, compile, run. The development of the text editor includes interface window menus and toolbars, and link the C + + programming language virtual machine implementation compile and run. The development of the text editor use VC++ as the development tool, and the operating system is Window 7.

文本编辑器c++实验报告附源代码

四川大学软件学院 实验报告 课程名称数据结构实验课时8 实验项目文本编辑器实验时间12到14周实验目的了解c++类的封装和KMP算法。 实验环境 Windows平台 VC6.0++ 实验内容(算法、程序、步骤和方法) 部分函数创建思想: 创建过程如下: a、定义LinkList指针变量*temp: LinkList *temp; b、定义文本输入变量ch,记录文本行数变量j,记录每行字符数变量i; c、申请动态存储空间:head->next=(LinkList *)malloc(sizeof(LinkList)); d、首行头指针的前驱指针为空:head->pre=NULL; 首行指针:temp=head->next; 首行指针的前驱指针也为空:temp->pre=NULL; 定义没输入字符时文章长度为0:temp->length=0; 初始化为字符串结束标志,防止出现乱码:for(i=0;i<80;i++) temp->data[i]='\0'; e、利用循环进行文本输入 for(j=0;jdata[i]=ch; //给temp指向的行赋值 ···· temp->length++;//行中字符长度加1 if(ch=='#') {NUM=j; break; //文章结束时,Num来记录整个文章的行数 }}} 在字符输入的过程中,如果在单行输入的字符超过了80个字符, 则需要以下操作: 输入字符数大于80,重新分配空间建立下一行 temp->next=(LinkList *)malloc(sizeof(LinkList)) ;

数据结构 简易文本编辑器

题目: 【2】.简易文本编辑器 要求: 1) 具有图形菜单界面; 2) 查找,替换(等长,不等长),插入(插串,文本块的插入)、块移动(行块,列块移动),删除 3) 可正确存盘、取盘; 4) 正确显示总行数。 1需求分析 一个简易文本编辑器应该具有图形菜单界面,包括查找,替换(等长,不等长),插入(插串,文本块的插入)、块移动(行块,列块移动),删除文本信息等功能并可正确存盘、取盘,正确显示总行数。 2概要设计 为实现数据的有序存储,该编辑器应该用顺序表来存储输入的信息。顺序表是数据结构中线性表的一种,它是用一块地址连续的存储空间依次存储线性表的元素。其特点为:在顺序表上逻辑关系相邻的俩个元素在物理位置上也相邻;在顺序表上可以随即存取表中的元素。在编辑器的主界面中应有如下提示信息: ⑴清空以前的文本信息:将用数组存的数据内容全部置为0; ⑵显示当前文本信息:遍历用数组存入的信息,并输入到外部显示器上; ⑶编辑信息:定义一个结构体,并在结构体中定义一个字符型的一维数组和一个整 型变量,这个整型变量用于记录一维数组中存入数据的个数; ⑷替换文本信息:首先在数组中查找要被替换的信息,如果找到该信息,提示输入 要替换的信息内容,否则提示未找到要被替换的信息; ⑸插入文本信息:首先在数组中查找要插入点,如果找到该插入点,提示输入插入 信息,确认插入信息后,提示选择向前插入信息还是向后插入信息,如果未找到插入点,显示未找到要插入的位置; ⑹移动文本信息:首先在数组中查找要移动的信息,如果找到该信息,提示是进行 列移动还是进行行移动,否则提示未找到要移动的信息; ⑺删除文本信息:首先在数组中查找要删除的信息,如果找到该信息,提示是否确

UEDITOR自定义默认宽度高度

最近需要使用到网页后台富文本编辑器。经过同学推荐,最后决定使用百度家的Ueditor. 官方提供了网页上非常方便的自定义工具栏的功能。自定义之后直接下载对应的代码包并按照文档部署到项目中即可。其中主要的问题是路径的配置。 首先是将下载好的代码包发布到我们项目的根目录下面。然后在需要添加富文本编辑器的页面头部添加如下代码: 1. <script type="text/javascript" src="相对该文档的路径 /ueditor/ueditor.config.js"></script> 2. <script type="text/javascript" src="相对该文档的路径 /ueditor/ueditor.all.js"></script> 3. <script> 4. <span style="white-space:pre"> </span>window.UEDITOR_HOME_URL = "/项目相对网 址池绝对路径/ueditor"; 5. </script> 配置路径这一块是非常重要的。特别是下面的Ueditor的路径,是相对我们整个代码库的目录的。 配置完成之后,直接在我们网页中的<textarea>标签下面添加ueditor的初始化代码: 1. <script type="text/javascript"> 2. var editor = new UE.ui.Editor({initialFrameHeight:100,initialFrameWidth: 400 }); 3. editor.render("actDescribe"); 4. </script> 官方的文档并没有给出如何设置ueditor的宽度和高度的说明。这是我在网上网友那里找到的解决方法。在声明编辑器的变量的时候,在参数列表中添加对initialFrameHeight和initialFrameWidth的设置即可。注意,数值后面不需要添加px。 可是,这种方法有时候奏效有时候也不奏效,因为我碰过一种情况就是无论如何调整initialHeight和initialWidth的数值,编辑器的大小都还是不会改变。这个时候,我发现,可以通过调整editor所跟随的textarea的宽高来撑开editor的大小。这也是一种方法,各位同学在官方说明文档出来之前可以两种方法都尝试一下。 当然,好用的文本编辑器还是有很多的,例如kindeditor,之前准备使用这个的,而其文档方面也比较齐全,同时,整个编辑器的size也比较小,对网页的加载速度比较有利。百度的Ueditor还是有点庞大。加载时会有卡顿的速度。估计是我对底层代码的研究不够,多了很多不必要的内容。慢慢研究或许可以使得Ueditor变小。

数据结构简易文本编辑器

数据结构简易文本编辑 器 文稿归稿存档编号:[KKUY-KKIO69-OTM243-OLUI129-G00I-FDQS58-

题目: 【2】.简易文本编辑器 要求: 1) 具有图形菜单界面; 2) 查找,替换(等长,不等长),插入(插串,文本块的插入)、块移动(行块,列块移动),删除 3) 可正确存盘、取盘; 4) 正确显示总行数。 1需求分析 一个简易文本编辑器应该具有图形菜单界面,包括查找,替换(等长,不等长),插入(插串,文本块的插入)、块移动(行块,列块移动),删除文本信息等功能并可正确存盘、取盘,正确显示总行数。 2概要设计 为实现数据的有序存储,该编辑器应该用顺序表来存储输入的信息。顺序表是数据结构中线性表的一种,它是用一块地址连续的存储空间依次存储线性表的元素。其特点为:在顺序表上逻辑关系相邻的俩个元素在物理位置上也相邻;在顺序表上可以随即存取表中的元素。在编辑器的主界面中应有如下提示信息: ⑴清空以前的文本信息:将用数组存的数据内容全部置为0; ⑵显示当前文本信息:遍历用数组存入的信息,并输入到外部显示器上; ⑶编辑信息:定义一个结构体,并在结构体中定义一个字符型的一维数组和一个整 型变量,这个整型变量用于记录一维数组中存入数据的个数; ⑷替换文本信息:首先在数组中查找要被替换的信息,如果找到该信息,提示输入 要替换的信息内容,否则提示未找到要被替换的信息; ⑸插入文本信息:首先在数组中查找要插入点,如果找到该插入点,提示输入插入 信息,确认插入信息后,提示选择向前插入信息还是向后插入信息,如果未找到插入点,显示未找到要插入的位置; ⑹移动文本信息:首先在数组中查找要移动的信息,如果找到该信息,提示是进行 列移动还是进行行移动,否则提示未找到要移动的信息; ⑺删除文本信息:首先在数组中查找要删除的信息,如果找到该信息,提示是否确 认删除该信息,通过确认来删除信息,如果未找到要删除的信息,提示未找到该信息;

百度编辑器ueditor的toolbars的各个元素代表的功能说明

fullscreen 功能解释:全屏 source 功能:html源码 undo 功能:撤销 redo 功能:重做 bold 功能:加粗 italic 功能:斜体 underline 功能:下划线 fontborder 功能:字符边框 strikethrough 功能:删除线 superscript 功能:上标 subscript 功能:下标 removeformat 功能:清除格式 formatmatch 功能:格式刷 autotypeset 功能:自动排版 blockquote 功能:引用 pasteplain 功能:纯文本粘贴模式 forecolor 功能:字体颜色 backcolor 功能:背景色 insertorderedlist 功能:有序列表 insertunorderedlist 功能:无序列表 selectall 功能:全选 cleardoc 功能:清空文档 rowspacingtop 功能:段前距

rowspacingbottom 功能:段后距 lineheight 功能:行间距 customstyle 功能:自定义标题 paragraph 功能:段落格式 fontfamily 功能:字体 fontsize 功能:字号 directionalityltr 功能:从左向右输入 directionalityrtl 功能:从右向左输入 indent 功能:首行缩进 justifyleft 功能:居左对齐 justifycenter 功能:居中对齐 justifyright 功能:居右对齐 justifyjustify 功能:两端对齐 touppercase 功能:字母大写 tolowercase 功能:字母小写 link 功能:超链接 unlink 功能:取消链接 anchor 功能:锚点 imagenone 功能:默认 imageleft 功能:左浮动 imageright 功能:右浮动 imagecenter 功能:居中 simpleupload 功能:为选择文件【单个图片上传】

简单行编辑器 数据结构 课程设计汇总

中国矿业大学徐海学院计算机系《软件认知实践》报告 姓名:学号: 专业: 设计题目:简单行编辑器 指导教师: 2012年12月25

目录 第1章题目概述 (1) 第1.1节题目要求 (1) 第1.2节主要难点 (2) 第2章系统流程图 (3) 第3章数据结构和算法 (4) 第4章核心代码分析 (6) 第5章复杂度分析 (10) 第6章总结 (11) 参考文献 (13)

第1章题目概述 在这次课程设计中我选的题目是文本编辑,文本编辑几乎是每个使用电脑 的人都会遇到的问题,特别是网络小说作家们。在文本的编辑中,我们会时常 遇到文本信息的统计问题、小型子串的查找问题、子串的查找和删除问题等。 如果靠人自己去观察和执行相关操作的话,不仅累人,而且很容易出错。而使 用计算机程序去实现的话,则会省力不少,而且相对来说非常精确。本程序使 用了较快速的查找算法,可以大大提高检索的效率,相信这可一极大的方便用 户用电脑编辑文本文件。 第1.1节题目要求 文章编辑 功能:输入一页文字,程序可以统计出文字、数字、空格的个数。 静态存储一页文章,每行最多不超过80个字符,共N行; 要求 (1)分别统计出其中英文字母数和空格数及整篇文章总字数; (2)统计某一字符串在文章中出现的次数,并输出该次数; (3)删除某一子串,并将后面的字符前移。 存储结构使用线性表,分别用几个子函数实现相应的功能; 输入数据的形式和范围:可以输入大写、小写的英文字母、任何数字及标 点符号。 输出形式: (1)分行输出用户输入的各行字符; (2)分4行输出"全部字母数"、"数字个数"、"空格个数"、"文章总字数" (3)输出删除某一字符串后的文章; 实现功能 (1)文章内容的输入:包括字母、标点符号、数字等; (2)文章内容的统计:包括文章中大写字母、小写字母、数字、标点符

ueditor文本编辑器

百度编辑器 UEditor
演示地址:https://www.doczj.com/doc/e017400233.html,/website/onlinedemo.html Ueditor 是由百度 web 前端研发部开发所见即所得的编辑器,具有轻量,可定制,注重 用户体验等特点。Ueditor 基于 BSD 开源协议,除了具有代码精简、加载迅速的轻量级特质 外,还采用了分层理念,使开发者可以根据实际应用和需求自由定制。 Ueditor 编辑器划分为了三层架构。其中,核心层为开发者提供了诸如 range、 selection、 domUtils 类的底层 API 接口, 中间的命令插件层不仅提供了大量的基础 command, 还允许开发者基于核心层进行 command 命令的开发, 而面向用户端的界面层则可以提供自由 定制的用户交互界面。Ueditor 开源编辑器这种拥有可配性的模式,令开发者能够根据自身 需要接入任何一层进行开发。
完整版的部署与体验
一、官网上下载完整源码包,解压到任意目录,解压后的源码目录结构如下所示: _examples:编辑器完整版的示例页面 _demos:编辑器的各种使用案例 dialogs:弹出对话框对应的资源和 JS 文件 themes:样式图片和样式文件 server:涉及到服务器端操作的 PHP、JSP 等文件 third-party:第三方插件 editor_all.js:_src 目录下所有文件的打包文件 editor_all_min.js:editor_all.js 文件的压缩版,建议在正式部署时才采用 editor_config.js:编辑器的配置文件,建议和编辑器实例化页面置于同一目录 二、部署 UEditor 到实际项目(UETest)中的步骤:
图表 1 第一步:在项目的任一文件夹中建立一个用于存放 UEditor 相关资源和文件的目录,此

数据结构课程设计简易文本编辑器

课程设计说明书 课程名称:数据结构课程设计 专业:电子信息科学与技术班级:2012-1 设计人: 山东科技大学 2015年 7 月 11 日

目录 1需求分析说明 (2) 1.1主函数模块 (2) 1.2菜单显示及输出子模块 (2) 1.3查找功能子模块 (2) 1.4替换功能子模块 (2) 1.5插入功能子模块 (3) 1.6块移动功能模块 (3) 1.7删除功能模块 (3) 1.8读盘功能模块 (3) 1.9存盘功能模块 (3) 1.10测试数据 (3) 2概要设计说明 (4) 2.1设计思想 (4) 2.2模块调用图 (4) 2.3程序代码简介 (4) 3详细设计说明 (7) 3.1主函数模块 (7) 3.2菜单显示及输出子模块 (7) 3.3查找功能子模块 (7) 3.4替换子模块 (9) 3.5插入子模块 (10) 3.6块移动模块 (11) 3.7删除模块 (12) 3.8读盘功能模块 (13) 3.9存盘功能模块 (15) 3.10流程图 (16) 4调试分析 (17) 4.1遇到的问题 (17) 4.2测试结果 (18) 5用户使用说明 (22) 6课程设计总结 (24)

1需求分析说明 简易文本编辑器的总体目标:在Visual Studio的开发环境下,利用所学C 语言和数据结构的相关知识,开发一个具有良好人机界面的简易文本编辑器,实现对文本的简单修改,从而达到编辑文本以及查看文本信息的目的。 基本功能如下: (1)界面友好,易与操作。采用菜单或其它人机对话方式进行选择。 (2)能正确打开所键入的文本路径,并能够读取相应文本信息。 (3)能对打开的文本进行文本信息显示、替换、查找、块移动、删除等基本操作。 (4)能够正确对修改后的文本内容存盘。 (5)正确显示文本总行数。 以下是各功能模块的功能描述: 1.1主函数模块 主函数模块的主要功能是初始化菜单界面,功能按键选择并调用相关模块,实现软件功能。 1.2菜单显示及输出子模块 菜单显示模块的主要功能是将菜单进行显示,内容包括本设计的主要功能及相关代号。 文本显示模块的主要功能是将所要显示的文本信息通过传入的参量传入 本模块进行显示。 输出模块主要功能是输出文本所有信息。 1.3查找功能子模块 本模块的主要功能是通过输入想要查找的文本信息,返回文本中所要查找的文本信息的所处起始位置。 1.4替换功能子模块 本模块的主要功能是将输入的被替换的文本替换为替换的文本信息,并能够显示文本信息。

【优质】ueditorword导入编辑-word范文模板 (13页)

本文部分内容来自网络整理,本司不为其真实性负责,如有异议或侵权请及时联系,本司将立即删除! == 本文为word格式,下载后可方便编辑和修改! == ueditorword导入编辑 篇一:百度编辑器UEditor的插件开发 百度编辑器UEditor的插件开发 1.概述 UEditor是由百度web前端研发部开发的所见即所得富文本web编辑器,具有轻量、可定制、注重用户体验等特点,开源基于BSD协议,允许自由使用和修改代码。 2.下载UEditor 截至201X.11.27,最新版本为1.3.5,下面是具体的相关文档的下载地址: 百度官网下载地址:/website/download.html#ueditor;官方文档资料地址:/website/document.html;官方API地址:/doc/。 3.源码包文件说明 从官网上下载完整源码包,解压到任意目录,解压后的源码目录结构如下所示: ?_examples:编辑器的示例页面 ?dialogs:弹出对话框对应的资源和JS文件 ?themes:样式图片和样式文件 ?editor.config.js:编辑器的配置文件 ?editor.api.js:开发版的所有js文件导入 ?editor.all.js:使用版的所有js文件 ?lang:语言文件 ?jsp、net、php:涉及到服务器端操作的文件

?third-party:第三方插件 4.部署和使用 UEditor可供普通用户使用,同时UEditor的插件机制也为二次开发者提供了自定义插件的开发。 1)在项目的任一文件夹中建立一个用于存放UEditor相关资源和文件的目录。 2)创建简单的编辑器实例,首先在html页面中准备一个dom容器,容器可以是

,也可以是标签。 3)引入相关文件 4)创建编辑器 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17

数据结构文本编辑器终审稿)

数据结构文本编辑器文稿归稿存档编号:[KKUY-KKIO69-OTM243-OLUI129-G00I-FDQS58-

数据结构课程设计报告 一.需求分析 1.题目及要求 名称:简单的文本编辑器 内容:输入一页文字,程序可以统计出文字、数字、空格的个数。静态存储一页文章,每行最多不超过80个字符,共N行。 要求:(1)分别统计出其中英文字母数和空格数及整篇文章总字数; (2)统计某一字符串在文章中出现的次数,并输出该次数; (3)删除某一字符或者子串,并将后面的字符前移。 (4)插入某一字符或者子串。 (5)查找某一字符或者子串。 存储结构使用线性表,分别用几个子函数实现相应的功能;输入数据的形式和 范围:可以输入大写、小写的英文字母、任何数字及标点符号。 输出形式: (1)分行输出用户输入的各行字符; (2)分4行输出"全部字母数"、"数字个数"、"空格个数"、"文章总字数" (3)输出删除某一字符串后的文章。 通过题目及其要求可知,本程序应实现以下功能: (1)文章内容的输入:包括字母、标点符号、数字等; (2)文章内容的统计:包括文章中大写字母、小写字母、数字、标点符号、空格以 及文章所有字数的个数的统计; (3)文章内容的处理:包括对文章内容的查找、删除以及对指定位置进行插入操作, 其中在查找的过程中统计出该字符或字符串在文章中出现的次数; 2.问题分析 本程序是对一段英文文章的内容进行处理,存储方式采用链式存储,没有文件操作,故本程序对其文本内容的所有操作都是在链表中进行的。对于文本的输入,采用头插法将文本信息存储到链表已申请好的存储空间中,在此部分设计中最大的问题在于输入文章过程中输入的字符数大于80时如何换行;对于文本内容的统计,使用循环对已存储的文章进行匹配,大写字母数、小写字母数、空格数、数字数直接通过比较即可得到,标点符号通过ASCⅡ比较即可得到;对于文本内容的处理,查找部分仍是使用循环对已存储的文章进行匹配,判断需要查找的字符或者字符串是否与文章中某部分内容相同,如果存在相同

细数几款免费好用的在线HTML编辑器

细数几款免费好用的在线HTML编辑器 先普及一下基本知识:什么叫在线HTML编辑器?说得简单点,在线HTML编辑器就是在网上发帖子、写博客的那个带编辑功能的框框,可以进行图文排版等操作。当年本菜鸟做网站的时候,曾经自己用javascript编写过一个比较简单的在线HTML编辑器,用于文本内容的排版。但是因为水平有限,很多功能都无法实现。后来有了eWebEditor,功能确实强大,但这个编辑器是个收费的软件,并且正因为功能强大,也就显得过重,一些轻量的场合不是太适用。那有没有既免费、又功能强大、还能适应轻量场合的在线HTML编辑器呢?答案肯定是有的。这首先要感谢这些年来有一批奉献精神的程序猿们不断推进共享软件的开发,让我们得以享受他们的成果。一、百度出品的UEditorUEditor是由百度web 前端研发部开发所见即所得富文本web编辑器,具有轻量,可定制,注重用户体验等特点,开源基于MIT协议,允许自由使用和修改代码。特别要说的是,头条号后台发布文章的编辑器就是用的UEditor!百度UEditorUEditor还有一个轻量版的,叫做UMeditor,简称UM。UM是为满足广大门户网站对于简单发帖框,或者回复框需求所定制的在线HTML编辑器。主要特点是容量和加载速度上的改变,主文件的代码量为139k,而且放弃了使用传统的iframe模式,采用了

div的加载方式,以达到更快的加载速度和零加载失败率。UM的第一个使用者是百度贴吧,以经受贴吧每天几亿的pv 的考验,功能设计应当是最优化的了。当然随着代码的减少,UM的功能对于UE来说还是有所减少,但也有增加,比如拖拽图片上传,chrome的图片拖动改变大小等。百度UEditor界面二、xhEditor开源HTML编辑器xhEditor是一个基于jQuery开发的简单迷你并且高效的可视化HTML编辑器,基于网络访问并且兼容IE 6.0+,Firefox 3.0+,Opera 9.6+,Chrome 1.0+,Safari 3.22+。xhEditor完全基于Javascript 开发,可以应用在任何的服务端语言环境下,例如:PHP、ASP、https://www.doczj.com/doc/e017400233.html,、JA V A等。可以在CMS、博客、论坛、商城等互联网平台上完美的嵌入运行,能够非常灵活简单的和您的系统实现完美的无缝衔接。 主要特点:精简迷你:初始加载4个文件,包括:1个js(50k)+2个css(10k)+1个图片(5k),总共65k。若js和css文件进行gzip压缩传输,可以进一步缩减为24k左右。使用简单:简单的调用方式,加一个class属性就能将textarea变成一个功能丰富的可视化编辑器。无障碍访问:提供WAI-ARIA全面支持,全键盘精细操作,全程语音向导,提供完美无障碍访问体验,充分满足残疾人的上网需求。内置Ajax上传:内置强大的Ajax上传,包括HTML4和HTML5上传支持(多文件上传、真实上传进度及文件拖放上传),剪切板上传及远程抓

ueditor1.4.3jsp utf-8版配置使用教程

Ueditor在线编辑器配置示例 1.简介 UEditor 是由百度「FEX前端研发团队」开发的所见即所得富文本web编辑器,具有轻量,可定制,注重用户体验等特点,开源基于MIT协议,允许自由使用和修改代码。 2.下载 首页地址:https://www.doczj.com/doc/e017400233.html,/website/index.html,点击下载,可以根据需要下载php、aps、jsp、.net版本。由于1.4版本和1.3版本内容变更较大,本例中使用了最新版本1.4.3.1 jsp utf-8 版本进行测试。 3.配置 下载ueditor后,放入系统的js库中,由于本例的相同功能的ewebeitor 放在webroot下,本例中也直接放入的webroot下,结构图如下:

首先配置通用配置的控制器路径,文件名为:ueditor.config.js。此文件配置需要对应下载的版本,即jsp版对应修改: serverUrl: URL + "jsp/controller.jsp" 修改了通用配置后,还需要修改对应的上传文件、图片等路径,我们需要根据我们配置的版本去设置对应目录的内容,jsp版本如下:

实际配置如下图: 下面还有对应图片、视频的配置,与图片配置类似。 4.问题 4.1jar问题

需要的jar都已在ueditor中包含,直接拷贝至项目的lib中并加入classpath中即可。 1.4.3版本需要commons-io- 2.4.jar支持。所以在buildpath中需要将该包放置靠前。 4.2拦截器问题 对于使用了Struts2或配置了其他拦截器的,需要将该请求放行如Struts2一般配置为: 对于此类会拦截jsp的请求的配置,可以根据项目需要, 1.改为*.action,*.do之类的请求匹配 2.加入自己的拦截器,如本例所配置的 com.linewell.core.filter.ExtendStrutsPrepareFilter中, 不解的可以参照: https://www.doczj.com/doc/e017400233.html,/krysml/article/details/9006533

数据结构-课程设计--简易文本编辑器

《数据结构》课程设计 班级: 10计本2班 姓名:邓寅森 学号: 2010305202 指导教师:杨老师 完成日期: 2011年12月

计算机科学与技术系课程设计评分表 课程名称: 数据结构 简易文本编辑器 教师签名: 日 期:

一、需求分析 1.1 问题描述 传统的纸质文档已经不能满足大家的需求,有容易丢失、查找不方便等缺点。计算机信息管理为人们的生活、工作提供了方便,提高了效率。“简易文本编辑器”是为了帮助老师、同学或其他一些需要使用文本编辑的人员进行管理和分析的一种计算机应用程序。 1.2 基本任务 通过用户调查分析及实际需求,系统需要实现如下基本任务:(1)输入数据信息建立文本; (2)查询文本中满足要求的信息; (3)插入新的信息到文本中; (4)删除不再需要的文本信息; (5) 查看所有的文本信息。 二、概要设计 为了完成需求分析的基本任务,主要从以下3个方面进行设计:2.1 主界面设计 为了实现简易文本编辑器的各项功能,设计了一个含有多个菜单项的主控菜单模块以操作系统的各项功能,以方便用户使用系统。

系统进入菜单运行界面如图所示: 简易文本编辑器主菜单 2.2 数据结构设计 系统采用线性表的顺序存储结构表示和存储“简易文本编辑器”中的信息。实现文本的输入,删除,插入,查找,显示功能。

2.3 系统功能设计 运行程序,提示进入菜单,按“回车键”进入主菜单,再可以在主菜单上进行各项操作。每次进入菜单,选择“1键”新建文本,然后才可以进行其他操作,或者按“0键”选择退出。 三、模块设计 3.1 模块设计 系统主要包含主程序模块和其它操作模块。其调用关系如图所示。 模块调用示意图 3.2 系统子模块及其功能设计 本系统共设计了16个子模块,各程序的函数名及功能说明如下: 1、/*由模式串nextval值*/ void GetNextval(SqVString T,int nextval[]) 2、/*模式匹配KMP算法*/ int KMPIndex(SqVString S,int pos,int next[],SqVString T) 3、/*初始化串*/ void InitString(SqVString *S,char *str) 4、/*串插入*/ int StrInsert(SqVString *S,int pos,SqVString T) 5、/*串删除*/

如何将UEditor部署到PHP程序上

UEditor是由百度WEB前端研发部开发的所见即所得的开源富文本编辑器,具有轻量、可定制、用户体验优秀等特点。开源基于BSD协议,所有源代码在协议允许范围内可自由修改和使用。最近在开发程序的时候需要集成一个富文本编辑器,UEditor的UI及UE比CKEditor、KindEditor要好出不少。所以简单地对UEditor研究了一下,记录于此。 一、下载UEditor编辑器 UEditor官方网站:https://www.doczj.com/doc/e017400233.html,/ 在下载频道可以下载到最新版本的UEditor UEditor的下载方式分为两种,完整下载与定制下载,完整下载提供UTF-8与GBK两种编码的版本,定制下载目前只有UTF-8编码,推荐使用定制下载,按需求定制,如果程序不是UTF-8编码,可以使用EditPlus等工具将压缩包里所有的HTML及JS文件转码,记得同时修改HTML文件中的charset=utf-8。 二、精简UEditor编辑器 完整版的相关文档与示例页面较多,可以自行研究一下,下面为定制版中可以精简的文件。 index.html是所定制的UEditor编辑器的示例文件,删除之。 editor.js与editor.min.js内容相同,editor.min.js是editor.js的压缩版,使用时加载editor.min.js 即可,所以editor.js也可以删除。 三、将UEditor部署到PHP程序上 1.将UEditor的所有文件放在PHP程序的目录中,这里我把文件放在/ueditor目录下。 2.在网页中引入UEditor文件 3.在textarea标签下初始化UEditor 四、配置UEditor编辑器 editor_config.js是UEditor的配置文件,首先对路径进行配置。

数据结构课程设计小型文本编辑器的设计

数据结构课程设计小型文本编辑器的 设计

沈阳航空航天大学 课程设计报告 课程设计名称:数据结构课程设计 课程设计题目:小型文本编辑器的设计 院(系):计算机学院 专业: 班级: 学号: 姓名: 指导教师:

目录 沈阳航空航天大学 ........................... 错误!未定义书签。 1 程序模块说明 ............................ 错误!未定义书签。 1.1程序模块............................. 错误!未定义书签。 1.2模块功能说明......................... 错误!未定义书签。 2 程序流程图说明 .......................... 错误!未定义书签。 2.1主函数流程图......................... 错误!未定义书签。 2.2显示模块流程图....................... 错误!未定义书签。 2.3查找模块流程图....................... 错误!未定义书签。 2.4替换模块流程图. ...................... 错误!未定义书签。 2.5将文本初始化......................... 错误!未定义书签。 3 函数的描述 .............................. 错误!未定义书签。 3.1串的初始化........................... 错误!未定义书签。 3.2查找函数............................. 错误!未定义书签。 3.3 替换函数........................... 错误!未定义书签。 3.4 串的块链存储....................... 错误!未定义书签。 4 程序测试和运行的结果..................... 错误!未定义书签。 4.1初始化一个串......................... 错误!未定义书签。

如何实现WORD文档自动导入网站数据库

如何实现WORD文档自动导入网站数据库 最近,本人在制作个人网站时发现,如何把手中的WORD文档快速的上传到自己的网站是个大问题。主要的拦路虎就是文档中嵌入的图片如何上传,秉承网人传统“不懂问百度”的精神,我在百度上搜了好久,发现这真的是一个好问题,现成的解决方法还是有的:首先有个台湾的编辑器在很久之前就解决了这个问题,它是eWebEditor,它的解决方案是在你的机器上安装一个浏览器插件,我试用了一下格式保留不错,图片正确上传。但很不幸它要收费,对于我辈屌丝来说,收费的东东用不起啊。而且在百度搜了下,听人说eWebEditor还存在很大的安全问题,所以自然就pass了。 还有一个是百度投资在搞的ueditor,可惜里面的导入功能现在还在测试,无法提供给我们使用,而且经过我的测试,它的导入功能无法导入.doc文档,只能支持.docx文档,当然它的导入功能还是很好使的,只不过受制于人不是我们的追求。所以我决定自己搞一个东西实现这个功能。 如何实现呢,解决方案有2个选择:客户端方案和服务端方案,由于我的个人网站时PHP语言,处理WORD文档的能力比较弱,经过我的搜索好像只有phpword提供这样的功能,但要处理这么麻烦的工作,它的能力还力有未逮。那么就用客户端方案了,想到WORD 的老东家是微软,所以我选择了C#作为开发语言,事实证明C#开发的确给我省了很多时间。下面我就开发过程说几点感想: 1、首先选择开发方案,我选择了一个最简单的开发方案:打开

WORD文档并把文档复制到剪贴板,C#程序读取剪贴板内容 并把图文上传到网站。这样的方案省却了操作WORD文件, 降低了编程难度。 2、解决核心问题,这个方案的核心问题是:读取剪贴板上的 HTML代码,上传HTML代码中的图片,替换HTML代码中 的图片链接。经过百度搜索发现,C#要实现这些功能都非常 简单,核心代码如下: 剪贴板读取HTML:Clipboard.GetData("Html Format"); 上传图片:myWebClient.UploadFile(“上传地址”, "POST", “上 传文件名”) 替换字符:str = str.Replace(strlist[i], webfilelist[i]); 3、确定了核心问题的解决方法,接下来就是代码的编写。代码如下: if (Clipboard.ContainsText(TextDataFormat.Html)) { System.IO.MemoryStream vMemoryStream = Clipboard.GetData("Html Format") as System.IO.MemoryStream; vMemoryStream.Position = 0; byte[] vBytes = new byte[vMemoryStream.Length]; vMemoryStream.Read(vBytes, 0, (int)vMemoryStream.Length); string str = Encoding.UTF8.GetString(vBytes); int ipos = str.IndexOf(""); str = str.Substring(ipos + 1); ipos = str.IndexOf(" strlist = new List(); while (ipos != -1) {

文本编辑《数据结构》上机实验报告

成都信息工程学院计算机系 课 程 实 验 报 告

一【上机实验目的】 要求功能与界面模拟WINDOWS记事本,支持鼠标,因为记事本功能较多,可以根据自己的能力模拟出部分功能,文本编辑这部分功能必须实现,主要利用串的知识。 二【实验环境】 PC机每人1台 三【上机实验内容】 要求功能与界面模拟WINDOWS记事本,支持鼠标,因为记事本功能较多,可以根据自己的能力模拟出部分功能,文本编辑这部分功能必须实现,主要利用串的知识。 四【上机调试程序流程图】(注:可打印) 在此程序中,主要包含了添加、插入、删除、复制、剪切、粘贴、还有文件操作。 五【上机调试中出现的错误信息、错误原因及解决办法】 1、开始的时候当我输入字符的时候,总是输不进去,经过检查才知道,我忘了把字符输出 到屏幕上。 2、在删除的时候,当一行删除完的时候,光标并不会上移到上一行。然后我通过判断当这 光标处的坐标减一后为零(表示这行没有字符了)的时候,然后重新读取光标,让光标显示在上一行。 3、在进行插入操作之后,移动光标会出现问题,就好像插入的字符并没有在链表当中一样。 然后我写了一个测试函数,来判断插入后链表是否满足每列的字符数不得超过80个字符。然后让每列的字符数都在链表当中,满足要求。 六【上机调试后的源程序及还存在的问题】(注:源程序可打印) /*文本编辑器editor源代码*/ #include #include

#include #include #define LEFT 0x4b00 /*←:光标左移*/ #define RIGHT 0x4d00 /*→:光标右移*/ #define DOWN 0x5000 /*↓键:光标下移*/ #define UP 0x4800 /*↑键:光标上移*/ #define ESC 0x011b /*ESC键:取消菜单打开操作*/ #define ENTER 0x1c0d /*回车键:换行*/ #define BACK 3592 /*BackSpace键:删除当前光标位置前一个字符*/ #define CL 29440 /*ctrl+←键:从右至左,选定文本*/ #define CR 29696 /*ctrl+→键:从左到右,选定文本*/ #define Cc 11779 /*ctrl+c键:将选定文本,复制一份到剪贴板中*/ #define Cv 12054 /*ctrl+v键:将剪贴板中的内容复制到当前位置*/ #define Cx 11544 /*ctrl+x键:对选定文本,执行剪切操作*/ #define F1 15104 /*F1键:打开文件菜单*/ #define F2 15360 /*F2键:打开编辑菜单*/ #define F3 15616 /*F3键:打开帮助菜单*/ int value,backup; /*value保存有值数组元素的最大下标值,backup保存value的副本,NUM保存当前行中的用户输入的字符个数*/ typedef struct record { char ch; /*保存一字符*/ int col, line; /*x轴和y轴坐标*/ }record; record r[500]; /*定义一个有500个元素的结构体数组,保存选定的文本字符的属性*/ typedef struct node /*定义保存行中的单个字符的结构*/ { char ch; /*数据域:保存一字符*/ struct node *next; /*指针域:指向下一个结点的指针*/ }node;/*由此类型节点构成的单链表,命名为:列单链表*/ typedef struct Hnode /*定义保存所有列单链表首节点的指针的结构*/ { node *next; /*指向列单链表的首节点的地址*/ struct Hnode *nextl; /*指向下一个节点的指针*/ }Hnode;/*由此类型节点构成的单链表,命名为:行单链表*/ void view(Hnode *q) /*按行显示保存在单链表中的文本字符,q为指向行单链表中第一个节点的指针*/ { node *p; /*p为保存列单链表节点元素地址的指针*/

相关主题
文本预览
相关文档 最新文档