Category Archives: Homework

ReadRssFeed

       public static List<RssFeedItem> ReadRssFeed(string url)
        {
            //create a new list of the rss feed items to return
            List<RssFeedItem> rssFeedItems = new List<RssFeedItem>();

            //create an http request which will be used to retrieve the rss feed
            HttpWebRequest rssFeed = (HttpWebRequest)WebRequest.Create(url);
            rssFeed.Timeout = 200000;

            //use a dataset to retrieve the rss feed
            using (DataSet rssData = new DataSet())
            {
                //read the xml from the stream of the web request
                rssData.ReadXml(rssFeed.GetResponse().GetResponseStream());

                //loop through the rss items in the dataset and populate the list of rss feed items
                foreach (DataRow dataRow in rssData.Tables[“item”].Rows)
                {
                    rssFeedItems.Add(new RssFeedItem
                    {
                        Title = Convert.ToString(dataRow[“title”]),
                        PublishDate = Convert.ToDateTime(dataRow[“pubDate”]),
                        Description = Convert.ToString(dataRow[“description”]),
                        Link = Convert.ToString(dataRow[“link”])
                    });
                }
            }

            //return the rss feed items
            return rssFeedItems;
        }

HW4

연습문제 (4)


□ 단원 : C# WinForm
□ 목표 : 상속 & Collections & FileIO & Controls & GDI+ & Dialog & XML
□ 주요 연습 내용 : RSS Feed, Listview, PictureBox, Paint, Print
□ 준비자료 : QuakeData.cs, 실시간 지진데이터 사이트, Resources 아이콘과 이미지http://earthquake.usgs.gov/earthquakes/shakemap/rss.xml
Sample xml file:2513662341.xml2300498696.cs5556590159.hwp
[연습문제] Ex4 (Due by 12/07 금 24시까지)
-cyber 강의실 (cyber.dku.edu)로 source code, executable file, solution/project VC# file, 보고서를 학번_이름_Ex4.zip으로 묶어서 낼 것. 보고서 (30%)


[연습문제]


1. Form1.cs (메인 폼)에 각종 컨트롤을 추가한다. (10%)
사용자 삽입 이미지
2. Form2.cs (지도 폼)에 각종 컨트롤을 추가한다. (10%)

사용자 삽입 이미지
3. Form1.cs에 이벤트 핸들러 & RssQuakeDataManager.cs (20%)
– 메인폼이 로드될때 초기화
– 종료 버튼 클릭시 프로그램 종료
– RssFeed 버튼 클릭시 새로운 RssFeed 시작
– Mapview 버튼 클릭시 Form2 실행
– 콤보박스 아이템 선택시 리스트뷰의 뷰를 변동
– 리스트뷰에서 아이템 선택시 웹사이트 실행
– image는 XML 파일을 파싱해서 <description>안에
http://earthquake.usgs.gov/eqcenter/shakemap/thumbs/shakemap_global_c000dzlx.jpg
웹사이트에서부터 이미지를 로딩함!!

4. Form2.cs에 이벤트 핸들러 (10%)
– 지도뷰폼이 로드될 때 초기화
– 지도뷰폼이 Resize될 때 다시그리기
– 픽쳐박스 그리기
– 프린트 출력

5. Form1.cs의 listView1 정렬 & ListViewItemComparer.cs & RssQuakeDataManager.cs (10점)
– 리스트뷰 칼럼 클릭시 칼럼명으로 정렬

6. Form1.cs의 파일입출력 & RssQuakeDataManager.cs (10점)
– 텍스트파일 읽기
– 텍스트파일 저장


7. 본인이 원하는 기능을 더 추가하고, 결과를 모두 출력해서 넣는다.
사용자 삽입 이미지사용자 삽입 이미지

사용자 삽입 이미지


Draw Shapes to Bitmap in Memory

도형그리기를 비트맵이미지로 그리기

private void Form1_Paint(object sender, PaintEventArgs e)
{
Graphics g = e.Graphics;

// Create a Bitmap image in memory and set its CompositingMode
Bitmap bmp = new Bitmap(this.Size.Width, this.Size.Height,
PixelFormat.Format32bppArgb);
Graphics gBmp = Graphics.FromImage(bmp);
gBmp.CompositingMode = CompositingMode.SourceCopy;

// Pen으로 대각선과 사각형 그리기 (to bitmap in memory)
Pen p = new Pen(Color.Black, 3);
Rectangle r = new Rectangle(10, 10, this.Size.Width/2, this.Size.Height/2);
gBmp.DrawLine(p, 10, 10, this.Size.Width / 2 + 10, this.Size.Height / 2 + 10);
gBmp.DrawLine(p, this.Size.Width / 2 + 10, 10, 10, this.Size.Height / 2 + 10);
gBmp.DrawRectangle(p, r);

// Brush로 파란사각형 그리기 (to bitmap in memory)
Brush b = new SolidBrush(Color.Blue);
Rectangle r2 = new Rectangle(this.Size.Width / 2 + 10, this.Size.Height / 2 + 10,
this.Size.Width / 2 – 10, this.Size.Height / 2 – 10);
gBmp.FillRectangle(b, r2);

// Brush로 빨간삼각형 그리기 (to bitmap in memory)
Brush b2 = new SolidBrush(Color.Red);
Point[] pt = new Point[3];
pt[0].X = 400; pt[0].Y = 10;
pt[1].X = 300; pt[1].Y = 210;
pt[2].X = 500; pt[2].Y = 210;
gBmp.FillPolygon(b2, pt);

// HatchBrush로 타원 그리기 (to bitmap in memory)
HatchBrush hb = new HatchBrush(HatchStyle.DiagonalCross,
Color.Yellow, Color.Brown);
gBmp.FillEllipse(hb, 10, 220, 200, 100);

// DrawArc 메소드 사용하여 호 그리기 (to bitmap in memory)
Pen p2 = new Pen(Color.Green, 3);
Rectangle r3 = new Rectangle(220, 220, 200, 100);
gBmp.DrawArc(p2, r3, 0, 180);

// draw the bitmap on our window
g.DrawImage(bmp, 0, 0, bmp.Width, bmp.Height);
bmp.Dispose();
gBmp.Dispose();
}

Convert (Longitude, Latitude) to (X, Y) on a map

// Get the latitude as a value between 0 and 180,
// where the negative values represent values South of the Equator
double latitude = lat + 90.0;
// Get the longitude as a value between 0 and 360,
// where the negative values represent values West of the Greenwich Meridian.
double longitude = lon + 180.0;

// calculate how many pixels are needed to represent each degree for width and height
double pixelsWidth = map.Width/360.0;
double pixelsHeight = map.Height/180.0;

// Calculate how many pixels we need to represent our latitude value
double latitudePixels = latitude * pixelsHeight;
// Calculate how many pixels we need to represent our longitude value
double longitudePixels = longitude * pixelsWidth;

// The X coordinate of our point is the longitudePixels value
float x = (float)longitudePixels;
// The Y coordinate of our point is 180-latitude
// since the Y axis is facing down but the map is facing up
float y = (float) ((180.0 * pixelsHeight) – latitudePixels);

HW3

연습문제 (3)

단원 : C# WinForm

목표 : C# Form, Controls, GUI, Dialog

주요 연습 내용 : collections, class, Form, 속성, FileIO 연습

준비자료 : CurrencyExchange.cs

  7047551813.cs

연습문제 Ex3 (Due by 11/10 24시까지)

-cyber 강의실 (cyber.dku.edu)source code, executable file, solution/project VC# file, 보고서를 학번_이름_Ex3.zip으로 묶어서 낼 것. 보고서 (30%)

[연습문제]

1. Form1에 각종 컨트롤을 추가한다. (10%)

– groupBox1(환전방법) & radioButton1 & radioButton2 & radioButton3
– groupBox2
– textBox1 & textBox2
– comboBox1 & comboBox2 (한국/미국/일본…)
– label1 & label2 (KRW…)
– label3 (=) & label4 (환율고시 최근업데이트 시각)
– listView1 (View 속성을 Details로 하고, Columns에 통화명, 매매기준율, 살 때, 팔 때 추가)

사용자 삽입 이미지


2. CurrencyExchange.cs
클래스와 CurrencyExchangeConverter.cs 클래스를 가지고CurrencyConverter.dll을 생성한다. (20%)

참조: http://dis.dankook.ac.kr/lectures/hci12/entry/C-Point-Point3D-Class-Assembly
경고: Reference에서 System.Windows.Forms를 추가해야 함
새프로젝트 -> Class Library 선택해서 CurrencyConverter로 생성

사용자 삽입 이미지

CurrencyExchangeConverter 클래스

멤버 필드

+static Dictionary<string, CurrencyExchange> currencies; // 환율 데이터

+static DateTime lastUpdated; // 최근 업데이트 시각

+static string filename; // 환율 데이터를 저장하는 파일명 (lastUpdated를 이용하여 파일명 생성, : 2012-11-01_17-55-10.txt)

속성

+public static DateTime LastUpdated { get; }

=> lastUpdated 반환 (label4에서 사용)

메소드

+static CurrencyExchangeConverter()

=> currencies 생성, DownloadTodayCurrencyExchangeRates, WriteFile

+static void DownloadTodayCurrencyExchangeRates()

=> 네이버 환율 사이트에서 데이터를 받아서 currencies에 저장

+static void WriteFile()

=> currencies 데이터를 파일로 저장 (이미 파일이 존재할 시 저장 안함)

+public static Dictionary<string, CurrencyExchange> GetCurrencyExchangeList()

=> currencies 데이터를 반환

+ICollection<string> GetCurrencyExchangeKeys()

=> currencies에서 Keys를 반환 (comboBox1&2에서 사용)

+public static ICollection<CurrencyExchange> GetCurrencyExchangeValues()

=> currencies에서 Values를 반환 (listView1에서 사용)

+public static string GetCurrencySign(string hname)

=> currencies 데이터에서 hname (: 미국)을 가지고 해당 sign (: USD)

반환 (label1&2에서 사용)

+public static double Exchange(string fromCurrency, string toCurrency, ExchangeMethod

method, double value)

=> currencies 데이터에서 환전방법(기준/살 때/팔 때)에 따라서 환율을

받아와서 환전을 계산 (공식: value * (fromRate/toRate) )

 

3. CurrencyConverter.dll을 이용하여 Form1에서 환율계산기를 작성한다. (20%)

경고: Reference에서 CurrencyConverter.dll를 추가해야 함
사용자 삽입 이미지

– Form1_Load

=> 초기화 상태를 만들어 준다.

=> comboBox1&2CurrencyExchangeConverter.GetCurrencyExchangeKeys() 사용

=> listView1CurrencyExchangeConverter.GetCurrencyExchangeValues() 사용 (listViewItem 추가 시 한국은 빼준다.)

=> label4CurrencyExchangeConverter.LastUpdated 사용
사용자 삽입 이미지 

– radioButton_CheckChanged

=> radioButton1/2/3Checked하면 ExchangeMethod.Standard/Buy/Sell로 선택

– comboBox1_SelectedIndexChanged & comboBox2_SelectedIndexChanged

=> comboxBox1/2에서 유럽연합선택하면 label1/2EUR로 바꿔줌

=> CurrencyExchangeConverter.GetCurrencySign(…) 사용 (, 일본은 “JPY 100”로 바꿔줌)

– textBox1_KeyPress & textBox2_KeyPress

=> 실제 textBox1 또는 textBox2에 넣은 value 값으로 환율변환을 계산하여 상대방 쪽에 보여줌

=> CurrencyExchangeConverter.Exchange(…) 사용 (, 일본은 100엔 기준임)사용자 삽입 이미지

 

4. 일반 TextBox 대신 숫자만 입력받을 수 있는 사용자 정의 컨트롤 (NumberTextBox)를 사용하거나, 본인이 원하는 기능을 더 추가한다. (10%)

참조: http://dis.dankook.ac.kr/lectures/hci12/entry/Number-Only-Textbox
          http://dis.dankook.ac.kr/lectures/hci12/entry/Custom-Control
경고
: Reference에서 NumberTextBoxLib.dll를 추가해야 함 & 도구상자 (Toolbox)에서 오른쪽마우스버튼을 누르고 팝업메뉴에서 아이템선택 (Choose Items)을 한 후 Browse해서 직접 NumberTextBoxLib.dll을 선택하면 NumberTextBox라는 컨트롤이 생성 됨

– numberTextBox1 & numberTextBox2

사용자 삽입 이미지

 

 

Custom Control

사용자 정의 컨트롤
-기존 컨트롤을 상속받아 사용자 정의 새로운 컨트롤을 작성
-UserControl을 상속받아 합성 컨트롤을 작성

1. 파일 메뉴->새로 만들기->프로젝트
Visual C# 프로젝트 목록에서 “Windows Forms 컨트롤 라이브러리” 선택하고 이름을 “NumberTextBoxLib”을 입력
사용자 삽입 이미지2. 솔루션 탐색기에서 UserControl1.cs를 NumberTextBox.cs로 변경

NumberTextBox.cs 코드에서 상속을 UserControl에서 TextBox로 변경
public partial class NumberTextBox: TextBox
NumberTextBox.Designer.cs에 InitializeComponent()에서 AutoScaleMode 속성은 삭제
NumberTextBox.cs 코드에서 OnKeyPress(…) 메소드를 재정의
솔루션을 빌드하면 컨트롤이 완성
사용자 삽입 이미지———————————————————————————————————-
사용자 정의 컨트롤 사용
1.솔루션 탐색기의 “참조”에 “NumberTextBoxLib.dll”를 “참조추가”
“도구상자”에서 오른쪽 마우스 “항목선택”을 한 후 “찾아보기” 버튼에서 “NumberTextBoxLib.dll” 다시 로딩한 후, “NumberTextBox” 에 체크가 됬는지 확인

사용자 삽입 이미지

사용자 삽입 이미지사용자 삽입 이미지사용자 삽입 이미지

2. 폼에 “NumberTextBox”를 사용하여 디자인하고 솔루션을 빌드하면 컨트롤이 완성

네이버 오늘의 환율 시세 출력에서 last_update 추가 (C#)

// 네이버 오늘의 환율 시세 출력 (C#)
public void DownloadTodayCurrencyExchangeRates()
{
WebClient client = new WebClient();
client.Headers.Add(“Referer”, “http://blog.naver.com/usback“);
Stream xmlDataStream = client.OpenRead(
http://www.naver.com/include/timesquare/widget/exchange.xml“);
XmlReader reader = XmlReader.Create(xmlDataStream);
reader.MoveToContent();

// last_update
reader.ReadToFollowing(“last_update”);
string lastUpdate = reader.ReadElementContentAsString(“last_update”,
reader.NamespaceURI);
int year = int.Parse(lastUpdate.Substring(0, 4));
int month = int.Parse(lastUpdate.Substring(4, 2));
int day = int.Parse(lastUpdate.Substring(6, 2));
int hour = int.Parse(lastUpdate.Substring(8, 2));
int minute = int.Parse(lastUpdate.Substring(10, 2));
int second = int.Parse(lastUpdate.Substring(12, 2));
lastUpdated = new DateTime(year, month, day, hour, minute, second);

while (reader.ReadToFollowing(“currency”))
{
reader.ReadToFollowing(“hname”);
string hname = reader.ReadElementContentAsString(“hname”,
reader.NamespaceURI);
reader.ReadToFollowing(“standard”);
double standard = reader.ReadElementContentAsDouble(“standard”,
reader.NamespaceURI);
reader.ReadToFollowing(“buy”);
double buy = reader.ReadElementContentAsDouble(“buy”,
reader.NamespaceURI);
reader.ReadToFollowing(“sell”);
double sell = reader.ReadElementContentAsDouble(“sell”,
reader.NamespaceURI);
reader.ReadToFollowing(“sign”);
string sign = reader.ReadElementContentAsString(“sign”,
reader.NamespaceURI);
Console.WriteLine(“{0}\t{1}\t{2}\t{3}\t{4}”, hname, standard, buy, sell, sign);
}
}

Number Only Textbox

// number only textbox using TryParse
private void textBox1_KeyPress(object
sender, KeyPressEventArgs e)
{
    int value = 0;
    e.Handled = !int.TryParse(e.KeyChar.ToString(), out value);
}

// number only textbox using Regex.IsMatch
private void
textBox2_KeyPress(object sender, KeyPressEventArgs e)
{
    if (!System.Text.RegularExpressions.Regex.IsMatch(e.KeyChar.ToString(), “\\d+”))
        e.Handled = true;
}

// NumberTextBoxLib custom control (inherited from TextBox)
public
partial class NumberTextBox : TextBox
{
        public NumberTextBox()
        {
            InitializeComponent();
        }

        protected override void OnKeyPress(KeyPressEventArgs e)
        {
            base.OnKeyPress(e);
            int value = 0;
            e.Handled = !int.TryParse(e.KeyChar.ToString(), out value);
   
    }
}

1305433735.zip

C# Formatting Numeric String

http://dis.dankook.ac.kr/lectures/hci09/entry/C-String-Formatting

Formatting Standard Numeric Format Strings
http://msdn.microsoft.com/en-us/library/s8s7t687(VS.80).aspx

Formatting Custom Numeric Format Strings
http://msdn.microsoft.com/en-us/library/0c899ak8.aspx

Formatting Numeric Format Strings (Alignment)
Integer    http://www.csharp-examples.net/string-format-int/
Double    http://www.csharp-examples.net/string-format-double/
DateTime http://www.csharp-examples.net/string-format-datetime/
Align String with Spaces  http://www.csharp-examples.net/align-string-with-spaces/
Indent String with Spaces http://www.csharp-examples.net/indent-string-with-spaces/
IFormatProvider               http://www.csharp-examples.net/iformatprovider-numbers/
Custom IFormatProvider   http://www.csharp-examples.net/custom-iformatprovider/
























































Character Description Examples Output
C or c Currency Console.Write(“{0:C}”, 2.5); $2.50
Console.Write(“{0:C}”, -2.5); ($2.50)
D or d Decimal Console.Write(“{0:D5}”, 25); 25
E or e Scientific Console.Write(“{0:E}”, 250000); 2.50E+05
F or f Fixed-point Console.Write(“{0:F2}”, 25); 25
Console.Write(“{0:F0}”, 25); 25
G or g General Console.Write(“{0:G}”, 2.5); 2.5
N or n Number Console.Write(“{0:N}”, 2500000); 2,500,000.00
X or x Hexadecimal Console.Write(“{0:X}”, 250); FA
Console.Write(“{0:X}”, 0xffff);