我想在mfc中的一个对话框中,选中一个城市之后,从已经写好的文本文件ticket.txt中读出对应城市的信息,我该怎么实现?文本文件的格式为所属城市,景点名称,景点开放时间,景点余票,价格。请给出详细步骤
时间: 2024-02-16 20:00:46 浏览: 121
VC++基于mfc 实现对话框打开读取txt文件
5星 · 资源好评率100%
好的,根据你的需求,我可以提供以下实现步骤:
1. 在 MFC 对话框中添加一个下拉列表框控件,用于展示可选城市。可以通过在资源视图中打开该对话框的 .rc 文件,在对话框编辑器中拖拽“组合框”控件来实现。
2. 在对话框类的头文件中添加控件的变量声明,例如:
```cpp
CComboBox m_cityCombo;
```
3. 在对话框类的 OnInitDialog 函数中,添加代码初始化下拉列表框控件,例如:
```cpp
m_cityCombo.AddString(_T("北京"));
m_cityCombo.AddString(_T("上海"));
m_cityCombo.AddString(_T("广州"));
// ... 添加更多城市选项
```
4. 在对话框类的头文件中添加读取 ticket.txt 文件的函数声明,例如:
```cpp
void ReadTicketInfo(const CString& city);
```
5. 在对话框类的源文件中实现该函数,例如:
```cpp
void CMyDialog::ReadTicketInfo(const CString& city)
{
CString filePath = _T("ticket.txt");
CStdioFile file;
if (file.Open(filePath, CFile::modeRead | CFile::typeText))
{
CString line;
while (file.ReadString(line))
{
// 解析文本行中的字段
CStringList fields;
int startPos = 0;
int endPos = line.Find(',');
while (endPos != -1)
{
fields.AddTail(line.Mid(startPos, endPos - startPos));
startPos = endPos + 1;
endPos = line.Find(',', startPos);
}
fields.AddTail(line.Mid(startPos));
// 判断该行是否属于选定的城市
if (fields.GetCount() >= 1 && fields.GetHead() == city)
{
// 获取该行景点的信息,例如:
CString name = fields.GetAt(fields.FindIndex(1));
CString openTime = fields.GetAt(fields.FindIndex(2));
CString remainingTickets = fields.GetAt(fields.FindIndex(3));
CString price = fields.GetAt(fields.FindIndex(4));
// 处理景点信息,例如:
// 显示在对话框的控件上
// 存储到变量中
// ...
}
}
file.Close();
}
}
```
6. 在对话框类的 OnCbnSelchangeCityCombo 函数中添加代码,在选中城市时调用 ReadTicketInfo 函数,例如:
```cpp
void CMyDialog::OnCbnSelchangeCityCombo()
{
int index = m_cityCombo.GetCurSel();
if (index != CB_ERR)
{
CString city;
m_cityCombo.GetLBText(index, city);
ReadTicketInfo(city);
}
}
```
这样就完成了在 MFC 对话框中选中城市后读取 ticket.txt 文件的功能。需要注意的是,这里只提供了一种实现思路,具体的实现可能需要根据你的具体需求进行调整。
阅读全文