这是一个简易的学籍管理系统,大一时居然三个人写了一千多行......年少无知啊!欢迎摘果实!
1 #include <iostream>
2 #include <fstream>
3 #include <string>
4 #include <sstream>
5 using namespace std;
6
7 /*
8 *信息结构
9 */
10 /*struct stu
11 {
12 string id;
13 string name;
14 string gender;
15 int age;
16 string magor;
17 string prize;
18 };*/
19
20 bool isFind = false;//是否找到的标识
21
22 void find(const char *file, const int id);
23 void del(const char *file, const int id);
24 void change(const char *file, const int id);
25
26 void add(const char *file)
27 {
28 ofstream out;
29 out.open(file, ios::app);
30 if (!out.is_open())
31 {
32 cout << "文件打开失败" << endl;
33 return;
34 }
35 else
36 {
37 int id, age;
38 string name, major, prize, gender;
39 cout << "输入学号、姓名、性别、年龄、专业、奖项:" << endl;
40 cin >> id >> name >> gender >> age >> major >> prize;
41 find(file, id);
42 if(!isFind)
43 out << id << "\n" << name << "\n" << gender << "\n" << age << "\n" << major << "\n" << prize << "\n";
44 else
45 {
46 cout << "该学号已存在..." << endl;
47 return;
48 }
49 cout << "添加成功" << endl;
50 out.close();
51 }
52 }
53
54 void find(const char *file, const int id)
55 {
56 ifstream in;
57 in.open(file, ios::in | ios::binary);
58 if (!in.is_open())
59 {
60 cout << "打开文件错误" << endl;
61 return ;
62 }
63 while(in.peek() != EOF)
64 {
65 int temp;
66 stringstream s;
67 string line;
68 getline(in, line);//读字符串
69 s << line;
70 s >> temp;
71 if (temp == id)
72 {
73 isFind = true;//找到
74 int age;
75 string name, major, prize, gender;
76 cout << "找到记录:"<< endl;
77 getline(in, line);//读名字
78 s << line; s >> name;
79 getline(in, line);//读性别
80 s << line; s >> gender;
81 getline(in, line);//读年龄
82 s << line; s >> age;
83 getline(in, line);//读专业
84 s << line; s >> major;
85 getline(in, line);//读奖项
86 s << line; s >> prize;
87
88 cout << "学号:" << temp << " ";
89 cout << "姓名:" << name << " ";
90 cout << "性别:" << gender << " ";
91 cout << "年龄:" << age << " ";
92 cout << "专业:" << major << endl;
93 cout << "奖项:" << prize << endl;
94 }
95 }
96 in.close();
97 }
98
99 void del(const char *file, const int id)
100 {
101 isFind = false;
102 find(file, id);//找到要删的位置
103 if(isFind)
104 cout << "正在删除..." << endl;
105 else
106 {
107 cout << "无此纪录!" << endl;
108 isFind = false;
109 return;
110 }
111 ifstream in;
112 in.open(file, ios::in | ios::binary);
113 if (!in.is_open())
114 {
115 cout << "打开文件错误" << endl;
116 return;
117 }
118 string tempStr;
119 while (in.peek() != EOF)
120 {
121 int temp;
122 string line;
123 getline(in, line);//读字符串
124 stringstream s;
125 s << line;
126 s >> temp;
127 if (temp == id)
128 {
129 int delLine = 5;
130 while (delLine--)
131 getline(in, line);
132 }
133 else
134 {
135 //getline(in, line);//读字符串
136 tempStr += line;
137 tempStr += "\n";
138 }
139
140 }
141 in.close();
142 //重新写入文件
143 ofstream out;
144 out.open(file, ios::out);
145 if (!out.is_open())
146 {
147 cout << "打开文件错误,删除失败!" << endl;
148 return;
149 }
150 else
151 {
152 out << tempStr;//重新写入
153 cout << "删除完成!" << endl;
154 }
155 out.close();
156 }
157
158 void change(const char *file, const int id)
159 {
160 isFind = false;
161 find(file, id);//找到要改的目标
162 if (isFind)
163 {
164 int age;
165 string name, major, prize, gender;
166 cout << "输入新的姓名、性别、年龄、专业、奖项:" << endl;
167 cin >> name >> gender >> age >> major >> prize;
168 ifstream in;
169 in.open(file, ios::in | ios::binary);
170 if (!in.is_open())
171 {
172 cout << "文件打开失败!" << endl;
173 return;
174 }
175 string tempStr;
176 while (in.peek() != EOF)
177 {
178 int temp;
179 string line;
180 stringstream s;
181 getline(in, line);
182 s << line;
183 s >> temp;
184 if (temp == id)
185 {
186 tempStr += to_string(id) + "\n";
187 tempStr += name + "\n";
188 tempStr += gender + "\n";
189 tempStr += to_string(age) + "\n";
190 tempStr += major + "\n";
191 tempStr += prize + "\n";//加入新信息
192 int delLine = 5;
193 while (delLine--)
194 getline(in, line);//跳过旧信息
195 }
196 else
197 {
198 tempStr += line;
199 tempStr += "\n";
200 }
201 }
202 in.close();//别忘记
203
204 //重新写入文件
205 ofstream out;
206 out.open(file, ios::out);
207 if (!out.is_open())
208 {
209 cout << "打开文件错误,删除失败!" << endl;
210 return;
211 }
212 else
213 {
214 out << tempStr;//重新写入
215 cout << "修改完成!" << endl;
216 }
217 out.close();
218 }
219 }
220
221 int main()
222 {
223 const char *file = "D:\\homework\\DB\\test.txt";//文件地址
224 while (true)
225 {
226 int ans;
227 cout << "--------------------------------" << endl;
228 cout << "--> 1.插入信息 <--" << endl;
229 cout << "--> 2.查找信息 <--" << endl;
230 cout << "--> 3.删除信息 <--" << endl;
231 cout << "--> 4.修改信息 <--" << endl;
232 cout << "--> 0.退出Demo <--" << endl;
233 cout << "--------------------------------" << endl;
234 cout << "输入指令~$ ";
235 cin >> ans;
236 switch (ans)
237 {
238 case 0:
239 {
240 cout << "已退出!" << endl;
241 return 0;
242 }
243 break;
244 case 1:
245 {
246 add(file);
247 }
248 break;
249 case 2:
250 {
251 cout << "输入要查找的学号:";
252 int id;
253 cin >> id;
254 find(file, id);
255 }
256 break;
257 case 3:
258 {
259 cout << "输入要删除的学生学号:";
260 int id;
261 cin >> id;
262 del(file, id);
263 }
264 break;
265 case 4:
266 {
267 cout << "输入要修改的学生学号:";
268 int id;
269 cin >> id;
270 change(file, id);
271 }
272 default:
273 {
274 cout << "输入有误!" << endl;
275 }
276 break;
277 }
278 }
279
280 return 0;
281 }