学生信息管理系统
程序员文章站
2023-08-30 18:34:38
1 #include"stdio.h" 2 #include"stdlib.h" 3 #include"string.h" 4 #include"conio.h" 5 typedef struct node 6 { 7 char xh[11]; //学号 8 char xm[10]; //姓名 9 ......
1 #include"stdio.h" 2 #include"stdlib.h" 3 #include"string.h" 4 #include"conio.h" 5 typedef struct node 6 { 7 char xh[11]; //学号 8 char xm[10]; //姓名 9 char xb[3]; //性别 10 int nl; //年龄 11 char dh[12]; //电话 12 char jg[30]; //籍贯 13 float rxcj; //成绩 14 }student; 15 int menu(); 16 void add(); 17 void display(); 18 void dele(); 19 void sort(); 20 void update(); 21 void search(); 22 23 int menu() 24 { 25 system("cls"); 26 char ch[2]; int num1; 27 printf("学生信息管理系统\n"); 28 printf("---------------------\n"); 29 printf("1.学生信息录入\n"); 30 printf("2.学生信息显示\n"); 31 printf("3.学生信息查询\n"); 32 printf("4.学生信息排序\n"); 33 printf("5.学生信息删除\n"); 34 printf("6.学生信息修改\n"); 35 printf("0.退出管理系统\n"); 36 printf("---------------------\n"); 37 printf("请输入你的选择: "); 38 //fflush(stdin); 39 gets_s(ch); 40 num1 = atoi(ch); //将字符串转化为int型的数字 41 return num1; 42 } 43 void add() 44 { 45 student stu; 46 file *fp; 47 if ((fp = fopen("学生基本信息.txt", "a")) == null) 48 { 49 printf("打开文件失败!"); 50 } 51 52 printf("请输入学生的学号:"); 53 scanf("%s", stu.xh); 54 printf("请输入学生的姓名:"); 55 scanf("%s", stu.xm); 56 printf("请输入学生的性别:"); 57 scanf("%s", stu.xb); 58 printf("请输入学生的年龄:"); 59 scanf("%d", &stu.nl); 60 printf("请输入学生的电话:"); 61 scanf("%s", stu.dh); 62 printf("请输入学生的籍贯:"); 63 scanf("%s", stu.jg); 64 printf("请输入学生的成绩:"); 65 scanf("%f", &stu.rxcj); 66 fwrite(&stu, sizeof(student), 1, fp); 67 fclose(fp); 68 //fflush(stdin); 69 getchar(); 70 } 71 void display() 72 { 73 student stu[20]; 74 file *fp; 75 if ((fp = fopen("学生基本信息.txt", "r")) == null) 76 { 77 printf("打开文件失败!"); 78 } 79 printf("输入学生的学号 姓名 性别 年龄 电话 籍贯 入学成绩:\n"); 80 int i, n = 0; 81 for (i = 0; fread(&stu[i], sizeof(student), 1, fp); i++) 82 { 83 n++; 84 } 85 for (i = 0; i<n; i++) 86 { 87 printf("%s %s %s %d %s %s %f\n", stu[i].xh, stu[i].xm, stu[i].xb, stu[i].nl, stu[i].dh, stu[i].jg, stu[i].rxcj); 88 } 89 fclose(fp); 90 } 91 void main(void) 92 { 93 int num; 94 system("color f9"); 95 system("cls"); 96 system("mode con cols=100 lines=30"); //调整系统console控制台显示的宽度和高度,高度为30个字符,宽度为100个字符 97 system("title 学生信息管理系统"); //起标题 98 fflush(stdin); //清空输入缓冲区 99 do 100 { 101 num = menu(); 102 switch (num) 103 { 104 case 1:add(); system("pause"); break; 105 case 2:display(); system("pause"); break; 106 case 3:search(); system("pause"); break; 107 case 4:sort(); system("pause"); break; 108 case 5:dele(); system("pause"); break; 109 case 6:update(); system("pause"); break; 110 case 0:printf("退出\n"); exit(1); system("pause"); break; 111 exit(1); break; 112 } 113 } while (1); 114 } 115 void search() 116 { 117 system("cls"); 118 file *fp; 119 char delxh[11]; 120 student stu[45]; 121 char ch[2]; int num1; 122 printf("\t学生信息查询\n"); 123 printf("\t------------------\n"); 124 printf("\t1.按学号查询\n"); 125 printf("\t2.按姓名查询\n"); 126 printf("\t------------------\n"); 127 printf("请输入你的选择:"); 128 gets_s(ch); 129 num1 = atoi(ch); 130 if (num1 == 1) 131 { 132 if ((fp = fopen("学生基本信息.txt", "r")) == null) 133 { 134 printf("打开文件失败!"); 135 } 136 int i, n = 0; 137 for (i = 0; fread(&stu[i], sizeof(student), 1, fp); i++) 138 { 139 n++; 140 } 141 fclose(fp); 142 printf("请输入要查询的学号:"); 143 gets_s(delxh); 144 for (i = 0; i<n; i++) 145 { 146 if (!strcmp(stu[i].xh, delxh)) 147 { 148 printf("你要查询的学生为:\n"); 149 printf("%s %s %s %d %s %s %6.2f\n", stu[i].xh, stu[i].xm, stu[i].xb, stu[i].nl, stu[i].dh, stu[i].jg, stu[i].rxcj); 150 break; 151 } 152 } 153 } 154 else if (num1 == 2) 155 { 156 if ((fp = fopen("学生基本信息.txt", "r")) == null) 157 { 158 printf("打开文件失败!"); 159 } 160 int i, n = 0; 161 for (i = 0; fread(&stu[i], sizeof(student), 1, fp); i++) 162 { 163 n++; 164 } 165 fclose(fp); 166 printf("请输入要查询的姓名:"); 167 gets_s(delxh); 168 for (i = 0; i<n; i++) 169 { 170 if (!strcmp(stu[i].xm, delxh)) 171 { 172 printf("你要查询的学生为:\n"); 173 printf("%s %s %s %d %s %s %6.2f\n", stu[i].xh, stu[i].xm, stu[i].xb, stu[i].nl, stu[i].dh, stu[i].jg, stu[i].rxcj); 174 break; 175 } 176 } 177 } 178 } 179 void update() 180 { 181 system("cls"); 182 file *fp; 183 int i, j, m = 0, snum; 184 student stu[45]; 185 char ch[2]; int num1; 186 char updatexh[11]; 187 printf("\t学生信息修改\n"); 188 printf("\t------------------\n"); 189 printf("\t1.按学号修改\n"); 190 printf("\t2.按姓名修改\n"); 191 printf("\t------------------\n"); 192 printf("请输入你的选择:"); 193 gets_s(ch); 194 num1 = atoi(ch); 195 if (num1 == 1) 196 { 197 if ((fp = fopen("学生基本信息.txt", "ab+")) == null) 198 { 199 printf("can not open\n"); 200 return; 201 } 202 while (!feof(fp)) //检测文件是否达到哦末尾,出错或者文件指针到了文件末尾(eof)则返回 true,否则返回 false。 203 if (fread(&stu[m], sizeof(student), 1, fp) == 1) 204 m++; 205 if (m == 0) 206 { 207 printf("no record!\n"); 208 fclose(fp); 209 return; 210 } 211 printf("请输入要修改的学号:\n"); 212 gets_s(updatexh); 213 for (i = 0; i<m; i++) // strcmp(const char *s1,const char *s2) 214 if (!strcmp(stu[i].xh, updatexh)) // 当s1<s2时,返回为负数;当s1=s2时,返回值= 0;当s1>s2时,返回正数。 215 { 216 printf("你要修改的学生为:\n"); 217 printf("%s %s %s %d %s %s %6.2f\n", stu[i].xh, stu[i].xm, stu[i].xb, stu[i].nl, stu[i].dh, stu[i].jg, stu[i].rxcj); 218 break; 219 } 220 221 if (i<m) 222 { 223 printf("请输入学生的姓名:"); 224 scanf("%s", &stu[i].xm); 225 printf("请输入学生的性别:"); 226 scanf("%s", &stu[i].xb); 227 printf("请输入学生的年龄:"); 228 scanf("%d", &stu[i].nl); 229 printf("请输入学生的电话:"); 230 scanf("%s", &stu[i].dh); 231 printf("请输入学生的籍贯:"); 232 scanf("%s", &stu[i].jg); 233 printf("请输入学生的成绩:"); 234 scanf("%f", &stu[i].rxcj); 235 } 236 else 237 { 238 printf("can not find!"); 239 getchar(); 240 return; 241 } 242 if ((fp = fopen("学生基本信息.txt", "wb")) == null) 243 { 244 printf("can not open\n"); 245 return; 246 } 247 for (j = 0; j<m; j++)//将新修改的信息写入指定的磁盘文件中 248 if (fwrite(&stu[j], sizeof(student), 1, fp) != 1) 249 //如果成功,该函数返回一个 size_t 对象,表示元素的总数, 250 //该对象是一个整型数据类型。如果该数字与 nmemb 参数不同,则会显示一个错误 251 { 252 printf("can not save!"); 253 _getch(); //一个不回显函数,从控制台读取一个字符,但不显示在屏幕上 254 } 255 fclose(fp); 256 getchar(); //接收回车符,防止直接跳出 257 //fflush(stdin); //没用 258 //char c = getchar(); //此处疑问,为什么用fflush(stdin) 不行,还是会直接退出程序,而用getchar(); 则不会 259 //printf("---%c---", c); //测试发现是一个回车 260 261 262 } 263 else if (num1 == 2) 264 { 265 if ((fp = fopen("学生基本信息.txt", "ab+")) == null) 266 { 267 printf("can not open\n"); 268 return; 269 } 270 while (!feof(fp)) 271 if (fread(&stu[m], sizeof(student), 1, fp) == 1) 272 m++; 273 if (m == 0) 274 { 275 printf("no record!\n"); 276 fclose(fp); 277 return; 278 } 279 printf("请输入要修改的姓名:\n"); 280 gets_s(updatexh); 281 for (i = 0; i<m; i++) 282 if (!strcmp(stu[i].xm, updatexh)) 283 { 284 printf("你要修改的学生为:\n"); 285 printf("%s %s %s %d %s %s %6.2f\n", stu[i].xh, stu[i].xm, stu[i].xb, stu[i].nl, stu[i].dh, stu[i].jg, stu[i].rxcj); 286 break; 287 } 288 289 if (i<m) 290 { 291 printf("请输入学生的学号:"); 292 scanf("%s", &stu[i].xh); 293 printf("请输入学生的性别:"); 294 scanf("%s", &stu[i].xb); 295 printf("请输入学生的年龄:"); 296 scanf("%d", &stu[i].nl); 297 printf("请输入学生的电话:"); 298 scanf("%s", &stu[i].dh); 299 printf("请输入学生的籍贯:"); 300 scanf("%s", &stu[i].jg); 301 printf("请输入学生的成绩:"); 302 scanf("%f", &stu[i].rxcj); 303 } 304 else 305 { 306 printf("can not find!"); 307 getchar(); 308 return; 309 } 310 if ((fp = fopen("学生基本信息.txt", "wb")) == null) 311 { 312 printf("can not open\n"); 313 return; 314 } 315 for (j = 0; j<m; j++)//将新修改的信息写入指定的磁盘文件中 316 if (fwrite(&stu[j], sizeof(student), 1, fp) != 1) 317 { 318 printf("can not save!"); 319 _getch(); 320 } 321 fclose(fp); 322 } 323 324 } 325 326 void dele() 327 { 328 system("cls"); 329 file *fp; 330 char delxh[11]; 331 student stu[45]; 332 char ch[2]; int num1; 333 printf("\t学生信息删除\n"); 334 printf("\t------------------\n"); 335 printf("\t1.按学号删除\n"); 336 printf("\t2.按姓名删除\n"); 337 printf("\t------------------\n"); 338 printf("请输入你的选择:"); 339 gets_s(ch); 340 num1 = atoi(ch); 341 if (num1 == 1) 342 { 343 if ((fp = fopen("学生基本信息.txt", "r")) == null) 344 { 345 printf("打开文件失败!"); 346 } 347 int i, j, n = 0; 348 for (i = 0; fread(&stu[i], sizeof(student), 1, fp); i++) 349 { 350 n++; 351 } 352 fclose(fp); 353 printf("请输入要删除的学号:"); 354 gets_s(delxh); 355 for (i = 0; i<n; i++) 356 { 357 if (!strcmp(stu[i].xh, delxh)) 358 { 359 printf("你要删除的学生为:\n"); 360 printf("%s %s %s %d %s %s %6.2f\n", stu[i].xh, stu[i].xm, stu[i].xb, stu[i].nl, stu[i].dh, stu[i].jg, stu[i].rxcj); 361 break; 362 } 363 } 364 if (i == n) 365 { 366 printf("你要删除的学生没有找到!\n"); 367 } 368 else 369 { 370 char ch; 371 printf("你是否删除(y/n)?\n"); 372 ch = getchar(); 373 getchar(); 374 if (ch == 'y' || ch == 'y') 375 { 376 for (j = i; j<n; j++) 377 stu[j] = stu[j + 1]; 378 n--; 379 if ((fp = fopen("学生基本信息.txt", "w")) == null) 380 { 381 printf("打开文件失败!"); 382 } 383 else 384 { 385 for (i = 0; i<n; i++) 386 { 387 fwrite(stu, sizeof(student), 1, fp); 388 } 389 fclose(fp); 390 printf("删除成功!\n"); 391 } 392 } 393 } 394 395 } 396 if (num1 == 2) 397 { 398 if ((fp = fopen("学生基本信息.txt", "r")) == null) 399 { 400 printf("打开文件失败!"); 401 } 402 int i, j, n = 0; 403 for (i = 0; fread(&stu[i], sizeof(student), 1, fp); i++) 404 { 405 n++; 406 } 407 fclose(fp); 408 printf("请输入要删除的姓名:"); 409 gets_s(delxh); 410 for (i = 0; i<n; i++) 411 { 412 if (!strcmp(stu[i].xm, delxh)) 413 { 414 printf("你要删除的学生为:\n"); 415 printf("%s %s %s %d %s %s %6.2f\n", stu[i].xh, stu[i].xm, stu[i].xb, stu[i].nl, stu[i].dh, stu[i].jg, stu[i].rxcj); 416 break; 417 } 418 } 419 if (i == n) 420 { 421 printf("你要删除的学生没有找到!\n"); 422 } 423 else 424 { 425 char ch; 426 printf("你是否删除(y/y)?\n"); 427 ch = getchar(); 428 getchar(); 429 if (ch == 'y' || ch == 'y') 430 { 431 for (j = i; j<n; j++) 432 stu[j] = stu[j + 1]; 433 n--; 434 if ((fp = fopen("学生基本信息.txt", "w")) == null) 435 { 436 printf("打开文件失败!"); 437 } 438 else 439 { 440 for (i = 0; i<n; i++) 441 { 442 fwrite(&stu, sizeof(student), 1, fp); 443 } 444 fclose(fp); 445 printf("删除成功!\n"); 446 } 447 } 448 } 449 450 } 451 } 452 453 454 455 456 457 458 void sort() 459 { 460 student stu[45]; 461 file *fp; 462 if ((fp = fopen("学生基本信息.txt", "r")) == null) 463 { 464 printf("排序前的数据!\n"); 465 } 466 printf("输入学生的学号 姓名 性别 年龄 电话 籍贯 入学成绩:\n"); 467 int i, n = 0; 468 for (i = 0; fread(&stu[i], sizeof(student), 1, fp); i++) 469 { 470 n++; 471 } 472 for (i = 0; i<n; i++) 473 { 474 printf("%s %s %s %d %s %s %f\n", stu[i].xh, stu[i].xm, stu[i].xb, stu[i].nl, stu[i].dh, stu[i].jg, stu[i].rxcj); 475 } 476 fclose(fp); 477 int j; 478 student temp; 479 for (i = 0; i<n - 1; i++) 480 for (j = 0; j<n - 1 - i; j++) 481 if (stu[j].rxcj<stu[j + 1].rxcj) 482 { 483 temp = stu[j]; 484 stu[j] = stu[j + 1]; 485 stu[j + 1] = temp; 486 } 487 printf("\n\n排序后的数据!\n"); 488 printf("输入学生的学号 姓名 性别 年龄 电话 籍贯 入学成绩:\n"); 489 for (i = 0; i<n; i++) 490 { 491 printf("%s %s %s %d %s %s %f\n", stu[i].xh, stu[i].xm, stu[i].xb, stu[i].nl, stu[i].dh, stu[i].jg, stu[i].rxcj); 492 } 493 file *fp1; 494 if ((fp1 = fopen("学生基本信息.txt", "w")) == null) 495 { 496 printf("打开文件失败!"); 497 } 498 }