当前位置:首页 > 范文大全 > 整改报告 >

整改报告

《ASPNET实验报告》

2021-10-29 15:21:51整改报告
《ASPNET实验报告》word版本文关键词:实验,报告,ASPNET,word《ASPNET实验报

《ASPNET实验报告》word版 本文关键词:实验,报告,ASPNET,word

《ASPNET实验报告》word版 本文简介:实验1C#程序设计1(2学时)[实验目的]了解C#语言的特点。熟悉C#的开发环境。掌握用VS2008编写C#基本程序。[实验内容]1、循环实现:2、从键盘输入一行字符串,用数组来存放统计出的字母、数字、空格和其他字符个数。题一usingSystem;usingSystem.Collections.G

《ASPNET实验报告》word版 本文内容:

实验1

C#程序设计1(2学时)

[实验目的]

了解C#语言的特点。

熟悉C#的开发环境。

掌握用VS2008编写C#基本程序。

[实验内容]

1、循环实现:

2、从键盘输入一行字符串,用数组来存放统计出的字母、数字、空格和其他字符个数。

题一

using

System;

using

System.Collections.Generic;

using

System.Linq;

using

System.Text;

namespace

shiyan1

{

class

Program

{

static

void

Main(string[]

args)

{

int

x=2,y=1,a=0,b=0;

double

s

=

0,t

=

1.0;

for

(int

i

=

0;

i

<

10;

i++)

{

a

=

x

;

b

=

y;

s

+=t*

a

/

b;

x

=

a

+

b;

y

=

a;

t

=

-1.0

t;

}

Console.WriteLine(“s=“+s);

Console.ReadKey();

}

}

}

题二

public

static

void

Main()

{

int

letters

=

0,digits

=

0,spaces

=

0,others

=

0;

Console.WriteLine(“请输入一个字符串:

“);

string

input

=

Console.ReadLine();

foreach(char

chr

in

input)

{

if

(char.IsLetter(chr))

letters++;

else

if

(char.IsNumber(chr))

digits++;

else

if

(char.IsWhiteSpace(chr))

spaces++;

else

others++;

}

Console.WriteLine(“字母的个数为:

{0}“,letters);

Console.WriteLine(“数字的个数为:

{0}“,digits);

Console.WriteLine(“空格的个数为:

{0}“,spaces);

Console.WriteLine(“其他字符的个数为:

{0}“,others);

}

运行结果

实验2

C#程序设计2(2学时)

实验目的

了解C#数组的特点。

掌握C#交错数组的编程程序。

实验内容

1、存储和打印杨辉三角形(要求使用交错数组存储)。

输出格式如下:

[源代码]

using

System;

using

System.Collections.Generic;

using

System.Linq;

using

System.Text;

namespace

ConsoleApplication1

{

class

Program

{

static

void

Main(string[]

args)

{

const

int

k

=

12;

//杨辉三角的维数

/*存储杨辉三角*/

int[][]

a

=

new

int[k

+

1][];

for

(int

i

=

0;

i

<=

k;

i++)

{

a[i]

=

new

int[i

+

1];

for

(int

j

=

0;

j

<

i

+

1;

j++)

{

if

(i

==

0

||

j

==

0

||

i

==

j)

a[i][j]

=

1;

else

a[i][j]

=

a[i

-

1][j

-

1]

+

a[i

-

1][j];

}

}

/*打印杨辉三角*/

for

(int

i

=

0;

i

<=

k;

i++)

{

int

f

=

1;

int

t

=

0;

for

(int

j

=

0;

j

<

k

+

1

+

i;

j++)

{

if

(j

<

k

-

i)

Console.Write(““);

else

{

if

(f

==

1)

{

int

val

=

a[i][t++];

if

(val

<=

9)

Console.Write(““);

else

if

(val

<=

99)

Console.Write(““);

Console.Write(val.ToString());

f

=

0;

}

else

{

Console.Write(““);

f

=

1;

}

}

}

Console.Write(“/n“);

}

Console.ReadKey();

}

}

}

运行结果

实验3

ASP.NET

Form编程(2学时)

实验目的

了解ASP.NET

Form编程特点。

掌握ASP.NET标准控件和验证控件的编程。

实验内容

模拟一个求职网站的会员注册功能。

注册信息包括用户名(*)、密码(*)、确认密码(*)、出生日期(*)、Email(*)、专业和个人简介等。其中(*)为必填项目,密码长度必须为6位,两次密码必须相同,出生日期使用Calendar控件输入,Email必须符合Email格式,专业使用下拉列表选择。

然后在另一页面将会员注册信息显示出来。

【注】实验报告用相关控件的图(可手绘)和主要属性、代码进行描述。

在Default.aspx页面即注册页面添加以下代码:

protected

void

Button_Click(object

sender,EventArgs

e)

{

Session[“Name”]

=

name.Text;

Session[“Password”]

=

Password.Text;

Session[“Sex”]

=

Sex.Text;

Session[“Email”]

=

Email.Text;

Session[“Birthday”]

=

Birthday.Text;

Session[“Certificate”]

=

Certificate.Text;

Session[“Speciality”]

=

Speciality.Text;

Session[“Introdution”]

=

Introdution.Text;

Response.Redirect(“Default1.aspx”);

}

显示页面如下所示,为一系列label空间,其中右边的空间Text初始值都为空

在Default1.aspx页面及显示页面添加如下代码:

protected

void

Page_Load(object

sender,EventArgs

e)

{

Label1.Text

=

Session[“Name”].ToString();

Label2.Text

=

Session[“Password”].ToString();

Label3.Text

=

Session[“Sex”].ToString();

Label4.Text

=

Session[“Email”].ToString();

Label5.Text

=

Session[“Birthday”].ToString();

Label6.Text

=

Session[“Certificate”].ToString();

Label7.Text

=

Session[“Speciality”].ToString();

Label8.Text

=

Session[“Introdution”].ToString();

}

Label1.Text

=

Session[“Name”].ToString();

}

填入数据

点击注册按钮输出注册信息

实验4

ASP.NET页对象编程(2学时)

实验目的

了解ASP.NET页对象特点。

掌握ASP.NET

Session对象编程。

实验内容

模拟一个购物车功能:2个商品购买页面(可互相切换),一个购物车(显示购物列表)。其中商品购买页面包含商品的名称、单价和购买数量,购物车能统计商品的单价、购买数量和总价。

实验过程

按如下图所示的页面添加控件,其中购物车、更多商品为超链接,

分别为两个超链接的购买按钮添加事件响应

protected

void

Button_Click(object

sender,EventArgs

e)

{

Session[“counter1”]

=

(int)

Session

[“counter”]

+

Convert.ToInt32(TextBox1.Text);

Session

[“sum1”]

=

(int)

Session

[“counter”]*100;

}

protected

void

Button_Click(object

sender,EventArgs

e)

{

Session

[“counter2”]

=

(int)

Session

[“counter”]

+

Convert.ToInt32(TextBox1.Text);

Session

[“sum2”]

=

(int)

Session

[“counter”]*150;

}

如下图所示为购物车页面添加相应控件,其中继续购买为超链接

在购物车页面添加以下代码:

protected

void

Page_Load(object

sender,EventArgs

e)

{

Label1.Text

=

Session

[“Counter1”].ToString();

Label2.Text

=

Session

[“Counter2”].ToString();

Label3.Text

=

Session

[“Sum1”].ToString();

Label4.Text

=

Session

[“Sum2”].ToString();

}新建Global.aspx页面,并在相应函数中添加以下代码:

void

Application_Start(object

sender,EventArgs

e)

{

Session

[“Counter1”]

=

0;

Session

[“Counter2”]

=

0;

Session

[“Sum1”]

=

0;

Session

[“Sum2”]

=

0;

}

运行结果:

点击更多商品,进入商品2购买页面。输入购买数量2,点击购买

点击购物车,显示购买物品及总额,还可以继续点击购买,商品数量及总额会累加

实验5

ASP.NET数据处理技术(2学时)

实验目的

了解ASP.NET+SQL

Server数据库开发架构。

掌握ASP.NET数据源控件和数据绑定控件的基本编程。

实验内容

以下试验项目数据库可自拟。

1、带参数的查询

由Control指定查询参数

2、带参数的更新和删除

实验步骤:

1)创建数据库

创建test数据库(“添加新项“→“SQL数据库“)

由下列表结构创建表student

向student表添加记录

SNO

NAME

SEX

AGE

2005001

张三

18

2005002

李四

20

2005003

王丽

18

2)然后用SqlDataSource在VS中配置连接数据库

3)使用数据绑定控件GridView显示

2、带参数的查询

Select命令:

SELECT

SNO,NAME,SEX,AGE

FROM

student

WHERE

([email protected])

主要步骤:

(1)

打开数据库配置页面,配置select语句,选择student表,选中所有的列,然后单击右边的where按钮,配置查询语句的查询条件。

(2)

(2)进入添加where子句页面,将源配置为control,控件设置为TextBox1,SQL表达式填写为:[email protected],点击添加按钮

运行结果:

3、带参数的更新

Update命令:

UPDATE

student

SET

NAME

=

@name,SEX

=

@sex,AGE

=

@age

WHERE

(SNO

=

@sno)

主要步骤

1.

创建一个不带任何参数只含简单SELECT语句的SqlDataSource控件

2.

在SqlDataSource控件的UpdateQuery属性中设置Update命令。

单击查询生成器按钮

把SNO用筛选器设置其他属性用新值设置,单击确定按钮

3.

为Update参数指定参数源。

刷新参数,为每个参数指定参数源和默认值(如果需要),将参数源设置为QueryString

4、GridView控件要启用“启用编辑“运行结果

4、带参数的删除

Delete命令:

DELETE

FROM

student

WHERE

(SNO

=

@sno)

;

主要步骤

1.

创建一个不带任何参数只含简单SELECT语句的SqlDataSource控件

2.

在SqlDataSource控件的DeleteQuery属性中设置Delete命令。

刷新参数,为每个参数指定参数源和默认值(如果需要),将参数源设置为QueryString

3、GridView控件要启用“启用编辑“运行结果:

实验小结:

对于vs的快速建立web的实验中,我感受到了vs的可视化的强大,几乎不用写什么代码就可以完成web的编写,vs真是方便快捷,但是有很多使用技巧我还是不是很会,所以我打算以后多多了解和使用,提高编程的质量和效率

篇2:数据机构实验报告重要的

数据机构实验报告重要的 本文关键词:实验,机构,报告,数据

数据机构实验报告重要的 本文简介:淮北师范大学程序设计课程设计通讯录管理系统学院计算机科学与技术专业计算机科学与技术(师范)学号20091201019学生姓名葛晨晨指导教师姓名陈美荣2011年4月14日(一)设计目的要求任务n目的2解并掌握数据结构与算法的设计方法,具备初步的独立分析和设计能力;2件开发过程的问题分析、系统设计、程序

数据机构实验报告重要的 本文内容:

淮北师范大学

程序设计课程设计

通讯录管理系统

计算机科学与技术

计算机科学与技术(师范)

20091201019

葛晨晨

指导教师姓名

陈美荣

2011年4月14日

(一)

设计目的要求任务

n

目的

2

解并掌握数据结构与算法的设计方法,具备初步的独立分析和设计能力;

2

件开发过程的问题分析、系统设计、程序编码、测试等基本方法和技能;

2

合运用所学的理论知识和方法独立分析和解决问题的能力;

2

用系统的观点和软件开发一般规范进行软件开发,培养软件工作者所应具备的科学的工作方法和作风。

n

设计要求

2

核心数据结构用到的结构体要采用动态内存分配和链表结构。

2

不同的功能使用不同的函数实现(模块化),对每个函数的功能和调用接口要注释清楚。对程序其它部分也进行必要的注释。

2

对系统进行功能模块分析、画出总流程图和各模块流程图。

2

用户界面要求使用方便、简洁明了、美观大方、格式统一。

2

所有程序需调试通过。

n

任务

2

输入城镇的个数N,和一个N*N的矩阵A,其中元素aij表示城镇i和城镇j的实际距离。

2

求解能够连通所有城镇的最小公路集(即通过prim算法或者kruskal算法求解如何在N个城镇之间建设最少条(N-1)公路,且公路总里程最短,使得各个城镇之间可以相互到达)。

(二)

算法的基本思想

1)

运用结构体和链表

1.

使用如下结构来存储城镇以及城镇之间距离信息,是本程序的核心数据结构,定义如下:

typedef

struct

Road

{

int

marked;

/*修建公路标志*/

int

vertex1;

/*城镇a*/

int

vertex2;

/*城镇b*/

int

weight;

/*城镇a,b间距离*/

};

2.使用链表实现的存储,链表中结点结构定义如下:

typedef

struct

node

/*每个结点的数据结构*/

{

struct

Road

data;

/*数据域,放学生基本信息*/

struct

nodenext;

/*指针域*/

}Node,*Edge;

程序应具有以下基本功能:

(1)

输入一个二维数组An*n来表示每对城镇间的距离,并根据A建立相应的链表;

(2)

prim

和kruskal算法的求解最小生成树;

(3)

从指定的城镇出发,求解最小公路集,输出公路建设方案,并给出最短公路长度。

2)

定义一:图

图是有一个非空的顶点集合和一个描述顶点之间的关系即边的集合组成。它可以形式化的定义为:

G=(V,E)

V={

|

VertexType}

E={|,∈V∧P(,)

}

其中,G表示一个图,V是图G中顶点的集合,E是V中顶点偶对的有限集,这些顶点偶对称为边,VertexType是用于描述顶点类型,集合E中P(,)的含义是:对有向图来说用“”表示,对无向图来说用“()”表示,即从到

两个顶点之间存在边。

3)

定义二:邻接矩阵

是表示顶点之间相邻关系的矩阵。设G=(V,E)是一个图,其中V={v1,v2,…,vn}。G的邻接矩阵是一个具有下列性质的n阶方阵:(本文主要为无向图的邻接矩阵)

(1)

无向图的邻接矩阵是对称的;有向图的邻接矩阵可能是不对称的。

(1)无向图的邻接矩阵中第i行第j列表示i结点到j结点的度即权值,可以表示为某一具体应用的数据。也表示i结点是否与j结点连通。

4)

定义三:邻接表

是图的一种链式存储结构。在邻接表中,对图中每个顶点建立一个单链表,在第i个单链表中的结点表示依附于顶点vi的边每个结点由3个域组成,其中邻接点域指示与顶点vi邻接的点在途中的位置,链域指示下一条边或弧的结点;数据域存储和边和弧相关的信息。

5)

克鲁斯卡尔算法

设G=(V,E)是网络,最小生成树的初始状态为只有n个顶点而无边的非连通图T=(V,φ),T中每个顶点自成为一个连通分量。

将集合E中的边按权递增顺序排列,从小到大依次选择顶点分别在两个不同连通分量中的边加入图T,则原来的两个连通分量由于该边的连接而成为一个连通分量。

依次类推,直到T中所有顶点都在同一个连通分量上为止,该连通分量就是G的一棵最小生成树.

①初始时,T为只有6个顶点的非连通图。

②边(v1,v2)的两个顶点v1,v2分别属于两个连通分量,将边(v1,v2)加入T。

③同理,将边(v1,v3)加入T。

④由于边(v2,v3)的两个顶点v2,v3属于同一个连通分量,因此,舍去这条边。

⑤同理将边(v0,v1)、(v1,v5)加入T,边(v3,v5)舍去,边(v3,v4)加入T。

这时T中含的边数为5条,成为一个连通分量,T就是G的一棵最小生成树。

(三)

主要功能模块流程图

Krushal算法描述:

void

kruskal(ALGraph

G){

int

i,j,min=MAX,k=0,cost=0;//min用于记录最小权值

int

set[MAX_VERTEX_NUM];

//判断两个点是否在同一集合里

Nodep,*q,*s;

printf(“/n公路最优方案方案为:/n“);

printf(“起点

终点

路程/n“);

for(i

=

0;

inext)

//查找最小权值的边

if(p->data.weightdata.weight;

q=p;

j=i;

}

}

}

if(G.vertices[j].firstarc==q)

G.vertices[j].firstarc=q->next;

//if-else用于删除最小权值的边

else{

for(p=G.vertices[j].firstarc;p!=q;p=p->next)

s=p;

s->next=q->next;

}

if(set[j]!=set[q->data.marked])

{

//判断两点是否在同一集合,若不在,则输出这条边

printf(“%s------->%s

%d/n“,G.vertices[j].data.vertex1,G.vertices[q->data.marked].data.vertex1,q->data.weight);

cost=cost+q->data.weight;

k++;

set[j]=set[q->data.marked];

}

min=MAX;

//将min置为最大值

}printf(“/n公路总长为:%d/n“,cost);

}

(四)

系统测试

1.

初始界面运行界面如下

2.

输入城镇数和边数,按enter键输入个城镇的名称运行界面如下

3.

输入每条边的起点终点和距离运行界面如下

4.

按enter键输出结果得到邻接矩阵和公路最优方案的公路总长运行界面如下

5.

退出

(五)结论

利用数据结构中的克鲁斯卡尔算法求最小生成树,继而求的公路最优求解方案,得到了个城市之间的最短路径。

通过两周的数据结构课程实训,我不仅对图的概念有了一个新的认识,而且对算法和C语言有了更深的理解,在学习离散数学的时候,总觉得图是很抽象的东西,但是在学习了《数据结构》这门课后,我慢慢地体会到了其中的奥妙,图能够在计算机中存在,首先要捕捉他有哪些具体化、数字化的信息,比如说权值、顶点个数等,这也是说明了想要把生活中的信息转化成到计算机中必须用数字来完整的构成一个信息库,而图的存在,又涉及到了顶点之间的联系,图分为有向图和无向图,而无向图又是有向图在权值双向相等下的一种特例。在这次求可使构成n个城市的最小生成树的程序设计中,我采用了a[

i][

j]数组利用邻接矩阵方式来储存城市与城市间信息,再利用经典的克鲁斯克尔算法求得了最小生成树。

在这次课程设计中,我明白了编写一段代码,我们不仅要考虑它的可行性,更应该考虑它的算法复杂度,运行效率。做同一件事,一万个人有一万种做法,换而言之,一万个人写一段代码实现同一个功能可以得到一万段代码。由此,我们可以看出做一件事要精益求精,多加斟酌。

(六)、源程序及系统文件使用说明

#include

#include

#include

#define

MAX

100

#define

MAX_NAME

5

/*顶点值最大字符数*/

#define

MAX_VERTEX_NUM

20

/*最大顶点数*/

typedef

char

Vertex[MAX_NAME];/*(邻接矩阵用)顶点名字串*/

typedef

char

VertexType[MAX_NAME];/*(邻接链表用)顶点名字串*/

typedef

int

AdjMatrix[MAX_VERTEX_NUM][MAX_VERTEX_NUM];/*邻接距阵*/

typedef

struct

Road

{

int

marked;

/*修建公路标志*/

VertexType

vertex1;

/*城镇a*/

//int

vertex2;

/*城镇b*/

int

weight;

/*城镇a,b

间距离*/

}Road;

typedef

struct

node

/*每个结点的数据结构*/

{

struct

Road

data;

/*数据域,放学生基本信息*/

struct

nodenext;

/*指针域*/

}Node,*Edge;

/*表头向量的结点-------------------------*/

typedef

struct

VNode{

struct

Road

data;

//VertexType

data;

Nodefirstarc;

}VNode,AdjList[MAX_VERTEX_NUM];//定义图结点

/*链表带权图的结构信息-------------------*/

typedef

struct{

Vertex

vexs[MAX_VERTEX_NUM];

/*顶点向量*/

AdjMatrix

arcs;

/*邻接距阵*/

AdjList

vertices;

//城镇

int

vexnum,arcnum;

}ALGraph;//定义图

int

LocateVe(ALGraph

G,VertexType

u)//链表求出点u所在位置

{

int

i;

for(i=0;idata.marked=j;//初始化

p->data.weight=w;

p->next=G.vertices[i].firstarc;

//插表头

G.vertices[i].firstarc=p;

Nodeq

=

(Node)malloc(sizeof(Node));

q->data.marked=i;

q->data.weight=w;

q->next=G.vertices[j].firstarc;

G.vertices[j].firstarc=q;

}

printf(“所得到的邻接矩阵为:/n“);/*输出矩正*/

for

(i=0;inext)

//查找最小权值的边

if(p->data.weightdata.weight;

q=p;

j=i;

}

}

}

if(G.vertices[j].firstarc==q)

G.vertices[j].firstarc=q->next;

//if-else用于删除最小权值的边

else{

for(p=G.vertices[j].firstarc;p!=q;p=p->next)

s=p;

s->next=q->next;

}

if(set[j]!=set[q->data.marked])

{

//判断两点是否在同一集合,若不在,则输出这条边

printf(“%s------->%s

%d/n“,G.vertices[j].data.vertex1,G.vertices[q->data.marked].data.vertex1,q->data.weight);

cost=cost+q->data.weight;

k++;

set[j]=set[q->data.marked];

}

min=MAX;

//将min置为最大值

}printf(“/n公路总长为:%d/n“,cost);

}

void

main()

{

ALGraph

G;

CreateGraph(G);

kruskal(G);

}

参考文献

[1]《数据结构》(C语言版).严蔚敏

,吴伟民.清华大学出版社.2007

[2]《算法设计与分析》.张德富.国防工业出版社.2009

[3]《计算机算法与程序设计》.朱青.清华大学出版社.2009

[4]《C程序设计语言》.徐宝文,李志.机械工业出版社.2004

篇3:高级程序实验报告

高级程序实验报告 本文关键词:高级,实验,程序,报告

高级程序实验报告 本文简介:高级程序语言设计—记事本结业报告1.课程设计主要目的:本课程设计是高级程序语言设计学习中很重要的实践性环节之一,是在学习完高级程序语言课程后进行的一次全面的综合练习。旨在巩固加深学生对高级程序语言课程的基本知识的理解和掌握,掌握QT编程和程序调试的基本技能;利用QT进行基本软件的设计,提高运用高级程

高级程序实验报告 本文内容:

高级程序语言设计

—记事本

1.课程设计主要目的:

本课程设计是高级程序语言设计学习中很重要的实践性环节之一,是在学习完高级程序语言课程后进行的一次全面的综合练习。旨在巩固加深学生对高级程序语言课程的基本知识的理解和掌握,掌握QT编程和程序调试的基本技能;利用QT进行基本软件的设计,提高运用高级程序语言解决实际问题的基本能力。

2.技术任务及技术要求:

2.1主要任务

(1)根据要求分析题目。

(2)设计软件方案。包括:软件功能结构、各功能模块的详细描述、关键程序流程图等。

(3)使用C++语言,并结合QT

creator

设计界面,实现软件功能。

(4)调试、修改并完善程序。

(5)撰写课程设计报告。

2.2

技术要求

(1)文本文档的新建、打开、保存、另存为。

(2)文本内容的编写、修改和删除、查找替换、字体的选择。

(3)文本页面的设置、打印等功能。

(4)文本的撤销和删除等操作。

3.总体设计

3.1系统功能分析

(1)新建操作:用户可以根据需要,建立新的记事本文档,进行操作。

(2)打开操作:用户在可以打开任何文本内容进行操作。

(3)保存操作:用户在对文本操作进行以后,可以按照需求进行保存操作。

(4)撤销操作:若文本内容不符合用户的需求,可以撤销当前的操作。

(5)剪切操作:用户可以可按照需求,对需要的内容进行剪切,将其移植其他处。

(6)复制操作:移植的内容可以进行复制,这样更方便用户修改相应内容。

(7)粘贴操作:将要复制的内容进行粘贴。

(8)删除操作:删除不需要的内容。

(9)查找操作:该功能为了方便用户进行查找文本内容中需要的内容。

(10)替换操作:用户根据需要选择自己需要替换的内容,方便使用。

(11)全选操作:全选内容方便用户进行相应的剪切,复制,粘贴等内容。

(12)格式操作:用户可根据需求将文本内容进行字体设置。

(13)退出操作:用户不需要进行任何操作时候,可以退出。

3.2

设计目标

通过分析,主要实现如下目标:

(1)编写新建模块。用户新建任何文本文档。

(2)编写打开模块。用户可打开电脑中的任何文本文档。

(3)编写保存模块。保存已操作的文本内容。

(4)编写退出模块。退出记事本。

(5)编写撤销模块。撤销当前编辑的文本内容。

(6)编写剪切模块。将需要编辑的内容进行剪切。

(7)编写复制模块。复制用户选中的内容。

(8)编写粘贴模块。粘贴需要复制的内容。

(9)编写删除模块。删除选中的文本内容。

(10)编写查看模块。查找用户需要的内容。

(11)编写替换模块。替换文本中的一些内容。

(12)编写全选模块。选中需要进行操作的文本内容。

(13)编写格式模块。按照需求对文本内容进行相应设置。

3.3概要设计

本应用软件是简单的记事本,其能实现文件的新建、打开、保存、另存、退出,撤销、剪切、复制、粘贴、删除、全选、查找、替换,对字体进行设置。为实现这些功能,需要设置以下模块:

主模块如图3.1所示:

记事本

文件相关功能模块块

文档编辑模块

格式设置模块

图3.1主模块

文件相关功能模块如图3.2所示:

文件相关功能模块

新建

模块

打开

模块

保存

模块

另存

模块

退出

模块

图3.2

实现文件功能的模块

文档编辑模块如图3.3所示:

文档编辑模块

撤销

模块

剪切

模块

复制

模块

粘贴

模块

查找

模块

替换

模块

图3.3

文档编辑模块

格式设置模块如图3.4所示:

设置字体

设置字形

设置大小

格式设置模块

图3.4

格式设置模块

3.4详细设计

3.4.1文件模块的详细设计

3.4.1.1新建模块的详细设计

用户选择新建后,先检测当前的文本内容是否修改过。如果未修改过,则新建一个空文本文档。如果修改过,先弹出提示保存对话框,提示用户是否保存,如果选择“是”,先保存当前文本内容,再新建一个空文本文档。如果选择“否”,则直接新建一个空文本文档。如图4.1所示:

开始

新建文件

当前的文本内容是否修改过

设置一个新文本

结束

弹出提示保存对话框

是否保存

保存文件

图4.1

新建模块流程图

3.4.1.2打开模块的详细设计

用户选择打开时,先检测文件是否存在。如果存在,选择需要打开的文件,则文本区域内显示被选中文本的内容。如图4.2所示:

开始

打开或新建文件

保存或另存文件

文件内容是否修改

结束

开始

打开文件

文件是否存在

文本区显示文本内容

结束

图4.2

打开模块流程图

图4.3

保存、另存模块流程图

3.4.1.3保存、另存模块的详细设计

当用户选择保存或另存时,先检测文件内容是否修改过。如果修改过,保存对文档的修改。如图4.3所示:

3.4.1.4退出模块的详细设计

当用户选择退出时,弹出提示保存对话框,询问用户是否保持。如果选择“是”,先保存文档,再退出程序。如果选择“否”,直接退出程序。如图4.4所示:

是否已修改文本

结束

撤消上一步的操作

撤消

编辑/右键菜单

开始

打开文本

点击退出文件

开始

弹出提示保存对话框

是否保存

退出文件

保存文件

结束

图4.4

退出模块流程图

图4.5撤销模块流程图

3.4.2编辑模块的详细设计

3.4.2.1撤销模块的详细设计

打开一个文本文档,当用户选择编辑或右键弹出菜单中的撤消操作后,判断一个文本是否已被修改,若已修改,撤消上一步的操作,否则不进行任何操作。如图4.5所示:

4.2.2.2剪切模块的详细设计

打开一个文本文档,当用户选择编辑菜单或右键弹出菜单中的剪切操作后,判断一个文本是否被选中,若已选中,删除选中的文字,并将选中的文字传输到系统剪切板中,否则不进行任何操作。如图4.6所示:

开始

打开文本

编辑/右键菜单

复制

是否已选中文字

将选中文字传输到系统剪切板中

结束

开始

打开文本

编辑/右键菜单

剪切

是否已选中文字

删除选中文字并将其传到剪切板

结束

图4.6剪切模块流程图

图4.7复制模块流程图

3.4.2.3复制模块的详细设计

打开一个文本文档,当用户选择编辑菜单或右键弹出菜单中的复制操作后,判断一个文本是否被选中,若已选中,将选中的文字传输到系统剪切板中,否则不进行任何操作。如图4.7所示:

3.4.2.4粘贴模块的详细设计

运行程序,打开一个文本文档,在菜单栏上选中编辑菜单或者在文档中右键鼠标菜单,选中“粘贴”,判断文本文档是否进行了复制和剪切操作(即判断系统剪切板是否有内容),如果有就将剪切板的内容粘贴到光标处,没有就继续执行其他操作步骤。如图4.8所示:

是否已选中了内容

结束

删除选中

文本内容

删除

编辑/右键菜单

打开文本

开始

开始

打开文本

编辑/右键菜单

粘贴

是否已复制或剪切了内容

将系统剪切板中内容粘贴到文本中

结束

图4.8

粘贴模块流程图

图4.9删除模块流程图

3.4.2.5删除模块的详细设计

运行程序,打开一个文本文档,在菜单栏上选中编辑菜单或者在文档中右键鼠标菜单选中“删除”,程序判断文本文档是否有已选中的内容,如果有就将选中的内容删除掉,没有就执行其他操作。如图4.9所示:

3.4.2.6全选模块的详细设计

运行程序,打开一个文本文档,在菜单栏上选中编辑菜单或者在文档中右键鼠标菜单,选中“全选”,就选中了文本的所有内容。如图4.10所示:

开始

打开文本

编辑/右键菜单

全选

选中文本所有内容

结束

图4.10

全选模块流程图

3.4.2.7查找、替换模块的详细设计

查找、替换模块实现对文档中内容的查找和替换操作,方便用户查询所要查找的内容,加快对文档的编辑。首先在编辑菜单中设置菜单项“查找”和“替换”,然后增加菜单项的监听者,最后实现监听,即实现查找和替换功能。包括设置响应事件后弹出的对话框界面布局及对应功能按钮的事件处理。

用户运行程序后,先写入要编辑的文本或直接打开文件,然后点击编辑菜单中的“查找”,会弹出查找对话框。输入要查找的内容后点击“查找”按钮,若查找内容存在则显示出内容,若内容不存在则弹出对话框对用户进行提示。如图

4.11

所示:

点击编辑菜单中的“替换”,会弹出替换对话框。在文本框中分别输入要查找和替换的内容,然后点击“替换”按钮,若查找的内容存在则替换成功,若内容不存在则提示用户查找的内容不存在。如图

4.12

所示:

查找成功

查找不到

查找的内容

是否存在

查找

编辑菜单

打开文件

开始

结束

替换成功

查找不到

查找的内容

是否存在

替换

编辑菜单

打开文件

开始

结束

图4.11查找模块流程图

图4.12替换模块流程图

3.4.3格式模块的详细设计

格式菜单主要对编辑的文本文档进行字体设置方便用户的使用。在主函数中添加格式事件接听器,然后实现接听事件,并写出相应字体设置的用到调用函数,接着利用对话框对字体进行设置。最后,在对话框中实现对字体的设置。

用户首先打开任何文档文件,然后选择格式菜单里的字体,会出现对话框,对话框包括三个模块,第一个模块主要是字体,大小两个列表以及字形复选框,第二个模块是样例标签,方便用户预览选中字体,第三个模块是确定取消按钮模块,用户根据选择响应对应按钮。

选择对应按钮,用户所打开文本内容相应改变。如图4.12所示:

文本内容无任何改变

开始

打开文件

格式菜单

字体

字体

字形

大小

文本内容相应改变

结束

是否确定

图4.12退出模块流程图

4重要代码分析

有些细节已在程序之中详细备注

4.1全部链接函数

void

dispLineNum();//显示当前行数

void

on_action_About_triggered();//关于

void

on_action_Delete_triggered();//撤销

void

on_action_Quit_triggered();//退出

void

on_action_goToLine_triggered();//转到行

void

on_action_FindNext_triggered();//查找下一个

void

setAutoLine(bool);//自动换行

void

setNeedSave();//保存文件(自动命名)

void

on_action_SaveAs_triggered();//保存为

void

on_action_Create_triggered();//新建

void

on_action_Save_triggered();//保存

void

on_action_Open_triggered();//打开

void

on_action_Date_triggered();//日期/时间

void

on_action_PageSet_triggered();//页面设置

void

on_action_Print_triggered();//打印

void

on_action_Font_triggered();//字体

void

on_action_Find_triggered();//查找

void

on_action_Undo_triggered();//撤销

void

on_action_SelectAll_triggered();//全选

void

on_action_Redo_triggered();//恢复

void

on_action_Paste_triggered();//粘贴

void

on_action_Cut_triggered();//剪切

void

on_action_Copy_triggered();//复制

关于粘贴复制新建保存及字体的有关内容我们在以前已经学过,在这里就不再重复了,这次我们的记事本新加了查找替换功能,显示当前行数,自动换行,页面设置,打印等,所以仅做这些新功能的函数分析.

4.2查找替换

void

DialogFind::findNextUp(QString

text,Qt::CaseSensitivity

cs)//向上查找

{

if(cs==Qt::CaseSensitive)

this->mytextArea->find(text,QTextDocument::FindCaseSensitively|QTextDocument::FindBackward);

if(cs==Qt::CaseInsensitive)

this->mytextArea->find(text,QTextDocument::FindBackward);

}

void

DialogFind::findNextDown(QString

text,Qt::CaseSensitivity

cs)//向下查找

{

if(cs==Qt::CaseSensitive)

this->mytextArea->find(text,QTextDocument::FindCaseSensitively);

if(cs==Qt::CaseInsensitive)

this->mytextArea->find(text);

}

void

DialogFind::on_pushButton_Find_clicked()//查找

{

Qt::CaseSensitivity

cs;

if(ui->checkBox_Case->isChecked())

{

cs=Qt::CaseSensitive;

}

else

{

cs=Qt::CaseInsensitive;

}

if(ui->radioButton_Down->isChecked())

{

findNextDown(ui->lineEdit_Find->text(),cs);

}

else

if(ui->radioButton_Up->isChecked())

{

findNextUp(ui->lineEdit_Find->text(),cs);

}

}

void

DialogFind::on_checkBox_Replace_clicked(bool

checked)//替换触发

{

ui->groupBox_2->setVisible(checked);

}

void

DialogFind::on_lineEdit_Find_textChanged(QString

)//替换为(查找后选择替换)

{

if(ui->lineEdit_Find->text().isEmpty())

{

ui->pushButton_Find->setEnabled(false);

}

else

{

ui->pushButton_Find->setEnabled(true);

}

}

void

DialogFind::on_pushButton_Replace_clicked()//替换

{

if(this->mytextArea->textCursor().selectedText().isEmpty())

{

QMessageBox::information(this,“提醒“,“请先选中或者查找要替换的文本!“);

return

;

}

this->mytextArea->cut();

this->mytextArea->insertPlainText(ui->lineEdit_Replace->text());

4.3显示当前行数

void

SourceInsight::dispLineNum()//显示当前行数

{

ui->statusBar->showMessage(“当前位于第[

“+QString::number(ui->textEdit->textCursor().blockNumber()+1)+“]行“);

}

4.4自动换行

具体由Qt实现

void

SourceInsight::setAutoLine(bool

chlicked)//自动换行

{

if(chlicked)

{

ui->textEdit->setWordWrapMode(QTextOption::WrapAtWordBoundaryOrAnywhere);

}

else

{

ui->textEdit->setWordWrapMode(QTextOption::NoWrap);

}

}

4.5转到行

void

gotoTheLine::letGo(int

line)//转到行

{

QTextCursor

tc=this->mytextArea->textCursor();

tc.setPosition(0,QTextCursor::MoveAnchor);

tc.movePosition(QTextCursor::NextBlock,QTextCursor::MoveAnchor,line-1);

this->mytextArea->setTextCursor(tc);

}

void

gotoTheLine::setLineNum(int

num)//选择转到页

{

ui->spinBox->setRange(1,num);

}

void

gotoTheLine::on_pushButton_ok_clicked()

{

letGo(ui->spinBox->value());

this->hide();

}

4.6页面设置

void

SourceInsight::on_action_PageSet_triggered()//页面设置

{

QPrinter

printer;

QPageSetupDialog

pageSet(

pageSet.exec();//转页面设置

}

4.7打印

void

SourceInsight::on_action_Print_triggered()//打印

{

QPrinter

printer;

QPrintDialog

print(

print.exec();//转到打印程序

}

4.8查看日期/时间

QString

SourceInsight::getDateTime()//日期/时间

{

QDateTime

current;

current=QDateTime::currentDateTime

();//时间设置

return

current.toLocalTime().toString(“yyyy-MM-dd

hh:mm:ss“);//显示当前时间

}

4.9全选

void

SourceInsight::on_action_SelectAll_triggered()//全选

{

ui->textEdit->selectAll();

}

4.10关于

void

SourceInsight::on_action_About_triggered()//关于该记事本

{

Dialog_MyLogmyLog=new

Dialog_MyLog(this);

myLog->show();

}

5系统测试

5.1程序主界面

运行程序后,显示主界面如图5.1所示

4.1主界面

4.2文件界面

点击文件,显示文件菜单的各种功能,如图5.2所示:

4.2文件菜单

点击打开,出现以下对话框,如图5.3所示:

图4.3打开文件弹出菜单

打开一文件,如图4.4所示:

4.4

文字显示

点击另存为,弹出保存对话框,如图4.5所示:

通过复制或剪切操作获取的内容,粘贴到想要粘贴到的地方。对文件内容粘贴操作如图4.6所示:

图4.6选择粘贴

执行粘贴后,如图4.7所示:

图4.7执行粘贴

选中想要删除的内容,点击编辑菜单上的删除菜单项进行删除操作,具体步骤如图4.8所示:

4.8执行删除

选择编辑菜单中的全选操作,然后执行复制,粘贴,操作如下:

图4.9选择全选

图4.10执行全选

复制(以右键菜单完成),如图4.11所示:

图4.11选择复制

选中一段文字进行剪切操作,如图4.12所示:

图4.12选择剪切

执行撤销操作,如图4.13所示:

撤销后,如图4.14所示

执行恢复操作,如图4.15所示:

执行恢复操作后,如图4.16所示:

先打开要处理的文本文档,单击编辑菜单下的“查找/替换”,如图4.17所示:

然后在弹出的对话框中输入要查找的内容,并选择是向上还是向下查找,点击“查找”按钮,进行查询,若查找成功则显示内容,单击一次“查找”按钮,进行一次查找,此处为向下查找,如图4.18所示:

单击一次“查找”按钮,进行一次查找,此处为向下查找,若查找完毕则弹出对话框对用户进行提示,如图4.19所示:

选择菜单下的“替换”,如图4.20所示:

执行替换操作后,如图4.21所示:

点击字体显示如图,如图4.22所示:

执行操作后,如图4.23所示:

现在举例楷体和加粗的效果,如图4.24所示

点击查看操作,如图4.25所示:

执行操作后,如图4.26所示:

单击“确定”,效果如图4.27所示:

点击帮助选项,会出现小组名单,如图4.28所示:

5

总结

本程序是简单的记事本程序。主要实现以下功能:文件的新建、打开、保存、另存、退出,对文本内容的撤销、剪切、复制、粘贴、删除、查找、替换、设置字体格式。另外设置了新建,打开,保存,撤销,粘贴,查找,字体这些常用的操作都设置了快捷方式,该操作方便快捷,能满足用户的需求。而且字体格式部分简单单词并没有汉化,这就为同学们复习单词提供了环境。

这款针对大学生设计的记事本,确实做到了面面俱到,并没有在windows设计的原有轨迹上进行,这与我们设计者的精益求精是分不开的。

在设计过程中,遇到了很多问题,在老师细心的帮助下,终于实验成功,感谢老师的耐心解答,再次略表谢意,同时,本次记事本的制作,也参考了百度上的各种文献资料和程序参考,在这里就不一一描述了。

本课程设计是对所学《高级程序设计》知识的综合运用,是对学习成果的检验。通过记事本的设计与实现的课程设计,我们对QT设计软件有了一个全面、细致的认识,对面向对象的程序设计有了更深入的了解,为今后学习其他面向对象的程序设计打下了一个良好的基础。通过这次实训,我们遇到了很多困难,但小组成员都齐心合力,发现问题,解决问题,大家互帮互助,终于将这个任务完成。这确实是本学期的一大收获。

与windows的记事本对比,如图

参考文献:

[1]郑阿奇、陈超

《Qt4

开发实践》电子工业出版社2011.1

[2]Mark

Summerfield、白建平、王军峰、白净等

《Qt

高级编程》电子工业出版社2011.4

[3]Blanc

hette、Summerfield、闫锋欣译

《C++

GUI

Qt

4编程(第二版)》电子工业出版社2008.1

[4]吴迪

《零基础学Qt

4编程》北京航空航天大学出版社2010.7

[5]崔亚飞

《Qt

Creator快速入门》北京航空航天大学出版社2012.5

[6]李尊朝

《Java语言程序设计》

北京:中国铁道出版社,2004.2

[7]百度相关文章及程序实例

推荐访问:实验 报告 ASPNET