본문 바로가기
Toy Project

[내가 만든 프로젝트] 비디오 관리 프로그램

by shinbian11 2022. 10. 9.

※ 재업로드한 글입니다.

 

 

 

간단한 비디오 관리 프로그램을 C언어로 작성하였습니다.

비디오 목록 보기, 등록하기, 구매하기, 삭제하기가 가능하며,

마이룸에서도 여러가지 기능을 사용할 수 있습니다.

 

미완성 프로젝트라 부족한 점이 있습니다. 감사합니다.

 

#include <stdio.h>
void login();
void login_else();
void MainMenu();
void ShowVideoList();
void UpdateVideo();
void DeleteVideo();
void BuyVideo();
void MyRoom();

char* real_id = "video";
char* real_password = "kjh";

typedef struct {
	char name[100];
	char detail[100];
	int price;
} DocumentVideo; // 다큐
typedef struct {
	char name[100];
	char detail[100];
	int price;
} DramaVideo; // 드라마
typedef struct {
	char name[100];
	char detail[100];
	int price;
} MovieVideo; // 영화
typedef struct {
	char name[100];
	char detail[100];
	int price;
} MyList;
DocumentVideo* docu[10];
DramaVideo* drama[10];
MovieVideo* movie[10];
MyList* mylist[10];

int login_cnt = 5; //login 기회는 5번... 5번 안에 로그인 실패하면 종료

int docu_update_cnt = 3;
int drama_update_cnt = 3;
int movie_update_cnt = 3;
int balance = 0;
int coupon = 0;
int main()
{

	login();

}


void MainMenu()
{

	int mainMenu_choice;
	printf("\n\n===========NetFlix===========\n\n");
	printf("1. 비디오 목록 보기(List)\n");
	printf("2. 비디오 등록 하기(Update)\n");
	printf("3. 최근에 등록한 비디오 삭제 하기(Delete)\n");
	printf("4. 비디오 구입 하기(Buy)\n");
	printf("5. 마이룸\n");
	printf("6. 나가기\n\n");
	printf("원하는 메뉴의 번호를 입력하세요 >> ");
	scanf("%d", &mainMenu_choice);
	if (mainMenu_choice == 1)
	{
		ShowVideoList();
	}
	else if (mainMenu_choice == 2)
	{
		UpdateVideo();
	}
	else if (mainMenu_choice == 3)
	{
		DeleteVideo();
	}
	else if (mainMenu_choice == 4)
	{
		BuyVideo();
	}
	else if (mainMenu_choice == 5)
	{
		MyRoom();
	}
	else if (mainMenu_choice == 6)
	{
		printf("\n\n프로그램 종료합니다!\n");
		exit(0);
	}
}


void login() //로그인 -> 일치/불일치 판별 후 메인 메뉴로 보내는 함수
{


	char* id_space;
	char id[11];
	char c;
	char password[11];
	printf("\n=====Welcome to NetFlix!!=====\n");
	printf("Please login!\n");
	printf("id (10글자 이내로) > "); // 아이디 입력
	scanf("%s", &id);
	id_space = &id;
	//printf("%s\n", id_space);
	printf("password (10글자 이내로) > "); //비번 입력
	int i = 0;
	while (1)
	{
		c = getch();
		if (c == 13) //enter키 입력할때까지 비번 입력!
		{
			password[i] = '\0';
			break;
		}
		else
		{
			printf("*");
			password[i] = c;
		}
		i++;

	}

	if (strcmp(real_id, id_space) == 0 && strcmp(real_password, password) == 0)// 비번 일치
	{
		int choice;
		printf("\n\n=====어서오세요! Welcome!=====\n");
		printf("메인 메뉴로 가시겠습니까? (1 : Yes, 2: No) > ");
		scanf("%d", &choice);
		if (choice == 1)
		{
			MainMenu();
		}
		else if (choice == 2)
		{
			printf("\n>>>프로그램 종료합니다..\n");
			exit(0);
		}
	}
	else //아이디 혹은 비번 불일치 시
	{
		--login_cnt;
		login_else();
	}

}

void login_else() //아이디 혹은 비번 불일치 시에 실행될 함수
{
	printf("\n\n=======id 또는 pw가 틀립니다.=======\n");
	printf("\n>> 기회는 %d번 남았습니다.\n\n", login_cnt);
	if (login_cnt > 0)
	{
		printf("1. id 찾기\n");
		printf("2. password 찾기\n");
		printf("3. login 창으로 돌아가기\n");
		printf(">> ");
		while (1)
		{
			int choice;
			scanf("%d", &choice);
			if (choice == 1)
			{
				printf("\n>>> id는 %s입니다.\n", real_id);
				login_else();
			}
			else if (choice == 2)
			{
				printf("\n>>> pw는 %s입니다.\n", real_password);
				login_else();
			}
			else if (choice == 3)
			{
				login();
				break;
			}
			else
			{
				printf(">>> 잘못 누르셨습니다\n\n");
				login_else();
			}
		}
	}
	else
	{
		printf("\n\n>> 로그인 가능 횟수를 초과하셨습니다. 프로그램 종료합니다!\n");
		exit(0);
	}
}
void Listinit() //맨처음 리스트 초기화(3개씩)
{
	//일단 다큐멘터리 3개 초기화
	for (int i = 0; i < 3; i++)
	{
		docu[i] = (DocumentVideo*)malloc(sizeof(DocumentVideo));
		memset(docu[i], 0x00, sizeof(DocumentVideo)); //공간 할당한후 초기화
	}

	strcpy(docu[0]->name, "Man vs Wild");
	strcpy(docu[0]->detail, "베어그릴스가 야생에서 살아가는 비디오!");
	docu[0]->price = 100;
	strcpy(docu[1]->name, "지구의 모든 것");
	strcpy(docu[1]->detail, "지구의 모든 것을 담고 있는 비디오!");
	docu[1]->price = 200;
	strcpy(docu[2]->name, "About Bill Gates");
	strcpy(docu[2]->detail, "빌게이츠의 모든 것을 담고 있는 비디오!");
	docu[2]->price = 300;

	//일단 드라마 3개 초기화
	for (int i = 0; i < 3; i++)
	{
		drama[i] = (DramaVideo*)malloc(sizeof(DramaVideo));
		memset(drama[i], 0x00, sizeof(DramaVideo)); //공간 할당한후 초기화
	}

	strcpy(drama[0]->name, "평생 내 사랑");
	strcpy(drama[0]->detail, "눈물 없이 볼수 없는 사랑 드라마!");
	drama[0]->price = 150;
	strcpy(drama[1]->name, "내 딸 서윤이");
	strcpy(drama[1]->detail, "잃어버린 딸을 찾기 위한 감동 실화!");
	drama[1]->price = 250;
	strcpy(drama[2]->name, "마지막 잎새");
	strcpy(drama[2]->detail, "웹툰 '마지막 잎새'가 드라마로 돌아왔다!");
	drama[2]->price = 350;

	//일단 영화 3개 초기화
	for (int i = 0; i < 3; i++)
	{
		movie[i] = (MovieVideo*)malloc(sizeof(MovieVideo));
		memset(movie[i], 0x00, sizeof(MovieVideo)); //공간 할당한후 초기화
	}

	strcpy(movie[0]->name, "좋은 녀석들");
	strcpy(movie[0]->detail, "진정한 친구는 무엇인지 담고 있는 영화!");
	movie[0]->price = 500;
	strcpy(movie[1]->name, "범죄자들");
	strcpy(movie[1]->detail, "범죄자들의 씁쓸한 우정을 담고 있는 영화!");
	movie[1]->price = 600;
	strcpy(movie[2]->name, "2018");
	strcpy(movie[2]->detail, "세계 종말을 다루고 있는 재난 영화");
	movie[2]->price = 700;


}
void ShowVideoList() //비디오 목록 보여주기
{
	Listinit();
	printf("\n\n ========= 다큐 ========= \n\n");
	for (int i = 0; i < docu_update_cnt; i++)
		printf("%d번\n%s\n%s\n%d원\n\n", i + 1, docu[i]->name, docu[i]->detail, docu[i]->price);
	printf("\n\n ========= 드라마 ========= \n\n");
	for (int i = 0; i < drama_update_cnt; i++)
		printf("%d번\n%s\n%s\n%d원\n\n", i + 1, drama[i]->name, drama[i]->detail, drama[i]->price);
	printf("\n\n ========= 영화 ========= \n\n");
	for (int i = 0; i < movie_update_cnt; i++)
		printf("%d번\n%s\n%s\n%d원\n\n", i + 1, movie[i]->name, movie[i]->detail, movie[i]->price);

	printf("엔터 키를 입력하면 메인 메뉴로 돌아갑니다.\n엔터키 이외의 키를 누르면 종료됩니다. >> ");
	int enter;
	enter = getch();
	if (enter == 13)
		MainMenu();
	else {
		printf("\n\n프로그램 종료!!\nBye~!\n\n");
		exit(0);
	}

}

void UpdateVideo() //비디오 등록
{

	printf("\n\n어떤 장르의 비디오를 등록하시겠습니까?\n\n");
	printf("1. 다큐 2. 드라마 3. 영화  >> ");
	int choice_update;

	char name[100];
	char detail[100];
	int price;
	scanf("%d", &choice_update);
	if (choice_update == 1)
	{
		if (docu_update_cnt < 10)
		{
			docu[docu_update_cnt] = (DocumentVideo*)malloc(sizeof(DocumentVideo));
			memset(docu[docu_update_cnt], 0x00, sizeof(DocumentVideo)); //공간 할당한후 초기화

			getchar();
			printf("제목 입력 : ");
			fgets(name, 100, stdin);
			name[strlen(name) - 1] = '\0';
			strcpy(docu[docu_update_cnt]->name, name);//윗줄에서 마지막에 입력한 개행문자는 삭제하기!

			printf("설명 입력 : ");
			fgets(detail, 100, stdin);
			detail[strlen(detail) - 1] = '\0'; //윗줄에서 마지막에 입력한 개행문자는 삭제하기!
			strcpy(docu[docu_update_cnt]->detail, detail);

			printf("가격 입력 : ");
			scanf("%d", &price);
			docu[docu_update_cnt]->price = price;

			docu_update_cnt++;

			printf("\n\n다큐멘터리 등록 완료!!\n\n");
			MainMenu();
		}
		else
		{
			printf("등록할 수 있는 다큐멘터리의 수가 초과되었습니다.");

			MainMenu();
		}
	}
	else if (choice_update == 2)
	{
		if (drama_update_cnt < 10)
		{
			drama[drama_update_cnt] = (DramaVideo*)malloc(sizeof(DramaVideo));
			memset(drama[drama_update_cnt], 0x00, sizeof(DramaVideo)); //공간 할당한후 초기화

			getchar();
			printf("제목 입력 : ");
			fgets(name, 100, stdin);
			name[strlen(name) - 1] = '\0';
			strcpy(drama[drama_update_cnt]->name, name);

			printf("설명 입력 : ");
			fgets(detail, 100, stdin);
			detail[strlen(detail) - 1] = '\0';
			strcpy(drama[drama_update_cnt]->detail, detail);

			printf("가격 입력 : ");
			scanf("%d", &price);
			drama[drama_update_cnt]->price = price;

			drama_update_cnt++;
			printf("\n\n드라마 등록 완료!!\n\n");
			MainMenu();
		}
		else
		{
			printf("등록할 수 있는 드라마의 수가 초과되었습니다.");

			MainMenu();
		}
	}
	else if (choice_update == 3)
	{
		if (movie_update_cnt < 10)
		{
			movie[movie_update_cnt] = (MovieVideo*)malloc(sizeof(MovieVideo));
			memset(movie[movie_update_cnt], 0x00, sizeof(MovieVideo)); //공간 할당한후 초기화

			getchar();
			printf("제목 입력 : ");
			fgets(name, 100, stdin);
			name[strlen(name) - 1] = '\0';
			strcpy(movie[movie_update_cnt]->name, name);

			printf("설명 입력 : ");
			fgets(detail, 100, stdin);
			detail[strlen(detail) - 1] = '\0';
			strcpy(movie[movie_update_cnt]->detail, detail);

			printf("가격 입력 : ");
			scanf("%d", &price);
			movie[movie_update_cnt]->price = price;

			movie_update_cnt++;

			printf("\n\n영화 등록 완료!!\n\n");
			MainMenu();
		}
		else
		{
			printf("등록할 수 있는 영화의 수가 초과되었습니다.");

			MainMenu();
		}
	}
}

void DeleteVideo() //최근 비디오 삭제하기
{
	printf("\n\n어떤 장르의 최근 비디오를 삭제하시겠습니까?\n\n");
	printf("1. 다큐 2. 드라마 3. 영화  >> ");
	int choice_delete;
	scanf("%d", &choice_delete);

	if (choice_delete == 1)
	{
		if (docu_update_cnt > 0)
		{
			docu_update_cnt--;
			printf("다큐멘터리 최근 비디오를 삭제합니다.\n");
			printf("최근 비디오 제목 : %s", docu[docu_update_cnt]->name);
			free(docu[docu_update_cnt]);
		}
		else
		{
			printf("지울 수 있는 비디오가 없습니다.\n\n");
		}


		MainMenu();
	}
	else if (choice_delete == 2)
	{
		if (drama_update_cnt > 0)
		{
			drama_update_cnt--;
			printf("드라마 최근 비디오를 삭제합니다.\n");
			printf("최근 비디오 제목 : %s", drama[drama_update_cnt]->name);
			free(drama[drama_update_cnt]);
		}
		else
		{
			printf("지울 수 있는 비디오가 없습니다.\n\n");
		}


		MainMenu();
	}
	else if (choice_delete == 3)
	{
		if (movie_update_cnt > 0)
		{
			movie_update_cnt--;
			printf("영화 최근 비디오를 삭제합니다.\n");
			printf("최근 비디오 제목 : %s", movie[movie_update_cnt]->name);
			free(movie[movie_update_cnt]);
		}
		else
		{
			printf("지울 수 있는 비디오가 없습니다.\n\n");
		}


		MainMenu();
	}
}
static int buycnt = 0;
char* myList[10];
void BuyVideo()//비디오 구매
{


	//현재까지 비디오 리스트 보여주기
	printf("\n\n ========= 다큐 ========= \n\n");
	for (int i = 0; i < docu_update_cnt; i++)
		printf("%d번\n%s\n%s\n%d원\n\n", i + 1, docu[i]->name, docu[i]->detail, docu[i]->price);
	printf("\n\n ========= 드라마 ========= \n\n");
	for (int i = 0; i < drama_update_cnt; i++)
		printf("%d번\n%s\n%s\n%d원\n\n", i + 1, drama[i]->name, drama[i]->detail, drama[i]->price);
	printf("\n\n ========= 영화 ========= \n\n");
	for (int i = 0; i < movie_update_cnt; i++)
		printf("%d번\n%s\n%s\n%d원\n\n", i + 1, movie[i]->name, movie[i]->detail, movie[i]->price);

	printf("어떤 장르의 비디오를 구매하시겠습니까?\n");
	printf("1. 다큐   2. 드라마   3. 영화  >> ");
	int genre;
	scanf("%d", &genre);
	if (genre == 1) //다큐멘터리 구입
	{
		printf("\n\n ========= 다큐 ========= \n\n");
		for (int i = 0; i < docu_update_cnt; i++)
			printf("%d번\n%s\n%s\n%d원\n\n", i + 1, docu[i]->name, docu[i]->detail, docu[i]->price);

		printf("다큐멘터리 중에 어떤 비디오를 구매하시겠습니까? >> ");
		int buy_docu;
		scanf("%d", &buy_docu);
		if (docu[buy_docu - 1]->price > balance)
		{
			printf("돈이 부족합니다...ㅠㅠ\n마이룸으로 가서 돈을 충전하세요!\n\n");
			MyRoom();
		}
		else //잔액이 충분하다면
		{
			balance -= docu[buy_docu - 1]->price;
			printf("%d번 : %s를 구매하셨습니다.\n", buy_docu, docu[buy_docu - 1]->name);
			printf("\n남은 잔액은 %d원입니다.\n\n", balance);

			//구매했으니 내 리스트에 넣어야겠지??
			mylist[buycnt] = (MyList*)malloc(sizeof(MyList));
			strcpy(mylist[buycnt]->name, docu[buy_docu - 1]->name);
			strcpy(mylist[buycnt]->detail, docu[buy_docu - 1]->detail);
			mylist[buycnt]->price = docu[buy_docu - 1]->price;
			buycnt++; //넣고나서 index 하나 증가!

			printf("또 구매하시려면 1번, 메인 메뉴로 나가시려면 2번을 눌러주세요 : >> ");
			int choi;
			scanf("%d", &choi);
			if (choi == 1)
				BuyVideo();
			else if (choi == 2)
				MainMenu();
			else
			{
				printf("잘못 눌렀습니다. 프로그램 종료합니다! \n");
				exit(0);
			}
		}
	}
	else if (genre == 2)//드라마 구입
	{
		printf("\n\n ========= 드라마 ========= \n\n");
		for (int i = 0; i < drama_update_cnt; i++)
			printf("%d번\n%s\n%s\n%d원\n\n", i + 1, drama[i]->name, drama[i]->detail, drama[i]->price);
		printf("드라마 중에 어떤 비디오를 구매하시겠습니까? >> ");
		int buy_drama;
		scanf("%d", &buy_drama);
		if (drama[buy_drama - 1]->price > balance)
		{
			printf("돈이 부족합니다...ㅠㅠ\n마이룸으로 가서 돈을 충전하세요!\n\n");
			MyRoom();
		}
		else //잔액이 충분하다면
		{
			balance -= drama[buy_drama - 1]->price;
			printf("%d번 : %s를 구매하셨습니다.\n", buy_drama, drama[buy_drama - 1]->name);
			printf("\n남은 잔액은 %d원입니다.\n\n", balance);

			//구매했으니 내 리스트에 넣어야겠지??
			mylist[buycnt] = (MyList*)malloc(sizeof(MyList));
			strcpy(mylist[buycnt]->name, drama[buy_drama - 1]->name);
			strcpy(mylist[buycnt]->detail, drama[buy_drama - 1]->detail);
			mylist[buycnt]->price = drama[buy_drama - 1]->price;
			buycnt++; //넣고나서 index 하나 증가!

			printf("또 구매하시려면 1번, 메인 메뉴로 나가시려면 2번을 눌러주세요 : >> ");
			int choi;
			scanf("%d", &choi);
			if (choi == 1)
				BuyVideo();
			else if (choi == 2)
				MainMenu();
			else
			{
				printf("잘못 눌렀습니다. 프로그램 종료합니다! \n");
				exit(0);
			}
		}
	}
	else if (genre == 3)//영화 구입
	{
		printf("\n\n ========= 영화 ========= \n\n");
		for (int i = 0; i < movie_update_cnt; i++)
			printf("%d번\n%s\n%s\n%d원\n\n", i + 1, movie[i]->name, movie[i]->detail, movie[i]->price);
		printf("영화 중에 어떤 비디오를 구매하시겠습니까? >> ");
		int buy_movie;
		scanf("%d", &buy_movie);
		if (movie[buy_movie - 1]->price > balance)
		{
			printf("돈이 부족합니다...ㅠㅠ\n마이룸으로 가서 돈을 충전하세요!\n\n");
			MyRoom();
		}
		else //잔액이 충분하다면
		{
			balance -= movie[buy_movie - 1]->price;
			printf("%d번 : %s를 구매하셨습니다.\n", buy_movie, movie[buy_movie - 1]->name);
			printf("\n남은 잔액은 %d원입니다.\n\n", balance);

			//구매했으니 내 리스트에 넣어야겠지??
			mylist[buycnt] = (MyList*)malloc(sizeof(MyList));
			strcpy(mylist[buycnt]->name, movie[buy_movie - 1]->name);
			strcpy(mylist[buycnt]->detail, movie[buy_movie - 1]->detail);
			mylist[buycnt]->price = movie[buy_movie - 1]->price;
			buycnt++; //넣고나서 index 하나 증가!

			printf("또 구매하시려면 1번, 메인 메뉴로 나가시려면 2번을 눌러주세요 : >> ");
			int choi;
			scanf("%d", &choi);
			if (choi == 1)
				BuyVideo();
			else if (choi == 2)
				MainMenu();
			else
			{
				printf("잘못 눌렀습니다. 프로그램 종료합니다! \n");
				exit(0);
			}
		}
	}
}
void MyRoom()//마이룸
{
	printf("======마이룸======\n");
	printf("0. 내 계좌 잔액\n");
	printf("1. 내 쿠폰 개수\n");
	printf("2. 돈 충전\n");
	printf("3. 쿠폰 충전\n");
	printf("4. 아이디 변경\n");
	printf("5. 비밀번호 변경\n");
	printf("6. 내가 구입한 비디오 리스트 보기\n");
	printf("7. 메인 메뉴로 나가기\n");
	printf("=================\n");
	printf(">> ");
	int choice_MyRoom;
	scanf("%d", &choice_MyRoom);
	if (choice_MyRoom == 0)
	{
		printf("당신의 계좌의 잔액은 총 %d원입니다.\n\n", balance);
		MyRoom();
	}
	else if (choice_MyRoom == 1)
	{
		printf("당신의 쿠폰은 총 %d개입니다.\n\n", coupon);
		MyRoom();
	}
	else if (choice_MyRoom == 2)
	{
		int money;
		printf("충전할 금액을 적으세요! >> ");
		scanf("%d", &money);
		balance += money;
		printf("%d원이 충전되었습니다. 이제 총 잔액은 %d원입니다.\n\n", money, balance);
		MyRoom();
	}
	else if (choice_MyRoom == 3)
	{
		int addCoupon;
		printf("충전할 쿠폰 갯수를 적으세요! >> ");
		scanf("%d", &addCoupon);
		coupon += addCoupon;
		printf("쿠폰 %d개가 충전되었습니다. 이제 총 쿠폰은 %d개입니다.\n\n", addCoupon, coupon);
		MyRoom();
	}
	else if (choice_MyRoom == 4)
	{
		char change_id[20];
		printf("변경할 아이디를 입력하세요: >> ");
		scanf("%s", change_id);
		real_id = &change_id;
		printf("아이디 변경되었습니다! 바뀐 아이디는 %s 입니다.\n\n", real_id);
		MyRoom();
	}
	else if (choice_MyRoom == 5)
	{
		char change_pw[20];
		printf("변경할 비밀번호를 입력하세요: >> ");
		scanf("%s", change_pw);
		real_password = &change_pw;
		printf("아이디 변경되었습니다! 바뀐 아이디는 %s 입니다.\n\n", real_password);
		MyRoom();
	}
	else if (choice_MyRoom == 6)
	{
		printf("====내가 구입한 비디오 목록====\n\n");
		for (int i = 0; i < buycnt; i++)
		{
			printf("%d번 : %s, %s\n", i + 1, mylist[i]->name, mylist[i]->detail);
			printf("가격 : %d원\n\n", mylist[i]->price);
		}
		printf("메인메뉴로 가시려면 1번을 누르세요 >> ");
		int n;
		scanf("%d", &n);
		if (n == 1)
			MainMenu();
	}
	else if (choice_MyRoom == 7)
	{
		MainMenu();
	}
}

 

'Toy Project' 카테고리의 다른 글

[내가 만든 프로젝트] 전화번호부 관리 프로그램  (4) 2020.03.04