2019-02-11
HW15
#include <iostream>
#include <cstring>
#pragma warning (disable : 4996)
using namespace std;
// Fitness.h
class Fitness {
private:
int num;
char *name;
double weight;
double height;
public:
// 생성자
Fitness();
Fitness(int num, const char *name, double weight, double height);
Fitness(Fitness &r);
~Fitness();
// 연산자
Fitness &operator=(Fitness &r);
bool operator==(Fitness &r);
// setter, getter
void setNum(int num);
int getNum();
void setName(const char *name);
char *getName();
void setWeight(double weight);
double getWeight();
void setHeight(double height);
double getHeight();
// 기타멤버함수
double bmi();
};
// Fitness.cpp
Fitness::Fitness() {
this->num = 0;
this->name = new char[1];
strcpy(this->name, "");
this->weight = 0;
this->height = 0;
}
Fitness::Fitness(int num, const char *name, double weight, double height) {
if (this->name != NULL) {
if (name != NULL) {
this->name = new char[strlen(name) + 1];
strcpy(this->name, name);
}
}
else return;
this->num = num;
this->weight = weight;
this->height = height;
}
Fitness::Fitness(Fitness &r) {
if (name != NULL) {
this->name = new char[strlen(r.name) + 1];
strcpy(this->name, r.name);
}
else return;
this->num = r.num;
this->weight = r.weight;
this->height = r.height;
}
Fitness::~Fitness() {
if (name != NULL) {
strcpy(this->name, "");
delete[] this->name;
}
else return;
this->num = 0;
this->weight = 0;
this->height = 0;
//cout << "소멸 성공" << endl;
}
Fitness &Fitness::operator=(Fitness &r) {
if (*this == r) return *this;
strcpy(this->name, "");
delete[] this->name;
this->name = new char[strlen(r.name) + 1];
strcpy(this->name, r.name);
this->num = r.num;
this->weight = r.weight;
this->height = r.height;
return *this;
}
bool Fitness::operator==(Fitness &r) {
if (this->num == r.num) {
return 1;
}
if (r.name != NULL) {
if (strcmp(this->name, r.name) == 0) {
return 1;
}
}
return 0;
}
void Fitness::setNum(int num) {
this->num = num;
}
int Fitness::getNum() {
return this->num;
}
void Fitness::setName(const char *name) {
if (this->name != NULL) {
if (name != NULL) {
strcpy(this->name, "");
delete[] this->name;
this->name = new char[strlen(name) + 1];
strcpy(this->name, name);
}
}
}
char *Fitness::getName() {
return this->name;
}
void Fitness::setWeight(double weight) {
this->weight = weight;
}
double Fitness::getWeight() {
return this->weight;
}
void Fitness::setHeight(double height) {
this->height = height;
}
double Fitness::getHeight() {
return this->height;
}
double Fitness::bmi() {
return this->weight / (this->height * this->height) * 10000;
}
// main.cpp
int menu(const char **menuList, int menuCnt);
void memInput(Fitness **br, int &memNum, int &memCnt, int &dataCnt);
void memPrint(Fitness **br, int memCnt);
void memFind(Fitness **br, int memCnt);
void memDelete(Fitness **br, int &memNum, int &memCnt, int &dataCnt);
void memBmi(Fitness **br, int &memCnt);
void myflush();
int main() {
const char *menuList[] = { "회원등록", "회원전체보기", "회원정보검색", "회원탈퇴" , "특별관리회원","종료" };
int menuCnt, menuNum, memNum = 1, memCnt = 0, dataCnt = 0;
Fitness *fary[100] = { 0, };
menuCnt = sizeof(menuList) / sizeof(menuList[0]);
while(1)
{
menuNum = menu(menuList, menuCnt);
if (menuNum == menuCnt)
{
break;
}
switch (menuNum)
{
case 1: memInput(fary, memNum, memCnt, dataCnt); cout << endl; break;
case 2: memPrint(fary, memCnt); cout << endl; break;
case 3: memFind(fary, memCnt); cout << endl; break;
case 4: memDelete(fary, memNum, memCnt, dataCnt); cout << endl; break;
case 5: memBmi(fary, memCnt); cout << endl; break;
}
}
for (int i = 0;i < dataCnt;i++) {
delete[] fary[i];
}
return 0;
}
int menu(const char **menuList, int menuCnt)
{
int menuNum = 0;
for (int i = 0; i < menuCnt; i++)
{
cout << i + 1 << "." << menuList[i] << " / ";
}
cout << "\b\b \n";
while (menuNum<1 || menuNum>menuCnt)
{
cout << "# 메뉴번호를 입력하세요 : ";
cin >> menuNum;
while (cin.fail()) {
cin.clear();
myflush();
cout << "* 잘못된 메뉴번호 입니다." << endl << "# 메뉴번호를 입력하세요 : ";
cin >> menuNum;
}
myflush();
}
return menuNum;
}
void memInput(Fitness **br, int &memNum, int &memCnt, int &dataCnt) {
double weight, height;
char temp[30];
cout << "\n* 회원 입력 메뉴" << endl;
while (1) {
cout << "\n회원 성명(종료) : ";
cin.getline(temp, sizeof(temp));
if (strcmp(temp, "종료") == 0) break;
if (br[memCnt] == NULL) {
br[memCnt] = new Fitness[1];
br[memCnt]->setNum(memNum);
dataCnt++;
}
cout << "회원 번호 : " << br[memCnt]->getNum() << "번" << endl;
br[memCnt]->setName(temp);
cout << "회원 몸무게(kg) : ";
cin >> weight;
cout << "회원 키(cm) : ";
cin >> height;
myflush();
br[memCnt]->setWeight(weight);
br[memCnt]->setHeight(height);
memCnt++;
memNum = memCnt + 1;
}
}
void memPrint(Fitness **br, int memCnt) {
cout << "\n* 회원 전체 보기" << endl << endl;
for (int i = 0;i < memCnt;i++) {
cout << br[i]->getNum() << "번 - " << br[i]->getName() << "님, 키(cm) : " << br[i]->getHeight() << ", 몸무게(kg) : " << br[i]->getWeight() << endl;
}
}
void memFind(Fitness **br, int memCnt) {
int num = 0;
char temp[30];
cout << "\n* 회원 정보 검색 메뉴" << endl << "\n회원 성명 : ";
cin >> temp;
for (int i = 0;i < memCnt;i++) {
if (strcmp(br[i]->getName(), temp) == 0) {
cout << br[i]->getNum() << "번 - " << br[i]->getName() << "님, 키(cm) : " << br[i]->getHeight() << ", 몸무게(kg) : " << br[i]->getWeight() << endl;
num++;
}
}
if (num == 0) cout << "* 등록되지 않은 회원입니다." << endl;
}
void memDelete(Fitness **br, int &memNum, int &memCnt, int &dataCnt) {
int num;
char temp[10];
cout << "\n* 회원 탈퇴 메뉴" << endl;
while (1) {
cout << "\n회원 번호(종료) : ";
cin >> num;
while (cin.fail()) {
cin.clear();
cin.getline(temp, sizeof(temp));
if (strcmp(temp, "종료") == 0) return;
else {
cout << "* 잘못된 회원번호 입니다." << endl << endl << "회원 번호 : ";
cin >> num;
}
}
myflush();
if (num <= dataCnt) {
int cnt = 0;
for (int i = 0;i < memCnt;i++) {
if (br[i]->getNum() == num) {
cnt++;
cout << br[i]->getNum() << "번 - " << br[i]->getName() << "님, 키(cm) : " << br[i]->getHeight() << ", 몸무게(kg) : " << br[i]->getWeight() << endl;
cout << "* 삭제하시겠습니까?(네/아니오) : ";
cin.getline(temp, sizeof(temp));
if (strcmp(temp, "네") == 0) {
int num = br[i]->getNum();
cout << "삭제가 완료되었습니다." << endl;
*br[i] = *br[memCnt - 1];
br[memCnt - 1]->setNum(num);
//delete[] br[memCnt - 1];
memCnt--;
}
else {
cout << "삭제가 취소되었습니다." << endl;
break;
}
}
}
if (cnt == 0)cout << "* 잘못된 회원번호 입니다." << endl;;
}
else {
cout << "* 잘못된 회원번호 입니다." << endl;
}
}
}
void memBmi(Fitness **br, int &memCnt) {
cout << "\n* 특별 관리 회원 명단\n";
for (int i = 0;i < memCnt;i++) {
int bmi = int(br[i]->bmi());
if (bmi >= 25) {
if (bmi < 30) { cout << br[i]->getNum() << "번 - " << br[i]->getName() << "님의 BMI : " << bmi << " (과체중)" << endl; }
else if (bmi < 40) { cout << br[i]->getNum() << "번 - " << br[i]->getName() << "님의 BMI : " << bmi << " (비만)" << endl; }
else { cout << br[i]->getNum() << "번 - " << br[i]->getName() << "님의 BMI : " << bmi << " (과도비만)" << endl; }
}
}
}
void myflush() {
while (cin.get() != '\n');
}
Author And Source
이 문제에 관하여(2019-02-11), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://velog.io/@hyeonu_chun/2019-02-11
저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
#include <iostream>
#include <cstring>
#pragma warning (disable : 4996)
using namespace std;
// Fitness.h
class Fitness {
private:
int num;
char *name;
double weight;
double height;
public:
// 생성자
Fitness();
Fitness(int num, const char *name, double weight, double height);
Fitness(Fitness &r);
~Fitness();
// 연산자
Fitness &operator=(Fitness &r);
bool operator==(Fitness &r);
// setter, getter
void setNum(int num);
int getNum();
void setName(const char *name);
char *getName();
void setWeight(double weight);
double getWeight();
void setHeight(double height);
double getHeight();
// 기타멤버함수
double bmi();
};
// Fitness.cpp
Fitness::Fitness() {
this->num = 0;
this->name = new char[1];
strcpy(this->name, "");
this->weight = 0;
this->height = 0;
}
Fitness::Fitness(int num, const char *name, double weight, double height) {
if (this->name != NULL) {
if (name != NULL) {
this->name = new char[strlen(name) + 1];
strcpy(this->name, name);
}
}
else return;
this->num = num;
this->weight = weight;
this->height = height;
}
Fitness::Fitness(Fitness &r) {
if (name != NULL) {
this->name = new char[strlen(r.name) + 1];
strcpy(this->name, r.name);
}
else return;
this->num = r.num;
this->weight = r.weight;
this->height = r.height;
}
Fitness::~Fitness() {
if (name != NULL) {
strcpy(this->name, "");
delete[] this->name;
}
else return;
this->num = 0;
this->weight = 0;
this->height = 0;
//cout << "소멸 성공" << endl;
}
Fitness &Fitness::operator=(Fitness &r) {
if (*this == r) return *this;
strcpy(this->name, "");
delete[] this->name;
this->name = new char[strlen(r.name) + 1];
strcpy(this->name, r.name);
this->num = r.num;
this->weight = r.weight;
this->height = r.height;
return *this;
}
bool Fitness::operator==(Fitness &r) {
if (this->num == r.num) {
return 1;
}
if (r.name != NULL) {
if (strcmp(this->name, r.name) == 0) {
return 1;
}
}
return 0;
}
void Fitness::setNum(int num) {
this->num = num;
}
int Fitness::getNum() {
return this->num;
}
void Fitness::setName(const char *name) {
if (this->name != NULL) {
if (name != NULL) {
strcpy(this->name, "");
delete[] this->name;
this->name = new char[strlen(name) + 1];
strcpy(this->name, name);
}
}
}
char *Fitness::getName() {
return this->name;
}
void Fitness::setWeight(double weight) {
this->weight = weight;
}
double Fitness::getWeight() {
return this->weight;
}
void Fitness::setHeight(double height) {
this->height = height;
}
double Fitness::getHeight() {
return this->height;
}
double Fitness::bmi() {
return this->weight / (this->height * this->height) * 10000;
}
// main.cpp
int menu(const char **menuList, int menuCnt);
void memInput(Fitness **br, int &memNum, int &memCnt, int &dataCnt);
void memPrint(Fitness **br, int memCnt);
void memFind(Fitness **br, int memCnt);
void memDelete(Fitness **br, int &memNum, int &memCnt, int &dataCnt);
void memBmi(Fitness **br, int &memCnt);
void myflush();
int main() {
const char *menuList[] = { "회원등록", "회원전체보기", "회원정보검색", "회원탈퇴" , "특별관리회원","종료" };
int menuCnt, menuNum, memNum = 1, memCnt = 0, dataCnt = 0;
Fitness *fary[100] = { 0, };
menuCnt = sizeof(menuList) / sizeof(menuList[0]);
while(1)
{
menuNum = menu(menuList, menuCnt);
if (menuNum == menuCnt)
{
break;
}
switch (menuNum)
{
case 1: memInput(fary, memNum, memCnt, dataCnt); cout << endl; break;
case 2: memPrint(fary, memCnt); cout << endl; break;
case 3: memFind(fary, memCnt); cout << endl; break;
case 4: memDelete(fary, memNum, memCnt, dataCnt); cout << endl; break;
case 5: memBmi(fary, memCnt); cout << endl; break;
}
}
for (int i = 0;i < dataCnt;i++) {
delete[] fary[i];
}
return 0;
}
int menu(const char **menuList, int menuCnt)
{
int menuNum = 0;
for (int i = 0; i < menuCnt; i++)
{
cout << i + 1 << "." << menuList[i] << " / ";
}
cout << "\b\b \n";
while (menuNum<1 || menuNum>menuCnt)
{
cout << "# 메뉴번호를 입력하세요 : ";
cin >> menuNum;
while (cin.fail()) {
cin.clear();
myflush();
cout << "* 잘못된 메뉴번호 입니다." << endl << "# 메뉴번호를 입력하세요 : ";
cin >> menuNum;
}
myflush();
}
return menuNum;
}
void memInput(Fitness **br, int &memNum, int &memCnt, int &dataCnt) {
double weight, height;
char temp[30];
cout << "\n* 회원 입력 메뉴" << endl;
while (1) {
cout << "\n회원 성명(종료) : ";
cin.getline(temp, sizeof(temp));
if (strcmp(temp, "종료") == 0) break;
if (br[memCnt] == NULL) {
br[memCnt] = new Fitness[1];
br[memCnt]->setNum(memNum);
dataCnt++;
}
cout << "회원 번호 : " << br[memCnt]->getNum() << "번" << endl;
br[memCnt]->setName(temp);
cout << "회원 몸무게(kg) : ";
cin >> weight;
cout << "회원 키(cm) : ";
cin >> height;
myflush();
br[memCnt]->setWeight(weight);
br[memCnt]->setHeight(height);
memCnt++;
memNum = memCnt + 1;
}
}
void memPrint(Fitness **br, int memCnt) {
cout << "\n* 회원 전체 보기" << endl << endl;
for (int i = 0;i < memCnt;i++) {
cout << br[i]->getNum() << "번 - " << br[i]->getName() << "님, 키(cm) : " << br[i]->getHeight() << ", 몸무게(kg) : " << br[i]->getWeight() << endl;
}
}
void memFind(Fitness **br, int memCnt) {
int num = 0;
char temp[30];
cout << "\n* 회원 정보 검색 메뉴" << endl << "\n회원 성명 : ";
cin >> temp;
for (int i = 0;i < memCnt;i++) {
if (strcmp(br[i]->getName(), temp) == 0) {
cout << br[i]->getNum() << "번 - " << br[i]->getName() << "님, 키(cm) : " << br[i]->getHeight() << ", 몸무게(kg) : " << br[i]->getWeight() << endl;
num++;
}
}
if (num == 0) cout << "* 등록되지 않은 회원입니다." << endl;
}
void memDelete(Fitness **br, int &memNum, int &memCnt, int &dataCnt) {
int num;
char temp[10];
cout << "\n* 회원 탈퇴 메뉴" << endl;
while (1) {
cout << "\n회원 번호(종료) : ";
cin >> num;
while (cin.fail()) {
cin.clear();
cin.getline(temp, sizeof(temp));
if (strcmp(temp, "종료") == 0) return;
else {
cout << "* 잘못된 회원번호 입니다." << endl << endl << "회원 번호 : ";
cin >> num;
}
}
myflush();
if (num <= dataCnt) {
int cnt = 0;
for (int i = 0;i < memCnt;i++) {
if (br[i]->getNum() == num) {
cnt++;
cout << br[i]->getNum() << "번 - " << br[i]->getName() << "님, 키(cm) : " << br[i]->getHeight() << ", 몸무게(kg) : " << br[i]->getWeight() << endl;
cout << "* 삭제하시겠습니까?(네/아니오) : ";
cin.getline(temp, sizeof(temp));
if (strcmp(temp, "네") == 0) {
int num = br[i]->getNum();
cout << "삭제가 완료되었습니다." << endl;
*br[i] = *br[memCnt - 1];
br[memCnt - 1]->setNum(num);
//delete[] br[memCnt - 1];
memCnt--;
}
else {
cout << "삭제가 취소되었습니다." << endl;
break;
}
}
}
if (cnt == 0)cout << "* 잘못된 회원번호 입니다." << endl;;
}
else {
cout << "* 잘못된 회원번호 입니다." << endl;
}
}
}
void memBmi(Fitness **br, int &memCnt) {
cout << "\n* 특별 관리 회원 명단\n";
for (int i = 0;i < memCnt;i++) {
int bmi = int(br[i]->bmi());
if (bmi >= 25) {
if (bmi < 30) { cout << br[i]->getNum() << "번 - " << br[i]->getName() << "님의 BMI : " << bmi << " (과체중)" << endl; }
else if (bmi < 40) { cout << br[i]->getNum() << "번 - " << br[i]->getName() << "님의 BMI : " << bmi << " (비만)" << endl; }
else { cout << br[i]->getNum() << "번 - " << br[i]->getName() << "님의 BMI : " << bmi << " (과도비만)" << endl; }
}
}
}
void myflush() {
while (cin.get() != '\n');
}
Author And Source
이 문제에 관하여(2019-02-11), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@hyeonu_chun/2019-02-11저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)