2009년 5월 20일
사용한 개발 툴 : Microsoft Visual Studio2005
특징 : 파일읽기, 구조체 사용

<RIP>

void modified_table(Rpt *send, Rpt *recv){

int i;
tmp.name=send->name; 
//send가 보낸 라우팅 테이블의 값을 임시 라우팅 테이블에 옮긴다. 이 과정에서 hop의 값은 1증가시켜서 옮긴다.
for(i=0; i<7; i++){

tmp.dest[i]=send->dest[i];
tmp.hop[i]=send->hop[i]+1;
tmp.next[i]=send->name;// 문제 


//복사된 임시 라우팅 테이블값과 비교하여 임시 라우팅 테이블의 hop값이 더 효과적일 경우 recv의 라우팅 테이블 값을 수정

for(i=0; i<7; i++){

if(recv->hop[i]>tmp.hop[i]){
recv->hop[i]=tmp.hop[i];
recv->next[i]=tmp.next[i];

}

//임시 라우팅 테이블에 값이 중첩되면서 실제 hop의 값이 16을 넘을 수 있다. 그렇게 될 경우 next의 값을 삭제시키면 이는 곧 도달불가를 의미한다.
//주어진 테이블에서는 발생하지 않지만 일종의 예외처리라고 할 수 있다.

if(recv->hop[i]>MAX_HOP) recv->next[i]=' '; 

}



<OSPF>

for(test=0; test<10; test++){

mincost.cost=A.cost[0];
mincost.idx=0; 

for(i=0; i<A.idx; i++){

if(A.cost[i]<mincost.cost){
mincost.idx=i;
mincost.cost=A.cost[i];
//printf("%d %d\n", mincost.idx, mincost.cost); 
}


if(A.node[mincost.idx]>=60){ 
pre_router=A.node[mincost.idx]; 

if(A.node[mincost.idx]<60){

At.network[At.idx]=A.node[mincost.idx];
At.cost[At.idx]=A.cost[mincost.idx];
At.nextrouter[At.idx]=pre_router;
//printf("%d %d\n", At.network[At.idx], At.cost[At.idx]);
At.idx++;

//printf("%d %d\n", A.node[mincost.idx], A.cost[mincost.idx]);
if(A.node[mincost.idx]==10) A.idx=update_Rt(a, &A, mincost.idx, A.idx); 
if(A.node[mincost.idx]==20) A.idx=update_Rt(b, &A, mincost.idx, A.idx); 
if(A.node[mincost.idx]==30) A.idx=update_Rt(c, &A, mincost.idx, A.idx); 
if(A.node[mincost.idx]==40) A.idx=update_Rt(d, &A, mincost.idx, A.idx); 
if(A.node[mincost.idx]==50) A.idx=update_Rt(e, &A, mincost.idx, A.idx); 
if(A.node[mincost.idx]==65) A.idx=update_Rt(A, &A, mincost.idx, A.idx); 
if(A.node[mincost.idx]==66) A.idx=update_Rt(B, &A, mincost.idx, A.idx); 
if(A.node[mincost.idx]==67) A.idx=update_Rt(C, &A, mincost.idx, A.idx); 
if(A.node[mincost.idx]==68) A.idx=update_Rt(D, &A, mincost.idx, A.idx); 
if(A.node[mincost.idx]==69) A.idx=update_Rt(E, &A, mincost.idx, A.idx); 
if(A.node[mincost.idx]==70) A.idx=update_Rt(F, &A, mincost.idx, A.idx);

int update_Rt(Rt ref, Rt *modified, int idx, int Rtidx){

int i;
int tmp_idx=idx;
int tmp_Rtidx=Rtidx; 

for(i=0; i<Rtidx-idx-1; i++){

tmp.node[i]=modified->node[tmp_idx+1];
tmp.cost[i]=modified->cost[tmp_idx+1];
tmp_idx++;

}

tmp.idx=i;
tmp.idx=idx;
for(i=0; i<ref.idx; i++){

if(ref.node[i]!=modified->name){

modified->node[tmp_idx]=ref.node[i];
modified->cost[tmp_idx]=ref.cost[i];
tmp_idx++;

}



for(i=0; i<tmp.idx;i++){

modified->node[tmp_idx]=tmp.node[i];
modified->cost[tmp_idx]=tmp.cost[i];
tmp_idx++;


return tmp_idx;

}


Posted by 검지발가락♡

사용한 개발 툴 : Microsoft Visual Studio 2005

2009년 4월 7일

거의 독학 수준이었던 MFC ㅍ0ㅍ

1.1. 움직이는 로직에 대한 설명.

1.1.1. 툴바의 곡선 버튼을 누르고 마우스를 움직이면 OnMouseMove() 함수가 실행되고 if 문에서 m_nType가 곡선 ID_DrawCurve 이므로 if문 실행 한다.CreatePen()함수의 pen의 style을 설정하는데 PS_SOLID는 실선을 의미하고, 1은 펜의 굵기, m_colLine 은 선의 색깔을 지정한다. 선그리기를 할때에는 MoveTo() 함수와 LineTo() 함수가 필요하다.

1.1.2. 툴바의 곡선 버튼을 누르고 마우스를 움직이면 OnMouseMove() 함수가 실행되고 if 문에서 m_nType가 곡선 ID_DrawLine 이므로 if문 실행 한다.CreatePen()함수의 pen의 style을 설정하는데 PS_SOLID는 실선을 의미하고, 1은 펜의 굵기, m_colLineXor 은 선의 색깔을 지정한다. 선그리기를 할때에는 MoveTo() 함수와 LineTo() 함수가 필요하다.

1.1.3. 툴바의 사각형 버튼을 누르고 마우스를 움직이면 OnMouseMove() 함수가 실행되고 if 문에서 m_Type가 곡선 ID_DrawRectangle 이므로 실행한다. 여기서도 Create()함수가 실행된다. 투명 브러쉬를 선택하고 R2_XORPEN 모드로 해준다. 그리고 사각형을 그려준다.

1.1.4. 툴바의 사각형 버튼을 누르고 마우스를 움직이면 OnMouseMove() 함수가 실행되고 if 문에서 m_Type가 곡선 ID_DrawRectangle 이므로 실행한다. 여기서도 Create()함수가 실행된다. 투명 브러쉬를 선택하고 R2_XORPEN 모드로 해준다. 그리고 사각형을 그려준다. Rectangle(int x1, int y1, int x2, int y2)

1.1.5. 툴바의 원 버튼을 누르고 마우스를 움직이면 OnMouseMove() 함수가 실행되고 if 문에서 m_Type가 곡선 ID_DrawCircle 이므로 실행한다. 여기서도 Create()함수가 실행된다. 투명 브러쉬를 선택하고 R2_XORPEN 모드로 해준다. 그리고 원을 그려준다. Ellipse()

1.1.6. WM_MOUSEMOVE에서 사각형을 그려주며, WM_LBUTTONUP에서 사각형의 내부 색을 채워준다.

1.1.7. CColorDialog를 이용해 선택한 색은 GetColor()를 이용해 얻을 수 있다.

1.1.8. m_LineColorXor은 직전 도형의 모양 뿐만 아니라 m_LineColor의 Xor 연산 결과가 저장 되어 있어야 한다.

1.1.9. 메뉴바에 있는 색상에서 예를 들어 선색-> 빨강을 누르면 OnColorLineRed() 함수가 실행되어 선색이 빨강이 된다. 도형->빨강을 누르면 OnFillRed() 함수가 실행되어 도형의 안이 채워진다.


// CPainter1View 메시지 처리기
void CPainter1View::OnChangeTool(UINT nID) {

m_nType = (int)GetCurrentMessage()->wParam; //툴바의 항목 리턴

void CPainter1View::OnUpdateChageTool(CCmdUI* pCmdUI){

pCmdUI->SetCheck(m_nType == (int)pCmdUI->m_nID);

}

void CPainter1View::OnCPen() {

CColorDialog dig;
if(dig.DoModal()==IDOK){
m_colLine = dig.GetColor();
m_colLineXor = (RGB(GetRValue(m_colLine)^255, GetGValue(m_colLine)^255, GetBValue(m_colLine)^255));
}

}

void CPainter1View::OnUpdatePaintred(CCmdUI *pCmdUI) {

// TODO: Add your command update UI handler code here
m_colLine = (RGB(255,0,0));
m_colLineXor = (RGB(225, 0, 0));

}

void CPainter1View::OnPainter(){

CColorDialog dig;
if(dig.DoModal()==IDOK)
m_colFill = dig.GetColor();

}

void CPainter1View::OnLButtonDown(UINT nFlags, CPoint point) {

// TODO: Add your message handler code here and/or call default
m_pntOld = point;
m_pntCur = point;
SetCapture();
CView::OnLButtonDown(nFlags, point);

}

void CPainter1View::OnLButtonUp(UINT nFlags, CPoint point){

// TODO: Add your message handler code here and/or call default
ReleaseCapture();
CClientDC dc(this);
CBrush brush, *pOldBrush;
if(m_nType == ID_DrawRectangle){

brush.CreateSolidBrush(m_colFill);
pOldBrush = (CBrush *)dc.SelectObject(brush);
dc.Rectangle(m_pntOld.x, m_pntOld.y, point.x, point.y);

} else if(m_nType == ID_DrawCircle) {
brush.CreateSolidBrush(m_colFill);
pOldBrush = (CBrush *)dc.SelectObject(brush);
dc.Ellipse(m_pntOld.x, m_pntOld.y, point.x, point.y);

CView::OnLButtonUp(nFlags, point);

}

void CPainter1View::OnMouseMove(UINT nFlags, CPoint point) {

// TODO: Add your message handler code here and/or call default
//왼쪽 버튼 누른 상태
if(nFlags & MK_LBUTTON) {
CClientDC dc(this);
CPen pen, *pOldPen;
CBrush brush, *pOldBrush;

if(m_nType == ID_DrawCurve){

pen.CreatePen(PS_SOLID, 1, m_colLine);
pOldPen = (CPen *)dc.SelectObject(&pen);
dc.MoveTo(m_pntOld.x, m_pntOld.y);
dc.LineTo(point.x,point.y);
m_pntOld = point;
dc.SelectObject(pOldPen);

  } else if(m_nType==ID_DrawLine){

pen.CreatePen(PS_SOLID, 1, m_colLineXor); 
dc.SelectObject(GetStockObject(NULL_BRUSH));
dc.SetROP2(R2_XORPEN); 
pOldPen = (CPen *)dc.SelectObject(&pen); 
dc.MoveTo(m_pntOld.x, m_pntOld.y);
d
c.LineTo(m_pntCur.x, m_pntCur.y); 
dc.MoveTo(m_pntOld.x, m_pntOld.y);
d
c.LineTo(point.x, point.y); 
dc.SelectObject(pOldPen);

else if(m_nType == ID_DrawRectangle) {

pen.CreatePen(PS_SOLID, 1, m_colLineXor); 
dc.SelectObject(GetStockObject(NULL_BRUSH)); 
dc.SetROP2(R2_XORPEN); 
pOldPen = (CPen *)dc.SelectObject(&pen); 
dc.Rectangle(m_pntOld.x, m_pntOld.y, point.x, point.y); 
dc.SelectObject(pOldPen);

else if(m_nType == ID_DrawCircle) {

//펜생성
pen.CreatePen(PS_SOLID,1,m_colLineXor);
dc.SelectObject(GetStockObject(NULL_BRUSH)); 
dc.SetROP2(R2_XORPEN); 
pOldPen = (CPen *)dc.SelectObject(&pen); 
dc.Ellipse(m_pntOld.x, m_pntOld.y, m_pntCur.x, m_pntCur.y);
dc.Ellipse(m_pntOld.x, m_pntOld.y, point.x, point.y); 
dc.SelectObject(pOldPen);

}

m_pntCur = point; 

  }

CView::OnMouseMove(nFlags, point);

}

void CPainter1View::OnInitialUpdate(){

CView::OnInitialUpdate();

}

void CPainter1View::OnPaint(){

CPaintDC dc(this); // device context for painting
// TODO: Add your message handler code here
// Do not call CView::OnPaint() for painting messages

}

 

 

void CPainter1View::OnUpdatePaintgreen(CCmdUI *pCmdUI) {

// TODO: Add your command update UI handler code here
pCmdUI->SetCheck(m_colLine==RGB(0,255,0));

}

void CPainter1View::OnUpdatePaintblue(CCmdUI *pCmdUI) {

// TODO: Add your command update UI handler code here
pCmdUI->SetCheck(m_colLine == RGB(0,0,255));

}


 

 


mfc.zip

Posted by 검지발가락♡

사용한 개발 툴 : JAVA, eclipse, MYSQL, Tomcat5.0
특징 : java bean


1. 프로그램 소개

본 프로그램은 은행관리 프로그램으로서 일반적으로 계좌에 관련된 입금, 출금, 이체, 계좌 작업내역 조회 등을 하고, 은행원을 관리하는 관리인은 은행원 정보를 삽입, 삭제 등을 하는 프로그램이다.

2. 클래스

 

 

3. 데이터베이스 구조

MySQL에서 운영되는 한신은행 데이터베이스 HSbank는 다음의 테이블로 구성된다.

banker(bankerType:varchar(20), bno:int, bname:varchar(20), ID:varchar(20), password:varchar(20), dateHired:date, branch:varchar(20) )

-bankerType : 은행에 소속된 은행원은 정규직과 비정규직으로 나뉨.
-bno : 은행원 개개인은 고유한 번호를 가진다. 맨 첫 자리 1은 정규직을 나타내고, 2은 비정규직을 나타냄.
-bname : 은행원의 이름.
-ID , password : 은행원을 생성할 때 사용자로부터 입력 받은 ID, password.
-dateHired : 은행으로부터 고용된 날짜.
-branch : 근무장소.

 

account(accType, accno:int, owner:varchar(20), password:int, dateOpened:date, balance:int)

-accType : 개설한 계좌는 보통계좌와 저축계좌로 나뉨.
-accno : 개설된 계좌는 고유한 계좌번호를 가짐.
-owner, password : 계좌를 개설한 고객의 이름과 password. 
-dateOpened : 계좌를 개설한 날짜
-balance : 현재 계좌에 남아 있는 금액

 

transaction(transType:char(10),accno:int, customer:varchar(20), dateTrans:date, timeTrans:time, accnoTransfer:int, bno:int, amount:int, balance:int)

-transType : 작업내역에는 입금, 출금, 이체입금, 이체출금으로 타입이 나뉨.
-accno, customer : 이체의 주체가 되는 계좌의 번호와 이름.
-dateTrans, timeTrans : 이체가 실행된 날짜와 시간.
-bno : 이체의 대상이 되는 계좌의 번호.
-amount, balance : 이체 금액과 accno의 잔고

 

nextSerial(serialType:varchar(20), serial:int)

- 정규직, 비정규직, 보통계좌, 저축계좌의 각각에 대한 고유번호를 가지기 위한 각각의 마지막 번호.




pink(2).zip

Posted by 검지발가락♡

사용한 개발 툴 : SAFEModeler

피자가게 ER다이어그램


SAFE Modeler.zip

ER다이어그램(11.5).erd

Posted by 검지발가락♡

사용한 개발 툴 : ORACLE

2008년 10월 12일

대학(UNIVERSITY) 데이터베이스 예제

 

학생

(STUDENT)

학번

(SNO)

이름

(SNAME)

학년

(YEAR)

학과

(DEPT)

 

100

나수영

4

컴퓨터

 

200

이찬수

3

전기

300

정기태

1

컴퓨터

 

 

400

송병길

4

컴퓨터

 

500

박종화

2

산공

 

과목

(COURSE)

과목번호

(CNO)

과목이름

(CNAME)

학점

(CREDIT)

학과

(DEPT)

담당교수

(PRNAME)

 

C123

프로그래밍

3

컴퓨터

김성국

C312

자료 구조

3

컴퓨터

황수관

 

C324

화일 처리

3

컴퓨터

이규찬

 

C413

데이타베이스

3

컴퓨터

이성호

 

C412

반 도 체

3

전자

홍봉진

 

 

등록

(ENROL)

학번

(SNO)

과목번호

(CNO)

성적

(GRADE)

중간성적

(MIDTERM)

기말성적

(FINAL)

 

100

C413

A

90

95

100

E412

A

95

95

 

200

C123

B

85

80

 

300

C312

A

90

95

 

300

C324

C

75

75

 

300

C413

A

95

90

 

400

C312

A

90

95

 

400

C324

A

95

90

 

400

C413

B

80

85

 

400

E412

C

65

75

 

500

C312

B

85

80

 

 

1) 컴퓨터학에서 개설되는 과목이름, 학점, 담당교수를 검색하라. 

select cname, credit, prname
from course
where dept = '컴퓨터'
order by cname, credit, prname;

2) 한 과목이라도 A학점을 받은 학생들의 학번을 검색하라.

select distinct sno
from enrol
where grade = 'A'

3) 모든 학생들의 이름을 가나다라 순으로 검색하라.  

select sname
from student
order by sname


4) 소속학과가 컴퓨터학과이거나 전기학과인 학생들의 이름과 학년을 검색하라.

select sname,year
from student
where dept='컴퓨터'or dept='전기'


5) 중간성적과 기말 성적이 80점 이상인 학생들에 대해서 학번의 오름차순으로, 또 같은 학번에 대해서는 과목번호의 내림차순으로 학번과 과목번호, 중간성적, 기말성적을 검색하라. 

select sno, cno, midterm, pinal
from enrol
where enrol.midterm >= 80 or enrol.pinal >= 80
order by sno, cno desc;

6) 등록(ENROL) 테이블에서 과목번호(CNO)가 'C312'인 중간성적(MIDTERM)에 3점 더한 값을 학번(SNO)과 '중간성적' 타이틀로 검색하라.

select sno, midterm+3 as 중간시험
from enrol
where cno = 'C312'

 

7) 학번이 300인 학생이 등록한 과목의 이름과 학점을 검색하라.

select cname, grade
from course, enrol
where enrol.sno = 300 and enrol.cno = course.cno

8) 과목이름이 '자료구조'인 과목에 등록한 학생의 이름(SNAME), 학과(DEPT), 성적(GRADE)을 검색하라.

select distinct sname, student.dept, grade
from student, course, enrol
where enrol.cno=
(
select course.cno
from course
where cname = '자료구조'
)  and student.sno = enrol.sno

9) 과목번호가 'C413'인 과목을 등록한 학생은 몇 명인가?

select count(cno)
from enrol
where cno = 'C413'


10) 각 과목별 기말성적의 최고점을 검색하라.

select cno, max(pinal)
from enrol
group by cno

 
13) 담당교수가 이씨 성을 가진 과목의 이름을 검색하라.

select prname
from course
where prname like '이%'

17) 학생 테이블에서 컴퓨터과 학생의 학번, 이름, 학년을 검색하여 새로운 컴퓨터학과(COMPUTER) 테이블에 삽입하라.

insert into computer(sno, sname, year)
select sno, sname, year
from student
where dept = '컴퓨터'

 
18) 학년이 4학년이 아닌 학생을 삭제하라.

delete
from student
where year <> 4

19) 모든 과목 정보를 삭제하라.

delete
from course


SQL실습문제.hwp

 

Posted by 검지발가락♡
사용한 개발 툴 : Microsoft Visual Studio 6.0
특징 : 라운드로빈 스케줄링, GUI, 파일처리, 구조체

GUI를 위해

void gotoxy(int x, int y)
{
 COORD Cur; Cur.X = x; Cur.Y = y;
 SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),Cur);
}
void PrintSquare(int x1, int y1, int x2, int y2)
{
 int i;
 // 사각형의 각 모서리를 먼저 그리고,
 gotoxy(x1, y1);
 printf("┏");
 gotoxy(x2, y1);
 printf("┓");
 gotoxy(x1, y2);
 printf("┗");
 gotoxy(x2, y2);
 printf("┛");
 // 윗변과 아랫변(가로 부분을 그림) "━"게 2바이트를 차기 하 기 때문에 I의 증가값을 2
 for (i=2; i < (x2-x1); i += 2)
 {
  gotoxy(x1 + i, y1);
  printf("━");
  gotoxy(x1 + i, y2);
  printf("━");
 }
 // "┃"는 1바이트를 차기 하기 때문에 증가값을 1
 for (i=1; i< y2-y1; i++)
 {
  gotoxy(x1, y1+i);
  printf("┃");
  gotoxy(x2, y1+i);
  printf("┃");
 }
}
//메시지를 출력
void OpeningMessage(int x, int y)
{
 int i;
 gotoxy(x, y);
 printf("Waiting simulation...\n");
 gotoxy(x, y+1);
 for (i=0; i<12; i++)
 {
  printf("■");
  Sleep(400);
 } }

이렇게 프로세스 GUI 생성~

파일처리

void openfile(){ // 파일 열기
 int n =0; // 버퍼수 
 int i = 0;
 char *buff;
 FILE *f;
 
 char fname[] = "process.dat"; 
 if ( (f = fopen(fname, "r")) == NULL){
  printf("파일이 열리지 않습니다.\n");
  exit(1);
 };
 
 while(!feof(f)){
  fscanf(f, "%d", &buff);
  n++;
 }
 num = n/2;
 rewind(f);
 p =(P *)malloc( sizeof(P)*num);
 for(i = 0; i <num ; i++){
  fscanf(f, "%d %d", &p[i].arrive_time, &p[i].burst_time);
  if(p[i].arrive_time <p[i-1].arrive_time){
   num = i;
   break;
  }
  p[i].copy_burst_time=p[i].burst_time;
 }
 fclose(f);
 
}


구조체

typedef struct process {
 int burst_time; // 버스트 타임
 int copy_burst_time;
 int arrive_time; //도착 시간
}P; // 프로세스에 관한 구조체
P *p;
typedef struct ready_queue{
 int remain_time; //남은 시간
 int end_time; // 끝난 시간
}Q;
Q *q;
Q *chart;

Posted by 검지발가락♡
원서로 된 운영체제 책이라 다시 정리

●운영체제란?

퓨터 사용자와 컴퓨터 하드웨어 사이에 중간 매개체 역할을 해주는 프로그램

- 목표 (편리성, 효율성)

·사용자 프로그램을 실행시키고 문제를 쉽게 해결하도록 함(효율성)

·컴퓨터 시스템을 편리하게 사용할수 있다.

- 시스템 관점

·OS는 자원할당자 이다.

모든 자원의 관리자로 동작하며, 작업을 위해 특정 프로그램과 사용자에게 필요한 자원을 할당한다.

자원에 대해 서로 상충될 수도 있는 많은 요청이 있기 때문에, 운영체제는 컴퓨터 시스템을 효율적이고 공정하게 운영할 수 있도록 어느 요청에 자원을 할당할지를 결정.

- OS는 제어 프로그램이다.

·컴퓨터의 부적절한 사용을 방지하기 위해 사용자 프로그램의 실행을 제어한다.

- 완전한 정의는 없다.

- 컴퓨터에서 항상 수행되는 프로그램 = kernel

● 컴퓨터 시스템 구조

4가지 구조로 나눌수 있다.

- 하드웨어 :

CPU, memory, I/O 장치로 구성되어 있으며 기본 컴퓨팅 자원을 제공한다.

- 운영체제 :

사용자를 위해 다양한 응용 프로그램간의 하드웨어 사용을 제어하고 조정한다.

컴퓨터 시스템이 동작할 때 이 자원들을 적절하게 사용할 수 있는 여러 가지 방법을 제공한다. 단순히 다른 프로그램이 유용한 작업을 할 수 있게 도와준다.

- 응용프로그램 :

컴퓨터 문제를 해결하기 위해 시스템 자원으르 사용

- user

● Computer startup(startup : 시동때 우선 실행해야 할 프로그램)

- 부트스트랩 프로그램은 power-up 이나 reboot를 로드한다.

- ROM 또는 EEPROM에 저장되며 일반적으로 firmware 라고 불린다.

- 모든 시스템의 상태를 초기화 한다.

- 커널과 시작은 OS를 로드함으로서 수행 된다.

●컴퓨터 시스템 연산

공유 메모리에 대한 접근을 제공하는 공통버스에 의해 연결된 여러개의 제어 장치기와 하나 이상의 CPU로 구성되어 있다.

-CPU와 장치제어기는 메모리 사이클을 얻기 위해 경쟁하면서 병행 수행될 수 있다.

·입출력 장치와 중앙연산장치는 동시에 수행할 수 있다.

·각각의 장치 컨트롤러는 특정한 장치 타입을 요구한다.

·각각의 장치 컨트롤러는 로컬 버퍼를 갖는다.

·중앙연산장치는 데이터부터 메인 메모리로 로컬 버퍼에까지 움직인다.

·입출력은 로컬버퍼 컨트롤러의 장치에 있다.

·장치컨트롤러는 CPU에 인터럽트에 의해 운영이 끝났다는 것을 알린다.

●Common Functions of Interrupts(중요?)

·서비스 루틴의 모든 주소들이 있는 인터럽트 벡터를 통해서 인터럽트 서비스 루틴은 대게 인터럽트 전송들을 통제한다. (인터럽트 상태 처리 후 저장 한 지점부터 다시 시작하기 위해서 저장함.)

·인터럽트의 구조는 인터럽트된 명령의 주소를 저장해야 한다.(예 : 32인덱스의 2000번 주소를 저장함.)

·인터럽트가 들어오면 로스트 인터럽트를 예방하는 또 다른 인터럽트를 수행은 작동하지 않는다.(CPU 상태 저장)

·소프트웨어에서 생성된 인터럽트를 트랩이라 한다.

·OS는 인터럽트 드리븐이다.

●Interrupt Handling(중요?)

·운영체제는 레지스터와 프로그램 카운터의(다음 실행할 인터럽트 주소 저장)저장에 의해 CPU의 상태를 보호한다.

· 인터럽트 발생 타입을 결정한다.

polling(조사를 위해서 → 몇 명의 user 가 사용?)

vectored interrupt system

·separate segments of code determine what action should be taken for each type of interrupt

 

※프로그램 카운터

다음에 실생할 명령이 저장되어있는 메인 메모리상의 어드레스를 가리키는 레지스터

프로그램 카운터는 각 명령어가 실행된 후, 곧 이어질 명령어의 주소를 가리키는 값이 자동적으로 증가한다.

 

●I/O 구조

·동기식 입출력(Synchronous) :

·입출력이 시작되면 요청한 프로세서는 입출력이 완료될 때까지 기다린다.

·특수한 명령어 사용 / 대기루프 사용

유저의 퀘스트한 프로그램의 처리에 있어 kernel의 device driver → Interrupt handler → hardware date transfer 처리 시간동안 다음 프로그램의 실행을 대기 하는 방식.

·비동기식 입출력(Asynchronous) : 요청한 프로세서는 입출력이 완료될 때 까지 기다리지 않고 계속 다른 작업을 수행한다.

시스템 콜 - I/O가 완료 하기위해 OS시스템이 유저를 허락할 때 까지 요청 한다.

Posted by 검지발가락♡

사용한 개발 툴 : JAVA, eclipse, MSSQL

2008년 12월 17일

1. 시스템 소개

목적

- 편의점을 보유하고 있는 사용자가 편의점의 물품을 계산하기 위하여 일일이 직접 계산기를 두드리지 않고 사용자의 편의를 위하여 편의점 요금 계산기를 이용해 계산하는 데에 목적 이 있다.

프로젝트 범위 (언어에 대한)

- 그 동안 배운 객체언어인 자바로 atw와 swing을 이용하여 button을 생성하여 이벤트를 발 생시켜 결과를 나타내는 편의점 요금 계산기를 보여준다.


2. 기본 기능

네 개의 버튼(“과자”),( “껌”),(“담배”),(“라면”)과 각 버튼의 옆에는 소비가격이 명시되어 있다. 각각의 버튼은 각기 다른 소비가격(2000,300,2500,1000)을 가지고 있다. 사용자는 자신이 소비한 항목에 대한 버튼을 그 횟수만큼 클릭함으로서 총 합계를 알 수 있는데, 프로그램 내에서 각 버튼들에 대한 (버튼을 누른 횟수 * 소비가격)을 종합, 합산하여 “합계”텍스트area영역에 출력하도록 한다. 아래쪽 영역에는 텍스트area가 있으며, 사용자는 자신이 어떤 물건에 대해 얼마나 소비했는지에 대한 지출내역을 알 수 있도록 명시한다.

3. 수정/첨부 사항

자신이 선택한 각 물품항목들(과자,껌,담배,라면)에 대한 가격대는 다양하다. 따라서 사용자의 편의를 고려하여, 각 항목에 대한 다양한 가격대를 제공, 그 중 하나를 선택할 수 있도록 radio button을 생성하여 구현하였다.


객체지향JAVA.zip.zip

Posted by 검지발가락♡
사용한 개발 툴 : Microsoft Visual Studio 6.0

기말텀 과제
- 작성조건
* 상속을 이용할 것
* STL container를 이용할 것(vector등)
- 제출내용
* 제안서
. 메뉴 설명
. 기본기능 설명
. 부가기능 설명
* 전체소스
. 소스파일을 컴파일 할 수 있게 전체 소스를 제출
. 컴파일 해서 동작가능하게 모든 파일이 포함되어 있어야 함
* 실행파일
. 반드시 release 모드로 실행파일을 만들고,
. VS6.0/VS2005가 설치된 곳에서 실행할 수 있게 해야 함 

class Students : public Student

{

public:

  Students();

  ~Students();

   void Input();

   void Show();

   void Range();

   void Dis();

   void Sort();

protected:

  vector<int> meeting;

  int s_meeting;

  int a,b,c,d,e,f,g,h,m,j,k,l;

};


 

벡터를 사용하여 구현

♣ 같은 학번이 입력되면 에러처리

♣ 제한된 점수의 입력이 초과 되면 그 해당 점수만 재입력

0123

성적처리(C ).zip.zip


Posted by 검지발가락♡




 

Posted by 검지발가락♡