学生信息管理系统
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 }