0
点赞
收藏
分享

微信扫一扫

[C语言课程项目设计] EGE图形化界面设计的使用举例

安七月读书 2022-03-13 阅读 264

在本专栏里已经有EGE的简易版使用教程,可以说是有手就行【狗头】

所以这篇我主要贴一些代码来举例

---------------------------------------------------------------------------------------------------------------

注意:1.不同的功能应该放在不同的源文件中,课设项目要求的是多文件结构

           2.一个源文件对应一个头文件(头文件一般是声明函数和定义结构体的)

           3.所有的源文件和头文件都要添加在项目里面

如图所示:

 

1.进入系统时,我们可以先设置一个登录功能:

新建一个源文件叫做login.cpp,新建一个头文件叫login.h

头文件里写的是对应cpp文件里会用到的函数的声明,比如这里我们只用写“void login();”

这里的函数也可以是其他源文件的函数哟

#include <graphics.h>
#include "enterSystem.h"
void login() {
initgraph(1000, 625); //创建窗口
PIMAGE src1;
src1 = newimage();
getimage(src1, "4.jpg");
putimage(0, 0, src1);
setfont(26, 0, "宋体");
setbkmode(TRANSPARENT);
setcolor(BLACK);
char input[10];
for(; is_run(); delay_fps(60)) { //is_run()判断窗口是否存在,delay_fps(60) 作用是稳定帧率并刷新窗口 ,一秒钟循环60次
mouse_msg msg = {0}; //定义鼠标变量并且初始化
while(mousemsg()) { //利用mousemsg()判断有没有鼠标消息
msg = getmouse();
} //获得鼠标消息
if((msg.x > 142 && msg.x < 391) && (msg.y > 414 && msg.y < 499) && msg.is_left() && msg.is_down()) {

//登录系统
int num = 0;
inputbox_getline("输入", "请输入管理员账号", input, 20);
while(strcmp("zhangsan", input) != 0) {
if(num > 3) {
xyprintf(100, 142, "警告!多次输入错误,即将退出系统...");
delay_ms(3000);
delimage(src1);
src1 = NULL;
closegraph();
exit(1);
}
inputbox_getline("输入", "请重新输入管理员账号", input, 20);
num++;
}
num = 0;
inputbox_getline("输入", "请输入账号密码", input, 10);
while(strcmp("123456", input) != 0) {
if(num > 3) {
xyprintf(100, 142, "警告!多次输入错误,即将退出系统...");
delay_ms(3000);
delimage(src1);
src1 = NULL;
closegraph();
exit(1);
}
inputbox_getline("输入", "请重新输入账号密码", input, 10);
num++;
}
enterSystem();
} else if((msg.x > 587 && msg.x < 823) && (msg.y > 417 && msg.y < 499) && msg.is_left() && msg.is_down()) {

//退出整个系统
delimage(src1);//销毁图像,防止内存泄露
src1 = NULL;
closegraph();
exit(1);
}
}
delimage(src1);//销毁图像,防止内存泄露
src1 = NULL;
}

2.进入系统

新建一个源文件叫做enterSystem.cpp,新建一个头文件叫enterSystem.h

#include <graphics.h>
#include "mainMenu.h"
void enterSystem() {
cleardevice();
PIMAGE src1;
src1 = newimage();
getimage(src1, "1.jpg");
putimage(0, 0, src1);
for(; is_run(); delay_fps(60)) { //is_run()判断窗口是否存在,delay_fps(60) 作用是稳定帧率并刷新窗口 ,一秒钟循环60次
mouse_msg msg = {0}; //定义鼠标变量并且初始化
while(mousemsg()) { //利用mousemsg()判断有没有鼠标消息
msg = getmouse();
} //获得鼠标消息
if((msg.x > 112 && msg.x < 366) && (msg.y > 442 && msg.y < 550) && msg.is_left()&&msg.is_down()) {
//开始使用
delimage(src1);//销毁图像,防止内存泄露
src1 = NULL;
mainMenu();
} else if((msg.x > 636 && msg.x < 873) && (msg.y > 451 && msg.y < 555) && msg.is_left()&&msg.is_down()) {
//退出整个系统
delimage(src1);//销毁图像,防止内存泄露
src1 = NULL;
closegraph();
exit(1);
}
}
}

3.主界面的设计

#include "informationManagement.h"
#include "titleManagement.h"
#include "research.h"
#include <graphics.h>
void mainMenu() { //主界面
cleardevice();
PIMAGE src2;
src2 = newimage();
getimage(src2,"2.jpg"); // getimage(pimg, "图片文件名(带扩展名)");
putimage(0,0,src2);
for(; is_run(); delay_fps(60)) { //is_run()判断窗口是否存在,delay_fps(60) 作用是稳定帧率并刷新窗口 ,一秒钟循环60次
mouse_msg msg;//定义鼠标变量并且初始化
while(mousemsg()) { //利用mousemsg()判断有没有鼠标消息
msg = getmouse();
} //获得鼠标消息
if((msg.x>326&&msg.x<661)&&(msg.y>55&&msg.y<115)&&msg.is_left()&&msg.is_down()) {
//课程信息管理
informationManage();
}
else if((msg.x>327&&msg.x<661)&&(msg.y>181&&msg.y<243)&&msg.is_left()&&msg.is_down()) {
//题目管理
titleManage();
} else if((msg.x>328&&msg.x<664)&&(msg.y>229&&msg.y<363)&&msg.is_left()&&msg.is_down()) {
//查询
research();
} else if((msg.x>327&&msg.x<664)&&(msg.y>414&&msg.y<479)&&msg.is_left()&&msg.is_down()) {
//退出整个系统
delimage(src2);
src2 = NULL;
closegraph();
exit(1);
}
}
delimage(src2);
src2 = NULL;
}

3.一些功能的举例

例如,题目修改功能:代码如下

#include <graphics.h>
#include <stdio.h>
#include "titleManagement.h"
#include "mainMenu.h"
#include <stdlib.h>
#include "structData.h"
void titleManage() {
cleardevice(); //清屏
PIMAGE src1 = newimage();
PIMAGE src2 = newimage();
getimage(src1,"9.jpg");
getimage(src2,"10.jpg");
putimage(0,0,src1);
setfont(28, 0, "宋体");
setbkmode(TRANSPARENT);
setcolor(WHITE);
FILE* fp = fopen("list2.txt", "rb");
if(NULL == fp) {
xyprintf(0, 0, "数据获取失败!即将退出系统...");
delay(3000);
exit(0);
}
fclose(fp);
fp = NULL;
for(; is_run(); delay_fps(60)) { //is_run()判断窗口是否存在,delay_fps(60) 作用是稳定帧率并刷新窗口 ,一秒钟循环60次
mouse_msg msg = {0};
while(mousemsg()) { //利用mousemsg()判断有没有鼠标消息
msg = getmouse();
} //获得鼠标消息
if((msg.x > 365 && msg.x < 637) && (msg.y > 68 && msg.y < 140) && msg.is_left()&&msg.is_down()) {
//添加题目
cleardevice();
putimage(0,0,src2);//设置背景
setfont(30, 0, "宋体");
setbkmode(TRANSPARENT);
setcolor(WHITE);
addCourse();
mainMenu();
} else if((msg.x > 365 && msg.x < 637) && (msg.y > 357 && msg.y < 438) && msg.is_left()&&msg.is_down()) {
//删除题目
cleardevice();
putimage(0,0,src2);//设置背景
setfont(30, 0, "宋体");
setbkmode(TRANSPARENT);
setcolor(BLACK);
deleteCourse();
mainMenu();
} else if((msg.x > 365 && msg.x < 637) && (msg.y > 208 && msg.y < 281) && msg.is_left()&&msg.is_down()) {
//修改题目
cleardevice();
putimage(0,0,src2);//设置背景
setfont(30, 0, "宋体");
setbkmode(TRANSPARENT);
setcolor(WHITE);
reviseInformation();
mainMenu();
} else if((msg.x > 422 && msg.x < 553) && (msg.y > 474 && msg.y < 530) && msg.is_left()&&msg.is_down()) {
mainMenu();
}
}
delimage(src1);
delimage(src2);
src1 = src2 = NULL;
}
void addendNode(struct Node** root, struct Course* pData) { //添加一个节点到指针末尾
if(root == NULL)
return;
if(*root == NULL) { //传进来一个空列表
*root = createNode(pData);
return;
}
struct Node* pTemp = *root;
//让pTemp指向链表的最后一个节点
while(pTemp -> pNext) pTemp = pTemp -> pNext;
pTemp -> pNext = createNode(pData);//把新节点添加到pTemp后面
}

struct Node* createNode(struct Course* pData) {
struct Node* pNew = (struct Node*) malloc(sizeof(struct Node)); //申请内存
if(NULL == pNew) {
return NULL;
}
pNew -> pNext = NULL;
strcpy(pNew -> data.title, pData -> title);
strcpy(pNew -> data.tName, pData -> tName);
strcpy(pNew -> data.sName, pData -> sName);
strcpy(pNew -> data.need, pData -> need);
return pNew;
}
void addCourse() {
char input1[30], input2[10], input3[400];
//1 打开文件
FILE* fp = fopen("list2.txt", "rb");
//2 读取问文件内容并存到容器中
struct Node* pList = NULL;
int r;
struct Course temp;
while(1) {
r = fread(&temp, 1, sizeof(struct Course), fp); //temp表示存放输入数据的首地址
if(r <= 0) { //没读到
break;
} else {
//读到学生信息
//创建一个链表节点并添加到链表中
addendNode(&pList,
}
}
//3 关闭文件
fclose(fp);
fp = NULL;
inputbox_getline("输入", "请输入要添加的题目",input1, 30);
inputbox_getline("输入", "请输入要添加的老师名字",input2, 10);
inputbox_getline("输入", "请输入要添加的要求",input3, 400);
strcpy(temp.need, input3);
strcpy(temp.title, input1);
strcpy(temp.tName, input2);
strcpy(temp.sName, "暂无");
addendNode(&pList,
fp = fopen("list2.txt", "wb");
struct Node* pTemp = pList;
//写入数据
while(pTemp) {
fwrite(&(pTemp -> data), 1, sizeof(struct Course), fp);
pTemp = pTemp -> pNext;
}
fclose(fp);
pTemp = NULL;
struct Node* pDel = pList;
while(pList -> pNext) {
pList = pDel -> pNext;
free(pDel);//释放内存
pDel = NULL;
pDel = pList;
}
free(pList);
pList = pDel = NULL;
xyprintf(0, 0, "添加成功, 正在返回...");
delay_ms(3000);
return;
}
void deleteCourse() {
FILE* fp = fopen("list2.txt", "rb");
struct Node* pList = NULL;
int r;
struct Course temp;
while(1) {
r = fread(&temp, 1, sizeof(struct Course), fp); //temp表示存放输入数据的首地址
if(r <= 0) { //没读到
break;
} else {
//读到学生信息
//创建链一个表节点并添加到链表中
addendNode(&pList,
}
}
fclose(fp);
fp = NULL;
char input[40];
struct Node* pDel, *pDelPret;
int flag = 0;
pDel = pDelPret = pList;
inputbox_getline("输入", "请输入要删除的题目",input, 40);
while(pDel) {
if(strcmp(pList -> data.title, input) == 0) {
pList = pList -> pNext;
flag = 1;
break;
}
if(strcmp(pDel -> data.title, input) == 0) {
if(pDel -> pNext != NULL) {
pDelPret -> pNext = pDel -> pNext;
} else {
pDelPret -> pNext = NULL;
}
flag = 1;
break;
}
pDelPret = pDel;
pDel = pDel -> pNext;
}
pDel = NULL;
if(flag != 1) {
pDel = pList;
while(pList -> pNext) {
pList = pDel -> pNext;
free(pDel);//释放内存
pDel = NULL;
pDel = pList;
}
free(pList);
pList = pDel = NULL;
xyprintf(0, 0, "该题目不存在!即将返回...");
delay_ms(3000);
return;
}
//1 打开文件
fp = fopen("list2.txt", "wb");
struct Node* pTemp = pList;
//写入数据
while(pTemp) {
fwrite(&(pTemp -> data), 1, sizeof(struct Course), fp);
pTemp = pTemp -> pNext;
}
fclose(fp);
pTemp = NULL;
pDel = pList;
while(pList -> pNext) {
pList = pDel -> pNext;
free(pDel);//释放内存
pDel = NULL;
pDel = pList;
}
free(pList);
pList = pDel = NULL;
outtextxy(229, 513, "删除成功, 正在返回...");
delay_ms(3000);
return;
}
void reviseInformation() {
char input[30];
FILE* fp = fopen("list2.txt", "rb");
struct Node* pList = NULL;
int r;
struct Course temp;
while(1) {
r = fread(&temp, 1, sizeof(struct Course), fp); //temp表示存放输入数据的首地址
if(r <= 0) { //没读到
break;
} else {
//读到学生信息
//创建链一个表节点并添加到链表中
addendNode(&pList,
}
}
fclose(fp);
fp = NULL;
struct Node* pRevise = pList;
int flag = 0;
inputbox_getline("输入", "请输入要修改的题目",input, 30);
while(pRevise) {
if(strcmp(pRevise -> data.title, input) == 0) {
flag = 1;
break;
}
pRevise = pRevise -> pNext;
}
if(flag != 1) {
struct Node* pDel = pList;
while(pList -> pNext) {
pList = pDel -> pNext;
free(pDel);//释放内存
pDel = NULL;
pDel = pList;
}
free(pList);
pList = pDel = pRevise = NULL;
xyprintf(0, 0, "未找到相关题目!即将返回...");
delay_ms(3000);
return;
}
inputbox_getline("输入", "请输入修改后题目",input, 30);
strcpy(pRevise -> data.title, input);
pRevise = NULL;
//1 打开文件
fp = fopen("list2.txt", "wb");
struct Node* pTemp = pList;
//写入数据
while(pTemp) {
fwrite(&(pTemp -> data), 1, sizeof(struct Course), fp);
pTemp = pTemp -> pNext;
}
fclose(fp);
//删除链表
struct Node* pDel = pList;
while(pList -> pNext) {
pList = pDel -> pNext;
free(pDel);//释放内存
pDel = NULL;
pDel = pList;
}
free(pList);
pList = pDel = NULL;
outtextxy(0, 0, "修改成功, 正在返回...");
delay_ms(3000);
return;
}

----------------------------------------------------------------------------------------------------------

本篇博客介绍到这里,886

ps:想要本系统所有代码的小伙伴们还请一键三连哟~

举报

相关推荐

0 条评论