[ad_1]
J’ai créé un crud pour créer, lire, mettre à jour et supprimer en C++. Le problème auquel je suis confronté en ce moment est que lorsque je saisis les données, les identifiants de la personne ne commencent pas par 1, 2, 3, etc.
l’identifiant commence à partir de nombres aléatoires comme 1586, 1587 et ainsi de suite
veuillez exécuter votre compilateur, vous pourrez voir le problème en question.
Ce que j’ai essayé :
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 }
Solution 1
Ce n’est pas aléatoire, c’est lu à partir du fichier :
void readData() { 51 Student student; 52 ifstream read; 53 read.open("student.txt"); 54 while (!read.eof()) { 55 read >> student.id;
Ce n’est que lorsque vous ajoutez un nouvel élève que vous définissez une “nouvelle” valeur – mais vous ne vérifiez pas si cette valeur a déjà été utilisée ! Ainsi, si vous lisez les étudiants existants au démarrage, puis ajoutez un nouvel étudiant, vous aurez deux étudiants avec un identifiant de zéro (et très probablement des informations associées dans d’autres fichiers qui utilisent cet identifiant pour relier les notes aux étudiants par exemple).
Vous devez trouver le plus grand identifiant existant et ajouter un étudiant avec un identifiant supérieur à celui-ci, plutôt que de supposer que 0 est « raisonnable » comme identifiant suivant.
[ad_2]
コメント