[ad_1]
C++ で作成、読み取り、更新、削除するための crud を作成しました。 私が現在直面している問題は、データを入力するときに、その人のIDが1、2、3などから始まらないことです。
ID は 1586 、 1587 などの乱数から始まります。
コンパイラを実行してみると、問題が発生していることがわかります。
私が試したこと:
C++
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 }
解決策 1
これはランダムではなく、ファイルから読み取られます。
C++
void readData() { 51 Student student; 52 ifstream read; 53 read.open("student.txt"); 54 while (!read.eof()) { 55 read >> student.id;
新しい生徒を追加するときのみ、「新しい」値を設定します。ただし、その値がすでに使用されているかどうかは確認しません。 したがって、起動時に既存の学生を読み取り、新しい学生を追加すると、ID が 0 の 2 人の学生が作成されます (さらに、たとえば、成績を学生に関連付けるためにその ID を使用する他のファイル内の関連情報も含まれる可能性があります)。
次の ID として 0 が「適切」であると想定するのではなく、既存の最大の ID を見つけて、それより 1 つ大きい ID を持つ学生を追加する必要があります。
[ad_2]
コメント