vc2010学生信息管理系统

时间: 2023-06-22 11:38:38 浏览: 62
以下是 VC2010 学生信息管理系统的简单实现: 1. 创建一个 Windows 窗口应用程序,命名为 StudentInfoManagementSystem。 2. 在窗口上添加以下控件: - 静态文本控件 x5,用于显示“姓名”、“学号”、“数学”、“英语”、“计算机”等信息; - 编辑框控件 x4,用于输入姓名、学号、数学成绩、英语成绩和计算机成绩; - 按钮控件 x5,用于添加、删除、修改、查询和退出操作; - 列表框控件,用于显示学生信息。 3. 双击每个按钮控件,在相应的按钮事件处理函数中添加以下代码: - 添加操作:读取编辑框中的学生信息,将其添加到列表框中; - 删除操作:删除列表框中选中的学生信息; - 修改操作:修改列表框中选中的学生信息; - 查询操作:在列表框中查找指定学生信息并选中; - 退出操作:关闭窗口。 4. 在窗口应用程序的资源文件中添加菜单资源,用于打开和保存学生信息。 5. 在程序中添加相应菜单事件处理函数,用于打开和保存学生信息。 6. 编写相应的文件读写函数,用于将学生信息保存到文件中和从文件中读取学生信息。 7. 最后,编译并运行程序,测试其功能是否正常。 由于代码过长,这里无法全部展示。您可以参考以下代码示例: ```c #include <Windows.h> #include <CommCtrl.h> #define ID_EDIT_NAME 1001 // 姓名编辑框 #define ID_EDIT_ID 1002 // 学号编辑框 #define ID_EDIT_MATH 1003 // 数学成绩编辑框 #define ID_EDIT_ENGLISH 1004 // 英语成绩编辑框 #define ID_EDIT_COMPUTER 1005 // 计算机成绩编辑框 #define ID_BUTTON_ADD 101 // 添加按钮 #define ID_BUTTON_DELETE 102 // 删除按钮 #define ID_BUTTON_MODIFY 103 // 修改按钮 #define ID_BUTTON_QUERY 104 // 查询按钮 #define ID_BUTTON_EXIT 105 // 退出按钮 #define ID_LIST_STUDENT 200 // 学生信息列表框 #define ID_MENU_OPEN 300 // 打开菜单 #define ID_MENU_SAVE 301 // 保存菜单 struct Student { char name[20]; int id; float math_score; float english_score; float computer_score; }; struct Student students[100]; // 学生信息数组 int size = 0; // 学生数 HWND g_hWndListStudent; // 学生信息列表框句柄 LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam); int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) { // 注册窗口类 WNDCLASSEX wcex; wcex.cbSize = sizeof(WNDCLASSEX); wcex.style = CS_HREDRAW | CS_VREDRAW; wcex.lpfnWndProc = WndProc; wcex.cbClsExtra = 0; wcex.cbWndExtra = 0; wcex.hInstance = hInstance; wcex.hIcon = LoadIcon(hInstance, IDI_APPLICATION); wcex.hCursor = LoadCursor(NULL, IDC_ARROW); wcex.hbrBackground = (HBRUSH)(COLOR_WINDOW + 1); wcex.lpszMenuName = MAKEINTRESOURCE(IDR_MENU_MAIN); wcex.lpszClassName = L"StudentInfoManagementSystem"; wcex.hIconSm = LoadIcon(wcex.hInstance, IDI_APPLICATION); RegisterClassEx(&wcex); // 创建窗口 HWND hWnd = CreateWindow(L"StudentInfoManagementSystem", L"学生信息管理系统", WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, NULL, NULL, hInstance, NULL); if (!hWnd) { return FALSE; } // 显示窗口 ShowWindow(hWnd, nCmdShow); UpdateWindow(hWnd); // 消息循环 MSG msg; while (GetMessage(&msg, NULL, 0, 0)) { TranslateMessage(&msg); DispatchMessage(&msg); } return (int)msg.wParam; } LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) { switch (message) { case WM_CREATE: // 创建姓名编辑框 CreateWindow(L"STATIC", L"姓名:", WS_CHILD | WS_VISIBLE, 20, 20, 50, 20, hWnd, NULL, NULL, NULL); CreateWindow(L"EDIT", L"", WS_CHILD | WS_VISIBLE | WS_BORDER | ES_AUTOHSCROLL, 80, 20, 100, 20, hWnd, (HMENU)ID_EDIT_NAME, NULL, NULL); // 创建学号编辑框 CreateWindow(L"STATIC", L"学号:", WS_CHILD | WS_VISIBLE, 20, 50, 50, 20, hWnd, NULL, NULL, NULL); CreateWindow(L"EDIT", L"", WS_CHILD | WS_VISIBLE | WS_BORDER | ES_NUMBER | ES_AUTOHSCROLL, 80, 50, 100, 20, hWnd, (HMENU)ID_EDIT_ID, NULL, NULL); // 创建数学成绩编辑框 CreateWindow(L"STATIC", L"数学:", WS_CHILD | WS_VISIBLE, 20, 80, 50, 20, hWnd, NULL, NULL, NULL); CreateWindow(L"EDIT", L"", WS_CHILD | WS_VISIBLE | WS_BORDER | ES_NUMBER | ES_AUTOHSCROLL, 80, 80, 100, 20, hWnd, (HMENU)ID_EDIT_MATH, NULL, NULL); // 创建英语成绩编辑框 CreateWindow(L"STATIC", L"英语:", WS_CHILD | WS_VISIBLE, 20, 110, 50, 20, hWnd, NULL, NULL, NULL); CreateWindow(L"EDIT", L"", WS_CHILD | WS_VISIBLE | WS_BORDER | ES_NUMBER | ES_AUTOHSCROLL, 80, 110, 100, 20, hWnd, (HMENU)ID_EDIT_ENGLISH, NULL, NULL); // 创建计算机成绩编辑框 CreateWindow(L"STATIC", L"计算机:", WS_CHILD | WS_VISIBLE, 20, 140, 60, 20, hWnd, NULL, NULL, NULL); CreateWindow(L"EDIT", L"", WS_CHILD | WS_VISIBLE | WS_BORDER | ES_NUMBER | ES_AUTOHSCROLL, 80, 140, 100, 20, hWnd, (HMENU)ID_EDIT_COMPUTER, NULL, NULL); // 创建添加按钮 CreateWindow(L"BUTTON", L"添加", WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON, 200, 20, 60, 20, hWnd, (HMENU)ID_BUTTON_ADD, NULL, NULL); // 创建删除按钮 CreateWindow(L"BUTTON", L"删除", WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON, 200, 50, 60, 20, hWnd, (HMENU)ID_BUTTON_DELETE, NULL, NULL); // 创建修改按钮 CreateWindow(L"BUTTON", L"修改", WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON, 200, 80, 60, 20, hWnd, (HMENU)ID_BUTTON_MODIFY, NULL, NULL); // 创建查询按钮 CreateWindow(L"BUTTON", L"查询", WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON, 200, 110, 60, 20, hWnd, (HMENU)ID_BUTTON_QUERY, NULL, NULL); // 创建退出按钮 CreateWindow(L"BUTTON", L"退出", WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON, 200, 140, 60, 20, hWnd, (HMENU)ID_BUTTON_EXIT, NULL, NULL); // 创建学生信息列表框 g_hWndListStudent = CreateWindowEx(WS_EX_CLIENTEDGE, WC_LISTBOX, L"", WS_CHILD | WS_VISIBLE | WS_VSCROLL | LBS_NOTIFY, 20, 180, 240, 200, hWnd, (HMENU)ID_LIST_STUDENT, NULL, NULL); break; case WM_COMMAND: switch (LOWORD(wParam)) { case ID_BUTTON_ADD: // 添加按钮 { // 读取学生信息 struct Student student; GetWindowText(GetDlgItem(hWnd, ID_EDIT_NAME), student.name, 20); GetWindowText(GetDlgItem(hWnd, ID_EDIT_ID), (LPWSTR)&student.id, 10); GetWindowText(GetDlgItem(hWnd, ID_EDIT_MATH), (LPWSTR)&student.math_score, 10); GetWindowText(GetDlgItem(hWnd, ID_EDIT_ENGLISH), (LPWSTR)&student.english_score, 10); GetWindowText(GetDlgItem(hWnd, ID_EDIT_COMPUTER), (LPWSTR)&student.computer_score, 10); // 添加到学生信息列表框 char str[100]; sprintf_s(str, "%s\t%d\t%.2f\t%.2f\t%.2f", student.name, student.id, student.math_score, student.english_score, student.computer_score); SendMessage(g_hWndListStudent, LB_ADDSTRING, 0, (LPARAM)str); // 添加到学生信息数组 students[size] = student; size++; } break; case ID_BUTTON_DELETE: // 删除按钮 { // 删除选中的学生信息 int index = SendMessage(g_hWndListStudent, LB_GETCURSEL, 0, 0); if (index != LB_ERR) { SendMessage(g_hWndListStudent, LB_DELETESTRING, index, 0); for (int i = index; i < size - 1; i++) { students[i] = students[i + 1]; } size--; } } break; case ID_BUTTON_MODIFY: // 修改按钮 { // 修改选中的学生信息 int index = SendMessage(g_hWndListStudent, LB_GETCURSEL, 0, 0); if (index != LB_ERR) { // 读取学生信息 struct Student student; GetWindowText(GetDlgItem(hWnd, ID_EDIT_NAME), student.name, 20); GetWindowText(GetDlgItem(hWnd, ID_EDIT_ID), (LPWSTR)&student.id, 10); GetWindowText(GetDlgItem(hWnd, ID_EDIT_MATH), (LPWSTR)&student.math_score, 10); GetWindowText(GetDlgItem(hWnd, ID_EDIT_ENGLISH), (LPWSTR)&student.english_score, 10); GetWindowText(GetDlgItem(hWnd, ID_EDIT_COMPUTER), (LPWSTR)&student.computer_score, 10); // 修改列表框中的学生信息 char str[100]; sprintf_s(str, "%s\t%d\t%.2f\t%.2f\t%.2f", student.name, student.id, student.math_score, student.english_score, student.computer_score); SendMessage(g_hWndListStudent, LB_DELETESTRING, index, 0); SendMessage(g_hWndListStudent, LB_INSERTSTRING, index, (LPARAM)str); // 修改学生信息数组中的学生信息 students[index] = student; } } break; case ID_BUTTON_QUERY: // 查询按钮 { // 查找指定学生信息并选中 int id; GetWindowText(GetDlgItem(hWnd, ID_EDIT_ID), (LPWSTR)&id, 10); for (int i = 0; i < size; i++) { if (students[i].id == id) { SendMessage(g_hWndListStudent, LB_SETCURSEL, i, 0); break; } } } break; case ID_BUTTON_EXIT: // 退出按钮 PostQuitMessage(0); break; case ID_MENU_OPEN: // 打开菜单 { // 打开文件选择对话框 OPENFILENAME ofn; ZeroMemory(&ofn, sizeof(ofn)); ofn.lStructSize = sizeof(ofn); ofn.hwndOwner = hWnd; ofn.lpstrFilter = L"文本文件 (*.txt)\0*.txt\0所有文件 (*.*)\0*.*\0"; ofn.lpstrFile = new WCHAR[MAX_PATH]; ofn.lpstrFile[0] = '\0'; ofn.nMaxFile = MAX_PATH; ofn.Flags = OFN_EXPLORER | OFN_FILEMUSTEXIST | OFN_HIDEREADONLY; if (GetOpenFileName(&ofn)) { // 从文件中读

相关推荐

最新推荐

recommend-type

C语言课程设计报告学生管理信息系统设计

设计该程序是为了实现更简洁的学生信息管理,满足管理学生学号、姓名和成绩等信息的要求。 系统具体功能如下: (1)输入记录 ——输入的记录包括:学生学生证号、姓名、成绩; (2)显示记录 ——显示所有以上输入...
recommend-type

基于VC+SQL开发的学生通讯录管理系统

【基于VC+SQL开发的学生通讯录管理系统】是一个利用MicroSoft Visual C++6.0作为前端开发工具,结合SQL Server 2000数据库管理系统构建的应用系统,主要用于管理学生的基本信息和通讯录。这个系统旨在方便学生之间的...
recommend-type

学生成绩管理VC总分平均分

学生成绩信息包括:学期,学号,班别,姓名,四门课程成绩(语文、数学、英语和计算机)等。 主要功能: (1) 能按学期、按班级完成对学生成绩的录入、修改 (2) 能按班级统计学生的成绩,求学生的总分及平均分 (3...
recommend-type

关于用Visual C++与数据库实现的动态的学生信息管理系统的课程设计。

这个是我们在学习C++时的一个课程设计,上面是我自己编写的论文,也是最后提交给老师的论文,该课程设计主要的任务就是用VC与数据库一起来实现一个学生信息的小型的管理系统。该论文主要介绍了我做该系统的步骤以及...
recommend-type

课程设计—宿舍管理信息系统设计文档

功能分别为增加删除学生,住宿分配,退房管理学生情况查询,学生缴费,水电使用,房源使用,卫生成绩录入,卫生查询与统计,添加用户,修改密码,退出系统,这些功能基本上覆盖了学生公寓管理的主要部分。...
recommend-type

VMP技术解析:Handle块优化与壳模板初始化

"这篇学习笔记主要探讨了VMP(Virtual Machine Protect,虚拟机保护)技术在Handle块优化和壳模板初始化方面的应用。作者参考了看雪论坛上的多个资源,包括关于VMP还原、汇编指令的OpCode快速入门以及X86指令编码内幕的相关文章,深入理解VMP的工作原理和技巧。" 在VMP技术中,Handle块是虚拟机执行的关键部分,它包含了用于执行被保护程序的指令序列。在本篇笔记中,作者详细介绍了Handle块的优化过程,包括如何删除不使用的代码段以及如何通过指令变形和等价替换来提高壳模板的安全性。例如,常见的指令优化可能将`jmp`指令替换为`push+retn`或者`lea+jmp`,或者将`lodsbyteptrds:[esi]`优化为`moval,[esi]+addesi,1`等,这些变换旨在混淆原始代码,增加反逆向工程的难度。 在壳模板初始化阶段,作者提到了1.10和1.21两个版本的区别,其中1.21版本增加了`Encodingofap-code`保护,增强了加密效果。在未加密时,代码可能呈现出特定的模式,而加密后,这些模式会被混淆,使分析更加困难。 笔记中还提到,VMP会使用一个名为`ESIResults`的数组来标记Handle块中的指令是否被使用,值为0表示未使用,1表示使用。这为删除不必要的代码提供了依据。此外,通过循环遍历特定的Handle块,并依据某种规律(如`v227&0xFFFFFF00==0xFACE0000`)进行匹配,可以找到需要处理的指令,如`push0xFACE0002`和`movedi,0xFACE0003`,然后将其替换为安全的重定位值或虚拟机上下文。 在结构体使用方面,笔记指出壳模板和用户代码都会通过`Vmp_AllDisassembly`函数进行解析,而且0x8和0x10字段通常都指向相同的结构体。作者还提到了根据`pNtHeader_OptionalHeader.Magic`筛选`ESI_Matching_Array`数组的步骤,这可能是为了进一步确定虚拟机上下文的设置。 这篇笔记深入解析了VMP技术在代码保护中的应用,涉及汇编指令的优化、Handle块的处理以及壳模板的初始化,对于理解反逆向工程技术以及软件保护策略有着重要的参考价值。
recommend-type

管理建模和仿真的文件

管理Boualem Benatallah引用此版本:布阿利姆·贝纳塔拉。管理建模和仿真。约瑟夫-傅立叶大学-格勒诺布尔第一大学,1996年。法语。NNT:电话:00345357HAL ID:电话:00345357https://theses.hal.science/tel-003453572008年12月9日提交HAL是一个多学科的开放存取档案馆,用于存放和传播科学研究论文,无论它们是否被公开。论文可以来自法国或国外的教学和研究机构,也可以来自公共或私人研究中心。L’archive ouverte pluridisciplinaire
recommend-type

【进阶】音频处理基础:使用Librosa

![【进阶】音频处理基础:使用Librosa](https://picx.zhimg.com/80/v2-a39e5c9bff1d920097341591ca8a2dfe_1440w.webp?source=1def8aca) # 2.1 Librosa库的安装和导入 Librosa库是一个用于音频处理的Python库。要安装Librosa库,请在命令行中输入以下命令: ``` pip install librosa ``` 安装完成后,可以通过以下方式导入Librosa库: ```python import librosa ``` 导入Librosa库后,就可以使用其提供的各种函数
recommend-type

python中字典转换成json

在Python中,你可以使用`json`模块将字典转换为JSON格式的字符串。下面是一个简单的示例: ```python import json # 假设我们有一个字典 dict_data = { "name": "John", "age": 30, "city": "New York" } # 使用json.dumps()函数将字典转换为JSON json_string = json.dumps(dict_data) print(json_string) # 输出:{"name": "John", "age": 30, "city": "New York"}
recommend-type

C++ Primer 第四版更新:现代编程风格与标准库

"Cpp Primer第四版中文版(电子版)1" 本书《Cpp Primer》第四版是一本深入浅出介绍C++编程语言的教程,旨在帮助初学者和有经验的程序员掌握现代C++编程技巧。作者在这一版中进行了重大更新,以适应C++语言的发展趋势,特别是强调使用标准库来提高编程效率。书中不再过于关注底层编程技术,而是将重点放在了标准库的运用上。 第四版的主要改动包括: 1. 内容重组:为了反映现代C++编程的最佳实践,书中对语言主题的顺序进行了调整,使得学习路径更加顺畅。 2. 添加辅助学习工具:每章增设了“小结”和“术语”部分,帮助读者回顾和巩固关键概念。此外,重要术语以黑体突出,已熟悉的术语以楷体呈现,以便读者识别。 3. 特殊标注:用特定版式标注关键信息,提醒读者注意语言特性,避免常见错误,强调良好编程习惯,同时提供通用的使用技巧。 4. 前后交叉引用:增加引用以帮助读者理解概念之间的联系。 5. 额外讨论和解释:针对复杂概念和初学者常遇到的问题,进行深入解析。 6. 大量示例:提供丰富的代码示例,所有源代码都可以在线获取,便于读者实践和学习。 本书保留了前几版的核心特色,即以实例教学,通过解释和展示语言特性来帮助读者掌握C++。作者的目标是创作一本清晰、全面、准确的教程,让读者在编写程序的过程中学习C++,同时也展示了如何有效地利用这门语言。 《Cpp Primer》第四版不仅适合C++初学者,也适合想要更新C++知识的老手,它全面覆盖了C++语言的各个方面,包括基础语法、类、模板、STL(Standard Template Library)等,同时引入了现代C++的特性,如智能指针、RAII(Resource Acquisition Is Initialization)、lambda表达式等,使读者能够跟上C++语言的发展步伐,提升编程技能。