zoukankan      html  css  js  c++  java
  • 图书管理小系统

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

    要求如下:

    看着还可以,昨晚把基本框架写了下,今天写了一下午,接近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("
    请输入密码:");
     54         scanf("%s",ss);
     55         printf("
    请输入性别(男或女):");
     56         scanf("%s",sss);
     57         fprintf(fout,"%s	%s	%s
    ",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("
    
    
    		请输入用户名:");
     78         scanf("%s",s);
     79         printf("
    		请输入密码  :");
     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("用户名或密码错误!
    ");
     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("|					借书为0。|
    ");
    105     }else{
    106         printf("|		已经借的书为:			|
    ");
    107         if(bor[j].num == 0){
    108             printf("|			借书为0.		|
    ");
    109         }else{
    110             for(l = 0; l < bor[j].num; l ++){
    111                 printf("|		%d	%s		|
    ",bor[j].number[l],bor[j].book[l]);
    112             }
    113         }
    114         printf("|						|
    ");
    115 
    116     }
    117     printf("|_______________________________________________|
    
    ");
    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	",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	%d	",bor[j].name,bor[j].num);
    151         for(k = 0; k < bor[j].num; k ++){
    152             fprintf(fp,"%d	%s	",bor[j].number[k],bor[j].book[k]);
    153         }
    154         fprintf(fp,"
    ");
    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	%s	%d
    ",book[j].number,book[j].bookName,book[j].num);
    164     }
    165     fclose(fp);
    166 }
    167 
    168 void printFun(){        //显示界面
    169     system("cls");
    170     printf(" _______________________________________________ 
    ");
    171     printf("|		欢迎进入图书管理系统!		|
    ");
    172     printf("|	<1>还书		");
    173     printf("<2>借书			|
    ");
    174     printf("|						|
    ");
    175     printf("|	<3>查询图书	");
    176     printf("<4>删除图书		|
    ");
    177     printf("|						|
    ");
    178     printf("|	<5>添加图书	");
    179     printf("<6>修改图书		|
    ");
    180     printf("|						|
    ");
    181     printf("|	<7>显示图书	");
    182     printf("<8>刷新			|
    ");
    183     printf("|						|
    ");
    184     printf("|	<9>退出					|
    "); //退出
    185     printf("|_______________________________________________|
    
    ");
    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,不需要还书
    按任意键继续...");
    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("请输入正确的书号!
    ");
    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("你输入的书号有误。。。。
    ");
    259         getchar();
    260         return;
    261     }
    262     if(book[m].num != 0){
    263         printf("书号:%d	书名:“%s”借书成功!!!
    ",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(" ___________________________________________ 
    ");
    289     printf("|		查询图书		    |
    ");
    290     printf("|					    |
    ");
    291     printf("|					    |
    ");
    292     printf("|	书号【1】	书名【2】	    |
    ");
    293     printf("|					    |
    ");
    294     printf("|					    |
    ");
    295     printf("|___________________________________________|
    ");
    296     printf("
    请输入(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("
    书号为%d的信息如下:
    ",num);
    309             printf("
    	图书名字为:%s
    
    	储存数量为:%d
    
    ",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”的信息如下
    ",book[j].bookName);
    322             printf("	书号为:%d
    	储存数量为:%d
    ",book[j].number,book[j].num);
    323         }
    324     }
    325     getchar();
    326 }
    327 
    328 void dele(){    //删除图书
    329     system("cls");
    330     printf(" ___________________________________________ 
    ");
    331     printf("|		删除图书		    |
    ");
    332     printf("|					    |
    ");
    333     printf("|					    |
    ");
    334     printf("|	书号【1】	书名【2】	    |
    ");
    335     printf("|					    |
    ");
    336     printf("|					    |
    ");
    337     printf("|___________________________________________|
    ");
    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("抱歉!您输入的书号已经存在!!!
    按任意键重新输入...");
    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("抱歉!您输入的书名已经存在!!!
    按任意键重新输入...");
    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	书名为:%s	数量为:%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("您输入的书号不存在!!!
    任意键继续...");
    433         getchar();
    434         return;
    435     }
    436     printf("
    书号为:%d	书名为:%s	数量为:%d
    ",book[j].number,book[j].bookName,book[j].num);
    437     printf("
    请输入你要修改后的“书号”、“书名”和“数量”
    输入【0】退出
    ");
    438     int flag3 = 0;
    439     while(1){
    440         printf("
    【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("
    该书号已经存在了,请换一个!!!
    ");
    451         else break;
    452     }
    453     flag3 = 0;
    454     while(1){
    455         printf("
    【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("
    该书名已经存在了,请换一个!!!
    ");
    466         else break;
    467     }
    468     printf("
    【3】数量:");
    469     scanf("%d",&num);
    470     book[j].num = num;
    471     book[j].number = numb;
    472     strcpy(book[j].bookName,s);
    473     printf("
    修改成功!!!");
    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("书号		书名		数量
    ");
    488     for(j = 0; j < l; j ++){
    489         if(j%10 == 0 && j != 0){
    490             printf("退出【1】	下一页【2】
    请输入:");
    491             scanf("%d",&con);
    492             if(con == 1){
    493                 break;
    494             }else continue;
    495         }
    496         printf("%d		%s		%d
    ",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(" _______________________________________________ 
    ");
    510         printf("|		欢迎进入图书管理系统!		|
    ");
    511         printf("|						|
    ");
    512         printf("|						|
    ");
    513         printf("|						|
    ");
    514         printf("|	注册【1】		登入【2】	|
    ");
    515         printf("|						|
    ");
    516         printf("|						|
    ");
    517         printf("|_______________________________________________|
    
    ");
    518         if(flag1)printf("		请重新输入:");
    519         else printf("		请输入:");
    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(" _______________________________________________ 
    ");
    537     printf("|		欢迎进入图书管理系统!		|
    ");
    538     printf("|						|
    ");
    539     printf("|						|
    ");
    540     printf("|	欢迎用户:	%s			|
    ",stu[cnt].name);
    541     printf("|	当前借书信息是:			|
    ");
    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
  • 相关阅读:
    3. 无重复字符的最长子串
    24. 两两交换链表中的节点
    2. 两数相加
    23. 合并K个排序链表
    synergy配置 Ubuntu作Server, Win 7作client
    ros与下位机通信常用的c++ boost串口应用
    tar
    发布里程计传感器信息
    ROS TF——learning tf
    在linux终端下打开pdf文件
  • 原文地址:https://www.cnblogs.com/xingkongyihao/p/6995133.html
Copyright © 2011-2022 走看看