《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]百度相关文章及程序实例