昨天一朋友要我帮她写个“图书管理小系统”,一时嘴贱就答应了。
要求如下:
看着还可以,昨晚把基本框架写了下,今天写了一下午,接近600行,总算写完了。由于她明天就要交,我就赶了点,很多地方还没写好。
但总体来说也让我对文件输出输入有了更进一步的了解了,不过没有用结构体指针,用了的话应该可以 节约很多内存。看以后有没有时间
去完善它吧。
发几个界面看看:
先把代码贴下:
1 #include <stdio.h> 2 #include <stdlib.h> 3 #include <stddef.h> 4 #include <stdlib.h> 5 #include <string.h> 6 #include <windows.h> 7 #define MAX 20 8 struct Borrow{ 9 char name[MAX]; //用户名 10 int num; // 借书数量 11 int number[MAX]; //书的编号 12 char book[MAX][MAX]; //书名 13 }bor[5000]; 14 15 struct Student{ 16 char name[MAX]; //用户名 17 char password[MAX]; //密码 18 //Borrow book; //借书信息 19 char sex[MAX]; //性别 20 //struct student *next; //结构体指针 21 }stu[5000]; 22 23 struct Book{ 24 int number; //编号 25 char bookName[MAX]; //书名 26 int num; //书的数量 27 }book[10000]; 28 //stu *head; //指针头 29 int i, j, l, n, flag, cnt, k, MAX_BOR, MAX_BOOK; 30 void regist(){ //注册功能 31 system("cls"); 32 FILE *fin,*fout; 33 fin = fopen("user.txt","r+"); 34 char s[20],ss[20],sss[10]; 35 if(fin!=NULL){ 36 while(fscanf(fin,"%s %s %s",stu[i].name,stu[i].password,stu[i].sex)!=EOF){ 37 i++; 38 } 39 } 40 fclose(fin); 41 fout = fopen("user.txt","a+"); 42 system("cls"); 43 do{ 44 printf("请输入用户名:"); 45 scanf("%s",s); 46 for(j = 0; j < i; j ++){ 47 if(!strcmp(s,stu[j].name)){ 48 system("cls"); 49 printf("该用户名已经注册了!"); 50 goto tt; 51 } 52 } 53 printf("\n请输入密码:"); 54 scanf("%s",ss); 55 printf("\n请输入性别(男或女):"); 56 scanf("%s",sss); 57 fprintf(fout,"%s\t%s\t%s\n",s,ss,sss); 58 break; 59 tt:; 60 }while(1); 61 fclose(fout); 62 } 63 64 void login(){ //登入功能 65 n = 3; 66 char s[20],ss[20]; 67 FILE *fin; 68 fin = fopen("user.txt","r+"); 69 i = 0; 70 while(fscanf(fin,"%s %s %s",stu[i].name,stu[i].password,stu[i].sex)!=EOF){ 71 i++; 72 } 73 fclose(fin); 74 flag = 0; 75 system("cls"); 76 do{ 77 printf("\n\n\n\t\t请输入用户名:"); 78 scanf("%s",s); 79 printf("\n\t\t请输入密码 :"); 80 scanf("%s",ss); 81 for(j = 0; j < i; j ++){ 82 if(!strcmp(s,stu[j].name)&&!strcmp(ss,stu[j].password)){ 83 cnt = j; //标记登入的用户下标 84 flag = 1; 85 break; 86 } 87 } 88 if(flag)break; 89 system("cls"); 90 printf("用户名或密码错误!\n"); 91 }while(n--); 92 93 } 94 95 void print(){ //显示用户借书信息 96 void loadBor(); 97 loadBor(); 98 for(j = 0; j < MAX_BOR; j ++){ 99 if(!strcmp(stu[cnt].name,bor[j].name)){ 100 break; 101 } 102 } 103 if(j == MAX_BOR){ 104 printf("|\t\t\t\t\t借书为0。|\n"); 105 }else{ 106 printf("|\t\t已经借的书为:\t\t\t|\n"); 107 if(bor[j].num == 0){ 108 printf("|\t\t\t借书为0.\t\t|\n"); 109 }else{ 110 for(l = 0; l < bor[j].num; l ++){ 111 printf("|\t\t%d\t%s\t\t|\n",bor[j].number[l],bor[j].book[l]); 112 } 113 } 114 printf("|\t\t\t\t\t\t|\n"); 115 116 } 117 printf("|_______________________________________________|\n\n"); 118 } 119 120 void loadBor(){ //加载借书信息 121 FILE *fin; 122 fin = fopen("borrow.txt","r+"); 123 k = 0; 124 while(fscanf(fin,"%s %d",bor[k].name,&bor[k].num)!=EOF){ 125 for(j = 0; j < bor[k].num; j++){ 126 fscanf(fin,"%d %s",&bor[k].number[j],bor[k].book[j]); 127 // printf("%s\t",bor[k].book[j]); 128 } 129 k++; 130 } 131 MAX_BOR = k; 132 fclose(fin); 133 } 134 135 void loadBook(){ //加载图书信息 136 FILE *fin; 137 fin = fopen("book.txt","r+"); 138 k = 0; 139 while(fscanf(fin,"%d %s %d",&book[k].number,book[k].bookName,&book[k].num)!=EOF){ 140 k++; 141 } 142 MAX_BOOK = k; 143 fclose(fin); 144 } 145 146 void writeBor(){ //将借书信息写入文件 147 FILE *fp; 148 fp = fopen("borrow.txt","w"); 149 for(j = 0; j < MAX_BOR; j ++){ 150 fprintf(fp,"%s\t%d\t",bor[j].name,bor[j].num); 151 for(k = 0; k < bor[j].num; k ++){ 152 fprintf(fp,"%d\t%s\t",bor[j].number[k],bor[j].book[k]); 153 } 154 fprintf(fp,"\n"); 155 } 156 fclose(fp); 157 } 158 159 void writeBook(){ //将图书信息写入文件 160 FILE *fp; 161 fp = fopen("book.txt","w"); 162 for(j = 0; j < MAX_BOOK; j ++){ 163 fprintf(fp,"%d\t%s\t%d\n",book[j].number,book[j].bookName,book[j].num); 164 } 165 fclose(fp); 166 } 167 168 void printFun(){ //显示界面 169 system("cls"); 170 printf(" _______________________________________________ \n"); 171 printf("|\t\t欢迎进入图书管理系统!\t\t|\n"); 172 printf("|\t<1>还书\t\t"); 173 printf("<2>借书\t\t\t|\n"); 174 printf("|\t\t\t\t\t\t|\n"); 175 printf("|\t<3>查询图书\t"); 176 printf("<4>删除图书\t\t|\n"); 177 printf("|\t\t\t\t\t\t|\n"); 178 printf("|\t<5>添加图书\t"); 179 printf("<6>修改图书\t\t|\n"); 180 printf("|\t\t\t\t\t\t|\n"); 181 printf("|\t<7>显示图书\t"); 182 printf("<8>刷新\t\t\t|\n"); 183 printf("|\t\t\t\t\t\t|\n"); 184 printf("|\t<9>退出\t\t\t\t\t|\n"); //退出 185 printf("|_______________________________________________|\n\n"); 186 } 187 188 void move(){ //还书功能 189 system("cls"); 190 print(); 191 int m; 192 loadBor(); 193 for(m = 0; m < MAX_BOR; m ++){ 194 if(!strcmp(stu[cnt].name,bor[m].name)){ 195 break; 196 } 197 } 198 if(m== MAX_BOR || bor[m].num == 0){ 199 printf("你当前的借书量为0,不需要还书\n按任意键继续..."); 200 getchar(); 201 getchar(); 202 return; 203 } 204 printf("请输入还书的书号:"); 205 int num; 206 char s[MAX]; 207 scanf("%d",&num); 208 for(j = 0; j < bor[m].num; j ++){ 209 if(num == bor[m].number[j]){ 210 strcpy(s,bor[m].book[j]); 211 break; 212 } 213 } 214 if(j != bor[m].num){ 215 for(; j < bor[m].num-1; j ++){ 216 bor[m].number[j] = bor[m].number[j+1]; 217 strcpy(bor[m].book[j],bor[m].book[j+1]); 218 } 219 bor[m].num--; 220 writeBor(); 221 loadBook(); 222 for(k = 0; k < MAX_BOOK; k ++){ 223 if(num == book[k].number){ 224 book[k].num++; 225 break; 226 } 227 } 228 if(k == MAX_BOOK){ 229 book[k].number = num; 230 strcpy(book[k].bookName,s); 231 book[k].num = 1; 232 MAX_BOOK++; 233 } 234 writeBook(); 235 }else{ 236 printf("请输入正确的书号!\n"); 237 getchar(); 238 getchar(); 239 move(); 240 return; 241 } 242 243 } 244 245 void take(){ //借书功能 246 loadBook(); 247 system("cls"); 248 printf("请输入要借的书的书号:"); 249 int num; 250 scanf("%d",&num); 251 int m; 252 for(m = 0; m < MAX_BOOK; m ++){ 253 if(num == book[m].number){ 254 break; 255 } 256 } 257 if(m == MAX_BOOK){ 258 printf("你输入的书号有误。。。。\n"); 259 getchar(); 260 return; 261 } 262 if(book[m].num != 0){ 263 printf("书号:%d\t书名:“%s”借书成功!!!\n",book[m].number,book[m].bookName); 264 book[m].num--; 265 writeBook(); 266 for(j = 0; j < MAX_BOR; j ++){ 267 if(!strcmp(stu[cnt].name,bor[j].name))break; 268 } 269 if(j == MAX_BOR){ 270 strcpy(bor[j].name,stu[cnt].name); 271 bor[j].num = 0; 272 MAX_BOR++; 273 } 274 bor[j].number[bor[j].num] = num; 275 strcpy(bor[j].book[bor[j].num],book[m].bookName); 276 bor[j].num++; 277 writeBor(); 278 }else{ 279 printf("你想借的“%s”已经被借完了!!!",book[m].bookName); 280 } 281 getchar(); 282 } 283 284 void check(){ //查询图书 285 loadBook(); 286 system("cls"); 287 int choice; 288 printf(" ___________________________________________ \n"); 289 printf("|\t\t查询图书\t\t |\n"); 290 printf("|\t\t\t\t\t |\n"); 291 printf("|\t\t\t\t\t |\n"); 292 printf("|\t书号【1】\t书名【2】\t |\n"); 293 printf("|\t\t\t\t\t |\n"); 294 printf("|\t\t\t\t\t |\n"); 295 printf("|___________________________________________|\n"); 296 printf("\n请输入(0退出):"); 297 scanf("%d",&choice); 298 if(choice == 1){ 299 int num; 300 printf("请输入书号:"); 301 scanf("%d",&num); 302 for(j = 0; j < MAX_BOOK; j ++){ 303 if(num == book[j].number)break; 304 } 305 if(j == MAX_BOOK){ 306 printf("书号为%d的图书不存在!!!",num); 307 }else{ 308 printf("\n书号为%d的信息如下:\n",num); 309 printf("\n\t图书名字为:%s\n\n\t储存数量为:%d\n\n",book[j].bookName,book[j].num); 310 } 311 }else if(choice == 2){ 312 char s[MAX]; 313 printf("请输入书名:"); 314 scanf("%s",s); 315 for(j = 0; j < MAX_BOOK; j ++){ 316 if(!strcmp(s,book[j].bookName))break; 317 } 318 if(j == MAX_BOOK){ 319 printf("书名为“%s”的图书不存在!!!",s); 320 }else{ 321 printf("书名为“%s”的信息如下\n",book[j].bookName); 322 printf("\t书号为:%d\n\t储存数量为:%d\n",book[j].number,book[j].num); 323 } 324 } 325 getchar(); 326 } 327 328 void dele(){ //删除图书 329 system("cls"); 330 printf(" ___________________________________________ \n"); 331 printf("|\t\t删除图书\t\t |\n"); 332 printf("|\t\t\t\t\t |\n"); 333 printf("|\t\t\t\t\t |\n"); 334 printf("|\t书号【1】\t书名【2】\t |\n"); 335 printf("|\t\t\t\t\t |\n"); 336 printf("|\t\t\t\t\t |\n"); 337 printf("|___________________________________________|\n"); 338 printf("请输入(0退出):"); 339 int chioce; 340 scanf("%d",&chioce); 341 loadBook(); 342 if(chioce == 1){ 343 printf("请输入书号:"); 344 int num; 345 scanf("%d",&num); 346 for(j = 0; j < MAX_BOOK; j ++){ 347 if(num == book[j].number)break; 348 } 349 if(j == MAX_BOOK){ 350 printf("你输入的书号有误!!!"); 351 }else{ 352 printf("书号为:%d 书名为“%s”的图书成功删除!!!",book[j].number,book[j].bookName); 353 for(;j < MAX_BOOK-1; j ++){ 354 book[j].num = book[j+1].num; 355 strcpy(book[j].bookName,book[j+1].bookName); 356 book[j].number = book[j+1].number; 357 } 358 MAX_BOOK--; 359 } 360 }else if(chioce == 2){ 361 printf("请输入书名:"); 362 char s[MAX]; 363 scanf("%s",s); 364 for(j = 0; j < MAX_BOOK; j ++){ 365 if(!strcmp(s,book[j].bookName))break; 366 } 367 if(j == MAX_BOOK){ 368 printf("你输入的书名有误!!!"); 369 }else{ 370 printf("书号为:%d 书名为“%s”的图书成功删除!!!",book[j].number,book[j].bookName); 371 for(;j < MAX_BOOK-1; j ++){ 372 book[j].num = book[j+1].num; 373 strcpy(book[j].bookName,book[j+1].bookName); 374 book[j].number = book[j].number; 375 } 376 MAX_BOOK--; 377 } 378 } 379 writeBook(); 380 getchar(); 381 } 382 383 void add(){ //添加图书 384 system("cls"); 385 loadBook(); 386 int num, numb; 387 char s[MAX]; 388 printf("请输入书号:"); 389 scanf("%d",&numb); 390 for(j = 0; j < MAX_BOOK; j ++){ 391 if(numb == book[j].number){ 392 printf("抱歉!您输入的书号已经存在!!!\n按任意键重新输入..."); 393 getchar(); 394 getchar(); 395 add(); 396 return; 397 } 398 } 399 printf("请输入是名:"); 400 scanf("%s",s); 401 for(j = 0; j < MAX_BOOK; j ++){ 402 if(!strcmp(s,book[j].bookName)){ 403 printf("抱歉!您输入的书名已经存在!!!\n按任意键重新输入..."); 404 getchar(); 405 getchar(); 406 add(); 407 return; 408 } 409 } 410 printf("请输入书的数量:"); 411 scanf("%d",&num); 412 book[MAX_BOOK].num = num; 413 book[MAX_BOOK].number = numb; 414 strcpy(book[MAX_BOOK].bookName,s); 415 MAX_BOOK++; 416 writeBook(); 417 printf("书号为:%d\t书名为:%s\t数量为:%d 添加成功!!!",numb,s,num); 418 getchar(); 419 } 420 421 void modify(){ //修改图书 422 loadBook(); 423 system("cls"); 424 int num, numb; 425 char s[MAX]; 426 printf("请输入要修改图书的书号:"); 427 scanf("%d",&num); 428 for(j = 0; j < MAX_BOOK; j ++){ 429 if(num == book[j].number)break; 430 } 431 if(j == MAX_BOOK){ 432 printf("您输入的书号不存在!!!\n任意键继续..."); 433 getchar(); 434 return; 435 } 436 printf("\n书号为:%d\t书名为:%s\t数量为:%d\n",book[j].number,book[j].bookName,book[j].num); 437 printf("\n请输入你要修改后的“书号”、“书名”和“数量”\n输入【0】退出\n"); 438 int flag3 = 0; 439 while(1){ 440 printf("\n【1】书号:"); 441 scanf("%d",&numb); 442 if(numb == 0)return; 443 int m; 444 for(m = 0; m < MAX_BOOK; m ++){ 445 if(numb == book[m].number){ 446 flag3 = 1; 447 break; 448 } 449 } 450 if(flag3)printf("\n该书号已经存在了,请换一个!!!\n"); 451 else break; 452 } 453 flag3 = 0; 454 while(1){ 455 printf("\n【2】书名:"); 456 scanf("%s",s); 457 if(!strcmp("0",s))return; 458 int m; 459 for(m = 0; m < MAX_BOOK; m ++){ 460 if(!strcmp(s,book[m].bookName)){ 461 flag3 = 1; 462 break; 463 } 464 } 465 if(flag3)printf("\n该书名已经存在了,请换一个!!!\n"); 466 else break; 467 } 468 printf("\n【3】数量:"); 469 scanf("%d",&num); 470 book[j].num = num; 471 book[j].number = numb; 472 strcpy(book[j].bookName,s); 473 printf("\n修改成功!!!"); 474 writeBook(); 475 getchar(); 476 } 477 478 void show(){ //显示图书(分屏) 479 loadBook(); 480 FILE *fp; 481 fp = fopen("book.txt","r+"); 482 int l = 0; 483 while(fscanf(fp,"%d %s %d",&book[l].number,book[l].bookName,&book[l].num)!=EOF){ 484 l++; 485 } 486 int con; 487 if(l != 0) printf("书号\t\t书名\t\t数量\n"); 488 for(j = 0; j < l; j ++){ 489 if(j%10 == 0 && j != 0){ 490 printf("退出【1】\t下一页【2】\n请输入:"); 491 scanf("%d",&con); 492 if(con == 1){ 493 break; 494 }else continue; 495 } 496 printf("%d\t\t%s\t\t%d\n",book[j].number,book[j].bookName,book[j].num); 497 } 498 fclose(fp); 499 getchar(); 500 } 501 502 503 //Starry 504 int main() 505 { 506 int choice, flag1 = 0; 507 do{ 508 system("color A"); 509 printf(" _______________________________________________ \n"); 510 printf("|\t\t欢迎进入图书管理系统!\t\t|\n"); 511 printf("|\t\t\t\t\t\t|\n"); 512 printf("|\t\t\t\t\t\t|\n"); 513 printf("|\t\t\t\t\t\t|\n"); 514 printf("|\t注册【1】\t\t登入【2】\t|\n"); 515 printf("|\t\t\t\t\t\t|\n"); 516 printf("|\t\t\t\t\t\t|\n"); 517 printf("|_______________________________________________|\n\n"); 518 if(flag1)printf("\t\t请重新输入:"); 519 else printf("\t\t请输入:"); 520 scanf("%d",&choice); 521 if(choice == 1){ 522 regist(); 523 }else if(choice == 2){ 524 login(); 525 if(!flag){ 526 printf("你已经输入超过三次了!!!"); 527 exit(0); 528 } 529 } 530 flag1 = 1; 531 if(flag)break; 532 system("cls"); 533 }while(1); 534 loadBor(); 535 system("cls"); 536 printf(" _______________________________________________ \n"); 537 printf("|\t\t欢迎进入图书管理系统!\t\t|\n"); 538 printf("|\t\t\t\t\t\t|\n"); 539 printf("|\t\t\t\t\t\t|\n"); 540 printf("|\t欢迎用户:\t%s\t\t\t|\n",stu[cnt].name); 541 printf("|\t当前借书信息是:\t\t\t|\n"); 542 print(); 543 printf("按任意键继续..."); 544 getchar(); 545 int flag2 = 1; 546 while(1){ 547 getchar(); 548 //Sleep(5000); 549 system("cls"); 550 printFun(); 551 if(flag2)printf("请选择:"); 552 else printf("请从1-9中进行选择:"); /*再从1-13中进行选择*/ 553 scanf("%d",&choice); 554 if(choice<1||choice>9){ 555 flag2 = 0; 556 continue; 557 }else flag2 = 1; 558 switch(choice){ 559 case 1: move(); //还书 560 break; 561 case 2: take(); //借书 562 break; 563 case 3: check(); //查询图书 564 break; 565 case 4: dele(); //删除图书 566 break; 567 case 5: add(); //添加图书 568 break; 569 case 6: modify(); //修改图书 570 break; 571 case 7: show(); //显示图书 572 break; 573 case 8: printFun(); //刷新界面 574 break; 575 case 9: exit(1); //退出 576 break; 577 default : break; 578 } 579 printf("按任意键继续..."); 580 } 581 return 0; 582 }
时间: 2025-01-21 22:26:32