图书管理小系统

昨天一朋友要我帮她写个“图书管理小系统”,一时嘴贱就答应了。

要求如下:

看着还可以,昨晚把基本框架写了下,今天写了一下午,接近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 }
View Code

 

posted @ 2017-06-12 21:34  starry_sky  阅读(311)  评论(2编辑  收藏  举报