[ad_1]
He creado una basura para crear, leer, actualizar y eliminar en C++. El problema al que me enfrento ahora es que mientras ingreso los datos, las identificaciones de la persona no comienzan desde 1, 2, 3, etc.
La identificación comienza a partir de números aleatorios como 1586, 1587, etc.
Por favor, ejecute su compilador y podrá ver el problema en cuestión.
Lo que he probado:
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 }
Solución 1
No es aleatorio, se lee del archivo:
void readData() { 51 Student student; 52 ifstream read; 53 read.open("student.txt"); 54 while (!read.eof()) { 55 read >> student.id;
Sólo cuando agrega un nuevo estudiante, establece un valor “nuevo”, ¡pero no verifica si ese valor ya se ha utilizado! Entonces, si lee los estudiantes existentes cuando comienza y luego agrega un nuevo estudiante, tendrá dos estudiantes con una identificación de cero (y muy posiblemente información relacionada en otros archivos que usan esa identificación para relacionar las calificaciones con los estudiantes, por ejemplo).
Debe encontrar la identificación existente más grande y agregar un estudiante con una identificación mayor que esa, en lugar de asumir que 0 es “considerable” como la siguiente identificación.
[ad_2]
コメント