드래그 앤 드롭으로 즐겨찾기 아이콘 위치 수정이 가능합니다.
게시물ID : science_3447 짧은주소 복사하기
작성자 : 악성코드
추천 : 0
조회수 : 905회
댓글수 : 4개
등록시간 : 2010/12/04 18:58:37
얼마전에 여기 질문올렸던 사람입니다. 코딩도중 뭐가 잘 돌아가는것 같지 않아 질문 드립니다. (아직 프로그램은 미완성) 아래는 코드 전문입니다. 좀 길어요;; 일단 컴파일에러는 없지만, 동작이 영 문제가 있네요. 뭐때문인지 좀 알려주시면 감사하겠습니다. 1번에서 학생등록을 한 뒤에 2번에서 삭제 하려고하면 삭제가 안되네요. #include <iostream> #include <string> #include <fstream> using namespace std; class Student //클래스 선언. { private: string name; string major; string number; double mscore, lscore, average; public: Student *node; string cpynum; Student(string a, string b, string c) { name = a; major = b; number = c; cpynum = c; node = NULL; } void setscore(int x, int y) { mscore = x; lscore = y; } }; Student *head = NULL; Student *p = NULL; Student *temp = NULL; Student *next = NULL; string a, b, c; double x, y; void enroll(); //학생 등록함수 void delstudent(); //학생 삭제함수 int main() { int sel; while(1) //무엇을 할 것인지 선택하는 화면. { cout << "메뉴" << endl; cout << "1. 새로운 학생 등록" << endl; cout << "2. 학생 삭제" << endl; cout << "3. 중간 고사 점수 등록" << endl; cout << "4. 기말 고사 점수 등록" << endl; cout << "5. 성적 보기" << endl; cout << "6. 전체 성적 보기" << endl; cout << "입력 : "; cin >> sel; if(sel == 1) enroll(); else if(sel == 2) delstudent(); } return 0; } void enroll() { while(1) { cout << "학번에 0을 입력하시면 입력 종료가 됩니다." << endl; cout << "학생 이니셜을 띄어쓰기 없이 입력해 주세요. : "; cin >> a; cout << "학생의 전공을 띄어쓰기 없이 입력해 주세요. : "; cin >> b; cout << "학생의 학번을 띄어쓰기 없이 입력해 주세요. : "; cin >> c; p = new Student(a, b, c); if(c == "0") { delete p; break; } if(head == 0) //head가 NULL일 때에. head = p; else //head가 NULL이 아닐 경우. { temp = head; //검색을 위한 초기화. while(temp == NULL) { if(temp->cpynum < p->cpynum && next->cpynum > p->cpynum) { if(temp->node == NULL) { temp->node = p; break; } next = temp->node; temp->node = p; p->node = next; break; } else if(temp->cpynum == p->cpynum) { cout << "같은 학번이 이미 등록되어 있습니다! 다시 입력해 주세요!" << endl; delete p; break; } temp = temp->node; } temp->node = p; } } } void delstudent() { string delnum; int success; //데이터 삭제의 성공 여부를 판단하는 변수. Student *prev; while(1) { success = 0; cout << "학번에 0을 입력하면 삭제가 종료 됩니다." << endl; cout << "삭제할 학생의 학번을 입력해 주세요 : "; cin >> delnum; if(delnum == "0") break; p = head; //검색을 위한 초기화. prev = head; //삭제하는 노드의 전 노드. next = p->node; //삭제하는 노드의 다음 노드. while(p->node == NULL) { if(p->cpynum == delnum) { prev->node = next; delete p; if(prev == head) //삭제한 항목이 가장 첫 항목이었을 때. head = next; cout << "해당 학생의 성적 삭제가 완료 되었습니다." << endl; success++; //데이터 삭제에 성공 했으므로 성공의 표시를 한다. break; } prev = p; p = p->node; next = next->node; } if(success == 0) //해당 학번이 존재하지 않아 성적 삭제에 실패했을 때. cout << "성적부에서 삭제하고자 하는 학번이 존재하지 않습니다!" << endl; } }
댓글 분란 또는 분쟁 때문에 전체 댓글이 블라인드 처리되었습니다.
새로운 댓글이 없습니다.