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

📄 stuinfosys(3).asm

📁 汇编上机试验。简单的学生成绩管理系统
💻 ASM
字号:
.386
.model flat,stdcall
option casemap:none
	
	WinMain proto :DWORD,:DWORD,:DWORD,:DWORD
	
	include		stuinfosys.inc
	
.data
	ClassName	db 			"Student Grade Information System",0
	AppName	db 			"Student Grade Information System",0
	MenuName	db 			"MyMenu",0
	File_Open	db 			"Open",0
	File_Save	db 			"Save",0
	EditClass	db 			"edit", 0
	ofn		OPENFILENAME	<>
	FilterString	db			"All Files", 0, "*.*", 0
	db			"Text Files", 0, "*.txt", 0, 0
	buffer		db			MAXSIZE	dup(0)
	Edit_Insert	db			"Insert Item", 0
	
.data?
	hWinMain		dd		?
	hInsertDlg		dd		?
	hInstance		HINSTANCE	?
	CommandLine		LPSTR		?
	hwndEdit		HWND		?                               ; Handle to the edit control 
	hFile			HANDLE	?                                   ; File handle
	hMemory		HANDLE	?                            ;handle to the allocated memory block 
	pMemory		DWORD	?                            ;pointer to the allocated memory block
	SizeReadWrite		DWORD	?	; number of bytes actually read or write
	
	temp		db	100	dup(?)
	
	strNo		db	8	dup(?)
	strName	db	6	dup(?)
	strASM		db	3	dup(?)
	strCA		db	3	dup(?)
	strOS		db	3	dup(?)
	strTotal		db	3	dup(?)
	strRank	db	2	dup(?)
	GeteaxValue	DWORD	?
	
.code
start:
	invoke	GetModuleHandle, NULL
	mov	hInstance,eax
	invoke	GetCommandLine
	mov	CommandLine,eax
	invoke	WinMain, hInstance, NULL, CommandLine, SW_SHOWDEFAULT
	invoke	ExitProcess,eax
	
_ProcInsertDlg		proc	hWnd:HWND, uMsg:UINT, wParam:WPARAM, lParam:LPARAM
	mov	eax, uMsg
	
	.if	eax == WM_INITDIALOG
		invoke	SetWindowText, hWnd, addr Edit_Insert
	.elseif	eax == WM_CLOSE
		invoke EndDialog, hWnd, NULL
	.elseif	eax == WM_COMMAND
		mov	eax, wParam
		.if	eax == IDOK
			invoke	GetDlgItemText, hWnd, IDC_TEXTNO, addr pMemory, 8
			invoke	GetDlgItemText, hWnd, IDC_TEXTNAME, addr strName, 6
			invoke	GetDlgItemText, hWnd, IDC_TEXTASM, addr strASM, 3
			invoke	GetDlgItemText, hWnd, IDC_TEXTCA, addr strCA, 3
			invoke	GetDlgItemText, hWnd, IDC_TEXTOS, addr strOS, 3
;			invoke	SendMessage,hwndEdit,WM_GETTEXT,MEMSIZE-1,pMemory
;			invoke	WriteFile, hFile, pMemory, GeteaxValue, addr SizeReadWrite, NULL
			invoke	EndDialog, hWnd, NULL
;;;;;;;			invoke	SetDlgItemText, hWnd, IDC_STNO, addr strNo
		.elseif	eax == IDCANCEL
			invoke	EndDialog, hWnd, NULL
		.endif
	.else
		mov 	eax, FALSE
		ret
	.endif
	mov	eax, TRUE
	ret
	
_ProcInsertDlg endp
	
WinMain proc hInst:HINSTANCE, hPreInst:HINSTANCE, CmdLine:LPSTR, CmeShow:DWORD 
LOCAL	wc:WNDCLASSEX 
LOCAL	msg:MSG 
LOCAL	hwnd:HWND 
	mov	wc.cbSize,SIZEOF WNDCLASSEX 
	mov	wc.style, CS_HREDRAW or CS_VREDRAW 
	mov	wc.lpfnWndProc, OFFSET WndProc 
	mov	wc.cbClsExtra,NULL 
	mov	wc.cbWndExtra,NULL 
	push	hInst 
	pop	wc.hInstance 
	mov	wc.hbrBackground,COLOR_WINDOW+1 
	mov	wc.lpszMenuName,OFFSET MenuName        ; Put our menu name here 
	mov	wc.lpszClassName,OFFSET ClassName 
	invoke	LoadIcon, NULL, IDI_APPLICATION 
	mov	wc.hIcon, eax
	mov	wc.hIconSm, eax
	invoke	LoadCursor, NULL, IDC_ARROW 
	mov	wc.hCursor, eax
	invoke	RegisterClassEx, addr wc
	invoke	CreateWindowEx, \
	WS_EX_CLIENTEDGE, \
	ADDR ClassName, \
	ADDR AppName,\ 
	WS_OVERLAPPEDWINDOW, \
	CW_USEDEFAULT, \
	CW_USEDEFAULT, \
	700, \
	500, \
	NULL, \
	NULL, \
	hInst, \
	NULL
	mov	hwnd,eax
	invoke	ShowWindow, hwnd, SW_SHOWNORMAL
	invoke	UpdateWindow, hwnd
	.while	TRUE
		invoke	GetMessage, addr msg, NULL, 0, 0
		.break	.if	eax == 0
		invoke	IsDialogMessage, hInsertDlg, addr msg
		invoke	TranslateMessage, addr msg
		invoke DispatchMessage, addr msg
	.endw
	mov	eax, msg.wParam 
	ret
WinMain endp
	
WndProc proc uses ebx hWnd:HWND, uMsg:UINT, wParam:WPARAM, lParam:LPARAM
	.if uMsg==WM_CREATE
		invoke	CreateWindowEx, NULL, \
		addr EditClass, \
		NULL, \
		WS_VISIBLE or WS_CHILD or ES_LEFT or ES_MULTILINE or ES_AUTOHSCROLL or ES_AUTOVSCROLL, \
		0, \
		0, \
		0, \
		0, \
		hWnd, EditID, \
		hInstance, \
		NULL
		mov	hwndEdit, eax
		invoke	SetFocus, hwndEdit
		
		mov	ofn.lStructSize, SIZEOF ofn
		push	hWnd
		pop	ofn.hwndOwner
		push	hInstance
		pop	ofn.hInstance
		mov	ofn.lpstrFilter, OFFSET FilterString
		mov	ofn.lpstrFile, OFFSET buffer
		mov	ofn.nMaxFile, MAXSIZE
	.elseif uMsg==WM_SIZE
		mov	eax, lParam
		mov	edx, eax
		shr	edx, 16
		and	eax, 0ffffh
		invoke	MoveWindow, hwndEdit, 0, 0, eax, edx, TRUE
	.elseif uMsg==WM_DESTROY
		invoke	PostQuitMessage, NULL
	.elseif uMsg==WM_COMMAND
		mov	eax, wParam
		.if lParam==0
			.if ax==IDM_FILE_OPEN
				mov	ofn.Flags, \
				OFN_FILEMUSTEXIST or OFN_PATHMUSTEXIST or \
				OFN_LONGNAMES or OFN_EXPLORER or OFN_HIDEREADONLY
				invoke	GetOpenFileName, addr ofn
				.if eax==TRUE
					invoke	CreateFile, addr buffer, \
					GENERIC_READ or GENERIC_WRITE, \
					FILE_SHARE_READ or FILE_SHARE_WRITE, \
					NULL, \
					OPEN_EXISTING, \
					FILE_ATTRIBUTE_ARCHIVE, \
					NULL
					mov	hFile, eax
					invoke	GlobalAlloc, GMEM_MOVEABLE or GMEM_ZEROINIT, MEMSIZE
					mov	hMemory, eax
					invoke	GlobalLock, hMemory
					mov	pMemory, eax
					invoke	ReadFile, hFile, pMemory, MEMSIZE-1, addr SizeReadWrite, NULL
					invoke	SendMessage, hwndEdit, WM_SETTEXT, NULL, pMemory
					invoke	CloseWindow, hFile
					invoke	GlobalUnlock, pMemory
					invoke	GlobalFree, hMemory
				.endif
				invoke	SetFocus, hwndEdit
			.elseif ax==IDM_FILE_SAVE
				mov	ofn.Flags, \
				OFN_LONGNAMES or OFN_EXPLORER or OFN_HIDEREADONLY
				invoke	GetSaveFileName, ADDR ofn
				.if eax==TRUE
					invoke CreateFile, ADDR buffer, \
					GENERIC_READ or GENERIC_WRITE , \
					FILE_SHARE_READ or FILE_SHARE_WRITE, \
					NULL, \
					CREATE_NEW, \
					FILE_ATTRIBUTE_ARCHIVE, \
					NULL
					mov 	hFile, eax
					invoke	GlobalAlloc, GMEM_MOVEABLE or GMEM_ZEROINIT, MEMSIZE
					mov 	hMemory, eax
					invoke	GlobalLock, hMemory
					mov	pMemory, eax
					invoke	SendMessage, hwndEdit, WM_GETTEXT, MEMSIZE-1, pMemory
					invoke	WriteFile, hFile, pMemory, eax, ADDR SizeReadWrite, NULL
					mov	GeteaxValue, eax
					invoke	CloseHandle, hFile
					invoke GlobalUnlock,pMemory
					invoke GlobalFree,hMemory
				.endif 
				invoke SetFocus,hwndEdit
			.elseif ax==IDM_EDIT_INSERT
				invoke	DialogBoxParam, hInstance, IDD_INSERT, hWnd, _ProcInsertDlg, NULL
			.else
				invoke DestroyWindow, hWnd
			.endif
		.endif
	.else
		invoke DefWindowProc, hWnd, uMsg, wParam, lParam
		ret
	.endif
	xor	eax, eax 
	ret
WndProc endp
end start

⌨️ 快捷键说明

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