在设计视图上用left函数查找姓王的同学
时间: 2023-12-09 13:06:14 浏览: 68
在 Access 的设计视图中,你可以使用查询来查找姓王的同学。以下是一些步骤:
1. 打开 Access 数据库,并在左侧导航窗格中选择“查询”。
2. 单击“新建查询”按钮,选择“设计视图”。
3. 在“表格”窗格中选择包含“students”表格的数据库,并将其拖动到查询设计窗格中。
4. 在“字段”行中选择“last_name”字段,并在“条件”行中输入以下表达式:
```
LEFT([last_name],1)="王"
```
这个表达式使用 LEFT 函数来选择姓氏以“王”开头的学生。请注意,这假设姓氏都写在“last_name”列中。
5. 单击“运行”按钮,查询将返回所有姓氏以“王”开头的学生。
以上是在 Access 的设计视图中使用 LEFT 函数来查找姓王的同学的一些步骤。
相关问题
用红黑树制作代码,这个函数的输入包含两个参数: 进程——请求内存的进程,你不需要为进程做任何事情,只需要传递它给self。allocator。Allocate_memory '函数。 Request_size——一个整数,表示这个进程请求多少内存块。 第一行返回'memory_view',一个内存块元组。 如果一个内存块是空闲的,列表中相应的项将是None,否则该项将是进程对象。内存的总大小为256块。 您需要根据'memory_view'和'request_size'来决定分配给进程的内存。 当你做决定时,传递内存的起始地址(即。'block_start')以及'request_size'和'process'到函数'self.allocator。Allocate_memory '(见下文)。 内存块将根据进程对象中的定义自动回收:self.allocator。Allocate_memory (block_start, request_size, process)
下面是使用红黑树实现的代码:
```
import bisect
class MemoryManager:
def __init__(self, allocator):
self.allocator = allocator
self.memory_blocks = [(None, i) for i in range(256)]
def allocate(self, process, request_size):
memory_view = tuple(block[0] for block in self.memory_blocks)
free_blocks = [i for i, block in enumerate(memory_view) if block is None]
if len(free_blocks) >= request_size:
# 内存块可用,分配给进程
block_start = free_blocks[0]
block_end = free_blocks[request_size-1]
self.allocator.allocate_memory(block_start, request_size, process)
# 更新内存块视图
for i in range(block_start, block_end+1):
self.memory_blocks[i] = (process, i)
# 返回内存块视图
return tuple(block[0] for block in self.memory_blocks)
else:
# 内存块不足,分配失败
return None
def _search_ge(self, x):
i = bisect.bisect_left(self.memory_blocks, (None, x))
if i != len(self.memory_blocks):
return self.memory_blocks[i][1]
else:
return None
def _search_le(self, x):
i = bisect.bisect_right(self.memory_blocks, (None, x))
if i:
return self.memory_blocks[i-1][1]
else:
return None
def deallocate(self, process):
for i, block in enumerate(self.memory_blocks):
if block[0] == process:
self.memory_blocks[i] = (None, i)
# 合并空闲块
i = 0
while i < len(self.memory_blocks):
if self.memory_blocks[i][0] is None:
j = i + 1
while j < len(self.memory_blocks) and self.memory_blocks[j][0] is None:
j += 1
if j < len(self.memory_blocks):
self.memory_blocks[i:j] = [(None, k) for k in range(i, j)]
else:
self.memory_blocks[i:] = [(None, k) for k in range(i, len(self.memory_blocks))]
i = j
else:
i += 1
```
使用红黑树实现需要维护一个按地址排序的内存块列表,这里我们使用元组来表示每个内存块,第一个元素是进程对象或者None表示空闲块,第二个元素是内存块的索引。在分配内存时,我们先遍历列表,找到所有空闲块的索引,然后判断是否有足够的连续空闲块来分配给进程。如果有,我们就将分配的内存块标记为进程对象,并调用self.allocator.Allocate_memory()函数进行内存分配。在回收内存时,我们遍历列表,找到所有属于该进程的内存块,将它们标记为空闲块,然后合并相邻的空闲块。为了快速定位内存块的位置,我们使用bisect模块实现二分查找,将时间复杂度降低到O(log n)。
MFC创建一个登录窗口,窗口有两个按钮,一个为登陆,一个为创建账号。要求用一文本储存多个用户的账号信息(文本内容包括姓名,卡号,密码,身份证号),任意一个用户可用账号和密码登陆,新用户也可以创建账号并储存到文本中。具体代码
以下是一个简单的 MFC 登录窗口程序,其中包括了两个按钮:Login 和 Register,以及一个文本框用于输入用户名和密码。用户账号信息保存在一个文本文件中,每行的格式为“姓名,卡号,密码,身份证号”。
首先,创建一个 MFC 对话框应用程序,并在资源视图中添加一个编辑框(ID 为 IDC_EDIT1)和两个按钮(ID 分别为 IDC_BUTTON1 和 IDC_BUTTON2)。
然后,在对话框类的头文件中定义一个结构体,用于保存用户账号信息:
```c++
struct UserInfo {
CString name;
CString cardNo;
CString password;
CString idNo;
};
```
接下来,在对话框类的头文件中添加以下函数声明:
```c++
// 读取用户账号信息
void LoadUserInfo();
// 保存用户账号信息
void SaveUserInfo();
// 登录按钮的响应函数
afx_msg void OnBnClickedButtonLogin();
// 注册按钮的响应函数
afx_msg void OnBnClickedButtonRegister();
```
然后,实现这些函数的具体代码。首先是 LoadUserInfo 函数,用于从文本文件中读取用户账号信息:
```c++
void CMyDialogDlg::LoadUserInfo() {
CString line;
CStdioFile file;
if (file.Open(_T("userinfo.txt"), CFile::modeRead | CFile::typeText)) {
while (file.ReadString(line)) {
UserInfo info;
int pos = 0;
pos = line.Find(_T(','));
info.name = line.Left(pos);
line = line.Mid(pos + 1);
pos = line.Find(_T(','));
info.cardNo = line.Left(pos);
line = line.Mid(pos + 1);
pos = line.Find(_T(','));
info.password = line.Left(pos);
line = line.Mid(pos + 1);
info.idNo = line;
m_userInfo.push_back(info);
}
file.Close();
}
}
```
这个函数打开名为 userinfo.txt 的文本文件,并逐行读取其中的内容,将每个用户的账号信息保存到一个 vector 中。
接下来是 SaveUserInfo 函数,用于将修改后的用户账号信息保存回文本文件:
```c++
void CMyDialogDlg::SaveUserInfo() {
CStdioFile file;
if (file.Open(_T("userinfo.txt"), CFile::modeCreate | CFile::modeWrite | CFile::typeText)) {
for (auto& info : m_userInfo) {
CString line;
line.Format(_T("%s,%s,%s,%s"), info.name, info.cardNo, info.password, info.idNo);
file.WriteString(line + _T("\n"));
}
file.Close();
}
}
```
接下来是 OnBnClickedButtonLogin 函数,用于响应登录按钮的点击事件:
```c++
void CMyDialogDlg::OnBnClickedButtonLogin() {
CString username, password;
GetDlgItemText(IDC_EDIT1, username);
GetDlgItemText(IDC_EDIT2, password);
for (auto& info : m_userInfo) {
if (info.cardNo == username && info.password == password) {
MessageBox(_T("登录成功!"));
return;
}
}
MessageBox(_T("用户名或密码错误!"));
}
```
这个函数首先从用户名和密码的编辑框中获取输入的内容,然后遍历保存用户账号信息的 vector,查找是否有与输入的用户名和密码匹配的用户。如果找到了匹配的用户,弹出一个消息框提示登录成功;否则弹出一个消息框提示用户名或密码错误。
最后是 OnBnClickedButtonRegister 函数,用于响应注册按钮的点击事件:
```c++
void CMyDialogDlg::OnBnClickedButtonRegister() {
CRegisterDlg dlg;
if (dlg.DoModal() == IDOK) {
UserInfo info;
info.name = dlg.m_name;
info.cardNo = dlg.m_cardNo;
info.password = dlg.m_password;
info.idNo = dlg.m_idNo;
m_userInfo.push_back(info);
SaveUserInfo();
MessageBox(_T("注册成功!"));
}
}
```
这个函数创建一个 CRegisterDlg 对话框,并等待用户输入注册信息。如果用户点击了对话框的确定按钮,就将用户的账号信息保存到 vector 中,并调用 SaveUserInfo 函数将修改后的用户账号信息保存回文本文件。最后弹出一个消息框提示注册成功。
最后,在对话框类的构造函数中调用 LoadUserInfo 函数,以便在程序启动时加载用户账号信息:
```c++
CMyDialogDlg::CMyDialogDlg(CWnd* pParent /*=nullptr*/)
: CDialogEx(IDD_MYDIALOG_DIALOG, pParent)
{
// ...
LoadUserInfo();
}
```
完整代码如下:
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![](https://img-home.csdnimg.cn/images/20210720083646.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![doc](https://img-home.csdnimg.cn/images/20210720083327.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![application/msword](https://img-home.csdnimg.cn/images/20210720083327.png)
![docx](https://img-home.csdnimg.cn/images/20210720083331.png)