사내 메신저 프로젝트
프로젝트명: 사내 메신저 개발 프로젝트
요구사항기술서(문서번호 : A001)
유즈케이스도/시퀀스다이어그램(문서번호 : A002)
상세설계(문서번호 : A003)
인터페이스설계(문서번호 : A004)
구현(문서번호 : A005)
통합 테스트(문서번호 : A006)
V 1.0
2004년
소프트개발방법론
제.개정 이력서
목차
1. 사용자 요구사항
로그인
부서별게시판
메시지 전송
파일 전송
관리자 기능
2. 관련사항
2.1 업무프로세스
2.1.1개요
1. 사용자 요구사항
일반 메신저와 이미 사내용으로 쓰고 있는 메신저들을 분석한 결과 상위 수준의 요구사항은 다음과 같다.
R1. 시스템의 보안성
R2. 온라인상 같은 부서에 있는 사람들끼리는 커뮤니케이션 할 곳이 필요하다.
R3. 온라인상의 모둔 사용자끼리는 데이터를 주고받을 수 있어야한다.
R4. 온라인상과 오프라인 사용자는 구분되어야한다.
R5. 서로 데이터를 주고받을 수 있는 사용자들은 서로를 친구 등록해야 가능하다.
R6. 중앙에서 관리할 수 있는 기능이 필요.
유형
|
ID
|
이름
|
관련사항
|
설명
|
관련부서
|
우선순위
|
비기능
|
R001
|
시스템 보안
|
R1
|
외부 망에서는 시스템에 접근할 수 없다.
|
관리자
|
상
|
기능
|
R002
|
개인정보보호
|
R1
|
관리자와 자기 자신만이 개인정보를 수정할 수 있다.
|
관리자/사용자
|
상
|
기능
|
R003
|
부서별공유게시판
|
R1,R2
|
자신이 속한 부서에서만 조회 가능한 게시판을 갖는다.
|
사용자
|
상
|
기능
|
R004
|
메신저기능
|
R1,R3,R5
|
친구로 등록한 사용자끼리는 메시지와 파일을 주고받을 수 있다.
|
사용자
|
상
|
기능
|
R005
|
친구목록기능
|
R4,R5
|
현재 대화목록에는 친구로 등록된 사람만 나타나며 온오프라인 표시가 실시간으로 가능하다.
|
사용자
|
상
|
기능
|
R006
|
관리기능
|
R6
|
관리자로 로그인하면 일반사용자들을 제어할 수 있다.
|
관리자
|
중
|
2. 관련사항
2.1 업무프로세스
2.1.1 개요
사용자는 메신저를 통해서 메시지와 파일을 전송할 수 있다.
관리자는 사용자들의 개인정보 관리 및 프로그램을 사용할 수 있도록 승인을 할 수 있다.
사용자끼리는 서로 등록을 해야 커뮤니케이션이 되며, 같은 부서끼리는 같은 게시판을 공유한 다. 또한 오프라인상태와 온라인상태가 표시가 되어서 상대방의 접속 유무를 알 수 있다.
제.개정 이력서
목차
1. 시스템 개요
1.1 목적
1.2 개요
1.3 업무프로세스
2. 기능적 요구사항
2.1 액터 목록
2.2 유즈케이스도
2.3 유즈케이스 개요 및 설명
1. 시스템 개요
1.1 목적
회사 내에서 업무 목적으로 사원간의 신속한 의사소통의 도구로 사용할 시스템을 개발한다.
1.2 개요
이 시스템의 구성원은 회사원으로 하며, 모든 구성원이 부서별로 표현된다. 이 시스템은 쪽지와 파일전송 기능을 이용하여 효과적인 커뮤니케이션을 도와준다. 또한 각 부서별로 게시판을 사용할 수 있다. 사원의 개인정보는 ID, 이름, 부서, 직위, 전화번호, e-mail주소로 제한한다. 타인의 개인정보를 조회할 수 있으며, 자신의 개인정보는 수정할 수 있다. ID명은 본인의 사번으로 하며, 시스템의 Login은 자신의 ID와 PW 입력으로 이루어진다. 현재 모든 회사원은 서버관리자에 의해 일괄적으로 가입된다. 신규사원은 마이메신저의 회원가입 절차를 통해 요청하고, 서버관리자의 검토 후 가입이 완료된다. 또한 서버관리자는 인사명령발생시 회원을 삭제할 수 있고, 개인정보를 수정할 수 있다.
1.3 업무프로세스
2. 기능적 요구사항
2.1 액터 목록
액터
|
설명
|
사용자
|
클라이언트를 통해서 직접프로그램을 사용하는 사람. 파일 및 메시지 전송과 게시판기능을 사용한다.
|
관리자
|
사용자가 가입신청을 했을 때 받아주고 각종 사용자의 개인정보를 관리한다.
|
메신저 클라이언트
|
서버와 연동하여 정보를 주고받는다.
|
메신저 서버
|
주로 클라이언트끼리 주고받는 메시지를 중계하고 현재 접속되어있는 사람과 클라이언트마다 친구 등록한 목록 등을 DB와 연동하여 관리한다.
|
게시판용 웹서버
|
게시판은 웹서버에서 작동하며 클라이언트와 연동되어 게시판을 보여준다.
|
DB 서버
|
사용자들의 정보를 기록한다.
|
2.2 유즈케이스도
2.3 유즈케이스 개요 및 설명
이름
|
설명
|
회원가입요청
|
가입요청을 해놓으면 DB에 이내용을 기록한다.
|
회원등록
|
관리자가 DB에서 가입요청한 사람들을 보고 등록을 하여준다.
|
회원삭제
|
등록되어있는 사용자도 퇴사하게 될 경우 삭제해야한다.
|
로그인한다
|
DB에 사용자와 비밀번호를 비교하여 시스템에 접근하도록 한다.
|
회원정보를 본다
|
자신의 개인정보가 담기 DB의 내용을 볼 수 있다.
|
회원정보를 수정한다
|
개인정보가 다를 경우 자신의 것은 DB의 내용을 수정할 수 있다.
|
쪽지를 보낸다
|
메시지의 경우 서버랑 통신하여 메시지를 보낸다.
|
파일을보낸다.
|
파일의 경우 서버를 거치지 않고 바로 다른 사용자에게 보낸다.
|
게시판조회/작성
|
웹서버에 있는 게시판을 접속하여 사용한다.
|
2.4 시퀀스 다이어그램
2.4.1 로그인
2.4.2 쪽지를 보낸다
2.4.3 파일을 보낸다
2.4.4 게시판 조회/작성
2.4.6 자기정보 수정
2.4.7 회원가입 요청
2.4.8 회원으로 등록(관리자)
제.개정 이력서
목차
1. 객체 추출
1.1 Client
1.2 Server
2. 패키지 다이어그램
3. Client 클래스 다이어그램
3.1 Control
3.2 Boundaries
4. Server 클래스 다이어그램
4.1 Control
4.2 Boundaries
5. DB Table 클래스 다이어그램
1. 객체 추출
1.1 Client
LoginForm, MemberJoinsForm, MainForm, MemoForm, FileSelForm, BoardFrom, PersonForm, MemConForm, DBAccMana, ClientSocketMana, WebLinkMana
1.2 Server
MessengerDB, ServerForm, DBAccMana, ServerSocketMana,
2. 패키지 다이어그램
3. Client 클래스 다이어그램
3.1 Control
3.2 Boundaries
4. Server 클래스 다이어그램
4.1 Control
4.2 Boundaries
5. DB Table 클래스 다이어그램
제.개정 이력서
목차
1. 설계 및 구현 매커니즘 정의
2. Client 설계
3. Server 설계
4. DB Table 설계
1. 설계 및 구현 매커니즘 정의
구분
|
패키지
|
분석
|
설계 및 구현
|
Client
|
Boundary
|
사용자인터페이스
|
WindowsApp->VB
|
Control
|
분산
|
WindowsApp->VB
| |
Server
|
Entitiles
|
영속성
|
RDBMS->Mysql
|
Boundary
|
사용자인터페이스
|
WindowsApp->VB
| |
Control
|
분산
|
WindowsApp->VB
| |
WebService
|
WebServer
|
WebServer->Apache+php+Mysql
|
2. Client 설계
3. Server 설계
4. DB Table 설계
제.개정 이력서
목차
1.1 MainForm
1.2 LoginForm
1.3 MemoJoinForm
1.4 MemoForm
1.5 PersonForm
1.6 MemConForm
1.7 ServerForm
1.8 시스템 배치
1.1 MainForm
1.2 LoginForm
1.3 MemberJoinForm
1.4 MemoForm
1.5 PersonForm
1.6 MemConForm
1.7 ServerForm
1.8 시스템 배치
제.개정 이력서
목차
1. 물리적 아키텍처
2. 통신구현 기술
3. Client 구현
3.1 MailForm
3.2 DBaccessModul
3.3 memoForm
3.4 PersonForm
3.5 MemConForm
3.6 loginFOrm
3.7 MemberJoinForm
3.8 ServerForm
1. 물리적 아키텍처
2. 통신구현 기술
3. Client 구현
3.1 MailForm
Option Explicit
Dim AdoRs As ADODB.Recordset
Dim addform As Form5
Dim addform1 As Form1
Dim count2 As Long
Dim filesize2 As Long
Dim fname2 As String
Private Sub admin_Click() ' 친구 등록
Dim sql As String
Form4.Enabled = False
Form6.Show
Form6.Command1.Visible = True
Form6.Command2.Visible = False
Form6.Command3.Visible = False
sql = "select * from joins"
Set AdoRs = New ADODB.Recordset
AdoRs.Open sql, "PROVIDER=MSDASQL;driver={MySQL ODBC 3.51 Driver};server=203.246.80.43;uid=leejung0;pwd=tpqms;database=zboard;"
Do While Not AdoRs.EOF
Form6.List1.AddItem AdoRs("id")
AdoRs.MoveNext
Loop
AdoRs.Close
Set AdoRs = Nothing
Form6.Tag = 0
End Sub
Private Sub board_Click()
Dim sql, url, password As String
sql = "select * from department, member where member.id='" + StatusBar1.Panels(1).Text + "' and member.dep = department.dep"
url = AdoRsDb_Select(sql, "url")
sql = "select * from member where id='" + StatusBar1.Panels(1).Text + "'"
password = AdoRsDb_Select(sql, "pw")
url = url + "&user_id=" + StatusBar1.Panels(1).Text + "&password=" + password
Form9.WebBrowser1.Navigate (url)
Form9.Show
End Sub
Private Sub Command1_Click() '대화방입장
Dim bool As Integer
Dim sql As String
Dim i As Integer
Dim AdoRs As ADODB.Recordset
Set AdoRs = New ADODB.Recordset
bool = 0
sql = "select * from chat"
AdoRs.Open sql, "PROVIDER=MSDASQL;driver={MySQL ODBC 3.51 Driver};server=203.246.80.43;uid=leejung0;pwd=tpqms;database=zboard;"
Do While Not AdoRs.EOF
If StatusBar1.Panels(1).Text = AdoRs("id") Then
bool = 1
Exit Do
End If
AdoRs.MoveNext
Loop
AdoRs.Close
Set AdoRs = Nothing
If bool = 0 Then
sql = "insert into chat(id,name,ip) values('" + StatusBar1.Panels(1).Text + "','" + StatusBar1.Panels(2).Text + "','" + Label1.Caption + "')"
AdoDb_Querry (sql)
Label1.Caption = Winsock1.LocalIP
Form7.Show
Else
sql = "update chat set ip='" + Winsock1.LocalIP + "' where id='" + StatusBar1.Panels(1).Text + "'"
AdoDb_Querry (sql)
Label1.Caption = Winsock1.LocalIP
Form7.Show
End If
End Sub
Private Sub Command2_Click()
Dim sql As String
End Sub
Private Sub del_Click() '접속자목록에서 삭제
Dim sql As String
Form6.Show
Form6.Command1.Visible = False
Form6.Command2.Visible = True
Form6.Command3.Visible = True
Form4.Enabled = False
sql = "select * from member"
Set AdoRs = New ADODB.Recordset
AdoRs.Open sql, "PROVIDER=MSDASQL;driver={MySQL ODBC 3.51 Driver};server=203.246.80.43;uid=leejung0;pwd=tpqms;database=zboard;"
Do While Not AdoRs.EOF
Form6.List1.AddItem AdoRs("id")
AdoRs.MoveNext
Loop
AdoRs.Close
Set AdoRs = Nothing
Form6.Tag = 1
End Sub
Private Sub exit_Click() ' 끝
Unload Form4
End Sub
Private Sub fileup_Click() '파일업로드
Dim sql As String
Winsock3.Close
sql = "select * from connection where id='" + MSHFlexGrid1.Text + "'"
Winsock3.Connect AdoRsDb_Select(sql, "ip"), "26057"
End Sub
Private Sub Form_Load()
Dim bool As Integer
Dim sql, g As String
Dim i As Integer
Dim AdoRs As ADODB.Recordset
Set AdoRs = New ADODB.Recordset
bool = 0
Winsock1.LocalPort = 1021 'udp 프로토콜
Winsock1.RemotePort = 1020
Winsock1.RemoteHost = "203.246.80.43"
Winsock1.Bind 1021
Winsock2.Close
Winsock2.LocalPort = "26057" 'tcp 프로토콜
Winsock2.Listen
MSHFlexGrid1.Cols = 4
StatusBar1.Panels(1).Text = Form2.Text1.Text
sql = "select * from personinfo where id ='" + Form2.Text1.Text + "'"
StatusBar1.Panels(2).Text = AdoRsDb_Select(sql, "name")
'다른곳에서 로그인되어있는상태거나 불완전한종료로 로그인기록이 남아있는경우
sql = "select * from connection"
AdoRs.Open sql, "PROVIDER=MSDASQL;driver={MySQL ODBC 3.51 Driver};server=203.246.80.43;uid=leejung0;pwd=tpqms;database=zboard;"
Do While Not AdoRs.EOF
If StatusBar1.Panels(1).Text = AdoRs("id") Then
bool = 1
Exit Do
End If
AdoRs.MoveNext
Loop
AdoRs.Close
Set AdoRs = Nothing
If bool = 0 Then
sql = "insert into connection values('" + StatusBar1.Panels(1).Text + "','" + Winsock1.LocalIP + "')"
AdoDb_Querry (sql)
Label1.Caption = Winsock1.LocalIP
g = "^#$*&#*%&%#$#"
Winsock1.SendData g
Else
sql = "update connection set ip='" + Winsock1.LocalIP + "' where id='" + StatusBar1.Panels(1).Text + "'"
AdoDb_Querry (sql)
Label1.Caption = Winsock1.LocalIP
g = "^#$*&#*%&%#$#"
Winsock1.SendData g
End If
End Sub
Private Sub Form_Unload(Cancel As Integer) '폼이 꺼질때
Dim sql, g As String
sql = "delete from connection where ip=" + "'" + Label1.Caption + "'"
AdoDb_Querry (sql)
g = "^#$*&#*%&%#$#"
Winsock1.SendData g
End
End Sub
Private Sub memo_Click() ' 쪽지 보낼때
On Error GoTo e:
Set addform = New Form5
addform.Show vbModeless
addform.Command1.Visible = True
addform.Command2.Visible = False
e:
End Sub
Private Sub MSHFlexGrid1_Click()
'If MSHFlexGrid1.Col = 2 Then '쪽지 보내기
MSHFlexGrid1.Col = 2
If MSHFlexGrid1.TextMatrix(MSHFlexGrid1.Row, MSHFlexGrid1.Col - 2) = "★" Then
PopupMenu popup
End If
'End If
End Sub
Private Sub view_Click()
Form10.Show
End Sub
Private Sub Winsock1_DataArrival(ByVal bytesTotal As Long)
Dim num, i, j As Integer
Dim sql, ip, name, user(100), g As String 'user는 사원으로등록할수있는최대수
Winsock1.GetData g
If g = "^#$*&&%$#@&*" Then '화면에 접속된 사원 표시
Set AdoRs = New ADODB.Recordset
sql = "select * from member order by dep"
AdoRs.Open sql, "PROVIDER=MSDASQL;driver={MySQL ODBC 3.51 Driver};server=203.246.80.43;uid=leejung0;pwd=tpqms;database=zboard;"
MSHFlexGrid1.Clear
MSHFlexGrid1.Rows = 1
i = 0
MSHFlexGrid1.TextMatrix(0, 0) = "상태"
MSHFlexGrid1.TextMatrix(0, 1) = "부서"
MSHFlexGrid1.TextMatrix(0, 2) = "아이디"
MSHFlexGrid1.TextMatrix(0, 3) = "이름"
Do While Not AdoRs.EOF
i = i + 1
user(i) = AdoRs("id")
MSHFlexGrid1.Rows = MSHFlexGrid1.Rows + 1
MSHFlexGrid1.TextMatrix(i, 0) = "☆"
MSHFlexGrid1.TextMatrix(i, 1) = AdoRs("dep")
MSHFlexGrid1.TextMatrix(i, 2) = AdoRs("id")
AdoRs.MoveNext
Loop
AdoRs.Close
Set AdoRs = Nothing
Set AdoRs = New ADODB.Recordset
sql = "select * from connection, personinfo where connection.id = personinfo.id"
AdoRs.Open sql, "PROVIDER=MSDASQL;driver={MySQL ODBC 3.51 Driver};server=203.246.80.43;uid=leejung0;pwd=tpqms;database=zboard;"
j = i
For i = 1 To j
Do While Not AdoRs.EOF
If user(i) = AdoRs("id") Then
MSHFlexGrid1.TextMatrix(i, 0) = "★"
MSHFlexGrid1.TextMatrix(i, 3) = AdoRs("name")
End If
AdoRs.MoveNext
Loop
AdoRs.MoveFirst
Next i
AdoRs.Close
Set AdoRs = Nothing
ElseIf Left(g, 9) = "^#$*&%^#@" Then '쪽지에 글표시
For i = 1 To 19
If Mid(g, 9 + i, 1) = "~" Then
Exit For
End If |