东华大学信息学院软件设计报告.docx
- 文档编号:4421511
- 上传时间:2022-12-01
- 格式:DOCX
- 页数:20
- 大小:440.83KB
东华大学信息学院软件设计报告.docx
《东华大学信息学院软件设计报告.docx》由会员分享,可在线阅读,更多相关《东华大学信息学院软件设计报告.docx(20页珍藏版)》请在冰豆网上搜索。
东华大学信息学院软件设计报告
软件综合设计报告
东华大学信息科学与技术学院
目录
1、设计目的........................................1
2、实验环境........................................1
三、设计内容及要求..................................1
四、设计思想及原理..................................1
五、实验内容与源程序................................1
六、遇到的问题及其解决..............................14
七、收获与体会......................................14
一、设计目的
通过本课程设计实习,使学生在下列方面有所了解和提高:
1、掌握VisualBasic进行程序设计的基本思路和方法
2、能利用VisualBasic编程实现简单的任务
3、结合控制系统理论用VB进行计算机控制仿真
二、实验环境
运行MicrosoftVisualStudio2010和MicrosoftSQLServer2012的微机。
三、设计内容及要求
1、实现各种函数发生器并显示
1)基本要求:
实现下列函数发生器,正弦函数、方波函数、锯齿函数、三角函数,函数的生成参数都可以通过菜单设定,并且将生成的函数以图形方式实时显示在窗口中。
2)附加功能:
将系统的时间响应数据保存到数据库中,具体应包括下列属性:
时间,输出值。
将系统的历史响应重现。
使用Teechart控件作为显示输出。
四、设计思想及原理
先通过函数表达式的方式生成一个幅值为1,频率为1Hz的标准函数,调节函数的生成参数即调节幅值和频率时,使对相应的标准函数幅值和频率乘以相应的比例即可得到结果。
根据题目要求为了实现函数发生器各种要求,可采用多种方式和多种程序语言设计实现。
本次设计我主要使用C#语言在ASP.net基础上编写,网页发布后可以让用户远程使用,是网络化的一次尝试,另外使用SQLServer2012数据库存储实时数据,并能够实现数据查询等附加功能。
五、实验内容与源程序
1、功能模块分析
根据题目要求需要五个模块,分别是初始化、函数生成参数设定、生成函数实时显示、实时数据查询、Chart图显示。
函数生成参数设定模块主要设置生成函数类型、幅值和频率参数;生成函数实时显示主要根据参数设置生成对应的函数并保存到数据库中;实时数据查询主要实现从数据库查询并显示出来;Chart图主要实现从数据库查询坐标点并在Chart表上显示,将系统的历史响应重现;初始化主要将参数设置初始化以及数据库清空等功能。
综上所述,本次一共需要五个菜单,即两个主要网页(Function.aspx和ChartShow.aspx),分别实现初始化、函数生成参数设定、生成函数实时显示、实时数据查询、Chart图显示等功能。
2、源代码及运行结果分析
(一)、初始化模块:
1.源代码
protectedvoidButton2_Click(objectsender,EventArgse)
{
Timer1.Enabled=false;
//初始化参数设置菜单
TextBox10.Text="";
TextBox6.Text="";
DropDownList1.SelectedValue="选择函数类型";
//为防止数据库重复出错,初始化清空数据库内容
//从Web.Config文件提取连接字符串
ConnectionStringSettingsSettings;//定义连接字符串变量Settings
Settings=
ConfigurationManager.ConnectionStrings["DhuPID_WebConnectionString2"];
SqlConnectioncn=newSqlConnection(Settings.ConnectionString);
//声明和创建SqlConnection(建立与数据库的连接)对象
SqlCommandcmd=newSqlCommand();//对数据源执行命令
cn.Open();//打开数据库连接
//CommandText说明对数据源执行的SQL语句和存储过程名
cmd.CommandText="deletefromT_FunctionwhereFunType='1'orFunType='2'or
FunType='3'orFunType='4'";
cmd.Connection=cn;//定义cmd所使用的数据库连接为cn
cmd.ExecuteNonQuery();//执行CommandText的制定的操作
cn.Close();//关闭与数据库连接
GridView2.Visible=false;//为了界面美观,无数据的GridView不可见
}
2.运行结果
图1初始化界面
解释:
和一般网页类似,红星代表必填项,函数类型下拉选择,默认为正弦函数,在这里可以设置函数发生器的幅值和频率。
(二)、函数生成参数设定模块
1.源代码
见下一页生成函数实时显示源程序。
2.运行结果
图2初始化界面进行参数设置
(三)、生成函数实时显示
1.源代码
protectedvoidButton1_Click(objectsender,EventArgse)
{
Timer1.Enabled=true;
stringTxtAmplitude=TextBox10.Text.Trim();//幅值
amplitude=float.Parse(TxtAmplitude);
stringTxtFrequency=TextBox6.Text.Trim();//频率
frequency=float.Parse(TxtFrequency);
stringTxtVary=DropDownList1.SelectedValue;//函数类型
stringstr0="选择函数类型";
stringstr1="正弦函数";
stringstr2="方波函数";
stringstr3="锯齿函数";
stringstr4="三角函数";
intCompareType;
CompareType=String.Compare(TxtVary,str0,false);//默认为正弦波
if(CompareType==0)
Type=1;
CompareType=String.Compare(TxtVary,str1,false);
if(CompareType==0)
Type=1;
CompareType=String.Compare(TxtVary,str2,false);
if(CompareType==0)
Type=2;
CompareType=String.Compare(TxtVary,str3,false);
if(CompareType==0)
Type=3;
CompareType=String.Compare(TxtVary,str4,false);
if(CompareType==0)
Type=4;
Bitmapimg=newBitmap(1000,1000);//创建Bitmap对象,像素数据定义
MemoryStreamstream=draw();//IO.MemoryStream创建其支持存储区为内存的流
img.Save(stream,ImageFormat.Jpeg);//保存绘制的图片
Response.Clear();//清除缓冲区流中的所有内容输出
Response.ContentType="image/jpeg";//设置或获取输出流HTTPMIME类型
Response.BinaryWrite(stream.ToArray());//将一个二进制字符串写入HTTP输出流
}//调用,创建其支持存储区为内存的流
publicMemoryStreamdraw()
{
Bitmapimg=newBitmap(1000,1000);//创建Bitmap对象
//classSystem.Drawing.Graphics封装一个GDI+绘图图面
Graphicsg=Graphics.FromImage(img);//创建Graphics对象
//classSystem.Drawing.Pen定义用于绘制直线和曲线的对象
PenBp=newPen(Color.Black);//定义黑色画笔
PenRp=newPen(Color.Red);//红色画笔
PenSp=newPen(Color.Blue);//蓝色
//System.Drawing.Drawing2D.AdjustableArrowCap表示可调整的箭头形状的线帽
AdjustableArrowCapaac;//定义箭头帽
aac=newSystem.Drawing.Drawing2D.AdjustableArrowCap(4,6);
//CustomLineCapPen.CustomStartCap此Pen绘制的直线起点使用的自定义线帽
Sp.CustomStartCap=aac;//开始端箭头帽
//Drawing.Font定义特定的文本格式,包括字体、字号和字形属性
FontBfont=newFont("Arial",12,FontStyle.Bold);//大标题字体
Fontfont=newFont("Arial",6);//一般字
FontTfont=newFont("Arial",9);//较大字体
//DrawRectangle(Penpen,intx,inty,intwidth,intheight)
//绘制由坐标对、宽度和高度指定的矩形
G.DrawRectangle(newPen(Color.White,1200),0,0,img.Width+100,img.Height+100);
//LinearGradientBrush.LinearGradientBrush(Rectanglerect,Colorcolor1,Color
//color2,floatangle,boolisAngleScaleable)
LinearGradientBrushbrush=newLinearGradientBrush(newRectangle(0,0,
img.Width,img.Height),Color.Black,Color.Black,1.2F,true);//黑色过度型笔刷
LinearGradientBrushBluebrush=newLinearGradientBrush(newRectangle(0,0,
img.Width,img.Height),Color.Blue,Color.Blue,1.2F,true);//蓝色过渡型笔刷
//voidGraphics.DrawString(Strings,Fontfont,Brushbrush,floatx,floaty)
//在指定位置并且用指定的Brush和Font对象绘制指定的文本字符串
g.DrawString("函数发生器",Bfont,brush,500,100);//绘制大标题
//voidGraphics.DrawRectangle(Penpen,intx,inty,intwidth,intheight)
g.DrawRectangle(Bp,0,0,img.Width,img.Height-40);
//横坐标轴
g.DrawLine(Sp,980,500,100,500);
//横坐标数字
g.DrawString("1",font,brush,220,515);
g.DrawString("2",font,brush,340,515);
g.DrawString("3",font,brush,460,515);
g.DrawString("4",font,brush,580,515);
g.DrawString("5",font,brush,700,515);
g.DrawString("6",font,brush,820,515);
//voidGraphics.DrawLine(Penpen,intx1,inty1,intx2,inty2)绘制一条连接由
//坐标对指定的两个点的线条
//横轴标识线
g.DrawLine(Bp,220,500,220,510);
g.DrawLine(Bp,340,500,340,510);
g.DrawLine(Bp,460,500,460,510);
g.DrawLine(Bp,580,500,580,510);
g.DrawLine(Bp,700,500,700,510);
g.DrawLine(Bp,820,500,820,510);
//纵坐标轴
g.DrawLine(Sp,100,90,100,850);
//纵坐标数字
g.DrawString("0.5",font,brush,115,475);
g.DrawString("1.0",font,brush,115,450);
g.DrawString("1.5",font,brush,115,425);
g.DrawString("2.0",font,brush,115,400);
g.DrawString("2.5",font,brush,115,375);
g.DrawString("3.0",font,brush,115,350);
g.DrawString("-0.5",font,brush,115,525);
g.DrawString("-1.0",font,brush,115,550);
g.DrawString("-1.5",font,brush,115,575);
g.DrawString("-2.0",font,brush,115,600);
g.DrawString("-2.5",font,brush,115,625);
g.DrawString("-3.0",font,brush,115,625);
//纵轴标识线
g.DrawLine(Bp,100,475,110,475);
g.DrawLine(Bp,100,450,110,450);
g.DrawLine(Bp,100,425,110,425);
g.DrawLine(Bp,100,400,110,400);
g.DrawLine(Bp,100,375,110,375);
g.DrawLine(Bp,100,350,110,350);
g.DrawLine(Bp,100,525,110,525);
g.DrawLine(Bp,100,550,110,550);
g.DrawLine(Bp,100,575,110,575);
g.DrawLine(Bp,100,600,110,600);
g.DrawLine(Bp,100,625,110,625);
g.DrawLine(Bp,100,625,110,625);
ConnectionStringSettingsSettings;
Settings=
ConfigurationManager.ConnectionStrings["DhuPID_WebConnectionString2"];
/***************正弦波发生函数*************************/
if(Type==1)
{
Write11=0;Write12=0;
for(doublei=0;i<=15;)
{
PointX_1=(float)i;
PointY_1=(float)((Math.Sin(frequency*i*3.14))*amplitude);
Write11=(100+60*i);
Write12=500-50*(Math.Sin(frequency*i*3.14))*amplitude;
Write21=(100+60*(i+0.01));
Write22=500-50*(Math.Sin(frequency*(i+0.01)*3.14))*amplitude;
g.DrawLine(Bp,(float)Write11,(float)Write12,(float)Write21,(float)Write22);
i=i+0.01;
/***********时间响应数据保存到数据库*****************************/
SqlConnectioncn1=newSqlConnection(Settings.ConnectionString);
SqlCommandcmd1=newSqlCommand();
cn1.Open();
cmd1.CommandText="insertintoT_Function(FunType,Amplitude,Frequency,PointX,
PointY)values('1','"+amplitude+"','"+frequency+"','"+PointX_1+"','"
+PointY_1+"')";
cmd1.Connection=cn1;
cmd1.ExecuteNonQuery();
cn1.Close();
}
}
/***************方波发生函数*************************/
if(Type==2)
{
for(doublei=0;i<=60;)
{
PointX_1=(float)(i/frequency);
PointY_1=(-amplitude);
Write11=(100+60*i/frequency);
Write12=500-50*amplitude;
Write21=(100+60*(i+1)/frequency);
Write22=500-50*amplitude;
g.DrawLine(Bp,(float)Write11,(float)Write12,(float)Write21,(float)Write22);
Write11=(100+60*(i+1)/frequency);
Write12=500-50*amplitude;
Write21=(100+60*(i+1)/frequency);
Write22=500+50*amplitude;
g.DrawLine(Bp,(float)Write11,(float)Write12,(float)Write21,(float)Write22);
Write11=(100+60*(i+1)/frequency);
Write12=500+50*amplitude;
Write21=(100+60*(i+2)/frequency);
Write22=500+50*amplitude;
g.DrawLine(Bp,(float)Write11,(float)Write12,(float)Write21,(float)Write22);
Write11=(100+60*(i+2)/frequency);
Write12=500+50*amplitude;
Write21=(100+60*(i+2)/frequency);
Write22=500-50*amplitude;
g.DrawLine(Bp,(float)Write11,(float)Write12,(float)Write21,(float)Write22);
/**************时间响应数据保存到数据库*******************/
SqlConnectioncn4=newSqlConnection(Settings.ConnectionString);
SqlCommandcmd4=newSqlCommand();
cn4.Open();
cmd4.CommandText="insertintoT_Function(FunType,Amplitude,Frequency,
PointX,PointY)values('2','"+amplitude+"','"+frequency+"',
'"+PointX_1+"','"+PointY_1+"')";
cmd4.Connection=cn4;
cmd4.ExecuteNonQuery();
cn4.Close();
i=i+2;
}
}
/***************锯齿波发生函数*************************/
if(Type==3)
{
for(doublei=0;i<=60;)
{
PointX_1=(float)(i*2/frequency);
PointY_1=(-amplitude);
Write11=(100+60*i*2/frequency);
Write12=500+50*amplitude;
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 东华 大学 信息 学院 软件设计 报告