[ad_1]
Saya telah membuat mentah untuk membuat, membaca, memperbarui dan menghapus di C++. Masalah yang saya hadapi saat ini adalah ketika saya memasukkan data, id orang tersebut tidak dimulai dari 1, 2, 3 dan seterusnya.
idnya dimulai dari angka acak seperti 1586 , 1587 dan seterusnya
silakan jalankan kompiler Anda, Anda akan dapat melihat masalah yang ada.
Apa yang saya coba:
1 #include <iostream> 2 #include <fstream> 3 #include<string> 4 using namespace std; 5 int ID = 0; 6 struct Student { 7 int id; 8 string firstName; 9 string userName; 10 string password; 11 }; 12 13 void addStudent() { 14 Student student; 15 cout << "\n\tEnter First Name : "; 16 cin.get(); 17 getline(cin, student.firstName); //Nouman Habib 18 cout << "\n\tEnter User Name : "; 19 cin >> student.userName; 20 cout << "\n\tEnter Password : "; 21 cin >> student.password; 22 23 ID++; 24 student.id = ID; 25 26 ofstream write; 27 write.open("student.txt", ios::app); 28 write << "\n" << ID; 29 write << "\n" << student.firstName ; 30 write << "\n" << student.userName ; 31 32 write << "\n" << student.password ; 33 34 write.close(); 35 write.open("id.txt"); 36 write << ID; 37 write.close(); 38 cout << "\n\tData save to file"; 39 } 40 41 void print(Student s) { 42 cout << "\n\t---Stuent Data---"; 43 cout << "\n\tID is : " << s.id; 44 cout << "\n\tFirst Name is : " << s.firstName; 45 cout << "\n\tUser Name is : " << s.userName; 46 cout << "\n\tPassword is : " << s.password; 47 48 } 49 50 void readData() { 51 Student student; 52 ifstream read; 53 read.open("student.txt"); 54 while (!read.eof()) { 55 read >> student.id; 56 read.ignore(); 57 getline(read, student.firstName); 58 read >> student.userName; 59 read >> student.password; 60 61 print(student); 62 } 63 read.close(); 64 } 65 66 int searchData() { 67 int id; 68 cout << "\n\tEnter student id want to search : "; 69 cin >> id; 70 Student student; 71 ifstream read; 72 read.open("student.txt"); 73 while (!read.eof()) { 74 read >> student.id; 75 read.ignore(); 76 getline(read, student.firstName); 77 read >> student.userName; 78 read >> student.password; 79 80 if (student.id == id) { 81 print(student); 82 return id; 83 } 84 } 85 } 86 87 void deleteData() { 88 int id = searchData(); 89 cout << "\n\tYou want to delete record (y/n) : "; 90 char choice; 91 cin >> choice; 92 if (choice == 'y') { 93 Student student; 94 ofstream tempFile; 95 tempFile.open("temp.txt"); 96 ifstream read; 97 read.open("student.txt"); 98 while (!read.eof()) { 99 read >> student.id; 100 read.ignore(); 101 getline(read, student.firstName); 102 read >> student.userName; 103 read >> student.password; 104 105 if (student.id != id) { 106 tempFile << "\n" << student.id; 107 tempFile << "\n" << student.firstName; 108 tempFile << "\n" << student.userName; 109 tempFile << "\n" << student.password; 110 } 111 } 112 read.close(); 113 tempFile.close(); 114 remove("student.txt"); 115 rename("temp.txt", "student.txt"); 116 cout << "\n\tData deleted successfuly"; 117 } 118 else { 119 cout << "\n\tRecord not deleted"; 120 } 121 } 122 123 void updateData() { 124 int id = searchData(); 125 cout << "\n\tYou want to update record (y/n) : "; 126 char choice; 127 cin >> choice; 128 if (choice == 'y') { 129 Student newData; 130 cout << "\n\tEnter First Name : "; 131 cin.get(); 132 getline(cin, newData.firstName); 133 cout << "\n\tEnter User Name : "; 134 cin >> newData.userName; 135 cout << "\n\tEnter Password : "; 136 cin >> newData.password; 137 138 Student student; 139 ofstream tempFile; 140 tempFile.open("temp.txt"); 141 ifstream read; 142 read.open("student.txt"); 143 while (!read.eof()) { 144 read >> student.id; 145 read.ignore(); 146 getline(read, student.firstName); 147 read >> student.userName; 148 read >> student.password; 149 150 if (student.id != id) { 151 tempFile << "\n" << student.id; 152 tempFile << "\n" << student.firstName; 153 tempFile << "\n" << student.userName; 154 tempFile << "\n" << student.password; 155 156 } 157 else { 158 tempFile << "\n"<< student.id; 159 tempFile << "\n"<< newData.firstName; 160 tempFile << "\n"<< newData.userName; 161 tempFile << "\n" << newData.password; 162 163 } 164 } 165 read.close(); 166 tempFile.close(); 167 remove("student.txt"); 168 rename("temp.txt", "student.txt"); 169 cout << "\n\tData updated successfuly"; 170 } 171 else { 172 cout << "\n\tRecord not deleted"; 173 } 174 } 175 176 int main() 177 { 178 ifstream read; 179 read.open("id.txt"); 180 if (!read.fail()) { 181 read >> ID; 182 } 183 else { 184 ID = 0; 185 } 186 read.close(); 187 188 while (true) { 189 cout << "\n\t1.Add data"; 190 cout << "\n\t2.See data"; 191 cout << "\n\t3.Search data"; 192 cout << "\n\t4.Delete data"; 193 cout << "\n\t5.Update data"; 194 195 int choice; 196 cout << "\n\tEnter choice : "; 197 cin >> choice; 198 switch (choice) { 199 case 1: 200 addStudent(); 201 break; 202 case 2: 203 readData(); 204 break; 205 case 3: 206 searchData(); 207 break; 208 case 4: 209 deleteData(); 210 break; 211 case 5: 212 updateData(); 213 break; 214 } 215 } 216 217 }
Solusi 1
Ini tidak acak, ini dibaca dari file:
void readData() { 51 Student student; 52 ifstream read; 53 read.open("student.txt"); 54 while (!read.eof()) { 55 read >> student.id;
Hanya ketika Anda menambahkan siswa baru, Anda menetapkan nilai “baru” – tetapi Anda tidak memeriksa apakah nilai tersebut telah digunakan! Jadi jika Anda membaca siswa yang ada saat Anda memulai, lalu menambahkan siswa baru, Anda akan memiliki dua siswa dengan ID nol (dan sangat mungkin info terkait di file lain yang menggunakan ID tersebut untuk menghubungkan nilai dengan siswa misalnya).
Anda perlu mencari ID terbesar yang ada, dan menambahkan siswa dengan ID yang lebih besar dari itu, daripada berasumsi 0 “masuk akal” sebagai ID berikutnya.
[ad_2]
コメント