본문 바로가기
코스웨어/15년 스마트컨트롤러

20150625 업무일지 출석번호 9번 김태현

by 알 수 없는 사용자 2015. 6. 25.
728x90
반응형

C#


데이터 테이블 생성하는 버튼의 소스

    private void btn_DataTable_Click(object sender, System.EventArgs e)
    {
      tbl = new DataTable("classinfo"); // classInfo 테이블 생성
      DataColumn column ;   // 컬럼 인스턴스 생성
    
      // 학번 컬럼 만들기
      column = new DataColumn();  
      column.DataType = Type.GetType("System.String"); // 데이터형 지정
      column.ColumnName = "Name";  // 칼럼 이름 설정
      column.AllowDBNull = false;  // 널 값 허용 안함
      tbl.Columns.Add(column);     // 테이블에 칼럼 추가

      // 국어 컬럼 만들기
      column = new DataColumn();  
      column.DataType = Type.GetType("System.Int32"); // 데이터형
      column.ColumnName = "Kor" ;  // 컬럼 이름
      column.AllowDBNull = false;  // 널값 허용 안함
      tbl.Columns.Add(column);  // 테이블에 컬럼 추가

      // 영어 컬럼 만들기
      column = new DataColumn();  
      column.DataType = Type.GetType("System.Int32"); // 데이터형
      column.ColumnName = "Eng" ;  // 컬럼 이름
      column.AllowDBNull = false;  // 널값 허용 안함
      tbl.Columns.Add(column);  // 테이블에 컬럼 추가

      // 수학 컬럼 만들기
      column = new DataColumn();  
      column.DataType = Type.GetType("System.Int32"); // 데이터형
      column.ColumnName = "Math" ;  // 컬럼 이름
      column.AllowDBNull = false;  // 널값 허용 안함
      tbl.Columns.Add(column);  // 테이블에 컬럼 추가

      // 평균 컬럼 만들기
      column = new DataColumn();  
      column.DataType = Type.GetType("System.Double"); // 데이터형
      column.ColumnName = "Avg" ;  // 컬럼 이름
      column.AllowDBNull = false;  // 널값 허용 안함
      tbl.Columns.Add(column);  // 테이블에 컬럼 추가

      //학번 컬럼을 기본 키 설정
      DataColumn [] pk = new DataColumn[1];
      pk[0= tbl.Columns["No"];
      tbl.PrimaryKey = pk;

      // 새로운 레코드 추가하기
      DataRow row;
      row = tbl.NewRow();  // 200501 번 데이터
      row["Name"= "홍길동";
      row["Kor"= 90;
      row["Eng"= 83;
      row["Math"= 81;
      row["Avg"= (90+83+81)/3.0;
      tbl.Rows.Add(row);
      
      row = tbl.NewRow();  // 200502 번 데이터
      row["Name"= "김동현";
      row["Kor"= 95;
      row["Eng"= 81;
      row["Math"= 90;
      row["Avg"= (95+81+90)/3.0;
      tbl.Rows.Add(row);

      row = tbl.NewRow();  // 200503 번 데이터
      row["Name"= "오종석";
      row["Kor"= 80;
      row["Eng"= 90;
      row["Math"= 75;
      row["Avg"= (80+90+75)/3.0;
      tbl.Rows.Add(row);

      data_Grid.DataSource = tbl;  // 데이터 그리드 화면 출력
    }



C++


두개 이상의 타입에서의 template 사용법


#include <iostream>

using namespace std;

class smart
{
  public:

};

template <class T , class T2>
T add(T fNum, T2 iNum)
{
  return fNum + (T)iNum;
}

/*float add(float fNum, int iNum)
{
  return fNum + (float)iNum;
}*/


int main()
{
  float fNum = 2.1;
  int iNum = 3;

  fNum = add<floatint>(fNum, iNum);

  cout << fNum << endl;

  return 0;
}

다른 두개 이상의 타입을 같이 써야하는 경우에는
위와 같이 template 해주면 된다. 


template의 특수화

#include
 <iostream>
#include <stdio.h>

using namespace std;

template <class T>
void Swap(T &a, T &b)
{
  T t;
  t=a;
  a=b;
  b=t;
}

template <> void Swap<double>(double &a, double &b)
{
  int i,j;

  i=(int)a;
  j=(int)b;
  a=a-i+j;
  b=b-j+i;
}

void main()
{
  double a=1.2;
  double b=3.4;
  printf("before a=%g, b=%g\n",a,b);
  swap(a,b);
  printf("after a=%g, b=%g\n",a,b);
}  

위와 같이 코딩해주면 double 타입에서만 다르게 동작하고 나머지 타입은 위의 원래 Swap함수와 같이 동작한다.


비타입 인수 


#include
 <iostream>
#include <stdio.h>
using namespace std;

template <typename T, int N>
class Array
{
  private:
    T ar[N];
  public:
    void SetAt(int n, T v)
    {
      if(n<&& n >=0)
      {
        ar[n]=v;
      }
    }
    T GetAt(int n)
    {
      return(n < N && n >=0 ? ar[n]:0);
    }
};

void main()
{
  Array<int,5> ari;
  ari.SetAt(1,1234);
  ari.SetAt(1000,5678);
  printf("%d\n", ari.GetAt(1));
  printf("%d\n", ari.GetAt(5));
}

위와같이 template를 int N과 같이 비타입 인수로 설정해주는게 가능하고 바로 초기화가 가능해진다.
비타입 인수는 상수만 가능하며 변수를 사용하면 에러로 처리된다.


728x90