[MATLAB] 급여 지급 프로그램

[프로그래밍] 급여 지급 프로그램

다운로드

– 첨부파일 :

team_11_matlab_proj_v1.2.zip


 

개요

수십 시간을 넘게 들여 팀 프로젝트로 제출한 프로그램.
다만 제출이 목적이라 좀 발적화의 부분이라든지 땜빵 코드가 몇 있을 수는 있으나, 기능상의 문제는 없다고 판단됩니다.

 


 

사용법

프로그램 실행시 가장 먼저 뜨는 main 창

분석을 위한 데이터를 입력하는 창

직원 월급여 리스트에 월급을 추가하는 사진. 입력 박스에 입력 중일 때 배경이 노란색으로 일시적인 변경이 이루어짐

 

중복 선택한 후, 다중으로 한꺼번에 수정 또는 삭제도 가능. ‘추가’ 버튼은 리스트에 무언가 선택되었을 때 ‘수정’ 버튼으로 바뀜

선택한 직원 삭제

입력된 문자열이 숫자가 아닐 때나 음수 등등 유효하지 않은 잘못된 입력일 경우, 입력 박스 바탕이 빨간색으로 변경되며 경고

기본적으로 ‘저장’ 버튼은 비활성화 상태이고, ‘회사 수입’ 금액의 총합이 ‘2년간 회사 총 급여 예산’과 일치할 때만 활성화

저장하면 main 창에서 새로 저장된 정보로 화면 갱신

데이터 분석 및 출력창

직원 데이터 분석 그래프 및 표. 위의 그래프는 (막대 그래프와 추이 그래프 모두) 서서히 애니메이션 효과와 함께 나타난다.

이런 그래프와 표 등의 데이터를, 위쪽에 있는 4개의 버튼을 이용해 따로 여러 파일 형식으로 저장할 수도 있다.

모든 직원 정보 csv 저장 버튼을 통해 저장된 csv 파일. 모든 직원의 데이터가 전부 출력되었다.
이 밖에도 다양한 데이터 파일 출력을 지원 

 
 




matlab을 앞으로 프로그래밍에 쓸 일은 거의 없을 것 같으니, 어찌 보면 처음이자 마지막 matlab 프로그래밍이라 볼 수 있겠네요.

[MATLAB] cell array를 csv, txt로 출력하는 함수

csvwrite_cell.m

다운로드

– 첨부파일 :

csvwrite_cell.m


개요

MATLAB 에서 cell array를 csv 파일로 저장하려 할 때, cell2mat를 통해 기존 csvwrite 함수를 활용하는 방법이 있지만 cell 안에 문자열 데이터가 있을 경우 cell2mat 부터 에러가 납니다.
 
이런 문자열이 섞인 cell array(xls 형식과 흡사한)를 바로 csv로 출력하는 간단한 함수를 matlab 과제 중 필요에 의해 만들어봤는데, 컴공이라 가능성은 별로 없지만 혹시나 나중에 쓸 일이 있을까 해서 저장해둡니다.

물론 최적화가 되어 있는지는 별개의 문제(…)

 




사용법

csvwrite_cell( 파일로 저장할 cell array, 저장할 경로, 모드(.csv 또는 .txt) ) 




소스 코드


% cell을 csv, txt로 저장
function csvwrite_cell(celltable, path, mode)

% write 모드 확인 %
if ( mode == 'csv' ) % csv 모드
    line_feed = '\n';
    separator = ',';
elseif ( mode == 'txt' ) % txt 모드
    line_feed = '\r\n';
    separator = '\t';
else % 기타
    line_feed = '\n';
    separator = ',';
end

fp = fopen(path, 'w'); % 파일 포인터 열기
size_of_table = size(celltable); % cell array 크기


if ( mode == 'csv' ) % csv 모드
    for ( count_row = 1:size_of_table(1) ) % row를 1부터 끝까지
        for ( count_col = 1:size_of_table(2) ) % col을 1부터 끝까지
            % 문자열일 때 %
            if ( ischar(cell2mat(celltable(count_row, count_col))) == 1 )
                fprintf(fp, '"%s"', cell2mat(celltable(count_row, count_col)));
            % 실수일 때 %
            else
                fprintf(fp, '%f', cell2mat(celltable(count_row, count_col)));
            end

            if ( rem(count_col, size_of_table(2)) == 0 )
                fprintf(fp, line_feed); % 개행해야 할 때는 개행문자
            else
                fprintf(fp, separator); % 기타의 경우는 구분자
            end
        end
    end
    
elseif ( mode == 'txt' ) % txt 모드
    for ( count_row = 1:size_of_table(1) ) % row를 1부터 끝까지
        for ( count_col = 1:size_of_table(2) ) % col을 1부터 끝까지
            % 문자열일 때 %
            if ( ischar(cell2mat(celltable(count_row, count_col))) == 1 )
                fprintf(fp, '%s', cell2mat(celltable(count_row, count_col)));
            % 정수일 때 %
            else
                fprintf(fp, '%d', cell2mat(celltable(count_row, count_col)));
            end

            if ( rem(count_col, size_of_table(2)) == 0 )
                fprintf(fp, line_feed); % 개행해야 할 때는 개행문자
            else
                fprintf(fp, separator); % 기타의 경우는 구분자
            end
        end
    end
    
else % 기타
    for ( count_row = 1:size_of_table(1) ) % row를 1부터 끝까지
        for ( count_col = 1:size_of_table(2) ) % col을 1부터 끝까지
            % 문자열일 때 %
            if ( ischar(cell2mat(celltable(count_row, count_col))) == 1 )
                fprintf(fp, '%s', cell2mat(celltable(count_row, count_col)));
            % 실수일 때 %
            else
                fprintf(fp, '%f', cell2mat(celltable(count_row, count_col)));
            end

            if ( rem(count_col, size_of_table(2)) == 0 )
                fprintf(fp, line_feed); % 개행해야 할 때는 개행문자
            else
                fprintf(fp, separator); % 기타의 경우는 구분자
            end
        end
    end
    
end


fclose(fp);

end





 


 
물론 과제 도중 임시로 만들어서 과제에만 테스트를 해 본 터라 모든 경우에 적용될 수 있다고 보기는 어려움.