ê°•í�¬ê²½ì�´ 타과 친구ì�˜ ë¶€íƒ�으로 ëŒ€ì‹ í•´ì¤€ ìˆ™ì œ. 스펙ì—� 있는 배열로 구현하ë�¼ëŠ” ë§�ì�„ 못 ë³´ê³ í˜¼ìž� ì‹ ë‚˜ì„œ ë§�í�¬ë“œ 리스트로 구현했다. ì�´ê±¸ 어째...
스팩 ¶
{{|
메모리 �용 학�관리 프로그램
-배열�용
-student 구조체 사용(dept, name, num(1~20)
-기능(콘솔ì—�서 사용ìž� ìž…ë ¥ ì›�소 삽입
메모리 �용 학�관리 프로그램
-배열�용
-student 구조체 사용(dept, name, num(1~20)
-기능(콘솔ì—�서 사용ìž� ìž…ë ¥ ì›�소 삽입
( ì‚ì œ-numì�„ ì�´ìš©í•´ì„œ...,
(검색-binary search??, sequential search...)
(option-파ì�¼ì—� ì“°ê³ ì�½ëŠ” 부분 첨가)
|}}(검색-binary search??, sequential search...)
(option-파ì�¼ì—� ì“°ê³ ì�½ëŠ” 부분 첨가)
소스 ¶
~cpp
/*
��드 리스트를 �용한 학�관리 프로그램
*��드 리스트
학�->학�->학�->NULL
*/
#include <stdio.h>
#define HEAD 0
#define TAIL 1
#define ORIGINALSEARCH 0
#define DELETIONSEARCH 1
struct Student{
char dept[10];
char name[10];
int number;
struct Student* nextStudent;
};
typedef struct Student Student;
int Menu(int aPopulation);//ë©”ë‰´ì„ íƒ�
int Process(int aMenu, int aPopulation, Student* aListPointer[]);
int AddStudent(int aPopulation, Student* aListPointer[]);//새로운 학� 추가
void SearchStudent(Student* aHead);//단순 찾기
int DelStudent(int aPopulation, Student* aListPointer[]);//찾아서 지우기
void InputStudentInfo(Student* aStudent);//ì •ë³´ ìž…ë ¥
void FreeMemory(Student* aHead);//메모리 í•´ì œ
void ListOutput(Student* aHead);//목ë¡� ì¶œë ¥
Student* Searching(int aNumber, Student* aHead, int aType);//찾기
int main()
{
Student* listPointer[2];//리스트� 머리와 꼬리
int population = 0;//등�� 학�수
do{
population = Process(Menu(population), population, listPointer);
printf("\n");//보기 좋게 한 칸 �다.
}while(population != -1);//프로그램 종료 조건
FreeMemory(listPointer[HEAD]);//메모리 í•´ì œ
system("PAUSE");
return 0;
}
int Menu(int aPopulation){
int selectedMenu;
printf("☞안녕하세요. 학� 관리 프로그램입니다.\n");
printf("1. í•™ìƒ� ì •ë³´ 추가\n");
if(aPopulation){//등�� 학�� 있으면
printf("2. í•™ìƒ� ì •ë³´ 검색\n");
printf("3. í•™ìƒ� ì •ë³´ ì‚ì œ\n");
}
printf("4. 종료\n");
printf("\n메뉴를 ì„ íƒ�í•´ 주세요: ");
scanf("%d", &selectedMenu);
return selectedMenu;
}
int Process(int aMenu, int aPopulation, Student* aListPointer[]){
if(aMenu == 1)//추가
aPopulation = AddStudent(aPopulation, aListPointer);
else if(aMenu == 4)//종료
aPopulation = -1;
else if(aPopulation){//등�� 학�� 있으면
if(aMenu == 2)//찾기
SearchStudent(aListPointer[HEAD]);
if(aMenu == 3)//ì‚ì œ
aPopulation = DelStudent(aPopulation, aListPointer);
}
else
printf("\n잘못ë�œ ë©”ë‰´ì„ íƒ�입니다.\n");
return aPopulation;
}
int AddStudent(int aPopulation, Student* aListPointer[]){
Student* newStudent;
newStudent = (Student*)malloc(sizeof(Student));
InputStudentInfo(newStudent);
if(!aPopulation){//첫 등�� 경우
aListPointer[HEAD] = newStudent;
}
else{
aListPointer[TAIL]->nextStudent = newStudent;
}
aListPointer[TAIL] = newStudent;
aPopulation++;
printf("\n현재 등ë¡�ë�œ í•™ìƒ�명단\n");//현재 등ë¡�ë�˜ì–´ 있는 명단ì�„ ì¶œë ¥í•œë‹¤.
ListOutput(aListPointer[HEAD]);
return aPopulation;
}
void SearchStudent(Student* aHead){
int searchNumber;
Student* searched;
printf("\nê²€ìƒ‰í• í•™ìƒ�ì�˜ 번호를 ìž…ë ¥í•˜ì„¸ìš”: ");
scanf("%d", &searchNumber);
searched = Searching(searchNumber, aHead, ORIGINALSEARCH);
if(searched)
printf("검색 성공!\n부서: %s\n�름: %s\n번호: %d\n",
searched->dept, searched->name, searched->number);
else
printf("검색 실패, 없는 번호입니다.\n");
}
int DelStudent(int aPopulation, Student* aListPointer[]){
int deleteNumber;
Student* searchedFormer;
Student* searched;
printf("\nì‚ì œí• í•™ìƒ�ì�˜ 번호를 ìž…ë ¥í•˜ì„¸ìš”: ");
scanf("%d", &deleteNumber);
searchedFormer = Searching(deleteNumber, aListPointer[HEAD], DELETIONSEARCH);
if(!searchedFormer || searchedFormer->nextStudent){
if(!searchedFormer){ //가장 처� �때
searched = aListPointer[HEAD];
aListPointer[HEAD] = searched->nextStudent;
}
else if(!(searched->nextStudent)){//� �때
searched = searchedFormer->nextStudent;
searchedFormer->nextStudent = NULL;
aListPointer[TAIL] = searchedFormer;
}
else{ //중간�때
searched = searchedFormer->nextStudent;
searchedFormer->nextStudent = searched->nextStudent;
}
free(searched);//메모리 í•´ì œ
aPopulation--;
printf("\n현재 남아있는 í•™ìƒ�명단\n");//현재 남아있는 명단 ì¶œë ¥
ListOutput(aListPointer[HEAD]);
}
else
printf("ì‚ì œ 실패, 없는 번호입니다.\n");
return aPopulation;
}
void InputStudentInfo(Student* aStudent){
printf("부서: ");
scanf("%s", aStudent->dept);
printf("�름: ");
scanf("%s", aStudent->name);
printf("번호: ");
scanf("%d", &(aStudent->number));
aStudent->nextStudent = NULL;
}
void FreeMemory(Student* aHead){
Student* temp;
while(aHead){//ë§�í�¬ë¥¼ ì‰~ë”°ë�¼ê°€ë©´ì„œ í•´ì œ
temp = aHead;
free(temp);
aHead = aHead->nextStudent;
}
}
void ListOutput(Student* aHead){
int counter = 0;
Student* temp;
temp = aHead;
while(temp){//ë§�í�¬ë¥¼ ì‰~ë”°ë�¼ê°€ë©´ì„œ ì¶œë ¥
counter++;
printf("%s\n",temp->name);
temp = temp->nextStudent;
}
printf("현재 � %d명� 학�� 등��었습니다.\n", counter);
}
Student* Searching(int aNumber, Student* aHead, int aType){
Student* searched = aHead;
Student* searchedFormer = NULL;
while(searched){////ë§�í�¬ë¥¼ ì‰~ë”°ë�¼ê°€ë©´ì„œ 검색
if(searched->number == aNumber)
break;
else{
searchedFormer = searched;
searched = searched->nextStudent;
}
}
if(aType == ORIGINALSEARCH)
return searched;
else
return searchedFormer;
}










