下载  >  课程资源  >  C/C++  > 学生信息管理系统C语言

学生信息管理系统C语言 评分

文件名称: *.c 3 文件描述: 链表 + 文件 简易的学生信息管理系统 4 编译环境: Windows 7.0 _ VC6.0 或者 DEV 5.9.2 5 最后修改: <2017年06月16日><新增统计功能><***> 6 功 能: 查找 显示 修改 删除 存档 学生信息 7 说 明: 存档在C:\\student_file.txt
37 es、Stu-> pnext=pNew /查找最佳位置进行升序插入节点, 维护学号升序顺序的插入 140 vTew->pnext=pstu; 141 while(vtew->pnex-->onext! =NULL) 142 143 if(strcmp(vIew->pnext->num, pNew->num)<=0 & strcmp(vIew->pnext->pnext->rum pNew->num)>=0) 144 146 pNew->pnext vIew->pnext->pnexti 147 vIew->pnext->pnext pNew; 48 placed= /表示已经放置 49 break Iew->pnext vlew->pnext->pnexti 153 154 if(placed==0 ew-> pnext-> pnext= pNew;1/没有找到合适的节点,把pNew挂在链表最后面 156 158 159 free(vIew)i 160 V工ew=NUT; 161 fflush(stdin)i 163} 164 165/显示信息 166 void ShowInformation o 168 STUX VIeW E NULL; system (CIs) printf("\n\t =显示信息==== n"); 172 173 174 VIew =(STU *)malloc(sizeof(sTu)) 175 176 VIew->pnext=pstu->pnext 177 if(vIew->pnext==NULL) 178 179 pinf("ntt当前档案内没有学生信息"); 180 181 else 182 while(vIew->pnex=!=NULL) 86 ShowNode(vlew->pnext)i 187 188 vIew->pnext=vlew->pnext->pnexti 189 190 191 free(vIew)i 192 VIewENULL 193 194 printf("\n\t LE 显示信息完毕 n") 196} 197 198查找信息 199 void Search( 200 201 char serach]i 202 int. flag=c; 203 char choice=o 204 STU* VIew NULLi 205 206 ystem( 207 //选择查找的根据[学号/姓名 208 printf("nt输入指令t1、按照学号查找t2、按照姓名查找、n") 209 hoice s getchoi 210 211 if(choice==1) 212 printf("\请输入要查找的学生的学号:n") 213 else if(choice== 2) 215 es、B-inf("\t请输入要查找的学生的姓名:\n") e 216 printf("\t您的指令输入有误!己经退出查找\n"); 218 if( choice==11l| choice=='2")//如果指令是正确的 220 scanf("s",serach)i 221 223 V⊥ew=(SU*mal1oc(8ize。f(SU))氵 225 vTew->pnext=pstu->pnexti 226 while(view->pnex-!=NULL) 227 228 if((strcmp(VIew->pnext->num, serach)==0&&choice =s 1)II(strcmp(vIew->pnext->name, serach)==0&&choice ==2 )) 229 230 f1a=1; 231 232 ShowNode(vIew->pnext); 233 234 235 vIew->pnext=view->pnext->pnext 236 237 ≌ee(vIew); 238 Ⅵ ewENULI; 239 240 if(! flag 241 pinf("n!!!不起,查无此人!!!1); 242 243 245/刖除信息 246 void Delete 247 248 STU *tempi 249 char nur. serach[Nli 250 int flag=c; 251 STU* VIEW E NULL 252 253 system( CIs" 254 255 temp=(STU *)ma l loc(sizeof(sTu))i 256 257 printf("nt请输入要删除的学生的学号:n"); 259 scanf("s" nlum serach)i 260 261 262 VIew =(sTU *)malloc(sizeof(stu))i 261 265 VIew->pnext=pstui 266 while(vIew->pnext->pnext!=NULL) 267 268 if(s=rcmp(vIew->pnext->pnext->num, num serach)==0) //匹配到了学号 269 f l ag= 271 printf("nnt待删除的学生信息为:n"); 272 273 ShowNode(vIew->onext->pnext)i 274 275 二em->pnex七=VeW-> pnext-> pnext; //temp->next保存将要删除的节点的地址 276 TIew->pnext->pnext=vTew->pnext->pnext->prexti /绕过将要删除的节点 277 278 free(temp->pnext)i /释放已经被绕过的节点,节省空间 279 280 printf("\nt待删除的学生已经删除\n") 281 printf("、nt.,, 282 break //删除一个节点之后,跳出循环体 283 284 vIew->pnext=vIew->pnext->pnexti 285 286 287 free(v⊥ew); 288 ⅥTew=IUL; 289 free(temp)i 90 temp=NULL; 291 292 if(!=lag) 293 printf("\m!!!!!!不起,查无此人!!11) 294 295} 296//修改信息 297 void Modify( 298 299 char num serach[N]i char name serach[Ni 301 int flag=ci 302 SU*v⊥ew=NULL 303 304 system(CIs)i 305 306 printf("nt请输入要修改的学生的学号:\n"); 307 scant(s num serach)i 308 printf("nt请输入要修改的学生的姓名:\n"); 09 scanf("s" name serach)i 310 V工eW=(sTU*)ma-1oc(size。£(STU)) 312 313 vIew->pnext=pstu->pnexti while(vIew->pnext!=NULL) 315 if(s-rcmp(VIew->pnext->umm, num serach)==0 & strcmp(vIew->pnext->name, name serach)=0 318 1ag=1 319 prin-f("找到了该学生,信息如下:"); 320 321 ShowNode (view->pnext)i 322 323 printf("\t修改成:a") 324 /新信息的输入 325 printf("t物理:n"); 326 scanf("s",vIew->pnext->physical)i 327 328 //信息检查 329 pinf("t数学:n"); 330 scanf(os,vIew->pnext->math)i 331 printf("\t英语:n") 333 scant("8s",V⊥ew-> pnext->上ng1ish); 334 //信息检查 335 336 //AdaInformation(); //原则上不修改学号和姓名;但如果要:可以直接用 AndInformation()函数 337 //去代替新信息的输入 338 p=in=f("n\t.....,, n"); 339 340 Tew->pnext=vIew->pnext->pnexti 341 342 free(vIew)i 343 ⅵIew=NU工; 344 345 if(!flag) 346 printf("n!!!!!!起,查此人!!!11"); 347 348} 349/数据统计 350 id Statistical 351 352 double score average student=0;/*学小平均成绩* 353 double average physica1=0;/*物理的平均成绩* 354 double average math=0;/*数学的平均成绩 double average english=0;/x英语的平均成绩*/ 356 nt Numer=0;/*学生总数记录 358 359 STu * view NULL 360 View pstu->pnexti 361 362 system(cl 363 364 printf("t进行数据统计:n"); 365 while(view!=NULL 366 score average student atof(view->physical ) atof(view->math)+ atof(View->English)i 68 369 average physica|+=atot(vew-> physica);/*单科分数累积,便于下一步求平均数*/ 37/0 average math+=atof(viev->math)i 371 average english+=atof (view->English) 372 373 pxin=f("学生s的平均成绩为:8.2fa",View->name, score average student) 374 NuMber++ 376 View view->pnexti 377 378 printf("nt学生的总人数是:d", Number); 379 380 if(Number!=0) 381 f("\n物理平均分:8.2f,数学平均分:8.2,英语平均分:.2f An", average physical/Number, average math/Number, average english/Number)i 382 else 383 printf("\n物理平均分:0,数学平均分:0,英语平均分:0\n") 384 386根据总成绩进行排序改变指针指向的方法进行链表排序] 387 oid Sort o 388 389 STU*iew0=NUL工; 390 sTU *view 1 NULl 391 sTu *view 2= NULL 392 int Studert]umber =0; int i=0,3=0; 394 float SortKey =0, SortKey2=0, result=0; //排序囚素 395 396 system("Cl3 )i 397 printf("r按学号排序") 398 399 400 iew 0= pStu->pnext 401 while view O!=NULL) 402 403 ew 0= View 0 ->pnext 404 Studert Number++ 405 40)6 // print("n学生的个数为%d\n", Student Number); 407 408 if(Student Number<2) 409 printf("\n表内学生数据少于2个,无需排序\n");//只有头结点或者除了头结点之外只有 个节点,不用排序 411 412 413 414 //exchange A(view 1)and B (view 2) //冒泡排序 416 for (i=0;i<studentNumber-lii++ 41 418 View 0= pstu; 419 View l pstu->onexti 420 View 2= View 1->pnext 421 422 for (i=0; j<studentNumber-1-1ij++) 423 424 425 //学生的学号为排序因素 426 SortKeyl atoi(view 1->nun) 427 SortKey2 atoi(view 2->nun)i 428 result =(SortKey1)>(SortKey2)? 1: 0i 429 430 if(result) 431 432 //prin-f("ns与3s交换 View 1->num, view 2->num)i 433 View 0->pnext View 2 434 View l->pnext view 2->pnexti 435 View >pnext view li 436 437 View 1 view 2; 438 V立ew2=VieW1-> pnext; 439 440 441 442 if(View 2->onext!=NULL) 443 444 iew o= View 0->pnexti 445 View 1= View 0->pnexti 446 V⊥ew2=View1-> pnext; 447 448 449 /如果最后节点的 pnext是空,证明排序完毕,不需要再递进了 450 451 452 printf("n排序完毕\n"); 454 455 456 457 458 459侏存信息 460 void save file( 461{ 462# ifdef SAVEFIL三 463 EILE★三i1e=NULL 464 STUX VIeW NULLi 465 466 46 file open("C:\student file.tx","w+")i 468 if【fi1e==NULL) 469 pinf("文件打开失败!n") 470 471 vIew =(s'lU *)malloc(sizeof(stu))i 472 4/3 vTew->pnext=pstu->pnext 474 while(vTew->pnext =NULL) 476 -puts(vIew->pnex=->num,file) 477 三putc(x20,f1e) 478 puts(vIew->pnex=->name, file); 479 pu七c(0x20,f1e); 480 fputs(vIew->pnex-->Sex, file)i 481 fputc(0x20,file)i 482 -puts(vIew->pnex-->Class, file)i 483 fputc(0x20, file)i 484 -puts(vIew->pnex-->ohysical, file)i 485 fputc(0x20, file) 486 fputs(vlew->pnex-->math, file); 487 -putc(0x20, file)i 488 -puts(vlew->pnex-->English, file)i 489 490 vTew->pnext=vTew->pnext->pnext 491 492 free(vIew)i 493 VIew=NU工L; 494 495 fputs("END OF FIlE", file)i 496 fputc(0x2C, file)i 497 498 fclose(file)i 499 500 endif 501 502/从文件读入信息 d read file o 504{ 505# ifdef savety三 506 int i=0 507 508 509 F工LE*三11e=NULL; e fopen(C:\\student file. txt","r")i 511 512 if(file==NULL) 514 save file();//如果没有文件,就新建一个空白文件并保存 515 file fopen("C:\\student file. txt","r") 516 518 rewind(file) 519 520 pCurrent ->onext =ps=ui b21 522 while (l) 523 pNew =(STU *)malloc (sizeof(stu))i 524 pNew->pnext NUlli 525 526 527 fscanf(file,"s", pNew->nur )i 528 if(s=rcmp(pNew->num, END OF FILE)==0) breaki 529 530 fscanf(file, "9s", pNew->name)i 531 fscanf(file, "9s ,pNew->Sex)i 532 533 fscanf(file, "s ,pNew->Class)i 534 535 fscanf(file, "s , pNew->physical)i 536 fscanf(file, s ,pNew->math)i 537 Escanf(file, s", pNew->English)i 538 539 540 pCurrent->pnext->pnext=pNew; 541 pCurrent->pnext pcurrent->pnext->pnexti b42 // pCurrent-> pnext指向现在存在的节点 543 b44 545 fclose(file)i 546 endif 547 548 549/短暂延时效果 550 oid delay() 551 552 int i =0: 553 int 554 555 fx(i=50000:>0;--) 556 fo(=5000;>0;--) 557 558} 559/系统初始化 560 561 562 pstu (STU *)malloc(sizeof(sTU))i //创建头节点 563 pstu->pnext =NULl; 564 strcpy(pstu->nul ,"0 565 strcpy(pstu→>nate ); 566 567 pCurrent =(STU *)malloc(sizeof (sTu))i 568 pCurrent->0next式U 569 570 read file(i 571 572} 573/欢迎使用 void We l come( 575 t system(CIs") 576 577 printf("\rn、t \n"); 578 printf("\n\n")i 579 printf("t★★★欢迎使用学生信息管理系统★★★\n、n"); 580 printf("tt1.查看信息\n"); 581 printf("ttt2.增加信息n") 582 printf("ttt3.查找信息\n") 583 printf("\t\t\t4 修改信息\n") 584 printf("ttt5.删除信息\n") 585 printf("ttt6.学生排序\n"); printf("ttt7.数据统计n") 587 printf("ttt8.数据保存\n"); b88 print("ttt9.退出系统\n"); 589 printf("\t La n") 590 591****其实***实*主函数 大大x*★★女★大★★★★大大女★女女★★★★★★大★*★大★女★大 592 int maino 594 char choice=0;/*用户命令选择 595 char addyor=0;/*是否继续增加学术信息?'N表示退出* 596 char exi= o 系统退出0:表示继续运行1:表示退出*/ 597 598 inito 599 // Incheck() 600 Weicome()i 601 602 //命令解释 603 604 whi1e(上xit 605 606 We⊥ccme(); 607 p≌in=f("\n>>"); //输入命令 608 choicesgetchar(i 609 fflush(stdin)i 610 611 sw主tch( choi ce) 612 613 case 1: ShowInformation ()i 614 break; case 616 617 AddInformationoi 618 rinf("输入N可以退出增加信息.任意键继续输入、n");λddY。rN=g etcharoifflush(stdin); 619 Fwhile(addYorN!='ni 620 break; 621 case 3: Searchoi 622 break; 623 case 4: Modify(i 624 break 625 ase 51: De lete () 626 break 627 case 6: Sor=()i ShowInformation( 628 break 629 case 7: Statistical)i 630 break 631 ase'8': save file(); printf("\n数据保存完毕.") 632 break 633 case 9: Exit =1 634 break 635 default: i 636 637 638 639 i王(Exit==0) 640 641 printf("\n任意按键返回主菜单.") 642 getch()i 643 644 645 646 647 649 650 return oi 651 652 654

...展开详情
所需积分/C币:46 上传时间:2019-02-05 资源大小:252KB
举报 举报 收藏 收藏 (1)
分享 分享