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 로 대체 할 수 있 습 니 다.이 프로그램 은 절대 문제 가 없습니다.
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
C 언어 체인 시계는 뱀을 탐식하는 작은 게임을 실현한다본고의 실례는 여러분에게 C 언어 체인표가 뱀 탐식 게임을 실현하는 구체적인 코드를 공유하여 참고하도록 하였으며, 구체적인 내용은 다음과 같다. 프로젝트 이름: 뱀놀이 운영 환경: Linux 프로그래밍 언어: C 언...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.