1、 系统概述
学生学籍管理系统从学生学籍管理的现状出发,以实现学生学籍管理为设计目标
学生学籍管理系统:用数据文件存放学生的学籍,可对学生学籍进行注册,登录,修改,删除,查找,统计,学籍变化等操作。
在界面友善方面,首先使用system函数使界面美观,用制表符制作界面使界面简洁易读,其次将输入数据的思路流程化,使用者可以从任意数据输入过程开始,,各种各样的数据产生过程。再者,考虑到了对非法输入做了一定的处理,输出提示语句与提示音,增加了程序的可操作性。
本系统使用结构体数组对学生学籍存储,并使用文件指针及文件的读写函数将学生学籍保存于文件file.TXT中,使得数据长期存储。
本系统以模块化设计为主要思想,逐步细化,自顶向下,实现对学生的学籍管理
程序缺陷
部分变量命名不规范
未对用户与管理员权限进行限制
未能使用链表进行数据结构设计
2、 数据结构设计
本程序所使用的数据类型
数据类型 |
字节 |
值的范围 |
int |
4 |
-2,147,483,648~ 2,147,483,647 |
char |
1 |
-128~127 |
struct date |
12 |
# |
struct student |
272 |
# |
FILE* |
4 |
# |
变量数据类型及说明
变量 |
功能 |
数据类型 |
值的范围 |
||
flag |
标记是否登录 |
int |
0、1 |
||
stu[N] |
学生学籍信息数组 |
struct student |
N=100 |
||
w1 |
各函数w1为数据错误标志位 |
int |
0,1 |
||
i,j |
多在函数中被用于循环控制变量 |
int |
0~ 2,147,483,647 |
||
birthday |
出生年月 |
struct date |
|||
num[20] |
学号数组 |
char |
最多19字符 |
||
name[25] |
姓名数组 |
char |
最多24字符 |
||
age |
年龄 |
int |
|||
addr[50] |
籍贯 |
char |
最多49字符 |
||
dept[50] |
系别 |
char |
最多49字符 |
||
classs[30] |
班级 |
char |
最多29字符 |
||
major[30] |
专业 |
char |
最多29字符 |
||
classes[30] |
班级 |
char |
最多29字符 |
||
status[20] |
学籍状态 |
char |
最多19字符 |
||
password[20] |
密码 |
char |
最多19字符 |
变量介绍:
其他变量为函数临时变量
学生学籍结构体数组为方便各函数调用,使用全局变量存储
Flag为登录标志位,使用全局变量来进行存储,从而判断是否登录
i、 j用于for循环的控制计数变量,控制循环的进行
w0、w1用于while循环的控制
输出数据:
%d带符号的十进制形式输出整数。
用于数据个数的输出
%s以字符串类型整体输入字符数组,例如学生籍贯的输出
以字符串输出学生信息数据
使用清屏函数及时清除屏幕多余数据,使得界面美观大方,易读性强
3、 模块设计
系统通过欢迎函数、菜单函数、查询函数、删除函数、查询函数、修改函数、籍贯输出函数来实现学生信息的查找删除等功能,各功能通过主函数switch语句调用,各函数又互相调用
设计错误
开始对错误数据的处理不力,错误比较多,没有按全局的思路完善程序所导致的
4.调试运行及操作说明
程序使用说明
- 1. 运行程序进入欢迎界面,按[enter]进入主菜单
- 1. 根据所需服务输入对应数字
错误输入:如果输入错误数字9 系统会提示错误、发出提示音并提示重新输入
3.键入1 进入登录系统页面
3.1 管理员登录键入一并输入密码,密码为123456
3.2用户名为学生姓名密码为学号
4.按任意键登录成功会返回菜单页
错误提示:未登录选择进入插入、删除页面会提示登录(查询除外)并转到登录页面
5.进入菜单键入2进入插入页面,按提示输入学生信息
6.进入键入1进入浏览页面,进入键入2返回菜单
7.菜单选择4进入查询界面,分为姓名与学号查询
8.显示结果,查询结束可选择继续与返回菜单
错误提示:输入错误姓名与学号会提示重新输入
9.进入删除界面,同理,按提示输入将删除所选项
10.进入修改界面,按提示输入将修改所选项
11.进入籍贯界面,选择专业与学号并按提示输入将查看籍贯项
12.菜单状态按8键,将退出系统
1 /* 2 C语言综合设计 3 4 题目:学生学籍管理系统 5 6 管理员登录密码:123456 7 用户为输入学生姓名,密码为学号 8 9 功能: 10 (1) 系统以菜单方式工作。 11 (2) 登记学生的学号,姓名,性别,年龄,籍贯,系别,专业,班级;修改已知学号的学生信息; 12 (3) 删除已知学号的学生信息; 13 (4) 查找已知学号的学生信息; 14 (5) 按学号,专业输出学生籍贯表。 15 (6) 查询学生学籍变化,比如入学,转专业,退学,降级,休学,毕业。 16 17 编译平台:vc++6.0 18 2018.6.12 19 20 */ 21 22 #include<stdio.h> 23 #include<string.h> 24 #include<stdlib.h> 25 #include<conio.h> 26 #define N 100 /*存储100个学生的学籍信息*/ 27 int flag; /*标记是否登录*/ 28 struct date /*出生日期*/ 29 { 30 int year; 31 int month; 32 int day; 33 }; 34 struct student 35 { 36 char num[20];/*学号*/ 37 char name[25];/*姓名*/ 38 char sex[10];/*性别*/ 39 struct date birthday;/*出生年月*/ 40 int age;/*年龄*/ 41 char addr[50];/*籍贯*/ 42 char dept[50]; /*系别*/ 43 char major[30]; /*专业*/ 44 char classs[30]; /*班级*/ 45 char phone[20];/*电话*/ 46 char status[20];/*学籍状态*/ 47 }stu[N]; 48 49 void login() /*登录*/ 50 { 51 void menu(); 52 int load(); 53 int n,i,m,w; 54 FILE *fp; 55 struct student s; 56 char password[20]; 57 int d,q; 58 int j=0; 59 system("cls"); 60 if(flag) 61 { 62 printf(" 已经登录!\n"); 63 printf("Press any key to continue…\n"); 64 getchar(); 65 getchar(); 66 system("cls"); 67 menu(); 68 } 69 70 if((fp=fopen("file.txt","rb"))!=NULL) /*不是空文件*/ 71 n=load(); /*打开文件*/ 72 else 73 n=0; 74 75 76 printf("\n\t请选择登录身份:1.管理员 2.用户 [ ]\b\b"); 77 scanf("%d",&d); 78 if(d==1) 79 { 80 printf("\n\t\t\t请输入密码:"); 81 getchar(); 82 83 while(1) 84 { 85 password[j]=getch(); 86 if(password[j]=='\r') 87 break; 88 printf("*"); 89 j++; 90 } 91 password[j]='\0'; 92 if(!strcmp(password,"123456")) /*判断密码是否正确*/ 93 { 94 flag=1; 95 printf("\n\t登录成功!\n"); 96 printf("\tPress [ Enter ] key to continue…"); 97 getchar(); 98 system("cls"); 99 menu(); 100 } 101 if(!flag) 102 { 103 printf("\t\n密码错误!\n\a"); 104 printf("What do you want to do next? 1.继续登录 2.返回菜单 [ ]\b\b"); 105 scanf("%d",&q); 106 if(q==1) /*继续登录*/ 107 { 108 system("cls"); 109 login(); 110 } 111 else if(q==2) /*返回主菜单*/ 112 { 113 system("cls"); 114 menu(); 115 } 116 } 117 } 118 else 119 { 120 printf("\n\t\t\t用户名:"); 121 scanf("%s",s.name); 122 printf("\t\t\t密码:"); 123 124 while(1) 125 { 126 password[j]=getch(); 127 if(password[j]=='\r') 128 break; 129 printf("*"); 130 j++; 131 } 132 password[j]='\0'; 133 flag=0; /*未登录时flag=0*/ 134 for(i=0;i<n;i++) 135 if(!strcmp(s.name,stu[i].name)&&!strcmp(stu[i].num,password)) 136 { 137 flag=1; /*登录成功flag=1*/ 138 break; 139 } 140 if(flag) 141 { 142 printf("\n\t登录成功!\n"); 143 printf("\tPress any key to continue…\n"); 144 getchar(); getchar(); 145 system("cls"); 146 menu(); /*登录成功后返回主菜单*/ 147 } 148 else 149 { 150 m=0; /*设置m是为了避免陷入 登录失败时 跳不出登录界面*/ 151 w=1; /*设置w是为了避免输出多次 “用户不存在”*/ 152 153 do 154 { 155 if(w>0) 156 printf("用户名不存在或密码错误!\n\a"); /*第一次登录时输入不存在的用户时显示*/ 157 printf("What do you want to do next? 1.继续登录 2.返回菜单 [ ]\b\b"); 158 scanf("%d",&q); 159 if(q==1) /*继续登录*/ 160 { 161 login(); 162 m=1; 163 } 164 else if(q==2) /*返回主菜单*/ 165 { 166 system("cls"); 167 menu(); 168 m=1; 169 } 170 else 171 { 172 printf("选择错误!请重新选择:\n\a"); 173 w=0; 174 } 175 }while(m==0); 176 } 177 } 178 } 179 180 void printf_one(int k) /*输出一个学生的信息*/ 181 { 182 system("color 4e"); 183 printf("学号:%s\n",stu[k].num); 184 printf("姓名:%s\n",stu[k].name); 185 printf("性别:%s\n",stu[k].sex); 186 printf("出生年月:%d/%d/%d\n",stu[k].birthday.year,stu[k].birthday.month,stu[k].birthday.day); 187 printf("年龄:%d\n",stu[k].age); 188 printf("籍贯:%s\n",stu[k].addr); 189 printf("系别:%s\n",stu[k].dept); 190 printf("专业:%s\n",stu[k].major); 191 printf("班级:%s\n",stu[k].classs); 192 printf("电话:%s\n",stu[k].phone); 193 printf("学籍状态:%s\n",stu[k].status); 194 } 195 196 void printf_n(int n) /*浏览时输出所有学生的信息*/ 197 { 198 int j,i=1; 199 system("color 2e"); 200 201 for(j=0;j<n;j++) 202 { 203 printf("第%d个学生:\n",i++); 204 printf_one(j); 205 printf("\n"); 206 } 207 getchar(); 208 } 209 210 void printf_addr() /* 按学号,专业输出学生籍贯表*/ 211 { 212 void menu(); 213 int w0,k,i,n,w1,w2; 214 struct student s; 215 FILE *fp; 216 system("color 2e"); 217 if(!flag) 218 { 219 printf("\n\n\t请先登录!\n\a"); 220 printf("\n\t请按 Enter 键进入登录界面!"); 221 getchar(); 222 getchar(); 223 login(); 224 } 225 else 226 { 227 if((fp=fopen("file.txt","rb"))!=NULL) /*不是空文件*/ 228 n=load(); 229 do 230 { 231 printf("请选择学生籍贯的输出类别: 1.专业 2.学号 [ ]\b\b"); 232 scanf("%d",&w1); 233 if(w1<1||w1>2) 234 { 235 printf("输入错误!请重新输入!\n\a"); 236 w2=1; 237 } 238 else 239 w2=0; /*防止陷入死循环*/ 240 }while(w2==1); 241 if(w1==1) /*按专业输出*/ 242 { 243 do 244 { 245 k=-1; 246 do 247 { 248 printf("\n请输入专业!\nName:"); 249 scanf("%s",s.major); 250 for(i=0;i<n;i++) 251 if(strcmp(s.major,stu[i].major)==0) 252 { 253 k=i; 254 printf("\n"); 255 printf_one(i); 256 printf("\n"); 257 } 258 if(k==-1) /*没有找到*/ 259 { 260 int o; 261 printf("\n\n没有此专业的信息!\n!"); 262 printf("What do you want to do?\n\t1.继续 2.返回菜单 [ ]\b\b"); 263 scanf("%d",&o); 264 if(o==1) 265 { 266 system("cls"); 267 printf_addr; /*继续输出*/ 268 } 269 else 270 { 271 system("cls"); 272 menu(); 273 } 274 } 275 }while(k==-1); 276 // system("cls"); 277 printf("\nWhat do you want to do next?\n\t1).继续 2).返回菜单 [ ]\b\b"); 278 scanf("%d",&w0); 279 }while(w0==1); 280 system("cls"); 281 menu(); /*不再查找时返回主菜单*/ 282 } 283 else /*按学号输出*/ 284 { 285 do 286 { 287 k=-1; 288 do 289 { 290 printf("\n请输入要输出的学号!\nNum:"); 291 scanf("%s",s.num); 292 for(i=0;i<n;i++) 293 if(strcmp(s.num,stu[i].num)==0) /*找到了*/ 294 { 295 k=i; 296 printf("籍贯:"); puts(stu[k].addr); 297 break; 298 } 299 if(k==-1) /*没有找到*/ 300 { 301 int o; 302 printf("\n\n没有这个学生的信息!\n!"); 303 printf("What do you want to do?\n\t1.继续 2.返回菜单 [ ]\b\b"); 304 scanf("%d",&o); 305 if(o==1) 306 { 307 system("cls"); 308 printf_addr; /*继续输出*/ 309 } 310 else 311 { 312 system("cls"); 313 menu(); 314 } 315 } 316 }while(k==-1); 317 printf("\nWhat do you want to do?\n\t1).继续 2).返回菜单 [ ]\b\b"); 318 scanf("%d",&w0); 319 system("cls"); 320 }while(w0==1); 321 system("cls"); 322 menu();/*不再查找时返回主菜单*/ 323 324 } 325 } 326 } 327 328 329 330 int load() /*打开文件,读取里面的数据*/ 331 { 332 FILE *fp; 333 int i; 334 if((fp=fopen("file.txt","rb"))==NULL) /*读入空文件,rb表示打开一个二进制文件,只允许读数据*/ 335 { 336 printf("\n文件不存在!\n"); 337 return 0; 338 } 339 for(i=0;!feof(fp);i++) /*处理到文件结尾*/ 340 fread(&stu[i],sizeof(struct student),1,fp); /*fread(buffer,size,cout,fp)将磁盘文件中的一批数据作为一个整体一次性读取出来, 341 buffer指定数据块位置,sizeof数据块字节数,count读取次数,fp指向源磁盘文件*/ 342 fclose(fp); 343 return(i-1); 344 } 345 346 void input(int k) /*输入学生信息*/ 347 { 348 getchar(); 349 printf("学号:"); gets(stu[k].num); 350 printf("姓名:"); gets(stu[k].name); 351 printf("性别:"); gets(stu[k].sex); 352 printf("出生年月:"); scanf("%d%d%d",&stu[k].birthday.year,&stu[k].birthday.month,&stu[k].birthday.day); 353 printf("年龄:"); scanf("%d",&stu[k].age); getchar(); 354 printf("籍贯:"); gets(stu[k].addr); 355 printf("系别:"); gets(stu[k].dept); 356 printf("专业:"); gets(stu[k].major); 357 printf("班级:"); gets(stu[k].classs); 358 printf("电话:"); gets(stu[k].phone); 359 printf("学籍状态:");gets(stu[k].status); 360 } 361 362 void save(int n) /*保存学生信息*/ 363 { 364 void exit(); 365 FILE *fp; 366 int i; 367 if((fp=fopen("file.txt","wb"))==NULL) /*只打开或建立一个二进制文件,只允许写数据*/ 368 { 369 printf("\nCan not open file!\n"); 370 exit(0); 371 } 372 for(i=0;i<n;i++) 373 if(stu[i].name[0]!='\0') 374 if(fwrite(&stu[i],sizeof(struct student),1,fp)!=1) /*将一批数据作为一个整体一次性写入磁盘文件*/ 375 printf("文件写入错误!\n"); 376 fclose(fp); 377 } 378 379 void printf_back()/*添加学生信息后显示的“是浏览还是返回”*/ 380 { 381 int w,k=0; 382 void browse(); 383 void menu(); 384 printf("\n\n\t^_^.插入成功. ^_^\n\n"); 385 do 386 { 387 printf("What do you want to do next?\n\n\t1).浏览所有\t2).返回: [ ]\b\b"); 388 scanf("%d",&w); 389 if(w==1) 390 { 391 system("cls"); 392 browse(); 393 } 394 else if(w==2) 395 { 396 system("cls"); 397 menu(); 398 } 399 else 400 printf(" 选择错误!请重新选择!\n\a"); 401 }while(k==0); 402 } 403 404 void insert() /*添加学生信息*/ 405 { 406 int i,n,k,t; 407 FILE *fp; 408 if(!flag) 409 { 410 printf("\n\n\t请先登录!\n\a"); 411 printf("\n\t请按 Enter 键进入登录界面!"); 412 getchar(); 413 getchar(); 414 login(); 415 } 416 else 417 { 418 if((fp=fopen("file.txt","rb"))==NULL) /*读入空文件,rb表示打开一个二进制文件,只允许读数据*/ 419 { 420 printf("How many people do you want to add(1-%d)?:",N-1); 421 n=0; 422 } 423 else 424 { 425 n=load(); 426 printf("How many student do you want to insert (1-%d)?:",N-n-1);/*剩余可插入的个数*/ 427 } 428 429 scanf("%d",&t); 430 while(t>=(N-n-1)||t<1) 431 { 432 printf("输入错误!请重新输入!\n\a"); 433 scanf("%d",&t); 434 } 435 k=n+t; 436 for(i=n;i<k;i++) 437 { 438 printf("\n输入第 %d 个学生学籍信息.\n",i-n+1); 439 input(i); 440 } 441 save(k); /*保存所有学生的信息*/ 442 printf_back(); 443 } 444 } 445 446 void deleter() /*删除*/ 447 { 448 void menu(); 449 if(!flag) 450 { 451 printf("\n\n\t请先登录!\n\a"); 452 printf("\n\t请按 Enter 键进入登录界面!"); 453 getchar(); 454 getchar(); 455 login(); 456 } 457 else 458 { 459 struct student s; 460 int i,n,k,w0,w1; 461 n=load(); 462 do 463 { 464 k=-1; 465 //printf_n(n); /*删除之前先显示所有学生的信息*/ 466 do 467 { 468 printf("\n\n请输入您想要删除的学生的姓名!\nName:"); 469 scanf("%s",s.name); 470 for(i=0;i<n;i++) 471 if(strcmp(s.name,stu[i].name)==0) 472 { 473 k=i; 474 s=stu[i]; 475 } 476 if(k==-1) 477 { 478 int m; 479 printf("\n\n没有这个学生的信息!\n"); 480 printf("What do you want to do next? 1.继续输入 2.返回主菜单 [ ]\b\b"); 481 scanf("%d",&m); 482 if(m==1) 483 deleter(); 484 else 485 { 486 k=0; 487 system("cls"); 488 menu(); 489 } 490 } 491 }while(k==-1); 492 printf_one(k); 493 printf("\n\t确定删除?\n\t1).是 2).返回 [ ]\b\b");/*再次询问是否删除*/ 494 scanf("%d",&w0); 495 if(w0==1) 496 { 497 stu[k].name[0]='\0'; 498 save(n); 499 } 500 else 501 break; 502 printf("\n\t^_^.成功删除^_^.\n"); 503 printf("What do you want to do?\n\t1).继续 2).返回 [ ]\b\b"); 504 scanf("%d",&w1); 505 }while(w1==1); 506 system("cls"); 507 menu(); /*不再删除时返回主菜单,w1!=1*/ 508 } 509 } 510 511 void search() /*查找*/ 512 { 513 void menu(); 514 int w0,k,i,n,w1,w2; 515 struct student s; 516 FILE *fp; 517 if((fp=fopen("file.txt","rb"))!=NULL) /*不是空文件*/ 518 n=load(); 519 do 520 { 521 printf("请选择查找类别: 1.姓名 2.学号 [ ]\b\b"); 522 scanf("%d",&w1); 523 if(w1<1||w1>2) 524 { 525 printf("输入错误!请重新输入!\n\a"); 526 w2=1; 527 } 528 else 529 w2=0; /*防止陷入死循环*/ 530 }while(w2==1); 531 if(w1==1) /*按姓名查找*/ 532 { 533 do 534 { 535 k=-1; 536 do 537 { 538 printf("\n请输入您想要查找的学生的姓名!\nName:"); 539 scanf("%s",s.name); 540 for(i=0;i<n;i++) 541 if(strcmp(s.name,stu[i].name)==0) 542 { 543 k=i; 544 s=stu[i]; 545 } 546 if(k==-1) /*没有找到*/ 547 { 548 int o; 549 printf("\n\n没有这个学生的信息!\n!"); 550 printf("What do you want to do?\n\t1.继续 2.返回菜单 [ ]\b\b"); 551 scanf("%d",&o); 552 if(o==1) 553 { 554 system("cls"); 555 search(); /*继续查找*/ 556 } 557 else 558 { 559 system("cls"); 560 menu(); 561 } 562 } 563 }while(k==-1); 564 system("cls"); 565 printf_one(k); /*找到以后输出这个学生的信息*/ 566 printf("\nWhat do you want to do next?\n\t1).继续 2).返回菜单 [ ]\b\b"); 567 scanf("%d",&w0); 568 }while(w0==1); 569 system("cls"); 570 menu(); /*不再查找时返回主菜单*/ 571 } 572 else /*按学号查找*/ 573 { 574 do 575 { 576 k=-1; 577 do 578 { 579 printf("\n请输入您想要查找的学生的学号!\nNum:"); 580 scanf("%s",s.num); 581 for(i=0;i<n;i++) 582 if(strcmp(s.num,stu[i].num)==0) /*找到了*/ 583 { 584 k=i; 585 s=stu[i]; 586 } 587 if(k==-1) /*没有找到*/ 588 { 589 int o; 590 printf("\n\n没有这个学生的信息!\n!"); 591 printf("What do you want to do?\n\t1.继续 2.返回菜单 [ ]\b\b"); 592 scanf("%d",&o); 593 if(o==1) 594 { 595 system("cls"); 596 search(); /*继续查找*/ 597 } 598 else 599 { 600 system("cls"); 601 menu(); 602 } 603 } 604 }while(k==-1); 605 system("cls"); 606 printf_one(k); /*找到以后输出这个学生的学籍信息*/ 607 printf("\nWhat do you want to do?\n\t1).继续 2).返回菜单 [ ]\b\b"); 608 scanf("%d",&w0); 609 }while(w0==1); 610 system("cls"); 611 menu();/*不再查找时返回主菜单*/ 612 613 } 614 } 615 616 int modify_data(int i) /*修改信息函数*/ 617 { 618 int c,w1; 619 void menu(); 620 do 621 { 622 puts("\n请选择要修改的选项:\n\n1.学号 2.姓名 3.性别 4.出生日期 5.年龄 6.籍贯 7.系别 8.专业 9.班级 10.电话 11.学籍状态 12.所有信息 13.取消并返回"); 623 printf("请选择?: [ ]\b\b\b"); 624 scanf("%d",&c); 625 if(c>13||c<1) 626 { 627 puts("\n选择错误!请重新选择!"); 628 getchar(); 629 } 630 }while(c>13||c<1); 631 do 632 { 633 switch(c) 634 { 635 case 1: printf("学号:"); scanf("%s",stu[i].num); break; 636 case 2: printf("姓名:"); scanf("%s",stu[i].name); break; 637 case 3: printf("性别:"); scanf("%s",stu[i].sex); break; 638 case 4: printf("出生年月:"); scanf("%d/%d/%d",&stu[i].birthday.year,&stu[i].birthday.month,&stu[i].birthday.day); break; 639 case 5: printf("年龄:"); scanf("%d",&stu[i].age);break; 640 case 6: printf("籍贯:"); scanf("%s",stu[i].addr);break; 641 case 7: printf("系别:"); scanf("%s",stu[i].dept);break; 642 case 8: printf("专业:"); scanf("%s",stu[i].major);break; 643 case 9: printf("班级:"); scanf("%s",stu[i].classs);break; 644 case 10: printf("电话:"); scanf("%s",stu[i].phone);break; 645 case 11: printf("学籍状态:"); scanf("%s",stu[i].status);break; 646 case 12: input(i); break; /*修改这个学生的所有信息*/ 647 case 13: menu(); /*返回主菜单*/ 648 649 } 650 puts("\nNow:\n"); 651 printf_one(i); /*输出 修改后 的这个学生的信息*/ 652 printf("\n确定?\n\n\t1).是 2).不,重新修改 3).返回不保存 [ ]\b\b"); 653 scanf("%d",&w1); 654 }while(w1==2); 655 return(w1); /*修改成功并选择1后返回1*/ 656 } 657 658 void modify() /*修改*/ 659 { 660 void menu(); 661 if(!flag) 662 { 663 printf("\n\n\t请先登录!\n"); 664 printf("\n\t请按 Enter 键进入登录界面!"); 665 getchar(); 666 getchar(); 667 login(); 668 } 669 else 670 { 671 struct student s; 672 int i,n,k,w0=1,w1,w2=0; 673 n=load(); 674 do 675 { 676 k=-1; 677 //printf_n(n); /*删除之前先显示所有学生的信息*/ 678 do 679 { 680 printf("\n请输入您想要修改的学生的姓名!\nName:"); 681 scanf("%s",s.name); 682 for(i=0;i<n;i++) 683 if(strcmp(s.name,stu[i].name)==0) /*与其中一个学生匹配*/ 684 { 685 k=i; 686 s=stu[i]; 687 } 688 if(k==-1) /*没有找到输入的学生*/ 689 { 690 int o; 691 printf("\n\n没有这个学生的信息!\n"); 692 printf("What do you want to do?\n\t1.继续 2.返回菜单 [ ]\b\b"); 693 scanf("%d",&o); 694 system("cls"); 695 if(o==1) 696 { 697 698 //modify(); /*继续修改*/ 699 } 700 else 701 { 702 //system("cls"); 703 menu(); 704 } 705 } 706 }while(k==-1); 707 system("cls"); 708 printf_one(k); /*输出这个学生的信息*/ 709 w1=modify_data(k); 710 if(w1==1) /*判断是否修改成功修改*/ 711 { 712 printf("\n\t^_^.修改成功 ^_^.\n\n是否继续?\n\n\t1).是 2).保存返回\t[ ]\b\b"); 713 scanf("%d",&w0); 714 w2=1; 715 } 716 else 717 { 718 w0=0; 719 if(w2==0) 720 stu[k]=s; 721 } 722 if((w0!=1)&&(w2==1)) /*修改成功保存*/ 723 save(n); 724 }while(w0==1); 725 system("cls"); 726 menu();/*不再修改返回主菜单*/ 727 } 728 } 729 730 void browse()/*浏览*/ 731 { 732 void menu(); 733 int n; 734 system("color 5f"); 735 if(!flag) 736 { 737 printf("\n\n\t请先登录!\n\a"); 738 printf("\n\t请按 Enter 键进入登录界面!"); 739 getchar(); 740 getchar(); 741 login(); 742 } 743 else 744 { 745 n=load(); 746 printf_n(n); 747 printf(" 共有 %d 个学生的记录.\n",n); 748 printf("\nPress [ ENTER ] key to back..."); 749 getchar(); 750 system("cls"); 751 menu(); /*返回主函数*/ 752 } 753 } 754 755 756 void welcome() /*欢迎页面*/ 757 { 758 system("color F0"); 759 printf("\n\t ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★\n\n"); 760 puts("\t ※※※※※※※※※※※※※※※※※※※※※※※※※※※"); 761 puts("\t ※※ ※※"); 762 puts("\t ※※ ※※"); 763 puts("\t ※※ 欢迎访问学生学籍管理系统! ※※"); 764 puts("\t ※※ ※※"); 765 puts("\t ※※ ※※"); 766 puts("\t ※※ ※※"); 767 puts("\t ※※ ※※"); 768 puts("\t ※※ 制作人:xxx ※※"); 769 puts("\t ※※ 2018.6 ※※"); 770 puts("\t ※※ ※※"); 771 puts("\t ※※※※※※※※※※※※※※※※※※※※※※※※※※※"); 772 printf("\n\tPress [ Enter ] key to continue……\n"); 773 getchar(); 774 system("cls"); 775 } 776 777 void menu() /*主菜单*/ 778 { 779 int n,w1;/*n为服务种类保存变量,w1为数据错误标志位*/ 780 system("color 2e"); /*system函数改变背景色与前景色*/ 781 printf("\n\t\t\t欢迎使用学生学籍管理系统!\n"); 782 printf("\n"); 783 784 do 785 { 786 puts("\t\t★★★★★★★★ 菜单 ★★★★★★★★"); 787 puts("\t\t 1.登 录 "); 788 puts("\t\t 2.插 入 "); 789 puts("\t\t 3.删 除 "); 790 puts("\t\t 4.查 询 "); 791 puts("\t\t 5.修 改 "); 792 puts("\t\t 6.浏 览 "); 793 puts("\t\t 7.籍 贯 "); 794 puts("\t\t 8.退 出 "); 795 puts("\t\t★★★★★★★★★★★★★★★★★★★★★"); 796 printf("请选择服务种类(1-8) : [ ]\b\b"); 797 scanf("%d",&n); 798 if(n<1||n>8) 799 { 800 system("cls"); 801 printf("选择错误! 请重新选择!\n\a");/*输出错误提示语句并发出警告音*/ 802 w1=1; 803 } 804 else 805 w1=0; 806 }while(w1==1); 807 switch(n) 808 { 809 case 1: login(); break; /*登录*/ 810 case 2: system("cls"); insert(); break; /*插入*/ 811 case 3: system("cls"); deleter(); break; /*删除*/ 812 case 4: system("cls"); search(); break; /*查找*/ 813 case 5: system("cls"); modify(); break; /*修改*/ 814 case 6: system("cls"); browse(); break; /*浏览*/ 815 case 7: system("cls"); printf_addr(); break; /*输出籍贯*/ 816 case 8: printf(" 欢迎再次使用!再见!\n"); exit(0);break; /*退出*/ 817 818 } 819 } 820 821 int main() 822 { 823 welcome(); 824 menu(); 825 return 0; 826 }
效果图
目录菜单
删除学生
插入学生学籍
根据自己需要可以改变功能!
学好C语言,为专业知识的学习有很大好处。努力多学,学好计算机技术