手把手教您用MFC做MP3音乐播放器

手把手教您用MFC做MP3音乐播放器
手把手教您用MFC做MP3音乐播放器

打开vc6.0,建立如图所示mfc工程文件

选择基于对话框的确定

删除所有空间,建立如图所示对话框

属性如下:

播放IDC_open;

添加IDC_fileopen;

暂停IDC_pause;

删除IDC_del;

停止IDC_stop;

退出IDC_exit;

音乐名编辑框IDC_filename;音量控制滑块IDC_SLIDER1;音量控制编辑框IDC_vol;

建立类向导对应如下:

在工程文件,右键,插入,bitmap位图

引入你想插入的背景图,必须是bmp格式的

进入你的dlg.cpp文件

在onpaint函数下添加代码

void CMp3Dlg::OnPaint()

{

if (IsIconic())

{

CPaintDC dc(this); // device context for painting

SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);

// Center icon in client rectangle

int cxIcon = GetSystemMetrics(SM_CXICON);

int cyIcon = GetSystemMetrics(SM_CYICON);

CRect rect;

GetClientRect(&rect);

int x = (rect.Width() - cxIcon + 1) / 2;

int y = (rect.Height() - cyIcon + 1) / 2;

// Draw the icon

dc.DrawIcon(x, y, m_hIcon);

}

else

{

//CDialog::OnPaint();

CPaintDC dc(this);

CRect rect;

GetClientRect(&rect);

CDC dcMem;

dcMem.CreateCompatibleDC(&dc);

CBitmap bmpBackground;

bmpBackground.LoadBitmap(IDB_BITMAP6); /IDB_BITMAP6是你的位图地址

BITMAP bitmap;

bmpBackground.GetBitmap(&bitmap);

CBitmap *pbmpOld=dcMem.SelectObject(&bmpBackground);

dc.StretchBlt(0,0,rect.Width(),rect.Height(),&dcMem,0,0,bitmap.bmWidth,bitmap.bmHeight ,SRCCOPY);

}

}

编译运行,你就会看到背景有图片了。

插入-类,找到geneticclass,类名mp3.cpp

你会发现在头文件中多了一个mp3.h文件

在mp3.h文件中添加代码如下

// Mp3.h: interface for the Mp3 class.

//

//////////////////////////////////////////////////////////////////////

#if !defined(AFX_MP3_H__20D325E5_A96A_43FE_A485_92F57C68DD0D__INCLUDED_)

#define AFX_MP3_H__20D325E5_A96A_43FE_A485_92F57C68DD0D__INCLUDED_

#if _MSC_VER > 1000

#pragma once

#endif // _MSC_VER > 1000

#include "Mmsystem.h"

class Mp3

{

public:

Mp3();

virtual ~Mp3();

HWND m_hWnd; //????μ±?°′°?úμ???±ú

DWORD DeviceID;//???¨2¥·?ò?à?μ?éè±?ID

MCI_OPEN_PARMS mciopenparms; //???¨′ò?aò?à????tμ?2?êy

void Load(HWND hwnd,CString Strfilepath);

DWORD getinformation(DWORD item);

void Play();

void Pause();

void resum();

void Stop();

};

#endif // !defined(AFX_MP3_H__20D325E5_A96A_43FE_A485_92F57C68DD0D__INCLUDED_) 在mp3.cpp中添加如下代码

// Mp3.cpp: implementation of the Mp3 class.

//

//////////////////////////////////////////////////////////////////////

#include "stdafx.h"

#include "Mp32¥·??÷.h"

#include "Mp3.h"

#ifdef _DEBUG

#undef THIS_FILE

static char THIS_FILE[]=__FILE__;

#define new DEBUG_NEW

#endif

//////////////////////////////////////////////////////////////////////

// Construction/Destruction

//////////////////////////////////////////////////////////////////////

Mp3::Mp3()

{

}

Mp3::~Mp3()

{

}

void Mp3::Load(HWND hwnd,CString Strfilepath)

{

m_hWnd=hwnd;

mciSendCommand(DeviceID,MCI_CLOSE,0,0); //?ó?????t?°?è??3yé?′?éè??

mciopenparms.lpstrElementName=Strfilepath;//??ò?à????t?·??′???éè±?

DWORD dwReturn;

if

(dwReturn=mciSendCommand(NULL,MCI_OPEN,MCI_OPEN_ELEMENT|MCI_WAIT,(DWORD)(LPV OID)&mciopenparms))

{

//è?1?′ò?a꧰ü£???3?′íD??¢′??úbuffer2¢??ê?3?′í?ˉ??

char buffer[256];

mciGetErrorString(dwReturn,buffer,256);

MessageBox(hwnd,buffer,"3?′í?ˉ??",MB_ICONHAND|MB_ICONERROR|MB_ICONSTOP);

}

DeviceID=mciopenparms.wDeviceID; //?à??ì?éè±?ààDí±ào?

}

DWORD Mp3::getinformation(DWORD item)

{

//MCI?ó?ú???óμ?×′ì?

MCI_STATUS_PARMS mcistatusparms;

//′y??è?μ?????

mcistatusparms.dwItem=item;

mcistatusparms.dwReturn=0;

//???à??ì?éè±?·¢?í??á?£???è?μ±?°μ?×′ì?2?êy

mciSendCommand(DeviceID,MCI_STATUS,MCI_STATUS_ITEM,(DWORD)&mcistatusparms);

return mcistatusparms.dwReturn;

}

void Mp3::Play()

{

MCI_PLAY_PARMS mciplayparms;

mciplayparms.dwCallback=(DWORD)m_hWnd;

mciplayparms.dwFrom=0; //??′?′óí·2¥·?

mciSendCommand(DeviceID,MCI_PLAY,MCI_FROM|MCI_NOTIFY,(DWORD)(LPVOID)&mcipla yparms);

}

void Mp3::Pause()

{

mciSendCommand(DeviceID,MCI_PAUSE,0,0);

}

void Mp3::resum()

{

mciSendCommand(DeviceID,MCI_RESUME,0,0);

}

void Mp3::Stop()

{

mciSendCommand(DeviceID,MCI_STOP,0,0);

mciSendCommand(DeviceID,MCI_CLOSE,0,0);

}

在dlg.cpp文件的public中添加一行代码:int hour,minute,second;

在CMp3Dlg::CMp3Dlg(CWnd* pParent /*=NULL*/)中添加如下

CMp3Dlg::CMp3Dlg(CWnd* pParent /*=NULL*/)

: CDialog(CMp3Dlg::IDD, pParent)

{

//{{AFX_DATA_INIT(CMp3Dlg)

m_int = 0;

//}}AFX_DATA_INIT

// Note that LoadIcon does not require a subsequent DestroyIcon in Win32

m_hIcon = AfxGetApp()->LoadIcon(IDI_ICON1);

hour=0;minute=0;second=0;

}

dlg.cpp中头文件如下:

#include "stdafx.h"

#include "Mp32¥·??÷.h"

#include "Mp32¥·??÷Dlg.h"

#include "Mmsystem.h"

#include "Digitalv.h"

#include "Mp3.h" //ò?á?????ó?μ?

#pragma comment(lib,"Winmm.lib")

#ifdef _DEBUG

#define new DEBUG_NEW

#undef THIS_FILE

static char THIS_FILE[] = __FILE__;

#endif

在对话框中双击添加添加onfileopen函数,代码如下

void CMp3Dlg::Onfileopen()

{

char filefiler[]="mp3文件(*.mp3)|*.mp3|"

"wma文件(*.wma)|*.wma|"

"wav文件(*.wav)|*.wav|";

CFileDialog

dlg(true,NULL,NULL,OFN_HIDEREADONLY|OFN_ALLOWMULTISELECT|OFN_ENABLESIZING,filefile r);

if (dlg.DoModal()==IDOK)

{

CString strfilepath=dlg.GetPathName();

CString strfilename=dlg.GetFileName();

SetDlgItemText(IDC_filename,strfilename);

CString mtime;

CClientDC dc(this);

hour=0;minute=0;second=0;

dc.SetBkColor(RGB(124,252,0));//设置放置计数器区域的外观

dc.SetTextColor(RGB(255,255,203));//设置数字显示的颜色

mtime.Format("%02d:%02d:%02d",hour,minute,second);//显示时间进度

dc.TextOut(280,128,mtime);

Mp3 mp3;

mp3.Load(this->m_hWnd,strfilepath);

GetDlgItem(IDC_open)->EnableWindow(TRUE);

GetDlgItem(IDC_pause)->EnableWindow(TRUE);

GetDlgItem(IDC_stop)->EnableWindow(TRUE);

GetDlgItem(IDC_del)->EnableWindow(TRUE);

m_list.InsertString(m_list.GetCount(),strfilename);//获取文件名

m_list.SetCurSel(m_list.GetCount()-1);

}

双击播放,进入代码,添加如下

void CMp3Dlg::Onopen()

{

CString strfilename;

int index=m_list.GetCurSel();

CString mtime;

CClientDC dc(this);

Mp3 mp3;

hour=0;minute=0;second=0;

dc.SetBkColor(RGB(124,252,0));//设置放置计数器区域的外观

dc.SetTextColor(RGB(255,255,203));//设置数字显示的颜色

mtime.Format("%02d:%02d:%02d",hour,minute,second);//显示时间进度

dc.TextOut(280,128,mtime);

if(index==-1)

{

MessageBox("请添加音乐");

return;

}

m_list.GetText(index,strfilename);

SetDlgItemText(IDC_filename,strfilename);

mp3.Stop();

mp3.Load(this->m_hWnd,strfilename);

mp3.Play();

SetTimer(0,1000,NULL);

}

同理,暂停,停止,删除,退出代码如下

void CMp3Dlg::Onpause()

{

// TODO: Add your control notification handler code here CString strtemp;

Mp3 mp3;

GetDlgItemT ext(IDC_pause,strtemp);//获取按钮状态

if (https://www.360docs.net/doc/388450551.html,pare("暂停")==0)

{

mp3.Pause();

SetDlgItemText(IDC_pause,"继续");

KillTimer(0);//取消计数器的显示

}

if (https://www.360docs.net/doc/388450551.html,pare("继续")==0)

{

mp3.resum();

SetTimer(0,1000,NULL);

SetDlgItemText(IDC_pause,"暂停");

}

}

void CMp3Dlg::Onstop()

{

// TODO: Add your control notification handler code here Mp3 mp3;

mp3.Stop();

SetDlgItemText(IDC_pause,"暂停");

KillTimer(0);//取消计数器的显示

CString mtime;

CClientDC dc(this);

hour=0;minute=0;second=0;

dc.SetBkColor(RGB(124,252,0));//设置放置计数器区域的外观

dc.SetTextColor(RGB(255,255,203));//设置数字显示的颜色

mtime.Format("%02d:%02d:%02d",hour,minute,second);//显示时间进度dc.TextOut(280,128,mtime);

GetDlgItem(IDC_open)->EnableWindow(FALSE);

GetDlgItem(IDC_pause)->EnableWindow(FALSE);

GetDlgItem(IDC_stop)->EnableWindow(FALSE);

GetDlgItem(IDC_del)->EnableWindow(FALSE);

}

void CMp3Dlg::Ondel()

{

UpdateData(TRUE);

Mp3 mp3;

int index=m_list.GetCurSel();

mp3.Stop();

SetDlgItemText(IDC_filename,"");

KillTimer(0);

hour=0;minute=0;second=0;//歌曲时间置0

if (index!=CB_ERR)

{

m_list.DeleteString(index);

}

}

void CMp3Dlg::Onexit()

{

// TODO: Add your control notification handler code here

CDialog::OnCancel();

}

ctrl+w打开类向导,如图,添加ontimer函数

代码如下:

void CMp3Dlg::OnTimer(UINT nIDEvent)

{

// TODO: Add your message handler code here and/or call default

CString mtime;

Mp3 mp3;

second++;

CClientDC dc(this);

dc.SetBkColor(RGB(124,252,0));//设置放置计数器区域的外观

dc.SetTextColor(RGB(255,255,203));//设置数字显示的颜色

if(second==60)//设置钟表的显示

{

minute++;second=0;

}

if(minute==60)

{

hour++;minute=0;

}

mtime.Format("%02d:%02d:%02d",hour,minute,second);//显示时间进度

dc.TextOut(280,128,mtime);

DWORD cdf=mp3.getinformation(MCI_STATUS_POSITION);

DWORD cdfrom;

cdfrom=MCI_MAKE_MSF(MCI_MSF_MINUTE(cdf),MCI_MSF_SECOND(cdf),MCI_MSF_FRAM E(cdf));//获取当前播放文件的信息

UpdateData(false);

CDialog::OnTimer(nIDEvent);

}

ctrl+w打开类向导添加函数如下

void CMp3Dlg::OnDblclkList() //在列表中选中,双击左键播放音乐

{

CString mtime;

Mp3 mp3;

CClientDC dc(this);

hour=0;minute=0;second=0;

dc.SetBkColor(RGB(124,252,0));//设置放置计数器区域的外观

dc.SetTextColor(RGB(255,255,203));//设置数字显示的颜色

mtime.Format("%02d:%02d:%02d",hour,minute,second);//显示时间进度dc.TextOut(280,128,mtime);

CString strfilename;

int index=m_list.GetCurSel();

m_list.GetText(index,strfilename);

SetDlgItemText(IDC_filename,strfilename);

mp3.Stop();

mp3.Load(this->m_hWnd,strfilename);

mp3.Play();

SetTimer(0,1000,NULL);

}

打开类向导,添加函数如下

void CMp3Dlg::OnCustomdrawSlider1(NMHDR* pNMHDR, LRESULT* pResult) {

// TODO: Add your control notification handler code here

UpdateData(true);

m_int=m_slider.GetPos()/10;

Setvolumn(m_slider.GetPos());

UpdateData(false);

*pResult = 0;

}

打开类向导,添加函数如下

void CMp3Dlg::OnReleasedcaptureSlider1(NMHDR* pNMHDR, LRESULT* pResult)

{

// TODO: Add your control notification handler code here

Setvolumn(m_slider.GetPos());

*pResult = 0;

}

添加声音设置函数如下

DWORD CMp3Dlg::Setvolumn(DWORD vol)

{

MCI_DGV_SETAUDIO_PARMS mcisetvolumn;

mcisetvolumn.dwCallback=NULL;

mcisetvolumn.dwItem=MCI_DGV_SETAUDIO_VOLUME;

mcisetvolumn.dwValue=vol;

MCI_OPEN_PARMS mciopenparms;

DWORD DeviceID;

DeviceID=mciopenparms.wDeviceID;

mciSendCommand(DeviceID,MCI_SETAUDIO,MCI_DGV_SETAUDIO_VALUE|MCI_DGV_SETAU DIO_ITEM,(DWORD)(LPVOID)&mcisetvolumn);

// return mcisetvolumn.dwValue;

return 0;

}

到此已经基本完成了,我们可以试听一下

接下来我们可以到包成exe可执行文件,为了去掉那个不好看的图标,我们可以进入res文件夹,把原来的图标删掉,不过,你要放入一个cio格式的图片作为图标,cio格式网上有很多转换的,删掉原图标后,程序会自动生成一个你放进去的图标。接下来演示打包:

工程,设置,或者按alt+f7,如图设置

组建,批组建,如图

创建完成后,你就会发现在你的工程文件中多了一个release文件夹,打开找到exe,这个文件就是打包好的,随便放到哪里都可以执行,至此,工作基本完成了,最后附上源代码,仅供参考

dlg.cpp文件

// Mp3播放器Dlg.cpp : implementation file

//

#include "stdafx.h"

#include "Mp3播放器.h"

#include "Mp3播放器Dlg.h"

#include "Mmsystem.h"

#include "Digitalv.h"

#include "Mp3.h" //音量控制用到

#pragma comment(lib,"Winmm.lib")

#ifdef _DEBUG

#define new DEBUG_NEW

#undef THIS_FILE

static char THIS_FILE[] = __FILE__;

#endif

/////////////////////////////////////////////////////////////////////////////

// CAboutDlg dialog used for App About

class CAboutDlg : public CDialog

{

public:

CAboutDlg();

// Dialog Data

//{{AFX_DATA(CAboutDlg)

enum { IDD = IDD_ABOUTBOX };

//}}AFX_DATA

// ClassWizard generated virtual function overrides

//{{AFX_VIRTUAL(CAboutDlg)

protected:

virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support //}}AFX_VIRTUAL

// Implementation

protected:

//{{AFX_MSG(CAboutDlg)

//}}AFX_MSG

DECLARE_MESSAGE_MAP()

};

CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD)

{

//{{AFX_DATA_INIT(CAboutDlg)

//}}AFX_DATA_INIT

}

void CAboutDlg::DoDataExchange(CDataExchange* pDX)

{

CDialog::DoDataExchange(pDX);

//{{AFX_DATA_MAP(CAboutDlg)

//}}AFX_DATA_MAP

}

BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)

//{{AFX_MSG_MAP(CAboutDlg)

// No message handlers

//}}AFX_MSG_MAP

END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////

// CMp3Dlg dialog

CMp3Dlg::CMp3Dlg(CWnd* pParent /*=NULL*/)

: CDialog(CMp3Dlg::IDD, pParent)

{

//{{AFX_DATA_INIT(CMp3Dlg)

m_int = 0;

//}}AFX_DATA_INIT

// Note that LoadIcon does not require a subsequent DestroyIcon in Win32 m_hIcon = AfxGetApp()->LoadIcon(IDI_ICON1);

hour=0;minute=0;second=0;

}

void CMp3Dlg::DoDataExchange(CDataExchange* pDX)

{

CDialog::DoDataExchange(pDX);

//{{AFX_DATA_MAP(CMp3Dlg)

DDX_Control(pDX, IDC_LIST, m_list);

DDX_Control(pDX, IDC_SLIDER1, m_slider);

DDX_Text(pDX, IDC_vol, m_int);

//}}AFX_DATA_MAP

}

BEGIN_MESSAGE_MAP(CMp3Dlg, CDialog)

//{{AFX_MSG_MAP(CMp3Dlg)

ON_WM_SYSCOMMAND()

ON_WM_PAINT()

ON_WM_QUERYDRAGICON()

ON_BN_CLICKED(ID_exit, Onexit)

ON_NOTIFY(NM_CUSTOMDRAW, IDC_SLIDER1, OnCustomdrawSlider1)

ON_BN_CLICKED(IDC_fileopen, Onfileopen)

ON_BN_CLICKED(IDC_open, Onopen)

ON_BN_CLICKED(IDC_pause, Onpause)

ON_BN_CLICKED(IDC_stop, Onstop)

ON_NOTIFY(NM_RELEASEDCAPTURE, IDC_SLIDER1, OnReleasedcaptureSlider1)

ON_WM_TIMER()

ON_BN_CLICKED(IDC_del, Ondel)

ON_LBN_DBLCLK(IDC_LIST, OnDblclkList)

//}}AFX_MSG_MAP

END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////

// CMp3Dlg message handlers

BOOL CMp3Dlg::OnInitDialog()

{

CDialog::OnInitDialog();

// Add "About..." menu item to system menu.

// IDM_ABOUTBOX must be in the system command range.

ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);

ASSERT(IDM_ABOUTBOX < 0xF000);

CMenu* pSysMenu = GetSystemMenu(FALSE);

if (pSysMenu != NULL)

{

CString strAboutMenu;

strAboutMenu.LoadString(IDS_ABOUTBOX);

if (!strAboutMenu.IsEmpty())

{

pSysMenu->AppendMenu(MF_SEPARATOR);

pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);

}

}

// Set the icon for this dialog. The framework does this automatically

// when the application's main window is not a dialog

SetIcon(m_hIcon, TRUE); // Set big icon

SetIcon(m_hIcon, FALSE); // Set small icon

SetWindowText("MP3播放器");

MoveWindow(250,150,580,500); //显示时间控制

m_slider.SetRange(0,1000); //移动范围

m_slider.SetPos(500);//滑块指针的初始位置

GetDlgItem(IDC_open)->EnableWindow(FALSE);

GetDlgItem(IDC_pause)->EnableWindow(FALSE);

GetDlgItem(IDC_stop)->EnableWindow(FALSE);

GetDlgItem(IDC_del)->EnableWindow(FALSE);

手把手教你做电影制片的预算

手把手教你做电影制片的预算 一般而言,电影预算是指电影拍摄的全部投资,包含影片剧本稿费,影片道具成本,影片拍摄成本,影片参与人员薪酬,影片后期制作成本,影片市场宣传成本,额外其他成本等。电影预算是影片投资的基础和重要参考依据,是电影管理和市场化运作的前提,高质量的电影预算是电影拍摄、制作、发行顺利进行的保障,是对投资方利益的保证。本文精选电影预算的相关概念及进行预算的相关办法为大家做相关知识普及。 电影预算是影片投资的基础和重要参考依据,也是电影管理和市场化运作的前提,高质量的电影预算是电影拍摄、制作、发行顺利进行的保障,也是对投资方利益的保证。 由于电影预算还设计很多财会知识的运用,在此,我们仅用两周时间,为大家简单介绍一下电影预算常规知识,并辅以好莱坞影片的预算细目作为范例。 一、什么是电影制片预算 电影制片预算,亦可称为电影成本预算(简称:电影预算),指的是电影拍摄的全部投资,包含影片剧本稿费、影片道具成本、影片拍摄成本、影片参与人员薪酬、影片后期制作成本、影片市场宣传成本、和额外其他成本等。 二、电影制片预算的分类 总体来说,电影预算可以分为两大类:线上费用(above-the-line)和线下费用(below-the-line)。之所以要将线上费用和线下费用划分出来,是因为,线上费用的高低主要取决于主创团队的薪资,这也致使线上费用可产生的金额区间跨度很大;而相反,同一制作水准下的线下费用,则相对稳定,可预测性也较高。 1、线上费用| Above the Line 定义线上费用视具体影片而定,指的是在创造过程中自然衍生出来的费用。线上费用主要包括获取剧本或编写剧本的支出(编剧的雇佣费)、制片部门和导演的薪水、以及演员的薪资和额外报酬等;这些支出项目,也统称为“创造性元素(Creative Eleme nts)”支出。 范畴说明 从某种程度来说,“创造性”这个词用在这里,显得略微不够恰当;因为很多归属于线下费用的工种,也同样做着“创造性”的工作。而之所以做这样的划分,是因为从职业角度来讲,这两类费用支出还是存在着细微的区别的。 对于归属在线上费用的工种来说,这些人通常是根据他们在电影产业的现有地位而收取薪酬的,同时,他们也可能会参与影片最终利润的分成。因此,线上费用的估算,更多的要基于市场环境和主创团队受关注的热度。 主要支出项目

手把手教你用EXCEL制作可以计划与实际对比的动态甘特图

手把手教你用EXCEL制作可以计划与实际对比的动态甘特图 要制作动态的,可以进行计划与实际对比的甘特图,关键要解决两个问题: 1、计划时间与实际时间分成两行显示,这样才能够让甘特图的进度条也分成两行显示出来,实现计划与实际的对比; 2、使用数据透视表来查询,但是要解决透视表作为图表数据源时,如果发生变化,则图表也会错乱的问题。 下面是制作这种图表的步骤: 第一步、制作一个录入界面,同时用VBA将其保存到另一个作为数据库的表格中: 1、录入界面如下图所示:(注:录入界面中,计划时间与实际时间可以在同一行中。) 2、作为数据库的表格如下图所示:(注:本表需要做成可以方便地生成数据透视表的二维表格,并且,这一步是关键步骤,要在这一步通过VBA把录入界面的数据在此时把计划时间、实际时间分成两行显示。)

第二步、根据数据库生成几个数据透视表,其结构略有不同,自己根据需要进行调整(注:此处要使用OFFSET函数定义好上面数据库表中有效数据的范围。): 数据范围=OFFSET(项目进度数据库!$A$1,,,COUNTA(项目进度数据库!$A:$A),COUNTA(项目进度数据库!$1:$1)) 1、单项目查询:

2、多项目查询: 3、各项目汇总查询:(只显示每个工程项目的总时间,不显示明细时间)

第三步、制作一个辅助表,用简单的公式把上述几个数据透视表对应起来,所谓简单,即本sh eet 中某一格=透视表中某一格,但要注意如果透视表中的空白格,可能会显示为0,所以用IF函数作些调整,如 IF(C1<>"空白",单项目查询!$A$1,""):

到了这一步,制作甘特图所需的数据表格已经基本完成了。接下来要准备好制作甘特图所需的数据源。 第四步、用OFFSET函数把甘特图所需的进度条1、2、3、4,Y座标轴名称(就是在图上显示的工作内容),甘特图的总数据范围定义好: 图表_进度条1 =OFFSET(制图辅助!$C$1,1,1,COUNTA(制图辅助!$C:$C)-COUNTIF(制图辅助!$C:$C,"空白")-1) 图表_进度条2 =OFFSET(制图辅助!$C$1,1,2,COUNTA(制图辅助!$C:$C)-COUNTIF(制图辅助!$C:$C,"空白")-1) 图表_进度条3 =OFFSET(制图辅助!$C$1,1,3,COUNTA(制图辅助!$C:$C)-COUNTIF(制图辅助!$C:$C,"空白")-1) 图表_进度条4 =OFFSET(制图辅助!$C$1,1,4,COUNTA(制图辅助!$C:$C)-COUNTIF(制图辅助!$C:$C,"空白")-1) 图表_进度图Y轴名称 =OFFSET(制图辅助!$C$1,1,-1,COUNTA(制图辅 助!$C:$C)-COUNTIF(制图辅助!$C:$C,"空白")-1) 图表_制图辅助范围 =OFFSET(制图辅助!$B$1,,,COUNTA(制图辅助!$C:$C)-COUNTIF(制图辅助!$C:$C,"空白"),6) 第五步、用普通制作甘特图的方法制作出甘特图: 首先,创建图表大概样式。 在图表向导中,选条形图当中的堆积条形图,并按步骤逐步操作,相关需要选定数据范围的地方,输入上面定义好的名称:

play手把手教你创建一个博客项目10完整的应用程序测试

play手把手教你创建一个博客项目10完整的应用程 序测试 现在,我们差不多终止了博客引擎的编码工作,但对项目来讲还没有完成,为了让我们的代码能够完全正确的工作,我们还需要对项目进行测试。 因此,我们之前差不多为yabe的模型层功能书写的单元测试,同时确信博客引擎的核心功能差不多进行了完好的测试,然而关于一个web应用程序来讲模型层只是其中的一部分,我们还需要确定web接口能否按预期的目标一样正常工作。也确实是讲还需要测试yabe博客引擎的操纵器层,甚至需要对UI自身进行测试,比如我们的JavaScript代码。 测试操纵器部分 Play提供了一种功能,确实是使用JUnit来直截了当测试应用程序的操纵器。我们把这些测试叫做‘功能性测试’,这是因为我们打算测试web应用程序的完整功能。 差不多上,一个功能性测试将直截了当调用Play的ActionInvoker,和一个HTTP 要求相似。因此我们需要给出一个HTTP方法、一个URI和多个HTTP参数。 Play 之后会路由这些要求,调用相应的action,同时回发到填写的响应(filled response)。之后,你就能够对之进行分析,以检查响应内容是否你所预期的。 import org.junit.*; import play.test.*; import play.mvc.*; import play.mvc.Http.*; import models.*; public class ApplicationTest extends FunctionalTest { @Test public void testThatIndexPageWorks() { Response response = GET("/"); assertIsOk(response); assertContentType("text/html", response); assertCharset("utf-8", response); } }

play手把手教你创建一个博客项目-01.创建yabe博客项目

01.创建项目 简介 在这个教程中你会学到用Play框架从头到尾的开发一个真实的Web程序。在这个程序中,我们将使用在一个真实项目中需要的所有技术,来介绍Play框架开发Web程序的实战技巧。 这个教程分为几个独立的部分。每个部分将介绍更多复杂的特性,并且提供真实项目的需求,包括数据验证、错误处理、权限框架、自动测试框架、Web界面接口、国际化等内容。 项目 我们决定创建一个blog项目。这不是一个有想象力的决定,但是这个项目能让我们学习到目前Web程序大多数的功能性需求。为了更有趣点,我们要处理不同角色的用户(editor,admin)。这个项目的名字称为yabe。 这个教程的源代码在Play安装目录下的samples-and-tests/yabe/目录。 先决条件 首先,确保计算机安装了Java,Play框架需要Java 5或以上版本。还有我们要使用命令行,最好使用类Unix操作系统。当然如果你使用Windows操作系统,Play框架也会工作得很好。要有Java和Web开发技术(比如:HTML, CSS and JavaScript)的知识,然而不必深入了解JEE的知识。Play框架是一个“全栈式”Java框架,提供和封装了你所需要的所有Java API,你不必知道怎样配置JPA实体或者部署JEE组件。当然还需要文本编辑器。如果你习惯用诸如Eclipse和NetBeans等Java IDE开发Play框架的Web程序是非常好的。然而使用一些诸如Textmate、Emacs或VI简便的文本编辑器来开发Play框架的Web程序也是非常愉快的。 安装Play框架 安装非常简单,下载最近的版本然后解压到任何路径。如果使用Windows,应避免在安装路径中有空格。比如c:\play ,而不能是c:\Documents And Settings\user\play。最好是把Play主目录加入到工作路径path,这样只需要在命令行输入play就可以使用Play框架

手把手教你写项目方案

手把手教你写项目方案 写在前面的话: 如果是已经系统学习过项目管理的童鞋请绕行,本文写给需要尽快上手写方案的童鞋,算是快速上手工具。 方案分很多种,有项目方案、策划方案、活动方案、商业企划书、公关方案、施工方案、解决方案、产品方案、运营方案、市场方案、配置方案等等,总的来说,将解决问题的办法和计划呈于案前都是方案。 从应用频率来说,项目方案需求最多,今天我们就来聊聊项目方案怎么写。写方案之前需要明白几件事情: 1、方案解决什么问题? 通过沟通切实了解项目背景、项目目标是写好方案的前提,我们写的方案全部内容其目的就是要解决问题,如果问题都没弄清楚,是不可能提出相符的解决方案的。 比如:某大学开展一个课题,需要收集全国范围内23-28岁之间年轻人的收入数据。 看到这个问题我们先不忙提出解决方案,而是要就问题提出问题。 ●为什么要收集数据? ●收入数据具体包括哪些字段,最近一年收入?上一年度收入?最近一月 收入?工资收入还是全部收入? ●提供的数据需要怎么证明其真实性,需要收入证明?口头采集?银行查 询结果? ●年轻人包括男的和女的?就业中和待业中的? ●23-28岁包括不包括23岁和28岁?收集数据中是否要收集对方年龄 证明?

●全国范围内是具体到各省?各市?各县?还是下沉到各乡镇? ●是按照就业所在地收集还是按照户籍所在地收集?是否需要提供他们 的户籍证明? ●准备在多长时间内完成收集? ●准备花多少预算来解决这个问题? 上述问题都解决了,问题也就弄清楚了。 2、需求方有哪些要求? 在明确了问题之后,我们还不能就此打住,因为能解决问题是一回事,能按要求解决问题是另一回事,所以我们要延伸出新的问题和需求方进一步确认,了解需求方在问题本身之外的要求。 还是1中的例子,我们要接着提问: ●最终数据的交付是什么形式?纸质版?U盘?邮件? ●内容以什么形式提交?word?excel?还是数据库? ●合作中是否需要阶段性提交项目成果? ●搜集形式是否有要求?在线可不可以?线下可不可以?电话访问可不 可以?第三方提供可以不可以? ●质量控制对方是否参与?实施过程对方是否参与? ●合作过程中我们需要和哪些人进行对接? ●这里就有了交付成果。 再做一点点思考 了解完上面这些问题之后,我们要回过头来研究一下,我们自己怎么解决上述问题。首先要考虑的是就解决问题本身我们要设计一个明确的流程,通常可以按照执行主体进行划分: 确定数据来源——取得数据、同时取得来源证明——数据整理——交付验收,这就是项目思路 这个时候我们需要考虑上述每个阶段分别需要什么人、多少人、什么设备、

手把手教你做小型逆变器

手把手教你做小型逆变器 [导读]我在这里教大家做的逆变器,和一般的逆变器不一样,这个逆变器是高频逆变器,一般用于驱动几百瓦的灯泡,能够轻易满足户外照明的用途。逆变器想要大功率就要用IGBT,我这里主要 关键词:ZVS逆变器场效应管 逆变器(inverter)是把直流电能(电池、蓄电瓶)转变成交流电(一般为220v50HZ 正弦或方波)。应急电源,一般是把直流电瓶逆变成220V交流的。通俗的讲,逆变器是一种将直流电(DC)转化为交流电(AC)的装置。 至于我在这里教大家做的逆变器,和一般的逆变器不一样,这个逆变器是高频逆变器,一般用于驱动几百瓦的灯泡,能够轻易满足户外照明的用途。逆变器想要大功率就要用IGBT,我这里主要讲的是用场效应管做逆变器。 嗯,为什么不用三极管,而用场效应管呢?原因就是: (1)场效应管是电压控制器件,它通过VGS来控制ID; (2)场效应管的输入端电流极小,因此它的输入电阻很大。 (3)它是利用多数载流子导电,因此它的温度稳定性较好; (4)它组成的放大电路的电压放大系数要小于三极管组成放大电路的电压放大系数; (5)场效应管的抗辐射能力强; (6)由于不存在杂乱运动的少子扩散引起的散粒噪声,所以噪声低。 而且今天教大家做的逆变器,不能用三极管做,只能用场效应管或IGBT。 这个逆变电路就是大家熟悉的ZVS(软开关电路)如下图。

这个电路特别在高效率,深受电子爱好者的称赞,原因是场效应管发热很少,几乎不发热。 原因就是软开关,至于ZVS就不多说了。 准备以下零件: 10K 1/4W 电阻 X2 470欧 3W电阻 X2 1N4007二极管 X2 12V稳压管 X2 1200V 0.3μ电磁炉电容 X2 磁环(电脑电源上有得拆) X1 1MM漆包线 1米 1.2M漆包线数米 接线端子2P(脚距5mm) 3个 接线端子3P(脚距5mm) 2个

手把手教如何操作闲鱼赚钱项目,多一份副业多一份收入

手把手教如何操作闲鱼赚钱项目,多一份副业多一份收入 目前比较主流的一个项目,我想大家应该都有了解。今天主要就想跟大家分享一些大咖的玩法,作为一个闲鱼新手玩家该如何去操作这些细节以及如何去运营这些账号,下面手把手的教你如何做好闲鱼项目。当然如果想操作的话可以找我(//3011654//)首先是账号的要求: 1.账号 必须是老号,注册在1年以上的老号,通过实名认证,芝麻粉授权。 原因就是闲鱼是淘宝旗下的一款二手产品交易市场,权重和支付系统都是共用的,所以你的淘宝账号权重,以及实人认证,都影响着闲鱼账号的权重。 解决了这个问题之后,就是账号的介绍与头像,写的一定要诚恳,头像一定要真实。这样的话,很多人打开主页之后,很直观的知道你是做什么的。 像这样的介绍,就非常接地气,而且头像的使用,也容易让人产生不错的好感。搞定了这一步之后,接下来就是产品。 2.产品定位 产品定位非常重要,一旦定位,不要随意更改了,因为产品杂乱无章的话,会影响到后续粉丝购买的精准度。 这一块有的定位于家常日用百货,海鲜类、水果类、农产品类。 不过按照目前的状况来看,水果类的茶农,更容易受到亲睐,因为已经是夏季了,很多家庭都对水果有着需求。 有需求就有市场,但是作为一个新账号,一点流量也没有,起步是最困难的,所以引流款就显得非常重要。 何为引流款? 引流款指的就是,用低价,实惠,超值的产品,使顾客在关注产品的同时,能够进店铺去逛一下。 因为闲鱼系统默认,你发布的产品,浏览量越高,想要的越多,那么默认你为优质的卖家。 所以这点很重要。但是,起步是最困难的,一方面产品渠道难以解决,一方面,对于新手来说,不知道如何引流最有效,立竿见影。 接下来,我就给大家详细讲讲,那些卖出几万单的人,都在用的产品渠道。 3.产品渠道 对,就是我经常所说的货源集中地,1688这里面有着非常强大的功能,而且现在针对不同的流量渠道,为商家开辟了很多专场,有微供专场、源头直供、采源宝。 我们用到其中最重要的一个功能就是采源宝。点击打开微供专场,在轮播图片里面就可以找到采源宝。 然后,我们可以看到许多水果,里面品种繁多,但是我们在这里面选择产品,是有标准的。是需要有利润的,选择产品从3个方面考虑: 1、产品价格; 第一个原因不难理解,因为我们要加价,如果价格太高的话,超出了顾客的购物消费范围,那么这样的产品,是很难卖的。 2、库存; 第二个原因是为了账号安全,如果没货了,没能及时下架产品,那么对账号的影响是非常严重的。 3、重量。 第三个原因就是重量,闲鱼的人群属性,就是捡便宜,所以只有价格低,分量足,才能

手把手教你做好路演

手把手教你做好路演 路演的内容 想要做好大赛的路演,成功撩到各位评委和机构代表,就需要思考下面几个问题: 1. 我们是做什么的。告诉听众,企业是做什么的,这是观众关心的最基本问题。 2. 我们解决了行业的什么痛点。企业要告诉听众为客户解决了什么问题,这个问题必须是企业对整个行业的研究和对消费者的洞察之后得出的结论。 3. 我们如何与众不同。这个问题的关键在于告诉听众,企业与其他同行业在哪些方面是不同的,企业的核心竞争特色是什么。 4. 和我有什么关系。这是最重要的问题。告诉听众,企业的路演内容与听众有什么关系,听众为什么要关注企业的路演。 路演的内容一定要能回答上述四项问题。总结好这四点,也不要忘记结合大赛的官方评分内容哦!敲黑板。毕竟这才是大赛评委打分的依据: 注:上表中的评分要素是大赛官方发布的唯一评分标准,小编在公众号中只能给各位提供路演建议,并不能代表官方评委的评分喜好。 路演的三大要素 人们常常把路演分为情怀式路演和逻辑式路演。但空有情怀,吸引的只有粉丝;只注重逻辑,观众很难提起兴趣。如何能在大赛路演中成功吸引所有评委和机构的注意呢?通过悉心研究乔布斯的发布会演讲,小编发现乔大师的路演兼具情怀与逻辑;更重要的是,每一个核心的论述都是站在用户的角度所提出的。下面就跟着小编一起来学习一下乔帮主的路演三要素吧。 一、说服力 1983年,乔布斯极力想拉拢百事可乐时任总裁约翰·斯卡利,他看中了斯卡利身上携带着的最有效的百事可乐管理经验。斯卡利认同乔布斯的理念、钦佩齐布斯的激情、折服于乔布斯的个人魅力,但他始终没有同意乔布斯的邀请。 两人同时站在阳台的两侧,阳光正打在乔布斯的脸上。乔布斯严肃地说出了斯卡利一辈子都忘不了的那句话:你的余生是想一直卖糖水呢.还是和我们一起改变这个世界? 斯卡利大为震动。 这一句话产生了一系列的连锁反应,斯卡利的人生、乔布斯的人生、苹果公司的命运,统统在那一刻开始发生改变。 乔布斯的一句话虽然简短,却成功抓住了斯卡利的痛点。作为一名已有作为的企业高管,“改变世界”这个目标无疑比工资和地位更加诱人。正是由于乔布斯抓住了斯卡利的痛点,才成功地打动了听众,提出了有强大诱惑力的offer。 除此以外,乔帮主的PPT中,常常出现简洁明了的数据,将产品的功效一一量化,给观众最直观的震撼,此时其他的描述都是多余。由此可见,数据也是加强说服力的有力工具。 如何做好一场项目路演? 项目路演就是企业或创业代表在讲台上向投资方讲解项目属性、发展计划和融资计划,一般分为线上路演和线下路演。这里主要讲线下项目路演的技巧。

手把手教你开网店轻松创业自己当老板

如果你是一个打算开网店!但是……你却…… 【不知道怎么开?】 【不知道卖什么好?】 【不知道能不能赚钱?】 【不知道如何才能做好?】 这是很多新手朋友遇到的问题。说实话我刚开网店时我也产生过很多疑惑。 亲爱的想开店的朋友们请认真的看完下面的文字,会对您有很大的帮助的。 淘宝开店需要做哪些准备呢? 1.您需要有一张成年人的身份证 2.办理一个网银(工商,农业,建设,邮政都可以的) 3.登陆淘宝网的首页,在左上角点击免费注册,注册一个用户名,用手机注册或者邮箱注册 4.激活注册时候自动生成的支付宝账号,一般账号名是您的手机号码或者邮箱 5.登陆支付宝申请实名认证支付宝账号,可以在线申请卡通,同时完成认证,也可以银 行汇款来认证,具体步骤根据提示操作。 6.认证通过以后,登陆你的淘宝账号,进入我的淘宝管理后台,点击我要开店,根据提 示参加考试,考试通过即可开店 7.发布十件宝贝,根据提示正确的选择属性和分类,店铺正式开张!(此时的宝贝可以 随意发布)建议新手开店从虚拟物品开始。原因如下: 虚拟物品是指卖充值话费、点卡、办理QQ增值业务、Q点Q币、游戏卡等等,因为他所需要的就是一台电脑和一个软件,不需要进货源,所以称虚拟物品(手机话费游戏点卡这些商品是不需要邮寄的,统称为虚拟商品) 为什么要选虚拟物品呢?虚拟物品需要的成本少,投资风险相应减少。重要的一点是卖虚拟物品是迅速提升您店铺信誉和人气的不二之选,对于网上开店,信誉是很重要的,这不同于实体店。信誉好您的生意相对来说就会好一点。 一、对于新手来说、开网店做虚拟充值品,要比卖其他的实物品,好起步。大家都知道,网店的信誉度是很重要的。那么新手开店,都是从零信誉度开始的,打比方,你做服装,顾客来之后,看你店铺里没有信誉度,会害怕你衣服的质量不好而不敢购买,这也就是,为什么很多卖实物的新手,开店一个月都不会有生意的原因,不是没顾客来,而是来了,没有买。那么虚拟充值品,就不存在质量之分,只要能给顾客充好就行,所以,没信誉度,照样卖货! 二、我们开店的目的是赚钱,你是新手,没经验,如果你没实体店铺,就是说,你自己没有货源的情况下,当然要选择投资成本小的,降低风险,一开始,谁也不能说直接上几千元的货拿回家来再往出卖,如果卖不出去,不是压货了么?损失可想而知。做虚拟充值,只需要投资300元买个充值软件就可以了!没有其他投资!这对我们来说,能开一个网店,不算什

手把手教你做建筑工程预算

手把手教你做建筑工程预算 一、施工图预算 是由设计单位在施工图设计完成后,根据施工图设计图纸、现行预算定额、费用定额以及地区设备、材料、人工、施工机械台班等预算价格编制和确定的建筑安装工程造价的文件。 二、施工图预算的作用 在社会主义市场经济条件下,施工图预算的主要作用是: 1 施工图预算是设计阶段控制工程造价的重要环节,是控制施工图设计不突破设计概算的重要措施。 2 施工图预算是编制或调整固定资产投资计划的依据。 3 对于实行施工招标的工程不属《清单规范》规定执行范围的,可用施工图预算作为编制标底的依据,此时它是承包企业投标报价的基础。 4 对于不宜实行招标而采用施工图预算加调整价结算的工程,施工图预算可作为确定合同价款的基础或作为审查施工企业提出的施工图预算的依据。 三、施工图预算的内容 施工图预算有单位工程预算、单项工程预算和建设项目总预算。单位工程预算是根据施工图设计文件、现行预算定额;费用定额以及人工、材料、设备、机械台班等预算价格资料,以一定方法,编制单位工程的施工图预算;然后汇总所有各单位工程施工图预算,成为单项工程施工图预算;再

汇总各所有单项工程施工图预算,便是一个建设项目建筑安装工程的总预算。 一般汇总到单项工程施工图预算即可。 搞预算首先得看懂图,所以要对图纸有深入的了解,这对做施工内业资料员的岗位工作也是有相形的职业素求!可以职业转型,就是这样! 看会图纸+熟悉定额+积累经验 看会图纸是指结合施工了来看,要做到一看到图纸上画的东西就至少知道这东西的施工流程,这样你才会知道这东西包含哪些,算的时候才能准确! 所以千万别闷在办公室里看图纸,一定要下工地,还有熟悉定额是指知道每一项定额子目包含哪些内容和本子目的适用范围,以及类似子目之间的区别。当然,掌握定额计算规则和说明是必须的! 积累经验就要自己留心,以后每做一个工程,做完要自己分析!多向别人学习! 几个供参考的招数:

手把手教你将培训项目搬到线上,实用建议收藏!

经过了2个多月的时间疫情终于见到了好转的迹象,但具体宣告结束的时间还尚未明确,在这种情况下,培训项目同时也要开展,那么究竟如何开展成为了众多培训管理者头疼的问题。 很多人问到了培训计划是否需要修改的问题?其实,我的答案是无需修改,因为培训计划来源于培训需求本身,只要我们的培训需求没变、培训目标没变,我们就不需要对培训计划进行修改。 培训计划我们已经确定无需修改,那当下最重要的就是要全面思考在线学习要怎么做?注意,我们此时不应该再纠结于做不做的问题,而是要考虑怎么做?因为我们想要有效地安排培训,在现如今的情况下我们只能做到将培训项目“搬”到线上来,而且这种线上学习的形式长期以往来看是有促进作用的。 那么今天就来和大家分享一下关于“怎么搬”的问题。

01搬项目设计 项目设计要以学员为中心,从绩效出发。 在线学习最大的特点是随时随地发生,学员有可能躺在床上就观看老师的讲课,也有可能在电脑前一边浏览材料一边听课,所以在线学习项目强调要围绕学员这个中心进行设计。 我们在线下培训时培训管理者会将所有学习过程安排好,学员可以在课堂上进行提问,在工作当中向前辈请教,也可以向领导获取学习工作反馈。同样的,这些角色在在线学习的过程中是同等重要的,而且学员普遍都希望这些需求能得到快速即时的响应,这就需要我们在做项目设计时一定要将班主任、讲师、专家、直线经理这些角色都安排出特定的学习支持和管理活动,并要制定相应的机制以求让他们的工作效率得到保证。

企业学习价值得落脚点在于工作绩效,所以做企业培训最重要的当然也是要以绩效为出发来设计主线。在培训转化为绩效这个过程中,是以业务提升作为导向,由学习活动和转化动作组合而成的。传统面授是由集中学习完成教授知识并在岗位工作中完成绩效转化的,在线学习也有异曲同工之妙,其通过讲师直播加课堂互动来完成知识讲授,通过录播课程来满足无法参加直播的学员,但大家有没有发现这样的照搬总觉得少了点什么? 事实上是因为我们没有把学习转化搬到线上,我们要利用好互联网在线学习的方式,用在线答题、闯关、打卡等多种形式和配套机制,让学员能通过图片、文字、音频和视频等多方式,跟踪学习后的行为和成果,呈现学习效果、内化程度最终转化成果。 02搬学习体验 要构建与学员有关、学有所成的学习体验。 把学习体验放在内容、流程前面说,是担心管理思维会影响我们以学员为中心的原则,因为我们就算再专业,也不可能与所有学员沟通。不管是培训师、培训管理者还是其他的培训工作者,我们的工作就是帮助学习者完成学习过程,要把“他们的成功就是我们的成功”的工作主旨放在第一位。

手把手教你用vue-cli搭建vue项目

本篇主要是利用vue-cli来搭建vue项目,其中前提是node和npm已经安装好,文章结尾将会简单提到一个简单的例子。使用vue-cli搭建项目最开始我也是看网上的教程一步步搭下来,所以其中的一些步骤说法为了表达正确会进行一定参考。 一、 项目使用技术、框架简单介绍 我们使用vue-cli来搭建整个项目,vue-cli就是一个脚手架,步骤很简单,输入几个命令之后就会生成整个项目,里面包括了webpack、ESLint、babel很多配置等等,省了很多事。根据小高之前给的要求以及结合DSS项目中的经验,我们今天搭建的项目结构组成为: Vue+ ESLint + webpack + iview+ES6 Vue: 主要框架 ESLint: 帮助我们检查Javascript编程时的语法错误,这样在一个项目中多人开发,能达到一致的语法Webpack: 设置代理、插件和loader处理各种文件和相关功能、打包等功能。整个项目中核心配置iview: 是基于vue的一套样式框架,里面有很多封装好的组件样式 ES6: 紧跟时代潮流,使用ES6语法,利用babel处理。 二、 安装vue-cli 1. 打开cmd ,敲入命令: npm install --global vue-cli (–global:全局安装) 2. 安装好之后打开C:\Users\Administrator\AppData\Roaming\npm 可以看到这个文件夹下 已经有相关的脚本文件,如图: 此时vue-cli已经安装好啦,往下走 三、 创建项目 1. cmd打开自己的项目工作空间,然后敲入命令: vue init webpack test(其中test为我的项目名称) 2. 然后终端会出现下图“一问一答”模式,如图:

手把手教你跑中央空调项目

中央空调销售方法及主要环节经验谈 一、寻找户式中央空调项目 二、寻找小型机组项目 三、怎样用最快最好的方法寻找潜在客户 四、销售中央空调机组要经过哪些程序? 五、出门见客要做好那些准备? 六、制造融洽的谈话气氛 七、如找不到客户拍板人怎么办? 八、怎样给客户报价 九、用户提出要我们售后服务保修2年以上怎么办? 十、客户要货很急,但我们暂时没有现货怎么办? 十一、业务员心得---知己知彼 十二、充满爱心的销售员,是成功的销售员 十三、使客户感觉心理平衡 十四、销售人员自我培训指南 十五、80%的销售来源于第4至11次的跟踪! 此文来自:https://www.360docs.net/doc/388450551.html,/read.php?tid=9752

一、寻找户式中央空调项目 1 目标客户:市镇边缘的别墅、独院,小型娱乐场所、办公楼等独立小空间较多的建筑物。 2 如何寻找客户:与相应的房产开发商合作、与高档住宅区的售房人员及物业公司联系、与家装公司合作、合作过的客户的朋友同事。 3 竞争对手:风冷热泵户式中央空调和地温户式中央空调。了解对手特点和弱点后再制定对策,力争在竞争对手的用户附近开展工作,发掘其弱点,强化我优点,如用户较多,可先免费做一样板,满意后付款。 二、寻找小型机组项目 1 目标客户:展厅、会所、酒店大堂、大型餐厅、仓库、工厂车间、超市等较大空间。 2 着重以引导经销商开展工作为主,工作方法通上,若用户不放心,视影响大小,可免费做样板后付款。一般鼓励经销商提货做样板,如售不出可退货,保证无风险。 三、怎样用最快最好的方法寻找潜在客户 留意大街上的广告牌,抄下联系人和电话号码; 翻电话号码本,打电话;把潜在客户找出来并纪录; 找设计院,让设计院的工程师替自己介绍客户; 与设计院出图室、工程复印中心保持联系,从中获取信息; 从报纸、电视广告、杂志上了解相关信息;

手把手教你做小型逆变器

逆变器(inverter)是把直流电能(电池、蓄电瓶)转变成交流电(一般为220v50HZ正弦或方波)。应急电源,一般是把直流电瓶逆变成220V交流的。通俗的讲,逆变器是一种将直流电(DC)转化为交流电(AC)的装置。 至于我在这里教大家做的逆变器,和一般的逆变器不一样,这个逆变器是高频逆变器,一般用于驱动几百瓦的灯泡,能够轻易满足户外照明的用途。逆变器想要大功率就要用IGBT,我这里主要讲的是用场效应管做逆变器。 嗯,为什么不用三极管,而用场效应管呢?原因就是: (1)场效应管是电压控制器件,它通过VGS来控制ID; (2)场效应管的输入端电流极小,因此它的输入电阻很大。 (3)它是利用多数载流子导电,因此它的温度稳定性较好; (4)它组成的放大电路的电压放大系数要小于三极管组成放大电路的电压放大系数; (5)场效应管的抗辐射能力强; (6)由于不存在杂乱运动的少子扩散引起的散粒噪声,所以噪声低。 而且今天教大家做的逆变器,不能用三极管做,只能用场效应管或IGBT。 这个逆变电路就是大家熟悉的ZVS(软开关电路)如下图。

这个电路特别在高效率,深受电子爱好者的称赞,原因是场效应管发热很少,几乎不发热。 原因就是软开关,至于ZVS就不多说了。 准备以下零件: 10K 1/4W 电阻 X2 470欧 3W电阻 X2 1N4007二极管 X2 12V稳压管 X2 1200V 0.3μ电磁炉电容 X2 磁环(电脑电源上有得拆) X1 1MM漆包线 1米 1.2M漆包线数米 接线端子2P(脚距5mm) 3个 接线端子3P(脚距5mm) 2个 零件如下图。

然后发给布线图,免得一些人迷惘不懂怎么布线。

手把手教你如何做科研(上篇)

牛人的特质包括:六根清净,天天早上8:00左右准时去实验室,如同实验室的钥匙和实验室的灯,头一个来最后一个离开。去了即看文献,写程序,从来不玩游戏,不是三天打渔两天晒网是整整四年的坚持。要有硬是不发中文的论文,要发就发英文的决心。保持良好的心态,心态平和,稳中求精,博士目前最缺乏的。注意调节自己的心理,创新要靠灵感,要靠心态平和。打好扎实的基础。多看高水平的文章,和高手过招才能发现自己的渺小。多动手实践,愿意从小事做起,一个一个小的实验最后就能构成你的创新部件。 如果你实验室里有人干过相关领域的研究,向他们要他们写过的文献综述、报告、ppt文件等等。要先摸透实验室的人员情况及他们的科研方向和进展,具体做法就是多问他们——不要怕生、怕不好意思。 先到中国期刊网上去查——国内经常发些对国外新进展的综述性文章。 垫了中文的底,那咱们就要上web of science查SCI收录的英文文献,英文的国际期刊最全、最新,即使实在没法垫中文的底也得上。 至于查英文文献的方法,无非是以下三种——通过关键词、通过有名的研究组、通过权威期刊,查英文文献,标题和摘要是一定要看的,即使再多也要都看,看到感兴趣的才去看全文。 a.先列提纲。不列提纲,上来就写,几千字勉强,几万字就难了。 b.平时多写。及时总结阶段性的工作,多写文章多投稿。到最后阶段,把这些文字有机地组合起来,就是一篇很好的毕业论文。 c.论文并非数据越多越好。一定要舍弃那些与主旨关系不大的数据,否则,要么显得累赘松散,要么成为破绽。 d.打印修改。在电脑上直接修改,会遗漏很多错误。要尽可能地减少任何错误,一定要打印出来修改。 f.让别人指出错误。错误摆在那里,却熟视无睹。 a. 科研靠积累。设计课题不要好高骛远。基金评审也是这样。没有前期积累,获得资助的可能性小。 b. 文献要追踪。开题时通过查文献了解的情况,到结题的时候可能有很大不同。实验过程中要注意追踪。运气好,你可以得到更多的线索;运气不好,发现别人抢先了。据此修正你的实验。写论文之前一定要重新查一遍文献。 c. 记录要复习。前面的实验记录要经常复习。随着经验的增加和认识的提高,你会发

手把手教你做内丹(全)

做内丹第一步筑基 操作过程来了,呵呵。 对于年轻人来说筑基这一步是很简单的,整个过程需要注意两点,第一,控制欲望,别想女人了就上,要节制,但也不用绝欲。第二,要有耐心,别坐了还没几分钟就想有感觉。做到这两点,保证在一周内就能找到感觉。 当然,坐是要坐的,但是也不一定要盘着,到了后来,你行走坐卧,周天不会停,睡觉就是一种练习。姿势很简单,怎么舒服就怎么坐,能盘着就盘着,单双都可以,估计大部分人都是单盘。在开始的阶段,随便坐,坐在凳子上也可以。闭上眼,通雀桥,就是舌头抵住上腭。意守下丹田,就是脑子里在保持沉静的同时稍微想着点下丹田的感觉。至于双手,想怎么放怎么放,在初期,为了配合意守下丹田,最好是跌跏的手势,就是两只手交握,哪只手在外面无所谓。放在丹田前。一个字,要舒服,舒服才能持久。然后,放松,驱除杂念,安静,别睡着了哇。 控制呼吸,使之绵长,但还是要注意自然,不要弄到自己不舒服而强行深呼吸,自然就好。吸气,幻想吸入真气,呼气,幻想排出体内浊气。呼吸非常重要,通常有顺腹式和逆腹式两种。开始的时候保持自然,越简单越好,幻想真气通过鼻子直达下丹田,然后停住,呼气,幻想全身浊气排出。时间长了,可以去掉排出浊气这一不,只剩下吸入真气这个部分。具体的情形是这样的,吸气时,胸部扩张,幻想真气由鼻到胸部气海,然后呼气,压缩胸部,幻想真气由胸部传递到腹部下丹田,腹部扩张。整个过程就变成了吸气时胸部扩展而腹部有轻微收缩,而呼气时胸部收缩而腹部扩张,像在从胸部吸走真气一样。这个过程腹部和自然呼吸时是相反的,称其曰逆腹式。当然,逆腹式是有一定难度的,在开始肯定很难达到,千万别为了这个强行虐待自己,保持自然就好。 逆腹式的呼吸会在以后的练习中自然行成,千万别急于求成。逆腹式是很有用的,在运行周天的时候另有用处,会比较好的配合意念,这一点以后再告诉你们。 注:一,关于打坐的时间,无所谓,但是我希望能保持在二十分钟左右,尤其是初学者。 二,对于真气的幻想,有很多人在开始的时候总会猜测真气的形态和温度等等问题,不要去想它,不要老在那感觉,肚子是冷了,还是热了,真气是冷的还是热的。可以这么说,开始的时候有点轻微发冷,那不是真气,后来会逐渐变热。不要去注意这些问题。 三,关于练功的时机和次数。虽然有子午流注的学说,子时一阳生什么的,不用太在意,一般来说,什么时间都可以。每天练个两次就可以了。熟悉了之后,你就算不坐它也自己在练,当然,那是通了周天之后。 四,在练这个的时候,也有一些辅助法门,如九次呼吸法和丹田注气功,但杂而不纯,有兴趣的可以自己去看看,但没必要太认真。 五,养成一个好习惯非常重要,你在开始的时候落下的毛病以后要花很多时间来改,还不一定能改过来。对于初学者来说,纯字很重要,比如很多练过太极内功的人练内丹就转不过弯来,最后练成了四不像。他习惯了双脚压踵,习惯了气走涌泉,哪那么容易改过来。所以,一定要注意自然而然,能达到的境界肯定可以达到,不要急。你急也没用。 筑基础的时间问题- 古来关于筑基的时间有多种看法,一是要筑到阳光二现为止,这样的难度我看几乎没人能做到,但是一旦做到,后面的路很好走,但是也很危险。二是筑到小药生为止,我看是比较实际的。普通来说,只要坚持下来,大概一个月的时间就能完成,悟性高的两到三周就可以了。顺便说说,悟性高未必是好事,因为他领会快进步快,所以死功夫不够,这东西有很多时候还是要看死功夫的。 内丹与流行气功的区别 大多数流行气功只是道家内功的基础中的基础,之所以这样,是因为后面的太难,而且难以掌握,很容易出问题。流行气功一般只练到个"有感觉",然后就带着真气一顿乱跑,不是冥想

手把手教你做抖音号,月入三万是起步

手把手教你做抖音号,月入三万是起步 现在抖音是越来越火了,如果你能琢磨出门道来,一月三万是起步。 现在很多网赚圈子都开始介入了,因抖音流量大,动辄几十万的点赞和十几万条的评论,而且流量黏度高,付费率强,在商家眼里都是钱呀。我身边有几个朋友最近两三个月在抖音上玩项目,平均月收入都在5W+。 1抖音的价值 我们直接看一下抖音号的市场行情:很多人都在出售各类抖音号,并且价格并不便宜。一个十二万的情感类粉,能够卖到7500块。一个52.5万粉的抖音号能够卖到2.6万。一个育儿抖音号的粉,想要卖到16万。这是什么概念呢?说明,你靠运营抖音号就能完全养活自己,发家致富。 2如何运营一个高价值的抖音号? 运营一个高价值的抖音号,难不难? 难度肯定是有的,但是需要技巧,一个好的技巧,好的思路,往往能够在短时间之内就能够暴富。毕竟互联网上实用主义的人还是比较多的。 该如何打造一个抖音号?

1.账号定位 这里的选择非常重要,一定要定好位,不然以后不好变现,毕竟我们做抖音为了赚钱,不是为了情怀。大家一定要选择高价值的行业定位,比如减肥、炒股、瘦身、美容等这些都是非常具有变现能力的行业。 一个账号,在一个多月的时间内就能够做到30多万粉。而且他的粉丝含金量非常高,自然能够卖一个好的价钱。 即使自己做产品变现也能够有很大的变现能力。所以定位是非常重要的,一定要选择刚需,无非就是这几个衡量标准。男人要赚钱,女人要漂亮,小孩要聪明,老人要健康。从这几个方面发掘你就能找到很多高价值的行业。 2.内容录制 说到底,视频内容是吸引粉丝的重中之重,但是很多人根本就没有原创能力怎么办。 其实也简单,有两种方式,一种是录屏,一种就是做图片类的视频。 这样的视频,根本不是自己原创的,如果有人认识这个人的话你就知道,这个人是韩国减肥达人郑多燕,已经五十多岁了,身材保持的非常好,是减肥界励志的榜样。 这样的视频,就是纯属录屏视频。 如何录屏?

从业将近十手把手教你单片机程序框架DOC

第一节:吴坚鸿谈初学单片机的误区。 (1)很难记住繁杂的寄存器?寄存器不用死记硬背,鸿哥我行走江湖多年,连一个寄存器都记不住。需要配置寄存器的时候,直接在网上或者书本上参考别人现成的配置程序是上策,查找芯片数据手册是中策,死记硬背寄存器是最最下策。 (2)很难记住繁杂的汇编语言指令?除非是在校学生要应付考试或者少数工作中绕不开汇编,否则学汇编就是浪费时间。鸿哥我行走江湖多年,从来就没有用汇编帮客户做过一个项目。 (3)C语言很难学?你不用学指针,你不用学带形参的函数,你不用学结构体,你不用学宏定义,你不用学文件操作,你也不用死记繁琐的数据类型。你只要会: 5条指令语句switch语句,if else语句,while语句,for语句,=赋值语句。 7个运算符+,-,*,/,|,&,!。 4个逻辑关系符||,&&,!=,==. 3个数据类型unsigned char,unsigned int,unsigned long。 3个进制相互转化,二进制,十六进制,十进制。 1个void函数。 1个一维数组code(或const) unsigned char array[]。 那么世界上任何一种逻辑功能的单片机软件你都能做出来。 鸿哥我当年刚毕业出来工作的时候才知道可以用C语言开发单片机,一开始只用if语句就把项目做出来了,没有用指针,没有用带形参的函数等复杂的功能。再到后来才慢慢开始用C语言其他的高级功能,但是我发现C语言其他的高级功能,本质上都是用我前面列举出来的最基本功能集合而成,只是书写更加简单方便了一点,编译后的机器码都大同小异。所以不会指针等高级功能你不用自卑,恰恰相反,当你会最简单的几个语句,就把这些高级功能的程序都做出来了,你才发现你对底层了解得更加透切,再学那些高级功能轻而易举。当你裸机跑的程序都能够协调得很好的时候,你才发现所谓高深的操作系统也不过如此,只要给你时间和金钱你也可以写个操作系统来玩玩。 (4)很难记住精确时间的计算公式?经常看到时间公式等于晶振,时钟周期,执行指令次数他们之间的乘除关系式。鸿哥我认为这些都是浮云,不用纠结也不用去记,大概了解一下就可以了。不管你对公式掌握得有多精确,你都不可能做出非常精确的时间。想用单片机做一个非常精确的时间这种想法一开始就是错的,不可能的。真想做一个比较精确的时间,应该用外围时钟芯片或者FPGA和CPLD,而不是单片机。 (5)很难记住繁杂的各种通信协议?什么IIC,SPI,232串口通讯,CAN,USB等等。这些都是浮云,你不用记那么多,你只要理解两种通讯方式就够了,那就是串行通讯方式和并行通讯方式。不管世界上有多少种通讯协议,物理世界上只有这两种通讯方式,其他各种名称的通讯协议都基于此两种方式演变而来。 (6)很难写短小精悍的程序?初学者不要纠结于此。做项目开发,程序容量不是刻意追求的目标,程序多一点少一点没关系,现在大容量的单片机品种非常多,容量不会是寸土寸金的事情,我们更加要关注程序的运行效率,可读性和可修改性。 既然鸿哥列出了那么多误区,那么什么才是初学者关注的核心?预知详情,请听下回分解----delay()延时实现LED灯的闪烁。 第二节:delay()延时实现LED灯的闪烁。 开场白: 上一节鸿哥列出了初学者六大误区,到底什么才是初学者关注的核心?那就是裸机奔跑的程序结构。一个好的程序结构,本身就是一个微型的多任务操作系统。鸿哥教给大家的就是如何编写这个简单的操作系统。在main函数循环中用switch语句实现多任务并行处理的任务切换,再外加一个定时器中断,这两者的结合就是鸿哥多年来所有实战项目的核心。鸿哥的程序结构看似简单,实际上就是那么简单。大家不用着急,本篇连载文章现在才正式开始,这一节我

相关文档
最新文档