核数据处理课程设计

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

核工程与新能源技术系
课程设计报告
题目课程设计报告
系别核工程与新能源技术系
年级 2012级专业核工程与核技术
班级核技术3班学号 201220401XXX 学生姓名岳 X X
指导教师张艳丽职称讲师
所属课程核数据处理实验
设计时间 2014-11-16
课程设计独创性声明:
本课程设计是在老师指导下个人独立完成的。

学生签名:
课程设计评分标准(按教学大纲评定)
课程设计报告成绩:
平时成绩:
总成绩:
指导教师签名:
教研室主任签名:
实验中心主任签名:
目录
一、设计任务及目的页码
二、任务梗概页码
三、任务实现页码
1、设计内容一(计算器制作)页码
(1)任务要求页码(2)任务步骤页码(3)任务效果页码2、设计内容二(制作“输入数据”“显示图像”“五点平滑”
页码(1)任务要求页码(2)任务步骤页码(3)任务效果页码3、设计内容五(制作“左边界”“右边界”“寻峰”按钮)
页码(1)任务要求页码(2)任务步骤页码(3)任务效果页码4、设计内容六(制作左边界、右边界、寻峰、道址能量公式、能量刻度显示编辑框)页码(1)任务要求页码
(2)任务步骤页码(3)任务效果页码5、设计内容七(制作求总面积、本地面积、净面积与其编辑框)页码
(1)任务要求页码(2)任务步骤页码(3)任务效果页码6、设计内容八(菜单栏、工具栏、状态栏)页码(1)任务要求页码(2)任务步骤页码(3)任务效果页码四、设计总结(感受)页码
一、设计任务及目的
一、实验目的:
1、通过实验学会自主思考设计软件程序;
2、通过实验懂得如何运用一些软件完成程序设并实现预期功能;
3、在软件设计过程中逐步掌握能谱分析的基本过程;
4、通过设计知道怎样才能完成能谱的准确分析得出正确分析结果;
5、通过实验了解我们所运用能谱分析仪的工作过程,特别是其后部分能谱处理原理。

6、掌握图形程序的编写技巧。

二、实验要求:
1、自觉完成实验设计,不抄袭;
2、查阅资料,讨论、了解该设计性实验的实现基本过程;
3、能够团结同学,采纳同学的意见与分析方法、进行合理取舍;
4、运用软件程序完成能谱分析,并实现能谱的准确分析,做到能谱的数据获取、平滑、寻峰、刻度等
5、按时完成实验任务、上交实验成果。

三、实验任务:
1、通过实践培养学生实际动手能力,熟悉核数据处理的过程和方法,打下坚实的核物理实验及核数据处理基础,巩固C语言的学习。

二、任务梗概
1、C语言基础复习。

2、制作计算器。

3、读谱数据文件、保存光滑后的谱数据文件,文件名可选。

4、显示谱数据,各算法要以及函数方式实现、左右边界选取。

5、显示分析谱段范围内,寻得的各峰位道址、能量。

6、能量刻度。

7、显示寻峰级峰面积计算结果。

三、任务实现以
一、计算器制作
1、要求:
最低要求:能完成双精度型数值的加、减、乘、除计算;编程中使用了动态连接库技术.较高要求:能完成双精度型数值的加、减、乘、除计算;编程中使用了动态连接库技术;能实现表达式的输入,解析与计算。

2、步骤:
1、先建立一个工程,截图如下
2,然后制作计算器的界面
3,建立类向导写程序如下。

void CJmxjisuanqiDlg::Onjia() {
UpdateData(true);
m_Result=m_Firtn+m_Secn; UpdateData(false);
}
void CJmxjisuanqiDlg::Onjian() {
UpdateData(true);
m_Result=m_Firtn-m_Secn; UpdateData(false);
}
void CJmxjisuanqiDlg::Oncheng() {
UpdateData(true);
m_Result=m_Firtn-m_Secn; UpdateData(false);
}
void CJmxjisuanqiDlg::Onchu()
{
UpdateData(true);
m_Result=m_Firtn/m_Secn; UpdateData(false);
}
4,运行得到的的界面和结果
二、“输入数据”等按钮
通过对C语言文件相关函数的掌握并熟悉运用可以写出以下实验。

1、创立一个工程文件。

截屏如下:
2、对于按钮键编写属性和建立类向导,建立类向导的程序如下。

void CJMXDlg::Onduqushuju()
{
// TODO: Add your control notification handler code here
FILE *fp;
int datanum=0,data[2048];
float data_ph[2048];
int i;
int data1,data2;
if((fp=fopen("090623.txt","r"))==NULL)
{
printf("Cannot open the file.\n");
exit(0);
}
while(!feof(fp))
{
fscanf(fp,"%d %d",&data1,&data2);
data[datanum++]=data2;
fscanf(fp,"\n");
}
for(i=0;i<2048;i++)
{
if(i<2||i>2045)
data_ph[i]=data[i];
else
data_ph[i]=(data[i-2]+4*data[i-1]+6*data[i]+4*data[i+1]+data[i+2])*1.0/16.0;
printf("%f\n",data_ph[i]);
}
fclose(fp);
if((fp=fopen("OUT1.txt","w"))==NULL)
{
printf("file open error.\n");
exit(0);
}
for(i=0;i<2048;i++)
{
fprintf(fp,"%d %f\n",i+1,data_ph[i]);
}
fclose(fp);
注意:在编程时要把所给的数据文本文件要在所创立的文件下去编写程序。

所给的数据文本文件090623.txt。

编译连接。

点击读取数据按钮,然后打开生成的OUT1.txt文本文件
三、“显示图像”按钮建立工程
通过对按钮类向导建立类向导编程
1,对读取数据建立类向导。

void CxianshitupuDlg::Onduqushuju()
{
// TODO: Add your control notification handler code here
FILE *fp;
int datanum=0;
int i;
int data1,data2;
if((fp=fopen("090623.txt","r"))==NULL)
{ printf("Cannot open the file.\n");
exit(0);
}
while(!feof(fp))
{
fscanf(fp,"%d %d",&data1,&data2);
data[datanum++]=data2;
fscanf(fp,"\n");
}
for(i=0;i<2048;i++)
{if( i<2||i>2045)
data_ph[i]=data[i];
else
data_ph[i]=(data[i-2]+4*data[i-1]+6*data[i]+4*data[i+1]+data[i+2])*1.0/16.0;
printf("%d %f\n",i+1,data_ph[i]);
}
fclose(fp);
if((fp=fopen("out.txt","w"))==NULL)
{ printf("file open error.\n");
exit(0);
}
for(i=0;i<2048;i++)
{ fprintf(fp,"%d %f\n",i+1,data_ph[i]);
}
fclose(fp);
}
2.对显示原图普按钮建立内向导
void CXianshitupuDlg::OnY uantupu()
{
// TODO: Add your control notification handler code here
double xViewport,yViewport;
int max;
CWnd *pWnd=GetDlgItem(IDC_P1);
CDC *pDC =pWnd->GetDC();
pDC->SetMapMode(MM_ANISOTROPIC);
CRect rect;
double scale;
GetDlgItem(IDC_P1)->GetWindowRect(&rect);
scale=25.4*10/pDC->GetDeviceCaps(LOGPIXELSX);
CDC MemDC;
CBitmap MemBitmap;
MemDC.CreateCompatibleDC(NULL);
MemBitmap.CreateCompatibleBitmap(pDC,rect.Width(),rect.Height());
MemDC.FillSolidRect(0,0,rect.Width(),rect.Height(),RGB(255,255,255));
max=data[0];
for(int i=1;i<2048;i++)
{if (data[i]>max )
max=data[i];
for ( i = 0;i<2048;i++)
{
xViewport = (i+1)*rect.Width()/2048;
yViewport = (0.67*data[i]*rect.Height())/max+10;
pDC->SetPixel(xViewport,rect.Height()-yViewport-1,RGB(255,0,0));
pDC->BitBlt(0,0,rect.Width(),rect.Height(),&MemDC,0,0,SRCCOPY);
}
MemBitmap.DeleteObject();
MemDC.DeleteDC();
pDC->DeleteDC();
}
3.对显示五点平滑图谱建立内向导
void CXianshitupuDlg::OnXianshiwudian()
{
// TODO: Add your control notification handler code here
double xViewport,yViewport;
float max;
CWnd *pWnd=GetDlgItem(IDC_P2);
CDC *pDC =pWnd->GetDC();
pDC->SetMapMode(MM_ANISOTROPIC);
CRect rect;
double scale;
GetDlgItem(IDC_P2)->GetWindowRect(&rect);
scale=25.4*10/pDC->GetDeviceCaps(LOGPIXELSX);
CDC MemDC;
CBitmap MemBitmap;
MemDC.CreateCompatibleDC(NULL);
MemBitmap.CreateCompatibleBitmap(pDC,rect.Width(),rect.Height());
MemDC.FillSolidRect(0,0,rect.Width(),rect.Height(),RGB(255,255,255));
max=data_ph[0];
for(int i=1;i<2048;i++)
{if (data_ph[i]>max )
max=data_ph[i];
for ( i = 0;i<2048;i++)
{
xViewport = (i+1)*rect.Width()/2048;
yViewport = (0.67*data_ph[i]*rect.Height())/max+10;
pDC->SetPixel(xViewport,rect.Height()-yViewport-1,RGB(255,0,0));
}
pDC->BitBlt(0,0,rect.Width(),rect.Height(),&MemDC,0,0,SRCCOPY);
MemBitmap.DeleteObject();
MemDC.DeleteDC();
pDC->DeleteDC();
效果图
寻峰及道指换算
建立工程
1.对左边界建立内向导
void CxunfengjidaozhihuansuanDlg::Onzuobianjie()
{
// TODO: Add your control notification handler code here LButton_Clicked=1;
left_flag=1;
Left_x=x_old;
Left_y=y_old;
}
2.右边界五点寻峰建立内向导
void CxunfengjidaozhihuansuanDlg::Onyoubianjiewudianxunfeng() {
// TODO: Add your control notification handler code here
int i,j,xl,xr,max=0,maxi=0;
float newx;
CRect rect1;
CWnd *pWnd=GetDlgItem(IDC_P1);
pWnd->GetWindowRect(rect1);
ScreenToClient(&rect1);
CDC *pDC =pWnd->GetDC();
RButton_Clicked=1;
if(left_flag==1)
{ Right_x=x_old;
Right_y=y_old;
//GetDlgItem(IDC_P1)->GetWindowRect(&rect1);
xl=2048*(Left_x-rect1.left)/rect1.Width();
xr=2048*(Right_x-rect1.left)/rect1.Width();
for(i=xl+2;i<xr-1;i++)
{
if((data[i]-1.0*sqrt(data[i])>data[i-2]) && (data[i]-1.0*sqrt(data[i])>data[i+2]))
{
for(j=i-2;j<i+3;j++)
{
if( data[j]>max)
{
max=data[j];
maxi=j;
}
m_e3=maxi;
UpdateData(false);
}
}
}
newx=maxi*rect1.Width()/2048;
CDC *pDC =pWnd->GetDC();
CPen lpen(PS_SOLID,1,RGB(0,0,255));
CPen* pOldPen = pDC->SelectObject(&lpen);
//scale=25.4*10/pDC->GetDeviceCaps(LOGPIXELSX);
pDC->MoveTo(newx,0);
pDC->LineTo(newx,rect1.Height());
lpen.DeleteObject();
}
RButton_Clicked=0;
LButton_Clicked=0;
}
3.左道址建立内向导
void CxuanfengjidaozhihuansuanDlg::OnZuodaozhi()
{
// TODO: Add your control notification handler code here
CRect rect1;
int chx;
CWnd *pWnd=GetDlgItem(IDC_P1);
pWnd->GetWindowRect(rect1);
ScreenToClient(&rect1);
chx=2048*(x_old-rect1.left)/rect1.Width();
m_e1=chx;
UpdateData(false);
}
4.右道指建立内向导
void CxunfengjidaozhihuansuanDlg::OnYoudaozhi()
{
// TODO: Add your control notification handler code here CRect rect1;
int chx;
CWnd *pWnd=GetDlgItem(IDC_P1);
pWnd->GetWindowRect(rect1);
ScreenToClient(&rect1);
chx=2048*(x_old-rect1.right)/rect1.Width();
m_e2=chx;
UpdateData(false);
}
显示图谱的结果
五。

求峰面积
建立工作空间
1.读取数据,建立内向导
void CqiufengmianjiDlg::OnDuqushuju()
{
// TODO: Add your control notification handler code here
FILE *fp;
int datanum=0;
int i;
int data1,data2;
if((fp=fopen("090623.txt","r"))==NULL)
{ printf("Cannot open the file.\n");
exit(0);
}
while(!feof(fp))
{
fscanf(fp,"%d %d",&data1,&data2);
data[datanum++]=data2;
fscanf(fp,"\n");
}
for(i=0;i<2048;i++)
{if( i<2||i>2045)
data_ph[i]=data[i];
else
data_ph[i]=(data[i-2]+4*data[i-1]+6*data[i]+4*data[i+1]+data[i+2])*1.0/16.0;
printf("%d %f\n",i+1,data_ph[i]);
}
fclose(fp);
if((fp=fopen("out.txt","w"))==NULL)
{ printf("file open error.\n");
exit(0);
}
for(i=0;i<2048;i++)
{ fprintf(fp,"%d %f\n",i+1,data_ph[i]);
}
fclose(fp);
}
2.原始图谱,建立内向导
void CqufengmiangjiDlg::OnYuanshitupu()
{
// TODO: Add your control notification handler code here
double xViewport,yViewport;
int max;
CWnd *pWnd=GetDlgItem(IDC_P1);
CDC *pDC=pWnd->GetDC();
pDC->SetMapMode(MM_ANISOTROPIC);
CRect rect;
double scale;
GetDlgItem(IDC_P1)->GetWindowRect(&rect);
scale=25.4*10/pDC->GetDeviceCaps(LOGPIXELSX);
CDC MemDC;
CBitmap MemBitmap;
MemDC.CreateCompatibleDC(NULL);
MemBitmap.CreateCompatibleBitmap(pDC,rect.Width(),rect.Height()) ;
MemDC.FillSolidRect(0,0,rect.Width(),rect.Height(),RGB(255,255,255));
max=data[0];
for(int i=1;i<2048;i++)
{
if(data[i]>max)
max=data[i];
}
for(i=0;i<2048;i++)
{
xViewport=(i+1)*rect.Width()/2048;
yViewport=(0.67*data[i]*rect.Height())/max+10;
pDC->SetPixel(xViewport,rect.Height()-yViewport-1,RGB(255,0,0));
pDC->BitBlt(0,0,rect.Width(),rect.Height(),&MemDC,0,0,SRCCOPY);
}
MemBitmap.DeleteObject();
MemDC.DeleteDC();
pDC->DeleteDC;
}
3.显示五点平滑图谱。

建立内向导
void CqiufengmianjiDlg::Onxianshiwudianpinghuatupu()
{
// TODO: Add your control notification handler code here
double xViewport,yViewport;
float max;
CWnd *pWnd=GetDlgItem(IDC_P2);
CDC *pDC=pWnd->GetDC();
pDC->SetMapMode(MM_ANISOTROPIC);
CRect rect;
double scale;
GetDlgItem(IDC_P2)->GetWindowRect(&rect);
scale=25.4*10/pDC->GetDeviceCaps(LOGPIXELSX);
CDC MemDC;
CBitmap MemBitmap;
MemDC.CreateCompatibleDC(NULL);
MemBitmap.CreateCompatibleBitmap(pDC,rect.Width(),rect.Height());
MemDC.FillSolidRect(0,0,rect.Width(),rect.Height(),RGB(255,255,255));
max=data_ph[0];
for(int i=1;i<2048;i++)
{
if(data_ph[i]>max)
max=data_ph[i];
}
for(i=0;i<2048;i++)
{
xViewport=(i+1)*rect.Width()/2048;
yViewport=(0.67*data_ph[i]*rect.Height())/max+10;
pDC->SetPixel(xViewport,rect.Height()-yViewport-1,RGB(255,0,0));
}
pDC->BitBlt(0,0,rect.Width(),rect.Height(),&MemDC,0,0,SRCCOPY);
MemBitmap.DeleteObject();
MemDC.DeleteDC();
pDC->DeleteDC();
}
void CqiufengmianjiDlg::OnLButtonUp(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
// TODO: Add your message handler code here and/or call default CRect rect1;
CWnd *pWnd=GetDlgItem(IDC_P1);
pWnd->GetWindowRect(rect1);
ScreenToClient(&rect1);
CDC *pDC =pWnd->GetDC();
if (rect1.PtInRect(point))
{pDC->MoveTo(point.x-rect1.left,0);
pDC->LineTo(point.x-rect1.left,rect1.Height());
if(LButton_Clicked==0)
{CPen lpen(PS_SOLID, 1, RGB(255,255,255));
CPen* pOldPen = pDC->SelectObject(&lpen);
pDC->MoveTo(x_old-rect1.left,0);
pDC->LineTo(x_old-rect1.left,rect1.Height());
lpen.DeleteObject();
x_old=point.x;
y_old=point.y;}
else
LButton_Clicked=0;
x_old=point.x;
y_old=point.y;
}
CDialog::OnLButtonUp(nFlags, point);
}
4.左边界,建立内向导
void CqiufengmianjiDlg::OnZuobianjie()
{
// TODO: Add your control notification handler code here
LButton_Clicked=1;
left_flag=1;
Left_x=x_old;
Left_y=y_old;
}
5.五点寻峰,建立类向导
void CqiufengmianjiDlg::OnWudianxunfeng()
{
// TODO: Add your control notification handler code here
int i,j,xl,xr,max=0,maxi=0;
float newx;
CRect rect1;
CWnd *pWnd=GetDlgItem(IDC_P1);
pWnd->GetWindowRect(rect1);
ScreenToClient(&rect1);
CDC *pDC =pWnd->GetDC();
RButton_Clicked=1;
if(left_flag==1)
{ Right_x=x_old;
Right_y=y_old;
//GetDlgItem(IDC_P1)->GetWindowRect(&rect1);
xl=2048*(Left_x-rect1.left)/rect1.Width();
xr=2048*(Right_x-rect1.left)/rect1.Width();
for(i=xl+2;i<xr-1;i++)
{
if((data[i]-1.0*sqrt(data[i])>data[i-2]) && (data[i]-1.0*sqrt(data[i])>data[i+2]))
{
for(j=i-2;j<i+3;j++)
{
if( data[j]>max)
{
max=data[j];
maxi=j;
}
m_e3=maxi;
UpdateData(false);
}
}
}
newx=maxi*rect1.Width()/2048;
CDC *pDC =pWnd->GetDC();
CPen lpen(PS_SOLID,1,RGB(0,0,255));
CPen* pOldPen = pDC->SelectObject(&lpen);
//scale=25.4*10/pDC->GetDeviceCaps(LOGPIXELSX);
pDC->MoveTo(newx,0);
pDC->LineTo(newx,rect1.Height());
lpen.DeleteObject();
}
RButton_Clicked=0;
LButton_Clicked=0;
}
6.左道址,建立类向导
void CqiufengmianjiDlg::OnZuodaozhi()
{
// TODO: Add your control notification handler code here
CRect rect1;
int chx;
CWnd *pWnd=GetDlgItem(IDC_P1);
pWnd->GetWindowRect(rect1);
ScreenToClient(&rect1);
chx=2048*(x_old-rect1.left)/rect1.Width();
m_e1=chx;
UpdateData(false);
}
7.右道址,建立类向导void CShiyanDlg::OnYoudaozhi()
{
// TODO: Add your control notification handler code here
CRect rect1;
int chx;
CWnd *pWnd=GetDlgItem(IDC_P1);
pWnd->GetWindowRect(rect1);
ScreenToClient(&rect1);
chx=2048*(x_old-rect1.right)/rect1.Width();
m_e2=chx;
UpdateData(false);
}
8.求峰面积
void CqiufengmianjiDlg::Onjqiufengmianji()
{
// TODO: Add your control notification handler code here
int i,j,xl,xr,max=0,maxi=0;
float newx;
int L,R;
long double S=0;
long double B=0,A=0;
CRect rect1;
CWnd *pWnd=GetDlgItem(IDC_P1);
pWnd->GetWindowRect(rect1);
ScreenToClient(&rect1);
CDC *pDC =pWnd->GetDC();
RButton_Clicked=1;
if(left_flag==1)
{ Right_x=x_old;
Right_y=y_old;
xl=2048*(Left_x-rect1.left)/rect1.Width();
xr=2048*(Right_x-rect1.left)/rect1.Width();
for(i=xl+2;i<xr-1;i++)
{
if((data[i]-1.0*sqrt(data[i])>data[i-2]) && (data[i]-1.0*sqrt(data[i])>data[i+2]))
{
for(j=i-2;j<i+3;j++)
{
if( data[j]>max)
{
max=data[j];
maxi=j;
}
}
}
}
/**********************************************************************/ int l,r;
for(l=1;l<=(maxi-xl+1);l++)
{
if (data[maxi-l-2]>=(data[maxi-l]+1.5*sqrt(data[maxi-l])))
{
L=maxi-l;
goto LL1;
}
}
L=xl;
LL1:
for(r=1;r<=(xr-maxi+1);r++)
{
if (data[maxi+r+2]>=(data[maxi+r]+1.5*sqrt(data[maxi+r])))
{
R=maxi+r;
goto LL2;
}
}
R=xr;
LL2:
for(i=L;i<R+1;i++)
{
S=S+data[i];
}
B=(data[L]+data[R])*(R-L+1)/2.0;
A=S-B;
m_e4=A;
m_e5=S;
m_e6=B;
UpdateData(false);
/*********************************************************************/ newx=maxi*rect1.Width()/2048;
CDC *pDC =pWnd->GetDC();
CPen lpen(PS_SOLID, 1, RGB(0,0,255));
CPen* pOldPen = pDC->SelectObject(&lpen);
//scale=25.4*10/pDC->GetDeviceCaps(LOGPIXELSX);
pDC->MoveTo(newx,0);
pDC->LineTo(newx,rect1.Height());
lpen.DeleteObject();
}
RButton_Clicked=0;
LButton_Clicked=0;
效果图
四、设计总结
首先感谢张艳丽老师对我们的教导。

在整个课程设计过程中,每次在编程时理论遇到困难时,张艳丽老师都能及时给以指导和帮助,使得我的编程和论文能顺利进行。

本次的课程设计虽然结束了,但是努力学习并没有结束。

这是对我所学的课本知识的测验,也是对是对编程思想的强化。

课程设计是对所学知识的综合理解与应用,它不仅要求我们对C++软件特别熟悉,还让我懂得发现问题,分析问题,并解决问题可以提高自己的能力。

同时通过分析解决问题,加深对所学知识的理解与掌握。

通过这次课程设计我学到了很多的东西,在课设期间我几乎每天都认真思考更好的办法,将自己的想法通过编程实现。

很多时候我坚持认为自己的想法没有问题,但就是怎么也不能达到预期的结果。

当经过很多次的修改、重新运行,终于成功的那一刻,内心的成就
感和自豪感是那么的强烈。

相关文档
最新文档