블럭노리 v1.0 베타를 공개한지 약 일주일이 지났습니다.

그 동안 많은 분들이 설치를 해보고 문제점을 이야기 해주시고 오류와 버그, 개선점을 말씀해주셔서 몇일되지 않는 시점에 많이 개선되고 발전된것 같습니다.

의견 주신 모든 분들께 감사드립니다

 

그래서 지금까지 나온 문제점들을 열거하고

개선된 부분에 대한 이야기를 진행할려고 합니다

또한 지금까지 나온 문제점들에 대한 수정본을 공개할려고 합니다.

 

1. 설치프로그램 오류 수정

처음 개발할때 Visual Studio2012버전에 .NET framework4.5로 진행을 했었습니다

그러다 보니 설치시 DLL문제와 SQLite 실행문제가 발생했습니다.

구체적으로 보면

NSIS로 셋업을 만들고 참조로 System.Data.SQLite를 참조하여 만들었는데

VS2012에서 기본적으로 설치되어야 할 DLL을 셋업에 포함시켜서 실행을 시키도록 만들지 않아서 설치는 되는데 이상한 오류가 발생했습니다.

살펴보니 SQLite오류였습니다.

또한 Windows7이상에서만 구동되는 문제가 발생했습니다

그래서 처음엔 SQLite를 설치하여 사용하는 방향으로 생각을 했었습니다

그러다가 버전을 낮춰보면 어떨까 해서

Visual Studio2010버전과 .Net framework3.5 SP1으로 변경하여 컴파일한 후 NSIS로 setup파일을 만든 결과 Windows XP에서 SQLite를 직접설치하지 않고도 구동이 되는 것을 확인했습니다

그래서 현재는 XP이상에서는 구동이 가능하도록 변경되었습니다

 

2. 요금셋팅에 대한 변경

블럭방을 직접 운영하시는 분들이 가격대를 자유롭게 결정하도록 해달라고 해서 변경을 했습니다

그래서 ini파일을 변경하면 가능하도록 변경하였습니다

설치디렉토리 하단에 보면 config디렉토리가 있습니다

거기서 config.ini파일을 열면

[MONEY]
HalfMoney=3000
HourMoney=6000

부분이 있습니다

HalfMoney는 최초30분의 해당하는 가격입니다

HourMoney는 시간당 가격입니다

최초 30분 이후는 시간당 가격을 6으로 나누어서 10분당 가격이 결정되도록 하였습니다

최초 30분을 3000원으로 하였다면 10분이든 20분이든 30분까지는 무조건 3000원으로 계산이 되고 시간당 6000원이라면 10분당 1000원으로 계산해서 가격이 정해지도록 하였습니다

 

3. 충전에 대한 시간과 유효기간 설정 변경

기존버전에서는 충전은 20시간에서 100시간까지 20시간 단위로 가능하도록 고정되어 있었고

유효기간도 4개월부터 2개월씩 증가하도록 프로그램에 고정되어 있었습니다

이것 또한 자유롭게 변경이 가능하도록 하였습니다

config.ini파일을 보면

 

[TIMECNT]
TimeCount=6

 

[TIME]
Time1=10
Time2=20
Time3=40
Time4=60
Time5=80
Time6=100

 

[EXPIRYMONTH]
ExpiryMon1=2
ExpiryMon2=4
ExpiryMon3=6
ExpiryMon4=8
ExpiryMon5=10
ExpiryMon6=12

 

이부분이 추가되었습니다

[TIMECNT]은 충전시간 구간 갯수를 뜻합니다

그리고 [TIME]은 충전시간을 표현한것이고

[EXPIRYMONTH]은 유효기간 개월수를 표시한 것입니다

 

여기서 중요한것은 TimeCount와 충전시간, 유효기간의 갯수가 반드시 일치해야 합니다

그리고 모든것은 숫자로만 지정을 해주셔야 합니다

 

수정된 버전은

 

 

Blocknori_Setup.zip

 

입니다

설치하여 사용하시다가 문제가 발생하거나 좋은 의견이 있으면 메일이나 댓글로 부탁드립니다

 

초기 접속 로그인 정보 :

   아이디 : admin

   비밀번호 : rhksflwk

비밀번호는 한글로 "관리자"입니다

 

버전은 여전히 1.0으로 했기 때문에 기존 프로그램을 삭제후 설치해주시면 될것 같습니다

혹시 DB를 보존해야 한다면

설치디렉토리 C:\Program Files\Blocknori\database에서 blocknori.db를 미리 백업받아두시고 기존 설치프로그램을 삭제한 다음 상기 버전으로 재설치를 하시고

C:\Program Files\Blocknori\database에 백업DB를 덮어쓰기를 해주시면 됩니다

DB에는 변경내용이 없기때문에 기존 DB를 덮어쓰시면 사용에 문제가 없을 것입니다

 

 

감사합니다

 

 

top


이번 포스트에서는 회원등록과 회원수정, 그리고 회원삭제, 회원목록에 대한 화면을 설명하고자 한다

 

먼저 회원등록폼을 살펴보자

 

 

회원등록폼을 보면 알겠지만 굉장히 단순하게 만들었다

이름과 성별, 생년월일과 나이, 연락처 등을 입력해준다

상기 항목은 모두 필수 항목이다

 

회원은 가입과 동시에 시간을 충전해야 한다

기본 20시간에서 부터 20시간단위로 100시간까지 충전이 가능하다

그리고 유효기간은 20시간은 4개월

40시간은 6개월

60시간은 8개월

80시간은 10개월

100시간은 12개월로 되어 있다

이메일과 주소 메모는 옵션으로 작성하지 않아도 가능하다

 

회원을 가입하면 기본적으로 시간충전이 한번 일어나게 되어 있다.

왜냐하면 회원이라함은 시간충전이 된 사용자를 지칭하기 때문이다

일일회원은 회원가입이 아니라 지난번 포스트에서처럼 일일회원으로 등록하면 된다

 

일단 회원등록이 되면 자동으로 회원번호가 순차적으로 부여되며 시간충전이 완료된다.

 

그럼 회원목록을 살펴보자

 

 

회원목록을 보면 연번과 회원번호, 이름, 성별, 생년월일, 나이, 연락처, 이메일, 주소, 메모로 목록이 나타난다.

검색을 통하여 회원의 정보를 볼수도 있다

 

그리고 하단의 전체목록버튼을 클릭하면 전체 회원 목록이 나타난다

초기화면은 아무회원도 보이지 않는다

르기고 한페이지에 15명씩 보이도록 구성되어 있다

이것은 노트북화면에서 최적화를 시키기 위해 그렇게 했다.

 

회원을 선택하고 상단에 수정버튼을 클릭하면 회원 가입시 입력한 정보가 새창으로 나타난다.

폼의 모양은 회원등록시와 똑같다

단지 시간충전만 빠져있다.

 

 

그리고 회원삭제는 회원을 선택하고 삭제버튼을 누르면 삭제 여부를 묻고 삭제가 된다

 

그리고 상단의 있는 엑셀다운로드는 검색회원이나 현재 페이지에 있는 회원만을 엑셀로 다운로든 하는것이고 하단의 전체회원엑셀다운로드는 페이징과 관게없이 전체회원에 대한 엑셀을 다운로드하게 해준다

 

그리고하단의 페이징버튼을 통하여 페이지 이동이 가능하게 만들었다.

 

오늘은 비교적 간단하게 회원등록과 목록에 대해서 설명한것 같다

다음포스트에서는 시간충전과 시간충전 기록에 대한 화면 설명을 진행할 예정이다

다음포스트도 많은 관심을 부탁드립니다

 

top


최초 환경구성은 이렇다

Visual Studio 2012

SQLite 3.7.16.2   http://system.data.sqlite.org/index.html/timeline?y=ci

.NET Framework 4.0

 

SQLite는 sqlite-netFx45-setup-bundle-x86-2012-1.0.85.0.exe를 설치하였다.

Visual Studio를 이용하여 데이타베이스에 연결한 다음 테이블은 총 5개를 만들었다

 

ADMIN : 관리자 정보 테이블

BLOCK : 블록제품 정보 테이블

CHARGE : 충전정보 테이블

DAILY : 자유블럭방 이용 일일회원 정보 테이블

MEMBER : 자유블럭방 시간충전 회원 정보(일반회원)

 

이렇게 구성하였다.

 

먼저 아래와 같이 초기 로그인 화면을 만들었다.

이 부분은  C# Winform을 이용하면 간단히 만들수 있다.

 

로그인은 2가지 그룹으로 분류해서 만들었다.

최고관리자 그룹과 일반 관리자 그룹으로 나누어서 만들었으며

최고관리자는 블럭방 프로그램 모든 기능을 사용한다. 특히 일반 관리자를 등록 관리하는 기능을 가진다 또한 SMS발송 권한을 가진다.

그러나 일반 관리자는  일일회원등록, 충전정보, 일반회원 등록 및 관리가 가능하도록 구성되어 있다.

 

 

 

처음부터 너무 긴 이야기를 시작하면 지루할 것 같아 일단 여기까지 로그인 화면구성에 대한 부분은 종료할려고 한다.

 

그리고 이프로그램을 개발하면서 가장 고민스러웠던 부분이 MDB를 사용할것인가 SQLite를 사용할것인가를 결정하는것이었다.

결론은 2기가정도면 DB로서 문제를 일으키는 MDB대신 로컬DB로 최고의 성능을 발휘하는 SQLite로 하기로 결정을 했다.

사용하기 쉽고 비쥬얼한 부분에서는 MDB가 편하지만 일단 유료이고 DB로서 그렇게 신뢰가 가지 않아서 무료인 SQLite를 사용하기로 했다(나만의 생각인가)

 

여하튼 SQLite를 사용하면서 가장 어려웠던것이 (사실 몰랐던 것이 맞을것 같다)

DB에러가 너무 많이 나온다는 것이었다.

 

문제를 찾기 위해 구글링을 무지 많이 했던것 같다.

결과적으로 SQLite는 Insert, Update 뿐 아니라 Select에서도 트랜잭션을 걸어줘야 한다는 것이었다

 

그래서 아예 함수를 만들어서 사용했다

 

//트랜잭션 시작
public void BeginTran(SQLiteConnection conn)
{
    try
    {
        SQLiteCommand command = new SQLiteCommand("BEGIN IMMEDIATE", conn);
        command.ExecuteNonQuery();
        command.Dispose();
    }
    catch
    {
        Console.WriteLine("BeginTran");
    }
}

//트랜잭션 완료
public void CommitTran(SQLiteConnection conn)
{
    try
    {
        SQLiteCommand command = new SQLiteCommand("Commit", conn);
        command.ExecuteNonQuery();
        command.Dispose();
    }
    catch
    {
        Console.WriteLine("CommitTran");
    }
}

 

이렇게 함수를 만든 다음

 

String Sql = "select IDX,ID,PWD.......... from ADMIN where ID='" + SID + "' and PWD='" + SPwd + "'";

try
{
    Conn.Open();
    if (Conn.State == ConnectionState.Open)
    {
        dbdata.BeginTran(Conn);

        SQLiteCommand CMD = new SQLiteCommand(Sql, Conn);
        CMD.CommandType = CommandType.Text;
        SQLiteDataReader rs;
        rs = CMD.ExecuteReader();

        while (rs.Read())
        {
            ADInfo.IDX = Convert.ToInt32(rs[0]);
            ADInfo.ID = Convert.ToString(rs[1]);
            .
            .
            .
            .
        }
        CMD.Dispose();
        rs.Close();
        rs.Dispose();

        dbdata.CommitTran(Conn);
    }
    Conn.Close();
}

catch
{
    if (Conn.State == ConnectionState.Open)
    {
        Conn.Close();

    }
    Console.WriteLine("AdminLoad");
}

 

모든 DB관련 쿼리에 트랜잭션을 걸어준 결과 DB에러 부분이 사라졌다..

 

다음 시간에는 메인 구성에 대한 이야기를 하면서 개발하면서 있었던 이야기들을 좀 더 많이 해보기로 할까 한다.

 

top