⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 dlgwndproc.c

📁 这是我自己做的C学生管理系统
💻 C
字号:
#include <stdio.h>
#include <windows.h>
#include "resource.h"
#include "OutFile.h"
#include <stdlib.h>
#include <string.h>
#include "DlgWndProc.h"
#define WINNAME "学生管理系统"

int flag;
stuNode *SearNoInfo;//定义一个查找信息的指针变量
HWND hEditWnd;//用来保存获得控件的名柄
stuNode *pHead=NULL,*pHead1=NULL;
char str[100];
stuNode *ReInfo;


//欢迎界面对话框回调函数
LRESULT CALLBACK DlgProc_Welcome(HWND hDlgWnd,//对话框句柄
						 UINT message,//消息参数	 
						 WPARAM wParam,
						 LPARAM lParam)
{
	HDC hdc;
	HWND hTopWnd;
	RECT rc,Drc;
	HWND hWnd;

	switch (message)
	{
	case WM_INITDIALOG://对话框初始消息
		
		hTopWnd = GetDesktopWindow();//返回桌面窗口的句柄
		
		//该函数返回指定窗口的边框矩形的尺寸。
		//参数:接收窗口的左上角和右下角的屏幕坐标。
		GetWindowRect(hTopWnd,&rc);
		GetWindowRect(hDlgWnd,&Drc);

		//该函数改变一个子窗口,弹出式窗口式顶层窗口的尺寸
		SetWindowPos(hDlgWnd,HWND_TOP,(rc.right - Drc.right + Drc.left)/2,(rc.bottom - Drc.bottom + Drc.top )/2,Drc.right -Drc.left,Drc.bottom - Drc.top,SWP_SHOWWINDOW);
	
		hdc = GetDC(hDlgWnd);
		SetTextColor(hdc,RGB(255,0,0));
		SetBkColor(hdc,RGB(0,255,0));
		ReleaseDC(hDlgWnd,hdc);
		return 1;
	case WM_CLOSE :
		EndDialog(hDlgWnd,0);
		ShowWindow(hWnd,SW_SHOWMAXIMIZED);//设置窗口显示状态.(激活窗口并将其最大化)
		break;
	case WM_LBUTTONDOWN:
		//将一个消息放入到窗口创建的线程消息队列里
		PostMessage(hDlgWnd,WM_CLOSE,0,0);
		break;
	case WM_RBUTTONDOWN:
		PostMessage(hDlgWnd,WM_CLOSE,0,0);
		break;
	default:
		break;
	}
	return 0;
}

//按性别查找学生信息的窗口回调函数
LRESULT CALLBACK WndDlgSearSexProc(HWND hDlgWnd,
						 UINT message,
						 WPARAM wParam,
						 LPARAM lParam)
{	
	int wNotifyCode = HIWORD(wParam); 
	int wID = LOWORD(wParam);          
	HWND hwndCtl = (HWND) lParam;      
	char SearSex;//定义一个接受性别的字符变量

	switch(message)
	{
	case WM_CLOSE:
		EndDialog(hDlgWnd,0);
		break;
	case WM_COMMAND:
		switch(wID)
		{
		case IDOK:
			SearNoInfo=NULL;//给查找信息指针变量赋初值
			hEditWnd=GetDlgItem(hDlgWnd,IDC_EDIT_SEARSEX);
			GetWindowText(hEditWnd,str,100);//将窗口标题文本拷贝到一个缓存区
			if(str==""||str==NULL)//如果接受的字符为空
			{
					MessageBox(GetParent(hDlgWnd),"请输入姓名!",WINNAME,MB_OK);
					break;
			}
			if(strcmp(str,"男")==0)
				SearSex='m';
			else 
				SearSex='f';

			SearNoInfo=Read();
			SearNoInfo=SearchBySex(SearNoInfo,SearSex);
			if(SearNoInfo!=NULL)
				flag=1;
				InvalidateRect(GetParent(hDlgWnd),NULL,TRUE);
				EndDialog(hDlgWnd,0);
			break;
		case IDCANCEL:
			EndDialog(hDlgWnd,0);
			break;
		}
		break;
	}
return 0;
}

//按姓名查找学生信息的窗口回调函数
LRESULT CALLBACK WndDlgSearNameProc(HWND hDlgWnd,
						 UINT message,
						 WPARAM wParam,
						 LPARAM lParam)
{	
	int wNotifyCode = HIWORD(wParam);  
	int wID = LOWORD(wParam);          
	HWND hwndCtl = (HWND) lParam;     

	switch(message)
	{
	case WM_CLOSE:
		EndDialog(hDlgWnd,0);
		break;
	case WM_COMMAND:
		switch(wID)
		{
		case IDCANCEL:
			EndDialog(hDlgWnd,0);
			break;
		case IDOK:
			SearNoInfo=NULL;
			hEditWnd=GetDlgItem(hDlgWnd,IDC_EDIT_SEARNAME);
			GetWindowText(hEditWnd,str,100);
			if(str==""||str==NULL)
			{
					MessageBox(GetParent(hDlgWnd),"请输入姓名!",WINNAME,MB_OK);
					break;
			}
			SearNoInfo=Read();
			SearNoInfo=SearchByName(SearNoInfo,str);
			if(SearNoInfo!=NULL)
				flag=1;
				InvalidateRect(GetParent(hDlgWnd),NULL,TRUE);
				EndDialog(hDlgWnd,0);
			break;
		}
		
		break;
}
	return 0;
}

//按学号查找学生信息的窗口回调函数
LRESULT CALLBACK WndDlgSearNoProc(HWND hDlgWnd,
						 UINT message,
						 WPARAM wParam,
						 LPARAM lParam)
{	
	int wNotifyCode = HIWORD(wParam); 
	int wID = LOWORD(wParam);          
	HWND hwndCtl = (HWND) lParam;      

	switch(message)
	{
	case WM_CLOSE:
		EndDialog(hDlgWnd,0);
		break;
	case WM_COMMAND:
		switch(wID)
		{
		case IDCANCEL:
			EndDialog(hDlgWnd,0);
			break;
		case IDOK:
			{
			
			int stuNo;
			ReInfo=NULL;
			hEditWnd=GetDlgItem(hDlgWnd,IDC_EDIT_SEARNO);
			GetWindowText(hEditWnd,str,100);
			if(str==""||str==NULL)
			{
					MessageBox(GetParent(hDlgWnd),"请输入学号!",WINNAME,MB_OK);
					break;
			}
			stuNo=atoi(str);
			pHead1=Read();
			ReInfo=SearchByNo(pHead1,stuNo);
			if(ReInfo!=NULL)
				{
					flag=1;
					SearNoInfo=ReInfo;
					SearNoInfo->next=NULL;
					InvalidateRect(GetParent(hDlgWnd),NULL,TRUE);	
				}
			else
					MessageBox(GetParent(hDlgWnd),"不存在该学号的学生信息!",WINNAME,MB_OK);

			}
			EndDialog(hDlgWnd,0);
			break;
		}
		break;
	}
return 0;
}

//修改学生信息
LRESULT CALLBACK WndDlgModProc(HWND hDlgWnd,
						 UINT message,
						 WPARAM wParam,
						 LPARAM lParam)
{	
	int wNotifyCode = HIWORD(wParam); 
	int wID = LOWORD(wParam);          
	HWND hwndCtl = (HWND) lParam; 

	int stuNo,i;
	char str[100];
	pHead1=Read();
	
	switch(message)
	{
	case WM_INITDIALOG:
		{
			
			HWND hComboWnd;//指定被发送的消息
			hComboWnd=GetDlgItem(hDlgWnd,IDC_COMBO_SEX);
			//SendMessage函数将指定的消息发送到一个窗口
			i=SendMessage(hComboWnd,CB_ADDSTRING,0,(LPARAM)"男");
			i=SendMessage(hComboWnd,CB_ADDSTRING,0,(LPARAM)"女");
			
		}
		break;
	case WM_CLOSE:
		EndDialog(hDlgWnd,0);
		break;
	case WM_COMMAND:
		switch(wID)
		{
		case IDSETOUT:
				EnableWindow(GetDlgItem(hDlgWnd,IDC_EDIT5),TRUE);
				EnableWindow(GetDlgItem(hDlgWnd,IDC_EDIT6),TRUE);
				EnableWindow(GetDlgItem(hDlgWnd,IDC_EDIT7),TRUE);
				EnableWindow(GetDlgItem(hDlgWnd,IDC_EDIT8),TRUE);
				EnableWindow(GetDlgItem(hDlgWnd,IDC_EDIT9),TRUE);
				EnableWindow(GetDlgItem(hDlgWnd,IDOK),TRUE);
				EnableWindow(GetDlgItem(hDlgWnd,IDSETOUT),FALSE);
			break;
		case IDOK://当按下回车键时,分别获得各控件的值
			{
				
				stuInfo *NewStu=NULL;
				NewStu=(stuInfo *)malloc(sizeof(stuInfo));

				hEditWnd=GetDlgItem(hDlgWnd,IDC_EDIT2);
				GetWindowText(hEditWnd,str,100);
				NewStu->stuNo=atoi(str);

				hEditWnd=GetDlgItem(hDlgWnd,IDC_EDIT3);
				GetWindowText(hEditWnd,str,100);
				for(i=0;i<30;i++)	//数组接受字符	
					NewStu->stuName[i]=str[i];
				
				hEditWnd=GetDlgItem(hDlgWnd,IDC_EDIT4);
				GetWindowText(hEditWnd,str,100);
				if(strcmp(str,"男")==0)
						NewStu->stuSex='m';
				else
						NewStu->stuSex='f';

				hEditWnd=GetDlgItem(hDlgWnd,IDC_EDIT5);
				GetWindowText(hEditWnd,str,100);
				for(i=0;i<100;i++)      
					NewStu->stuAddress[i]=str[i];
				
				hEditWnd=GetDlgItem(hDlgWnd,IDC_EDIT6);
				GetWindowText(hEditWnd,str,100);
				NewStu->stuScore.gw=atof(str);

				hEditWnd=GetDlgItem(hDlgWnd,IDC_EDIT7);
				GetWindowText(hEditWnd,str,100);
				NewStu->stuScore.sj=atof(str);

				hEditWnd=GetDlgItem(hDlgWnd,IDC_EDIT8);
				GetWindowText(hEditWnd,str,100);
				NewStu->stuScore.rx=atof(str);

				hEditWnd=GetDlgItem(hDlgWnd,IDC_EDIT9);
				GetWindowText(hEditWnd,str,100);
				NewStu->stuScore.hhx=atof(str);

				ReInfo=SearchByNo(pHead1,NewStu->stuNo);
				if(ReInfo!=NULL)//如果查找成功
				{
					pHead1=stuModify(pHead1,NewStu);
					SaveTwo(pHead1);
					InvalidateRect(GetParent(hDlgWnd),NULL,TRUE);
					Output(GetDC(GetParent(hDlgWnd)),pHead1);
				}//修改完以后,重新设置各控件的状态
				EnableWindow(GetDlgItem(hDlgWnd,IDC_EDIT5),FALSE);
				EnableWindow(GetDlgItem(hDlgWnd,IDC_EDIT6),FALSE);
				EnableWindow(GetDlgItem(hDlgWnd,IDC_EDIT7),FALSE);
				EnableWindow(GetDlgItem(hDlgWnd,IDC_EDIT8),FALSE);
				EnableWindow(GetDlgItem(hDlgWnd,IDC_EDIT9),FALSE);
				EnableWindow(GetDlgItem(hDlgWnd,IDOK),FALSE);
				EnableWindow(GetDlgItem(hDlgWnd,IDSETOUT),FALSE);
				MessageBox(GetParent(hDlgWnd),"修改成功!",WINNAME,MB_OK);
				
			}
			EndDialog(hDlgWnd,0);
			
			break;
		case IDCANCEL:
			EndDialog(hDlgWnd,0);
			break;
		case IDSEARCH:
			{
			
			hEditWnd=GetDlgItem(hDlgWnd,IDC_EDIT1);//获得编辑框中输入的学号
			GetWindowText(hEditWnd,str,100);
			if(str==""||str==NULL)
			{
					MessageBox(GetParent(hDlgWnd),"请输入学号!",WINNAME,MB_OK);
					break;
			}
			stuNo=atoi(str);
			ReInfo=SearchByNo(pHead1,stuNo);
			if(ReInfo!=NULL)
				{	
					_itoa(ReInfo->stu->stuNo,str,10);
					//显示所要修改学生的信息
					//SetWindowText函数改变指定窗口标题栏文本的内容
					//学号
					SetWindowText(GetDlgItem(hDlgWnd,IDC_EDIT2),str);
					//姓名
					SetWindowText(GetDlgItem(hDlgWnd,IDC_EDIT3),ReInfo->stu->stuName);
					//年龄
					sprintf(str,"%c",ReInfo->stu->stuSex);
					if(strcmp(str,"m")==0)
							SetWindowText(GetDlgItem(hDlgWnd,IDC_EDIT4),"男");
					else
							SetWindowText(GetDlgItem(hDlgWnd,IDC_EDIT4),"女");
					//所属单位
					SetWindowText(GetDlgItem(hDlgWnd,IDC_EDIT5),ReInfo->stu->stuAddress);
					//国文
					sprintf(str,"%.1f",ReInfo->stu->stuScore.gw);
					SetWindowText(GetDlgItem(hDlgWnd,IDC_EDIT6),str);
					//史记
					sprintf(str,"%.1f",ReInfo->stu->stuScore.sj);
					SetWindowText(GetDlgItem(hDlgWnd,IDC_EDIT7),str);
					//儒学
					sprintf(str,"%.1f",ReInfo->stu->stuScore.rx);
					SetWindowText(GetDlgItem(hDlgWnd,IDC_EDIT8),str);
					//厚黑学
					sprintf(str,"%.1f",ReInfo->stu->stuScore.hhx);
					SetWindowText(GetDlgItem(hDlgWnd,IDC_EDIT9),str);
					EnableWindow(GetDlgItem(hDlgWnd,IDSETOUT),TRUE);
				
			}
			else
					MessageBox(GetParent(hDlgWnd),"不存在该学号的学生信息!",WINNAME,MB_OK);
			}
			break;
		}
		break;
	}
return 0;
}

//增加学生窗口的回调函数
LRESULT CALLBACK WndDlgAddProc(HWND hDlgWnd,
						 UINT message,
						 WPARAM wParam,
						 LPARAM lParam)
{
	int wNotifyCode = HIWORD(wParam);  
	int wID = LOWORD(wParam);         
	HWND hwndCtl = (HWND) lParam;      
	switch (message)
	{
		case WM_INITDIALOG:
			{
				int i;
				HWND hComboWnd;
				hComboWnd=GetDlgItem(hDlgWnd,IDC_COMBO_SEX);
				i=SendMessage(hComboWnd,CB_ADDSTRING,0,(LPARAM)"男");
				i=SendMessage(hComboWnd,CB_ADDSTRING,0,(LPARAM)"女");
			}
			break;
		case WM_CLOSE:
			EndDialog(hDlgWnd,0);
			break;
		case WM_COMMAND:
				switch(wID)
				{
					case IDCANCEL:
						EndDialog(hDlgWnd,0);
						break;
					case IDC_BUTTON_ADDOK:
						{
							int i,flag=8;
							stuInfo *stuAddInfo;
							stuNode *pHead1=NULL,*pHead2=NULL;
							char str[8][100];
							stuAddInfo=(stuInfo *)malloc(sizeof(stuInfo));

							//学号
							hEditWnd=GetDlgItem(hDlgWnd,IDC_EDIT2);
							GetWindowText(hEditWnd,str[0],100);
							//姓名
							hEditWnd=GetDlgItem(hDlgWnd,IDC_EDIT3);
							GetWindowText(hEditWnd,str[1],100);
							//性别
							hEditWnd=GetDlgItem(hDlgWnd,IDC_COMBO_SEX);
							GetWindowText(hEditWnd,str[2],100);
							//所属单位
							hEditWnd=GetDlgItem(hDlgWnd,IDC_EDIT5);
							GetWindowText(hEditWnd,str[3],100);
							//国文成绩
							hEditWnd=GetDlgItem(hDlgWnd,IDC_EDIT6);
							GetWindowText(hEditWnd,str[4],100);
							//史记成绩
							hEditWnd=GetDlgItem(hDlgWnd,IDC_EDIT7);
							GetWindowText(hEditWnd,str[5],100);
							//儒学成绩
							hEditWnd=GetDlgItem(hDlgWnd,IDC_EDIT8);
							GetWindowText(hEditWnd,str[6],100);
							//厚黑学成绩
							hEditWnd=GetDlgItem(hDlgWnd,IDC_EDIT9);
							GetWindowText(hEditWnd,str[7],100);
							//判断所有内容是否都已经输入
							for(i=0;i<8;i++)
								if(str[i][0]==NULL|| str[i][0]=="")
									flag=flag-1;
							if(flag>=0  && flag<8)
								MessageBox(hDlgWnd,"所有项目都必须输入!",WINNAME,MB_OK);
							else
							{
								stuAddInfo->stuNo=atoi(str[0]);//得到学号
								pHead1=Read();//读取文件内数据后判断是否已经存在该学号信息
								ReInfo=SearchByNo(pHead1,stuAddInfo->stuNo);//调用按学号查找函数
								if(ReInfo!=NULL)
								{
									MessageBox(hDlgWnd,"存在该学生学号,请重新输入学号!",WINNAME,MB_OK);
									break;
								}	
								//得到姓名
								for(i=0;i<30;i++)
									stuAddInfo->stuName[i]=str[1][i];
								//得到性别
								if(strcmp(str[2],"男")==0)
									stuAddInfo->stuSex='m';
								else
									stuAddInfo->stuSex='f';
								//得到所属单位
								for(i=0;i<100;i++)
									stuAddInfo->stuAddress[i]=str[3][i];
								//得到各科成绩
								stuAddInfo->stuScore.gw=atof(str[4]);
								stuAddInfo->stuScore.sj=atof(str[5]);
								stuAddInfo->stuScore.rx=atof(str[6]);
								stuAddInfo->stuScore.hhx=atof(str[7]);

								pHead2=addstu(pHead2,stuAddInfo);//插入学生信息到链表中
								if(MessageBox(hDlgWnd,"是否将数据的信息保存的文件中?",WINNAME,MB_OKCANCEL)==IDOK)
								{
									Save(pHead2);//保存到文件中
								}
								pHead2=Read();//重新读取文件中的内容
								InvalidateRect(GetParent(hDlgWnd),NULL,TRUE);
								Output(GetDC(GetParent(hDlgWnd)),pHead2);//并显示
							}
							EndDialog(hDlgWnd,0);
						}
						break;
				}
	}
	return  0;
}

//删除学生信息窗口的回调函数
LRESULT CALLBACK WndDlgDelProc(HWND hDlgWnd,
						 UINT message,
						 WPARAM wParam,
						 LPARAM lParam)
{
	int wNotifyCode = HIWORD(wParam); 
	int wID = LOWORD(wParam);          
	HWND hwndCtl = (HWND) lParam;     
	switch(message)
	{
		case WM_CLOSE:
			EndDialog(hDlgWnd,0);
			break;
		case WM_COMMAND:
			switch(wID)
			{
			case ID_DEL_OK:
				{
					hEditWnd=GetDlgItem(hDlgWnd,IDC_EDIT_DELNO);
					GetWindowText(hEditWnd,str,100);
					pHead1=Read();		
					ReInfo=SearchByNo(pHead1,atoi(str));
					if(ReInfo!=NULL)
					{
						if(MessageBox(hDlgWnd,"是否删除该学生信息?",WINNAME,MB_OKCANCEL)==IDOK)
						{
							pHead1=DelStu(pHead1,atoi(str));
							SaveTwo(pHead1);
						}
						pHead1=Read();
						InvalidateRect(GetParent(hDlgWnd),NULL,TRUE);
						Output(GetDC(GetParent(hDlgWnd)),pHead1);
					}
					else
						MessageBox(hDlgWnd,"不存在该学生信息!",WINNAME,MB_OK);
				}
				EndDialog(hDlgWnd,0);
				break;
			case IDCANCEL:
					EndDialog(hDlgWnd,0);
					break;
			}
			break;
	}
	return 0;
}

//关于窗口的回调函数
LRESULT CALLBACK WndDlgAboutProc(HWND hDlgWnd,
						 UINT message,
						 WPARAM wParam,
						 LPARAM lParam)
{
	int wNotifyCode = HIWORD(wParam); 
	int wID = LOWORD(wParam);         
	HWND hwndCtl = (HWND) lParam;      
	switch(message)
	{
	case WM_CLOSE :
		EndDialog(hDlgWnd,0);
		break;
	case WM_COMMAND:
		switch(wID)
		{
		case IDOK:
			EndDialog(hDlgWnd,0);
			break;
		case ID_ABOUT_OK:
			EndDialog(hDlgWnd,0);
			break;
		}
		break;
	}
	return 0;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -