#include <stdio.h>
#include <windows.h>
#include <conio.h>
#include <string.h>
#include<graphics.h> //Easyx的图形库头文件
#include<ctype.h>
#define _CRT_SECURE_NO_WARNINGS
struct Student
{
char id[14];
char name[10];
char age[4];
char sex[4];
char date[16];
char address[20];
char phone[12];
char email[20];
};
struct Student stu[50], ss;
void menu();
int searchID(Student stu[], int count, char* keyID);
//功能:在stu的count个元素,查找ss
//返回值:查找成功,返回ss在stu中的位置号;否则,返回 -1
int searchNAME(Student stu[], int count, char* keyNAME);
int searchPHONE(Student stu[], int count, char* keyPHONE);
int searchEMAIL(Student stu[], int count, char* keyEMAIL);
//正常插入,返回学生数;否则,返回-1
int add(Student stu[], int count, Student ss);
//若输入的学号存在,正常修改,返回学生数,否则,修改失败,返回 -1
int modify(Student stu[], int count, Student ss);
//若输入的学号存在,删除,返回学生数,否则,删除失败,返回 -1
int Delete(Student stu[], int count, Student ss);
void writeFile(Student stu[], int count);
int readFile(Student stu[]);
void Showall();
void PrintUI();
//按钮数组
int R[] = { 150,50,650,150 };
int r1[] = { 200,100,600,200 };
int r2[] = { 200,150,600,250 };
int r3[] = { 200,200,600,300 };
int r4[] = { 200,250,600,350 };
int r5[] = { 200,300,600,400 };
int r6[] = { 200,350,600,450 };
int r7[] = { 200,400,600,500 };
int r8[] = { 200,450,600,550 };
int r9[] = { 200,500,600,600 };
int count;
void menu()
{
initgraph(800, 640);
ExMessage m1;
cleardevice();
setbkcolor(BLUE);
setbkmode(TRANSPARENT);
setfillcolor(WHITE);
fillrectangle(r1[0], r1[1], r1[2], r1[3]);//画矩形,即按钮
fillrectangle(r2[0], r2[1], r2[2], r2[3]);
fillrectangle(r3[0], r3[1], r3[2], r3[3]);
fillrectangle(r4[0], r4[1], r4[2], r4[3]);
fillrectangle(r5[0], r5[1], r5[2], r5[3]);
fillrectangle(r6[0], r6[1], r6[2], r6[3]);
fillrectangle(r7[0], r7[1], r7[2], r7[3]);
fillrectangle(r8[0], r8[1], r8[2], r8[3]);
fillrectangle(r9[0], r9[1], r9[2], r9[3]);
RECT R1 = { R[0],R[1],R[2],R[3] };//矩形指针R1,方便后面在里面写字,不用计算字的位置
RECT R2 = { r1[0],r1[1],r1[2],r1[3] };
RECT R3 = { r2[0],r2[1],r2[2],r2[3] };
RECT R4 = { r3[0],r3[1],r3[2],r3[3] };
RECT R5 = { r4[0],r4[1],r4[2],r4[3] };
RECT R6 = { r5[0],r5[1],r5[2],r5[3] };
RECT R7 = { r6[0],r6[1],r6[2],r6[3] };
RECT R8 = { r7[0], r7[1], r7[2], r7[3] };
RECT R9 = { r8[0], r8[1], r8[2], r8[3] };
RECT R10 = { r9[0], r9[1], r9[2], r9[3] };
setbkmode(TRANSPARENT); //字体背景透明
settextcolor(BLACK);
drawtext("学生信息管理系统", &R1, DT_CENTER | DT_VCENTER | DT_SINGLELINE);//在矩形区域R1内输入文字,水平居中,垂直居中,单行显示
drawtext("录入", &R2, DT_CENTER | DT_VCENTER | DT_SINGLELINE);
drawtext("查询(按学号)", &R3, DT_CENTER | DT_VCENTER | DT_SINGLELINE);
drawtext("查询(按姓名)", &R4, DT_CENTER | DT_VCENTER | DT_SINGLELINE);
drawtext("查询(按电话)", &R5, DT_CENTER | DT_VCENTER | DT_SINGLELINE);
drawtext("查询(按电子邮箱)", &R6, DT_CENTER | DT_VCENTER | DT_SINGLELINE);
drawtext("信息修改", &R7, DT_CENTER | DT_VCENTER | DT_SINGLELINE);
drawtext("信息删除", &R8, DT_CENTER | DT_VCENTER | DT_SINGLELINE);
drawtext("显示信息", &R9, DT_CENTER | DT_VCENTER | DT_SINGLELINE);
drawtext("退出系统", &R10, DT_CENTER | DT_VCENTER | DT_SINGLELINE);
char keyID[20], keyNAME[10], keyPHONE[12], keyEMAIL[20];
int i;
int tag = 1;
count = readFile(stu);
while (1)
{
m1 = getmessage();//获取鼠标操作
if (m1.x > r1[0] && m1.x < r1[2] && m1.y>r1[1] && m1.y < r1[3]) {
setlinecolor(RED);
rectangle(r1[0], r1[1], r1[2], r1[3]);
if (m1.message == WM_LBUTTONDOWN)
{
add(stu, count, ss);//录入
}
}
else if (m1.x >= r2[0] && m1.x <= r2[2] && m1.y >= r2[1] && m1.y <= r2[3]) {
setlinecolor(RED);
rectangle(r2[0], r2[1], r2[2], r2[3]);
if (m1.message == WM_LBUTTONDOWN)
{
searchID(stu, count, keyID);//查询学号
}
}
else if (m1.x >= r3[0] && m1.x <= r3[2] && m1.y >= r3[1] && m1.y <= r3[3]) {
setlinecolor(RED);
rectangle(r3[0], r3[1], r3[2], r3[3]);
if (m1.message == WM_LBUTTONDOWN)
{
searchNAME(stu, count, keyNAME);//名字
}
}
else if (m1.x >= r4[0] && m1.x <= r4[2] && m1.y >= r4[1] && m1.y <= r4[3]) {
setlinecolor(RED);
rectangle(r4[0], r4[1], r4[2], r4[3]);
if (m1.message == WM_LBUTTONDOWN) {
searchPHONE(stu, count, keyPHONE);//电话
}
}
else if (m1.x >= r5[0] && m1.x <= r5[2] && m1.y >= r5[1] && m1.y <= r5[3]) {
setlinecolor(RED);
rectangle(r5[0], r5[1], r5[2], r5[3]);
if (m1.message == WM_LBUTTONDOWN) {
searchEMAIL(stu, count, keyEMAIL);//电子邮箱
}
}
else if (m1.x >= r6[0] && m1.x <= r6[2] && m1.y >= r6[1] && m1.y <= r6[3]) {
setlinecolor(RED);
rectangle(r6[0], r6[1], r6[2], r6[3]);
if (m1.message == WM_LBUTTONDOWN) {
modify(stu, count, ss);//修改
}
}
else if (m1.x >= r7[0] && m1.x <= r7[2] && m1.y >= r7[1] && m1.y <= r7[3]) {
setlinecolor(RED);
rectangle(r7[0], r7[1], r7[2], r7[3]);
if (m1.message == WM_LBUTTONDOWN) {
Delete(stu, count, ss);//删除
}
}
else if (m1.x >= r8[0] && m1.x <= r8[2] && m1.y >= r8[1] && m1.y <= r8[3]) {
setlinecolor(RED);
rectangle(r8[0], r8[1], r8[2], r8[3]);
if (m1.message == WM_LBUTTONDOWN) {
Showall(); //打印
}
}
else if (m1.x >= r9[0] && m1.x <= r9[2] && m1.y >= r9[1]&&m1.y <= r9[3]){
setlinecolor(RED);
rectangle(r9[0], r9[1], r9[2], r9[3]);
if (m1.message == WM_LBUTTONDOWN) {
closegraph();//退出
}
}
else {
setlinecolor(WHITE);
rectangle(r1[0], r1[1], r1[2], r1[3]);
rectangle(r2[0], r2[1], r2[2], r2[3]);
rectangle(r3[0], r3[1], r3[2], r3[3]);
rectangle(r4[0], r4[1], r4[2], r4[3]);
rectangle(r5[0], r5[1], r5[2], r5[3]);
rectangle(r6[0], r6[1], r6[2], r6[3]);
rectangle(r7[0], r7[1], r7[2], r7[3]);
rectangle(r8[0], r8[1], r8[2], r8[3]);
rectangle(r9[0], r9[1], r9[2], r9[3]);
}
}
}
int searchID(Student stu[], int count, char* keyID) //int searchID(Student stu[], int count, char key) 修改
{
int i;
char* p = NULL;
InputBox(keyID, 10,"请输入学生的学号关键词");
for (i = 0; i < count; i++) //先排查 学号
{
p = strstr(stu[i].id, keyID);
if (p) return i;
}
if (!p) {
HWND hndtipsF = GetHWnd();
int isok = MessageBox(hndtipsF, "查无此人!", "提示", MB_OK);
return -1;
}
}
int searchNAME(Student stu[], int count, char* keyNAME) //int searchID(Student stu[], int count, char key) 修改
{
int i;
char* p = NULL;
InputBox(keyNAME, 10, "请输入学生的姓名关键词");
for (i = 0; i < count; i++)
{
p = strstr(stu[i].name, keyNAME);
if (p) return i;
}
if (!p) {
HWND hndtipsF = GetHWnd();
int isok = MessageBox(hndtipsF, "查无此人!", "提示", MB_OK);
return -1;
}
}
int searchPHONE(Student stu[], int count, char* keyPHONE) //int searchID(Student stu[], int count, char key) 修改
{
int i;
char* p = NULL;
InputBox(keyPHONE, 10, "请输入学生的电话关键词");
for (i = 0; i < count; i++) //先排查 学号
{
p = strstr(stu[i].phone, keyPHONE);
if (p) return i;
}
if (!p) {
HWND hndtipsF = GetHWnd();
int isok = MessageBox(hndtipsF, "查无此人!", "提示", MB_OK);
return -1;
}
}
int searchEMAIL(Student stu[], int count, char* keyEMAIL) //int searchID(Student stu[], int count, char key) 修改
{
int i;
char* p = NULL;
InputBox(keyEMAIL, 10, "请输入学生的电子邮箱关键词");
for (i = 0; i < count; i++) //先排查 学号
{
p = strstr(stu[i].email, keyEMAIL);
if (p) return i;
}
if (!p) {
HWND hndtipsF = GetHWnd();
int isok = MessageBox(hndtipsF, "查无此人!", "提示", MB_OK);
return -1;
}
}
void PrintUI(int q)//输出成绩界面
{
ExMessage m2;
initgraph(640, 480);
setbkcolor(GREEN);
setfillcolor(WHITE);
fillrectangle(300, 380, 380, 410);
setbkmode(TRANSPARENT);
settextcolor(BLACK);
settextstyle(20, 0, "黑体");
outtextxy(40, 100, "学号");
outtextxy(200, 100, "姓名");
outtextxy(300, 100, "年龄");
outtextxy(380, 100, "性别");
outtextxy(440, 100, "出生日期");
outtextxy(500, 100, "地址");
outtextxy(580, 100, "电话");
outtextxy(660, 100, "电子邮箱");
outtextxy(40, 140, (TCHAR)stu[q].id);
outtextxy(200, 140, (TCHAR)stu[q].name);
outtextxy(300, 140, (TCHAR)stu[q].age);
outtextxy(380, 140, (TCHAR)stu[q].sex);
outtextxy(440, 140, (TCHAR)stu[q].date);
outtextxy(500, 140, (TCHAR)stu[q].address);
outtextxy(580, 140, (TCHAR)stu[q].phone);
outtextxy(660, 140, (TCHAR)stu[q].email);
while (1) {
m2 = getmessage();
if (m2.x > 300 && m2.x < 380 && m2.y>380 && m2.y < 410) {
setlinecolor(RED);
rectangle(300, 380, 380, 410);
}
else {
setlinecolor(WHITE);
rectangle(300, 380, 380, 410);
}
if (m2.message == WM_LBUTTONDOWN) {
menu();//返回到主菜单
}
}
}
//功能:在stu的count个元素,查找ss
//返回值:查找成功,返回ss在stu中的位置号;否则,返回 -1
int add(Student stu[], int count, Student ss)
{
InputBox(stu[count].id, 14, "请输入该学生的学号");
int pos;
//先判断添加的信息是否原本已有这个学生
pos = searchID(stu, count, ss.id);
//如果本来不存在,就添加
if (pos == -1)
{
stu[count] = ss;
return count + 1;
}
else {
HWND hwndInput1 = GetHWnd();
int isok = MessageBox(hwndInput1, "该学生已经存在,请重新输入", "提示", MB_OK);
}
InputBox(stu[count].name, 10, "请输入该学生的姓名");
InputBox(stu[count].age, 4, "请输入该学生的年龄");
InputBox(stu[count].date, 16, "请输入该学生的出生日期");
InputBox(stu[count].address,20 , "请输入该学生的地址");
InputBox(stu[count].phone, 12, "请输入该学生的电话");
InputBox(stu[count].email, 20, "请输入该学生的电子邮箱");
return -1;
}
//若输入的学号存在,正常修改,返回学生数,否则,修改失败,返回 -1
int modify(Student stu[], int count, Student ss)
{
int pos;
pos = searchID(stu, count, ss.id);
if (pos == -1)
return -1;
else
{
stu[pos] = ss;
return count;
}
}
//若输入的学号存在,删除,返回学生数,否则,删除失败,返回 -1
int Delete(Student stu[], int count, Student ss)
{
int pos, i;
pos = searchID(stu, count, ss.id);
if (pos == -1) {
HWND hndtipsD = GetHWnd();
int isok = MessageBox(hndtipsD, "查无此人!", "提示", MB_OK);
return -1;
}
else
{
for (i = pos + 1; i < count; i++)
stu[i - 1] = stu[i];
return count - 1;
}
}
void writeFile(Student stu[], int count)
{
FILE* fp;
int i;
//"w"是写文件
fp = fopen("student.dat", "w");
for (i = 0; i < count; i++)
//fprinf()是把文件内容输出到屏幕
fprintf(fp, "%s %s %s %s %s %s %s %s\n", stu[i].id, stu[i].name, stu[i].age, stu[i].sex, stu[i].date, stu[i].address, stu[i].phone, stu[i].email);
fclose(fp);
}
//只读文件
int readFile(Student stu[])
{
FILE* fp;
int i;
fp = fopen("student.dat", "r");
//如果文件不存在,返回0
if (fp == NULL)
return 0;
//foef()判断文件是否结束,结束返回1,未结束返回0,用!feof()作为循环条件
//fscanf()将文件中的数据读入数组变量id,name...中
for (i = 0;; i++)
if (fscanf(fp, "%s %s %s%s %s %s %s %s", stu[i].id, stu[i].name, &stu[i].age, stu[i].sex, stu[i].date, stu[i].address, stu[i].phone, stu[i].email) != 8) break;
fclose(fp);
return i;
}
void Showall() //打印所以成绩
{
ExMessage m3;
initgraph(640, 480);
setfillcolor(WHITE);
fillrectangle(300, 430, 380, 460);
setbkmode(TRANSPARENT);
settextcolor(BLACK);
settextstyle(20, 0, "黑体");
outtextxy(40, 100, "学号");
outtextxy(200, 100, "姓名");
outtextxy(300, 100, "年龄");
outtextxy(380, 100, "性别");
outtextxy(440, 100, "出生日期");
outtextxy(500, 100, "地址");
outtextxy(580, 100, "电话");
outtextxy(660, 100, "电子邮箱");//返回按钮
for (int q = 0; q <= count; q++) {
outtextxy(40, 140, stu[q].id);
outtextxy(200, 140, stu[q].name);
outtextxy(300, 140, stu[q].age);
outtextxy(380, 140, stu[q].sex);
outtextxy(440, 140, stu[q].date);
outtextxy(500, 140, stu[q].address);
outtextxy(580, 140, stu[q].phone);
outtextxy(660, 140, stu[q].email);
}
while (1) {
m3 = getmessage();
if (m3.x > 300 && m3.x < 430 && m3.y>380 && m3.y < 460) {
setlinecolor(RED);
rectangle(300, 430, 380, 460);
}
else {
setlinecolor(WHITE);
rectangle(300, 430, 380, 460);
}
if (m3.message == WM_LBUTTONDOWN) {
menu();//返回主菜单
}
}
}
int main(void)//主函数调用
{
menu();
return 0;
}
请问这个C语言代码的界面怎样修改
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
6条回答 默认 最新
- 爱学习的man 2023-02-03 14:25关注
我理解是R3有问题,同时使用R3,导致界面重叠了,加新的R
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报
悬赏问题
- ¥20 机器学习能否像多层线性模型一样处理嵌套数据
- ¥20 西门子S7-Graph,S7-300,梯形图
- ¥50 用易语言http 访问不了网页
- ¥50 safari浏览器fetch提交数据后数据丢失问题
- ¥15 matlab不知道怎么改,求解答!!
- ¥15 永磁直线电机的电流环pi调不出来
- ¥15 用stata实现聚类的代码
- ¥15 请问paddlehub能支持移动端开发吗?在Android studio上该如何部署?
- ¥20 docker里部署springboot项目,访问不到扬声器
- ¥15 netty整合springboot之后自动重连失效