티스토리 뷰
반응형
연결형 리스트를 이용한 도서 관리 프로그램을 만들어라. 라는 문제를 오랜만에 C로 풀어보았다
오랜만에 보니 C를 했더니 bool 변수 선언이 안된다. 찾아보니 C에는 bool 변수가 없단다; 별도의 헤더를 추가해줘야한다는데 패스 ;;
연결리스트의 핵심은 head 가 가르키는곳만 가지고있으면 노트가 다음 노드의 주소값을 가지고있으므로 그걸 타고 마지막까지 갈수 있다는것(?)이라고 생각한다.
head의 next, next의 next, next의 next의 next.... next가 NULL인것이 바로 현재 마지막 노드이고 그 뒤에 추가해주면 된다
중간에 삽입, 삭제하는 방법도 있는데 나중에 해보고 써야지...
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define S_SIZE 50
struct NODE {
char title[S_SIZE];
int year;
int isRental;
struct NODE *next;
};
int main(void)
{
struct NODE *head = NULL;
char buffer[S_SIZE];
char bookNameBuffer[S_SIZE];
char bookCreateYear[S_SIZE];
printf("연결형 리스트를 이용한 도서 관리 프로그램\n\n");
int isPlay = 1;
while (isPlay)
{
printf("=====================\n");
printf("0. 신규 등록\n");
printf("1. 도서 대출\n");
printf("2. 도서 반납\n");
printf("3. 목록 출력\n");
printf("4. 종료\n");
printf("=====================\n");
gets_s(buffer, S_SIZE);
switch (buffer[0])
{
case '0': // 신규 등록
printf("등록할 책의 제목을 입력하시오 : ");
gets_s(bookNameBuffer, S_SIZE);
printf("책의 출판 연도를 입력하시오 : ");
gets_s(bookCreateYear, S_SIZE);
struct NODE *newNode = (struct NODE *)malloc(sizeof(struct NODE));
strcpy(newNode->title, bookNameBuffer);
newNode->year = atoi(bookCreateYear);
newNode->isRental = 0;
newNode->next = NULL;
if (head == NULL)
{
head = newNode;
}
else
{
struct NODE* nextNode = head;
while (nextNode->next != NULL)
nextNode = nextNode->next;
nextNode->next = newNode;
}
printf("%s를 성공적으로 등록하였습니다.\n",bookNameBuffer);
break;
case '1': // 도서 대출
printf("대여할 책의 제목을 입력하시오 : ");
gets_s(bookNameBuffer, S_SIZE);
if (head == NULL)
{
printf("Error list is null");
break;
}
else
{
struct NODE* nextNode = head;
while (1)
{
if (strcmp(nextNode->title, bookNameBuffer) != 0)
nextNode = nextNode->next;
else
{
nextNode->isRental++;
break;
}
}
}
printf("%s 를 대출에 성공하였습니다.\n", bookNameBuffer);
break;
case '2': // 도서 반납
printf("반납할 책의 제목을 입력하시오 : ");
gets_s(bookNameBuffer, S_SIZE);
if (head == NULL)
{
printf("Error list is null");
break;
}
else
{
struct NODE* nextNode = head;
while (1)
{
if (strcmp(nextNode->title, bookNameBuffer) != 0)
nextNode = nextNode->next;
else
{
nextNode->isRental--;
break;
}
}
}
printf("%s 를 반납에 성공하였습니다.\n", bookNameBuffer);
break;
case '3': // 목록 출력
{
struct NODE* nextNode = head;
int bookCount = 0;
while (1)
{
if (nextNode != NULL)
{
printf("순서 %d, 출판연도 %d, 대출여부 %d, 제목 %s\n", bookCount++, nextNode->year, nextNode->isRental, nextNode->title);
nextNode = nextNode->next;
}
else
break;
}
}
break;
case '4': // 종료
isPlay = 0;
break;
}
}
return 0;
}
반응형
'공부' 카테고리의 다른 글
spring spring-boot-gradle-plugin 오류 (0) | 2024.02.02 |
---|---|
flutter phrase 적용하기 (0) | 2023.11.08 |
flutter phrase적용 - phrase 추출하기 (0) | 2023.11.08 |
[C#] 값형식과 참조형식 (2) | 2020.11.27 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- UPROPERTY
- 연말정산
- C#
- 언제어디서나요요
- 유니티 Library
- 스토케요요
- 유니티 텍스트 하이퍼링크
- scrollview particle
- c언어
- 직군면접
- ngui 파티클
- 클라이언트 면접
- 기술면접
- particle cliping
- 베이비젠요요
- ngui scrollview particle
- 휴대용유모차
- ngui 스크롤뷰
- ngui 스크롤뷰 파티클
- 내돈내산
- 성남돌잔치
- ngui 스크롤뷰 파티클 클리핑
- Library/PackageCache
- Unreal
- 도서대출프로그램
- 구글 스프레드시트 드롭다운
- 유니티 a href
- 값형식과 참조형식의 차이
- 연결리스트
- 유니티 개발자 면접
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
글 보관함