C언어를 이용한 학생 관리 프로그램
#1 프로잭트 생성
#2 hellow world출력 해보기
# 학생관리 프로그램만들기 요구사항
1. 학생 데이터 입력 -학생 구조체 정의, 최대학생 수 10명, 각 학생당 입력받을 과목은 3가지(국어,영어,수학), 프로그램이 실행되면 모든 학생데이터 초기화
2. 학생 데이터 삭제
3. 학생 검색
4. 목록 보기
5. 프로그램 종료
* 메뉴 보여주기
0:종료 1:학생 데이터 입력 2:학생 데이터 삭제 3:학생검색 4:목록
1번을 선택 했다면 학번, 이름, 국어, 영어, 수학성적을 입력 받고 메뉴를 보여줍니다
학번은 8자리 입니다
이름은 최대 영문 10자, 한글 5자 입니다
국어, 영어, 수학은 0 ~ 100까지 입력 할 수 있습니다
2번을 선택 했다면 삭제할 학생의 학번을 입력 받아 삭제 합니다
잘못된 학번이거나 등록되지 않은 학번일 경우 “잘못된 학번 입니다”를 출력 해주세요
3번을 선택 했다면 검색할 학생의 학번을 입력 받아 다음과 같이 정보를 출력 합니다
잘못된 학번이거나 등록되지 않은 학번일 경우 “잘못된 학번 입니다”를 출력 해주세요
4번을 선택 했다면 등록된 모든 학생들의 정보를 보여 줍니다
삭제를 했다면 삭제된 학생은 보여서는 안됩니다
#코드
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_STUDENTS 10
#define MAX_NAME_LENGTH 11
#define _CRT_SECURE_NO_WARNINGS
typedef struct {
char studentID[9];
char name[MAX_NAME_LENGTH];
int scores[3];
int isActive;
} Student;
Student students[MAX_STUDENTS];
void initializeStudents() {
int i;
for (i = 0; i < MAX_STUDENTS; i++) {
students[i].isActive = 0;
}
}
void clearBuffer() {
int c;
while ((c = getchar()) != '\n' && c != EOF) {}
}
void inputStudentData() {
int i;
char studentID[9];
char name[MAX_NAME_LENGTH];
int scores[3];
printf("학번을 입력하세요 (8자리): ");
scanf("%8s", studentID);
clearBuffer();
printf("이름을 입력하세요 (최대 10글자): ");
fgets(name, sizeof(name), stdin);
name[strcspn(name, "\n")] = '\0';
printf("국어 점수를 입력하세요 (0~100): ");
scanf("%d", &scores[0]);
printf("영어 점수를 입력하세요 (0~100): ");
scanf("%d", &scores[1]);
printf("수학 점수를 입력하세요 (0~100): ");
scanf("%d", &scores[2]);
for (i = 0; i < MAX_STUDENTS; i++) {
if (!students[i].isActive) {
strncpy(students[i].studentID, studentID, sizeof(students[i].studentID));
strncpy(students[i].name, name, sizeof(students[i].name));
memcpy(students[i].scores, scores, sizeof(students[i].scores));
students[i].isActive = 1;
break;
}
}
printf("메뉴로 돌아가려면 아무 키나 누르세요.\n");
clearBuffer();
}
void deleteStudentData() {
char studentID[9];
int i;
printf("삭제할 학생의 학번을 입력하세요 (8자리): ");
scanf("%8s", studentID);
clearBuffer();
for (i = 0; i < MAX_STUDENTS; i++) {
if (students[i].isActive && strcmp(students[i].studentID, studentID) == 0) {
students[i].isActive = 0;
printf("학생 데이터를 삭제했습니다.\n");
return;
}
}
printf("잘못된 학번입니다.\n");
}
void searchStudent() {
char studentID[9];
int i;
printf("검색할 학생의 학번을 입력하세요 (8자리): ");
scanf("%8s", studentID);
clearBuffer();
for (i = 0; i < MAX_STUDENTS; i++) {
if (students[i].isActive && strcmp(students[i].studentID, studentID) == 0) {
float average = (students[i].scores[0] + students[i].scores[1] + students[i].scores[2]) / 3.0f;
printf("학번: %s\n", students[i].studentID);
printf("이름: %s\n", students[i].name);
printf("국어: %d\n", students[i].scores[0]);
printf("영어: %d\n", students[i].scores[1]);
printf("수학: %d\n", students[i].scores[2]);
printf("평균: %.2f\n", average);
return;
}
}
printf("학번에 해당하는 학생을 찾을 수 없습니다.\n");
}
void showStudentList() {
int i;
printf("등록된 학생 목록:\n");
for (i = 0; i < MAX_STUDENTS; i++) {
if (students[i].isActive) {
printf("학번: %s, 이름: %s\n", students[i].name, students[i].studentID);
}
}
}
int main() {
int choice;
initializeStudents();
printf("학생 데이터 초기화 완료.\n");
printf("아무 키나 누르면 메뉴가 나타납니다.\n");
getchar();
do {
printf("0: 종료, 1: 학생 데이터 입력, 2: 학생 데이터 삭제, 3: 학생 검색, 4: 목록 보기\n");
printf("원하는 메뉴를 선택하세요: ");
scanf("%d", &choice);
clearBuffer();
switch (choice) {
case 0:
printf("성적 관리 프로그램을 종료합니다.\n");
break;
case 1:
inputStudentData();
break;
case 2:
deleteStudentData();
break;
case 3:
searchStudent();
break;
case 4:
showStudentList();
break;
default:
printf("잘못된 메뉴 선택입니다.\n");
break;
}
} while (choice != 0);
return 0;
}
#Test1
#cmd창에서 보니 출력된 결과가 잘 눈에 들어오지 않는다. 출력되는 결과는 초록색으로 표기, 입력은 그대로
->ANSI 이스케이프 시퀀스 를 사용하여 터미널(cmd) 에서 색상 변경. 출력되는 부분(printf()) 에 '\033[32m' 를 사용
ex)printf("\033[32m잘못된 메뉴 선택입니다.\033[0m\n");
ex)printf("\033[32m0: 종료, 1: 학생 데이터 입력, 2: 학생 데이터 삭제, 3: 학생 검색, 4: 목록 보기\n");
#Test2
#텍스트 색상 바꾼 수정된 스크립트
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_STUDENTS 10
#define MAX_NAME_LENGTH 11
#define _CRT_SECURE_NO_WARNINGS
typedef struct {
char studentID[9];
char name[MAX_NAME_LENGTH];
int scores[3];
int isActive;
} Student;
Student students[MAX_STUDENTS];
void initializeStudents() {
int i;
for (i = 0; i < MAX_STUDENTS; i++) {
students[i].isActive = 0;
}
}
void clearBuffer() {
int c;
while ((c = getchar()) != '\n' && c != EOF) {}
}
void inputStudentData() {
int i;
char studentID[9];
char name[MAX_NAME_LENGTH];
int scores[3];
printf("\033[1;32m학번을 입력하세요 (8자리): \033[0m");
scanf("%8s", studentID);
clearBuffer();
printf("\033[1;32m이름을 입력하세요 (최대 10글자): \033[0m");
fgets(name, sizeof(name), stdin);
name[strcspn(name, "\n")] = '\0';
printf("\033[1;32m국어 점수를 입력하세요 (0~100): \033[0m");
scanf("%d", &scores[0]);
printf("\033[1;32m영어 점수를 입력하세요 (0~100): \033[0m");
scanf("%d", &scores[1]);
printf("\033[1;32m수학 점수를 입력하세요 (0~100): \033[0m");
scanf("%d", &scores[2]);
for (i = 0; i < MAX_STUDENTS; i++) {
if (!students[i].isActive) {
strncpy(students[i].studentID, studentID, sizeof(students[i].studentID));
strncpy(students[i].name, name, sizeof(students[i].name));
memcpy(students[i].scores, scores, sizeof(students[i].scores));
students[i].isActive = 1;
break;
}
}
printf("\033[1;32m메뉴로 돌아가려면 아무 키나 누르세요.\033[0m\n");
clearBuffer();
}
void deleteStudentData() {
char studentID[9];
int i;
printf("\033[1;32m삭제할 학생의 학번을 입력하세요 (8자리): \033[0m");
scanf("%8s", studentID);
clearBuffer();
for (i = 0; i < MAX_STUDENTS; i++) {
if (students[i].isActive && strcmp(students[i].studentID, studentID) == 0) {
students[i].isActive = 0;
printf("\033[1;32m학생 데이터를 삭제했습니다.\033[0m\n");
return;
}
}
printf("\033[1;32m잘못된 학번입니다.\033[0m\n");
}
void searchStudent() {
char studentID[9];
int i;
printf("\033[1;32m검색할 학생의 학번을 입력하세요 (8자리): \033[0m");
scanf("%8s", studentID);
clearBuffer();
for (i = 0; i < MAX_STUDENTS; i++) {
if (students[i].isActive && strcmp(students[i].studentID, studentID) == 0) {
float average = (students[i].scores[0] + students[i].scores[1] + students[i].scores[2]) / 3.0f;
printf("\033[37m학번: %s\n", students[i].studentID);
printf("이름: %s\n", students[i].name);
printf("국어: %d\n", students[i].scores[0]);
printf("영어: %d\n", students[i].scores[1]);
printf("수학: %d\n", students[i].scores[2]);
printf("평균: %.2f\n\033[0m", average);
return;
}
}
printf("\033[37m학번에 해당하는 학생을 찾을 수 없습니다.\033[0m\n");
}
void showStudentList() {
int i;
printf("\033[37m등록된 학생 목록:\n");
for (i = 0; i < MAX_STUDENTS; i++) {
if (students[i].isActive) {
printf("학번: \033[1;32m%s\033[0m, 이름: \033[1;32m%s\033[0m\n", students[i].studentID, students[i].name);
}
}
}
int main() {
int choice;
initializeStudents();
printf("\033[37m학생 데이터 초기화 완료.\n");
printf("아무 키나 누르면 메뉴가 나타납니다.\033[0m\n");
getchar();
do {
printf("\033[37m0: 종료, 1: 학생 데이터 입력, 2: 학생 데이터 삭제, 3: 학생 검색, 4: 목록 보기\n");
printf("원하는 메뉴를 선택하세요: \033[0m");
scanf("%d", &choice);
clearBuffer();
switch (choice) {
case 0:
printf("\033[37m성적 관리 프로그램을 종료합니다.\033[0m\n");
break;
case 1:
printf("\033[1;32m학번을 입력하세요\033[0m");
inputStudentData();
break;
case 2:
printf("\033[1;32m삭제할 학생의 학번을 입력하세요\033[0m");
deleteStudentData();
break;
case 3:
printf("\033[1;32m검색할 학생의 학번을 입력하세요\033[0m");
searchStudent();
break;
case 4:
showStudentList();
break;
default:
printf("\033[37m잘못된 메뉴 선택입니다.\033[0m\n");
break;
}
} while (choice != 0);
return 0;
}