我正在使用C#Windows形式的航空预订项目。用户使用两个列表框输入名称并选择座位,一个列表框用于行(即1 2 3 4 5),一个列表框用于列(即A B C D)。当用户按下书时,乘客将被添加到座位列表中(即1A-Sue)。如果用户按“显示所有座位”,它将显示所有座位信息,可能有或没有乘客。 (即1A-和2A-David)。
我的问题是我的代码只记录了一次姓名。如果我再次按book记录第二位乘客,第二个座位信息将显示第二个名字。例如,第一个输入名称:Sue;排:1个座位:A。 “显示所有席位”的文本框将为1A-Sue 1B- .... 5D-第二个输入名称:Steven;行:C座位1个。 “显示所有席位”的文本框将为1A-Sue 1B- .... 5D- 1A- 1B- 1C-史蒂文 .... 5D-
namespace airline
{
public partial class Form1 : Form
{
//initialize seat in 2D array
string[,] seat = new string[5, 4] {{"1A","1B","1C","1D" },
{"2A","2B","2C","2D" },
{"3A","3B","3C","3D" },
{"4A","4B","4C","4D" },
{"5A","5B","5C","5D" },};
//initialize varialbes
string row;
string col;
string selectedSeat;
string output = String.Empty;
public static List<Passenger> passengers;
public Form1()
{
InitializeComponent();
}
private void showAllowSeatClick(object sender, EventArgs e)
{
seatTextBox.Text = output;
}
private void Form1_Load(object sender, EventArgs e)
{
}
private void bookClick(object sender, EventArgs e)
{
row = rowListBox.SelectedItem.ToString();
col = seatListBox.SelectedItem.ToString();
selectedSeat = row + col;
for (int i = 0; i < seat.GetLength(0); i++)
{
for (int j = 0; j < seat.GetLength(1); j++)
{
if (seat[i, j] == selectedSeat)
{
output += seat[i, j] + " - " + nameTextInput.Text +"\n";
nameTextInput.Clear();
}
else
{
output += seat[i, j] + " - " +"\n";
}
}
}
}
}
}
而不是使用字符串数组,我建议构建一个对象数组:
public class Seat
{
public string Id {get; set;}
public string PassengerName {get; set;}
}
所以对象看起来像:
var seat = new Seat()
{
Id = "1A",
PassengerName = "John Doe"
}
这样,当用户选择一个座位时,您可以分配该特定对象的PassengerName属性。
或者,在数组上,您可以使用Dictionary对象,其Key为座位ID,乘客姓名为值。