C\#간단 한 성적 관리 시스템 의 전체 절 차 를 실현 합 니 다.

머리말
이번 주 에 C\#와 일주일 동안 접촉 했다.(이번 주 는 학교 에서 배정 한 실험 주간 이 고 C\#원 하 는 절차 와 기능 을 실현 하 는 데 사용 되 었 다)

모두 일곱 개의 실험 이 있 습 니 다.세 개 를 선택 하면 제 가 가장 많이 진보 한 하 나 를 선택 하여 분석 하 겠 습 니 다.

효과.
일단 효 과 를 볼 게 요.

txt 텍스트 에서 데 이 터 를 읽 고 보 여 줍 니 다.

대상 을 클릭 한 후 선택 하고"수정"을 클릭 하여 수정 화면 을 팝 업 한 후 편집 하면 됩 니 다.

"통계"단 추 를 누 르 면 팝 업 창 에 각 점수 구간 의 정 보 를 표시 합 니 다.

"조회"를 클릭 하면 화면 이 팝 업 됩 니 다.입력 후"확인"을 클릭 하면 정 보 를 표시 할 수 있 습 니 다.
이루어지다
준비 작업
방법 을 쓰기 전에 먼저 인터페이스 를 계획 하 는 것 은 단추 와 입력 상자 나 디 스 플레이 상 자 를 추가 하여 요구 에 부 합 된 창 이나 여러 창 을 구성 하 는 것 입 니 다.

이 프로그램 에서 우리 가 사용 하 는 것 은 주로 이 몇 개의 구성 요소 이다.
파일 을 조작 할 때 인용 할 성명,즉"using"

저희 가 이 두 줄 을 추 가 했 어 요.
그리고 우 리 는 코드 를 써 서 다른 기능 을 실현 해 야 한다.

 public Form1()
  {
   InitializeComponent();
   this.listView1.Columns.Add("  ", 100, HorizontalAlignment.Center);
   this.listView1.Columns.Add("  ", 100, HorizontalAlignment.Center);
   this.listView1.Columns.Add("  ", 100, HorizontalAlignment.Center);
   this.listView1.Columns.Add("  ", 100, HorizontalAlignment.Center);
   this.listView1.Columns.Add("  ", 100, HorizontalAlignment.Center);
   this.listView1.Columns.Add("  ", 100, HorizontalAlignment.Center);
   this.listView1.Columns.Add("   ", 100, HorizontalAlignment.Center);
   this.listView1.Columns.Add("  ", 100, HorizontalAlignment.Center);
   this.listView1.View = System.Windows.Forms.View.Details;
   this.listView1.FullRowSelect = true;//       
  }
"listview 1"은 단추 위 에 표 시 된 컨트롤 입 니 다."this"는 Form 1 이라는 창 을 말 합 니 다."Columns"는"표시 줄",즉 위의 내용 을 말 합 니 다."add"는 뒤의 내용 을"Columns"의 내용 으로 말 합 니 다.뒤의"100"등 은"Columns"의 속성 으로 속성 을 수정 하여 크기 와 위 치 를 수정 할 수 있 습 니 다.또 하나의'Column'을 만 드 는 방법 은 속성 표시 줄 을 통 해 추가 하 는 것 이다.
listview 를 한 번 클릭 하여 선택 한 다음 오른쪽 단 추 를 한 번 클릭 하고 속성 을 클릭 하면'Column'이라는 속성 이 있 습 니 다.클릭 하면 편집 과 수정 이 가능 합 니 다.



확실히 편리 하 다 고 말 할 수 밖 에 없 지만 실험 보고서 수첩 에 필요 한 소스 코드 를 주 었 고 C\#를 처음 접 했 기 때문에 뒤의 방법 을 사용 하지 않 았 지만 뒤의 조작 에서 사용 해 보 니 시원 하 다.
읽 기 동작
여기 서'읽 기'단 추 는 통계 후의 내용 을 읽 습 니 다.성적 등 정보 가 아 닙 니 다.'읽 기'단 추 를 두 번 누 르 면 편집 할 수 있 습 니 다.(단추 의 속성 에서 name 속성 을 load 로 수 정 했 기 때문에 이 방법 은'load'입 니 다.Click”)

 private void load_Click(object sender, EventArgs e)
  {
   this.load_data();
  }
여기 서"load"를 호출 하 였 습 니 다.data()"이 방법

 public void load_data()
 {   string file = File.ReadAllText("Score.txt", UTF8Encoding.Default);
   // txt            regex.Split    string   
   string[] records = Regex.Split(file, "\r
"); // this.listView1.BeginUpdate(); // this.listView1.Items.Clear(); // records.Length for (int index = 0; index < records.Length; index++) { // string[] components = Regex.Split(records[index], " "); // listview ListViewItem lvi = new ListViewItem(components); // lvi.SubItems[0].BackColor = Color.Red; // listview this.listView1.Items.Add(lvi); } // this.listView1.EndUpdate(); }
이 방법 은'/r/n'을 분계선 으로 배열 1 을 정의 한 다음 빈 칸 을 분계선 으로 배열 2 를 정의 하 는 동시에 ListView Item 을 생 성하 여 배열 2 를 표시 한 다음 배경 색 을 설정 하 는 것 입 니 다.여 기 는 빨간색 으로 설정 되 어 있 습 니 다.

 //  listview   
    ListViewItem lvi = new ListViewItem(components);
 //     
    lvi.SubItems[0].BackColor = Color.Red;
lvi 는 새로 생 성 된 listview 의 이름 입 니 다.
3.조회 조작

 private void Search_Click(object sender, EventArgs e)
  {
   Form3 f3 = new Form3();
   f3.Show();
  }
검색 방법 에서 우 리 는 하나의 창 Form 3 를 호출 했 습 니 다.Form 1 과 마찬가지 로 먼저 창의 구 조 를 계획 한 다음 에 방법 을 썼 습 니 다.

private void go_Click(object sender, EventArgs e)
  {
   string file = File.ReadAllText("Score.txt", UTF8Encoding.Default);
   // txt            regex.Split    string   
   string[] records = Regex.Split(file, "\r
"); // this.listView1.BeginUpdate(); // this.listView1.Items.Clear(); // records.Length for (int index = 0; index < records.Length; index++) { // string[] components = Regex.Split(records[index], " "); Regex r = new Regex(this.textBox1.Text); // Regex Match m = r.Match(components[0]); // if (m.Success) { // listview ListViewItem lvi = new ListViewItem(components); // lvi.SubItems[0].BackColor = Color.White; // listview this.listView1.Items.Add(lvi); } else if (components.Length > 1) { Match n = r.Match(components[1]); if (n.Success) { // listview ListViewItem lvi = new ListViewItem(components); // lvi.SubItems[0].BackColor = Color.White; // listview this.listView1.Items.Add(lvi); } } } // this.listView1.EndUpdate(); }
주요 한 방법,심지어 유일한 방법,바로 위의"go"입 니 다.Click()방법,"Score.txt"는 성적 등 정 보 를 저장 합 니 다.이름과 학 번 이 일치 합 니 다.새로 만 든 listview 의 item 전시 정보 와 일치 합 니 다.

이곳 의 조 회 는 일치 하 는 함 수 를 사 용 했 습 니 다Match()공식 링크 를 드 립 니 다.
Match()
삭제
삭 제 된 사상 은 삭 제 될 줄 을 선택 한 다음 파일 에서 모든 내용 을 읽 는 것 입 니 다.새 string 배열 은 각 줄,한 줄 한 줄 을 옮 겨 다 니 며 선택 한 줄 을 만 날 때 까지 배열 에서 삭제 한 다음 나머지 배열 요 소 를 텍스트 에 기록 합 니 다.Write AllLines()방법 정의 에서 replace()방법 을 사용 합 니 다.그래서 파일 의 원래 내용 을 삭제 하 는 작업 을 줄 였 습 니 다.

 private void Delate_Click(object sender, EventArgs e)//  
  {
   foreach (ListViewItem lvi in listView1.SelectedItems)
   {

    // txt       file ,   string  file      

    string file = File.ReadAllText("Score.txt", UTF8Encoding.Default);

    List<string> lines = new List<string>(Regex.Split(file, "\r
")); lines.RemoveAt(lvi.Index); File.WriteAllLines("Score.txt", lines.ToArray(), UTF8Encoding.Default); } this.load_data(); }
입력

 private void Input_Click(object sender, EventArgs e)//  
  {
   Form2 f = new Form2(this);
   f.Show();
  }
이 곳 의 입력 방법 은 새로운 창 Form 2 를 호출 했 습 니 다.이전 과 달리 Form 2 에 인자'this',즉 Form 1 이라는 창 을 전 달 했 습 니 다.그 후에 우 리 는 Form 2 방법 에서 Form 1 을 호출 해 야 하기 때 문 입 니 다.
Form 2 의 인터페이스 와 방법 을 살 펴 보 겠 습 니 다.

1.수신 매개 변수

 private Form1 form;
  public Form2()
  {
   InitializeComponent();
  }
  public Form2(Form1 form){
   this.form = form;
   InitializeComponent();
  
  }
먼저 정 의 를 내 린 다음 에 값 을 부여 하면 나중에 정의 할 때 사용 하 는 이름 으로 Form 1 방법 을 호출 할 수 있 습 니 다.
2.정보 저장
"저장"단 추 를 누 른 후에 우 리 는 텍스트 의 기록 과 인터페이스의 업 데 이 트 를 실현 해 야 합 니 다.텍스트 의 기록 은 새로운 방법 을 써 야 합 니 다.인터페이스의 업 데 이 트 는 Form 1 방법 을 사용 할 수 있 습 니 다.

 if (this.textBox1.Text != string.Empty && this.textBox2.Text != string.Empty && this.textBox3.Text != string.Empty && this.textBox4.Text != string.Empty && this.textBox5.Text != string.Empty)
   {
    //  string          ,    ,  txt   
    string newrecord = this.textBox1.Text + " " + this.textBox2.Text + " " + this.textBox3.Text + " " + this.textBox4.Text + " " + this.textBox5.Text + "\r
" ; File.AppendAllText("Score.txt", newrecord, UTF8Encoding.Default); // form2 this.Dispose(false); // Form1 this.form.load_data(); } else { Form5 f5 = new Form5(); f5.Show(); }
우선 비어 있 지 않 으 면 새 문자열,할당,텍스트 를 정의 합 니 다.프로그램의 엄밀 성 을 확보 하기 위해 Form 5 창 을 추가 하여 잘못된 알림 을 합 니 다.

(시간의 제한 으로 인해 이곳 도 완선 한 편 은 아니다.능력 있 는 사람 은 각 조건 의 판단 을 고려 할 수 있다.예 를 들 어'학 번'이 비어 있 으 면 팝 업 창 에'학 번 이 비어 있 으 면 안 된다'고 표시 한다)
주의해 야 할 것 은 여기 서 호출 된 Form 1 의 방법 은 반드시 공유 되 어야 한 다 는 것 이다.즉,'Public'이다.
연산

 private void operate_Click(object sender, EventArgs e)
  {
   // txt       file ,   string  file      
   string file = File.ReadAllText("Score.txt", UTF8Encoding.Default);
   // txt            regex.Split    string   
   string[] records = Regex.Split(file, "\r
"); // this.listView1.BeginUpdate(); // this.listView1.Items.Clear(); System.IO.File.WriteAllText("Score.txt", string.Empty); double[] score1 = new double[records.Length]; double[] score2 = new double[records.Length]; int num = 0; // records.Length for (int index = 0; index < records.Length; index++) { if (records[index].Length != 0) { // string[] components = Regex.Split(records[index], " "); score1[index] = Convert.ToDouble(components[2]) + Convert.ToDouble(components[3]) + Convert.ToDouble(components[4]); score2[index] = (Convert.ToDouble(components[2]) + Convert.ToDouble(components[3]) + Convert.ToDouble(components[4])) / 3.0; num++; } else break; } // int temp; for (int i = 0; i < num; i++) { temp = i; for (int j = i + 1; j < num; j++) { if (score1[j] > score1[temp]) temp = j; } double t = score1[temp]; score1[temp] = score1[i]; score1[i] = t; } for (int index = 0; index < records.Length; index++) { if (records[index].Length != 0) { // string[] components = Regex.Split(records[index], " "); for (int i = 1; i <= num; i++) { if (score1[i - 1] == Convert.ToDouble(components[2]) + Convert.ToDouble(components[3]) + Convert.ToDouble(components[4])) { // string , , txt string newrecord = components[0] + " " + components[1] + " " + components[2] + " " + components[3] + " " + components[4] + " " + score1[i - 1] + " " + score2[index] + " " + i + "\r
"; File.AppendAllText("Score.txt", newrecord, UTF8Encoding.Default); } } } else break; } // this.listView1.EndUpdate(); // this.load_data(); }
제목 의 요 구 는 각 학생 의 총 점,평균 점 과 순 위 를 계산 하 는 것 이다.사상 은 먼저 파일 을 읽 고 데 이 터 를 저장 하 며 파일 을 비우 고 총 성적 과 평균 성적 두 배열 을 정의 하 며 각자 의 총 성적 과 평균 성적 을 계산 한 다음 에 거품 법 으로 전체 성적 을 정렬 하여 순 위 를 얻 은 다음 에 새로운 배열 을 구성 하여 이런 내용 을 연결 하 는 것 이다.배열 을 텍스트 에 기록 하고 보 기 를 업데이트 하면 됩 니 다.
수정
수 정 된 사상 은 매우 간단 합 니 다.원 하 는 기능 을 실현 했다 고 하지만 결함 도 있 습 니 다.특별히 좋 은 해결 방법 을 생각 하지 못 했 습 니 다.먼저 생각 을 말 해 보 세 요.먼저 선택 한 다음 에'수정',팝 업 창 을 클릭 합 니 다.여기 서 특히 주의해 야 할 것 은 팝 업 창 에 해당 하 는 위치 에 선택 한 내용 을 표시 해 야 한 다 는 것 입 니 다.

이 그림 에서 제 가 선택 한 것 은 두 번 째 줄 입 니 다.그러면 저 는 해당 하 는 데 이 터 를 보 여 드 리 겠 습 니 다.실험 과정 에서 많은 사람들 이 새로운 데 이 터 를 입력 하 는 것 입 니 다.그 안의 모든 내용 을 다시 써 야 합 니 다.이런 시스템 은 자신 이 지정 하 는 것 이 어렵 습 니 다.
(말 나 온 김 에 저 는 한 가지 일 을 삽입 하고 싶 습 니 다.최근 에 사용 한 2 과 시스템 을 말씀 드 리 겠 습 니 다.이것 은 위 챗 애플 릿 입 니 다.이것 은 학교의 한 팀 이 개발 한 것 입 니 다.전체적으로 괜 찮 습 니 다.가장 큰 부족 한 것 은 열 때마다 로그 인 해 야 한 다 는 것 입 니 다.즉,사용 할 때마다 계 정과 비밀 번 호 를 다시 입력 해 야 합 니 다.사용자 의 체험 이 정말 좋 지 않 습 니 다.그러나 부족 하 다 고 해서 부인 할 수 는 없다.전체적으로 도 편리 하고 배 울 만하 다)
예전 에 프로젝트 의 개발 에 참여 한 적 이 있 고 프로젝트 의 시청자 가 바로 우리 자신 이 며 어떤 효과 가 사용 자 를 만족 시 킬 수 있 는 지 알 기 때문에 이 기능 을 수정 하 는 것 에 대해 서도 잘 알 고 있 는 셈 이다.실험 에서 절대 다수의'수정'기능 이 만 족 스 러 운 효 과 를 얻 지 못 했 기 때문에 경험 을 쌓 는 것 은 절대 쓸모 가 없 는 것 이 아니다.
계속 우리 의 기능 실현 으로 돌아 와'확인'을 클릭 한 후에 텍스트 를 기록 합 니 다.그러면 우 리 는 반드시 이전의 데 이 터 를 삭제 하고 인삼 을 전달 한 후에 데 이 터 를 삭제 해 야 합 니 다.물론 이것 도 하 자가 생 겼 습 니 다.사용자 가 데 이 터 를 수정 하지 않 으 면 어떻게 합 니까?먼저 코드 를 보 세 요.보시 면 알 수 있 습 니 다.

 private void modify_Click(object sender, EventArgs e)//  
  {
   if (listView1.SelectedItems.Count != 0 )
   {
    ListViewItem all = this.listView1.SelectedItems[0];
    Form6 f6 = new Form6(all,this);
    f6.Show();
    //               
    foreach (ListViewItem lvi in listView1.SelectedItems)
    {

     // txt       file ,   string  file      

     string file = File.ReadAllText("Score.txt", UTF8Encoding.Default);

     List<string> lines = new List<string>(Regex.Split(file, "\r
")); lines.RemoveAt(lvi.Index); File.WriteAllLines("Score.txt", lines.ToArray(), UTF8Encoding.Default); } } else { Form4 f4 = new Form4(); f4.Show(); } }
선택 한 내용 이 비어 있 지 않 으 면 ListView Item 형식의 배열 에 데 이 터 를 저장 한 다음 Form 6(데이터 창 을 수정 하 는 클래스)에 전송 하고 Form 1 같은 종 류 를 전송 하여 사용 할 수 있 도록 한 다음 삭제 방법 을 사용 합 니 다.내용 이 비어 있 으 면 Form 4 를 팝 업 하여 오 류 를 알려 줍 니 다.
마찬가지 로 Form 6 쪽 에서 먼저 정의 한 다음 에 매개 변수,할당 을 받 습 니 다.

 private void Form6_Load(object sender, EventArgs e)
  {
   this.textBox1.Text = this.content.SubItems[0].Text;
   this.textBox2.Text = this.content.SubItems[1].Text;
   this.textBox3.Text = this.content.SubItems[2].Text;
   this.textBox4.Text = this.content.SubItems[3].Text;
   this.textBox5.Text = this.content.SubItems[4].Text;

  }
불 러 오 는 방법 에서 textBox 에 값 을 부여 하여 데 이 터 를 표시 합 니 다.수정 후'확인'을 누 르 면 확인 하 는 방법 은'입력'기능 의'확인'방법 과 같 습 니 다.다시 말 하면 기록 하 는 것 입 니 다.'취소'하면 데 이 터 는 삭 제 됩 니 다.textBox 에 데이터 가 있 으 면 그 데 이 터 를 텍스트 에 다시 기록 합 니 다.이렇게 해서 제 기능 을 실 현 했 지만 데이터 수정 여부 와 상 관 없 이 다시 불 러 오 면 데이터 가 마지막 줄 에 표 시 됩 니 다.
방법

 private void Determine_Click(object sender, EventArgs e)
  {
   if (this.textBox1.Text != string.Empty && this.textBox2.Text != string.Empty && this.textBox3.Text != string.Empty && this.textBox4.Text != string.Empty && this.textBox5.Text != string.Empty)
   {
    //  string          ,    ,  txt   
    string newrecord = this.textBox1.Text + " " + this.textBox2.Text + " " + this.textBox3.Text + " " + this.textBox4.Text + " " + this.textBox5.Text + "\r
"; File.AppendAllText("Score.txt", newrecord, UTF8Encoding.Default); var lines = File.ReadAllLines("Score.txt").Where(arg => !string.IsNullOrWhiteSpace(arg)); File.WriteAllLines("Score.txt", lines); // form6 this.Dispose(false); } this.form.load_data(); }
통계
통계 란 각 과목 의 각 점수 구간 의 인원 과 각 과목 의 평균 점 수 를 계산 하 는 것 이다.

 private void Sta_Click(object sender, EventArgs e)//  
  {
   this.Output();
   Form7 f7 = new Form7();
   f7.Show();
   
  }
output()방법 을 호출 하여 Form 7 로 데 이 터 를 표시 합 니 다.

 public string Output()//    
  {
    string add = string.Empty;

    add += "    :" + "\r
" + " " + "," + " " + "," + " " + "," + " " + "\r
"; add += "<60" + "," + GetGradeSection(1, 0, 59).ToString() + "," + GetGradeSection(2, 0, 59).ToString() + "," + GetGradeSection(3, 0, 59).ToString() + "\r
"; add += "60~69" + "," + GetGradeSection(1, 60, 69).ToString() + "," + GetGradeSection(2, 60, 69).ToString() + "," + GetGradeSection(3, 60, 69).ToString() + "\r
"; add += "70~79" + "," + GetGradeSection(1, 70, 79).ToString() + "," + GetGradeSection(2, 70, 79).ToString() + "," + GetGradeSection(3, 70, 79).ToString() + "\r
"; add += "80~89" + "," + GetGradeSection(1, 80, 89).ToString() + "," + GetGradeSection(2, 80, 89).ToString() + "," + GetGradeSection(3, 80, 89).ToString() + "\r
"; add += "90~100" + "," + GetGradeSection(1, 90, 100).ToString() + "," + GetGradeSection(2, 90, 100).ToString() + "," + GetGradeSection(3, 90, 100).ToString() + "\r
"; add += " " + "," + GetAve(1).ToString() + "," + GetAve(2).ToString() + "," + GetAve(3).ToString() + "\r
"; System.IO.File.WriteAllText("List.txt", string.Empty); File.AppendAllText("List.txt", add, UTF8Encoding.Default); return add; }
Output 방법 은 GetGradeSection()과 GetAve()두 가지 방법 을 호출 했 습 니 다.문자열 배열 을 만 들 고 정의 한 다음 에 두 가지 방법 으로 되 돌아 온 데 이 터 를 배열 에 연결 한 다음 에 쓰 면 됩 니 다.

 public double GetGradeSection(int m ,int low, int high)//   
  {
   int count = 0;
   string file = File.ReadAllText("Score.txt", UTF8Encoding.Default);
   // txt            regex.Split    string   
   string[] records = Regex.Split(file, "\r
"); // this.listView1.BeginUpdate(); // this.listView1.Items.Clear(); // records.Length for (int index = 0; index < records.Length; index++) { // if (records[index].Length != 0) { string[] components = Regex.Split(records[index], " "); if (m == 1)// { if (Convert.ToDouble(components[2]) >= low && Convert.ToDouble(components[2]) <= high) { count++; } } if (m == 2)// { if (Convert.ToDouble(components[3]) >= low && Convert.ToDouble(components[3]) <= high) { count++; } } if (m == 3)// { if (Convert.ToDouble(components[4]) >= low && Convert.ToDouble(components[4]) <= high) { count++; } } } else break; } return count; }
먼저 순환 한 다음 에 판단 하고 점수 구간 에서 count 값 을 하나 더 하면 마지막 으로 Output()방법 으로 돌아 갑 니 다.

 public double GetAve(int m)//   
  {
   double ave = 0;
   string file = File.ReadAllText("Score.txt", UTF8Encoding.Default);
   // txt            regex.Split    string   
   string[] records = Regex.Split(file, "\r
"); int length = records.Length; // this.listView1.BeginUpdate(); // this.listView1.Items.Clear(); // records.Length for (int index = 0; index < records.Length; index++) { if (records[index].Length != 0) { // string[] components = Regex.Split(records[index], " "); if (m == 1) { ave += double.Parse(components[2]); } if (m == 2) { ave += double.Parse(components[3]); } if (m == 3) { ave += double.Parse(components[4]); } } else break; } return ave/length; }
각 과목 에 대응 하 는 모든 점 수 를 합 친 후 총 인원,즉 평균 점 수 를 나 누 어 Output()방법 으로 되 돌려 줍 니 다.
맞 춤 형 문자열 배열 은 List.txt 텍스트 에 기록 하고 Form 7 에서 읽 으 며 Listview 에 표시 하면 됩 니 다.
깨끗이 제거 하 다
지우 기 는 모든 텍스트 데 이 터 를 비우 고 빈 문 자 를 덮어 쓰 면 됩 니 다.

 private void ClearAll_Click(object sender, EventArgs e)
  {
   System.IO.File.WriteAllText("Score.txt", string.Empty);
   System.IO.File.WriteAllText("List.txt", string.Empty);
   this.load_data();
  }
총결산
전에 C\#를 접 해 본 적 이 없어 서 어떻게 해 야 할 지 모 르 겠 습 니 다.결론 적 으로 보면 이번 주 에 얻 은 수확 이 그리 크 지 않 습 니 다.하루 종일 눈 코 뜰 새 없 이 바 빠 서 밥 을 먹고 잠 을 자고 코드 를 두 드 렸 습 니 다.마지막 으로 정리 한 결과 정확 한 지식 을 배우 지 못 했 습 니 다.아무것도 배우 지 않 았 기 때문에 올 라 와 서 사용 하 는 방식 은 정말 이해 하기 어렵 습 니 다.여기 서 제 가 하고 싶 은 말 은 연구 만 하면열심히 연구 하 겠 습 니 다.아무리 어 려 운 문제 라 도 해결 방법 이 있 습 니 다.마지막 으로 한 마디 보충 하 겠 습 니 다.바 쁜 점 은 정말 좋 습 니 다.매일 충실 하고 힘 내 며 길 을 가 고 있 습 니 다.
자,이상 이 이 글 의 모든 내용 입 니 다.본 논문 의 내용 이 여러분 의 학습 이나 업무 에 어느 정도 참고 학습 가 치 를 가지 기 를 바 랍 니 다.여러분 의 저희 에 대한 지지 에 감 사 드 립 니 다.

좋은 웹페이지 즐겨찾기