C 언어 는 대학생 출근 관리 시스템 을 실현 한다.

프로 그래 밍 문제:대학생 출근 시스템
1 문제 설명
이 시스템 은 간단 하고 실 용적 인 학생 출근 시스템 프로그램 을 실현 해 야 한다.주요 기능 은 출근 데이터 의 추가,삭제,수정,찾기,통계,정렬,출력 등 을 포함한다.모든 통계 데 이 터 는 파일 시스템 을 이용 하여 저장 하여 시스템 이 다음 에 실 행 될 때 사용 하도록 해 야 한다.이 과 제 를 통 해 파일,배열,포인터 의 각종 조작 과 기본 알고리즘 의 응용 을 능숙 하 게 파악 합 니 다.
2 기능 요구 사항
코드 는 다음 과 같은 몇 가지 기본 기능 을 제공 할 수 있어 야 한다.
(1)출근 데 이 터 는 여러 가지 데이터 기록 으로 구성 되 는데 그 정 보 는 학 번(유일),성명,학급,출근 날짜(월 과 일 로 구성)등 을 포함한다.
(2)데이터 저장 형식:모든 정 보 는 텍스트 나 바 이 너 리 파일 로 저장 해 야 합 니 다.
(3)실현 해 야 할 기능
a.학생 정보 데 이 터 를 추가 합 니 다.
b.데 이 터 를 찾 습 니 다.
c.학생 기록 을 수정 할 수 있 습 니 다.
d.학생 기록 삭제(위 에서 수정 한 처 리 를 참고 하 십시오).
e  학생 들 의 출근 데이터 목록 을 표시 합 니 다(부분 또는 전 부 를 표시 할 수 있 습 니 다).
f  정렬(학 번,성명,출근 날짜 등에 따라 정렬 가능).
g 데이터 통계(출근 데이터 에 대한 통계 분석,통계 가 완 료 된 후에 출근 시스템 에서 출근 명세서,출근 일 보고서,출근 집계 표,출근 이상 표,휴가 집계 표 등 을 얻 을 수 있다).
h  파일 에 데 이 터 를 저장 하고 파일 에서 데 이 터 를 읽 습 니 다.
(4)인터페이스 기능 요구:
1)우호 적 인 인터페이스 로 기능 제어 메뉴 를 구현 한다.
2)매번 작업 은 이 메뉴 에서 선택 하고 순환 구 조 를 이용 하여 한 번 의 실행 프로그램 을 여러 번 조작 할 수 있 습 니 다.
비고:
(1)데이터 의 완전 성 보증.예 를 들 어 학 번 과 성명 은 반드시 엄격 하고 규범화 되 어야 한다.
(2)보고서 의 형식 이 유연 하고 형식 이 다양 하 며 내용 이 명확 해 야 하 며 구체 적 으로 학생 스스로 구상 하고 디자인 해 야 한다.
(3)출근 체크 기호:출근√   무단결석 X   사적인 휴가   병가   지각  조퇴
(4)출근 시간 대 는 10 개 이상 이 어야 한다.
3 기타 요구 사항
(1)화면 이 아름 답 고 상호작용 이 편리 하 다.
(2)주석 상세:각 함수 에 주석 설명 기능 이 있 고 매개 변수,반환 값 에 대해 서도 주석 형식 으로 용 도 를 설명 해 야 한다.관건 적 인 문장 단락 은 주석 해석 을 요구한다.
(3)프로그램의 차원 이 뚜렷 하고 가 독성 이 강하 다.
(4)변수,함수 이름 이 규범 에 부합 한다.
(5)가능 하 다 면 MFC 등 개발 도 구 를 사용 하여 컬러 또는 그래 픽 조작 인터페이스 를 실현 할 수 있다.
4 개발 환경
TC 2.0,TC 3.0,VC++6.0,vs 2010 등 개발 환경 을 선택 하거나 선생님 과 토론 하여 자신 이 잘 아 는 개발 도구 와 플랫폼 을 선택 할 수 있 습 니 다.

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#define maxsize 15
#define maxnum 1000
 
typedef struct {
 char Student_ID[maxsize];
 char Name[maxsize];
 char Class_Number[maxsize];
 char Attandance_date[maxsize];
 char Attandance_Result[maxsize];
} student;
 
student Students[maxnum];
 
int num = 0;
char buf[maxsize];
/*                   ,            */
void wait_for_Enter() {
 getchar();
 getchar();
}
/*           ,         ,   atoi         ,    ,          */
int convert(char str[]) {
 int i,j,res = 0, cnt = 0;
 for (i = strlen(str) - 3; i >= 0; i--) {
 if (str[i] >= '0'&&str[i] <= '9') res *= 10, res += (str[i] - '0');
 else break;
 }
 return res;//    ,          ,  11 5 ,     5;5 23 ,     23
}
/*        student    b       student     a*/
void copy(student *a,student *b) {
 strcpy(a->Student_ID , b->Student_ID);
 strcpy(a->Name , b->Name);
 strcpy(a->Class_Number , b->Class_Number);
 strcpy(a->Attandance_Result , b->Attandance_Result);
 strcpy(a->Attandance_date , b->Attandance_date);
}
/*                         */
bool judge(char *ID) {
 int i;
 for (i = 0; i < num; i++) {
 if (strcmp(Students[i].Student_ID, ID) == 0) return false;
 }
 return true;
}
/*    ,      */
void setInfo(char pinfo[], char desinfo[]) {
 printf("%s:", pinfo);
 scanf("%s", desinfo);
}
/*           */
void PrintAllInformation() {
 int i;
 printf("------------------------------------
"); for (i = 0; i < num; i++) printf("%s %s %s %s %s
", Students[i].Student_ID, Students[i].Name, Students[i].Class_Number, Students[i].Attandance_date, Students[i].Attandance_Result); printf("------------------------------------
"); printf(" !
"); wait_for_Enter(); } /* */ void PrintPartInformation() { int i; printf("------------------------------------
"); for (i = 0; i < num; i++) printf("%s %s %s
", Students[i].Name, Students[i].Attandance_date, Students[i].Attandance_Result); printf("------------------------------------
"); printf(" !
"); wait_for_Enter(); } /* */ void ADD() { char ID[maxsize]; printf(" :"); scanf("%s", ID); if (!judge(ID)) { printf("
"); printf(" !
"); wait_for_Enter(); return; } strcpy(Students[num].Student_ID, ID); setInfo(" ", Students[num].Name); setInfo(" ", Students[num].Class_Number); setInfo(" ", Students[num].Attandance_date); setInfo(" √ X △ ○ + C", Students[num].Attandance_Result); num++;// printf(" !
"); wait_for_Enter(); } /* , , , */ void Find() { int i, op, flag = -1; char information[maxsize]; printf("<1> <2> <3>
"); scanf("%d", &op); if (op == 1) { printf(" :"); scanf("%s", information); for (i = 0; i < num; i++) { if (strcmp(information, Students[i].Student_ID) == 0) printf("%s %s %s %s %s

", Students[i].Student_ID, Students[i].Name, Students[i].Class_Number, Students[i].Attandance_date, Students[i].Attandance_Result), flag = 1; } } else if (op == 2) { printf(" :"); scanf("%s", information); for (i = 0; i < num; i++) { if (strcmp(information, Students[i].Name) == 0) printf("%s %s %s %s %s

", Students[i].Student_ID, Students[i].Name, Students[i].Class_Number, Students[i].Attandance_date, Students[i].Attandance_Result), flag = 1; } } else { printf(" :"); scanf("%s", information); for (i = 0; i < num; i++) { if (strcmp(information, Students[i].Attandance_date) == 0) printf("%s %s %s %s %s

", Students[i].Student_ID, Students[i].Name, Students[i].Class_Number, Students[i].Attandance_date, Students[i].Attandance_Result), flag = 1;; } } if (flag == -1) printf(" !
"); printf(" !
"); wait_for_Enter(); } /* , , */ void Change() { int i, j = -1; char op[2], information[maxsize], find[maxsize]; printf("<1> <2> <3>
"); scanf("%s", op); if (op[0] == '1') setInfo(" ", information); else if (op[0] == '2') setInfo(" ", information); else setInfo(" ", information); strcpy(find, information); if(op[0]=='1') for (i = 0; i < num; i++) { if (strcmp(find, Students[i].Student_ID) == 0) j = i; } else if(op[0]=='2') for (i = 0; i < num; i++) { if (strcmp(find, Students[i].Name) == 0) j = i; } else for (i = 0; i < num; i++) { if (strcmp(find, Students[i].Attandance_date) == 0) j = i; } if (j == -1) { printf(" !
"); printf(" !
"); wait_for_Enter(); return; } setInfo("<1> <2> <3> ", op); if (op[0] == '1') { setInfo(" ", information); strcpy(Students[j].Student_ID, information); } else if (op[0] == '2') { setInfo(" ", information); strcpy(Students[j].Name, information); } else { setInfo(" ", information); strcpy(Students[j].Attandance_date, information); } printf(" ! !
"); wait_for_Enter(); } /* , num--, , */ void Delete() { int i, j,flag = -1; char op[2],information[maxsize]; setInfo(" :<1> <2> ", op); if (op[0] == '1') { setInfo(" ", information); for (i = 0; i < num; i++) { if (strcmp(Students[i].Student_ID, information) == 0) { flag = 1; for (j = i + 1; j < num; j++) { copy(&Students[i], &Students[j]); } } } } else { setInfo(" ", information); for (i = 0; i < num; i++) { if (strcmp(Students[i].Name, information) == 0) { flag = 1; for (j = i + 1; j < num; j++) { copy(&Students[i], &Students[j]); } } } } if (flag == -1) { printf(" !
"); printf(" !
"); wait_for_Enter(); return ; } num--; printf(" !
"); printf(" !
"); wait_for_Enter(); } /* 5 */ void Print() { int op; printf("
<1> ( )
<2> ( ):"); scanf("%d", &op); if (op == 1) PrintPartInformation(); else PrintAllInformation(); } /* , char , strcmp 。 , */ void exchange(student *a, student *b) { char tmp[maxsize]; strcpy(tmp, a->Student_ID); strcpy(a->Student_ID, b->Student_ID); strcpy(b->Student_ID, tmp); strcpy(tmp, a->Name); strcpy(a->Name, b->Name); strcpy(b->Name, tmp); strcpy(tmp, a->Class_Number); strcpy(a->Class_Number, b->Class_Number); strcpy(b->Class_Number, tmp); strcpy(tmp, a->Attandance_Result); strcpy(a->Attandance_Result, b->Attandance_Result); strcpy(b->Attandance_Result, tmp); strcpy(tmp, a->Attandance_date); strcpy(a->Attandance_date, b->Attandance_date); strcpy(b->Attandance_date, tmp); return; } /* 6 , , , , */ void Order() { int op, i, j; char tmp[maxsize]; printf(" :<1> <2> ASCLL <3> :
"); scanf("%d", &op); if (op == 1) { for (i = 0; i < num; i++) { for (j = i+1; j < num; j++) { if (strcmp(Students[i].Student_ID, Students[j].Student_ID) > 0) { exchange(&Students[i], &Students[j]); } } } } else if (op == 2) { for (i = 0; i < num; i++) { for (j = i+1; j < num; j++) { if (strcmp(Students[i].Name, Students[j].Name) > 0) { exchange(&Students[i], &Students[j]); } } } } else { int month_1, month_2, day_1, day_2; for (i = 0; i < num; i++) { month_1 = atoi(Students[i].Attandance_date); day_1 = convert(Students[i].Attandance_date); for (j = i+1; j < num; j++) { month_2 = atoi(Students[j].Attandance_date); day_2 = convert(Students[j].Attandance_date); if(month_1>month_2) exchange(&Students[i], &Students[j]); else if(month_1==month_2&&day_1>day_2) exchange(&Students[i], &Students[j]); } } } printf(" !
"); wait_for_Enter(); } /* , , , , */ void Detail_Print() { int i, j; char tmp[maxsize]; int month_1, month_2, day_1, day_2; for (i = 0; i < num; i++) { month_1 = atoi(Students[i].Attandance_date); day_1 = convert(Students[i].Attandance_date); for (j = 0; j < num; j++) { month_2 = atoi(Students[j].Attandance_date); day_2 = convert(Students[j].Attandance_date); if (month_1 < month_2) exchange(&Students[i], &Students[j]); else if (month_1 == month_2 && day_1 < day_2) exchange(&Students[i], &Students[j]); } } printf("------------------------------------
"); printf(" :
"); printf("%s:
", Students[0].Attandance_date); printf("%s %s %s %s
", Students[0].Student_ID, Students[0].Name, Students[0].Class_Number, Students[0].Attandance_Result); strcmp(tmp, Students[0].Attandance_date); for (i = 1; i < num; i++) { if (strcmp(Students[i].Attandance_date, tmp) != 0) { printf("%s:
", Students[i].Attandance_date); strcmp(tmp, Students[i].Attandance_date); } printf("%s %s %s %s
", Students[i].Student_ID, Students[i].Name, Students[i].Class_Number, Students[i].Attandance_Result); } printf("------------------------------------
"); printf(" !
"); wait_for_Enter(); } /* */ void Daily_Print() { int i; char information[maxsize]; setInfo(" ", information); printf("------------------------------------
"); printf("%s :
", information); for (i = 0; i < num; i++) { if (strcmp(information, Students[i].Attandance_date) == 0) printf("%s %s %s %s
", Students[i].Student_ID, Students[i].Name, Students[i].Class_Number, Students[i].Attandance_Result); } printf("------------------------------------
"); printf(" !
"); wait_for_Enter(); } /* , ‘ ' */ void Informal_Print() { int i, cnt = 0; printf("------------------------------------
"); printf(" :
"); for (i = 0; i < num; i++) { if (strcmp(Students[i].Attandance_Result, "√") != 0) printf("%s %s %s %s %s
", Students[i].Student_ID, Students[i].Name, Students[i].Class_Number, Students[i].Attandance_date, Students[i].Attandance_Result), cnt++; } printf(" :%d
", cnt); printf("------------------------------------
"); printf(" !
"); wait_for_Enter(); } /* , */ void AskForLeave_Print() { int i, cnt = 0; printf("------------------------------------
"); printf("
"); for (i = 0; i < num; i++) { if (strcmp(Students[i].Attandance_Result, "○") == 0 || strcmp(Students[i].Attandance_Result, "○") == 0) printf("%s %s %s %s %s
", Students[i].Student_ID, Students[i].Name, Students[i].Class_Number, Students[i].Attandance_date, Students[i].Attandance_Result), cnt++; } printf(" :%d
", cnt); printf("------------------------------------
"); printf(" !
"); wait_for_Enter(); } /* 7 */ void Statistics() { char op[2]; setInfo("
<1>
<2>
<3>
<4> ",op); if (op[0] == '1') { Detail_Print(); } else if (op[0] == '2') { Daily_Print(); } else if (op[0] == '3') { Informal_Print(); } else { AskForLeave_Print(); } } int main() { int i, a, b = 1; FILE *fp= fopen("Manage.txt", "at+"); if (!fp) { printf(" !
"); exit(0); } fscanf(fp, "%d", &num);// printf(" :%d
", num); for (i = 0; i < num; i++) {// fscanf(fp, "%s%s%s%s%s", &Students[i].Student_ID, &Students[i].Name, &Students[i].Class_Number, &Students[i].Attandance_date, &Students[i].Attandance_Result); } fclose(fp); while (b != 0) { printf("==============================================================================

"); printf("

"); printf("==============================================================================

"); printf("<1> <2> <3>
"); printf("<4> <5> <6>
"); printf("<7> <8> quit

"); scanf("%d", &a); switch (a) { case 1: ADD(); break; case 2: Find(); break; case 3: Change(); break; case 4: Delete(); break; case 5: Print(); break; case 6: Order(); break; case 7: Statistics(); break; case 8: printf("
"); b = 0; break; } system("cls");// , } // , FILE *F=fopen("Manage.txt","wt");// wt , fprintf(F, "%d
", num); for (int i = 0; i < num; i++) { fprintf(F, "%s %s %s %s %s
", Students[i].Student_ID, Students[i].Name, Students[i].Class_Number, Students[i].Attandance_date, Students[i].Attandance_Result); } fclose(F); // return 0; }
2020.6.14 작은 업데이트:
많은 동료 들 이 나 에 게 왜 자신의 기계 에서 실행 되 지 못 하 느 냐 고 개인 적 으로 물 었 습 니 다.가능 한 이 유 는 내 가 이 프로그램 을 작성 할 때.cpp 접미사 로 명 명 된 c+파일 을 사 용 했 기 때 문 입 니 다.그리고 당신 이 사용 한 것 은 c 접미사 로 명 명 명 된 c 언어 파일 입 니 다.이 두 가 지 는 많은 차이 가 있 습 니 다.예 를 들 어 c 언어 에 bool 형식의 변수 가 없 기 때문에 기계 에 오 류 를 보고 할 수 있 습 니 다.
.c 파일 을.cpp 파일 로 바 꾸 어 다시 실행 하거나 bool 형식의 변 수 는 int 형식의 0 과 1 로 대체 할 수 있 습 니 다.이 프로그램 은 절대 문제 가 없습니다.
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.

좋은 웹페이지 즐겨찾기