현재 위치 - 회사기업대전 - 기업 정보 공시 - C 언어 직원 정보 관리 시스템

C 언어 직원 정보 관리 시스템

/* 이것은 내가 디자인 과정을 시작할 때 쓴 것이다 */

#include "stdio.h" /* 표준 입출력 라이브러리 */

#include "stdlib.h" /* 표준 라이브러리 */

#include "string.h" /* 문자열 라이브러리 */

#include "conio.h" /* 화면 운영 라이브러리 */

# 제목 정의 1 "-ZGGZ-\n"

# defineheader2 "| number | name | jbgz | jj | kk | yfgz | sk | sfgz | \ n"

# defineheader 3 "|-|-|-|-|-|-|-|-|-| \ n"

# define format "|%-8s |%-10s |% 8.2f |% 8.2f |% 8.2f |% 8.2f |% 8.2f |

# 데이터 정의 p-> Num, p- > 이름, p-> Jbgz, p-> Jj, p-> Kk, p-> Yfgz, p-> Sk, p-> Sfgz

# 정의 끝 "-\n"

# N 60 정의

Intsaveflag = 0; /* 플래그 변수를 저장해야 합니까 */

/* 직원 관련 데이터 구조 정의 */

Typedef 구조 직원/* 직원으로 표시 */

{

Char num: ");

Scanf("%d ",& 선택);

If (선택 = =1)/* 번호별 조회 */

{

Stringinput(searchinput, 10, "기존 직원 번호 입력:");

P=Locate(tp, n, searchinput, "num"); /* 배열 TP 에서 값이 searchinput 인 요소를 찾고 배열 요소의 아래 첨자 값 */

만약 (p! =- 1) /* 레코드를 찾은 경우 */

{

Printheader ();

Printdata (TP: ");

Scanf("%d ",& ampsel);

If(sel== 1)

{

Stringinput(findmess, 10, "기존 직원 번호 입력:");

P=Locate(tp, n, findmess, "num");

Getchar ();

만약 (p! =- 1)

{

For (I = p+1; 나 & ltn;; I++) /* 이 레코드를 삭제하면 후속 레코드가 앞으로 이동합니다 */

{

Strcpy(tp[i- 1]). Num, tp[i] 입니다. Num);

Strcpy(tp[i- 1]). 이름, tp[i]. 이름);

Tp[i- 1]. Jbgz=tp[i] 입니다. Jbgz

Tp[i- 1]. Jj=tp[i] 입니다. JJ

Tp[i- 1]. Kk=tp[i] 입니다. KK

Tp[i- 1]. Yfgz=tp[i] 입니다. Yfgz

Tp[i- 1]. Jbgz=tp[i] 입니다. Sk;

Tp[i- 1]. Sfgz=tp[i] 입니다. Sfgz

}

Printf(" \ n = =>;; 삭제에 성공했습니다! \ n ");

N-;

Getchar ();

저장 플래그 =1;

}

기타

Nofind ();

Getchar ();

}

Else if(sel==2) /* 먼저 레코드가 있는 배열 요소의 아래 첨자 값을 이름 */으로 질의합니다

{

Stringinput(findmess, 15, "기존 직원 이름 입력:");

P=Locate(tp, n, findmess, "name");

Getchar ();

만약 (p! =- 1)

{

For (I = p+1; 나 & ltn;; I++) /* 이 레코드를 삭제하면 후속 레코드가 앞으로 이동합니다 */

{

Strcpy(tp[i- 1]). Num, tp[i] 입니다. Num);

Strcpy(tp[i- 1]). 이름, tp[i]. 이름);

Tp[i- 1]. Jbgz=tp[i] 입니다. Jbgz

Tp[i- 1]. Jj=tp[i] 입니다. JJ

Tp[i- 1]. Kk=tp[i] 입니다. KK

Tp[i- 1]. Yfgz=tp[i] 입니다. Yfgz

Tp[i- 1]. Jbgz=tp[i] 입니다. Sk;

Tp[i- 1]. Sfgz=tp[i] 입니다. Sfgz

}

Printf(" \ n = = = = =>;; 삭제에 성공했습니다! \ n ");

N-;

Getchar ();

저장 플래그 =1;

}

기타

Nofind ();

Getchar ();

}

N 을 반환합니다

}

/* 레코드를 수정합니다. 먼저 입력된 사원 번호를 기준으로 레코드를 질의한 다음 번호 이외의 값을 수정하라는 메시지를 표시합니다. 이 번호는 수정할 수 없습니다 */

Void Modify(ZGGZ tp[], int n)

{

Char find mess [20];

Int p = 0;;

(n & lt=0) 인 경우

{system ("cls");

Printf(" \ n = = = = =>;; 직원 기록이 없습니다! \ n ");

Getchar ();

반환;

}

시스템 ("cls");

Printf ("직원 기록 수정");

Disp(tp, n) :

Stringinput(findmess, 10, "기존 직원 번호 입력:"); /* 번호 입력 및 확인 */

P=Locate(tp, n, findmess, "num"); /* 배열 요소를 쿼리하고 아래 첨자 값 */

만약 (p! =- 1) /* If P! =- 1, 배열 요소 */

{

Printf ("번호: %s, \n", tp[p]. Num);

Printf ("이름: %s,", tp[p]. 이름);

Stringinput(tp[p]. 이름, 15, "새 이름 입력:");

Printf("jbgz:%8.2f, ",tp[p]. Jbgz);

Tp[p]. Jbgz = numberinput ("jbgz:");

Printf ("강진: %8.2f,", TP [p]. jj);

Tp[p]. Jj = 번호 입력 ("강진:");

Printf("koukuan:%8.2f, ",TP [p]. kk);

Tp[p]. Kk = numberinput ("koukuan:");

Tp[n]. Yfgz=tp[n] 입니다. Jbgz+tp[n] 입니다. Jj-tp[n] 입니다. KK

Tp[n]. Sk=tp[n] 입니다. Yfgz * 0.12;

Tp[n]. Sfgz=tp[n] 입니다. Yfgz-tp[n]. Sk;

Printf(" \ n = = = = =>;; 수정 성공! \ n ");

Getchar ();

Disp(tp, n) :

Getchar ();

저장 플래그 =1;

}

기타

{nofind ();

Getchar ();

}

반환;

}

/* Insert record: 직원 번호를 기준으로 삽입할 배열 요소의 위치를 질의한 다음 번호 뒤에 새 배열 요소를 삽입합니다. */

Int Insert(ZGGZ tp[], int n)

{

Char ch, num[ 10], s [10]; /*s[] 삽입점 위치 앞의 번호를 저장하고 num[] 은 입력한 새 레코드의 번호를 저장합니다 */

ZGGZ newinfo

Int flag=0, i=0, kkk = 0;;

시스템 ("cls");

Disp(tp, n) :

While( 1)

{stringinput(s, 10, "숫자 뒤에 삽입 위치 입력:");

Flag = 0;; I = 0;;

While (나 & ltN) /* 이 번호가 있는지, flag= 1 이 번호가 있음을 나타냅니다 */

{

If(strcmp(tp[i].num, s) = = 0) {kkk = I; Flag =1; 깨뜨리다 }

I++;+;

}

If(flag== 1)

깨뜨리다 /* 번호가 있는 경우 삽입하기 전에 새 레코드를 입력하십시오 */

기타

{getchar ();

Printf(" \ n = = = = =>;; 번호 %s 이 (가) 존재하지 않습니다. 다시 시도해 보시겠습니까? (y/n): ",s);

Scanf("%c ",& ampch);

If(ch=='y'||ch=='Y')

{계속; }

기타

{return n;; }

}

}

/* 다음 새 레코드의 입력 작업은 Add () */ 와 동일합니다

While( 1)

{stringinput(num, 10, "새 직원 번호 입력:");

I = 0;; Flag = 0;;

While (나 & ltN) /* 이 번호가 있는지, flag= 1 이 번호가 있음을 나타냅니다 */

{

If(strcmp(tp[i].num, num) = = 0) {flag =1; 깨뜨리다 }

I++;+;

}

If(flag== 1)

{

Getchar ();

Printf(" \ n = = = = =>;; 죄송합니다. 번호 %s 이 (가) 이미 존재합니다. 다시 시도해 보시겠습니까? (y/n): ",num);

Scanf("%c ",& ampch);

If(ch=='y'||ch=='Y')

{계속; }

기타

{return n;; }

}

기타

깨뜨리다

}

Strcpy(newinfo.num, num); /* 문자열 num 을 newinfo.num */

Stringinput(newinfo.name, 15, "name:");

Newinfo.jbgz = numberinput ("jbgz:"); /* jbgz*/ 입력 및 검증 */

Newinfo.jj=numberinput ("강진:"); /* 강진 입력 및 검증 */

Newinfo.kk = numberinput ("koukuan:"); /* 공제 입력 및 검증 */

Newinfo.yfgz = newinfo.jbgz+newinfo.jj-newinfo.kk; /* yfgz*/ 계산 */

Newinfo.sk = newinfo.yfgz * 0.12; /* 계산 sk*/

Newinfo.sfgz = newinfo.yfgz-newinfo.sk;

저장 플래그 =1; /* 전역 변수는 main () 에서 판단됩니다. 1 인 경우 */

For (I = n-1; 나 & gtkki-)/* 마지막 조직 요소에서 한 요소 위치 앞으로 이동 */

{strcpy(tp[i+ 1]). Num, tp[i] 입니다. Num);

Strcpy(tp[i+ 1]. 이름, tp[i]. 이름);

Tp[i+ 1]. Jbgz=tp[i] 입니다. Jbgz

Tp[i+ 1]. Jj=tp[i] 입니다. JJ

Tp[i+ 1]. Kk=tp[i] 입니다. KK

Tp[i+ 1]. Yfgz=tp[i] 입니다. Yfgz

Tp[i+ 1]. Sk=tp[i] 입니다. Sk;

Tp[i+ 1]. Sfgz=tp[i] 입니다. Sfgz

}

Strcpy(tp[kkk+ 1]. Num, newinfo.num); /* kkk 의 요소 위치 뒤에 새 레코드 삽입 */

Strcpy(tp[kkk+ 1]. Name, newinfo.name);

Tp[kkk+ 1]. Jbgz = newinfo.jbgz;

Tp[kkk+ 1]. Jj = newinfo.jj

Tp[kkk+ 1]. Kk = newinfo.kk

Tp[kkk+ 1]. Yfgz = newinfo.yfgz;

Tp[kkk+ 1]. Sk = newinfo.sk

Tp[kkk+ 1]. Sfgz = newinfo.sfgz;

N++;+;

Disp(tp, n) :

Printf ("\ n \ n");

Getchar ();

N 을 반환합니다

}

/* 모든 수준의 회사 직원 급여 통계 */

Void 중복 (ZGGZ tp[], int n)

{

Int count 10000=0, count5000=0, count2000=0, count0 = 0

Int I = 0;;

(n & lt=0) 인 경우

{system ("cls");

Printf(" \ n = = = = =>;; 직원 기록이 아닙니다! \ n ");

Getchar ();

반환;

}

시스템 ("cls");

Disp(tp, n) :

I = 0;;

While (나<n)

{

If (TP [I]. sfgz & gt =10000) {count10000+; I = I+1; 계속; }/* 실제 임금 > 10000*/

If (TP [I]. sfgz & gt = 5000) {count5000+; I = I+1; 계속; }/* 5000 < = 실제 임금

If (TP [I]. sfgz & gt = 2000) {count2000+; I = I+1; 계속; }/* 2000 < = 실제 임금

If (TP [I]. sfgz & lt2000) {count0+; I = I+1; 계속; }/* 실제 임금 < 2000*/

}

Printf("\n-중복 결과-\ n ");

Printf(" sfgz & gt;; = 10000:%d (ren)\n ",count10000);

Printf(" 5000 & lt;; = sfgz & lt 10000:%d (임의) \n ",count 5000);

Printf(" 2000 & lt;; = sfgz & lt5000:%d (임의) \n ",count 2000);

Printf(" sfgz & lt;; 2000:%d (임의) \n ",count0);

Printf ("-\ n");

Printf(" \ n \ n 아무 키나 눌러 ");

Getchar ();

}

/* 버블 정렬 방법을 사용하여 실제 급여 필드별로 내림차순으로, 높음에서 낮음까지 */

Void Sort(ZGGZ tp[], int n)

{

Int i=0, j=0, flag = 0;;

ZGGZ newinfo

(n & lt=0) 인 경우

{system ("cls");

Printf(" \ n = = = = =>;; 직원 기록이 아닙니다! \ n ");

Getchar ();

반환;

}

시스템 ("cls");

Disp(tp, n) : /* 정렬 전에 모든 레코드 표시 */

For(I = 0;; 나 & ltn;; I++)

{

Flag = 0;;

For(j = 0;; J<n-1; J++)

If ((TP [j]. sfgz & lttp [j+1]). Sfgz))

{flag =1;

Strcpy(newinfo.num, TP [j]. num); /* 구조 변수 newinfo 를 사용하여 배열 요소 교환 */

Strcpy(newinfo.name, tp[j]. 이름);

Newinfo.jbgz=tp[j] 입니다. Jbgz

Newinfo.jj=tp[j] 입니다. JJ

Newinfo.kk=tp[j] 입니다. KK

Newinfo.yfgz=tp[j] 입니다. Yfgz

Newinfo.sk=tp[j] 입니다. Sk;

Newinfo.sfgz=tp[j] 입니다. Sfgz

Strcpy(tp[j].num, tp[j+ 1]. Num);

Strcpy(tp[j]. 이름, tp[j+ 1]. 이름);

Tp[j]. Jbgz=tp[j+ 1]. Jbgz

Tp[j]. Jj=tp[j+ 1]. JJ

Tp[j]. Kk=tp[j+ 1]. KK

Tp[j]. Yfgz=tp[j+ 1]. Yfgz

Tp[j]. Sk=tp[j+ 1]. Sk;

Tp[j]. Sfgz=tp[j+ 1]. Sfgz

Strcpy(tp[j+ 1]. Num, newinfo.num);

Strcpy(tp[j+ 1]. Name, newinfo.name);

Tp[j+ 1]. Jbgz = newinfo.jbgz;

Tp[j+ 1]. Jj = newinfo.jj

Tp[j+ 1]. Kk = newinfo.kk

Tp[j+ 1]. Yfgz = newinfo.yfgz;

Tp[j+ 1]. Sk = newinfo.sk

Tp[j+ 1]. Sfgz = newinfo.sfgz;

}

If (flag = = 0) break; /* 플래그 =0 이면 교환이 없고 정렬이 완료된 것입니다 */

}

Disp(tp, n) : /* 정렬된 모든 레코드 표시 */

저장 플래그 =1;

Printf(" \ n = = = = =>;; 정렬 완료! \ n ");

}

/* 데이터를 저장합니다. 사용자가 특별히 이 작업을 하지 않고 데이터를 수정한 경우 시스템을 종료할 때 데이터를 저장하라는 메시지가 표시됩니다 */

Void Save(ZGGZ tp[], int n)

{

FILE * FP

Int I = 0;;

Fp=fopen("c:\\zggz ","WB "); /* 쓰기 전용으로 이진 파일 열기 */

If(fp==NULL) /* 파일을 열 수 없음 */

{

Printf(" \ n = = = = =>;; 파일 열기 오류! \ n ");

Getchar ();

반환;

}

For(I = 0;; 나 & ltn;; I++)

{

If (fwrite (& TP [I], sizeof (zggz), 1, FP) = = 1)/* 한 번에 하나의 레코드 또는 하나의 구조 배열 요소 */

{

계속;

}

기타

{

깨뜨리다

}

}

(I>0) 인 경우

{

Getchar ();

Printf(" \ n \ n = = = = =>;; 파일 저장이 완료되었습니다. 저장된 총 레코드 수는 %d\n ",I) 입니다.

Getchar ();

저장 플래그 = 0;

}

기타

{system ("cls");

Printf ("현재 링크가 비어 있습니다. 직원 레코드가 저장되지 않았습니다! \ n ");

Getchar ();

}

Fclose (FP); /* 파일 닫기 */

}

Void main ()

{

Zggz gz [n]; /* ZGGZ 구조 정의 */

파일 * FP/* 파일 포인터 */

Int select/* 선택 결과 변수 저장 */

Char ch/* Save (y, y, n, N)*/

Intcount = 0; /* 저장된 파일의 레코드 (또는 요소) 수 */

Fp=fopen("C:\\zggz ","a b+");

/* 바이너리 c:\zggz 를 추가로 열어 읽기/쓰기가 가능합니다. 파일이 없으면 */

If(fp==NULL)

{

Printf(" \ n = = = = =>;; 파일을 열 수 없습니다! \ n ");

종료 (0);

}

그리고 (! Feof(fp))

{

If (fread (& Gz [count], sizeof (zggz), 1, FP) = = 1)/* 파일에서 한 번에 하나의 직원 급여 레코드 읽기 */

Count++;+;

}

Fclose (FP); /* 파일 닫기 */

Printf(" \ n = =>;; 파일 열기가 성공했습니다. 총 레코드 수는 %d.\n ",개수);

Getchar ();

메뉴 ();

While( 1)

{

시스템 ("cls");

메뉴 ();

Printf("\n 선택 사항을 입력하십시오 (0 ~ 9): "); /* 프롬프트 정보 표시 */

Scanf("%d ",& 선택);

If (선택 = = 0)

{

If(saveflag== 1) /* 배열 데이터가 수정되고 저장되지 않은 경우 이 플래그는 1*/

{getchar ();

Printf(" \ n = =>;; 수정된 레코드를 파일에 저장하시겠습니까? (y/n):);

Scanf("%c ",& ampch);

If(ch=='y'||ch=='Y')

저장 (gz, 개수);

}

Printf(" \ n = = =>;; 유용해 주셔서 감사합니다! );

Getchar ();

깨뜨리다

}

스위치 (선택)

{

시나리오 1:count=Add(gz, count); 깨뜨리다 /* 직원 급여 기록 추가 */

사례 2: count=Del(gz, count); 깨뜨리다 /* 사원 임금 레코드 삭제 */

사례 3: 코란 (gz, 수); 깨뜨리다 /* 직원 급여 기록 조회 */

사례 4: 수정 (gz, 개수); 깨뜨리다 /* 직원 급여 기록 수정 */

사례 5: 개수 = 삽입 (gz, 개수); 깨뜨리다 /* 직원 급여 기록 삽입 */

사례 6: 동지 (gz, count); 깨뜨리다 /* 직원 급여 기록 통계 */

사례 7:Sort(gz, count); 깨뜨리다 /* 사원 임금 레코드 정렬 */

사례 8: 저장 (gz, 개수); 깨뜨리다 /* 직원 급여 기록 보관 */

사례 9: 시스템 ("cls"); Disp(gz, 개수); 깨뜨리다 /* 직원 급여 기록 표시 */

기본값: 오류 (); Getchar (); 깨뜨리다 /* 키가 잘못되었습니다. 0-9*/

}

}

}

copyright 2024회사기업대전