其他分享
首页 > 其他分享> > 期末c语言大实训图书管理系统

期末c语言大实训图书管理系统

作者:互联网

本次期末实训历经八天终于做完了,感觉对于能力的提升还是蛮大的,不管是对于代码能力还是各个方面来讲,也让自己看到了不足之处。话不多说直接上源码。

链接:https://pan.baidu.com/s/1I0gB-9WMc52gf5-pFWBlPw
提取码:z1in

系统使用了链表来储存数据,并且使用了easyx制作了可视化界面并添加了鼠标操作。系统本身并没有什么优化,所以代码量很多,后期可能会做一些算法优化等等。

person.h 头文件

#define _CRT_SECURE_NO_WARNINGS 
#include<stdio.h>
#include<stdlib.h>
#include<iostream>
#include<conio.h>
#include<windows.h>
#include<graphics.h>
#include<time.h>
/*
int time()
{
    time_t timep;
    struct tm* p;
    time(&timep);
    p = gmtime(&timep);
    printf("%d\n", p->tm_year);   //年
    printf("%d\n", p->tm_mon);     //月
    printf("%d\n", p->tm_mday);     //日
    printf("%d\n", 8 + p->tm_hour);     //小时
    printf("%d\n", p->tm_min);     //分钟
}*/

struct brrowbook
{
    char name[30];
};

struct zhanghao
{
    char schoolnumber[30];
    char name[30];
    char sex[20];
    brrowbook book[3];
    int many;     //借阅的图书数量
};

struct personmessage  //登录信息
{
    struct zhanghao zhanghao;      //信息
    char password[20];     //密码
};

struct node_pe      //创建链表储存数据
{
    struct personmessage data;
    struct node_pe* next;    //指向下一个数据
};

struct node_pe* creatpehead()      //定义一个node*类型的函数,用来储存链表信息
{
    struct node_pe* peheadnode = (struct node_pe*)malloc(sizeof(struct node_pe));
    //此时headnote是结构体变量,然后初始化
    peheadnode->next = NULL;
    return peheadnode;
}

struct node_pe* creatpenode(struct personmessage data)    //创建结点,为插入做准备
{
    struct node_pe* penewnode = (struct node_pe*)malloc(sizeof(struct node_pe));
    penewnode->data = data;
    penewnode->next = NULL;
    return penewnode;
};

void printflist(struct node_pe* peheadnode)   //打印链表
{
    struct node_pe* pepmove = peheadnode->next;
    while (pepmove != NULL)     //一直打印直至为空(也说明数据打印完毕)
    {
        printf("请输入读者的学号");
        scanf_s("%s", pepmove->data.zhanghao.schoolnumber);
        printf("请输入读者的姓名");
        scanf_s("%f", pepmove->data.zhanghao.name);
        printf("请输入读者的性别");
        scanf("%s", pepmove->data.zhanghao.sex);
        pepmove = pepmove->next;
    }
}

void peinsertnodebyhead(struct node_pe* peheadnode, struct personmessage data)     //表头法插入链表
{
    struct node_pe* penewnode = creatpenode(data);        //要想插入节点必须创建一个新的节点,通过子函数创建节点
    penewnode->next = peheadnode->next;        //将新节点指向表头的next从而指向表头的下一个节点
    peheadnode->next = penewnode;          //再将标头的next指向新节点从而使新节点成为表头的下一个节点
}

struct node_pe* pelist = NULL;

void pedeletenotebyname(struct node_pe* peheadnode, char* bookname)   //   删除书本
{
    struct node_pe* peposleftnode = peheadnode;      //定义一个节点指向表头,从而可实现从表头开始查询
    struct node_pe* peposnode = peheadnode->next;      //定义一个新的结构体实现双线并进
    while (peposnode != NULL && strcmp(peposnode->data.zhanghao.name, bookname))
    {
        peposleftnode = peposnode;            //不断地指向下一个,直到查到书名
        peposnode = peposleftnode->next;
    }
    if (peposleftnode == NULL)      //说明找不到,结束函数
    {
        printf("该读者不存在哦");
        return;
    }
    else
    {
        printf("删除成功,正在返回中,请稍后.........");     //将前一个节点的指向指向到下一个节点指向的结构体,从而实现删除
        Sleep(1500);
        peposleftnode->next = peposnode->next;
        free(peposnode);   //释放掉动态内存分配的空间
        peposnode = NULL;
    }
}

struct node_pe* pesearchbyname(struct node_pe* peheadnode, char* bookname)     //通过读者姓名查找读者
{
    struct node_pe* peposnode = peheadnode->next;
    while (peposnode != NULL && strcmp(peposnode->data.zhanghao.name, bookname))
    {
        peposnode = peposnode->next;
    }
    return peposnode;
}

struct node_pe* pesearchbynumber(struct node_pe* peheadnode, char* schoolnumber)     //通过学号查找
{
    struct node_pe* peposnode = peheadnode->next;
    while (peposnode != NULL && strcmp(peposnode->data.zhanghao.schoolnumber, schoolnumber))
    {
        peposnode = peposnode->next;
    }
    return peposnode;
}

void pesaveinfotofile(const char* filename, struct node_pe* headnode)   
{
    FILE* fp = fopen(filename, "w");
    struct node_pe* pmove = headnode->next;
    while (pmove != NULL)
    {
        fprintf(fp, "%s\t%s\t%s\t%s\t%d\t%s\t%s\t%s\n", pmove->data.zhanghao.schoolnumber, pmove->data.zhanghao.name, pmove->data.zhanghao.sex, pmove->data.password, pmove->data.zhanghao.many, pmove->data.zhanghao.book[0].name, pmove->data.zhanghao.book[1].name, pmove->data.zhanghao.book[2].name);
        pmove = pmove->next;
    }
    fclose(fp);
}

void pereadinfofromfile(const char* filename, struct node_pe* headnode)
{
    FILE* fp = fopen(filename, "r");
    if (fp == NULL)
    {
        fp = fopen(filename, "w+");
    }
    struct personmessage tempdata;
    while (fscanf(fp, "%s\t%s\t%s\t%s\t%d\t%s\t%s\t%s\n", tempdata.zhanghao.schoolnumber, tempdata.zhanghao.name, tempdata.zhanghao.sex, tempdata.password, &tempdata.zhanghao.many, tempdata.zhanghao.book[0].name, tempdata.zhanghao.book[1].name, tempdata.zhanghao.book[2].name) != EOF)
    {
        peinsertnodebyhead(pelist, tempdata);
    }

    fclose(fp);
}

int dif(time_t a)       //计算借书时间
{
    time_t b = time(NULL);
    _int64 mile = b - a;
    int  minute = 0, hour = 0, day = 0;
    for (; mile >= 60;)
    {
        mile -= 60;
        minute++;
        if (minute >= 60)
        {
            minute -= 60;
            hour++;
        }
        if (hour >= 12)
        {
            hour -= 60;
            day++;
        }
    }
    printf("您已借阅%d天/%d时/%d分/%ld秒\n", day, hour, minute, mile);
    if (day >= 30);
    printf("您已借阅超时,以后记得及时归还\n");
    return 0;
}      

源.cpp

#include"person.h"
using namespace std;

//数据储存

struct bookmessage  //与书有关的信息
{
    char name[50];      // 书名
    float price;      //价格
    char chubanshe[50];     //出版社
    char author[50];     //作者
    int num;          //数量
    int jieyue=0;      //借阅量
};

struct node      //创建链表储存数据
{
    struct bookmessage data;
    struct node* next;    //指向下一个数据
};

struct node* creathead()      //定义一个node*类型的函数,用来储存链表信息
{
    struct node* headnode = (struct node*)malloc(sizeof(struct node));
    //此时headnote是结构体变量,然后初始化
    headnode->next = NULL;
    return headnode;
}

struct node* creatnode(struct bookmessage data)    //创建结点,为插入做准备
{
    struct node* newnode = (struct node*)malloc(sizeof(struct node));
    newnode->data = data;
    newnode->next = NULL;
    return newnode;
};

void printflist(struct node* headnode)   //打印链表
{
    IMAGE backimg;
    IMAGE choiseimg;
    system("cls");
    int select;
    initgraph(640, 480);
    loadimage(&backimg, "004.jpg", 640, 480);
    loadimage(&choiseimg, "001.jfif", 420, 30);
    //BeginBatchDraw();
    putimage(0, 0, &backimg);
    putimage(120, 130, &choiseimg);
    putimage(120, 180, &choiseimg);
    putimage(120, 230, &choiseimg);
    putimage(120, 280, &choiseimg);
    putimage(120, 330, &choiseimg);
    putimage(120, 380, &choiseimg);
    putimage(120, 430, &choiseimg);

    setbkmode(TRANSPARENT);
    setcolor(YELLOW);
    settextstyle(40, 0, "Century Gothic");
    outtextxy(205, 10, "z1in图书管理系统");
    setcolor(BLUE);
    settextstyle(20, 0, "Century Gothic");
    outtextxy(135, 135, "------------------------------图书信息-----------------------------");
    outtextxy(135, 185, "书名         作者       出版社           单价     馆藏量     借阅数");
    struct node* pmove = headnode->next;
    char tempstr[150];
    int x = 0;
    while (pmove != NULL)     //一直打印直至为空(也说明数据打印完毕)
    {
        sprintf(tempstr, "%-10s %-10s %-14s %-10.1f %-14d %-6d\n", pmove->data.name, pmove->data.author, pmove->data.chubanshe, pmove->data.price, pmove->data.num, pmove->data.jieyue);
        outtextxy(135, 235+x, tempstr);
        x += 50;
        pmove = pmove->next;
    }
    outtextxy(315, 435, "退出");
    MOUSEMSG msg;
    while (1)
    {
        msg = GetMouseMsg();
        switch (msg.uMsg)
        {
        case WM_LBUTTONDOWN:
            if (msg.x >= 120 && msg.x <= 540 && msg.y >= 430 && msg.y <= 460)
            {
                closegraph();
                return;
            }
        }
    }
}

void insertnodebyhead(struct node* headnode, struct bookmessage data)     //表头法插入链表
{ 
    struct node* newnode = creatnode(data);        //要想插入节点必须创建一个新的节点,通过子函数创建节点
    newnode->next = headnode->next;        //将新节点指向表头的next从而指向表头的下一个节点
    headnode->next = newnode;          //再将标头的next指向新节点从而使新节点成为表头的下一个节点
}

//初始化储存图书信息的链表
struct node* list = NULL;

void deletenotebyname(struct node* headnode, char* bookname)   //   删除书本
{
    struct node* posleftnode = headnode;      //定义一个节点指向表头,从而可实现从表头开始查询
    struct node* posnode = headnode->next;      //定义一个新的结构体实现双线并进
    while (posnode != NULL && strcmp(posnode->data.name, bookname))
    {
        posleftnode = posnode;            //不断地指向下一个,直到查到书名
        posnode = posleftnode->next;
    }
    if (posnode == NULL)      //说明找不到,结束函数
    {
        cout << "该书不存在哦" << endl;
        return;
    }
    else
    {
        cout << "删除成功,正在返回中,请稍后........." << endl;      //将前一个节点的指向指向到下一个节点指向的结构体,从而实现删除
        Sleep(1500);
        posleftnode->next = posnode->next;      
        free(posnode);   //释放掉动态内存分配的空间
        posnode = NULL;
    }
}

struct node* searchbyname(struct node* headnode, char* bookname)     //通过书名查找书
{
    struct node* posnode = headnode->next;
    while (posnode != NULL && strcmp(posnode->data.name, bookname))
    {
        posnode = posnode->next;
    }
    return posnode;
}

struct node* searchbyauthor(struct node* headnode, char* authorname)     //通过作者查找书
{
    struct node* posnode = headnode->next;
    while (posnode != NULL && strcmp(posnode->data.author, authorname))
    {
        posnode = posnode->next;
    }
    return posnode;
}

struct node* searchbychubanshe(struct node* headnode, char* chubanshe)       //通过出版社查找书
{
    struct node* posnode = headnode->next;
    while (posnode != NULL && strcmp(posnode->data.chubanshe, chubanshe))
    {
        posnode = posnode->next;
    }
    return posnode;
}

/*菜单函数区*/
void showpower();
void showreader();
void password_circle();

/*图书管理区*/
void adb();
int reb();
void deb();
int seb();

/*读者管理区*/
void adp();
int rep();
int dep();
int sep();


IMAGE backimg;
IMAGE choiseimg;

/*用户功能使用区*/
int jieshu(struct node_pe*** reader);
int huanshu(struct node_pe*** reader);
int xujie(struct node_pe*** reader);

/*集中管理函数*/
void bookcon();
void personcon();
void readers( struct node_pe* reader);

/*注册登录选择*/
int rogin();
struct personmessage register_();
void quit();
int login();

void  bubblesort(struct node* headnode)
{
    struct node* firstnode = headnode->next;
    struct node* secondnode = headnode;
    while (firstnode != NULL)
    {
        while (firstnode->next != NULL)
        {
            if (firstnode->data.jieyue < firstnode->next->data.jieyue)
            {
                struct bookmessage temp = firstnode->data;
                firstnode->data = firstnode->next->data;
                firstnode->next->data = temp;
            }
            firstnode = firstnode->next;
        }
        //减少排序次数
        firstnode = secondnode->next;
        secondnode = firstnode;
    }
}

void saveinfotofile(const char* filename, struct node* headnode)
{
    FILE* fp = fopen(filename, "w");
    struct node* pmove = headnode->next;
    while (pmove != NULL)
    {
        fprintf(fp, "%s\t%s\t%.1f\t%s\t%d\t%d\n", pmove->data.name, pmove->data.author, pmove->data.price, pmove->data.chubanshe, pmove->data.num, pmove->data.jieyue);
        pmove = pmove->next;
    }
    fclose(fp);
}

void readinfofromfile(const char* filename, struct node* headnode)
{
    FILE* fp = fopen(filename, "r");
    if (fp == NULL)
    {
        fp = fopen(filename, "w+");
    }
    struct bookmessage tempdata;
    while (fscanf(fp, "%s\t%s\t%f\t%s\t%d\t%d\n", tempdata.name, tempdata.author, &tempdata.price, tempdata.chubanshe, &tempdata.num, &tempdata.jieyue) != EOF)
    {
        insertnodebyhead(list, tempdata);
    }

    fclose(fp);
}


void showpower()       //管理员模式
{
    system("cls");
    printf("\t\t\t       欢迎使用图书管理系统\n");
    printf("\t\t****************************************************\n");
    printf("\t\t*           **********          **********         *\n");
    printf("\t\t*           *        *                   *         *\n");
    printf("\t\t*           *        *                   *         *\n");
    printf("\t\t*           *        *                   *         *\n");
    printf("\t\t*           *        *          **********         *\n");
    printf("\t\t*           *        *                   *         *\n");
    printf("\t\t*           *        *                   *         *\n");
    printf("\t\t*           *        *                   *         *\n");
    printf("\t\t*           *        *                   *         *\n");
    printf("\t\t*           **********          **********         *\n");
    printf("\t\t****************************************************\n");
    printf("\n\t\t****************************************************\n");
    printf("\t\t*                                                  *\n");
    printf("\t\t*    1、 图书管理   2、 读者管理  4、 退出系统     *\n");
    printf("\t\t*                                                  *\n");
    printf("\t\t****************************************************\n");
    printf("\t\t\t请输入您要使用的功能前的序号(1~4):\n");
}

void showreader()       //读者模式
{
    system("cls");
    printf("\t\t\t       欢迎使用图书管理系统\n");
    printf("\t\t****************************************************\n");
    printf("\t\t*           **********          **********         *\n");
    printf("\t\t*           *        *                   *         *\n");
    printf("\t\t*           *        *                   *         *\n");
    printf("\t\t*           *        *                   *         *\n");
    printf("\t\t*           *        *          **********         *\n");
    printf("\t\t*           *        *                   *         *\n");
    printf("\t\t*           *        *                   *         *\n");
    printf("\t\t*           *        *                   *         *\n");
    printf("\t\t*           *        *                   *         *\n");
    printf("\t\t*           **********          **********         *\n");
    printf("\t\t****************************************************\n");
    printf("\n\t\t****************************************************\n");
    printf("\t\t*                                                  *\n");
    printf("\t\t*\t  1、 借书管理\t\t 2、 退出系统      *\n");
    printf("\t\t*                                                  *\n");
    printf("\t\t****************************************************\n");
    printf("\t\t\t请输入您要使用的功能前的序号(1~4):\n");
}

void password_circle()/*画框函数*/
{
    system("cls");
    printf("\n\n\n\t\t\t***================================*** \n");
    printf("\t\t\t                                   \n");
    printf("\t\t\t   学号 (account):");
}

//增加书本
void adb()   
{
    IMAGE backimg;
    IMAGE choiseimg;
    IMAGE selectimg;

    system("cls");
    int select;
zxy:initgraph(640, 480);
    loadimage(&backimg, "004.jpg", 640, 480);
    loadimage(&choiseimg, "001.jfif", 420, 30);
    loadimage(&selectimg, "002.jfif", 80, 30);

    //BeginBatchDraw();
    putimage(0, 0, &backimg);
    putimage(100, 130, &choiseimg);
    putimage(100, 180, &choiseimg);
    putimage(100, 230, &choiseimg);
    putimage(100, 280, &choiseimg);
    putimage(100, 330, &choiseimg);
    putimage(120, 430, &selectimg);
    putimage(430, 430, &selectimg);

    setbkmode(TRANSPARENT);
    setcolor(YELLOW);
    settextstyle(40, 0, "Century Gothic");
    outtextxy(205, 10, "z1in图书管理系统");
    setcolor(BLUE);
    settextstyle(20, 0, "Century Gothic");
    outtextxy(130, 135, "请输入书籍的名称");
    outtextxy(130, 185, "请输入书籍的价格");
    outtextxy(130, 235, "请输入书籍的作者");
    outtextxy(130, 285, "请输入书籍的出版社");
    outtextxy(130, 335, "请输入书籍的数量");
    outtextxy(125, 435, "继续添加");
    outtextxy(435, 435, " 退出");

    bookmessage a;
    char tempprice[20];
    char tempnum[10];     //接收inputbox输入的值然后转换为整形

    InputBox(a.name, 50, "请输入书籍的名称");
    outtextxy(335, 135, a.name);
    InputBox(tempprice, 20, "请输入书籍的价格");
    outtextxy(335, 185, tempprice);
    a.price = atoi(tempprice);
    InputBox(a.author, 50, "请输入书籍的作者");
    outtextxy(335, 235, a.author);
    InputBox(a.chubanshe,50, "请输入书籍的出版社");
    outtextxy(335, 285, a.chubanshe);
    InputBox(tempnum, 10, "请输入书籍的数量");
    outtextxy(335, 335, tempnum);
    a.num = atoi(tempnum);
    insertnodebyhead(list, a);
    saveinfotofile("book.txt", list);
    MessageBox(NULL, "添加成功", "来自z1in的提醒", MB_YESNO | MB_SYSTEMMODAL); 
    MOUSEMSG msg;
    while (1)
    {
        msg = GetMouseMsg();
        switch (msg.uMsg)
        {
        case WM_LBUTTONDOWN:
            if (msg.x >= 120 && msg.x <= 200 && msg.y >= 430 && msg.y <= 460)
            {
                closegraph();
                goto zxy;

            }
            else if (msg.x >= 430 && msg.x <= 510 && msg.y >= 430 && msg.y <= 460)
            {
                closegraph();
                return;
            }
        }
    }
}

int reb()    //更新书本
{
    IMAGE backimg;
    IMAGE choiseimg;
    IMAGE selectimg;

    system("cls");
    int select;
zxy:initgraph(640, 480);
    loadimage(&backimg, "004.jpg", 640, 480);
    loadimage(&choiseimg, "001.jfif", 420, 30);
    loadimage(&selectimg, "002.jfif", 80, 30);

    //BeginBatchDraw();
    putimage(0, 0, &backimg);
    putimage(130, 60, &choiseimg);
    putimage(130, 100, &choiseimg);
    putimage(130, 140, &choiseimg);
    putimage(130, 180, &choiseimg);
    putimage(130, 220, &choiseimg);
    putimage(130, 260, &choiseimg);
    putimage(130, 300, &choiseimg);
    putimage(130, 340, &choiseimg);
    putimage(140, 420, &selectimg);
    putimage(440, 420, &selectimg);

    setbkmode(TRANSPARENT);
    setcolor(YELLOW);
    settextstyle(40, 0, "Century Gothic");
    outtextxy(205, 10, "z1in图书管理系统");
    setcolor(BLUE);
    settextstyle(20, 0, "Century Gothic");
    outtextxy(140, 185, "请输入书籍的名称");
    outtextxy(140, 225, "请输入书籍的价格");
    outtextxy(140, 265, "请输入书籍的作者");
    outtextxy(140, 305, "请输入书籍的出版社");
    outtextxy(140, 345, "请输入书籍的数量");
    outtextxy(145, 425, "继续修改");
    outtextxy(445, 425, " 退出");

    char tempprice[20];
    char tempnum[10];     //接收inputbox输入的值然后转换为整形
    char name[40];
    char tempstr[100];

    InputBox(name, 40, "请输入想要修改的书籍的名称");
    struct node* book = searchbyname(list, name);
    if (book != NULL)
    {
        MessageBox(NULL, "该书存在", "来自z1in的提醒", MB_OK | MB_SYSTEMMODAL);
        setcolor(BLUE);
        settextstyle(20, 0, "Century Gothic");
        outtextxy(145,  65, "------------------------------图书信息-----------------------------");
        outtextxy(145, 105, "书名         作者       出版社           单价     馆藏量     借阅数");
        sprintf(tempstr, "%-10s %-10s %-14s %-10.1f %-14d %-6d\n", book->data.name, book->data.author, book->data.chubanshe, book->data.price, book->data.num, book->data.jieyue);
        outtextxy(145, 145, tempstr);
        Sleep(1500);
        InputBox(book->data.name, 50, "请输入书籍的名称");
        outtextxy(345, 185, book->data.name);
        InputBox(tempprice, 20, "请输入书籍的价格");
        outtextxy(345, 225, tempprice);
        book->data.price = atoi(tempprice);
        InputBox(book->data.author, 50, "请输入书籍的作者");
        outtextxy(345, 265, book->data.author);
        InputBox(book->data.chubanshe, 50, "请输入书籍的出版社");
        outtextxy(345, 305, book->data.chubanshe);
        InputBox(tempnum, 10, "请输入书籍的数量");
        outtextxy(345, 345, tempnum);
        book->data.num = atoi(tempnum);
        saveinfotofile("book.txt", list);
        MessageBox(NULL, "修改成功", "来自z1in的提醒.", MB_OK | MB_SYSTEMMODAL);
    }
    else
    {
        MessageBox(NULL, TEXT("没有改书哦。"), TEXT("来自z1in的提醒."), MB_OK | MB_SYSTEMMODAL);
    } 
    MOUSEMSG msg;
    while (1)
    {
        msg = GetMouseMsg();
        switch (msg.uMsg)
        {
        case WM_LBUTTONDOWN:
            if (msg.x >= 100 && msg.x <= 180 && msg.y >= 420 && msg.y <= 450)
            {
                closegraph();
                goto zxy;

            }
            else if (msg.x >= 440 && msg.x <= 520 && msg.y >= 420 && msg.y <= 450)
            {
                closegraph();
                return 0;
            }
        }
    }
}

void deb()   //   删除书本
{
    IMAGE backimg;
    IMAGE choiseimg;
    IMAGE selectimg;

    system("cls");
    int select;
zxy:initgraph(640, 480);
    loadimage(&backimg, "004.jpg", 640, 480);
    loadimage(&choiseimg, "001.jfif", 420, 30);
    loadimage(&selectimg, "002.jfif", 80, 30);

    //BeginBatchDraw();
    putimage(0, 0, &backimg);
    putimage(100, 130, &choiseimg);
    putimage(100, 180, &choiseimg);
    putimage(100, 230, &choiseimg);
    putimage(120, 430, &selectimg);
    putimage(430, 430, &selectimg);

    setbkmode(TRANSPARENT);
    setcolor(YELLOW);
    settextstyle(40, 0, "Century Gothic");
    outtextxy(205, 10, "z1in图书管理系统");
    setcolor(BLUE);
    settextstyle(20, 0, "Century Gothic");
    outtextxy(125, 435, " 删除");
    outtextxy(435, 435, " 退出");

    char name[20];
    char tempstr[100];
    InputBox(name, 20, "请输入您想删除的书本的名称");
    struct node* book = searchbyname(list, name);

    if (book != NULL)
    {
        setcolor(BLUE);
        settextstyle(20, 0, "Century Gothic");
        outtextxy(105, 135, "------------------------------图书信息-----------------------------");
        outtextxy(105, 185, "书名         作者       出版社           单价     馆藏量     借阅数");
        sprintf(tempstr, "%-10s %-10s %-14s %-10.1f %-14d %-6d\n", book->data.name, book->data.author, book->data.chubanshe, book->data.price, book->data.num, book->data.jieyue);
        outtextxy(105, 235, tempstr);

        deletenotebyname(list, name);
        saveinfotofile("book.txt", list);
        MessageBox(NULL, "删除成功", "来自z1in的提醒.", MB_OK | MB_SYSTEMMODAL);
    }
    else
        MessageBox(NULL, "没有您想删除的的书籍哦.", "来自z1in的提醒.", MB_OK | MB_SYSTEMMODAL);

    MOUSEMSG msg;
    while (1)
    {
        msg = GetMouseMsg();
        switch (msg.uMsg)
        {
        case WM_LBUTTONDOWN:
            if (msg.x >= 100 && msg.x <= 180 && msg.y >= 420 && msg.y <= 450)
            {
                closegraph();
                goto zxy;
            }
            else if (msg.x >= 440 && msg.x <= 520 && msg.y >= 420 && msg.y <= 450)
            {
                closegraph();
                return;
            }
        }
    }
}

void showseb(struct node* book)
{
    IMAGE backimg;
    IMAGE choiseimg;
    system("cls");
    int select;
    initgraph(640, 480);
    loadimage(&backimg, "004.jpg", 640, 480);
    loadimage(&choiseimg, "001.jfif", 420, 30);
    //BeginBatchDraw();
    putimage(0, 0, &backimg);
    putimage(120, 130, &choiseimg);
    putimage(120, 180, &choiseimg);
    putimage(120, 230, &choiseimg);
    putimage(120, 430, &choiseimg);

    setbkmode(TRANSPARENT);
    setcolor(YELLOW);
    settextstyle(40, 0, "Century Gothic");
    outtextxy(205, 10, "z1in图书管理系统");
    setcolor(BLUE);
    settextstyle(20, 0, "Century Gothic");
    outtextxy(315, 435, "退出");

    char tempstr[100];

    sprintf(tempstr, "%-10s %-10s %-14s %-10.1f %-14d %-6d\n", book->data.name, book->data.author, book->data.chubanshe, book->data.price, book->data.num, book->data.jieyue);
    setcolor(BLUE);
    settextstyle(20, 0, "Century Gothic");
    outtextxy(135, 135, "------------------------------图书信息-----------------------------");
    outtextxy(135, 185, "书名         作者       出版社           单价     馆藏量     借阅数");
    outtextxy(135, 235, tempstr); 
    
    MOUSEMSG msg;
    while (1)
    {
        msg = GetMouseMsg();
        switch (msg.uMsg)
        {
        case WM_LBUTTONDOWN:
            if (msg.x >= 120 && msg.x <= 540 && msg.y >= 430 && msg.y <= 460)
            {
                closegraph();
                return;
            }
        }
    }
}

int seb()    //查找书本
{
    IMAGE backimg;
    IMAGE choiseimg;
    IMAGE selectimg;

    system("cls");
zxy:initgraph(640, 480);
    loadimage(&backimg, "004.jpg", 640, 480);
    loadimage(&choiseimg, "001.jfif", 220, 30);
    loadimage(&selectimg, "002.jfif", 80, 30);

    //BeginBatchDraw();
    putimage(0, 0, &backimg);
    putimage(220, 130, &choiseimg);
    putimage(220, 180, &choiseimg);
    putimage(220, 230, &choiseimg);
    putimage(120, 430, &selectimg);
    putimage(430, 430, &selectimg);

    setbkmode(TRANSPARENT);
    setcolor(YELLOW);
    settextstyle(40, 0, "Century Gothic");
    outtextxy(205, 10, "z1in图书管理系统");
    setcolor(BLUE);
    settextstyle(20, 0, "Century Gothic");
    outtextxy(265, 135, "通过书名查询");
    outtextxy(265, 185, "通过书的作者查询");
    outtextxy(265, 235, "通过书的出版社查询");
    outtextxy(125, 435, " 刷新");
    outtextxy(435, 435, " 退出");

    int select;
    char name[40];
    MOUSEMSG msg;
    while (1)
    {
        msg = GetMouseMsg();
        switch (msg.uMsg)
        {
        case WM_LBUTTONDOWN:
            if (msg.x >= 220 && msg.x <= 440 && msg.y >= 130 && msg.y <= 160)
            {
                InputBox(name, 40, "请输入书籍名称");
                struct node* book = searchbyname(list, name); 
                if (book != NULL)
                {
                    MessageBox(NULL, "查询成功", "来自z1in的提醒.", MB_OK | MB_SYSTEMMODAL);
                    closegraph();
                    showseb(book);
                }
                else
                {
                    MessageBox(NULL, TEXT("没有该书哦。"), TEXT("来自z1in的提醒."), MB_OK | MB_SYSTEMMODAL);
                }
                goto zxy;
            }
            else if (msg.x >= 220 && msg.x <= 440 && msg.y >= 180 && msg.y <= 210)
            {
                InputBox(name, 40, "请输入作者名称");
                struct node* book = searchbyauthor(list, name);
                if (book != NULL)
                {
                    MessageBox(NULL, "查询成功", "来自z1in的提醒.", MB_OK | MB_SYSTEMMODAL);
                    closegraph();
                    showseb(book);
                }
                else
                {
                    MessageBox(NULL, TEXT("没有改书哦。"), TEXT("来自z1in的提醒."), MB_OK | MB_SYSTEMMODAL);
                }
                goto zxy;
            }
            else if (msg.x >= 220 && msg.x <= 440 && msg.y >= 230 && msg.y <= 260)
            {
                InputBox(name, 40, "请输入出版社名称");
                struct node* book = searchbychubanshe(list, name);
                if (book != NULL)
                {
                    MessageBox(NULL, "查询成功", "来自z1in的提醒.", MB_OK | MB_SYSTEMMODAL);
                    closegraph();
                    showseb(book);
                }
                else
                {
                    MessageBox(NULL, TEXT("没有该书哦。"), TEXT("来自z1in的提醒."), MB_OK | MB_SYSTEMMODAL);
                }
                goto zxy;
            }
            else if (msg.x >= 120 && msg.x <= 200 && msg.y >= 430 && msg.y <= 460)
            {
                closegraph();
                goto zxy;
            }
            else if (msg.x >= 430 && msg.x <= 510 && msg.y >= 430 && msg.y <= 460)
            {
                closegraph();
                return 0;
            }
        }
    }
}

void adp()   //读者注册
{
    IMAGE backimg;
    IMAGE choiseimg;
    IMAGE selectimg;

    system("cls");
    int select;
zxy:initgraph(640, 480);
    loadimage(&backimg, "004.jpg", 640, 480);
    loadimage(&choiseimg, "001.jfif", 420, 30);
    loadimage(&selectimg, "002.jfif", 80, 30);

    //BeginBatchDraw();
    putimage(0, 0, &backimg);
    putimage(100, 130, &choiseimg);
    putimage(100, 180, &choiseimg);
    putimage(100, 230, &choiseimg);
    putimage(100, 280, &choiseimg);
    putimage(120, 430, &selectimg);
    putimage(430, 430, &selectimg);

    setbkmode(TRANSPARENT);
    setcolor(YELLOW);
    settextstyle(40, 0, "Century Gothic");
    outtextxy(205, 10, "z1in图书管理系统");
    setcolor(BLUE);
    settextstyle(20, 0, "Century Gothic");
    outtextxy(130, 135, "请输入读者的学号");
    outtextxy(130, 185, "请输入读者的姓名");
    outtextxy(130, 235, "请输入读者的性别");
    outtextxy(130, 285, "请输入读者的账号密码");
    outtextxy(125, 435, "继续添加");
    outtextxy(435, 435, " 退出");

    personmessage a;
    char tempnumber[20];   //接收inputbox输入的值然后转换为整形

    InputBox(a.zhanghao.schoolnumber, 50, "请输入读者的学号");
    outtextxy(335, 135, a.zhanghao.schoolnumber);
    InputBox(a.zhanghao.name, 20, "请输入读者的姓名");
    outtextxy(335, 185, a.zhanghao.name);
    InputBox(a.zhanghao.sex, 50, "请输入读者的性别");
    outtextxy(335, 235, a.zhanghao.sex);
    InputBox(a.password, 50, "请输入读者的账号密码");
    outtextxy(335, 285, a.password);
    a.zhanghao.many = 0;
    strcpy(a.zhanghao.book[0].name, "0");
    strcpy(a.zhanghao.book[1].name, "0");
    strcpy(a.zhanghao.book[2].name, "0");
    peinsertnodebyhead(pelist, a);
    pesaveinfotofile("person.txt", pelist);
    MessageBox(NULL, "添加成功", "来自z1in的提醒", MB_YESNO | MB_SYSTEMMODAL);
    MOUSEMSG msg;
    while (1)
    {
        msg = GetMouseMsg();
        switch (msg.uMsg)
        {
        case WM_LBUTTONDOWN:
            if (msg.x >= 120 && msg.x <= 200 && msg.y >= 430 && msg.y <= 460)
            {
                closegraph();
                goto zxy;

            }
            else if (msg.x >= 430 && msg.x <= 510 && msg.y >= 430 && msg.y <= 460)
            {
                closegraph();
                return;
            }
        }
    }
}

int rep()    //更新读者
{
    IMAGE backimg;
    IMAGE choiseimg;
    IMAGE selectimg;

    system("cls");
    int select;
zxy:initgraph(640, 480);
    loadimage(&backimg, "004.jpg", 640, 480);
    loadimage(&choiseimg, "001.jfif", 420, 30);
    loadimage(&selectimg, "002.jfif", 80, 30);

    //BeginBatchDraw();
    putimage(0, 0, &backimg);
    putimage(100, 130, &choiseimg);
    putimage(100, 180, &choiseimg);
    putimage(100, 230, &choiseimg);
    putimage(100, 280, &choiseimg);
    putimage(120, 430, &selectimg);
    putimage(430, 430, &selectimg);

    setbkmode(TRANSPARENT);
    setcolor(YELLOW);
    settextstyle(40, 0, "Century Gothic");
    outtextxy(205, 10, "z1in图书管理系统");
    setcolor(BLUE);
    settextstyle(20, 0, "Century Gothic");
    outtextxy(130, 135, "请输入读者的学号");
    outtextxy(130, 185, "请输入读者的姓名");
    outtextxy(130, 235, "请输入读者的性别");
    outtextxy(130, 285, "请输入读者的账号密码");
    outtextxy(125, 435, "继续添加");
    outtextxy(435, 435, " 退出");

    char tempnumber[50];
    char tempnum[10];     //接收inputbox输入的值然后转换为整形
    char name[40];
    char tempstr[100];
    InputBox(name, 40, "请输入想修改的读者的姓名.");
    struct node_pe* person = pesearchbyname(pelist, name);

    if (person != NULL)
    {
        MessageBox(NULL, "该读者存在", "来自z1in的提醒.", MB_OK | MB_SYSTEMMODAL);
        InputBox(person->data.zhanghao.schoolnumber, 50, "请输入读者的学号");
        outtextxy(335, 135, person->data.zhanghao.schoolnumber);
        InputBox(person->data.zhanghao.name, 30, "请输入读者的姓名");
        outtextxy(335, 185, person->data.zhanghao.name);
        InputBox(person->data.zhanghao.sex, 20, "请输入读者的性别");
        outtextxy(335, 235, person->data.zhanghao.sex);
        InputBox(person->data.password, 20, "请输入读者的账号密码");
        outtextxy(335, 285, person->data.password);
        pesaveinfotofile("person.txt", pelist);
        MessageBox(NULL, "修改成功", "来自z1in的提醒.", MB_OK | MB_SYSTEMMODAL);
    }
    else
    {
        MessageBox(NULL, TEXT("没有改读者哦。"), TEXT("提示框"), MB_OK | MB_SYSTEMMODAL);
    }
    MOUSEMSG msg;
    while (1)
    {
        msg = GetMouseMsg();
        switch (msg.uMsg)
        {
        case WM_LBUTTONDOWN:
            if (msg.x >= 100 && msg.x <= 180 && msg.y >= 420 && msg.y <= 450)
            {
                closegraph();
                goto zxy;
            }
            else if (msg.x >= 440 && msg.x <= 520 && msg.y >= 420 && msg.y <= 450)
            {
                closegraph();
                return 0;
            }
        }
    }
}

int dep()    //删除读者
{
    IMAGE backimg;
    IMAGE choiseimg;
    IMAGE selectimg;

    system("cls");
    int select;
zxy:initgraph(640, 480);
    loadimage(&backimg, "004.jpg", 640, 480);
    loadimage(&choiseimg, "001.jfif", 420, 30);
    loadimage(&selectimg, "002.jfif", 80, 30);

    //BeginBatchDraw();
    putimage(0, 0, &backimg);
    putimage(100, 130, &choiseimg);
    putimage(100, 180, &choiseimg);
    putimage(100, 230, &choiseimg);
    putimage(100, 280, &choiseimg);
    putimage(120, 430, &selectimg);
    putimage(430, 430, &selectimg);

    setbkmode(TRANSPARENT);
    setcolor(YELLOW);
    settextstyle(40, 0, "Century Gothic");
    outtextxy(205, 10, "z1in图书管理系统");
    setcolor(BLUE);
    settextstyle(20, 0, "Century Gothic");
    outtextxy(280, 135, "读者的信息");
    outtextxy(125, 435, "继续删除");
    outtextxy(435, 435, " 退出");

    char name[20];
    char tempstr[100];

    InputBox(name, 20, "请输入您想删除的读者的姓名");
    struct node_pe* person = pesearchbyname(pelist, name);
    if (person != NULL)
    {
        MessageBox(NULL, "该读者存在", "来自z1in的提醒", MB_OK | MB_SYSTEMMODAL);
        outtextxy(205,185,"-----------------读者信息-------------------\n");
        outtextxy(205,235,"学号                姓名           性别     \n");
        sprintf(tempstr, "%-19d %-14s %-8s \n", person->data.zhanghao.schoolnumber, person->data.zhanghao.name, person->data.zhanghao.sex);
        outtextxy(205, 285, tempstr);
        int i = MessageBox(NULL, "确认删除吗?", "来自z1in的提醒.", MB_YESNO | MB_SYSTEMMODAL);
        if (i == 6)
        {
            pedeletenotebyname(pelist, name);
            pesaveinfotofile("person.txt", pelist);
            MessageBox(NULL, "读者删除成功", "来自z1in的提醒.", MB_OK | MB_SYSTEMMODAL);
        }
    }
    else
        MessageBox(NULL, "您想删除的读者不存在!", "来自z1in的提醒.", MB_OK | MB_SYSTEMMODAL);
    MOUSEMSG msg;
    while (1)
    {
        msg = GetMouseMsg();
        switch (msg.uMsg)
        {
        case WM_LBUTTONDOWN:
            if (msg.x >= 100 && msg.x <= 180 && msg.y >= 420 && msg.y <= 450)
            {
                goto zxy;
                closegraph();
            }
            else if (msg.x >= 440 && msg.x <= 520 && msg.y >= 420 && msg.y <= 450)
            {
                closegraph();
                return 0;
            }
        }
    }
}

//显示sep的查找结果
void showsep(struct node_pe* person)
{
    IMAGE backimg;
    IMAGE choiseimg;
    system("cls");
    int select;
    initgraph(640, 480);
    loadimage(&backimg, "004.jpg", 640, 480);
    loadimage(&choiseimg, "001.jfif", 420, 30);
    //BeginBatchDraw();
    putimage(0, 0, &backimg);
    putimage(120, 130, &choiseimg);
    putimage(120, 180, &choiseimg);
    putimage(120, 230, &choiseimg);
    putimage(120, 430, &choiseimg);

    setbkmode(TRANSPARENT);
    setcolor(YELLOW);
    settextstyle(40, 0, "Century Gothic");
    outtextxy(205, 10, "z1in图书管理系统");
    setcolor(BLUE);
    settextstyle(20, 0, "Century Gothic");
    outtextxy(315, 435, "退出");

    char tempstr[100];

    sprintf(tempstr, "%-19s %-14s %-8s \n", person->data.zhanghao.schoolnumber, person->data.zhanghao.name, person->data.zhanghao.sex);
    setcolor(BLUE);
    settextstyle(20, 0, "Century Gothic");
    outtextxy(205, 135, "-----------------读者信息-------------------\n");
    outtextxy(205, 185, "学号                姓名           性别     \n");
    outtextxy(205, 235, tempstr);

    MOUSEMSG msg;
    while (1)
    {
        msg = GetMouseMsg();
        switch (msg.uMsg)
        {
        case WM_LBUTTONDOWN:
            if (msg.x >= 120 && msg.x <= 540 && msg.y >= 430 && msg.y <= 460)
            {
                closegraph();
                return;
            }
        }
    }
}

int sep()    //查找读者
{
    IMAGE backimg;
    IMAGE choiseimg;
    IMAGE selectimg;

    system("cls");
zxy:initgraph(640, 480);
    loadimage(&backimg, "004.jpg", 640, 480);
    loadimage(&choiseimg, "001.jfif", 220, 30);
    loadimage(&selectimg, "002.jfif", 80, 30);

    //BeginBatchDraw();
    putimage(0, 0, &backimg);
    putimage(220, 130, &choiseimg);
    putimage(220, 180, &choiseimg);
    putimage(120, 430, &selectimg);
    putimage(430, 430, &selectimg);

    setbkmode(TRANSPARENT);
    setcolor(YELLOW);
    settextstyle(40, 0, "Century Gothic");
    outtextxy(205, 10, "z1in图书管理系统");
    setcolor(BLUE);
    settextstyle(20, 0, "Century Gothic");
    outtextxy(265, 135, "通过读者姓名查询");
    outtextxy(265, 185, "通过读者学号查询");
    outtextxy(125, 435, " 刷新");
    outtextxy(435, 435, " 退出");

    int select;
    char name[40];
    char number[30];

    MOUSEMSG msg;
    while (1)
    {
        msg = GetMouseMsg();
        switch (msg.uMsg)
        {
        case WM_LBUTTONDOWN:
            if (msg.x >= 220 && msg.x <= 440 && msg.y >= 130 && msg.y <= 160)
            {
                InputBox(name, 40, "请输入读者姓名");
                struct node_pe* person = pesearchbyname(pelist, name);
                if (person != NULL)
                {
                    MessageBox(NULL, "查询成功", "来自z1in的提醒.", MB_OK | MB_SYSTEMMODAL);
                    closegraph();
                    showsep(person);
                }
                else
                {
                    MessageBox(NULL, TEXT("没有该读者哦。"), TEXT("来自z1in的提醒."), MB_OK | MB_SYSTEMMODAL);
                }
                goto zxy;
            }
            else if (msg.x >= 220 && msg.x <= 440 && msg.y >= 180 && msg.y <= 210)
            {
                InputBox(number, 30, "请输入读者学号");
                struct node_pe* person = pesearchbynumber(pelist, number);
                if (person != NULL)
                {
                    MessageBox(NULL, "查询成功", "来自z1in的提醒.", MB_OK | MB_SYSTEMMODAL);
                    closegraph();
                    showsep(person);
                }
                else
                {
                    MessageBox(NULL, TEXT("没有改读者哦。"), TEXT("来自z1in的提醒."), MB_OK | MB_SYSTEMMODAL);
                }
                goto zxy;
            }
            else if (msg.x >= 120 && msg.x <= 200 && msg.y >= 430 && msg.y <= 460)
            {
                closegraph();
                goto zxy;
            }
            else if (msg.x >= 430 && msg.x <= 510 && msg.y >= 430 && msg.y <= 460)
            {
                closegraph();
                return 0;
            }
        }
    }
}

//与登陆管理员有关的函数
int rogin()     //简单的登陆管理员函数
{
    char console[20] = "1234563";    //设置管理员密钥
    system("cls");
    initgraph(640, 480);
    loadimage(&backimg, "004.jpg", 720, 1280);
    loadimage(&choiseimg, "001.jfif", 220, 30);
    //BeginBatchDraw();
    putimage(0, 0, &backimg);
    putimage(220, 130, &choiseimg);
    putimage(220, 180, &choiseimg);
    putimage(220, 230, &choiseimg);
    
    setbkmode(TRANSPARENT);
    setcolor(YELLOW);
    settextstyle(40, 0, "Century Gothic");
    outtextxy(205, 10, "z1in图书管理系统");
    setcolor(BLUE);
    settextstyle(20, 0, "Century Gothic");
    outtextxy(265, 135, "    管 理 员 登 陆");
    outtextxy(265, 185, "       读 者 登 录");
    outtextxy(265, 235, "           退 出  ");
    //EndBatchDraw();

    int select;
    int select_;
    zxy:select = select = MessageBox(NULL, "您需要获得管理员权限,是否登陆管理员.", "来自z1in的提醒:", MB_YESNO | MB_SYSTEMMODAL);
    char crypto[20]="0";
    for (;;)    //for循环避免重复输入y、n以外的值导致无法实现登录
    {
        if (select == 6 )    
        {
            InputBox(crypto, 20, "请输入管理员密钥:");
            if (strcmp(crypto,console) !=0 )    //判断密码是否正确
            {
                zxy_:select_ = MessageBox(NULL, "密钥不正确,是否继续登录.", "来自z1in的提醒.", MB_YESNO | MB_SYSTEMMODAL);
                for (;;)
                {
                    if (select_ == 6 )
                    {
                        select = 6;
                        break;
                    }
                    else if (select_ == 7 )
                    {
                        select = 7;
                        return 0;
                    }
                }
            }
            else
            {
                return 1;     //正确的话返回函数值为1
            }
        }
        else if (select == 7 )
        {
            return 0;       //若不登陆管理员则返回函数值为0
        }
    }
}

int jieshu(struct node_pe*** reader)     //借书
{
    IMAGE backimg;
    IMAGE choiseimg;
    system("cls");
    int select;
    initgraph(640, 480);
    loadimage(&backimg, "004.jpg", 640, 480);
    loadimage(&choiseimg, "001.jfif", 420, 30);
    //BeginBatchDraw();
    putimage(0, 0, &backimg);
    putimage(120, 130, &choiseimg);
    putimage(120, 180, &choiseimg);
    putimage(120, 230, &choiseimg);
    putimage(120, 430, &choiseimg);

    setbkmode(TRANSPARENT);
    setcolor(YELLOW);
    settextstyle(40, 0, "Century Gothic");
    outtextxy(205, 10, "z1in图书管理系统");
    setcolor(BLUE);
    settextstyle(20, 0, "Century Gothic");
    outtextxy(315, 435, "退出");
    char tempbook[40];
    char tempstr[60];
    InputBox(tempbook, 40, "请输入您想借阅的书籍");
    struct node* book = searchbyname(list, tempbook);
    if (book != NULL )
    {
        if ((**reader)->data.zhanghao.many < 3 && book->data.num>0)
        {
            strcpy((**reader)->data.zhanghao.book[(**reader)->data.zhanghao.many].name, book->data.name);
            (**reader)->data.zhanghao.many++;
            book->data.num--;
            book->data.jieyue++;
            sprintf(tempstr, "借阅成功,您当前已借阅%d本,还可借阅%d本,记得及时还书哦!\n", (**reader)->data.zhanghao.many, (3 - (**reader)->data.zhanghao.many));
            MessageBox(NULL, tempstr, "来自z1in的提醒", MB_OK | MB_SYSTEMMODAL);
            sprintf(tempstr, "%-10s %-10s %-14s %-10.1f %-14d %-6d\n", book->data.name, book->data.author, book->data.chubanshe, book->data.price, book->data.num, book->data.jieyue);
            setcolor(BLUE);
            settextstyle(20, 0, "Century Gothic");
            outtextxy(135, 135, "------------------------------图书信息-----------------------------");
            outtextxy(135, 185, "书名         作者       出版社           单价     馆藏量     借阅数");
            outtextxy(135, 235, tempstr);
        }
        else
            MessageBox(NULL, "您的借阅本书以达到上限, 看完书再来借哦", "来自z1in的提醒", MB_OK | MB_SYSTEMMODAL);
    }
    else
        MessageBox(NULL, "暂时没有该书哦,可以向管理员反应哦", "来自z1in的提醒", MB_OK | MB_SYSTEMMODAL);

    MOUSEMSG msg;
    while (1)
    {
        msg = GetMouseMsg();
        switch (msg.uMsg)
        {
        case WM_LBUTTONDOWN:
            if (msg.x >= 120 && msg.x <= 540 && msg.y >= 430 && msg.y <= 460)
            {
                closegraph();
                return 0;
            }
        }
    }
}

int huanshu(struct node_pe*** reader)     //还书
{
    IMAGE backimg;
    IMAGE choiseimg;
    IMAGE selectimg;
    system("cls");
    int select;
    initgraph(640, 480);
    loadimage(&backimg, "004.jpg", 640, 480);
    loadimage(&choiseimg, "001.jfif", 420, 30);
    loadimage(&selectimg, "002.jfif", 60, 30);
    //BeginBatchDraw();
    putimage(0, 0, &backimg);
    putimage(120, 130, &choiseimg);
    putimage(120, 180, &choiseimg);
    putimage(120, 230, &choiseimg);
    putimage(120, 280, &choiseimg);
    putimage(120, 430, &selectimg);
    putimage(490, 430, &selectimg);

    setbkmode(TRANSPARENT);
    setcolor(YELLOW);
    settextstyle(40, 0, "Century Gothic");
    outtextxy(205, 10, "z1in图书管理系统");
    setcolor(BLUE);
    settextstyle(20, 0, "Century Gothic");
    outtextxy(125, 435, "还书");
    outtextxy(495, 435, "退出");
    char tempstr[100];

    if ((**reader)->data.zhanghao.many != 0)
    {
        outtextxy(275, 135, "您已借阅的书籍");
        settextstyle(20, 0, "Century Gothic");
        outtextxy(135, 185, "------------------------------图书信息-----------------------------");
        outtextxy(135, 235, "书名         作者       出版社           单价     馆藏量     借阅数");
        int x = 0;
        for (int i = 0; i < 3; i++)
        {
            if (searchbyname(list, (**reader)->data.zhanghao.book[i].name) != NULL)
            {
                node* tempbook = searchbyname(list, (**reader)->data.zhanghao.book[i].name);
                sprintf(tempstr, "%-10s %-10s %-14s %-10.1f %-14d %-6d\n", tempbook->data.name, tempbook->data.author, tempbook->data.chubanshe, tempbook->data.price, tempbook->data.num, tempbook->data.jieyue);
                outtextxy(135, 285 + x, tempstr);
                x += 50;
                putimage(120, 280+x, &choiseimg);
            }
        }
        char tempbook[30];
        int flag = 1;
        int flag1 = 0;
        MOUSEMSG msg;
        while (1)
        {
            msg = GetMouseMsg();
            switch (msg.uMsg)
            {
            case WM_LBUTTONDOWN:
                if (msg.x >= 120 && msg.x <= 180 && msg.y >= 430 && msg.y <= 460)
                {
                    InputBox(tempbook, 30, "请输入您要归还的书籍名称");
                    for (int i = 0; i < 3; i++)
                    {
                        if (strcmp((**reader)->data.zhanghao.book[i].name, tempbook) == 0)
                        {
                            char qingkong[30] = { "0" };
                            strcpy((**reader)->data.zhanghao.book[i].name, qingkong);
                            (**reader)->data.zhanghao.many--;
                            struct node* book1 = searchbyname(list, tempbook);
                            book1->data.num++;
                            MessageBox(NULL, "您已归还成功.", "来自z1in的提醒.", MB_OK | MB_SYSTEMMODAL);
                            break;
                        }
                        else if (i == 3)
                        {
                            MessageBox(NULL, "您并没有借阅该书哦.", "来自z1in的提醒.", MB_OK | MB_SYSTEMMODAL);
                            break;
                        }
                    }
                }
                if (msg.x >= 490 && msg.x <= 550 && msg.y >= 430 && msg.y <= 460)
                {
                    closegraph();
                    return 0;
                }
            }
        }
    }
    else
        MessageBox(NULL, "您没有未归还的书籍哦.", "来自z1in的提醒.", MB_OK | MB_SYSTEMMODAL);
    return 0;
}

int xujie(struct node_pe*** reader)     //续借图书
{
    IMAGE backimg;
    IMAGE choiseimg;
    IMAGE selectimg;
    system("cls");
    int select;
    initgraph(640, 480);
    loadimage(&backimg, "004.jpg", 640, 480);
    loadimage(&choiseimg, "001.jfif", 420, 30);
    loadimage(&selectimg, "002.jfif", 60, 30);
    //BeginBatchDraw();
    putimage(0, 0, &backimg);
    putimage(120, 130, &choiseimg);
    putimage(120, 180, &choiseimg);
    putimage(120, 230, &choiseimg);
    putimage(120, 280, &choiseimg);
    putimage(120, 430, &selectimg);
    putimage(490, 430, &selectimg);

    setbkmode(TRANSPARENT);
    setcolor(YELLOW);
    settextstyle(40, 0, "Century Gothic");
    outtextxy(205, 10, "z1in图书管理系统");
    setcolor(BLUE);
    settextstyle(20, 0, "Century Gothic");
    outtextxy(125, 435, "续借");
    outtextxy(495, 435, "退出");
    int i = 0;
    int flag = 0;
    char tempname[40];
    char tempbook[30];
    char tempstr[100];
        
    if ((**reader)->data.zhanghao.many!=0)
    {
        outtextxy(275, 135, "您已借阅的书籍");
        settextstyle(20, 0, "Century Gothic");
        outtextxy(135, 185, "------------------------------图书信息-----------------------------");
        outtextxy(135, 235, "书名         作者       出版社           单价     馆藏量     借阅数");
        int x = 0;
        for (int i = 0; i < 3; i++)
        {
            if (searchbyname(list, (**reader)->data.zhanghao.book[i].name) != NULL)
            {
                node* tempbook = searchbyname(list, (**reader)->data.zhanghao.book[i].name);
                sprintf(tempstr, "%-10s %-10s %-14s %-10.1f %-14d %-6d\n", tempbook->data.name, tempbook->data.author, tempbook->data.chubanshe, tempbook->data.price, tempbook->data.num, tempbook->data.jieyue);
                outtextxy(135, 285 + x, tempstr);
                x += 50;
                putimage(120, 280+x, &choiseimg);
            }
        }
        MOUSEMSG msg;
        while (1)
        {
            msg = GetMouseMsg();
            switch (msg.uMsg)
            {
            case WM_LBUTTONDOWN:
                if (msg.x >= 120 && msg.x <= 180 && msg.y >= 430 && msg.y <= 460)
                {
                    InputBox(tempbook, 30, "请输入您要续借的书籍名称");
                    for (int i = 0; i < 3; i++)
                    {
                        if (strcmp((**reader)->data.zhanghao.book[i].name, tempbook) == 0)
                        {

                            MessageBox(NULL, "您已续借成功.", "来自z1in的提醒.", MB_OK | MB_SYSTEMMODAL);
                            flag += 1;
                        }
                    }
                    if (flag == 0)
                    {
                        MessageBox(NULL, "您并没有借阅该书哦.", "来自z1in的提醒.", MB_OK | MB_SYSTEMMODAL);
                    }
                }
                if (msg.x >= 490 && msg.x <= 550 && msg.y >= 430 && msg.y <= 460)
                {
                    closegraph();
                    return 0;
                }
            }
        }
    }
    //dif((**reader)->data.zhanghao.book->a);
}

void popular(struct node* list)
{
    bubblesort(list);
    printflist(list);
    return;
}

void tuijian(struct node* list)
{
    IMAGE backimg;
    IMAGE choiseimg;
    IMAGE selectimg;
    system("cls");
    int select;
    initgraph(640, 480);
    loadimage(&backimg, "004.jpg", 640, 480);
    loadimage(&choiseimg, "001.jfif", 420, 30);
    loadimage(&selectimg, "002.jfif", 80, 30);
    //BeginBatchDraw();
    putimage(0, 0, &backimg);
    putimage(120, 130, &choiseimg);
    putimage(120, 180, &choiseimg);
    putimage(120, 230, &choiseimg);
    putimage(120, 280, &choiseimg);
    putimage(110, 430, &selectimg);
    putimage(490, 430, &selectimg);

    setbkmode(TRANSPARENT);
    setcolor(YELLOW);
    settextstyle(40, 0, "Century Gothic");
    outtextxy(205, 10, "z1in图书管理系统");
    setcolor(BLUE);
    settextstyle(20, 0, "Century Gothic");
    outtextxy(115, 435, "修改价位");
    outtextxy(495, 435, "退出");

    int flag = 0;
    char target[20];
    char tempstr[100];

zxy:InputBox(target, 20, "请输入您的理想价格,我们将推荐与您理想价格稍低的书.");
    float idea = atoi(target);
    bubblesort(list);
    struct node* pmove = list->next;
    system("cls");
    outtextxy(275, 135, "为您查询到以下书籍");
    settextstyle(20, 0, "Century Gothic");
    outtextxy(135, 185, "------------------------------图书信息-----------------------------");
    outtextxy(135, 235, "书名         作者       出版社           单价     馆藏量     借阅数");

    int x = 0;

    while (pmove != NULL)     //一直打印直至为空(也说明数据打印完毕)
    {
        if (pmove->data.price <= idea && flag < 4)
        {
            sprintf(tempstr, "%-10s %-10s %-14s %-10.1f %-14d %-6d\n", pmove->data.name, pmove->data.author, pmove->data.chubanshe, pmove->data.price, pmove->data.num, pmove->data.jieyue);
            outtextxy(135, 285 + x, tempstr);
            x += 50;
            putimage(120, 280+x, &choiseimg);
            flag++;
        }
        pmove = pmove->next;
    }
    if (flag == 0)
    {
        MessageBox(NULL, "没有理想价位的书哦.", "来自z1in的提醒.", MB_OK | MB_SYSTEMMODAL);
    }
    MOUSEMSG msg;
    while (1)
    {
        msg = GetMouseMsg();
        switch (msg.uMsg)
        {
        case WM_LBUTTONDOWN:
            if (msg.x >= 110 && msg.x <= 170 && msg.y >= 430 && msg.y <= 460)
            {
                goto zxy;
            }
            if (msg.x >= 490 && msg.x <= 550 && msg.y >= 430 && msg.y <= 460)
            {
                closegraph();
                return;
            }
        }
    }
}

void bookcon()   //图书管理函数
{
    IMAGE backimg;
    IMAGE choiseimg;
    system("cls");
zxy:initgraph(640, 480);
    loadimage(&backimg, "004.jpg", 640, 480);
    loadimage(&choiseimg, "001.jfif", 220, 30);
    //BeginBatchDraw();
    putimage(0, 0, &backimg);
    putimage(220, 130, &choiseimg);
    putimage(220, 180, &choiseimg);
    putimage(220, 230, &choiseimg);
    putimage(220, 280, &choiseimg);
    putimage(220, 330, &choiseimg);

    setbkmode(TRANSPARENT);
    setcolor(YELLOW);
    settextstyle(40, 0, "Century Gothic");
    outtextxy(205, 10, "z1in图书管理系统");
    setcolor(BLUE);
    settextstyle(20, 0, "Century Gothic");
    outtextxy(265, 135, "       增加图书");
    outtextxy(265, 185, "       删除图书");
    outtextxy(265, 235, "       更新图书");
    outtextxy(265, 285, "       查询图书  ");
    outtextxy(265, 335, "           退 出  ");
    //EndBatchDraw();
    MOUSEMSG msg;
    while (1)
    {
        msg = GetMouseMsg();
        switch (msg.uMsg)
        {
        case WM_LBUTTONDOWN:
            if (msg.x >= 220 && msg.x <= 420 && msg.y >= 130 && msg.y <= 160)
            {
                closegraph(); 
                adb();
                goto zxy;
            }
            else if (msg.x >= 220 && msg.x <= 420 && msg.y >= 180 && msg.y <= 210)
            {
                closegraph();
                deb();
                goto zxy;
            }
            else if (msg.x >= 220 && msg.x <= 440 && msg.y >= 230 && msg.y <= 260)
            {
                closegraph();
                reb();
                goto zxy;
            }
            else if (msg.x >= 220 && msg.x <= 420 && msg.y >= 280 && msg.y <= 310)
            {
                closegraph();
                seb();
                goto zxy;
            }
            else if (msg.x >= 220 && msg.x <= 440 && msg.y >= 330 && msg.y <= 360)
            {
                outtextxy(265, 335, " 退出中,请稍等...... ");
                closegraph();
                return;
            }
        }
    }
}

void personcon()   //读者管理系统
{
    IMAGE backimg;
    IMAGE choiseimg;
zxy:system("cls");
    initgraph(640, 480);
    loadimage(&backimg, "004.jpg", 640, 480);
    loadimage(&choiseimg, "001.jfif", 220, 30);
    //BeginBatchDraw();
    putimage(0, 0, &backimg);
    putimage(220, 130, &choiseimg);
    putimage(220, 180, &choiseimg);
    putimage(220, 230, &choiseimg);
    putimage(220, 280, &choiseimg);
    putimage(220, 330, &choiseimg);

    setbkmode(TRANSPARENT);
    setcolor(YELLOW);
    settextstyle(40, 0, "Century Gothic");
    outtextxy(205, 10, "z1in图书管理系统");
    setcolor(BLUE);
    settextstyle(20, 0, "Century Gothic");
    outtextxy(265, 135, "       增加读者");
    outtextxy(265, 185, "       删除读者");
    outtextxy(265, 235, "       更新读者");
    outtextxy(265, 285, "       查询读者  ");
    outtextxy(265, 335, "           退 出  ");
    //EndBatchDraw();
    MOUSEMSG msg;
    while (1)
    {
        msg = GetMouseMsg();
        switch (msg.uMsg)
        {
        case WM_LBUTTONDOWN:
            if (msg.x >= 220 && msg.x <= 420 && msg.y >= 130 && msg.y <= 160)
            {
                closegraph();
                adp();
                goto zxy;
            }
            else if (msg.x >= 220 && msg.x <= 420 && msg.y >= 180 && msg.y <= 210)
            {
                closegraph();
                dep();
                goto zxy;
            }
            else if (msg.x >= 220 && msg.x <= 440 && msg.y >= 230 && msg.y <= 260)
            {
                closegraph();
                rep();
                goto zxy;
            }
            else if (msg.x >= 220 && msg.x <= 420 && msg.y >= 280 && msg.y <= 310)
            {
                closegraph();
                sep();
                goto zxy;
            }
            else if (msg.x >= 220 && msg.x <= 440 && msg.y >= 330 && msg.y <= 360)
            {
                closegraph();
                outtextxy(265, 335, " 退出中,请稍等...... ");
                return;
            }
        }
    }
}

void readers(struct node_pe** reader)    //读者的操作    
{
zxy:IMAGE backimg;
    IMAGE choiseimg;
    system("cls");
    int select;
    initgraph(640, 480);
    loadimage(&backimg, "004.jpg", 640, 480);
    loadimage(&choiseimg, "001.jfif", 220, 30);
    //BeginBatchDraw();
    putimage(0, 0, &backimg);
    putimage(220, 130, &choiseimg);
    putimage(220, 180, &choiseimg);
    putimage(220, 230, &choiseimg);
    putimage(220, 280, &choiseimg);
    putimage(220, 330, &choiseimg);
    putimage(220, 380, &choiseimg);
    setbkmode(TRANSPARENT);
    setcolor(YELLOW);
    settextstyle(40, 0, "Century Gothic");
    outtextxy(205, 10, "z1in图书管理系统");
    setcolor(BLUE);
    settextstyle(20, 0, "Century Gothic");
    outtextxy(265, 135, "           借书");
    outtextxy(265, 185, "           还书");
    outtextxy(265, 235, "           续借");
    outtextxy(255, 285, "  图书受欢迎度排行榜");
    outtextxy(255, 335, "      价位书籍推荐");
    outtextxy(265, 385, "           退出  ");
    //EndBatchDraw();
    MOUSEMSG msg;
    while (1)
    {
        msg = GetMouseMsg();
        switch (msg.uMsg)
        {
        case WM_LBUTTONDOWN:
            if (msg.x >= 220 && msg.x <= 420 && msg.y >= 130 && msg.y <= 160)
            {
                closegraph();
                jieshu(&reader);
                goto zxy;
            }
            else if (msg.x >= 220 && msg.x <= 420 && msg.y >= 180 && msg.y <= 210)
            {
                closegraph();
                huanshu(&reader);
                goto zxy;
            }
            else if (msg.x >= 220 && msg.x <= 440 && msg.y >= 230 && msg.y <= 260)
            {
                closegraph();
                xujie(&reader);
                goto zxy;
            }
            else if (msg.x >= 220 && msg.x <= 420 && msg.y >= 280 && msg.y <= 310)
            {
                closegraph();
                popular(list);
                goto zxy;
            }
            else if (msg.x >= 220 && msg.x <= 440 && msg.y >= 330 && msg.y <= 360)
            {
                closegraph();
                tuijian(list);
                goto zxy;
            }
            else if (msg.x >= 220 && msg.x <= 420 && msg.y >= 380 && msg.y <= 410)
            {
                closegraph();
                return;
            }
        }
    }
}

struct personmessage register_()
{
    IMAGE backimg;
    IMAGE choiseimg;
    system("cls");
    int select;
    initgraph(640, 480);
    loadimage(&backimg, "004.jpg", 640, 480);
    loadimage(&choiseimg, "001.jfif", 420, 30);

    //BeginBatchDraw();
    putimage(0, 0, &backimg);
    putimage(100, 130, &choiseimg);
    putimage(100, 180, &choiseimg);
    putimage(100, 230, &choiseimg);

    setbkmode(TRANSPARENT);
    setcolor(YELLOW);
    settextstyle(40, 0, "Century Gothic");
    outtextxy(205, 10, "z1in图书管理系统");
    setcolor(BLUE);
    settextstyle(20, 0, "Century Gothic");
    outtextxy(130, 135, "请输入您的姓名");
    outtextxy(130, 185, "请输入您的性别");
    outtextxy(130, 235, "请输入您的账户密码  ");
    //EndBatchDraw();

    int flag = 1; int flag1 = 1;
    char tempnumber[20];    //学号
    char crypto[20];     //密码
    struct personmessage reader;
    system("cls");
    password_circle();
    fflush(stdin);
    char number[30];
    InputBox(number, 30, "请输入您的学号:");
    if (pesearchbynumber(pelist, number) != NULL)
    {
        while (flag)
        {
            system("cls");
            struct node_pe* pereader = pesearchbynumber(pelist, number);
            InputBox(crypto, 20, "请输入您的密码:");
            if (strcmp(crypto,pereader->data.password)==0)
            {
                flag = 0;
                MessageBox(NULL, "您已成功登录","来自z1in的提醒:",MB_OK | MB_SYSTEMMODAL);
                readers(&pereader);
                pesaveinfotofile("person.txt", pelist);
                saveinfotofile("book.txt", list);
            }
            else
            {
                int select = MessageBox(NULL, "密码错误,是否继续登录.", "来自z1in的提醒", MB_YESNO | MB_SYSTEMMODAL);
                if (select == 6)
                    flag = 1;
                else if (select == 7)
                    flag = 0;
            }
        }
    }
    else
    {
        MessageBox(NULL, "该账户还未注册,请先注册", "来自z1in的提醒.", MB_OK | MB_SYSTEMMODAL);
        strcpy(reader.zhanghao.schoolnumber, number);
        char ch;
        int x = 350;
        InputBox(reader.zhanghao.name, 30, "请输入您的姓名");
        outtextxy(335, 135, reader.zhanghao.name); 
        InputBox(reader.zhanghao.sex, 20, "请输入您的性别");
        outtextxy(335, 185, reader.zhanghao.sex);
        InputBox(reader.password, 20, "请输入您的账户密码");
        outtextxy(335, 235, reader.password);
        reader.zhanghao.many = 0;
        strcpy(reader.zhanghao.book[0].name, "0");
        strcpy(reader.zhanghao.book[1].name, "0");
        strcpy(reader.zhanghao.book[2].name, "0");
        settextstyle(25, 0, "Century Gothic");
        setcolor(YELLOW);
        outtextxy(155, 400, "注册成功,正在返回中,请稍后.......");
        Sleep(2000);
        closegraph();
        peinsertnodebyhead(pelist, reader);
        struct node_pe* pereader = pesearchbynumber(pelist,number);
        readers(&pereader);
        pesaveinfotofile("person.txt", pelist);
        saveinfotofile("book.txt", list);
    }
    return reader;
}

void quit()
{
    int select;
    cout << "您确定要退出吗?" << "是/y,否/n" << endl;
    for(;;)
    {
        select = _getch();
        if (select == 'y')
            exit(0);
        else if (select == 'n')
            break;
        else
            cout << "输入不正确,请重新输入" << endl;
    }
    system("cls");
}

//选择登陆方式的函数
int login()     
{
    system("cls");
    int select;
    initgraph(640, 480);
    loadimage(&backimg, "004.jpg", 640, 480);
    loadimage(&choiseimg, "001.jfif", 220, 30);
    //BeginBatchDraw();
    putimage(0, 0, &backimg);
    putimage(220, 130, &choiseimg);
    putimage(220, 180, &choiseimg);
    putimage(220, 230, &choiseimg);

    setbkmode(TRANSPARENT);
    setcolor(YELLOW);
    settextstyle(40, 0, "Century Gothic");
    outtextxy(205, 10, "z1in图书管理系统");
    setcolor(BLUE);
    settextstyle(20, 0, "Century Gothic");
    outtextxy(265, 135, "    管 理 员 登 陆");
    outtextxy(265, 185, "      读 者 登 录");
    outtextxy(265, 235, "           退 出  ");
    //EndBatchDraw();
    MOUSEMSG msg;
    while (1)
    {
        msg = GetMouseMsg();
        switch (msg.uMsg)
        {
        case WM_LBUTTONDOWN:
            if (msg.x >= 220 && msg.x <= 420 && msg.y >= 130 && msg.y <= 160)
            {
                closegraph();
                int i = rogin(); 
                if (i == 1)
                {
                    MessageBoxA(NULL, "您已成功登陆管理员。", "来自z1in的提醒",MB_OK | MB_SYSTEMMODAL);
                    return 1;
                }
            }
            else if (msg.x >= 220 && msg.x <= 420 && msg.y >= 180 && msg.y <= 210)
            {
                closegraph();
                register_();
                return -1;;//调用第二个函数
            }
            else if (msg.x >= 220 && msg.x <= 440 && msg.y >= 230 && msg.y <= 260)
            {
                closegraph();
                exit(0);
            }
        }
    }
}

//初始化链表和文件读的地方并提供管理员模式的功能入口
int main()
{
    list = creathead();
    pelist = creatpehead();
    readinfofromfile("book.txt", list);
    pereadinfofromfile("person.txt", pelist);
    

    cout << "正在打开03组的图书管理系统,请稍等........" << endl;    Sleep(1000);
    system("cls");
zxy:int i = login();
    int select;
    while (1)
    {
        if (i == 1)
        {
            system("cls");
        zxy1:initgraph(640, 480);
            loadimage(&backimg, "004.jpg", 640, 480);
            loadimage(&choiseimg, "001.jfif", 220, 30);
            //BeginBatchDraw();
            putimage(0, 0, &backimg);
            putimage(220, 130, &choiseimg);
            putimage(220, 180, &choiseimg);
            putimage(220, 230, &choiseimg);

            setbkmode(TRANSPARENT);
            setcolor(YELLOW);
            settextstyle(40, 0, "Century Gothic");
            outtextxy(205, 10, "z1in图书管理系统");
            setcolor(BLUE);
            settextstyle(20, 0, "Century Gothic");
            outtextxy(265, 135, "     图 书 管 理");
            outtextxy(265, 185, "     读 者 管 理");
            outtextxy(265, 235, "          退 出  ");
            //EndBatchDraw();
            MOUSEMSG msg;
            while (1)
            {
                msg = GetMouseMsg();
                switch (msg.uMsg)
                {
                case WM_LBUTTONDOWN:
                    if (msg.x >= 220 && msg.x <= 420 && msg.y >= 130 && msg.y <= 160)
                    {
                        closegraph();
                        bookcon();
                        goto zxy1;
                    }
                    else if (msg.x >= 220 && msg.x <= 420 && msg.y >= 180 && msg.y <= 210)
                    {
                        closegraph();
                        personcon();
                        goto zxy1;
                    }
                    else if (msg.x >= 220 && msg.x <= 440 && msg.y >= 230 && msg.y <= 260)
                    {
                        closegraph();
                        goto zxy;
                    }
                }
            }
        }
        else if (i == -1)
        {
            system("cls");
            initgraph(640, 480);
            loadimage(&backimg, "003.jfif", 640, 480);
            loadimage(&choiseimg, "001.jfif", 220, 30);
            //BeginBatchDraw();
            putimage(0, 0, &backimg);
            putimage(220, 130, &choiseimg);
            putimage(220, 180, &choiseimg);

            setbkmode(TRANSPARENT);
            setcolor(YELLOW);
            settextstyle(40, 0, "Century Gothic");
            outtextxy(205, 10, "z1in图书管理系统");
            setcolor(BLUE);
            settextstyle(20, 0, "Century Gothic");
            outtextxy(265, 135, "     借 书 管 理");
            outtextxy(265, 185, "           退 出  ");
            //EndBatchDraw();
            MOUSEMSG msg;
            while (1)
            {
                msg = GetMouseMsg();
                switch (msg.uMsg)
                {
                case WM_LBUTTONDOWN:
                    if (msg.x >= 220 && msg.x <= 420 && msg.y >= 130 && msg.y <= 160)
                    {
                        register_();
                        closegraph();
                    }
                    else if (msg.x >= 220 && msg.x <= 420 && msg.y >= 180 && msg.y <= 210)
                    {
                        goto zxy;
                        closegraph();
                    }
                }
            }
        }
    }
	return 0;
}

以上就是所有的代码了,会有好多不成熟且可笑的bug,就见笑了,若果发现什么bug的话可以联系我的邮箱 1679369498@qq.com 。

标签:管理系统,putimage,大实训,outtextxy,期末,&&,msg,choiseimg,data
来源: https://blog.csdn.net/goat_2003/article/details/118932924