안형준

터지는 내용을 알기위해 임시 커밋

...@@ -126,13 +126,13 @@ int Application::AddMusic() ...@@ -126,13 +126,13 @@ int Application::AddMusic()
126 { 126 {
127 if (Miter.GetCurrentNode().data == item) 127 if (Miter.GetCurrentNode().data == item)
128 { 128 {
129 - mgitem.setIndex(Miter.GetCurrentNode().data.GetNum()); 129 + MusicType* tempmptr = Miter.GetCurrentPtr();
130 + mgitem.setPtr(tempmptr);
130 } 131 }
131 Miter.Next(); 132 Miter.Next();
132 } 133 }
133 - mgitem.setName(item.GetName()); 134 +
134 - mgitem.setPkey(item.GetPkey()); 135 +
135 - mgitem.setArtist(item.GetSinger());
136 mg_List.Add(mgitem); 136 mg_List.Add(mgitem);
137 137
138 //최근 추가목록에 추가하기 138 //최근 추가목록에 추가하기
...@@ -182,11 +182,29 @@ void Application::Delete() ...@@ -182,11 +182,29 @@ void Application::Delete()
182 MusicType data; //Delete함수는 MusicType을 파라미터로 갖기 때문에 임의로 만들어준다. 182 MusicType data; //Delete함수는 MusicType을 파라미터로 갖기 때문에 임의로 만들어준다.
183 data.SetNumFromKB(); //사용자에게서 곡 번호를 입력받는다. 183 data.SetNumFromKB(); //사용자에게서 곡 번호를 입력받는다.
184 SearchByIndex(data); 184 SearchByIndex(data);
185 - 185 + /*DoublyIter<MusicType> Miter(m_List);
186 - if (m_List.Delete(data)) //Delete함수에 data를 넘겨준다. 186 + if (data.GetNum() < 1 || data.GetNum() > m_List.GetLength())
187 + return;
188 + for (int i = 1; i < data.GetNum(); i++) {
189 + Miter.Next();
190 +
191 + }*/
192 + //data = Miter.GetCurrentNode().data;
193 + if (m_List.Delete(data))
187 { 194 {
188 cout << "\t삭제를 완료했습니다." << endl; //삭제에 성공했으면 메시지를 출력한다. 195 cout << "\t삭제를 완료했습니다." << endl; //삭제에 성공했으면 메시지를 출력한다.
189 RemakeSubList(); //MusicList에 변화가 생겼으므로 하위 리스트들을 다시 만들어줘야 한다. 196 RemakeSubList(); //MusicList에 변화가 생겼으므로 하위 리스트들을 다시 만들어줘야 한다.
197 +
198 + DoublyIter2<ManageType> Mgiter(mg_List);
199 + while (Mgiter.NotNull())
200 + {
201 + if (Mgiter.GetCurrentNode().data.getIndex() == data.GetNum())
202 + {
203 + ManageType* mgptr = Mgiter.GetCurrentPtr();
204 + mgptr->Deleted();
205 + }
206 + Mgiter.Next();
207 + }
190 if (m_List.GetLength() != 0) //길이가 0이면 인덱스를 부여할수 없다. 208 if (m_List.GetLength() != 0) //길이가 0이면 인덱스를 부여할수 없다.
191 { 209 {
192 SetMusicIndex();//MusicList에 변화가 생겼으므로 Index를 다시 부여한다. 210 SetMusicIndex();//MusicList에 변화가 생겼으므로 Index를 다시 부여한다.
...@@ -213,13 +231,14 @@ void Application::Update() ...@@ -213,13 +231,14 @@ void Application::Update()
213 } 231 }
214 else //찾을 수 있을때 232 else //찾을 수 있을때
215 { 233 {
216 - data.SetNameFromKB(); //사용자에게서 곡명을 입력받는다. 234 +
217 - data.SetSingerFromKB(); //사용자에게서 가수를 입력받는다.
218 - data.SetAlbumFromKB(); //사용자에게서 앨범을 입력받는다.
219 - data.SetGenreFromKB(); //사용자에게서 장르를 입력받는다.
220 - data.SetLyricsFromKB(); // 사용자에게서 가사를 입력받는다.
221 if (m_List.Delete(data))//기존 항목을 삭제하고 235 if (m_List.Delete(data))//기존 항목을 삭제하고
222 { 236 {
237 + data.SetNameFromKB(); //사용자에게서 곡명을 입력받는다.
238 + data.SetSingerFromKB(); //사용자에게서 가수를 입력받는다.
239 + data.SetAlbumFromKB(); //사용자에게서 앨범을 입력받는다.
240 + data.SetGenreFromKB(); //사용자에게서 장르를 입력받는다.
241 + data.SetLyricsFromKB(); // 사용자에게서 가사를 입력받는다.
223 data.SetPkey(); //데이터를 변경했으므로 Pkey를 다시 지정해준다. 242 data.SetPkey(); //데이터를 변경했으므로 Pkey를 다시 지정해준다.
224 m_List.Add(data); 243 m_List.Add(data);
225 cout << "\t수정을 완료했습니다." << endl; //수정을 성공했을 때 메시지를 출력한다. 244 cout << "\t수정을 완료했습니다." << endl; //수정을 성공했을 때 메시지를 출력한다.
...@@ -694,7 +713,10 @@ void Application::SearchByIndex(MusicType &indata) ...@@ -694,7 +713,10 @@ void Application::SearchByIndex(MusicType &indata)
694 while (Miter.NotNull()) 713 while (Miter.NotNull())
695 { 714 {
696 if (Index == Miter.GetCurrentNode().data.GetNum()) 715 if (Index == Miter.GetCurrentNode().data.GetNum())
697 - Miter.GetCurrentNode().data.DisplayRecordOnScreen(); 716 + {
717 + indata = Miter.GetCurrentNode().data;
718 + //Miter.GetCurrentNode().data.DisplayRecordOnScreen();
719 + }
698 Miter.Next(); 720 Miter.Next();
699 } 721 }
700 722
......
...@@ -4,69 +4,44 @@ ...@@ -4,69 +4,44 @@
4 4
5 class ManageType { 5 class ManageType {
6 private: 6 private:
7 - string Pkey; 7 + MusicType* mptr;
8 - int played; 8 + bool Isdeleted;
9 - int Index;
10 - string name;
11 - string artist;
12 public: 9 public:
13 ManageType() { 10 ManageType() {
14 - Pkey = ""; 11 + bool Isdeleted = false;
15 - played = 0; 12 + mptr = NULL;
16 - Index = 0;
17 }; 13 };
18 ~ManageType() {}; 14 ~ManageType() {};
19 - void setPkey(string key) 15 + void setPtr(MusicType* P)
20 { 16 {
21 - Pkey = key; 17 + mptr = P;
22 } 18 }
23 - void setIndex(int I) 19 + MusicType* getPtr()
24 { 20 {
25 - Index = I; 21 + return mptr;
26 } 22 }
27 - void IncreasePlayed() 23 + void Deleted()
28 { 24 {
29 - played++; 25 + Isdeleted = true;
30 - } 26 + mptr = NULL;
31 - void setName(string N)
32 - {
33 - name = N;
34 - }
35 - void setArtist(string A)
36 - {
37 - artist = A;
38 - }
39 - string getArtist()
40 - {
41 - return artist;
42 - }
43 - string getPkey()
44 - {
45 - return Pkey;
46 - }
47 - int getPlayed()
48 - {
49 - return played;
50 } 27 }
51 int getIndex() 28 int getIndex()
52 { 29 {
53 - return Index; 30 + if (Isdeleted == false)
31 + {
32 + return (mptr->GetNum());
33 + }
54 } 34 }
55 string getName() 35 string getName()
56 - { 36 + { if(Isdeleted == false)
57 - return name; 37 + return mptr->GetName();
58 } 38 }
59 - 39 + string getPkey()
60 - void PrintNameNArtist() 40 + { if(Isdeleted == false)
61 - { 41 + return mptr->GetPkey();
62 - cout << "\t°î¸í : " << name << endl;
63 - cout << "\t¾ÆƼ½ºÆ® : " << artist << endl << endl;
64 - }
65 - void PrintNameNIndex()
66 - {
67 - cout << "\t°î¸í : " << name << endl;
68 - cout << "\tIndex : " << Index << endl << endl;
69 } 42 }
43 + void PrintNameNIndex();
44 +
70 45
71 }; 46 };
72 47
......
...@@ -230,6 +230,7 @@ int SortedLinkedList<T>::Add(T &data) ...@@ -230,6 +230,7 @@ int SortedLinkedList<T>::Add(T &data)
230 template<typename T> 230 template<typename T>
231 int SortedLinkedList<T>::Delete(T& data) 231 int SortedLinkedList<T>::Delete(T& data)
232 { 232 {
233 + /*
233 bool MoreToSearch, found; 234 bool MoreToSearch, found;
234 NodeType<T> *Pre = NULL; 235 NodeType<T> *Pre = NULL;
235 DoublyIter<T> iter(*this); 236 DoublyIter<T> iter(*this);
...@@ -242,11 +243,12 @@ int SortedLinkedList<T>::Delete(T& data) ...@@ -242,11 +243,12 @@ int SortedLinkedList<T>::Delete(T& data)
242 if (data == iter.CurPointer->data) //현재 가리키는 원소가 패러미터로 넣은 값과 같은가? 243 if (data == iter.CurPointer->data) //현재 가리키는 원소가 패러미터로 넣은 값과 같은가?
243 { 244 {
244 found = true; //찾았으므로 found = true 245 found = true; //찾았으므로 found = true
245 - if (Pre == NULL) //찾은 항목이 첫번째 원소일경우 246 + if (iter.CurPointer->pre == NULL) //찾은 항목이 첫번째 원소일경우
246 { 247 {
247 - NodeType<T>* temp = iter.CurPointer; //첫번째 원소의 다음원소를 저장할 임시 포인터선언 248 + NodeType<T>* temp = iter.CurPointer->next; //첫번째 원소의 다음원소를 저장할 임시 포인터선언
248 delete m_pList; //첫원소를 삭제한다. 249 delete m_pList; //첫원소를 삭제한다.
249 temp->pre = NULL; 250 temp->pre = NULL;
251 + temp->next = iter.CurPointer->next->next;
250 m_pList = temp; //찾은 항목이 첫 항목일경우 다음 원소를 첫번째 원소로 한다. 252 m_pList = temp; //찾은 항목이 첫 항목일경우 다음 원소를 첫번째 원소로 한다.
251 253
252 } 254 }
...@@ -256,6 +258,7 @@ int SortedLinkedList<T>::Delete(T& data) ...@@ -256,6 +258,7 @@ int SortedLinkedList<T>::Delete(T& data)
256 Pre->next = iter.CurPointer->next; 258 Pre->next = iter.CurPointer->next;
257 iter.CurPointer->next->pre = Pre; 259 iter.CurPointer->next->pre = Pre;
258 delete iter.CurPointer; 260 delete iter.CurPointer;
261 +
259 } 262 }
260 263
261 264
...@@ -279,7 +282,31 @@ int SortedLinkedList<T>::Delete(T& data) ...@@ -279,7 +282,31 @@ int SortedLinkedList<T>::Delete(T& data)
279 else //못 찾으면 282 else //못 찾으면
280 return 0; 283 return 0;
281 284
285 + */
286 +
287 + NodeType<T>* pNode = m_pList;
288 + int positionIndex = Get(data);
289 + if (positionIndex)
290 + {
291 + for (int i = 1; i < positionIndex; i++)
292 + pNode = pNode->next;
293 +
294 + if (pNode->next != NULL)
295 + pNode->next->pre = pNode->pre;
296 + else
297 + m_pLast = pNode->pre;
298 +
299 + if (pNode->pre != NULL)
300 + pNode->pre->next = pNode->next;
301 + else
302 + m_pList = pNode->next;
282 303
304 + delete pNode;
305 + m_nLength--;
306 + return 1;
307 + }
308 + else
309 + return 0;
283 310
284 } 311 }
285 312
......