• C语言课程设计作业--图书馆系统


    C语言课程设计作业–图书馆系统

    这系统功能挺强大的,管理员密码:666666

    #include<stdio.h>
    #include<stdlib.h>
    #include<math.h>
    #include<string.h>
    #include<time.h>
    #include<malloc.h>
    #include<conio.h>
    struct _BOOK//只有价钱 和状态 已经借书人性别是整形
    {
       char book_name[20];
       char book_num[15];
       double book_prices;
       char author_name[20];
       int _state;
       char Borrower_name[20];
       char Borrower_num[15];
       int Borrower_sex;
       struct _BOOK  *next;
    };
    struct _VIP//借书人的信息
    {
        char vip_name[20];
        char vip_num[15];
        char vip_mm[19];
        int vip_sex;
        int many;
        struct _VIP *next;
    };
    struct _BOOK *head_book;
    struct _VIP *head_vip,*vip=NULL;//该vip是间接地址指针
    int login_state,book_many,vip_many;
    char _num[20],_mm[20],admin_mm[]="123456";//记录用户的登录信息
    int main()
    {
    
        struct _BOOK *creat_book();//ok
        struct _VIP* creat_vip();//ok
        bool check_name(char *s);//
        struct _BOOK* look_book0(char *str);
        void* p_malloc(int a);
        bool add_book();
        void delete_book(struct _BOOK *p,int);
        void revise_book1(struct _BOOK *p,int);
        bool revise_book2(struct _BOOK *p,int);
        void revise_book3(struct _BOOK *p,int);
        void revise_book4(struct _BOOK *p,int);
        bool revise_book5(struct _BOOK *p,int);
        bool revise_book0(struct _BOOK *p,int);
        void look_book1(struct _BOOK *p,int);
        void look_book2(char *name,int);
        void look_book3(char *title,int);
        struct _VIP* look_vip0(char *num);
        void revise_vip1(struct _VIP *p,int);
        void revise_vip2(struct _VIP *p,int);
        void revise_vip3(struct _VIP *p,int);
        void add_vip();
        bool vip_login();
        bool _continue();
        bool borrow_book();
        bool back_book();
        void book_updated();
        void vip_updated();
        void all_book(int);
        void all_vip();
        void reset_book();
        void reset_vip();
        void revise_color();
        head_book=creat_book();//ok
         head_vip=creat_vip();//ok
         void welcome_op();
        void identity_op();
        welcome_op();
        identity_op();
    }
    struct _BOOK *creat_book()//创建一个book信息的链表~导入图书信息//OK//
    {
        struct _BOOK *h,*p,*s;
        void* p_malloc(int);
        int n;//n为图书的个数
        FILE *fp;
        if((fp=fopen("book.txt","rb"))==NULL)
        {
            fp=fopen("book.txt","wb");
            int a=0;
            fwrite(&a,4,1,fp);
            fclose(fp);
            printf("未找到book.txt文件,已经自动创建!,请重新启动该程序
    ");
            exit(1);
        }
        fread(&n,sizeof(int),1,fp);
        book_many=n;
        h=(struct _BOOK*)p_malloc(sizeof(struct _BOOK));
        h->author_name[0]='';
        h->book_name[0]='';
        h->book_num[0]='';
        h->Borrower_name[0]='';
        h->Borrower_num[0]='';
        h->_state=0;
        h->next=NULL;
        p=h;
        for(int i=0;i<n;i++)//
        {
          if((s=(struct _BOOK*)malloc(sizeof(struct _BOOK)))==NULL)
          {
            printf("error!
    ");
            exit(1);
          }
          p->next=s;
          if(fread(s,sizeof(struct _BOOK),1,fp)==EOF)
              break;
          s->next=NULL;
          p=s;
        }//文件读入完成
        fclose(fp);
        head_book=h;
        return h;
    }
    struct _VIP* creat_vip()//~导入vip信息
    {
        void* p_malloc(int);
        struct _VIP *h,*p,*s;
        int n;//n为注册VIP个数
        FILE *fp;
        if((fp=fopen("vip.txt","rb"))==NULL)//准备读取文件
        {
            fp=fopen("vip.txt","wb");
            int a=0;
            fwrite(&a,4,1,fp);
            printf("未找到vip.txt文件,已经自动创建!,请重新启动该程序
    ");
            exit(1);
        }
        fread(&n,sizeof(int),1,fp);
        vip_many=n;
        h=(struct _VIP*)p_malloc(sizeof(struct _VIP));
        h->many=0;
        h->vip_mm[0]='';
        h->vip_name[0]='';
        h->vip_num[0]='';
        h->vip_sex=0;
        h->next=NULL;
        p=h;
        for(int i=0;i<n;i++)
        {
          s=(struct _VIP*)p_malloc(sizeof(struct _VIP));
          p->next=s;
          if(fread(s,sizeof(struct _VIP),1,fp)==EOF)
          {
               break;
          }
           s->next=NULL;
          p=s;
        }//文件读入完成
        fclose(fp);
        head_vip=h;
        return h;
    }
    bool check_mm(char *s)//检查mm是否合法,并且带不符合时的警告
    {
        int len,flag=0;
        len=strlen(s);
        if(len>=18||len<10)
        {
            printf("	*密码长度在10~17位之间!!
    ");
            getch();
            return 1;
        }
        for(int i=0;i<len;i++)
        {
            if( (s[i]>='a'&&s[i]<='z') || (s[i]>='A'&&s[i]<='Z') || s[i]=='_' || (s[i]>='0'&&s[i]<='9') || s[i]=='.')
                continue;
            else
            {
                 flag=1;
                 break;
            }
        }
        if(flag)
        {
            printf("所用密码不合法! 请重新输入
    ");
            getch();
            return 1;
        }
        return 0;
    }
    bool check_name(char *s)//检查名字是否合格,不允许出现空白符就行
    {
        int len,flag=0;
        len=strlen(s);
        if(len>20||len<2)
        {
            printf("	*****名字太短或太长!
    ");
            getch();
            return 1;
        }
        for(int i=0;i<len;i++)
        {
            if(s[i]==' '||s[i]=='	')
            {
                flag=1;
                break;
            }
        }
        if(flag)
        {
            printf("	*****名字不能包含空白符
    ");
            getch();
            return 1;
        }
        return 0;
    }
    bool check_num(char *s)//检查编号是否符合
    {
        int len;
        len=strlen(s);
        if(len!=10)
        {
            printf("	*编号只能是一串十位的数字编号!
    ");
            getch();
            return 1;
        }
        for(int i=0;i<len;i++)
        {
            if(s[i]>='0'&&s[i]<='9')
                continue;
            printf("	*编号只能是一串十位的数字编号!
    ");
            getch();
            return 1;
        }
        return 0;
    }
    struct _BOOK* look_book0(char *str)//通过*编号*,查找对应书编号结构体所在地址的前一个*地址*,如s的前一个地址//没找到对应编号则返回NULL
    {
        bool flag=1;
        struct _BOOK *p,*s;
        p=head_book;
        s=p->next;//对s进行判断
        while(s!=NULL)
        {
            flag=strcmp(s->book_num,str);//0是找到了
            if(!flag)
                break;
            p=s;
            s=p->next;
        }
        if(!flag)
            return p;
        return NULL;
    }
    void * p_malloc(int a)//带警告的malloc
    {
        void *p;
        if((p=malloc(a))==NULL)
        {
            printf("		*****error!
    ");
            getch();
            exit(1);
        }
        return p;
    }
    bool add_book()//书名 作者 编号 价钱//////////////
    {
        bool revise_book0(struct _BOOK *p,int);
        void delete_book(struct _BOOK *p,int);
        void reset_book();
        void reset_vip();
        char *num;
        struct _BOOK *p,*s;
        num=(char*)p_malloc(15);
        s=head_book->next;
        p=(struct _BOOK*)p_malloc(sizeof(struct _BOOK));
        head_book->next=p;
        p->next=s;
        do
        {
            fflush(stdin);
            printf("	请输入新输入书的编号:");
            gets(num);
        }
        while(check_num(num));
        if(look_book0(num)!=NULL)
        {
            printf("	*该书编号已经存在!!
    ");
            getch();
            free(num);
            free(p);
            return 0;
        }
        strcpy(p->book_num,num);
        free(num);
        if(!revise_book0(head_book,1))
        {
            delete_book(head_book,1);
            return 0;
        }
        book_many++;
        reset_book();
        reset_vip();
        printf("		书籍添加成功
    ");
        getch();
        return 1;
    }
    void delete_book(struct _BOOK *p,int sign)//*删除*对应地址的书的信息//间接指针
    {
        void reset_book();
        struct _BOOK *s;
        s=p->next;
        p->next=s->next;
        free(s);//释放s指向的区域//未测试不知道是否会死机;
        book_many--;
        if(!sign)
        {
           printf("		删除成功
    ");
           getch();
        }
    }
    void revise_book1(struct _BOOK *p,int sign)//通过地址*修改*book的书名//参数的对应编号的地址的前一个地址//sign为1时表明在注册 2表示修改的全体参数
    {
        struct _BOOK *s;
        s=p->next;
        char *mod;
        mod=(char*)p_malloc(20);
        fflush(stdin);
        if(sign==1)
            printf("	请输入该书的书名:");
    
        else
            printf("	请输入修改后的书名:");
        do
        {
            gets(mod);
        }
        while(check_name(mod));
        strcpy(s->book_name,mod);
        if(!sign)
        {
            printf("		修改信息成功
    ");
            getch();
        }
    
        free(mod);
    }
    bool revise_book2(struct _BOOK *p,int sign)//通过地址*修改*借书的状态//进入按提示输入/ 0为不在书架
    {
        struct _BOOK *s;
        bool revise_book5(struct _BOOK *p,int);
        s=p->next;
        if(sign==1)
            printf("	请确定所添加的该书的状态0/1(1为在书架,0为不在书架):");
        else
             printf("	请输入修改后的状态0/1(1为在书架,0为不在书架):");
        scanf("%d",&s->_state);
        if(s->_state)
        {
            s->Borrower_name[0]='';
            s->Borrower_num[0]='';
            s->Borrower_sex=0;
            if(!sign)
            {
               printf("		状态信息修改成功
    ");
               getch();
            }
            return 1;
        }
        else
        {
            if(!revise_book5(p,1))
                return 0;
            else
            {
                if(!sign)
                {
                  printf("状态信息修改成功
    ");
                  getch();
                }
                return 1;
            }
        }
    
    }
    void revise_book3(struct _BOOK *p,int sign)//通过地址*修改*书的作者名称
    {
        char *mod;
        mod=(char*)p_malloc(20);
        fflush(stdin);
        do
        {
            if(sign==1)
            printf("	请输入所进该书的作者名:");
        else
            printf("	请输入该书修改后的作者名:");
    
            gets(mod);
        }
        while(check_name(mod));
        p=p->next;
        strcpy(p->author_name,mod);
        if(!sign)
        {
            printf("		修改成功
    ");
            getch();
        }
        free(mod);
    }
    void revise_book4(struct _BOOK *p,int sign)//通过地址*修改*书的价格
    {
        p=p->next;
        if(sign==1)
            printf("	请输入该进图书的价格:");
        else
            printf("	请输入新的价格:");
        scanf("%lf",&p->book_prices);
        if(!sign)
        {
            printf("		价格修改成功
    ");
            getch();
        }
    
    }
    bool revise_book5(struct _BOOK *p,int sign)//通过地址修改书的状态信息//改变该间接指向的用户信息
    {
        struct _VIP *pp,*ss;
        struct _BOOK *s;
        char *mod;
        struct _VIP* look_vip0(char *num);
        mod=(char*)p_malloc(20);//输入用户的号码
        fflush(stdin);
        printf("	请输入该用户的号码:");
        do
        {
            gets(mod);
        }
        while(check_num(mod));
        if((pp=look_vip0(mod))==NULL)//所要操作的VIP的间接指针
        {
            printf("	*****抱歉,该用户编号不存在(返回原来的界面)
    ");
            getch();
            free(mod);
            return 0;
        }
           ss=pp->next;
           s=p->next;
           strcpy(s->Borrower_name,ss->vip_name);
           strcpy(s->Borrower_num,ss->vip_num);
           s->Borrower_sex=ss->vip_sex;
           if(!sign)
           {
              printf("该书用户信息修改成功
    ");
              getch();
           }
           free(mod);
           return 1;
    }
    bool revise_book0(struct _BOOK *p,int sign)//通过地址*修改*书的所有参数//sign 在此中要么为1要么为2
    {
        revise_book1(p,sign);
        revise_book4(p,sign);
        revise_book3(p,sign);
        if(!revise_book2(p,sign))
            return 0;
        return 1;
    }
    void look_book1(struct _BOOK *p,int sign)//通过地址*输出*书的基本*信息*//0代表基本信息 1代表详细信息***************
    {
        p=p->next;
        printf("《%-20s》	%-18s	%-20s	%-20.2lf	",p->book_name,p->book_num,p->author_name,p->book_prices);
        if(p->_state)
            printf("%-20s","在架");
        else
            printf("%-20s","不在架");
        if(!sign)
            printf("
    ");
        else
        {
            printf("%-20s	%-20s
    ",p->Borrower_name,p->Borrower_num);
        }
    }
    void look_book2(char *name,int sign)//通过作者名*输出*书的基本*信息*
    {
        int flag=0;
        struct _BOOK *p,*s;
        p=head_book;
        s=p->next;
        while(s!=NULL)
        {
            if(!strcmp(s->author_name,name))
            {
                look_book1(p,sign);
                flag++;
            }
            p=s;
            s=p->next;
        }
        if(!flag)
          printf("
    
    抱歉,此书库没有该作者所创作的书...................................
    ");
        else
          printf("
    
    以上共有%d个查询结果.....................................
    ",flag);
        getch();
    }
    void look_book2_(int sign)//带提示输入 book2//OK
    {
        char *mod;
        mod=(char*)p_malloc(20);
        fflush(stdin);
        do
        {
            printf("	请输入作者名:");
            gets(mod);
        }
        while(check_name(mod));
        look_book2(mod,sign);
        free(mod);
    }
    void look_book3(char *title,int sign)//通过书名*输出*书的基本*信息*//OK
    {
        struct _BOOK *p,*s;
        int flag=0;
        p=head_book;
        s=p->next;
        while(s!=NULL)
        {
            if(!strcmp(s->book_name,title))
            {
                look_book1(p,sign);
                flag++;
            }
            p=s;
            s=p->next;
        }
        if(!flag)
            printf("
    
    抱歉,此书库没有该书......................
    ");
        else
            printf("
    
    以上共有%d个查询结果......................
    ",flag);
        getch();
    }
    void look_book3_(int sign)//带提示的 书名 信息//OK
    {
        char *mod;
        mod=(char*)p_malloc(20);
        fflush(stdin);
        do
        {
            printf("	请输入书名:");
            gets(mod);
        }
        while(check_name(mod));
        look_book3(mod,sign);
        free(mod);
    }
    void look_book4(int sign)//带提示的 编号找到信息//OK
    {
        struct _BOOK *p;
        char *mod;
        mod=(char*)p_malloc(20);
        fflush(stdin);
        do
        {
            printf("	请输入该书的编号:");
            gets(mod);
        }
        while(check_num(mod));
        p=look_book0(mod);
        if(p==NULL)
        {
            printf("	*该书编不存在!!!
    ");
            getch();
            free(mod);
            return;
        }
        look_book1(p,sign);
        getch();
        free(mod);
    
    }
    struct _VIP* look_vip0(char *num)//通过*vip号码* *找到*对应地址的*前一个地址*
    {
        struct _VIP *p,*s;
        int flag=0;
        p=head_vip;
        s=p->next;
        while(s!=NULL)
        {
            if(!strcmp(s->vip_num,num))
            {
                flag=1;
                break;
            }
            p=s;
            s=p->next;
        }
        if(flag)
            return p;
        else
            return NULL;
    }
    void revise_vip1(struct _VIP *p,int sign)//通过地址*修改*vip性别
    {
        p=p->next;
        printf("	请确认您的性别0/1(0男 1女):");
        scanf("%d",&p->vip_sex);
        fflush(stdin);
        if(!sign)
        {
          printf("		性别修改成功
    ");
          getch();
        }
    
    }
    void revise_vip2(struct _VIP *p,int sign)//通过地址*修改*密码
    {
        char *mod;
        mod=(char*)p_malloc(20);
        p=p->next;
        fflush(stdin);
        do
        {
          if(sign)
            printf("	请设置您的密码:");
          else
            printf("	请输入您要设置的密码:");
          gets(mod);
        }
        while(check_mm(mod));
        strcpy(p->vip_mm,mod);
        strcpy(_mm,mod);
        if(!sign)
        {
         printf("		密码修改成功
    ");
         getch();
        }
        free(mod);
    
    }
    void revise_vip3(struct _VIP *p,int sign)//通过地址*修改*昵称
    {
        p=p->next;
        char *mod;
        mod=(char*)p_malloc(20);
        fflush(stdin);
        do
        {
            printf("	请输入您要设置的昵称:");
            gets(mod);
        }
        while(check_name(mod));
        strcpy(p->vip_name,mod);
        if(!sign)
        {
        printf("		昵称修改成功
    ");
        getch();
        }
        free(mod);
    }
    void add_vip()//账号 密码 性别 昵称
    {
        char *num;
        void reset_book();
        void reset_vip();
        struct _VIP *p,*s;
        num=(char*)p_malloc(20);
        s=head_vip->next;
        p=(struct _VIP*)p_malloc(sizeof(struct _VIP));
        head_vip->next=p;
        p->next=s;
        fflush(stdin);
        do
        {
            printf("	请输入您的学号(工号):");
            gets(num);
        }
        while(check_num(num));
        if(look_vip0(num)!=NULL)
        {
            printf("	*此号码已经存在!!
    ");
            getch();
            free(num);
            free(p);
            return ;
        }
        strcpy(p->vip_num,num);
        free(num);
        revise_vip1(head_vip,1);
        revise_vip2(head_vip,1);
        revise_vip3(head_vip,1);
        p->many=0;
        vip_many++;
        reset_book();
        reset_vip();
        printf("		账号注册成功请注意保管
    ");
        getch();
    }
    bool vip_login()//登陆 登陆成功返回1 失败返回0//没有该账号//密码错误,
    {
        struct _VIP *p,*s;
        fflush(stdin);
        do
        {
          printf("	请输入您的账号:");
          gets(_num);
        }
        while(check_num(_num));
        do
        {
        printf("	请输入您的密码:");
        gets(_mm);
        }
        while(check_mm(_mm));
        if((p=look_vip0(_num))==NULL)
        {
            login_state=0;
            printf("	*****没有该账号
    ");
            getch();
            return 0;
        }
        else//找到对应的账号
        {
            s=p->next;
            if(strcmp(s->vip_mm,_mm))
            {
               login_state=0;
               printf("密码错误
    ");
               getch();
               return 0;
            }
            login_state=1;
            printf("登陆成功
    ");
            getch();
            vip=p;//信息导入
            return 1;
        }
    }
    bool _continue()//通过发送是否继续,并且加以用户的判断返回对应值
    {
        char mod;
        fflush(stdin);
        printf("			continue(y/n)?:");
        mod=getchar();
        if(mod=='y'||mod=='Y')
            return 1;
        return 0;
    }
    bool borrow_book()//借书 借书成功返回1 失败返回0  ///*通过提示输入编号来借书*//不在书架,或者编号不存在返回0
    {
        char *num;
        struct _BOOK *p;
        struct _VIP *vvip;
        void reset_book();
        void reset_vip();
        void login_state2();
        int flag=0;
        num=(char*)p_malloc(20);
        do
        {
            fflush(stdin);
            printf("	请输入所借书的索书号:");
            gets(num);
            if(!check_num(num))
            {
                flag=1;
                break;
            }
            printf("	*****您输入的编号不合法!
    ");
            getch();
        }
        while(_continue());
        if(!flag)
        {
            free(num);
            return 0;
        }
        if((p=look_book0(num))==NULL)
        {
            printf("		抱歉没有找到该编号对应的书
    ");
            getch();
            free(num);
            return 0;
        }
        p=p->next;//找到对应编号对应的书
        vvip=vip->next;
        if(!p->_state)
        {
             printf("		抱歉该编号对应的书不在书架
    ");
             getch();
             free(num);
             return 0;
        }
        p->_state=0;//借书成功
        strcpy(p->Borrower_name,vvip->vip_name);
        strcpy(p->Borrower_num,vvip->vip_num);
        p->Borrower_sex=vvip->vip_sex;
        vvip->many++;
        reset_book();
        reset_vip();
        login_state2();
        printf("		借书成功
    ");
        getch();
        free(num);
        return 1;
    }
    bool back_book()//还书 通过对应的编号还书//如果用户不想输入或者书编对应的借书人不是自己//或者在书架 /
    {
        struct _BOOK *p;
        struct _VIP *vvip;//中间用一下
        void login_state2();
        void reset_book();
        void reset_vip();
        char *num;
        int flag=0;
        num=(char*)p_malloc(20);
        do
        {
            fflush(stdin);
            printf("	请输入所还书的书编号:");
            gets(num);
            if(!check_num(num))
            {
                flag=1;
                break;
            }
        }
        while(_continue());
        if(!flag)
        {
            free(num);
            return 0;
        }
        if((p=look_book0(num))==NULL)
        {
            printf("	*此书编不存在!!!
    ");
            getch();
            free(num);
            return 0;
        }
        p=p->next;//有该书
        vvip=vip->next;
        if(strcmp(p->Borrower_num,vvip->vip_num))
        {
           printf("抱歉,您未借此编号的书
    ");
           getch();
           free(num);
           return 0;
        }
        p->_state=1;
        p->Borrower_name[0]='';
        p->Borrower_num[0]='';
        vvip->many--;
        free(num);
        reset_book();
        reset_vip();
        login_state2();
        printf("		还书成功
    ");
        getch();
        return 1;
    }
    void book_updated()//把所有数据保存
    {
        struct _BOOK *p,*s;
        FILE *fp;
        p=head_book;
        s=p->next;
        if((fp=fopen("d:\bookinformation\book.txt","wb"))==NULL)
        {
           printf("open file:book error!!
    ");
           exit(1);
        }
        fwrite(&book_many,sizeof(int),1,fp);
        while(s!=NULL)
        {
            fwrite(s,sizeof(struct _BOOK),1,fp);
            p=s;
            s=p->next;
        }
        fclose(fp);
    }
    void vip_updated()//vip数据保存
    {
        struct _VIP *pp,*ss;
        FILE *fp;
        pp=head_vip;
        ss=pp->next;
        if((fp=fopen("d:\bookinformation\vip.txt","wb"))==NULL)//准备读取文件
        {
            printf("open file:vip error!!
    ");
            exit(1);
        }
        fwrite(&vip_many,sizeof(int),1,fp);
        while(ss!=NULL)
        {
            fwrite(ss,sizeof(struct _VIP),1,fp);
            pp=ss;
            ss=pp->next;
        }
        fclose(fp);
    }
    void all_book(int sign)//输出所有书的基本信息
    {
        system("cls");
        struct _BOOK *p,*s;
        void print_biao();
        void print_biao2();
        p=head_book;
        s=p->next;
        if(!sign)
          print_biao();
        else
          print_biao2();
         while(s!=NULL)
        {
            look_book1(p,sign);
            p=s;
            s=p->next;
        }
        printf("
    
    以上共有%d个结果......................
    ",book_many);
        getch();
    }
    void print_biao()//输出一个book信息表头
    {
        printf("%-247s	%-20s	%-20s	%-20s	%-20s
    
    ","书名","编号","作者","价格","状态");
    }
    void print_biao2()//输出一个详细书籍信息的表头
    {
        printf("%-24s	%-20s	%-20s	%-20s	%-20s%-20s	%-20s
    
    ","书名","编号","作者","价格","状态","Borrow name","Borrow num");
    }
    void all_vip()//输出所有VIP的基本信息 测试用
    {
        struct _VIP *pp,*ss;
        pp=head_vip;
        ss=pp->next;
        while(ss!=NULL)
        {
            printf("nick:%20s	num:%20s	mm:%20s	sex: ",ss->vip_name,ss->vip_num,ss->vip_mm);
            if(ss->vip_sex)
                printf("女
    ");
            else
                printf("男
    ");
            pp=ss;
            ss=pp->next;
        }
        puts("—————————————————————————————————————————————————————");
        printf("
    
    以上共有%d个结果.........................
    ",vip_many);
        getch();
    }//2
    void free_book()//释放book 链表内存
    {
        struct _BOOK *p,*s;
        p=head_book;
        s=p->next;
        while(s!=NULL)
        {
            free(p);
            p=s;
            s=p->next;
        }
        free(p);
    }
    void free_vip()//释放vip链表内存
    {
        struct _VIP *pp,*ss;
        pp=head_vip;
        ss=pp->next;
        while(ss!=NULL)
        {
            free(pp);
            pp=ss;
            ss=pp->next;
        }
        free(pp);
        login_state=0;
    }
    void reset_book()//用在已经打开链表的情况
    {
        book_updated();
        free_book();
        creat_book();
    }
    void reset_vip()
    {
        vip_updated();
        free_vip();
        creat_vip();
    }
    void welcome_op()//OK  欢迎界面
    {
        system("cls");
        puts("			-----------------------------------------
    ");
        puts("			----------欢迎进入图书信息管理系统-------
    ");
        puts("			-----------------------------------------
    ");
        getch();
    }
    void identity_op()// //选择用户界面
    {
        void _tourist();
        void _vip();
        void _administrator();
        void revise_color();
        char flag=0;
        do
        {
        system("cls");
        puts("			-----------------------------------------
    ");
        puts("			① 游客    
    ");
        puts("			② 会员    
    ");
        puts("			③ 管理员  
    ");
        puts("			④ 调色人员
    ");
        puts("
    
    
    ");
        fflush(stdin);
        printf("		请确认您的身份:[ ]");
        flag=getchar();
        switch(flag)
        {
        case '1':_tourist();break;
        case '2':if(vip_login()) _vip();break;//登陆成功才可进入vip页面
        case '3':_administrator();break;
        case '4':revise_color();break;
            default : fflush(stdin);puts("		您的输入有误,请重新输入.
    ");puts("plese enter any key return 
    ");getch();
        }
        }
        while(1);//为了减少空间复杂度
    }
    void _tourist()//OK//游客身份的界面//有BUg  同时输入123时只取第一个
    {
       char flag=0;
        do
       {
        system("cls");
        puts("	尊敬的游客您好:
    ");
        puts("
    
    ");
        puts("			1.查看所有书籍信息
    ");
        puts("			2.根据书名查看信息
    ");
        puts("			3.根据作者名查看书籍信息
    ");
        puts("			4.根据编号查看书籍信息
    ");
        puts("			5.返回上一界面
    ");
        puts("			6.注册会员
    ");
        puts("			7.退出系统
    ");
        puts("
    
    
    ");
        fflush(stdin);
        printf("		请输入您要选的功能:[ ]");
        flag=getchar();
        switch(flag)
        {
        case '1':all_book(0);break;
        case '2':look_book3_(0);break;
        case '3':look_book2_(0);break;
        case '4':look_book4(0);break;
        case '5':return;
        case '6':add_vip();break;
        case '7':exit(0);
            default : fflush(stdin);puts("	*****您的输入有误,请重新输入.
    ");getch();
        }
       }
       while(1);
    }
    void _vip()//会员身份的界面//进入就已经登陆 //ok
    {
        char flag=0;
       void revise_vip();
       void look_vip(struct _VIP *pp,int);
       do
       {
        system("cls");
        puts("	尊敬的会员您好:
    ");
        puts("			1.查看所有书籍信息
    ");
        puts("			2.根据书名查看信息
    ");
        puts("			3.根据作者名查看书籍信息
    ");
        puts("			4.根据编号查看书籍信息
    ");
        puts("			5.借书
    ");
        puts("			6.还书
    ");
        puts("			7.查看个人信息
    ");
        puts("			8.个人信息修改
    ");
        puts("			9.退出登陆
    ");
        fflush(stdin);
        printf("		请输入您要选的功能:[ ]");
        flag=getchar();
        switch(flag)
        {
        case '1':all_book(0);break;
        case '2':look_book3_(0);break;
        case '3':look_book2_(0);break;
        case '4':look_book4(0);break;
        case '5':borrow_book();break;
        case '6':back_book();break;
        case '7':look_vip(vip,0);break;
        case '8':revise_vip();break;
        case '9':login_state=0;vip=NULL;return;
            default : fflush(stdin);puts("	****您的输入有误,请重新输入.
    ");getch();
        }
       }
       while(1);
    }
    void _administrator()//管理员身份
    {
        char mod[20];
        void revise_book_();
        void look_vip1();
        void delete_vip1();
        void delete_vip(struct _VIP *pp);
        void delete_book1();
        printf("请输入管理员密码:");
        scanf("%s",mod);
        if(strcmp(mod,admin_mm))
        {
            puts("		密码错误!");
            getch();
            return ;
        }
        do
       {
        char flag=0;
        system("cls");
        puts("	管理员您好:
    ");
        puts("
    
    ");
        puts("			1.查看所有书籍的详细信息
    ");
        puts("			2.根据书名查看详细信息
    ");
        puts("			3.根据作者名查看书籍详细信息
    ");
        puts("			4.根据编号查看书籍详细信息
    ");
        puts("			5.查看所有vip会员信息
    ");
        puts("			6.查看某一会员的信息
    ");
        puts("			7.删除某一会员的信息
    ");
        puts("			8.添加书籍
    ");
        puts("			9.删除书籍
    ");
        puts("			a.修改某一书籍的信息
    ");
        puts("			b.返回上一界面
    ");
        puts("			c.退出系统
    ");
        fflush(stdin);
        printf("		请输入您要选的功能:[ ]");
        flag=getchar();
        switch(flag)
        {
        case '1':all_book(1);break;
        case '2':look_book3_(1);break;
        case '3':look_book2_(1);break;
        case '4':look_book4(1);break;
        case '5':all_vip();break;
        case '6':look_vip1();break;
        case '7':delete_vip1();break;
        case '8':add_book();break;
        case '9':delete_book1();break;
        case 'a':revise_book_();break;
        case 'b':return;
        case 'c':exit(0);
            default : fflush(stdin);puts("	*****您的输入有误,请重新输入.
    ");getch();
        }
       }
        while(1);
    }
    void revise_vip()//修改vip的所有信息
    {
        void look_vip(struct _VIP *pp,int);
        void login_state2();
        struct _VIP *pp;
        pp=vip;
        look_vip(pp,1);
        revise_vip1(pp,1);
        revise_vip2(pp,1);
        revise_vip3(pp,1);
        reset_book();
        reset_vip();
        login_state2();
        puts("		信息修改成功
    ");
        getch();
    }
    void look_vip(struct _VIP *pp,int sign)//间接地址查看信息
    {
        pp=pp->next;
        if(!sign)
           printf("您的个人信息:
    
    ");
        else if(sign==1)
            printf("您此时的个人信息:
    
    ");
        else
            printf("该用户的个人信息:
    
    ");
        printf("nick:%20s	num:%20s	mm:%20s	性别: ",pp->vip_name,pp->vip_num,pp->vip_mm);
        if(pp->vip_sex)
            printf("女
    
    ");
        else
            printf("男
    
    ");
        if(!sign)
            getch();
    }
    void login_state2()//不带提示信息的重新登陆VIP
    {
        struct _VIP *pp,*ss;
        pp=head_vip;
        ss=pp->next;
        while(ss!=NULL)
        {
            if(!strcmp(ss->vip_num,_num))
            {
                login_state=1;
                vip=pp;
                return;
            }
            pp=ss;
            ss=pp->next;
        }
    }
    void look_vip1()//带查看某一会员信息
    {
        struct _VIP *pp;
        char *num;
        num=(char*)p_malloc(20);
        fflush(stdin);
        do
        {
            printf("		请输入所要查看会员的账号:");
            gets(num);
        }
        while(check_num(num));
       if((pp=look_vip0(num))==NULL)
          {
            printf("	*****该会员不存在!
    ");
            getch();
            free(num);
            return ;
          }
        else
        {
            pp=pp->next;
            printf("nick:%20s	num:%20s	mm:%20s	sex: ",pp->vip_name,pp->vip_num,pp->vip_mm);
            if(pp->vip_sex)
                printf("女
    ");
            else
                printf("男
    ");
            getch();
            free(num);
            return;
        }
    }
    void delete_vip1()//带提示删除会员信息
    {
        struct _VIP *pp;
        char *num;
        void delete_vip(struct _VIP *pp);
        num=(char*)p_malloc(20);
        fflush(stdin);
        do
        {
            printf("		请输入所要删除会员的账号:");
            gets(num);
        }
        while(check_num(num));
       if((pp=look_vip0(num))==NULL)
          {
            printf("	*****该会员不存在!
    ");
            getch();
            free(num);
            return ;
          }
        else
        {
            look_vip(pp,2);
            delete_vip(pp);
            printf("		删除成功
    ");
            getch();
            free(num);
            return;
        }
    }
    void delete_vip(struct _VIP *pp)//根据间接地址删除会员信息
    {
        struct _VIP *ss;
        ss=pp->next;
        pp->next=ss->next;
        free(ss);
        vip_many--;
        reset_vip();
    }
    void delete_book1()//带提示的删除某一书籍 1表示还书 0表示删除书的操作
    {
        struct _BOOK *p;
        char *num;
        num=(char*)p_malloc(20);
        fflush(stdin);
        do
        {
            printf("请输入所要删除的书编号:");
            gets(num);
        }
        while(check_num(num));
        if((p=look_book0(num))==NULL)
        {
            free(num);
            return;
        }
        else
        {
            printf("该书的信息为:
    
    ");
            print_biao2();
            look_book1(p,2);
            delete_book(p,1);
            reset_book();
            reset_vip();
            printf("该书已从书库移除
    ");
            getch();
            free(num);
            return;
        }
    }
    void revise_book_()//带提示的修改书的全部参数
    {
        struct _BOOK *p;
        char *num;
        num=(char*)p_malloc(20);
        fflush(stdin);
        do
        {
            printf("	请输入所修改书的编号:");
            gets(num);
        }
        while(check_num(num));
        if((p=look_book0(num))==NULL)
        {
            printf("	*该书编号不存在!!!
    ");
            getch();
            free(num);
            return;
        }
        else
        {
            printf("该书的信息:
    
    ");
            print_biao2();
            look_book1(p,1);
            if(!revise_book0(p,2))
            {
                free(num);
                return;
            }
            else
            {
                free(num);
                reset_book();
                reset_vip();
                printf("		该书的所有参数修改成功
    ");
                getch();
                return;
            }
        }
    }
    void revise_color()
    {
        system("cls");
        char a[2],b[2],color[10]="color ";
        puts("			0 = 黑色
    ");
        puts("			1 = 蓝色
    ");
        puts("			2 = 绿色
    ");
        puts("			3 = 湖蓝色
    ");
        puts("			4 = 红色
    ");
        puts("			5 = 紫色
    ");
        puts("			6 = 黄色
    ");
        puts("			7 = 白色
    ");
        puts("			8 = 灰色
    ");
        puts("			9 = 淡蓝色
    ");
        puts("			A = 淡绿色
    ");
        puts("			B = 淡浅绿色
    ");
        puts("			C = 淡红色
    ");
        puts("			D = 淡紫色
    ");
        puts("			E = 淡黄色
    ");
        puts("			F = 亮白色
    
    
    ");
        puts("	原色   窗口色选0,字体颜色选7");
        puts("	白枫色 窗口色选f,字体颜色选4");
        puts("	请输入窗口背景色  窗口字体颜色(用空格隔开):
    ");
        scanf("%s",a);
        scanf("%s",b);
        if(((a[0]>='0'&&a[0]<='9')||(a[0]>='A'&&a[0]<='F')||(a[0]>='a'&&a[0]<='f'))&&((b[0]>='0'&&b[0]<='9')||(b[0]>='A'&&b[0]<='F')||(b[0]>='a'&&b[0]<='f')))
        {
            if(a[0]==b[0])
            {
                printf("You can't choose the same color
    ");
                getch();
            }
    
            else
            {
                color[6]=a[0];
                color[7]=b[0];
                color[8]='';
                system(color);
            }
        }
        else
        {
            printf("输入格式错误
    ");
            getch();
        }
        return;
    }
    
    
    
  • 相关阅读:
    new和base的语法
    js常用代码
    无法识别connectionStrings
    DataTable
    字符串的操作时间格式化
    Facade外观模式(转载cnblogs)
    ArrayList下的循环绑定和循环删除
    自定义属性与事件委托相结合的实例
    泛型 开放类型和构造类型(基础学习)
    C#策略模式 摘自jspcool
  • 原文地址:https://www.cnblogs.com/dchnzlh/p/10427254.html
Copyright © 2020-2023  润新知