这两天的两道面试上机题 C#

简单的上机操作。希望对新人有所帮助。

分享出来希望有面试的朋友看看:
1计算器
很简单 实现连+ - * /
界面:

namespace WindowsFormsApplication1
{
enum Opration
{
/// <summary>
/// 没有操作
/// </summary>
None,
/// <summary>
/// 加
/// </summary>
Add,
/// <summary>
/// 减
/// </summary>
Sub,
/// <summary>
/// 乘
/// </summary>
Mul,
/// <summary>
/// 除
/// </summary>
Div

}

/// <summary>
/// 计算器状态
/// </summary>
enum CalcState
{
/// <summary>
/// 初始状态
/// </summary>
None,
/// <summary>
/// 运算过程中
/// </summary>
InProcess
}

/// <summary>
/// 计算器
/// </summary>
public partial class MainForm : Form
{
/// <summary>
/// 当前操作(加减乘除)
/// </summary>
private Opration currentOp = Opration.None;
/// <summary>
/// 当前状态(是否在计算中)
/// </summary>
private CalcState currentState = CalcState.None;

/// <summary>
/// 操作数1
/// </summary>
private double num1 = 0F;

/// <summary>
/// 操作数2
/// </summary>
private double num2 = 0F;

/// <summary>
/// 是否需要清除文本框内容
/// </summary>
private bool needClear = false;

public MainForm()
{
InitializeComponent();
}

private void button_Click(object sender, EventArgs e)
{
//如果需要清除文本框内容
if (needClear)
{
txtValue.Text = "";
needClear = false;
}

//点击数字键
//得到点击的数字
Button button = sender as Button;
string value = txtValue.Text + button.Text;

double val;
//只有在数值合法的情况下才能输入
if (double.TryParse(value, out val))
{
txtValue.Text = val.ToString();
}

//如果状态为计算中,则用户输入的数值赋给num2,否则赋给num1
if (currentState == CalcState.InProcess)
{
num2 = val;
}
else
{
num1 = val;
}
}

/// <summary>
/// 计算数值
/// </summary>
private void Calc()
{
double value = 0F;
switch (currentOp)
{
case Opration.Add:
{
value = num1 + num2;
break;
}
case Opration.Sub:
{
value = num1 - num2;
break;
}
case Opration.Mul:
{
value = num1 * num2;
break;
}
case Opration.Div:
{
value = num1 / num2;
break;
}

}

//计算结果显示在文本框中
txtValue.Text = value.ToString();

//并且将结果赋值给num1
num1 = value;
}


/// <summary>
/// 点击操作按钮的处理过程
/// </summary>
private void DoOpration()
{
if (currentState == CalcState.InProcess)
{
Calc();
}

currentState = CalcState.InProcess;
needClear = true;
}

/// <summary>
/// 点击加号
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void btnAdd_Click(object sender, EventArgs e)
{
DoOpration();
currentOp = Opration.Add;
}

/// <summary>
/// 点击减号
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void btnSub_Click(object sender, EventArgs e)
{
DoOpration();
currentOp = Opration.Sub;
}

/// <summary>
/// 点击乘号
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void btnMul_Click(object sender, EventArgs e)
{
DoOpration();
currentOp = Opration.Mul;
}
/// <summary>
/// 点击除号
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void btnDiv_Click(object sender, EventArgs e)
{
DoOpration();
currentOp = Opration.Div;
}

/// <summary>
/// 点击等号
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void btnResult_Click(object sender, EventArgs e)
{
Calc();
currentState = CalcState.None;
}
}
}

2。Socket通信
我的这个是在一个项目下分别做一个服务端和一个客户端,这个只能一个客户端对应一个服务器发送 不能N个客户对一个服务。水平有限。。。。IP地址写自己本机的IP 。
服务端:

namespace SocketServer
{
//声明委托用于在线程中访问界面元素
delegate void SetMessage(string message);

public partial class ServerForm : Form
{
//缓冲区最大长度
private const int MAX_BUFFER_SIZE = 1024
//声明本地IP地址类
private IPAddress ipAddress;
//需要监听的端口号
private int port;

//本机节点
private EndPoint endPoint;

//用于监听连接的Socket
private Socket listenSocket;
//用于发送&接收信息的Socket
private Socket acceptSocket;
public ServerForm()
{
InitializeComponent();
}

/// <summary>
/// 为用户界面中的文本框赋值
/// </summary>
/// <param name="message"></param>
private void SetTextMessage(string message)
{
txtMessage.Text = txtMessage.Text + message;
}
private void btnBeginListen_Click(object sender, EventArgs e)
{
Thread thread = new Thread(new ThreadStart(BeginListen));
thread.Start();
btnBeginListen.Enabled = false;
btnStopListen.Enabled = true;
}

private void BeginListen()
{
//IP地址
ipAddress = IPAddress.Parse(txtServerAddress.Text);
//端口号
port = Convert.ToInt32(txtServerPort.Text);
//本机节点
endPoint = new IPEndPoint(ipAddress, port);

//声明监听Socket的实例
listenSocket = new Socket(AddressFamily.InterNetwork, //网络寻址方式
SocketType.Stream,          //通信流
ProtocolType.Tcp);          //通信协议

//绑定Socket与本机IP
listenSocket.Bind(endPoint);
//开始监听
listenSocket.Listen(10); //10 为最大排队数(有多少个连接正在等待)
//等待连接,当有客户端连接时,分配一个Socket实例与客户端通信,此操作会阻塞当前线程执行
acceptSocket = listenSocket.Accept();
//声明网络流用于读取&写入数据
NetworkStream stream = new NetworkStream(acceptSocket);
//声明字节数,用于从流中读取数据
byte[] buffer = new byte[MAX_BUFFER_SIZE];
int readLength;
do
{
//从流中读取数据,此操作会阻塞当前线程执行
readLength = stream.Read(buffer, 0, buffer.Length);

if (readLength == 0)
{
break;
}
//将字节数组解码,得到传输内容
string message = Encoding.BigEndianUnicode.GetString(buffer);
//string message = Encoding.Default.GetString(buffer);

//显示内容
//制定委托调用SetTextMessage方法
SetMessage setMessage = new SetMessage(SetTextMessage);

//调用委托
this.Invoke(setMessage, message);
}
while (readLength != 0);
//最后关闭流
stream.Close();
//关闭Socket
acceptSocket.Close();
//关闭监听Socket
listenSocket.Close();
}
}
}
客户端

namespace SocketClient
{
public partial class ClientForm : Form
{
public ClientForm()
{
InitializeComponent();
}

Socket socket;

private void btnConnect_Click(object sender, EventArgs e)
{
//服务器地址
IPAddress ipAddress = IPAddress.Parse(txtServerAddress.Text);
//服务器端口号
int port = Convert.ToInt32(txtPort.Text);

//声明服务器端点实例
EndPoint endPoint = new IPEndPoint(ipAddress, port);

//声明Socket实例
socket = new Socket(AddressFamily.InterNetwork,
SocketType.Stream,
ProtocolType.Tcp);

//Socket连接到服务端
socket.Connect(endPoint);

//如果连接成功,设置按钮状态
if (socket.Connected)
{
btnConnect.Enabled = false;
btnSendMessage.Enabled = true;
}
}

private void btnSendMessage_Click(object sender, EventArgs e)
{
//得到要发送的消息
string message = txtMessage.Text;

//将消息转换成为字节数组
byte[] buffer = Encoding.BigEndianUnicode.GetBytes(message);

//声明网络流并且关联Socket
NetworkStream stream = new NetworkStream(socket);

//向流中写入数据
stream.Write(buffer, 0, buffer.Length);

//关闭流
stream.Close();

//关闭Socket
socket.Close();
}
}
}
posted @ 2011-02-27 21:29  部落小头目  阅读(1213)  评论(2编辑  收藏  举报