学生信息管理系统C++ 课程设计.docx
- 文档编号:9700606
- 上传时间:2023-05-20
- 格式:DOCX
- 页数:18
- 大小:19.37KB
学生信息管理系统C++ 课程设计.docx
《学生信息管理系统C++ 课程设计.docx》由会员分享,可在线阅读,更多相关《学生信息管理系统C++ 课程设计.docx(18页珍藏版)》请在冰点文库上搜索。
学生信息管理系统C++课程设计
学生信息管理系统说明文档
一、基本设计
a)基类【Stu】:
包含学生的学号、姓名,以及构造函数。
b)派生类【Student】:
增加学生的性别、出生年月、电话号码,以及构造函数、输入流重载、输出流重载。
c)功能:
实现学生信息的增、删、改、查。
二、函数功能
intmain():
程序入口;
voidadd_SI():
实现学生信息的增加;
voiddelete_SI():
实现学生信息的删除;
voidchange_SI():
实现学生信息的更改;
voidsearch_SI():
通过调用以下五个函数分别实现按照学号、姓名、性别、出生年月、电话的查找;
voidcheck_num(Student*p):
按学号查找;
voidcheck_name(Student*p):
按姓名查找;
voidcheck_sex(Student*p):
按性别查找;
voidcheck_birth(Student*p):
按出生日期查找;
voidcheck_cell(Student*p):
按电话号码查找。
三、细节实现
a)Student类由Stu基类派生而来;
b)“<<”“>>”运算符在类外定义重载,并在Student类中声明为友元;
c)文件保存部分,学生信息保存在“datafile.dat”文件中,以二进制方式存储;学生信息总条数保存在“all_num.dat”文件中,以ASCII码方式存储;
d)定义了一个全局变量intall_num,用于在所有函数中使用学生信息总条数;
四、程序代码
注:
在VC6.0SP6环境下不能编译通过,Dev-cpp、VS系列均可。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
#include
#include
#include
#include
//#definedatafile.dat123.dat
usingnamespacestd;
intall_num;//文件中存储的数据个数
classStu//定义基类
{
public:
Stu()
{
num="000000000000";
name="/0";
}
stringnum;
stringname;
};
classStudent:
publicStu//派生类
{
public:
Student():
Stu()
{
sex='0';
birth="00000000";
cell="00000000000";
}
inttotal;
friendistream&operator>>(istream&,Student&);
friendostream&operator<<(ostream&,Student&);
charsex;
stringbirth;
stringcell;
};
istream&operator>>(istream&input,Student&temp)
{
input>>temp.num>>temp.name>>temp.sex>>temp.birth>>temp.cell;
returninput;
}
ostream&operator<<(ostream&output,Student&temp)
{
output< (2)< returnoutput; } //以上为学生类定义 voidadd_SI() { intn; cout<<"请输入要添加的学生数目: "< cin>>n; Student*p=newStudent[all_num+n];//动态申请一个数组,保存要添加的学生信息与原有的学生信息 //先将原有的学生信息保存至数组 ifstreaminfile("datafile.dat",ios: : binary); if(! infile) { cerr<<"打开学生信息失败! "< exit (2); } infile.read((char*)p,sizeof(Student)*all_num); infile.close(); //输入增加的学生信息 for(inti=all_num;i { cout<<"请输入第"< "< cout< cin>>p[i]; } //以下为保存学生信息数据文件 ofstreamoutfile("datafile.dat",ios: : binary); if(! outfile) { cerr<<"文件打开失败! "< exit (1); } outfile.write((char*)p,sizeof(Student)*(all_num+n)); outfile.close(); //以下为保存学生总数文件 all_num+=n; ofstreamoutall("all_num.dat",ios: : out); if(! outall) { cout<<"保存all_num.dat出错! "< exit (1); } outall< outall.close(); delete[]p; cout<<"添加学生信息成功! "< } //以上为增加数据函数add_SI voiddelete_SI() { if(all_num==0)//如果总数为0,返回 return; //将文件中所有学生信息保存在数组p中 Student*p=newStudent[all_num]; intn; ifstreaminfile("datafile.dat",ios: : binary); if(! infile) { cerr<<"datafile.dat文件不存在! "< exit (1); } infile.read((char*)p,sizeof(Student)*all_num); infile.close(); cout<<"已保存的所有学生信息: "< cout< inti,j; for(i=0;i { cout< } cout<<"请输入要删除学生信息个数: "< cin>>n; if(n==0)//如果要删除的信息条数为0,返回 { cout<<"没有信息被删除! "< return; } string*s=newstring[n]; for(j=0;j { cout<<"请输入第"< cin>>s[j]; } //保存未被删除的信息 ofstreamoutfile("datafile.dat",ios: : binary); if(! outfile) { cerr<<"文件打开失败! "< exit (1); } for(j=0;j { for(i=0;i { if(p[i].num==s[j]) break; else outfile.write((char*)&p[i],sizeof(Student)); } } //保存信息总数 ofstreamoutall("all_num.dat",ios: : out); if(! outall) { cout<<"保存all_num.dat出错! "< exit (1); } all_num-=n; outall< outall.close(); cout<<"学生信息已删除! "< delete[]p; } //以上为删除数据函数delete_SI voidchange_SI() { if(all_num==0)//如果总数为0,返回 return; //将文件中所有学生信息保存在数组p中 Student*p=newStudent[all_num]; ifstreaminfile("datafile.dat",ios: : binary); if(! infile) { cerr<<"文件打开失败! "< exit (1); } infile.read((char*)p,sizeof(Student)*all_num); infile.close(); cout<<"已保存的所有学生信息: "< cout< inti,j; for(i=0;i { cout< } intn; cout<<"请输入要更改学生信息个数: "< cin>>n; Student*s=newStudent[n]; cout<<"请依次输入学生的: "< cout< for(j=0;j { cout<<"请输入第"< cin>>s[j]; } for(i=0;i { for(j=0;j { if(p[i].num==s[j].num) p[i]=s[j]; } } ofstreamoutfile("datafile.dat",ios: : binary); if(! outfile) { cerr<<"文件打开失败! "< exit (1); } outfile.write((char*)p,sizeof(Student)*all_num); outfile.close(); cout<<"学生信息已更改! "< delete[]p; } //以上为更改数据函数change_SI voidcheck_num(Student*p) { strings; intflag=0; cout<<"请输入您要查找的学号: "< cin>>s; cout<<"查找结果: "< for(inti=0;i { if(p[i].num==s) cout< elseflag++; } if(flag==all_num) cout<<"未找到! "< } voidcheck_name(Student*p) { strings; intflag=0; cout<<"请输入您要查找的姓名: "< cin>>s; cout<<"查找结果: "< for(inti=0;i { if(p[i].name==s) cout< elseflag++; } if(flag==all_num) cout<<"未找到! "< } voidcheck_sex(Student*p) { chars; intflag=0; cout<<"请输入您要查找的性别: "< cin>>s; cout<<"查找结果: "< for(inti=0;i { if(p[i].sex==s) cout< elseflag++; } if(flag==all_num) cout<<"未找到! "< } voidcheck_birth(Student*p) { strings; intflag=0; cout<<"请输入您要查找的出生日期: "< cin>>s; cout<<"查找结果: "< for(inti=0;i { if(p[i].birth==s) cout< elseflag++; } if(flag==all_num) cout<<"未找到! "< } voidcheck_cell(Student*p) { strings; intflag=0; cout<<"请输入您要查找的电话: "< cin>>s; cout<<"查找结果: "< for(inti=0;i { if(p[i].cell==s) cout< elseflag++; } if(flag==all_num) cout<<"未找到! "< } voidsearch_SI() { if(all_num==0)//如果总数为0,返回 return; //将文件中所有学生信息保存在数组p中 Student*p=newStudent[all_num]; intn,flag=1; ifstreaminfile("datafile.dat",ios: : binary); if(! infile) { cerr<<"文件打开失败! "< exit (1); } infile.read((char*)p,sizeof(Student)*all_num); infile.close(); cout<<"请输入查找条件的序号: "< cout<<"1、按学号查找: "< cout<<"2、按姓名查找: "< cout<<"3、按性别查找: "< cout<<"4、按出生日期查找: "< cout<<"5、按电话号码查找: "< while(flag) { cin>>n; switch(n) { case1: check_num(p);flag=0;break; case2: check_name(p);flag=0;break; case3: check_sex(p);flag=0;break; case4: check_birth(p);flag=0;break; case5: check_cell(p);flag=0;break; default: cout<<"您的输入有误,请重新输入: "< } } delete[]p; } //以上为查找数据函数search_SI intmain() { boolflag=1; intn; ifstreaminfile("all_num.dat",ios: : in); //初始化,创建datafile.dat、all_num.dat文件 if(! infile) { cerr<<"★★★★★欢迎首次使用! ★★★★★"< all_num=0; ofstreamoutfile("all_num.dat",ios: : out); if(! outfile) { cerr<<"all_num.dat文件创建失败,请与您的技术支持人员联系! "< exit (1); } outfile< outfile.close(); ofstreamoutdatafile("datafile.dat",ios: : binary); char*p=NULL; if(! outdatafile) { cerr<<"datafile.dat文件创建失败,请与您的技术支持人员联系! "< exit (1); } outdatafile.write(p,0); outdatafile.close(); } infile>>all_num; infile.close(); while(flag) { cout<<"已存在的学生信息条数: "< cout<<"请输入序号选择: "< cout<<"1、增加一条记录;"< cout<<"2、删除一条记录;"<
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 学生信息管理系统 C+ 课程设计 学生 信息管理 系统