目录
用EasyX图形库写的第一个小项目。
项目的大致思路
实现的功能
管理员
查看所有图书信息
修改图书信息
删除图书信息
新增图书信息
用户
查看所有图书信息
查找图书
借阅图书
归还图书
项目的逐步实现
- 创建结构体储存数据
//定义一个存储图书信息的结构体 //定义数组存储所有图书信息 typedef struct { char title[1000];//书名 char author[1000];//作者 char totalnum[1000];//图书总数 char borrownum[1000];//图书借阅数 }Book; Book books[MAXSIZE]; //定义一个存储借阅图书信息的结构体 //定义数组存储所有图书信息 typedef struct { char title[1000];//书名 char author[1000];//作者 }BoBook; BoBook bobooks[MAXSIZE]; //定义一个存储归还图书信息的结构体 //定义数组存储所有图书信息 typedef struct { char title[1000];//书名 char author[1000];//作者 }ReBook; ReBook rebooks[MAXSIZE]; //定义管理员结构体 //为了方便只设置一个管理员 typedef struct { char name[200]; char code[200]; }Manager; Manager managers; //定义用户结构体 //为了方便只设置一个用户 typedef struct { char name[200]; char code[200]; }User; User users;
- 设置首页画面,功能有管理员操作页面以及用户操作页面
void FirstPage() { initgraph(1170, 869); IMAGE img_bk; loadimage(&img_bk, "./bk1.jpg"); cleardevice();//清屏 BeginBatchDraw();//开始批量绘图 putimage(0, 0, &img_bk);//展示背景图片 setbkmode(TRANSPARENT);//设置背景模式透明 //大标题 char FirstTitle[20] = { "图书管理系统" }; settextstyle(80, 0, "华文行楷"); outtextxy(350, 50, FirstTitle); //首页的三个选项 setfillcolor(RGB(255, 197, 110)); fillrectangle(380, 300, 800, 350); fillrectangle(380, 380, 800, 430); fillrectangle(380, 460, 800, 510); //三个选项的文字 settextcolor(BLACK); settextstyle(40, 0, "隶书"); //首页三个选项 char FirstSelect1[20] = { "管理员操作界面" }; char FirstSelect2[20] = { "用户操作界面" }; char FirstSelect3[20] = { "退出系统" }; outtextxy(395, 305, FirstSelect1); outtextxy(395, 385, FirstSelect2); outtextxy(395, 465, FirstSelect3); FlushBatchDraw(); EndBatchDraw(); //鼠标操作 MOUSEMSG m1; //进入主界面选项操作 while (1) { m1 = GetMouseMsg();//获取鼠标操作 if (m1.x >= 380 && m1.x <= 800 && m1.y >= 300 && m1.y <= 350)//管理员界面 { setlinecolor(RED); rectangle(380, 300, 800, 350); if (m1.uMsg == WM_LBUTTONDOWN) { ManagerSignIn(); } } else if (m1.x >= 380 && m1.x <= 800 && m1.y >= 380 && m1.y <= 430)//用户界面 { setlinecolor(RED); rectangle(380, 380, 800, 430); if (m1.uMsg == WM_LBUTTONDOWN) { ReSiPage(); } } else if (m1.x >= 380 && m1.x <= 800 && m1.y >= 460 && m1.y <= 510) { setlinecolor(RED); rectangle(380, 460, 800, 510); if (m1.uMsg == WM_LBUTTONDOWN) { exit(0); } } //鼠标不在上面悬停 else { setlinecolor(WHITE); rectangle(380, 300, 800, 350); rectangle(380, 380, 800, 430); rectangle(380, 460, 800, 510); } } }
完成首页设计之后,后面的页面基本可以copy一样的。我设置了三种不同的背景板,让原本简陋的项目看起来高级一点
-
再继续实现首页的两个功能,首先是管理员登录
void ManagerSignIn() { ifstream AdminSignIn; AdminSignIn.open("ManagerSignIn.txt", ios::in); AdminSignIn >> managers.name >> managers.code; AdminSignIn.close();// 关闭文件 char ReceAcctNumber[1000]; InputBox(ReceAcctNumber, 1000, "请输入用户名"); char ReceAcctPassWord[1000]; InputBox(ReceAcctPassWord, 1000, "请输入密码"); //如果用户名和密码都正确才进度到管理员界面 //否则弹窗提示错误 if (strcmp(managers.name, ReceAcctNumber) == 0 && strcmp(managers.code, ReceAcctPassWord) == 0) { cleardevice();//清屏 ManagerPage(); } else { HWND SignError = GetHWnd();//这个函数用于获取绘图窗口句柄。 int isok = MessageBox(SignError, "用户名或密码错误!", "提示", MB_OK); } }
自创一个ManagerSignIn.txt文本,记录管理员的名字与密码。不知道为什么管理员名字记录为中文会出错,所以为了避免这个错误,我不用中文。在答辩前半个小时,我突然发现只需要把我定义的管理员数组开大一点,就不会出现这样的错误了。再是用户的注册和登录界面
void ReSiPage() { initgraph(1170, 869); IMAGE img_bk; loadimage(&img_bk, "./bk3.jpg"); cleardevice();//清屏 BeginBatchDraw();//开始批量绘图 putimage(0, 0, &img_bk);//展示背景图片 setbkmode(TRANSPARENT);//设置背景模式透明 //标题 char SecondTitle[20] = "用户注册或登录界面"; settextstyle(40, 0, "华文行楷"); outtextxy(0, 0, SecondTitle); //三个选项的背景 setfillcolor(RGB(191, 149, 214)); fillrectangle(380, 300, 800, 350); fillrectangle(380, 380, 800, 430); fillrectangle(380, 460, 800, 510); //三个选项的文字 settextcolor(BLACK); settextstyle(40, 0, "隶书"); //首页三个选项 char SecondSelect1[20] = { "注册" }; char SecondSelect2[20] = { "登录" }; char SecondSelect6[20] = { "返回" }; outtextxy(395, 305, SecondSelect1); outtextxy(395, 385, SecondSelect2); outtextxy(395, 465, SecondSelect6); FlushBatchDraw(); EndBatchDraw(); //定义第三个鼠标操作 MOUSEMSG m3; //进入主界面选项操作界面 while (1) { m3 = GetMouseMsg();//获取鼠标操作 if (m3.x >= 380 && m3.x <= 800 && m3.y >= 300 && m3.y <= 350)//注册 { setlinecolor(RED); rectangle(380, 300, 800, 350); if (m3.uMsg == WM_LBUTTONDOWN) { UserRegister(); } } else if (m3.x >= 380 && m3.x <= 800 && m3.y >= 380 && m3.y <= 430)//登录 { setlinecolor(RED); rectangle(380, 380, 800, 430); if (m3.uMsg == WM_LBUTTONDOWN) { UserSignIn(); } } else if (m3.x >= 380 && m3.x <= 800 && m3.y >= 460 && m3.y <= 510)//借 { setlinecolor(RED); rectangle(380, 460, 800, 510); if (m3.uMsg == WM_LBUTTONDOWN) { //返回 cleardevice(); FirstPage(); } } //鼠标不在上面悬停 else { setlinecolor(WHITE); rectangle(380, 300, 800, 350); rectangle(380, 380, 800, 430); rectangle(380, 460, 800, 510); } } }
点击进入用户的注册
void UserRegister() { while (1) { InputBox(users.name, 20, "请输入注册用户名称:");//显示一个输入框, if (BookFormat(users.name))//为真跳出循环 { break; } } while (1) { InputBox(users.code, 20, "请输入注册用户的密码:");//显示一个输入框, if (BookFormat(users.code))//为真跳出循环 { break; } } if (strlen(users.name) != 0 && strlen(users.code) != 0) { fstream myFile; myFile.open("UserSignIn.txt", ios::app); // append,追加 myFile << users.name << " " << users.code << endl; myFile.close(); } ReSiPage(); }
把输入的信息存储进入UserSignIn.txt文本,然后返回注册和登录界面,进行登录
void UserSignIn() { ifstream UserSignIn; UserSignIn.open("UserSignIn.txt", ios::in); UserSignIn >> users.name >> users.code; UserSignIn.close();// 关闭文件 char ReceAcctNumber[64]; InputBox(ReceAcctNumber, 10, "请输入用户名"); char ReceAcctPassWord[64]; InputBox(ReceAcctPassWord, 10, "请输入密码"); //如果用户名和密码都正确才进度到管理员界面 //否则弹窗提示错误 if (strcmp(users.name, ReceAcctNumber) == 0 && strcmp(users.code, ReceAcctPassWord) == 0) { cleardevice();//清屏 UserPage(); } else { HWND SignError = GetHWnd();//这个函数用于获取绘图窗口句柄。 int isok = MessageBox(SignError, "用户名或密码错误!", "提示", MB_OK); } }
登录成功就直接进入用户界面咯,为了偷懒,我只设置了一个用户啊哈哈。
-
先来实现管理员的基本操作,首先是管理员的操作界面
void ManagerPage() { initgraph(1170, 869); IMAGE img_bk; loadimage(&img_bk, "./bk2.jpg"); cleardevice();//清屏 BeginBatchDraw();//开始批量绘图 putimage(0, 0, &img_bk);//展示背景图片 setbkmode(TRANSPARENT);//设置背景模式透明 //标题 char SecondTitle[20] = "管理员操作界面"; settextstyle(40, 0, "华文行楷"); outtextxy(0, 0, SecondTitle); //三个选项的背景 setfillcolor(RGB(56, 242, 212)); fillrectangle(380, 300, 800, 350); fillrectangle(380, 380, 800, 430); fillrectangle(380, 460, 800, 510); fillrectangle(380, 540, 800, 590); fillrectangle(380, 620, 800, 670); //三个选项的文字 settextcolor(BLACK); settextstyle(40, 0, "隶书"); //首页三个选项 char SecondSelect1[20] = { "查看所有图书" }; char SecondSelect2[20] = { "修改图书信息" }; char SecondSelect3[20] = { "删除图书信息" }; char SecondSelect4[20] = { "增加图书信息" }; char SecondSelect5[20] = { "返回" }; outtextxy(395, 305, SecondSelect1); outtextxy(395, 385, SecondSelect2); outtextxy(395, 465, SecondSelect3); outtextxy(395, 545, SecondSelect4); outtextxy(395, 625, SecondSelect5); FlushBatchDraw(); EndBatchDraw(); //定义第二个鼠标操作 MOUSEMSG m2; //进入主界面选项操作界面 while (1) { m2 = GetMouseMsg();//获取鼠标操作 if (m2.x >= 380 && m2.x <= 800 && m2.y >= 300 && m2.y <= 350)//查 { setlinecolor(RED); rectangle(380, 300, 800, 350); if (m2.uMsg == WM_LBUTTONDOWN) { cleardevice(); ViewAllBook1(); } } else if (m2.x >= 380 && m2.x <= 800 && m2.y >= 380 && m2.y <= 430)//改 { setlinecolor(RED); rectangle(380, 380, 800, 430); if (m2.uMsg == WM_LBUTTONDOWN) { AlterBook(); } } else if (m2.x >= 380 && m2.x <= 800 && m2.y >= 460 && m2.y <= 510)//删 { setlinecolor(RED); rectangle(380, 460, 800, 510); if (m2.uMsg == WM_LBUTTONDOWN) { DeleteBook(); } } else if (m2.x >= 380 && m2.x <= 800 && m2.y >= 540 && m2.y <= 590)//增 { setlinecolor(RED); rectangle(380, 540, 800, 590); if (m2.uMsg == WM_LBUTTONDOWN) { AddBook(); } } else if (m2.x >= 380 && m2.x <= 800 && m2.y >= 620 && m2.y <= 670) { setlinecolor(RED); rectangle(380, 620, 800, 670); if (m2.uMsg == WM_LBUTTONDOWN) { //返回 cleardevice(); FirstPage(); } } //鼠标不在上面悬停 else { setlinecolor(WHITE); rectangle(380, 300, 800, 350); rectangle(380, 380, 800, 430); rectangle(380, 460, 800, 510); rectangle(380, 540, 800, 590); rectangle(380, 620, 800, 670); } } }
每一次运行代码,界面切换只有第一次切换的时候会不流畅,其他时候挺好的,再进入四大功能,查看所有数据
void ViewAllBook1() { initgraph(1170, 869); IMAGE img_bk; loadimage(&img_bk, "./bk2.jpg"); cleardevice();//清屏 BeginBatchDraw();//开始批量绘图 putimage(0, 0, &img_bk);//展示背景图片 setbkmode(TRANSPARENT);//设置背景模式透明 //标题 char SecondTitle[20] = "查看所有图书"; settextstyle(35, 0, "华文行楷"); outtextxy(0, 0, SecondTitle); settextstyle(30, 0, "隶书"); settextcolor(BLACK); outtextxy(150, 30, "图书名称"); outtextxy(450, 30, "作者"); outtextxy(680, 30, "图书总数"); outtextxy(900, 30, "图书借阅数"); PrintfBook(); setfillcolor(RGB(56, 242, 212)); fillrectangle(380, 700, 800, 750); settextcolor(BLACK); settextstyle(40, 0, "隶书"); char SecondSelect5[20] = { "返回" }; outtextxy(395, 705, SecondSelect5); FlushBatchDraw(); EndBatchDraw(); MOUSEMSG m4; while (1) { m4 = GetMouseMsg(); if (m4.x >= 380 && m4.x <= 800 && m4.y >= 700 && m4.y <= 750) { setlinecolor(RED); rectangle(380, 700, 800, 750); if (m4.uMsg == WM_LBUTTONDOWN) { //返回 ManagerPage(); } } else { setlinecolor(WHITE); rectangle(380, 700, 800, 750); } } } //打印函数 void PrintfBook() { if (BookNum == 0) { settextstyle(50, 0, "隶书"); outtextxy(200, 200, "当前记录为空!"); return; } for (int i = 1; i <= BookNum; i++) { //缩放字体 settextstyle(25, 0, "隶书"); outtextxy(150, 40 + 40 * i, books[i - 1].title);//输出书名 outtextxy(450, 40 + 40 * i, books[i - 1].author);//作者 outtextxy(680, 40 + 40 * i, books[i - 1].totalnum);//图书总数 outtextxy(900, 40 + 40 * i, books[i - 1].borrownum);//借阅数 } }
我只输出了一面的内容,没有实现翻页功能,因为本来就不会写,所以越简单越好吧
//返回要查找、修改、删除人所在的结构体的下标 int ReturnPosition() { //接受用户输入 char ReceInput[200]; InputBox(ReceInput, 100, "请输入书名或者作者名进行操作");//显示一个输入框 //进行循环查找,一旦相同就跳出循环 for (int i = 0; i < BookNum; i++) { if (strcmp(books[i].title, ReceInput) == 0 || strcmp(books[i].author, ReceInput) == 0)//返回0表示两个字符串相等 { return i; } } //如果没找到就返回-1 return -1; } //保存修改后的数据 void SaveAlter() { //先删掉,但是不将人数置空所以不能调用之前的删除函数 fstream myFile; myFile.open("data.txt", ios::trunc); //- 删除现有文件中的数据 myFile.open("data.txt", ios::out);//写入 for (int i = 0; i < BookNum; i++) { if (strlen(books[i].title) != 0 && strlen(books[i].author) != 0) { myFile << books[i].title << " " << books[i].author << " " << books[i].totalnum << "" << books[i].borrownum << endl; } } myFile.close(); } void AlterBook()//改 { //直接套用上面查找的操作,在此基础上加一行修改前 //因为需要得到要修改人在结构体数组中的位置-下标,所以不能将函数直接拿过来用,得粘贴过来 //定义一个变量用来接收下标 int TempModi = ReturnPosition(); if (TempModi == -1)//没找到 { //获取窗口句柄 HWND hndtipsM = GetHWnd(); //用一个字符数组来总结句子 int isok = MessageBox(hndtipsM, "抱歉,没有这本书!", "提示", MB_OK); } else//找到了这本书进行下面的操作 { cleardevice(); initgraph(1170, 869); cleardevice(); BeginBatchDraw(); IMAGE img_bk; loadimage(&img_bk, "./bk2.jpg"); putimage(0, 0, &img_bk); setbkmode(TRANSPARENT); //标题 char SecondTitle[20] = "修改图书信息"; settextstyle(35, 0, "华文行楷"); outtextxy(0, 0, SecondTitle); settextcolor(BLACK); settextstyle(50, 0, "隶书"); outtextxy(30, 30, "修改前"); outtextxy(30, 350, "修改后"); settextstyle(30, 0, "隶书"); outtextxy(60, 70, "图书名称"); outtextxy(400, 70, "作者"); outtextxy(650, 70, "图书总数"); outtextxy(800, 70, "借阅数"); //修改后 outtextxy(60, 390, "图书名称"); outtextxy(400, 390, "作者"); outtextxy(650, 390, "图书总数"); outtextxy(800, 390, "借阅数"); //打印找到的信息 outtextxy(60, 100, books[TempModi].title);//输出书名 outtextxy(400, 100, books[TempModi].author);//输出作者 outtextxy(650, 100, books[TempModi].totalnum);//输出图书总数 outtextxy(800, 100, books[TempModi].borrownum);//输出借阅数 setfillcolor(RGB(56, 242, 212)); fillrectangle(380, 700, 800, 750); settextcolor(BLACK); settextstyle(40, 0, "隶书"); char SecondSelect5[20] = { "返回" }; outtextxy(395, 705, SecondSelect5); FlushBatchDraw(); EndBatchDraw(); while (1) { //接收输入的修改后的值覆盖进去 InputBox(books[TempModi].title, 20, "请输入修改后的书名"); if (BookFormat(books[TempModi].title)) { break; } } while (1) { //接收输入的修改后的值覆盖进去 InputBox(books[TempModi].author, 20, "请输入修改后的作者名"); if (BookFormat(books[TempModi].author)) { break; } } while (1) { //接收输入的修改后的值覆盖进去 InputBox(books[TempModi].totalnum, 20, "请输入修改后的出版社"); if (BookFormat(books[TempModi].totalnum)) { break; } } while (1) { //接收输入的修改后的值覆盖进去 InputBox(books[TempModi].borrownum, 20, "请输入修改后的作者名"); if (BookFormat(books[TempModi].borrownum)) { break; } } settextstyle(30, 0, "隶书"); outtextxy(60, 420, books[TempModi].title);//输出书名 outtextxy(400, 420, books[TempModi].author); outtextxy(650, 420, books[TempModi].totalnum); outtextxy(800, 420, books[TempModi].borrownum); SaveAlter(); //定义第三个鼠标操作 MOUSEMSG m4; while (1) { m4 = GetMouseMsg(); if (m4.x >= 380 && m4.x <= 800 && m4.y >= 700 && m4.y <= 750) { setlinecolor(RED); rectangle(380, 700, 800, 750); if (m4.uMsg == WM_LBUTTONDOWN) { //返回 ManagerPage(); } } else { setlinecolor(WHITE); rectangle(380, 700, 800, 750); } } } }
这个十分的繁琐,我并不想回顾,跳到删除
void DeleteBook()//删 { //先查找,找到返回下标,删除后下标后的数据前移,NowBookNums-- //查不到就查无此人 //定义一个变量来接收下标 int TempDelt = ReturnPosition(); if (TempDelt == -1)//没找到 { HWND hndtipsD = GetHWnd();//获取窗口句柄 int isok = MessageBox(hndtipsD, "没有这本书的图书信息!", "提示", MB_OK); } else { //找到了就提示是否确定删除 //获取窗口句柄 HWND hndtipsDS = GetHWnd(); //用一个字符数组来总结句子 int isok = MessageBox(hndtipsDS, "确定删除?", "提示", MB_OKCANCEL); if (isok == IDOK) { //确定删除操作 //将这个元素的后一个依次迁移 for (int d = TempDelt; d < BookNum; d++) { books[d] = books[d + 1]; } //现在的人数-1 BookNum--; //删除完成只是将当前结构体里面的数据清除了,但是文件中并没有作出更改 //更新到文件中 SaveAlter();//用这个全部清空的函数,再对文件进行重写 } else if (isok == IDCANCEL) { //取消删除不执行任何操作 } } }
相比于修改,删除简直不要太好做,虽然我是copy的。以及增加。
void AddBook() { while (1) { InputBox(books[BookNum].title, 20, "请输入需要录入的图书名称:");//显示一个输入框, if (BookFormat(books[BookNum].title))//为真跳出循环 { break; } } while (1) { InputBox(books[BookNum].author, 20, "请输入需要录入的图书作者名称:");//显示一个输入框, if (BookFormat(books[BookNum].author))//为真跳出循环 { break; } } while (1) { InputBox(books[BookNum].totalnum, 20, "请输入需要录入的图书总数为:");//显示一个输入框, if (BookFormat(books[BookNum].totalnum))//为真跳出循环 { break; } } while (1) { InputBox(books[BookNum].borrownum, 20, "请输入需要录入的图书总数为:");//显示一个输入框, if (BookFormat(books[BookNum].borrownum))//为真跳出循环 { break; } } SaveInfor(); } void SaveInfor() { if (strlen(books[BookNum].title) != 0 && strlen(books[BookNum].author) != 0) { fstream myFile; myFile.open("data.txt", ios::app); // append,追加 myFile << books[BookNum].title << " " << books[BookNum].author << " " << books[BookNum].totalnum << " " << books[BookNum].borrownum << endl; myFile.close(); BookNum++;//录入完毕,记录数加一 } }
类似于删除,只不过这个这个保存数据要总体进行全部重新输入
-
用户功能的实现,先来到用户界面
void UserPage() { initgraph(1170, 869); IMAGE img_bk; loadimage(&img_bk, "./bk3.jpg"); cleardevice();//清屏 BeginBatchDraw();//开始批量绘图 putimage(0, 0, &img_bk);//展示背景图片 setbkmode(TRANSPARENT);//设置背景模式透明 //标题 char SecondTitle[20] = "用户操作界面"; settextstyle(40, 0, "华文行楷"); outtextxy(0, 0, SecondTitle); //三个选项的背景 setfillcolor(RGB(191, 149, 214)); fillrectangle(380, 300, 800, 350); fillrectangle(380, 380, 800, 430); fillrectangle(380, 460, 800, 510); fillrectangle(380, 540, 800, 590); fillrectangle(380, 620, 800, 670); fillrectangle(380, 700, 800, 750); //三个选项的文字 settextcolor(BLACK); settextstyle(40, 0, "隶书"); //首页三个选项 char SecondSelect1[20] = { "查看所有图书" }; char SecondSelect2[20] = { "查找图书信息" }; char SecondSelect3[20] = { "借阅图书" }; char SecondSelect4[20] = { "归还图书" }; char SecondSelect5[20] = { "查看用户信息" }; char SecondSelect6[20] = { "返回" }; outtextxy(395, 305, SecondSelect1); outtextxy(395, 385, SecondSelect2); outtextxy(395, 465, SecondSelect3); outtextxy(395, 545, SecondSelect4); outtextxy(395, 625, SecondSelect5); outtextxy(395, 705, SecondSelect6); FlushBatchDraw(); EndBatchDraw(); //定义第三个鼠标操作 MOUSEMSG m3; //进入主界面选项操作界面 while (1) { m3 = GetMouseMsg();//获取鼠标操作 if (m3.x >= 380 && m3.x <= 800 && m3.y >= 300 && m3.y <= 350)//查 { setlinecolor(RED); rectangle(380, 300, 800, 350); if (m3.uMsg == WM_LBUTTONDOWN) { cleardevice(); ViewAllBook2(); } } else if (m3.x >= 380 && m3.x <= 800 && m3.y >= 380 && m3.y <= 430)//找 { setlinecolor(RED); rectangle(380, 380, 800, 430); if (m3.uMsg == WM_LBUTTONDOWN) { FindBook(); } } else if (m3.x >= 380 && m3.x <= 800 && m3.y >= 460 && m3.y <= 510)//借 { setlinecolor(RED); rectangle(380, 460, 800, 510); if (m3.uMsg == WM_LBUTTONDOWN) { BorrowBook(); } } else if (m3.x >= 380 && m3.x <= 800 && m3.y >= 540 && m3.y <= 590)//还 { setlinecolor(RED); rectangle(380, 540, 800, 590); if (m3.uMsg == WM_LBUTTONDOWN) { ReturnBook(); } } else if (m3.x >= 380 && m3.x <= 800 && m3.y >= 620 && m3.y <= 670) { setlinecolor(RED); rectangle(380, 620, 800, 670); if (m3.uMsg == WM_LBUTTONDOWN) { cleardevice(); UserInforPage(); } } else if (m3.x >= 380 && m3.x <= 800 && m3.y >= 700 && m3.y <= 750) { setlinecolor(RED); rectangle(380, 700, 800, 750); if (m3.uMsg == WM_LBUTTONDOWN) { //返回 cleardevice(); FirstPage(); } } //鼠标不在上面悬停 else { setlinecolor(WHITE); rectangle(380, 300, 800, 350); rectangle(380, 380, 800, 430); rectangle(380, 460, 800, 510); rectangle(380, 540, 800, 590); rectangle(380, 620, 800, 670); rectangle(380, 700, 800, 750); } } }
查看所有图书
void ViewAllBook2() { initgraph(1170, 869); IMAGE img_bk; loadimage(&img_bk, "./bk3.jpg"); cleardevice();//清屏 BeginBatchDraw();//开始批量绘图 putimage(0, 0, &img_bk);//展示背景图片 setbkmode(TRANSPARENT);//设置背景模式透明 //标题 char SecondTitle[20] = "查看所有图书"; settextstyle(35, 0, "华文行楷"); outtextxy(0, 0, SecondTitle); settextstyle(30, 0, "隶书"); settextcolor(BLACK); outtextxy(150, 30, "图书名称"); outtextxy(450, 30, "作者"); outtextxy(680, 30, "图书总数"); outtextxy(900, 30, "图书借阅数"); PrintfBook(); setfillcolor(RGB(191, 149, 214)); fillrectangle(380, 700, 800, 750); settextcolor(BLACK); settextstyle(40, 0, "隶书"); char SecondSelect5[20] = { "返回" }; outtextxy(395, 705, SecondSelect5); FlushBatchDraw(); EndBatchDraw(); MOUSEMSG m4; while (1) { m4 = GetMouseMsg(); if (m4.x >= 380 && m4.x <= 800 && m4.y >= 700 && m4.y <= 750) { setlinecolor(RED); rectangle(380, 700, 800, 750); if (m4.uMsg == WM_LBUTTONDOWN) { //返回 cleardevice(); UserPage(); } } else { setlinecolor(WHITE); rectangle(380, 700, 800, 750); } } }
因为我设置了不同的背景,所以我做了两个不同的函数来展示所有数据
void FindBook() { int Position = ReturnPosition(); initgraph(1170, 869); IMAGE img_bk; loadimage(&img_bk, "./bk3.jpg"); cleardevice();//清屏 BeginBatchDraw();//开始批量绘图 putimage(0, 0, &img_bk);//展示背景图片 setbkmode(TRANSPARENT);//设置背景模式透明 //标题 char SecondTitle[20] = "查找图书界面"; settextstyle(40, 0, "华文行楷"); outtextxy(0, 0, SecondTitle); settextstyle(30, 0, "隶书"); settextcolor(BLACK); outtextxy(150, 30, "图书名称"); outtextxy(450, 30, "作者"); outtextxy(680, 30, "图书总数"); outtextxy(900, 30, "借阅数"); if (Position == -1)//没找到 { //获取窗口句柄 HWND hndtipsM = GetHWnd(); //用一个字符数组来总结句子 int isok = MessageBox(hndtipsM, "抱歉,没有这本书!", "提示", MB_OK); } else { //打印找到的信息 outtextxy(150, 80, books[Position].title);//输出书名 outtextxy(450, 80, books[Position].author); outtextxy(680, 80, books[Position].totalnum); outtextxy(900, 80, books[Position].borrownum); } setfillcolor(RGB(56, 242, 212)); fillrectangle(380, 700, 800, 750); settextcolor(BLACK); settextstyle(40, 0, "隶书"); char SecondSelect5[20] = { "返回" }; outtextxy(395, 705, SecondSelect5); FlushBatchDraw(); EndBatchDraw(); //定义第三个鼠标操作 MOUSEMSG m4; while (1) { m4 = GetMouseMsg(); if (m4.x >= 380 && m4.x <= 800 && m4.y >= 700 && m4.y <= 750) { setlinecolor(RED); rectangle(380, 700, 800, 750); if (m4.uMsg == WM_LBUTTONDOWN) { //返回 UserPage(); } } else { setlinecolor(WHITE); rectangle(380, 700, 800, 750); } } }
查找图书信息
void addstring(char s1[], char s2[]) { int i = atoi(s1); int j = atoi(s2); int sum = i + j; sprintf(s1, "%d", sum); } void BorrowBook() { //定义一个变量用来接收下标 int TempBorr = ReturnPosition(); if (TempBorr == -1)//没找到 { //获取窗口句柄 HWND hndtipsF = GetHWnd(); //用一个字符数组来总结句子 int isok = MessageBox(hndtipsF, "无法借阅!", "提示", MB_OK); } else//找到了——将借阅出去的图书信息存储到另一个文件中,归还时重新读入 { initgraph(1170, 869); cleardevice();//清屏 IMAGE img_bk; loadimage(&img_bk, "./bk3.jpg"); BeginBatchDraw();//开始批量绘图 putimage(0, 0, &img_bk);//展示背景图片 setbkmode(TRANSPARENT);//设置背景模式透明 //标题 char SecondTitle[20] = "图书借阅界面"; settextstyle(40, 0, "华文行楷"); outtextxy(0, 0, SecondTitle); if (strlen(books[TempBorr].title) != 0 && strlen(books[TempBorr].author) != 0) { addstring(books[TempBorr].borrownum, s); fstream myFile; myFile.open("borrow.txt", ios::app); // append,追加 //myFile.open("data.txt", ios::trunc); //- 删除现有文件中的数据 myFile << books[TempBorr].title << " " << books[TempBorr].author << endl; myFile.close();//关闭文件 } SaveAlter(); HWND hndtipsF = GetHWnd(); int isok = MessageBox(hndtipsF, "借阅成功", "提示", MB_OK); RecordNum++; settextstyle(30, 0, "隶书"); settextcolor(BLACK); outtextxy(150, 30, "图书名称"); outtextxy(450, 30, "作者"); ReadIn2(); //打印找到的信息 for (int i = 1; i <= RecordNum; i++) { //缩放字体 settextstyle(25, 0, "隶书"); outtextxy(150, 40 + 40 * i, bobooks[i - 1].title);//输出书名 outtextxy(450, 40 + 40 * i, bobooks[i - 1].author);//作者 } setfillcolor(RGB(191, 149, 214)); fillrectangle(380, 620, 800, 670); fillrectangle(380, 700, 800, 750); settextcolor(BLACK); settextstyle(40, 0, "隶书"); char SecondSelect4[20] = { "继续借阅" }; char SecondSelect5[20] = { "返回" }; outtextxy(395, 625, SecondSelect4); outtextxy(395, 705, SecondSelect5); FlushBatchDraw(); EndBatchDraw(); //定义第三个鼠标操作 MOUSEMSG m4; while (1) { m4 = GetMouseMsg(); if (m4.x >= 380 && m4.x <= 800 && m4.y >= 620 && m4.y <= 670) { setlinecolor(RED); rectangle(380, 620, 800, 670); if (m4.uMsg == WM_LBUTTONDOWN) { //继续借阅 BorrowBook(); } } if (m4.x >= 380 && m4.x <= 800 && m4.y >= 700 && m4.y <= 750) { setlinecolor(RED); rectangle(380, 700, 800, 750); if (m4.uMsg == WM_LBUTTONDOWN) { //返回 cleardevice(); UserPage(); } } else { setlinecolor(WHITE); rectangle(380, 620, 800, 670); rectangle(380, 700, 800, 750); } } } }
因为我存储的图书数量是利用字符数组存储,所有借阅量需要单独写一个函数实现字符串之间的加法,好像有点bug,会吸收文本里的空格,所有每次运行之后存储图书信息里的文字会变乱。归还功能
int RePosition() { //接受用户输入 char ReceInput[64]; InputBox(ReceInput, 100, "请输入书名或者作者名进行操作");//显示一个输入框 for (int w = 0; w < BookNum; w++)//进行循环查找,一旦相同就跳出循环 { if (strcmp(books[w].title, ReceInput) == 0 || strcmp(books[w].author, ReceInput) == 0)//返回0表示两个字符串相等 { return w; } //strcmp用法: /*该函数返回值如下: 如果返回值小于 0,则表示 str1 小于 str2。 如果返回值大于 0,则表示 str1 大于 str2。 如果返回值等于 0,则表示 str1 等于 str2。*/ } //如果没找到就返回-1 return -1; } void ReturnBook() { int TempBorr = RePosition(); if (TempBorr == -1)//没找到 { //获取窗口句柄 HWND hndtipsF = GetHWnd();//获得窗口句柄 //在 Windows 下,句柄是一个窗口的标识 //得到句柄后,可以使用 Windows API 中的函数实现对窗口的控制。 //用一个字符数组来总结句子 int isok = MessageBox(hndtipsF, "归还失败!", "提示", MB_OK); } else//找到了——将借阅出去的图书信息存储到另一个文件中,归还时重新读入 { fstream myFile; myFile.open("Return.txt", ios::out);//写入 for (int i = 0; i < RecordNum; i++) { if (strlen(bobooks[i].title) != 0 && strlen(bobooks[i].author) != 0) { myFile << bobooks[i].title << " " << bobooks[i].author << endl; } } myFile.close(); HWND hndtipsF = GetHWnd(); int isok = MessageBox(hndtipsF, "归还成功", "提示", MB_OK); } }
查看用户信息,没有很大的用处
void UserInforPage() { initgraph(1170, 869); IMAGE img_bk; loadimage(&img_bk, "./bk3.jpg"); cleardevice();//清屏 BeginBatchDraw();//开始批量绘图 putimage(0, 0, &img_bk);//展示背景图片 setbkmode(TRANSPARENT);//设置背景模式透明 //标题 char SecondTitle[20] = "用户信息界面"; settextstyle(40, 0, "华文行楷"); outtextxy(0, 0, SecondTitle); settextcolor(BLACK); settextstyle(50, 0, "隶书"); outtextxy(30, 30, "借阅过的图书"); outtextxy(30, 350, "归还的图书"); //借阅 settextstyle(30, 0, "隶书"); outtextxy(60, 70, "图书名称"); outtextxy(400, 70, "作者"); //归还 outtextxy(60, 390, "图书名称"); outtextxy(400, 390, "作者"); ReadIn2(); if (RecordNum == 0) { settextstyle(50, 0, "隶书"); outtextxy(200, 200, "当前记录为空!"); return; } for (int i = 1; i <= RecordNum; i++) { //缩放字体 settextstyle(25, 0, "隶书"); outtextxy(60, 100 + 30 * i, bobooks[i - 1].title);//输出书名 outtextxy(400, 100 + 30 * i, bobooks[i - 1].author);//作者 } ReadIn3(); if (ReturnNum == 0) { settextstyle(50, 0, "隶书"); outtextxy(200, 200, "当前记录为空!"); return; } for (int i = 1; i <= ReturnNum; i++) { //缩放字体 settextstyle(25, 0, "隶书"); outtextxy(60, 420 + 30 * i, rebooks[i - 1].title);//输出书名 outtextxy(400, 420 + 30 * i, rebooks[i - 1].author);//作者 } setfillcolor(RGB(191, 149, 214)); fillrectangle(380, 700, 800, 750); settextcolor(BLACK); settextstyle(40, 0, "隶书"); char SecondSelect5[20] = { "返回" }; outtextxy(395, 705, SecondSelect5); FlushBatchDraw(); EndBatchDraw(); //定义第三个鼠标操作 MOUSEMSG m4; while (1) { m4 = GetMouseMsg(); if (m4.x >= 380 && m4.x <= 800 && m4.y >= 700 && m4.y <= 750) { setlinecolor(RED); rectangle(380, 700, 800, 750); if (m4.uMsg == WM_LBUTTONDOWN) { //返回 UserPage(); } } else { setlinecolor(WHITE); rectangle(380, 700, 800, 750); } } }
项目的总代码
#include<stdio.h>
#include<string>
#include<easyx.h>
#include<graphics.h>
#include<conio.h>
#include<stdlib.h>
#include<string.h>
#include<ctype.h>
#include<stdbool.h>
#include <fstream>
using namespace std;
#define MAXSIZE 100
//定义一个存储图书信息的结构体
//定义数组存储所有图书信息
typedef struct
{
char title[1000];//书名
char author[1000];//作者
char totalnum[1000];//图书总数
char borrownum[1000];//图书借阅数
}Book;
Book books[MAXSIZE];
//定义一个存储借阅图书信息的结构体
//定义数组存储所有图书信息
typedef struct
{
char title[1000];//书名
char author[1000];//作者
}BoBook;
BoBook bobooks[MAXSIZE];
//定义一个存储归还图书信息的结构体
//定义数组存储所有图书信息
typedef struct
{
char title[1000];//书名
char author[1000];//作者
}ReBook;
ReBook rebooks[MAXSIZE];
//定义管理员结构体
//为了方便只设置一个管理员
typedef struct
{
char name[1000];
char code[1000];
}Manager;
Manager managers;
//定义用户结构体
//为了方便只设置一个用户
typedef struct
{
char name[1000];
char code[1000];
}User;
User users;
//当前书籍数目
int BookNum;
int RecordNum;
int ReturnNum;
char s[1000] = "1";
void ReadIn();//先把文件中的信息录入数组
void ReadIn2();//把借阅的信息存入数组
void ReadIn3();//归还信息
void FirstPage();//首页画面
void ManagerPage();//管理员界面
void ReSiPage();//用户注册或者登录界面
void UserPage();//用户界面
void ManagerSignIn();//管理员登录界面
void UserSignIn();//用户登录界面
void ViewAllBook1();//管理员查看全部图书信息
void ViewAllBook2();//用户查看全部图书信息
void PrintfBook();//打印全部图书信息
void AlterBook();//修改图书信息
bool BookFormat(char PerStr[]);//判断图书格式是否正确
void SaveAlter();//保存修改后的信息
void DeleteBook();//删除图书信息
void AddBook();//新增图书信息
void SaveInfor();//保存新增的信息
int ReturnPosition();//返回需要查找、修改、删除的图书下标
void FindBook();//查找图书
void addstring(char s1, char s2);//用于字符之间的计算
void BorrowBook();//借阅图书
void ReturnBook();//归还图书
void UserInforPage();//用户信息
int RePosition();
void ReadIn()
{
fstream myFile;
myFile.open("data.txt", ios::in); // 只读
//将文件中的数据读取到当前的结构体数组中
for (int i = 0; i < MAXSIZE; i++)
{
myFile >> books[i].title
>> books[i].author
>> books[i].totalnum
>> books[i].borrownum;
}
int FileBookNums = 0;//文件中的记录数
for (int i = 0; i < MAXSIZE; i++)//最多读15本书,读入前先判断标题是否为空
{
if (strlen(books[i].title) != 0)
{
BookNum = ++FileBookNums;//双自增
}
}
myFile.close();
}
void ReadIn2()
{
fstream myFile;
myFile.open("Borrow.txt", ios::in); // 只读
//将文件中的数据读取到当前的结构体数组中
for (int i = 0; i < MAXSIZE; i++)
{
myFile >> bobooks[i].title
>> bobooks[i].author;
}
int FileBookNums = 0;//文件中的记录数
for (int i = 0; i < MAXSIZE; i++)//最多读15本书,读入前先判断标题是否为空
{
if (strlen(bobooks[i].title) != 0)
{
RecordNum = ++FileBookNums;//双自增
}
}
myFile.close();
}
void ReadIn3()
{
fstream myFile;
myFile.open("Return.txt", ios::in); // 只读
//将文件中的数据读取到当前的结构体数组中
for (int i = 0; i < MAXSIZE; i++)
{
myFile >> rebooks[i].title
>> rebooks[i].author;
}
int FileBookNums = 0;//文件中的记录数
for (int i = 0; i < MAXSIZE; i++)//最多读15本书,读入前先判断标题是否为空
{
if (strlen(rebooks[i].title) != 0)
{
ReturnNum = ++FileBookNums;//双自增
}
}
myFile.close();
}
void FirstPage()
{
initgraph(1170, 869);
IMAGE img_bk;
loadimage(&img_bk, "./bk1.jpg");
cleardevice();//清屏
BeginBatchDraw();//开始批量绘图
putimage(0, 0, &img_bk);//展示背景图片
setbkmode(TRANSPARENT);//设置背景模式透明
//大标题
char FirstTitle[20] = { "图书管理系统" };
settextstyle(80, 0, "华文行楷");
outtextxy(350, 50, FirstTitle);
//首页的三个选项
setfillcolor(RGB(255, 197, 110));
fillrectangle(380, 300, 800, 350);
fillrectangle(380, 380, 800, 430);
fillrectangle(380, 460, 800, 510);
//三个选项的文字
settextcolor(BLACK);
settextstyle(40, 0, "隶书");
//首页三个选项
char FirstSelect1[20] = { "管理员操作界面" };
char FirstSelect2[20] = { "用户操作界面" };
char FirstSelect3[20] = { "退出系统" };
outtextxy(395, 305, FirstSelect1);
outtextxy(395, 385, FirstSelect2);
outtextxy(395, 465, FirstSelect3);
FlushBatchDraw();
EndBatchDraw();
//鼠标操作
MOUSEMSG m1;
//进入主界面选项操作
while (1)
{
m1 = GetMouseMsg();//获取鼠标操作
if (m1.x >= 380 && m1.x <= 800 && m1.y >= 300 && m1.y <= 350)//管理员界面
{
setlinecolor(RED);
rectangle(380, 300, 800, 350);
if (m1.uMsg == WM_LBUTTONDOWN)
{
ManagerSignIn();
}
}
else if (m1.x >= 380 && m1.x <= 800 && m1.y >= 380 && m1.y <= 430)//用户界面
{
setlinecolor(RED);
rectangle(380, 380, 800, 430);
if (m1.uMsg == WM_LBUTTONDOWN)
{
ReSiPage();
}
}
else if (m1.x >= 380 && m1.x <= 800 && m1.y >= 460 && m1.y <= 510)
{
setlinecolor(RED);
rectangle(380, 460, 800, 510);
if (m1.uMsg == WM_LBUTTONDOWN)
{
exit(0);
}
}
//鼠标不在上面悬停
else
{
setlinecolor(WHITE);
rectangle(380, 300, 800, 350);
rectangle(380, 380, 800, 430);
rectangle(380, 460, 800, 510);
}
}
}
void ManagerSignIn()
{
ifstream AdminSignIn;
AdminSignIn.open("ManagerSignIn.txt", ios::in);
AdminSignIn >> managers.name >> managers.code;
AdminSignIn.close();// 关闭文件
char ReceAcctNumber[1000];
InputBox(ReceAcctNumber, 1000, "请输入管理员名");
char ReceAcctPassWord[1000];
InputBox(ReceAcctPassWord, 1000, "请输入密码");
//如果用户名和密码都正确才进度到管理员界面
//否则弹窗提示错误
if (strcmp(managers.name, ReceAcctNumber) == 0 && strcmp(managers.code, ReceAcctPassWord) == 0)
{
cleardevice();//清屏
ManagerPage();
}
else
{
HWND SignError = GetHWnd();//这个函数用于获取绘图窗口句柄。
int isok = MessageBox(SignError, "用户名或密码错误!", "提示", MB_OK);
}
}
void UserRegister()
{
while (1)
{
InputBox(users.name, 20, "请输入注册用户名称:");//显示一个输入框,
if (BookFormat(users.name))//为真跳出循环
{
break;
}
}
while (1)
{
InputBox(users.code, 20, "请输入注册用户的密码:");//显示一个输入框,
if (BookFormat(users.code))//为真跳出循环
{
break;
}
}
if (strlen(users.name) != 0 && strlen(users.code) != 0)
{
fstream myFile;
myFile.open("UserSignIn.txt", ios::app); // append,追加
myFile << users.name << " "
<< users.code << endl;
myFile.close();
}
ReSiPage();
}
void UserSignIn()
{
ifstream UserSignIn;
UserSignIn.open("UserSignIn.txt", ios::in);
UserSignIn >> users.name >> users.code;
UserSignIn.close();// 关闭文件
char ReceAcctNumber[1000];
InputBox(ReceAcctNumber, 1000, "请输入用户名");
char ReceAcctPassWord[1000];
InputBox(ReceAcctPassWord, 1000, "请输入密码");
//如果用户名和密码都正确才进度到管理员界面
//否则弹窗提示错误
if (strcmp(users.name, ReceAcctNumber) == 0 && strcmp(users.code, ReceAcctPassWord) == 0)
{
cleardevice();//清屏
UserPage();
}
else
{
HWND SignError = GetHWnd();//这个函数用于获取绘图窗口句柄。
int isok = MessageBox(SignError, "用户名或密码错误!", "提示", MB_OK);
}
}
void ReSiPage()
{
initgraph(1170, 869);
IMAGE img_bk;
loadimage(&img_bk, "./bk3.jpg");
cleardevice();//清屏
BeginBatchDraw();//开始批量绘图
putimage(0, 0, &img_bk);//展示背景图片
setbkmode(TRANSPARENT);//设置背景模式透明
//标题
char SecondTitle[20] = "用户注册或登录界面";
settextstyle(40, 0, "华文行楷");
outtextxy(0, 0, SecondTitle);
//三个选项的背景
setfillcolor(RGB(191, 149, 214));
fillrectangle(380, 300, 800, 350);
fillrectangle(380, 380, 800, 430);
fillrectangle(380, 460, 800, 510);
//三个选项的文字
settextcolor(BLACK);
settextstyle(40, 0, "隶书");
//首页三个选项
char SecondSelect1[20] = { "注册" };
char SecondSelect2[20] = { "登录" };
char SecondSelect6[20] = { "返回" };
outtextxy(395, 305, SecondSelect1);
outtextxy(395, 385, SecondSelect2);
outtextxy(395, 465, SecondSelect6);
FlushBatchDraw();
EndBatchDraw();
//定义第三个鼠标操作
MOUSEMSG m3;
//进入主界面选项操作界面
while (1)
{
m3 = GetMouseMsg();//获取鼠标操作
if (m3.x >= 380 && m3.x <= 800 && m3.y >= 300 && m3.y <= 350)//注册
{
setlinecolor(RED);
rectangle(380, 300, 800, 350);
if (m3.uMsg == WM_LBUTTONDOWN)
{
UserRegister();
}
}
else if (m3.x >= 380 && m3.x <= 800 && m3.y >= 380 && m3.y <= 430)//登录
{
setlinecolor(RED);
rectangle(380, 380, 800, 430);
if (m3.uMsg == WM_LBUTTONDOWN)
{
UserSignIn();
}
}
else if (m3.x >= 380 && m3.x <= 800 && m3.y >= 460 && m3.y <= 510)//借
{
setlinecolor(RED);
rectangle(380, 460, 800, 510);
if (m3.uMsg == WM_LBUTTONDOWN)
{
//返回
cleardevice();
FirstPage();
}
}
//鼠标不在上面悬停
else
{
setlinecolor(WHITE);
rectangle(380, 300, 800, 350);
rectangle(380, 380, 800, 430);
rectangle(380, 460, 800, 510);
}
}
}
void ManagerPage()
{
initgraph(1170, 869);
IMAGE img_bk;
loadimage(&img_bk, "./bk2.jpg");
cleardevice();//清屏
BeginBatchDraw();//开始批量绘图
putimage(0, 0, &img_bk);//展示背景图片
setbkmode(TRANSPARENT);//设置背景模式透明
//标题
char SecondTitle[20] = "管理员操作界面";
settextstyle(40, 0, "华文行楷");
outtextxy(0, 0, SecondTitle);
//三个选项的背景
setfillcolor(RGB(56, 242, 212));
fillrectangle(380, 300, 800, 350);
fillrectangle(380, 380, 800, 430);
fillrectangle(380, 460, 800, 510);
fillrectangle(380, 540, 800, 590);
fillrectangle(380, 620, 800, 670);
//三个选项的文字
settextcolor(BLACK);
settextstyle(40, 0, "隶书");
//首页三个选项
char SecondSelect1[20] = { "查看所有图书" };
char SecondSelect2[20] = { "修改图书信息" };
char SecondSelect3[20] = { "删除图书信息" };
char SecondSelect4[20] = { "增加图书信息" };
char SecondSelect5[20] = { "返回" };
outtextxy(395, 305, SecondSelect1);
outtextxy(395, 385, SecondSelect2);
outtextxy(395, 465, SecondSelect3);
outtextxy(395, 545, SecondSelect4);
outtextxy(395, 625, SecondSelect5);
FlushBatchDraw();
EndBatchDraw();
//定义第二个鼠标操作
MOUSEMSG m2;
//进入主界面选项操作界面
while (1)
{
m2 = GetMouseMsg();//获取鼠标操作
if (m2.x >= 380 && m2.x <= 800 && m2.y >= 300 && m2.y <= 350)//查
{
setlinecolor(RED);
rectangle(380, 300, 800, 350);
if (m2.uMsg == WM_LBUTTONDOWN)
{
cleardevice();
ViewAllBook1();
}
}
else if (m2.x >= 380 && m2.x <= 800 && m2.y >= 380 && m2.y <= 430)//改
{
setlinecolor(RED);
rectangle(380, 380, 800, 430);
if (m2.uMsg == WM_LBUTTONDOWN)
{
AlterBook();
}
}
else if (m2.x >= 380 && m2.x <= 800 && m2.y >= 460 && m2.y <= 510)//删
{
setlinecolor(RED);
rectangle(380, 460, 800, 510);
if (m2.uMsg == WM_LBUTTONDOWN)
{
DeleteBook();
}
}
else if (m2.x >= 380 && m2.x <= 800 && m2.y >= 540 && m2.y <= 590)//增
{
setlinecolor(RED);
rectangle(380, 540, 800, 590);
if (m2.uMsg == WM_LBUTTONDOWN)
{
AddBook();
}
}
else if (m2.x >= 380 && m2.x <= 800 && m2.y >= 620 && m2.y <= 670)
{
setlinecolor(RED);
rectangle(380, 620, 800, 670);
if (m2.uMsg == WM_LBUTTONDOWN)
{
//返回
cleardevice();
FirstPage();
}
}
//鼠标不在上面悬停
else
{
setlinecolor(WHITE);
rectangle(380, 300, 800, 350);
rectangle(380, 380, 800, 430);
rectangle(380, 460, 800, 510);
rectangle(380, 540, 800, 590);
rectangle(380, 620, 800, 670);
}
}
}
void UserPage()
{
initgraph(1170, 869);
IMAGE img_bk;
loadimage(&img_bk, "./bk3.jpg");
cleardevice();//清屏
BeginBatchDraw();//开始批量绘图
putimage(0, 0, &img_bk);//展示背景图片
setbkmode(TRANSPARENT);//设置背景模式透明
//标题
char SecondTitle[20] = "用户操作界面";
settextstyle(40, 0, "华文行楷");
outtextxy(0, 0, SecondTitle);
//三个选项的背景
setfillcolor(RGB(191, 149, 214));
fillrectangle(380, 300, 800, 350);
fillrectangle(380, 380, 800, 430);
fillrectangle(380, 460, 800, 510);
fillrectangle(380, 540, 800, 590);
fillrectangle(380, 620, 800, 670);
fillrectangle(380, 700, 800, 750);
//三个选项的文字
settextcolor(BLACK);
settextstyle(40, 0, "隶书");
//首页三个选项
char SecondSelect1[20] = { "查看所有图书" };
char SecondSelect2[20] = { "查找图书信息" };
char SecondSelect3[20] = { "借阅图书" };
char SecondSelect4[20] = { "归还图书" };
char SecondSelect5[20] = { "查看用户信息" };
char SecondSelect6[20] = { "返回" };
outtextxy(395, 305, SecondSelect1);
outtextxy(395, 385, SecondSelect2);
outtextxy(395, 465, SecondSelect3);
outtextxy(395, 545, SecondSelect4);
outtextxy(395, 625, SecondSelect5);
outtextxy(395, 705, SecondSelect6);
FlushBatchDraw();
EndBatchDraw();
//定义第三个鼠标操作
MOUSEMSG m3;
//进入主界面选项操作界面
while (1)
{
m3 = GetMouseMsg();//获取鼠标操作
if (m3.x >= 380 && m3.x <= 800 && m3.y >= 300 && m3.y <= 350)//查
{
setlinecolor(RED);
rectangle(380, 300, 800, 350);
if (m3.uMsg == WM_LBUTTONDOWN)
{
cleardevice();
ViewAllBook2();
}
}
else if (m3.x >= 380 && m3.x <= 800 && m3.y >= 380 && m3.y <= 430)//找
{
setlinecolor(RED);
rectangle(380, 380, 800, 430);
if (m3.uMsg == WM_LBUTTONDOWN)
{
FindBook();
}
}
else if (m3.x >= 380 && m3.x <= 800 && m3.y >= 460 && m3.y <= 510)//借
{
setlinecolor(RED);
rectangle(380, 460, 800, 510);
if (m3.uMsg == WM_LBUTTONDOWN)
{
BorrowBook();
}
}
else if (m3.x >= 380 && m3.x <= 800 && m3.y >= 540 && m3.y <= 590)//还
{
setlinecolor(RED);
rectangle(380, 540, 800, 590);
if (m3.uMsg == WM_LBUTTONDOWN)
{
ReturnBook();
}
}
else if (m3.x >= 380 && m3.x <= 800 && m3.y >= 620 && m3.y <= 670)
{
setlinecolor(RED);
rectangle(380, 620, 800, 670);
if (m3.uMsg == WM_LBUTTONDOWN)
{
cleardevice();
UserInforPage();
}
}
else if (m3.x >= 380 && m3.x <= 800 && m3.y >= 700 && m3.y <= 750)
{
setlinecolor(RED);
rectangle(380, 700, 800, 750);
if (m3.uMsg == WM_LBUTTONDOWN)
{
//返回
cleardevice();
FirstPage();
}
}
//鼠标不在上面悬停
else
{
setlinecolor(WHITE);
rectangle(380, 300, 800, 350);
rectangle(380, 380, 800, 430);
rectangle(380, 460, 800, 510);
rectangle(380, 540, 800, 590);
rectangle(380, 620, 800, 670);
rectangle(380, 700, 800, 750);
}
}
}
void PrintfBook()
{
if (BookNum == 0)
{
settextstyle(50, 0, "隶书");
outtextxy(200, 200, "当前记录为空!");
return;
}
for (int i = 1; i <= BookNum; i++)
{
//缩放字体
settextstyle(25, 0, "隶书");
outtextxy(150, 40 + 40 * i, books[i - 1].title);//输出书名
outtextxy(450, 40 + 40 * i, books[i - 1].author);//作者
outtextxy(680, 40 + 40 * i, books[i - 1].totalnum);//图书总数
outtextxy(900, 40 + 40 * i, books[i - 1].borrownum);//借阅数
}
}
void ViewAllBook1()
{
initgraph(1170, 869);
IMAGE img_bk;
loadimage(&img_bk, "./bk2.jpg");
cleardevice();//清屏
BeginBatchDraw();//开始批量绘图
putimage(0, 0, &img_bk);//展示背景图片
setbkmode(TRANSPARENT);//设置背景模式透明
//标题
char SecondTitle[20] = "查看所有图书";
settextstyle(35, 0, "华文行楷");
outtextxy(0, 0, SecondTitle);
settextstyle(30, 0, "隶书");
settextcolor(BLACK);
outtextxy(150, 30, "图书名称");
outtextxy(450, 30, "作者");
outtextxy(680, 30, "图书总数");
outtextxy(900, 30, "图书借阅数");
PrintfBook();
setfillcolor(RGB(56, 242, 212));
fillrectangle(380, 700, 800, 750);
settextcolor(BLACK);
settextstyle(40, 0, "隶书");
char SecondSelect5[20] = { "返回" };
outtextxy(395, 705, SecondSelect5);
FlushBatchDraw();
EndBatchDraw();
MOUSEMSG m4;
while (1)
{
m4 = GetMouseMsg();
if (m4.x >= 380 && m4.x <= 800 && m4.y >= 700 && m4.y <= 750)
{
setlinecolor(RED);
rectangle(380, 700, 800, 750);
if (m4.uMsg == WM_LBUTTONDOWN)
{
//返回
ManagerPage();
}
}
else
{
setlinecolor(WHITE);
rectangle(380, 700, 800, 750);
}
}
}
void ViewAllBook2()
{
initgraph(1170, 869);
IMAGE img_bk;
loadimage(&img_bk, "./bk3.jpg");
cleardevice();//清屏
BeginBatchDraw();//开始批量绘图
putimage(0, 0, &img_bk);//展示背景图片
setbkmode(TRANSPARENT);//设置背景模式透明
//标题
char SecondTitle[20] = "查看所有图书";
settextstyle(35, 0, "华文行楷");
outtextxy(0, 0, SecondTitle);
settextstyle(30, 0, "隶书");
settextcolor(BLACK);
outtextxy(150, 30, "图书名称");
outtextxy(450, 30, "作者");
outtextxy(680, 30, "图书总数");
outtextxy(900, 30, "图书借阅数");
PrintfBook();
setfillcolor(RGB(191, 149, 214));
fillrectangle(380, 700, 800, 750);
settextcolor(BLACK);
settextstyle(40, 0, "隶书");
char SecondSelect5[20] = { "返回" };
outtextxy(395, 705, SecondSelect5);
FlushBatchDraw();
EndBatchDraw();
MOUSEMSG m4;
while (1)
{
m4 = GetMouseMsg();
if (m4.x >= 380 && m4.x <= 800 && m4.y >= 700 && m4.y <= 750)
{
setlinecolor(RED);
rectangle(380, 700, 800, 750);
if (m4.uMsg == WM_LBUTTONDOWN)
{
//返回
cleardevice();
UserPage();
}
}
else
{
setlinecolor(WHITE);
rectangle(380, 700, 800, 750);
}
}
}
//返回要查找、修改、删除人所在的结构体的下标
int ReturnPosition()
{
//接受用户输入
char ReceInput[200];
InputBox(ReceInput, 100, "请输入书名或者作者名进行操作");//显示一个输入框
//进行循环查找,一旦相同就跳出循环
for (int i = 0; i < BookNum; i++)
{
if (strcmp(books[i].title, ReceInput) == 0 || strcmp(books[i].author, ReceInput) == 0)//返回0表示两个字符串相等
{
return i;
}
}
//如果没找到就返回-1
return -1;
}
//判断输入的图书名字格式是否正确
bool BookFormat(char PerStr[])
{
return true;
}
void SaveAlter()
{
//先删掉,但是不将人数置空所以不能调用之前的删除函数
fstream myFile;
myFile.open("data.txt", ios::trunc); //- 删除现有文件中的数据
myFile.open("data.txt", ios::out);//写入
for (int i = 0; i < BookNum; i++)
{
if (strlen(books[i].title) != 0 && strlen(books[i].author) != 0)
{
myFile << books[i].title << " "
<< books[i].author << " "
<< books[i].totalnum << ""
<< books[i].borrownum << endl;
}
}
myFile.close();
}
void AlterBook()//改
{
//直接套用上面查找的操作,在此基础上加一行修改前
//因为需要得到要修改人在结构体数组中的位置-下标,所以不能将函数直接拿过来用,得粘贴过来
//定义一个变量用来接收下标
int TempModi = ReturnPosition();
if (TempModi == -1)//没找到
{
//获取窗口句柄
HWND hndtipsM = GetHWnd();
//用一个字符数组来总结句子
int isok = MessageBox(hndtipsM, "抱歉,没有这本书!", "提示", MB_OK);
}
else//找到了这本书进行下面的操作
{
cleardevice();
initgraph(1170, 869);
cleardevice();
BeginBatchDraw();
IMAGE img_bk;
loadimage(&img_bk, "./bk2.jpg");
putimage(0, 0, &img_bk);
setbkmode(TRANSPARENT);
//标题
char SecondTitle[20] = "修改图书信息";
settextstyle(35, 0, "华文行楷");
outtextxy(0, 0, SecondTitle);
settextcolor(BLACK);
settextstyle(50, 0, "隶书");
outtextxy(30, 30, "修改前");
outtextxy(30, 350, "修改后");
settextstyle(30, 0, "隶书");
outtextxy(60, 70, "图书名称");
outtextxy(400, 70, "作者");
outtextxy(650, 70, "图书总数");
outtextxy(800, 70, "借阅数");
//修改后
outtextxy(60, 390, "图书名称");
outtextxy(400, 390, "作者");
outtextxy(650, 390, "图书总数");
outtextxy(800, 390, "借阅数");
//打印找到的信息
outtextxy(60, 100, books[TempModi].title);//输出书名
outtextxy(400, 100, books[TempModi].author);//输出作者
outtextxy(650, 100, books[TempModi].totalnum);//输出图书总数
outtextxy(800, 100, books[TempModi].borrownum);//输出借阅数
setfillcolor(RGB(56, 242, 212));
fillrectangle(380, 700, 800, 750);
settextcolor(BLACK);
settextstyle(40, 0, "隶书");
char SecondSelect5[20] = { "返回" };
outtextxy(395, 705, SecondSelect5);
FlushBatchDraw();
EndBatchDraw();
while (1)
{
//接收输入的修改后的值覆盖进去
InputBox(books[TempModi].title, 20, "请输入修改后的书名");
if (BookFormat(books[TempModi].title))
{
break;
}
}
while (1)
{
//接收输入的修改后的值覆盖进去
InputBox(books[TempModi].author, 20, "请输入修改后的作者名");
if (BookFormat(books[TempModi].author))
{
break;
}
}
while (1)
{
//接收输入的修改后的值覆盖进去
InputBox(books[TempModi].totalnum, 20, "请输入修改后的出版社");
if (BookFormat(books[TempModi].totalnum))
{
break;
}
}
while (1)
{
//接收输入的修改后的值覆盖进去
InputBox(books[TempModi].borrownum, 20, "请输入修改后的作者名");
if (BookFormat(books[TempModi].borrownum))
{
break;
}
}
settextstyle(30, 0, "隶书");
outtextxy(60, 420, books[TempModi].title);//输出书名
outtextxy(400, 420, books[TempModi].author);
outtextxy(650, 420, books[TempModi].totalnum);
outtextxy(800, 420, books[TempModi].borrownum);
SaveAlter();
//定义第三个鼠标操作
MOUSEMSG m4;
while (1)
{
m4 = GetMouseMsg();
if (m4.x >= 380 && m4.x <= 800 && m4.y >= 700 && m4.y <= 750)
{
setlinecolor(RED);
rectangle(380, 700, 800, 750);
if (m4.uMsg == WM_LBUTTONDOWN)
{
//返回
ManagerPage();
}
}
else
{
setlinecolor(WHITE);
rectangle(380, 700, 800, 750);
}
}
}
}
void DeleteBook()//删
{
//先查找,找到返回下标,删除后下标后的数据前移,NowBookNums--
//查不到就查无此人
//定义一个变量来接收下标
int TempDelt = ReturnPosition();
if (TempDelt == -1)//没找到
{
HWND hndtipsD = GetHWnd();//获取窗口句柄
int isok = MessageBox(hndtipsD, "没有这本书的图书信息!", "提示", MB_OK);
}
else
{
//找到了就提示是否确定删除
//获取窗口句柄
HWND hndtipsDS = GetHWnd();
//用一个字符数组来总结句子
int isok = MessageBox(hndtipsDS, "确定删除?", "提示", MB_OKCANCEL);
if (isok == IDOK)
{
//确定删除操作
//将这个元素的后一个依次迁移
for (int d = TempDelt; d < BookNum; d++)
{
books[d] = books[d + 1];
}
//现在的人数-1
BookNum--;
//删除完成只是将当前结构体里面的数据清除了,但是文件中并没有作出更改
//更新到文件中
SaveAlter();//用这个全部清空的函数,再对文件进行重写
}
else if (isok == IDCANCEL)
{
//取消删除不执行任何操作
}
}
}
void SaveInfor()
{
if (strlen(books[BookNum].title) != 0 && strlen(books[BookNum].author) != 0)
{
fstream myFile;
myFile.open("data.txt", ios::app); // append,追加
myFile << books[BookNum].title << " "
<< books[BookNum].author << " "
<< books[BookNum].totalnum << " "
<< books[BookNum].borrownum << endl;
myFile.close();
BookNum++;//录入完毕,记录数加一
}
}
void AddBook()
{
while (1)
{
InputBox(books[BookNum].title, 20, "请输入需要录入的图书名称:");//显示一个输入框,
if (BookFormat(books[BookNum].title))//为真跳出循环
{
break;
}
}
while (1)
{
InputBox(books[BookNum].author, 20, "请输入需要录入的图书作者名称:");//显示一个输入框,
if (BookFormat(books[BookNum].author))//为真跳出循环
{
break;
}
}
while (1)
{
InputBox(books[BookNum].totalnum, 20, "请输入需要录入的图书总数为:");//显示一个输入框,
if (BookFormat(books[BookNum].totalnum))//为真跳出循环
{
break;
}
}
while (1)
{
InputBox(books[BookNum].borrownum, 20, "请输入需要录入的图书总数为:");//显示一个输入框,
if (BookFormat(books[BookNum].borrownum))//为真跳出循环
{
break;
}
}
SaveInfor();
}
void FindBook()
{
int Position = ReturnPosition();
initgraph(1170, 869);
IMAGE img_bk;
loadimage(&img_bk, "./bk3.jpg");
cleardevice();//清屏
BeginBatchDraw();//开始批量绘图
putimage(0, 0, &img_bk);//展示背景图片
setbkmode(TRANSPARENT);//设置背景模式透明
//标题
char SecondTitle[20] = "查找图书界面";
settextstyle(40, 0, "华文行楷");
outtextxy(0, 0, SecondTitle);
settextstyle(30, 0, "隶书");
settextcolor(BLACK);
outtextxy(150, 30, "图书名称");
outtextxy(450, 30, "作者");
outtextxy(680, 30, "图书总数");
outtextxy(900, 30, "借阅数");
if (Position == -1)//没找到
{
//获取窗口句柄
HWND hndtipsM = GetHWnd();
//用一个字符数组来总结句子
int isok = MessageBox(hndtipsM, "抱歉,没有这本书!", "提示", MB_OK);
}
else
{
//打印找到的信息
outtextxy(150, 80, books[Position].title);//输出书名
outtextxy(450, 80, books[Position].author);
outtextxy(680, 80, books[Position].totalnum);
outtextxy(900, 80, books[Position].borrownum);
}
setfillcolor(RGB(56, 242, 212));
fillrectangle(380, 700, 800, 750);
settextcolor(BLACK);
settextstyle(40, 0, "隶书");
char SecondSelect5[20] = { "返回" };
outtextxy(395, 705, SecondSelect5);
FlushBatchDraw();
EndBatchDraw();
//定义第三个鼠标操作
MOUSEMSG m4;
while (1)
{
m4 = GetMouseMsg();
if (m4.x >= 380 && m4.x <= 800 && m4.y >= 700 && m4.y <= 750)
{
setlinecolor(RED);
rectangle(380, 700, 800, 750);
if (m4.uMsg == WM_LBUTTONDOWN)
{
//返回
UserPage();
}
}
else
{
setlinecolor(WHITE);
rectangle(380, 700, 800, 750);
}
}
}
void addstring(char s1[], char s2[])
{
int i = atoi(s1);
int j = atoi(s2);
int sum = i + j;
sprintf(s1, "%d", sum);
}
void BorrowBook()
{
//定义一个变量用来接收下标
int TempBorr = ReturnPosition();
if (TempBorr == -1)//没找到
{
//获取窗口句柄
HWND hndtipsF = GetHWnd();
//用一个字符数组来总结句子
int isok = MessageBox(hndtipsF, "无法借阅!", "提示", MB_OK);
}
else//找到了——将借阅出去的图书信息存储到另一个文件中,归还时重新读入
{
initgraph(1170, 869);
cleardevice();//清屏
IMAGE img_bk;
loadimage(&img_bk, "./bk3.jpg");
BeginBatchDraw();//开始批量绘图
putimage(0, 0, &img_bk);//展示背景图片
setbkmode(TRANSPARENT);//设置背景模式透明
//标题
char SecondTitle[20] = "图书借阅界面";
settextstyle(40, 0, "华文行楷");
outtextxy(0, 0, SecondTitle);
if (strlen(books[TempBorr].title) != 0 && strlen(books[TempBorr].author) != 0)
{
addstring(books[TempBorr].borrownum, s);
fstream myFile;
myFile.open("borrow.txt", ios::app); // append,追加
//myFile.open("data.txt", ios::trunc); //- 删除现有文件中的数据
myFile << books[TempBorr].title << " "
<< books[TempBorr].author << endl;
myFile.close();//关闭文件
}
SaveAlter();
HWND hndtipsF = GetHWnd();
int isok = MessageBox(hndtipsF, "借阅成功", "提示", MB_OK);
RecordNum++;
settextstyle(30, 0, "隶书");
settextcolor(BLACK);
outtextxy(150, 30, "图书名称");
outtextxy(450, 30, "作者");
ReadIn2();
//打印找到的信息
for (int i = 1; i <= RecordNum; i++)
{
//缩放字体
settextstyle(25, 0, "隶书");
outtextxy(150, 40 + 40 * i, bobooks[i - 1].title);//输出书名
outtextxy(450, 40 + 40 * i, bobooks[i - 1].author);//作者
}
setfillcolor(RGB(191, 149, 214));
fillrectangle(380, 620, 800, 670);
fillrectangle(380, 700, 800, 750);
settextcolor(BLACK);
settextstyle(40, 0, "隶书");
char SecondSelect4[20] = { "继续借阅" };
char SecondSelect5[20] = { "返回" };
outtextxy(395, 625, SecondSelect4);
outtextxy(395, 705, SecondSelect5);
FlushBatchDraw();
EndBatchDraw();
//定义第三个鼠标操作
MOUSEMSG m4;
while (1)
{
m4 = GetMouseMsg();
if (m4.x >= 380 && m4.x <= 800 && m4.y >= 620 && m4.y <= 670)
{
setlinecolor(RED);
rectangle(380, 620, 800, 670);
if (m4.uMsg == WM_LBUTTONDOWN)
{
//继续借阅
BorrowBook();
}
}
if (m4.x >= 380 && m4.x <= 800 && m4.y >= 700 && m4.y <= 750)
{
setlinecolor(RED);
rectangle(380, 700, 800, 750);
if (m4.uMsg == WM_LBUTTONDOWN)
{
//返回
cleardevice();
UserPage();
}
}
else
{
setlinecolor(WHITE);
rectangle(380, 620, 800, 670);
rectangle(380, 700, 800, 750);
}
}
}
}
int RePosition()
{
//接受用户输入
char ReceInput[64];
InputBox(ReceInput, 100, "请输入书名或者作者名进行操作");//显示一个输入框
for (int w = 0; w < BookNum; w++)//进行循环查找,一旦相同就跳出循环
{
if (strcmp(books[w].title, ReceInput) == 0 || strcmp(books[w].author, ReceInput) == 0)//返回0表示两个字符串相等
{
return w;
}
//strcmp用法:
/*该函数返回值如下:
如果返回值小于 0,则表示 str1 小于 str2。
如果返回值大于 0,则表示 str1 大于 str2。
如果返回值等于 0,则表示 str1 等于 str2。*/
}
//如果没找到就返回-1
return -1;
}
void ReturnBook()
{
int TempBorr = RePosition();
if (TempBorr == -1)//没找到
{
//获取窗口句柄
HWND hndtipsF = GetHWnd();//获得窗口句柄
//在 Windows 下,句柄是一个窗口的标识
//得到句柄后,可以使用 Windows API 中的函数实现对窗口的控制。
//用一个字符数组来总结句子
int isok = MessageBox(hndtipsF, "归还失败!", "提示", MB_OK);
}
else//找到了——将借阅出去的图书信息存储到另一个文件中,归还时重新读入
{
fstream myFile;
myFile.open("Return.txt", ios::out);//写入
for (int i = 0; i < RecordNum; i++)
{
if (strlen(bobooks[i].title) != 0 && strlen(bobooks[i].author) != 0)
{
myFile << bobooks[i].title << " "
<< bobooks[i].author << endl;
}
}
myFile.close();
HWND hndtipsF = GetHWnd();
int isok = MessageBox(hndtipsF, "归还成功", "提示", MB_OK);
}
}
void UserInforPage()
{
initgraph(1170, 869);
IMAGE img_bk;
loadimage(&img_bk, "./bk3.jpg");
cleardevice();//清屏
BeginBatchDraw();//开始批量绘图
putimage(0, 0, &img_bk);//展示背景图片
setbkmode(TRANSPARENT);//设置背景模式透明
//标题
char SecondTitle[20] = "用户信息界面";
settextstyle(40, 0, "华文行楷");
outtextxy(0, 0, SecondTitle);
settextcolor(BLACK);
settextstyle(50, 0, "隶书");
outtextxy(30, 30, "借阅过的图书");
outtextxy(30, 350, "归还的图书");
//借阅
settextstyle(30, 0, "隶书");
outtextxy(60, 70, "图书名称");
outtextxy(400, 70, "作者");
//归还
outtextxy(60, 390, "图书名称");
outtextxy(400, 390, "作者");
ReadIn2();
if (RecordNum == 0)
{
settextstyle(50, 0, "隶书");
outtextxy(200, 200, "当前记录为空!");
return;
}
for (int i = 1; i <= RecordNum; i++)
{
//缩放字体
settextstyle(25, 0, "隶书");
outtextxy(60, 100 + 30 * i, bobooks[i - 1].title);//输出书名
outtextxy(400, 100 + 30 * i, bobooks[i - 1].author);//作者
}
ReadIn3();
if (ReturnNum == 0)
{
settextstyle(50, 0, "隶书");
outtextxy(200, 200, "当前记录为空!");
return;
}
for (int i = 1; i <= ReturnNum; i++)
{
//缩放字体
settextstyle(25, 0, "隶书");
outtextxy(60, 420 + 30 * i, rebooks[i - 1].title);//输出书名
outtextxy(400, 420 + 30 * i, rebooks[i - 1].author);//作者
}
setfillcolor(RGB(191, 149, 214));
fillrectangle(380, 700, 800, 750);
settextcolor(BLACK);
settextstyle(40, 0, "隶书");
char SecondSelect5[20] = { "返回" };
outtextxy(395, 705, SecondSelect5);
FlushBatchDraw();
EndBatchDraw();
//定义第三个鼠标操作
MOUSEMSG m4;
while (1)
{
m4 = GetMouseMsg();
if (m4.x >= 380 && m4.x <= 800 && m4.y >= 700 && m4.y <= 750)
{
setlinecolor(RED);
rectangle(380, 700, 800, 750);
if (m4.uMsg == WM_LBUTTONDOWN)
{
//返回
UserPage();
}
}
else
{
setlinecolor(WHITE);
rectangle(380, 700, 800, 750);
}
}
}
int main()
{
ReadIn();
FirstPage();
}
有很多的bug,但是可以应付答辩,还有存储图书信息文本的截图