C언어 구조체를 이용한 학생 성적 관리 프로그램
//std.h
#pragma once
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <conio.h>
#include "student.h"
#include "control.h"
#include "wbfile.h"
//start.c
#include "std.h"
//흐름
void app_init();
void app_run();
void app_exit();
//start.c
int main()
{
app_init();
app_run();
app_exit();
return 0;
}
void app_init()
{
con_init();
system("cls"); //#include <stdlib.h>
printf("**********************************************\n");
printf(" C언어 프로그래밍\n");
printf(" 구조체를 활용한 회원 관리 프로그램\n");
printf(" 2023.11.19\n");
printf("**********************************************\n");
system("pause");
}
void app_run()
{
while (1)
{
system("cls");
con_stu_printall();
printf("**********************************************\n");
printf(" [1] 저장(insert)\n");
printf(" [2] 검색(select)\n");
printf(" [3] 수정(update)\n");
printf(" [4] 삭제(delete)\n");
printf(" [5] 종료(exit)\n");
printf("**********************************************\n");
char idx = _getch(); //#include <conio.h>
switch (idx)
{
case '1': con_stu_insert(); break;
case '2': con_stu_select(); break;
case '3': con_stu_update(); break;
case '4': con_stu_delete(); break;
case '5': return;
}
system("pause");
}
}
void app_exit()
{
con_exit();
system("cls");
printf("**********************************************\n");
printf(" 프로그램 종료\n");
printf("**********************************************\n");
system("pause");
}
//student.c
#include "std.h"
//student.h
#pragma once
typedef struct tagstudent
{
int number;
char name[20];
int test1;
int test2;
int report;
int attend;
int total;
}student;
//control.c
#include "std.h"
student g_students[DATA_MAX];
void con_init()
{
wbfile_load();
}
void con_exit()
{
wbfile_save();
}
void con_stu_insert()
{
printf("\n[저장]\n");
int number;
char name[20];
int test1;
int test2;
int report;
int attend;
int idx;
printf("저장 위치(0~%d) : ", DATA_MAX-1); scanf_s("%d", &idx);
char dummy = getchar();
printf("번 호 : "); scanf_s("%d", &number);
dummy = getchar();
printf("이 름 : "); gets_s(name, sizeof(name));
printf("중간고사 : "); scanf_s("%d", &test1);
printf("기말고사 : "); scanf_s("%d", &test2);
printf("과 제 : "); scanf_s("%d", &report);
printf("출 석 : "); scanf_s("%d", &attend);
dummy = getchar();
if (g_students[idx].number != 0)
{
printf("이미 회원정보가 존재\n");
return;
}
g_students[idx].number = number;
strcpy_s(g_students[idx].name, sizeof(g_students[idx].name), name);
g_students[idx].test1 = test1;
g_students[idx].test2 = test2;
g_students[idx].report = report;
g_students[idx].attend = attend;
g_students[idx].total = test1 + test2 + report + attend;
printf("저장되었습니다\n");
}
void con_stu_select()
{
printf("\n[검색]\n");
int number;
printf("학생번호 입력 : "); scanf_s("%d", &number);
char dummy = getchar();
int idx = numbertoidx(number);
if (idx == -1)
{
printf("없는 번호\n");
}
else
{
printf("[학생번호] %d\n", g_students[idx].number);
printf("[이 름] %s\n", g_students[idx].name);
printf("[중간고사] %d\n", g_students[idx].test1);
printf("[기말고사] %d\n", g_students[idx].test2);
printf("[과 제] %d\n", g_students[idx].report);
printf("[출 석] %d\n", g_students[idx].attend);
printf("[합 계] %d\n", g_students[idx].total);
}
}
void con_stu_update()
{
printf("\n[수정]\n");
int number, test1, test2;
printf("번 호 : "); scanf_s("%d", &number);
printf("중간고사 : "); scanf_s("%d", &test1);
printf("기말고사 : "); scanf_s("%d", &test2);
char dummy = getchar();
int idx = numbertoidx(number);
if (idx == -1)
{
printf("없는 번호\n");
}
else
{
g_students[idx].test1 = test1;
g_students[idx].test2 = test2;
g_students[idx].total = test1 + test2 + g_students[idx].report + g_students[idx].attend;
printf("성적 수정\n");
}
}
void con_stu_delete()
{
printf("\n[삭제]\n");
int number;
printf("학생번호 입력 : "); scanf_s("%d", &number);
char dummy = getchar();
int idx = numbertoidx(number);
if (idx == -1)
{
printf("없는 번호\n");
}
else
{
g_students[idx].number = 0;
printf("삭제 성공\n");
}
}
void con_stu_printall()
{
for (int i = 0; i < DATA_MAX; i++)
{
student stu = g_students[i];
if (stu.number == 0)
{
printf("[%d]\n", i);
}
else
{
printf("[%d] %d \t %s \t %d \t %d \t %d \t %d \t %d\n",
i, stu.number, stu.name,
stu.test1, stu.test2, stu.report, stu.attend, stu.total);
}
}
}
//순차검색
int numbertoidx(int number)
{
for (int i = 0; i < DATA_MAX; i++)
{
if (g_students[i].number == number) //비교
{
return i; //성공: 인덱스
}
}
return -1; // 실패
}
//control.h
#pragma once
#define DATA_MAX 10
void con_init();
void con_exit();
void con_stu_insert();
void con_stu_select();
void con_stu_update();
void con_stu_delete();
void con_stu_printall();
int numbertoidx(int number);
'C++' 카테고리의 다른 글
[C++]클래스를 이용한 학생 성적 관리 프로그램 (2) | 2023.11.22 |
---|---|
[C++] 상속 부모와 자식 클래스 (0) | 2023.11.21 |
[C/C++]동적 메모리 할당 AND 소멸자 (1) | 2023.11.14 |
[C++/클래스]has a생과 사를 같이 소유 (0) | 2023.11.13 |
[C++/클래스]소유(has a) (0) | 2023.11.13 |