学生信息管理系统

5个菜单功能,每个菜单功能含有不同得类,构造函数,至少有一个菜单功能模块含有友元函数,

友元类,多重继承,虚基类,虚函数或抽象类的应用,有异常处理。

 

  1 #include<iostream>
  2 #include<fstream>
  3 #include<string>
  4 using namespace std;
  5 
  6 const int Num = 100;//最大学生数
  7 int count = 0;
  8 
  9 struct Student{
 10     string data[5];//存放学号,姓名,性别,政治面貌,家庭住址;
 11     float goal;//存放c++期末成绩
 12 };
 13 Student Data[Num];//存储学生相关信息
 14 
 15 //添加学生信息(友元类)
 16 class AddStuInf{
 17 public:
 18     AddStuInf();//构造函数
 19     void Add();
 20     friend class UpdateStuInf;
 21 private:
 22     int N;//学生总人数
 23 };
 24 
 25 //初始化
 26 AddStuInf::AddStuInf()
 27 {
 28     N = 0;
 29 }
 30 //添加学生信息
 31 void AddStuInf::Add()
 32 {
 33     string num,name,address;//学号,姓名,政治面貌,家庭住址;
 34     int i,sex,politic,select;
 35     float goal;//c++期末成绩
 36     bool flags;//用于标识输入的学号是否已经存在
 37     
 38     cout<<"  ★请输入学生信息★\n";
 39     do{
 40         cout<<"        ◆请输入学号(字符串):";
 41         do{
 42             cin>>num;
 43             
 44             flags = false;
 45             
 46             for(i=0;i<count;i++)
 47             {
 48                 if(Data[i].data[0]==num)//该学号已经存在
 49                 {
 50                     flags = true;
 51                     break;
 52                 }
 53             }
 54 
 55             if(flags==true)
 56             {
 57                 cout<<"        ◆(该学号已经存在,请重新输入一个学号!)\n"<<endl;
 58                 cout<<"        ◆请输入学号:";
 59             }
 60         }while(flags==true);
 61 
 62 
 63         cout<<"        ◆请输入姓名(字符串):";
 64         cin>>name;
 65         cout<<"        ◆性别"<<endl;
 66         cout<<"              ------------"<<endl;
 67         cout<<"             |---1:男生---|"<<endl;
 68         cout<<"             |---0:男生---|"<<endl;
 69         cout<<"              ------------"<<endl;
 70         cout<<"        ◆请输入性别(整数):";
 71 
 72         cin>>sex;
 73 
 74         if(cin.fail())//异常处理
 75         {
 76             cout<<"输入数据非法!";
 77             exit(0);
 78         }
 79         switch(sex)
 80         {
 81         case 1:
 82             Data[count].data[2] = "男生";
 83             break;
 84         case 0:
 85             Data[count].data[2] = "女生";
 86             break;
 87         default:
 88             Data[count].data[2] = "男生";
 89             break;
 90         }
 91         cout<<"        ◆政治面貌"<<endl;
 92         cout<<"              ----------------"<<endl;
 93         cout<<"             |---0:共青团员---|"<<endl;
 94         cout<<"             |---1:预备党员---|"<<endl;
 95         cout<<"             |---2:党    员---|"<<endl;
 96         cout<<"             |---3:群    众---|"<<endl;
 97         cout<<"              ----------------"<<endl;
 98         cout<<"        ◆请输入政治面貌(整数):";
 99         cin>>politic;
100          if(cin.fail())//异常处理
101         {
102             cout<<"输入数据非法!";
103             exit(0);
104         }
105         switch(politic)
106         {
107         case 0:
108             Data[count].data[3] = "共青团员";
109             break;
110         case 1:
111             Data[count].data[3] = "预备党员";
112             break;
113         case 2:
114             Data[count].data[3] = "党员";
115             break;
116         case 3:
117             Data[count].data[3] = "群众";
118             break;
119         default:
120             Data[count].data[3] = "共青团员";
121             break;
122         }
123         cout<<"        ◆请输入家庭住址(字符串):";
124         cin>>address;
125         cout<<"        ◆请输入成绩(浮点数):";
126         cin>>goal;
127 
128         Data[count].data[0] = num;
129         Data[count].data[1] = name;
130         Data[count].data[4] = address;
131         Data[count].goal = goal;
132         count++;//学生人数自增
133         N++;
134         cout<<endl;
135     
136         cout<<"        ◆接下来的操作"<<endl;
137         cout<<"              ----------------"<<endl;
138         cout<<"             |---1:继续添加---|"<<endl;
139         cout<<"             |---0:退----出---|"<<endl;
140         cout<<"              ----------------"<<endl;
141         cout<<"        ◆请输入接下来的操作:";
142         cin>>select;
143     }while(select==1);
144     cout<<"  ★学生信息输入完毕★\n";
145     cout<<endl;
146 }
147 
148 
149 
150 
151 //删除学生信息
152 class DeleteStuInf{
153 public:
154     DeleteStuInf();//构造函数
155     void Dele();
156     friend  class UpdateStuInf;
157 };
158 
159 //初始化
160 DeleteStuInf::DeleteStuInf()
161 {
162 }
163 //删除学生信息
164 void DeleteStuInf::Dele()
165 {
166     int i,j,conti;
167     string num;
168     bool flags;
169     cout<<"  ★删除学生信息★\n";
170     do{
171         cout<<"        ◆请输入要删除的学生的学号(字符串):";
172         cin>>num;
173         flags = false;
174         for(i=0;i<count;i++)
175         {
176             if(Data[i].data[0]==num)
177             {
178                 for(j=i+1;j<count;j++)
179                 {
180                     Data[j-1] = Data[j];
181                 }
182                 count--;//学生人数-1
183                 flags = true;
184                 break;
185 
186             }
187         }
188         if(flags==false)
189         {
190             cout<<"        ◆学号为["<<num<<"]的学生不存在!"<<endl;
191         }else cout<<"        ◆学号为["<<num<<"]的学生信息删除成功!"<<endl;
192 
193         cout<<endl;
194         cout<<"        ◆接下来的操作"<<endl;
195         cout<<"              ----------------"<<endl;
196         cout<<"             |---1:继续删除---|"<<endl;
197         cout<<"             |---0:退----出---|"<<endl;
198         cout<<"              ----------------"<<endl;
199         cout<<"        ◆请输入接下来的操作:";
200         cin>>conti;
201     }while(conti==1);
202     cout<<"  ★删除学生信息完成★\n";
203     cout<<endl;
204 }
205 
206 //修改学生信息
207 class UpdateStuInf{
208 public:
209     UpdateStuInf();//构造函数
210     void Update();
211     DeleteStuInf DeleStu;
212     AddStuInf AddStu;
213     int select;
214 };
215 
216 //初始化
217 UpdateStuInf::UpdateStuInf()
218 {
219     select = 0;
220 }
221 //修改学生信息
222 void UpdateStuInf::Update()
223 {
224     string num,name,address;//学号,姓名,政治面貌,家庭住址;
225     int i,sex,politic,conti,con;
226     float goal;//c++期末成绩
227     bool flags;//用于标识输入的学号是否已经存在
228     
229     cout<<"  ★修改学生信息★\n";
230     do{
231         cout<<"        ◆接下来的操作"<<endl;
232         cout<<"              ----------------"<<endl;
233         cout<<"             |---0:添    加---|"<<endl;
234         cout<<"             |---1:删    除---|"<<endl;
235         cout<<"             |---2:更    改---|"<<endl;
236         cout<<"              ----------------"<<endl;
237         cout<<"        ◆请输入接下来的操作:";
238         cin>>select;
239         switch(select)
240         {
241         case 0:
242             AddStu.Add();
243             break;
244         case 1:
245             DeleStu.Dele();
246             break;
247         default:
248             do{
249                 cout<<"        ◆请输入要修改学生的学号(字符串):";
250                 cin>>num;//输入学号
251                     
252                 flags = false;
253                 for(i=0;i<count;i++)
254                 {
255                     if(Data[i].data[0]==num)//该学号存在,进行修改(学号不可修改)
256                     {
257                         cout<<"        ◆请输入姓名(字符串):";
258                         cin>>name;
259                         cout<<"        ◆性别"<<endl;
260                         cout<<"              ------------"<<endl;
261                         cout<<"             |---1:男生---|"<<endl;
262                         cout<<"             |---0:男生---|"<<endl;
263                         cout<<"              ------------"<<endl;
264                         cout<<"        ◆请输入性别(整数):";
265                         cin>>sex;
266                         if(cin.fail())//异常处理
267                         {
268                             cout<<"输入数据非法!";
269                             exit(0);
270                         }
271                         switch(sex)
272                         {
273                         case 1:
274                             Data[i].data[2] = "男生";
275                             break;
276                         case 0:
277                             Data[i].data[2] = "女生";
278                             break;
279                         default:
280                             Data[i].data[2] = "男生";
281                             break;
282                         }
283                         cout<<"        ◆政治面貌"<<endl;
284                         cout<<"              ----------------"<<endl;
285                         cout<<"             |---0:共青团员---|"<<endl;
286                         cout<<"             |---1:预备党员---|"<<endl;
287                         cout<<"             |---2:党    员---|"<<endl;
288                         cout<<"             |---3:群    众---|"<<endl;
289                         cout<<"              ----------------"<<endl;
290                         cout<<"        ◆请输入政治面貌(整数):";
291                         cin>>politic;
292                         if(cin.fail())//异常处理
293                         {
294                             cout<<"输入数据非法!";
295                             exit(0);
296                         }
297                         switch(politic)
298                         {
299                         case 0:
300                             Data[i].data[3] = "共青团员";
301                             break;
302                         case 1:
303                             Data[i].data[3] = "预备党员";
304                             break;
305                         case 2:
306                             Data[i].data[3] = "党员";
307                             break;
308                         case 3:
309                             Data[i].data[3] = "群众";
310                             break;
311                         default:
312                             Data[i].data[3] = "共青团员";
313                             break;
314                         }
315                         cout<<"        ◆请输入家庭住址(字符串):";
316                         cin>>address;
317                         cout<<"        ◆请输入成绩(浮点数):";
318                         cin>>goal;
319         
320                         Data[i].data[1] = name;
321                         Data[i].data[4] = address;
322                         Data[i].goal = goal;
323 
324                         cout<<"        ◆学号为["<<num<<"]信息修改成功!";
325 
326                         flags = true;
327                         break;
328                     }
329                 }
330 
331                 if(flags==false)
332                 {
333                     cout<<"        ◆学号["<<num<<"]不存在!"<<endl;
334                 }
335 
336                 cout<<endl;
337                 cout<<"        ◆接下来的操作"<<endl;
338                 cout<<"              ----------------"<<endl;
339                 cout<<"             |---1:继续更新---|"<<endl;
340                 cout<<"             |---0:退    出---|"<<endl;
341                 cout<<"              ----------------"<<endl;
342                 cout<<"        ◆请输入接下来的操作:";
343                 cin>>conti;
344             }while(conti==1);
345             break;
346         }
347         cout<<endl;
348         cout<<"        ◆接下来的操作"<<endl;
349         cout<<"              ----------------"<<endl;
350         cout<<"             |---1:继续修改---|"<<endl;
351         cout<<"             |---0:退    出---|"<<endl;
352         cout<<"              ----------------"<<endl;
353         cout<<"        ◆请输入接下来的操作:";
354         cin>>con;
355     }while(con==1);
356 
357     cout<<"  ★学生信息修改完毕★\n";
358     cout<<endl;
359 }
360 
361 //查看学生信息(基类)
362 class LookInf{
363 public:
364     virtual void Look();//虚函数
365 };
366  void LookInf::Look()
367 {
368     int i;
369     cout<<"学号\t姓名\t性别\t政治面貌\t家庭住址\t成绩"<<endl;
370     for(i=0;i<count;i++)
371     {
372         cout<<Data[i].data[0]<<"\t"<<Data[i].data[1]<<"\t"<<Data[i].data[2]<<"\t";
373         cout<<Data[i].data[3]<<"\t\t"<<Data[i].data[4]<<"\t\t"<<Data[i].goal<<endl;
374     }
375     cout<<" ★所有信息已经全部显示★"<<endl;
376     cout<<endl;
377 }
378 //查看学生信息
379 class LookStuInf:public LookInf{
380 public:
381     LookStuInf(){};//构造函数
382     void Look();
383 };
384 
385 //查看学生信息
386 void LookStuInf::Look()
387 {
388 
389     int i,select,conti;//选择
390     string num;
391     bool flags;
392     cout<<"  ★查看学生信息★\n";
393     LookInf look;
394 
395     do{
396         cout<<"        ◆接下来的操作"<<endl;
397         cout<<"              --------------------------"<<endl;
398         cout<<"             |---1:查看全部学生信息-----|"<<endl;
399         cout<<"             |---0:查看某个学号的信息---|"<<endl;
400         cout<<"              --------------------------"<<endl;
401         cout<<"        ◆请输入接下来的操作:";
402         cin>>select;
403         cout<<endl;
404         if(cin.fail())//异常处理
405         {
406             cout<<"输入数据非法!";
407             exit(0);
408         }
409         switch(select)
410         {
411         case 1:
412 
413             look.Look();
414             break;
415         case 0:
416             cout<<"        ◆请输入你要查询学生的学号:";
417             cin>>num;
418             cout<<"学号\t姓名\t性别\t政治面貌\t家庭住址\t成绩"<<endl;
419             flags = false;
420             for(i=0;i<count;i++)
421             {
422                 if(Data[i].data[0]==num)
423                 {
424                     cout<<Data[i].data[0]<<"\t"<<Data[i].data[1]<<"\t"<<Data[i].data[2]<<"\t";
425                     cout<<Data[i].data[3]<<"\t\t"<<Data[i].data[4]<<"\t\t"<<Data[i].goal<<endl;
426                     flags = true;
427                     cout<<endl;
428                     cout<<" ★学号为["<<Data[i].data[0]<<"]的学生信息已经显示★"<<endl;
429                     break;
430                 }
431 
432             }
433 
434             if(flags==false)//此学号不存在
435             {
436                 cout<<"        ◆学号["<<num<<"]不存在!"<<endl;
437             }
438         }
439         cout<<endl;
440         cout<<"        ◆接下来的操作"<<endl;
441         cout<<"              ----------------"<<endl;
442         cout<<"             |---1:继续查询---|"<<endl;
443         cout<<"             |---0:退    出---|"<<endl;
444         cout<<"              ----------------"<<endl;
445         cout<<"        ◆请输入接下来的操作:";
446         cin>>conti;
447     }while(conti==1);
448 }
449 
450 class Sort_Goal{
451 public:
452     Sort_Goal(){};//构造函数
453     friend void Sort(Sort_Goal &);//友元函数
454 };
455 
456 //学生成绩进行排序
457 void Sort(Sort_Goal &t)
458 {
459     cout<<"  ★学生c++课程成绩进行排序★\n";
460     int i,j,select;
461     cout<<"        ◆接下来的操作"<<endl;
462     cout<<"              ----------------"<<endl;
463     cout<<"             |---1:降序排序---|"<<endl;
464     cout<<"             |---0:升序排序---|"<<endl;
465     cout<<"              ----------------"<<endl;
466     cout<<"        ◆请输入接下来的操作:";
467     cin>>select;
468     if(cin.fail())//异常处理
469     {
470         cout<<"输入数据非法!";
471         exit(0);
472     }
473     Student temp;
474     for(i=0;i<count-1;i++){
475         for(j=0;j<count-1-i;j++){
476             if(select==1){//降序
477                 if(Data[j].goal<Data[j+1].goal){
478                 
479                     temp = Data[j];
480                     Data[j] = Data[j+1];
481                     Data[j+1] = temp;
482                 }
483             }else{//升序
484                 if(Data[j].goal>Data[j+1].goal){
485                     Student temp;
486                     temp = Data[j];
487                     Data[j] = Data[j+1];
488                     Data[j+1] = temp;
489                 }
490             }
491         }
492     }
493 
494     cout<<"学号\t姓名\t性别\t政治面貌\t家庭住址\t成绩"<<endl;
495             for(i=0;i<count;i++)
496             {
497                 cout<<Data[i].data[0]<<"\t"<<Data[i].data[1]<<"\t"<<Data[i].data[2]<<"\t";
498                 cout<<Data[i].data[3]<<"\t\t"<<Data[i].data[4]<<"\t\t"<<Data[i].goal<<endl;
499             }
500             cout<<" ★学生c++课程成绩进行排序后信息已经全部显示★"<<endl;
501 
502 }
503 
504 
505 
506 int main()
507 {
508     AddStuInf A;
509     LookStuInf B;
510     UpdateStuInf C;
511     DeleteStuInf D;
512     Sort_Goal E;
513     int n;
514     while(1){
515         cout<<"                                  学生信息管理系统"<<endl;
516         cout<<"                       ---------------------------------"<<endl;
517         cout<<"                      |         ";cout<<"1.增加学生记录~";cout<<"        |"<<endl;
518         cout<<"                      |         ";cout<<"2.查看学生记录~";cout<<"        |"<<endl;
519         cout<<"                      |         ";cout<<"3.修改学生记录~";cout<<"        |"<<endl;
520         cout<<"                      |         ";cout<<"4.删除学生记录~";cout<<"        |"<<endl;
521         cout<<"                      |         ";cout<<"5.学生成绩排序~";cout<<"        |"<<endl;
522         cout<<"                       ---------------------------------\n\n"<<endl;
523         cout<<" ☆请选择:\n"<<endl;
524         cin>>n;
525         cout<<"\n";
526         if(n==0)break;
527         switch(n)
528         {
529         case 1:
530             A.Add();
531             break;
532         case 2:
533             B.Look();
534             break;
535         case 3:
536             C.Update();
537             break;
538         case 4:
539             D.Dele();
540             break;
541         case 5:
542             Sort(E);
543             break;
544         default:
545             break;
546         }
547     }
548     return 0;
549 }

posted @ 2015-12-26 15:42  指间ゝ繁华初逝的格调  阅读(469)  评论(1编辑  收藏  举报