언어 자료구조 알고리즘/프로그래밍 실습

[NCS 응용 SW엔지니어링 실습] 애플리케이션 구현 - 공통 모듈 구현하기

언제나휴일 2018. 3. 27. 12:25
반응형

[NCS 응용 SW엔지니어링 실습] 애플리케이션 구현 - 공통 모듈 구현하기



과정명

IoT기반 융합 SW 개발자 양성과정

과목명

애플리케이션 구현

(2001020203_14v2)

요소명

공통 모듈 구현하기

수행일자

201803.27

훈련생

 

 

수행과제

DBMS에 구현한 저장 프로시저를 호출하는 메서드를 캡슐화한 DBM For All 라이브러리를 작성하고 테스트하시오.

수행 결과에는 DBM For All 라이브러리에서 제공하는 클래스 코드를 기재합니다.

jejutour@daum.net 메일로 201846일까지 제출하시오.

과제를 통해 확인할 능력 사항

1. 공통 모듈의 상세 설계를 기반으로 프로그래밍 언어와 도구를 활용하여 업무 프로세스 및 서비스의 구현에 필요한 공통 모듈을 작성할 수 있다.

2. 모듈간의 결합도는 줄이고 모듈 내부의 응집도를 높인 공통 모듈을 구현할 수 있다.

3. 공통 모듈을 테스트 케이스를 작성하고 테스트를 수행하기 위한 테스트 조건을 명세화할 수 있다.

수행결과

 


참고 파일

애플리케이션 구현 실습[공통 모듈 구현하기] 예.hwp

애플리케이션 구현 실습[공통 모듈 구현하기].hwp


수행결과

using System.Collections.Generic;

using System.Data;

using System.Data.SqlClient;

using WSECoreLibrary;

 

namespace DBM_For_All_Lib

{

/// <summary>

/// DBMS를 사용하기 위한 정적 클래스

/// </summary>

public static class EHDbmForAll

{

static string constr =

@"Data Source=[DBMS인스턴스명];Initial Catalog=[DB];User ID=[계정명];Password=[비밀번호];";

/// <summary>

/// Seed 사이트 추가 메서드

/// </summary>

/// <param name="url">사이트 주소</param>

public static void AddSeedSite(string url)

{

AddCandidate(url, 0);

}

 

/// <summary>

/// 후보 사이트 추가 메서드

/// </summary>

/// <param name="url">사이트 주소</param>

/// <param name="depth">Seed 사이트에서 상대적 깊이</param>

public static void AddCandidate(string url, int depth)

{

SqlCommand scom = MakeSPCommand("AddCandidate",

CommandType.StoredProcedure);

SqlParameter sp_url = new SqlParameter("@Url", url);

SqlParameter sp_depth = new SqlParameter("@Depth", depth);

scom.Parameters.Add(sp_url);

scom.Parameters.Add(sp_depth);

 

scom.Connection.Open();

scom.ExecuteNonQuery();

scom.Connection.Close();

}

 

/// <summary>

/// 수집 사이트 등록 메서드

/// </summary>

/// <param name="purl">수집 사이트</param>

public static void StorePostedUrl(PostedUrl purl)

{

SqlCommand scom = MakeSPCommand("AddPostedUrl", CommandType.StoredProcedure);

SqlParameter sp_url = new SqlParameter("@Url", purl.Url);

SqlParameter sp_ourl = new SqlParameter("@OriginUrl", purl.OriginUrl);

SqlParameter sp_depth = new SqlParameter("@Depth", purl.Depth);

SqlParameter sp_pt = new SqlParameter("@PostedTime", purl.PostedTime);

SqlParameter sp_pc = new SqlParameter("@PostedContent", purl.Content);

SqlParameter sp_title = new SqlParameter("@TItle", purl.Title);

 

scom.Parameters.Add(sp_url);

scom.Parameters.Add(sp_ourl);

scom.Parameters.Add(sp_depth);

scom.Parameters.Add(sp_pt);

scom.Parameters.Add(sp_pc);

scom.Parameters.Add(sp_title);

 

scom.Connection.Open();

scom.ExecuteNonQuery();

scom.Connection.Close();

}

 

/// <summary>

/// 수집 사이트 형태소 개수 등록 메서드

/// </summary>

/// <param name="url">사이트 주소</param>

/// <param name="mcnt">형태소 개수</param>

public static void AddMCPostedInfo(string url, int mcnt)

{

SqlCommand scom = MakeSPCommand("AddMCPostedUrlInfo",

CommandType.StoredProcedure);

SqlParameter sp_url = new SqlParameter("@Url", url);

SqlParameter sp_tcnt = new SqlParameter("@TotalCount", mcnt);

scom.Parameters.Add(sp_url);

scom.Parameters.Add(sp_tcnt);

 

scom.Connection.Open();

scom.ExecuteNonQuery();

scom.Connection.Close();

}

 

/// <summary>

/// 형태소 정보 추가 메서드

/// </summary>

/// <param name="url">사이트 주소</param>

/// <param name="mo">형태소 이름</param>

public static void AddMorphemeInfo(string url, Morpheme mo)

{

AddMorphemeInfo(mo.Name);

AddInvertedItem(mo.Name, url, mo.Count);

}

 

/// <summary>

/// 역 파일 요소 등록 메서드

/// </summary>

/// <param name="name">형태소 이름</param>

/// <param name="url">사이트 주소</param>

/// <param name="count">사이트 내 형태소 빈도수</param>

public static void AddInvertedItem(string name, string url, int count)

{

SqlCommand scom = MakeSPCommand("AddInvertedItem", CommandType.StoredProcedure);

SqlParameter sp_mo = new SqlParameter("@Morpheme", name);

SqlParameter sp_url = new SqlParameter("@Url", url);

SqlParameter sp_rcnt = new SqlParameter("@Refcnt", count);

scom.Parameters.Add(sp_mo);

scom.Parameters.Add(sp_url);

scom.Parameters.Add(sp_rcnt);

 

scom.Connection.Open();

scom.ExecuteNonQuery();

scom.Connection.Close();

}

 

/// <summary>

/// 형태소 정보 추가 메서드

/// </summary>

/// <param name="name">형태소</param>

/// <returns></returns>

public static bool AddMorphemeInfo(string name)

{

SqlCommand scom = MakeSPCommand("AddMorphemeInfo", CommandType.StoredProcedure);

SqlParameter sp_mo = new SqlParameter("@Morpheme", name);

SqlParameter sp_existed = new SqlParameter("@Existed", SqlDbType.Int);

sp_existed.Direction = ParameterDirection.Output;

scom.Parameters.Add(sp_mo);

scom.Parameters.Add(sp_existed);

 

scom.Connection.Open();

scom.ExecuteNonQuery();

scom.Connection.Close();

return (int)sp_existed.Value == 1;

}

 

/// <summary>

/// 형태소 목록 구하는 메서드

/// </summary>

/// <returns>형태소 컬렉션</returns>

public static List<string> GetMorphemes()

{

List<string> mores = new List<string>();

SqlCommand scom = MakeSPCommand("select * from IndexInvFileTable",

CommandType.Text);

scom.Connection.Open();

SqlDataReader sdr = scom.ExecuteReader();

while (sdr.Read())

{

string mo = sdr["Morpheme"] as string;

mores.Add(mo);

}

sdr.Close();

scom.Connection.Close();

return mores;

}

 

/// <summary>

/// 수집 대상 사이트 목록 구하는 메서드

/// </summary>

/// <returns>수집 대상 사이트 목록</returns>

public static List<Candidate> GetCandidates()

{

List<Candidate> candies = new List<Candidate>();

SqlCommand scom = MakeSPCommand("select * from CandidateTable",

CommandType.Text);

scom.Connection.Open();

SqlDataReader sdr = scom.ExecuteReader();

while (sdr.Read())

{

string url = sdr["Url"] as string;

int depth = (int)sdr["Depth"];

candies.Add(new Candidate(url, depth));

}

sdr.Close();

scom.Connection.Close();

return candies;

}

 

/// <summary>

/// 맨 먼저 등록한 수집 대상 사이트 구하는 메서드

/// </summary>

/// <returns>수집 대상 사이트</returns>

public static Candidate GetFrontCandidate()

{

SqlCommand scom = MakeSPCommand("GetFrontCandidate",

CommandType.StoredProcedure);

SqlParameter sp_url = new SqlParameter("@Url", SqlDbType.NVarChar, 200);

sp_url.Direction = ParameterDirection.Output;

SqlParameter sp_depth = new SqlParameter("@Depth", SqlDbType.Int);

sp_depth.Direction = ParameterDirection.Output;

SqlParameter sp_getted = new SqlParameter("@Getted", SqlDbType.Int);

sp_getted.Direction = ParameterDirection.Output;

scom.Parameters.Add(sp_url);

scom.Parameters.Add(sp_depth);

scom.Parameters.Add(sp_getted);

scom.Connection.Open();

scom.ExecuteNonQuery();

scom.Connection.Close();

int getted = (int)sp_getted.Value;

if (getted == 0)

{

return new Candidate();

}

int depth = (int)sp_depth.Value;

string url = sp_url.Value as string;

return new Candidate(url, depth);

}

 

static SqlCommand MakeSPCommand(string cmdtext, CommandType cmdtype)

{

SqlConnection scon = new SqlConnection(constr);

SqlCommand scom = new SqlCommand(cmdtext, scon);

scom.CommandType = cmdtype;

return scom;

}

}

}

 


반응형