利用vs写一个教师信息管理系统的c++可视化程序,可以能够在界面显示教室信息的记录,通过菜单能够对数据库进行 增、删、改的操作。教室信息,包括教室容纳人数、教室空闲时间、教室设备等;
时间: 2023-12-06 18:45:14 浏览: 222
好的,教师信息管理系统的C++可视化程序大致上需要以下步骤:
1. 界面设计:使用Visual Studio的窗体设计器,设计教师信息管理系统的主界面,包括菜单栏、工具栏、状态栏、数据表格等控件。
2. 数据库设计:在Visual Studio中创建一个数据库,包括教室信息表,其中包含教室容纳人数、教室空闲时间、教室设备等字段。
3. 数据库连接:在程序中添加数据库连接代码,使用ODBC或者ADO.NET连接数据库。
4. 数据显示:将数据库中的教室信息显示在数据表格中,方便用户查看。
5. 数据操作:通过菜单栏提供增、删、改的操作,用户可以方便地对教室信息进行维护。
下面是一个简单的示例程序,仅供参考:
```cpp
#include <Windows.h>
#include <sqlext.h>
#include <iostream>
#include <string>
// 定义数据库连接字符串
#define DB_CONN_STR "DRIVER={SQL Server};SERVER=localhost;DATABASE=TeacherInfo;UID=sa;PWD=123456"
// 定义窗口句柄和控件ID
HWND hwnd;
const int ID_MENU_FILE = 1;
const int ID_MENU_ADD = 2;
const int ID_MENU_DELETE = 3;
const int ID_MENU_EDIT = 4;
const int ID_TABLE = 5;
// 定义ODBC连接参数
SQLHENV env;
SQLHDBC dbc;
SQLHSTMT stmt;
SQLRETURN retcode;
// 连接数据库
void connect()
{
// 分配环境句柄
SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE, &env);
SQLSetEnvAttr(env, SQL_ATTR_ODBC_VERSION, (SQLPOINTER)SQL_OV_ODBC3, SQL_IS_INTEGER);
// 分配连接句柄
SQLAllocHandle(SQL_HANDLE_DBC, env, &dbc);
// 连接数据库
SQLCHAR* connStr = (SQLCHAR*)DB_CONN_STR;
retcode = SQLDriverConnect(dbc, hwnd, connStr, SQL_NTS, NULL, 0, NULL, SQL_DRIVER_COMPLETE);
// 分配语句句柄
SQLAllocHandle(SQL_HANDLE_STMT, dbc, &stmt);
}
// 断开数据库连接
void disconnect()
{
SQLFreeHandle(SQL_HANDLE_STMT, stmt);
SQLDisconnect(dbc);
SQLFreeHandle(SQL_HANDLE_DBC, dbc);
SQLFreeHandle(SQL_HANDLE_ENV, env);
}
// 显示教室信息
void showData()
{
// 清空数据表格
HWND hTable = GetDlgItem(hwnd, ID_TABLE);
SendMessage(hTable, LVM_DELETEALLITEMS, 0, 0);
// 查询教室信息
retcode = SQLExecDirect(stmt, (SQLCHAR*)"SELECT * FROM Classroom", SQL_NTS);
if (retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO)
{
// 获取结果集列数
SQLSMALLINT numCols;
SQLNumResultCols(stmt, &numCols);
// 获取结果集列信息
SQLCHAR colName[256];
SQLSMALLINT colNameLen;
SQLSMALLINT colType;
SQLULEN colSize;
LVCOLUMN lvCol = { 0 };
lvCol.mask = LVCF_TEXT | LVCF_WIDTH;
lvCol.cx = 100;
for (int i = 1; i <= numCols; i++)
{
SQLDescribeCol(stmt, i, colName, sizeof(colName), &colNameLen, &colType, &colSize, NULL, NULL);
lvCol.pszText = (LPSTR)colName;
SendMessage(hTable, LVM_INSERTCOLUMN, i - 1, (LPARAM)&lvCol);
}
// 获取结果集行信息
SQLCHAR colValue[256];
SQLLEN cbValue;
int row = 0;
LVITEM lvItem = { 0 };
lvItem.mask = LVIF_TEXT;
while (SQLFetch(stmt) == SQL_SUCCESS)
{
lvItem.iItem = row;
lvItem.iSubItem = 0;
for (int i = 1; i <= numCols; i++)
{
SQLGetData(stmt, i, SQL_C_CHAR, colValue, sizeof(colValue), &cbValue);
lvItem.pszText = (LPSTR)colValue;
SendMessage(hTable, LVM_SETITEM, 0, (LPARAM)&lvItem);
lvItem.iSubItem++;
}
row++;
}
}
}
// 增加教室信息
void addData()
{
// 弹出对话框,输入教室信息
std::string capacity, freeTime, equipment;
std::cout << "请输入教室信息:" << std::endl;
std::cout << "容纳人数:";
std::getline(std::cin, capacity);
std::cout << "空闲时间:";
std::getline(std::cin, freeTime);
std::cout << "设备:";
std::getline(std::cin, equipment);
// 插入教室信息
std::string sql = "INSERT INTO Classroom (Capacity, FreeTime, Equipment) VALUES ('" + capacity + "', '" + freeTime + "', '" + equipment + "')";
retcode = SQLExecDirect(stmt, (SQLCHAR*)sql.c_str(), SQL_NTS);
if (retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO)
{
std::cout << "教室信息添加成功!" << std::endl;
showData();
}
else
{
std::cout << "教室信息添加失败!" << std::endl;
}
}
// 删除教室信息
void deleteData()
{
// 弹出对话框,选择要删除的教室信息
HWND hTable = GetDlgItem(hwnd, ID_TABLE);
int selectedRow = SendMessage(hTable, LVM_GETNEXTITEM, -1, LVNI_SELECTED);
if (selectedRow >= 0)
{
LVITEM lvItem = { 0 };
lvItem.mask = LVIF_TEXT;
lvItem.iItem = selectedRow;
lvItem.iSubItem = 0;
SendMessage(hTable, LVM_GETITEM, 0, (LPARAM)&lvItem);
std::string id = lvItem.pszText;
// 删除教室信息
std::string sql = "DELETE FROM Classroom WHERE ID=" + id;
retcode = SQLExecDirect(stmt, (SQLCHAR*)sql.c_str(), SQL_NTS);
if (retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO)
{
std::cout << "教室信息删除成功!" << std::endl;
showData();
}
else
{
std::cout << "教室信息删除失败!" << std::endl;
}
}
else
{
std::cout << "请先选择要删除的教室信息!" << std::endl;
}
}
// 修改教室信息
void editData()
{
// 弹出对话框,选择要修改的教室信息
HWND hTable = GetDlgItem(hwnd, ID_TABLE);
int selectedRow = SendMessage(hTable, LVM_GETNEXTITEM, -1, LVNI_SELECTED);
if (selectedRow >= 0)
{
LVITEM lvItem = { 0 };
lvItem.mask = LVIF_TEXT;
lvItem.iItem = selectedRow;
lvItem.iSubItem = 0;
SendMessage(hTable, LVM_GETITEM, 0, (LPARAM)&lvItem);
std::string id = lvItem.pszText;
// 弹出对话框,输入新的教室信息
std::string capacity, freeTime, equipment;
std::cout << "请输入新的教室信息:" << std::endl;
std::cout << "容纳人数:";
std::getline(std::cin, capacity);
std::cout << "空闲时间:";
std::getline(std::cin, freeTime);
std::cout << "设备:";
std::getline(std::cin, equipment);
// 修改教室信息
std::string sql = "UPDATE Classroom SET Capacity='" + capacity + "', FreeTime='" + freeTime + "', Equipment='" + equipment + "' WHERE ID=" + id;
retcode = SQLExecDirect(stmt, (SQLCHAR*)sql.c_str(), SQL_NTS);
if (retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO)
{
std::cout << "教室信息修改成功!" << std::endl;
showData();
}
else
{
std::cout << "教室信息修改失败!" << std::endl;
}
}
else
{
std::cout << "请先选择要修改的教室信息!" << std::endl;
}
}
// 处理菜单命令
void handleCommand(int command)
{
switch (command)
{
case ID_MENU_ADD:
addData();
break;
case ID_MENU_DELETE:
deleteData();
break;
case ID_MENU_EDIT:
editData();
break;
default:
break;
}
}
// 窗口过程
LRESULT CALLBACK wndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
switch (message)
{
case WM_CREATE:
// 创建数据表格
{
HWND hTable = CreateWindow(WC_LISTVIEW, "", WS_VISIBLE | WS_CHILD | LVS_REPORT, 10, 50, 500, 400, hwnd, (HMENU)ID_TABLE, NULL, NULL);
LVCOLUMN lvCol = { 0 };
lvCol.mask = LVCF_TEXT | LVCF_WIDTH;
lvCol.cx = 100;
lvCol.pszText = "ID";
SendMessage(hTable, LVM_INSERTCOLUMN, 0, (LPARAM)&lvCol);
lvCol.pszText = "容纳人数";
SendMessage(hTable, LVM_INSERTCOLUMN, 1, (LPARAM)&lvCol);
lvCol.pszText = "空闲时间";
SendMessage(hTable, LVM_INSERTCOLUMN, 2, (LPARAM)&lvCol);
lvCol.pszText = "设备";
SendMessage(hTable, LVM_INSERTCOLUMN, 3, (LPARAM)&lvCol);
}
// 创建菜单栏
{
HMENU hMenu = CreateMenu();
HMENU hSubMenu = CreatePopupMenu();
AppendMenu(hSubMenu, MF_STRING, ID_MENU_ADD, "增加");
AppendMenu(hSubMenu, MF_STRING, ID_MENU_DELETE, "删除");
AppendMenu(hSubMenu, MF_STRING, ID_MENU_EDIT, "修改");
AppendMenu(hMenu, MF_POPUP, (UINT_PTR)hSubMenu, "操作");
SetMenu(hwnd, hMenu);
}
// 连接数据库并显示教室信息
connect();
showData();
break;
case WM_COMMAND:
handleCommand(LOWORD(wParam));
break;
case WM_CLOSE:
disconnect();
DestroyWindow(hwnd);
break;
default:
return DefWindowProc(hwnd, message, wParam, lParam);
}
return 0;
}
// 主函数
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
// 注册窗口类
WNDCLASS wc = { 0 };
wc.style = CS_HREDRAW | CS_VREDRAW;
wc.lpfnWndProc = wndProc;
wc.hInstance = hInstance;
wc.hCursor = LoadCursor(NULL, IDC_ARROW);
wc.hbrBackground = (HBRUSH)(COLOR_WINDOW + 1);
wc.lpszClassName = "TeacherInfo";
RegisterClass(&wc);
// 创建窗口
hwnd = CreateWindow("TeacherInfo", "教师信息管理系统", WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, 600, 500, NULL, NULL, hInstance, NULL);
ShowWindow(hwnd, nCmdShow);
UpdateWindow(hwnd);
// 消息循环
MSG msg = { 0 };
while (GetMessage(&msg, NULL, 0, 0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return (int)msg.wParam;
}
```
这个程序使用ODBC连接SQL Server数据库,实现了教室信息的增、删、改和查询操作。在菜单栏中选择“增加”、“删除”、“修改”等操作,可以弹出对话框输入或选择教室信息。在数据表格中显示教室信息,并支持排序和筛选功能。
阅读全文