お世話になっております。
連日質問の連投で申し訳ございません。
C++を学習中の学生です。
現在C++でダイヤログベースの住所録を作成中です。
以下画面
左画面の各情報を入力後、送信を押下することによってリストに表示させています。(同時にファイル入出力もさせています)
以下テキストファイル中身
現在上記画面の用にリストを選択すると左側のエディット部にリストの各項目が表示され、内容を変更し、更新押下するとリストが更新されます。
また、リストを選択した状態で削除押下するとリストからその行が削除されます。
なのですが、リスト上でしか更新・削除がされておらず、デバックしなおすとファイルの情報をリストに表示させているため、更新・削除される前のリストが表示されます。
これからしたい処理として、更新・削除を行うときに同時にファイルの中身もそれに伴う処理をさせたいのですが、どのような流れになるでしょうか。。。
ご教授よろしくお願いいたします。
以下ソース
C++
1//------------------------------------------------------------------------------ 2// 送信ボタン押下処理 3//------------------------------------------------------------------------------ 4void CZyuSyoDlg::OnBnClickedGo() 5{ 6 struct Queue *head; 7 head = QueCut(); 8 9 //------------// 10 //名前部の取得// 11 //------------// 12 CString strName; 13 ((CEdit*)GetDlgItem(IDC_NAME_I))->GetWindowText( strName ); 14 //CString → charへの変換 15 strcpy_s( head->data.name, strName ); 16 17 //------------// 18 //住所部の取得// 19 //------------// 20 CString strHome; 21 ((CEdit*)GetDlgItem(IDC_HOME_I))->GetWindowText( strHome ); 22 strcpy_s( head->data.home, strHome ); 23 24 //------------// 25 //年齢部の所得// 26 //------------// 27 CString strTosi; 28 ((CEdit*)GetDlgItem(IDC_TOSI_I))->GetWindowText( strTosi ); 29 strcpy_s( head->data.tosi, strTosi ); 30 31 //------------// 32 //Noの所得 // 33 //------------// 34 CString strNo; 35 m_Combo.GetLBText(m_Combo.GetCurSel(),strNo); 36 37 //テキスト用テキストファイル読み込み 38 if( strNo != "" ) 39 { 40 CString strNoData; 41 CStdioFile ZyuSyoFile3("NoData.txt", CFile::modeCreate | CFile::modeNoTruncate | 42 CFile::modeRead | CFile::typeText); 43 //1行ずつ読み込ませる 44 BOOL strRead2; 45 while( 1 ) 46 { 47 strRead2 = ZyuSyoFile3.ReadString( strNoData ); 48 if( strRead2 == FALSE ) 49 { 50 break; 51 } 52 //読み込んだ値と取得した値を比べる 53 m_No = strNoData; 54 if( m_No == strNo ) 55 { 56 MessageBox("Noが重複しています!","†警告†",MB_OK | MB_ICONSTOP); 57 return; 58 } 59 60 } 61 } 62 63 strcpy_s( head->data.no, strNo ); 64 65 //----------------// 66 //性別の取得(男性)// 67 //----------------// 68 CString strType; 69 if( ( (CButton*)GetDlgItem(IDC_RADIO_B) )->GetCheck() == BST_CHECKED ) 70 { 71 strType = ("男性"); 72 strcpy_s( head->data.type, strType ); 73 } 74 75 //----------------// 76 //性別の判定(女性)// 77 //----------------// 78 if( ( (CButton*)GetDlgItem(IDC_RADIO_G) )->GetCheck() == BST_CHECKED ) 79 { 80 strType = ("女性"); 81 strcpy_s( head->data.type, strType ); 82 } 83 84 85 //----------------// 86 //リストへ追加 // 87 //----------------// 88 // リストコントロール 行の追加 89 int count = m_List.GetItemCount(); 90 m_List.InsertItem(count, strNo); //No行を追加 91 m_List.SetItem(count, 1, LVIF_TEXT, strType, 0, 0, 0, 0); //性別行を追加 92 m_List.SetItem(count, 2, LVIF_TEXT, strName, 0, 0, 0, 0); //名前列を追加 93 m_List.SetItem(count, 3, LVIF_TEXT, strTosi, 0, 0, 0, 0); //年齢行を追加 94 m_List.SetItem(count, 4, LVIF_TEXT, strHome, 0, 0, 0, 0); //住所行 95 96 //----------------// 97 //ファイル入出力 // 98 //----------------// 99 CStdioFile ZyuSyoFile; 100 //テキストファイルを開く 101 ZyuSyoFile.Open("ZyuSyoData.txt",CFile::modeReadWrite | 102 CFile::shareDenyNone | CFile::modeCreate | CFile::modeNoTruncate); 103 104 //テキストファイルの最後に追加していく 105 ZyuSyoFile.SeekToEnd(); 106 107 //各要素をテキストファイルに 108 ZyuSyoFile.WriteString( strNo + "\n" ); 109 ZyuSyoFile.WriteString( strType + "\n" ); 110 ZyuSyoFile.WriteString( strName + "\n" ); 111 ZyuSyoFile.WriteString( strTosi + "\n" ); 112 ZyuSyoFile.WriteString( strHome + "\n" ); 113 114 //テキストファイルを閉じる 115 ZyuSyoFile.Close(); 116 117 //No用テキストファイル作成 118 CStdioFile ZyuSyoFile2; 119 ZyuSyoFile2.Open("NoData.txt",CFile::modeReadWrite | 120 CFile::shareDenyNone | CFile::modeCreate | CFile::modeNoTruncate); 121 ZyuSyoFile2.SeekToEnd(); 122 ZyuSyoFile2.WriteString( strNo + "\n" ); 123 ZyuSyoFile2.Close(); 124 125 QueData(head); 126} 127//------------------------------------------------------------------------------ 128// 更新ボタン 129//------------------------------------------------------------------------------ 130void CZyuSyoDlg::OnBnClickedHenB() 131{ 132 POSITION pos; 133 while( 1 ) 134 { 135 pos = m_List.GetFirstSelectedItemPosition(); 136 if(!pos) 137 { 138 break; 139 } 140 int nItem = m_List.GetNextSelectedItem(pos); 141 CString strName; 142 ((CEdit*)GetDlgItem(IDC_NAME_I))->GetWindowText( strName ); 143 CString strHome; 144 ((CEdit*)GetDlgItem(IDC_HOME_I))->GetWindowText( strHome ); 145 CString strTosi; 146 ((CEdit*)GetDlgItem(IDC_TOSI_I))->GetWindowText( strTosi ); 147 148 m_List.SetItem(nItem, 2, LVIF_TEXT, strName, 0, 0, 0, 0); 149 m_List.SetItem(nItem, 3, LVIF_TEXT, strTosi, 0, 0, 0, 0); 150 m_List.SetItem(nItem, 4, LVIF_TEXT, strHome, 0, 0, 0, 0); 151 break; 152 } 153} 154 155 156//------------------------------------------------------------------------------ 157// 削除ボタン 158//------------------------------------------------------------------------------ 159void CZyuSyoDlg::OnBnClickedDelB() 160{ 161 POSITION pos; 162 while( 1 ) 163 { 164 pos = m_List.GetFirstSelectedItemPosition(); 165 if(!pos) 166 { 167 break; 168 } 169 int nItem = m_List.GetNextSelectedItem(pos); 170 m_List.DeleteItem(nItem); 171 } 172 173 174}

回答2件
あなたの回答
tips
プレビュー
下記のような回答は推奨されていません。
このような回答には修正を依頼しましょう。
また依頼した内容が修正された場合は、修正依頼を取り消すようにしましょう。