c++学生信息管理系统(window控制台实现鼠标点击操作)

#include<time.h>
#include<iomanip>
#include <conio.h>
#include<windows.h>
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<fstream>
#include<iostream>
using namespace std;
#define PERR(bSuccess, api){
     if(!(bSuccess)) printf("%s:Error %d from %s on line %d\n", __FILE__, GetLastError(), api, __LINE__);}
struct student
{
   
    char num[15];
    char name[10];
    char phone[20];
    char adress[20];
    student *next;
};
static int i=1;
void MyCls(HANDLE) ;
 
 
/*
//读文件记录函数
student *readfile(student *p)
{
    int k=1;
    student *head=p;
    ifstream read("input.txt");    // 读文件流
    //ofstream write("c://record.dat");    // 写文件流
    // 判断是否打开成功
    if(!read)
    {
        printf("文件打开失败\n");return head;
    }
    while(!read.eof())
    {
        if(k++==1)head=p=new student;
        else{p->next=new student;p=p->next;}
        read>>p->num>>p->name>>p->phone>>p->adress;
    }
    p=NULL;
    read.close();
    return head;
}
void writerecord(student *pointer)
{
	student *p=pointer;
	ofstream write("output.txt");
	if(!write){cout<<"文件打开失败\n";
	}
	while(p!=NULL)
	{
		write<<p->num<<" "<<p->name<<" "<<p->phone<<" "<<p->adress<<endl;
		p=p->next;
	}
	write.close();
}
*/
 
//清屏函数
void clrscr(void)
{
   
HANDLE hStdOut=GetStdHandle(STD_OUTPUT_HANDLE);
MyCls(hStdOut);
return;
}
void MyCls(HANDLE hConsole)
{
   
COORD coordScreen={
   0,0};//设置清屏后光标返回的屏幕左上角坐标
BOOL bSuccess;
DWORD cCharsWritten;
CONSOLE_SCREEN_BUFFER_INFO csbi;//保存缓冲区信息
DWORD dwConSize;//当前缓冲区可容纳的字符数
bSuccess=GetConsoleScreenBufferInfo(hConsole,&csbi);//获得缓冲区信息
PERR(bSuccess,"GetConsoleScreenBufferInfo");
dwConSize=csbi.dwSize.X * csbi.dwSize.Y;//缓冲区容纳字符数目
//用空格填充缓冲区
bSuccess=FillConsoleOutputCharacter(hConsole,(TCHAR)' ',dwConSize,coordScreen,&cCharsWritten);
PERR(bSuccess,"FillConsoleOutputCharacter");
bSuccess=GetConsoleScreenBufferInfo(hConsole,&csbi);//获得缓冲区信息
PERR(bSuccess,"ConsoleScreenBufferInfo");
//填充缓冲区属性
bSuccess=FillConsoleOutputAttribute(hConsole,csbi.wAttributes,dwConSize,coordScreen,&cCharsWritten);
PERR(bSuccess,"FillConsoleOutputAttribute");
//光标返回屏幕左上角坐标
bSuccess=SetConsoleCursorPosition(hConsole,coordScreen);
PERR(bSuccess,"SetConsoleCursorPosition");
return;
}
//直接退出函数
void exit()
{
   
    clrscr();
	printf("\n\n\n\n\n\n\n\n\n\n                          谢谢您的使用 祝您生活愉快\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n");getchar();
 
}
 
 
    HANDLE hInput;  /*  获取标准输入设备句柄 */
INPUT_RECORD inRec;/*  返回数据记录 */
DWORD numRead; /*  返回已读取的记录数 */
int Y,X;/* X和Y的坐标 */
 
student * search(student *pointer)
{
   char num[15];char name[10];
student *p=pointer;
	cout<<"┏━━━━━━━━━━━━━━┓         ┏━━━━━━━━━━━━━━━━┓                                   \n"
		<<"┃  按学号查找  ┃         ┃   按姓名查找   ┃                                   \n"//3-21
		<<"┗━━━━━━━━━━━━━━┛         ┗━━━━━━━━━━━━━━━━┛                                   \n";
ReadConsoleInput(hInput, &inRec, 1, &numRead); /* 读取1个输入事件 */
        while(1)
     {
   
        COORD pos = {
   0,0};
        ReadConsoleInput(hInput, &inRec, 1, &numRead);
        pos = inRec.Event.MouseEvent.dwMousePosition;
        Y=(int)pos.Y;
        X=(int)pos.X;
        if (inRec.EventType == MOUSE_EVENT && inRec.Event.MouseEvent.dwButtonState == FROM_LEFT_1ST_BUTTON_PRESSED) /* 鼠标左键单击 */
        {
   
            if((Y==0||Y==1||Y==2)&&X>3&&X<19)
            {
   
            	cout<<"请输入学号:"<<endl;
            	cin>>num;
            	while(p!=NULL)
				{
   
            		if(strcmp(p->num,num)==0)
					{
   
            			cout<<setw(14)<<p->num<<setw(8)<<p->name<<setw(14)<<p->phone<<setw(15)<<p->adress<<endl;goto L1;
					}
					else p=p->next;
				}
				cout<<"该学生不存在"<<endl;
				goto L1;
			}
		if((Y==0||Y==1||Y==2)&&X>28&&X<38)
		{
   
			cout<<"请输入姓名:"<<endl;
            	cin>>name;
            	while(p!=NULL)
				{
   
            		if(strcmp(name,p->name)==0)
					{
   
            			cout<<setw(14)<<p->num<<setw(8)<<p->name<<setw(14)<<p->phone<<setw(15)<<p->adress<<endl;goto L1;
					}
					else p=p->next;
				}
				cout<<"该学生不存在"<<endl;goto L1;
		}
        }
    }
 
L1:HANDLE hOut=GetStdHandle(STD_OUTPUT_HANDLE);
	COORD pos={
   90,80};
    SMALL_RECT rc={
   0,0, 90, 80};
		SetConsoleTitle("小型学生通讯录管理系统");
	SetConsoleScreenBufferSize(hOut, pos);
	SetConsoleWindowInfo(hOut, true,&rc);string stra(int);
	//"1234567890123456789012345678901234567890123456789
	cout<<"┏━━━━━━━━━━━━━━┓         ┏━━━━━━━━━━━━━━┓                                   \n"
		<<"┃  返回主菜单  ┃         ┃   直接退出   ┃                                   \n"//3-21
		<<"┗━━━━━━━━━━━━━━┛         ┗━━━━━━━━━━━━━━┛                                   \n";
ReadConsoleInput(hInput, &inRec, 1, &numRead); /* 读取1个输入事件 */
        while(1)
     {
   
        COORD pos = {
   0,0};
        ReadConsoleInput(hInput, &inRec, 1, &numRead);
        pos = inRec.Event.MouseEvent.dwMousePosition;
        Y=(int)pos.Y;
        X=(int)pos.X;
        if (inRec.EventType == MOUSE_EVENT && inRec.Event.MouseEvent.dwButtonState == FROM_LEFT_1ST_BUTTON_PRESSED) /* 鼠标左键单击 */
        {
   
            if((Y==7||Y==9||Y==8)&&X>3&&X<24){
   
            	clrscr();return pointer;
			}
if((Y==7||Y==8||Y==9)&&X>28&&X<39){
   clrscr();exit();}
        }
    }
}
student *sort(student *p)
{
   
	student *pointer=p;student *upsort(student*);student *
  • 4
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 8
    评论
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小宸1145145

可怜可怜我这个人吧~

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值