有必要在 Windows 窗体中使用 C++/CLI 中的 txt 文件来组织工作。
该文件由员工姓名、姓名首字母和电话号码组成。
锻炼:
- 在 textBox1 中输入文件的名称。
- 在 textBox2 中单击按钮显示其内容。
- 在 textBox3 中输入员工的姓氏和姓名首字母。
- 在按 textBox4 中的第二个按钮时显示电话号码
我在控制台中有现成的工作代码,但将其重写为表单不起作用。
这是控制台的代码:
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
int main()
{
setlocale(LC_CTYPE, "Russian");
ifstream f("file.txt");// открываем файл
if (f.is_open())//если файл существует
{
cout << "Файл существует." << endl;
cout << "Данные из файла:" << endl;
ifstream file("file.txt");
string s;
while (getline(file, s))//пока есть строки
{
cout << s << endl; //выводим строки
}
file.close();//закрываем файл после чтения
while (true)
{
string name;//строка с ФИО
string first, last;//переменная для фамилии и инициалов
string number;//номер телефона
int result = 0;//переменная для остановки цикла
cout << "Введите фамилию и инициалы: ";
getline(cin, name);//ввод ФИО
while (f >> first >> last >> number)//пока есть строки
//разбиваем строку на части: фамилия, инициалы и номер телефона
if (first + ' ' + last == name)//если фамилия и инициалы совпадают с веденным именем
{
cout << "Сотрудник найден. Его номер телефона: " << number << endl << endl;
result = 1;//сотрудник найден
}
if (!result)//если сотрудник не найден
cout << "Сотрудник не найден." << endl << endl;
break;//остановка цикла
}
}
else //если файл не найден
cout << "Файла не существует." << endl;
system("pause");
return 0;
}
这是文件的内容:
Ivanov S.E. +123453424234
Petrov A.A. +565654656565
Sidorov I.V. +245646257507
Kalinina E.V. +145672308792
Andreev S.O. +980542178903
Tarasenko V.A. +765421038954
我设法在文本框中显示文件的内容,但我无法实现搜索...用于在文件中显示数据的按钮:
private: System::Void button1_Click(System::Object^ sender, System::EventArgs^ e) {
String^ filename = Convert::ToString(this->textBox1->Text);
if (File::Exists(filename))
{
String^ fileText = File::ReadAllText(filename);
textBox2->Text = fileText;
}
else this->textBox1->Text = "Файла не существует";
}
搜索按钮:
private: System::Void button2_Click(System::Object^ sender, System::EventArgs^ e) {
while (true)
{
String^ name = Convert::ToString(this->textBox3->Text);;//строка с ФИО
String ^first, ^last, ^ number;
int result = 0;//переменная для остановки цикла
//тут уже не знаю, как реализовать поиск
//while (f >> first >> last >> number)//пока есть строки
//разбиваем строку на части: фамилия, инициалы и номер телефона
//if (first + ' ' + last == name)//если фамилия и инициалы совпадают с веденным именем
//{
// this->textBox4->Text = number;
// result = 1;//сотрудник найден
//}
//if (!result)//если сотрудник не найден
// this->textBox4->Text = "Сотрудник не найден.";
break;//остановка цикла
}
}
以下代码搜索员工,如果找到,则显示电话号码。
首先,文本使用
String->Split
.循环遍历这些行。我们将它们中的每一个按符号拆分为子字符串
'+'
。接下来,我们将用户输入的名称与数组的第一个元素进行比较。第二个元素将包含电话号码。
如果找到该员工,那么我们用 return 打破循环并退出该方法。
使用该方法
Trim()
,我删除了拆分字符串后剩余的额外空格,这些空格可以由用户输入。这简化了字符串比较和搜索。不要给变量命名,如
textBox1
,button2
。给他们有意义的名字:textBoxFileName
等buttonSearch
。