Showing
3 changed files
with
80 additions
and
56 deletions
... | @@ -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 | + /*DoublyIter<MusicType> Miter(m_List); | ||
186 | + if (data.GetNum() < 1 || data.GetNum() > m_List.GetLength()) | ||
187 | + return; | ||
188 | + for (int i = 1; i < data.GetNum(); i++) { | ||
189 | + Miter.Next(); | ||
185 | 190 | ||
186 | - if (m_List.Delete(data)) //Delete함수에 data를 넘겨준다. | 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 | { |
234 | + | ||
235 | + if (m_List.Delete(data))//기존 항목을 삭제하고 | ||
236 | + { | ||
216 | data.SetNameFromKB(); //사용자에게서 곡명을 입력받는다. | 237 | data.SetNameFromKB(); //사용자에게서 곡명을 입력받는다. |
217 | data.SetSingerFromKB(); //사용자에게서 가수를 입력받는다. | 238 | data.SetSingerFromKB(); //사용자에게서 가수를 입력받는다. |
218 | data.SetAlbumFromKB(); //사용자에게서 앨범을 입력받는다. | 239 | data.SetAlbumFromKB(); //사용자에게서 앨범을 입력받는다. |
219 | data.SetGenreFromKB(); //사용자에게서 장르를 입력받는다. | 240 | data.SetGenreFromKB(); //사용자에게서 장르를 입력받는다. |
220 | data.SetLyricsFromKB(); // 사용자에게서 가사를 입력받는다. | 241 | data.SetLyricsFromKB(); // 사용자에게서 가사를 입력받는다. |
221 | - if (m_List.Delete(data))//기존 항목을 삭제하고 | ||
222 | - { | ||
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; |
26 | + mptr = NULL; | ||
30 | } | 27 | } |
31 | - void setName(string N) | 28 | + int getIndex() |
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 | { | 29 | { |
45 | - return Pkey; | 30 | + if (Isdeleted == false) |
46 | - } | ||
47 | - int getPlayed() | ||
48 | { | 31 | { |
49 | - return played; | 32 | + return (mptr->GetNum()); |
50 | } | 33 | } |
51 | - int getIndex() | ||
52 | - { | ||
53 | - return Index; | ||
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; | ||
282 | 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; | ||
303 | + | ||
304 | + delete pNode; | ||
305 | + m_nLength--; | ||
306 | + return 1; | ||
307 | + } | ||
308 | + else | ||
309 | + return 0; | ||
283 | 310 | ||
284 | } | 311 | } |
285 | 312 | ... | ... |
-
Please register or login to post a comment