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

📄 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 "学生管理系统"
extern int flag;
extern stuNode *SearNoInfo;

stuNode *pHead=NULL,*pHead1=NULL;

HWND hEditWnd;//用来保存获得控件的名柄
char str[100];
stuNode *ReInfo;




//按性别查找学生信息的窗口回调函数
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);
			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;
			//参数为Dialog中的IDD_SEARCH_NAME中双击后控件ID的名字
			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);
			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);

			}
			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);
			//将指定的消息发送到一个窗口
			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);
				
			}
			
			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();//重新读取文件中的内容
							
								Output(GetDC(GetParent(hDlgWnd)),pHead2);  //并显示
							}
						}
						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);
				}
				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 + -