.aspx
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm1.aspx.cs" Inherits="DeltaAlpha.WebForm1" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head id="Head1" runat="server">
<title></title>
<style type="text/css">
td
{
text-align: center;
}
.style1
{
height: 20px;
}
</style>
</head>
<body>
<h1>
繪製三角形
</h1>
<form id="form1" runat="server">
<div>
請輸入三角形高度:
<asp:TextBox ID="txtHeight" runat="server" Width="30px"></asp:TextBox>
<asp:DropDownList ID="ddlType" runat="server">
<asp:ListItem Value="L">正左</asp:ListItem>
<asp:ListItem Value="R">正右</asp:ListItem>
<asp:ListItem Value="C">等腰</asp:ListItem>
<asp:ListItem Value="RL">倒左</asp:ListItem>
<asp:ListItem Value="RR">倒右</asp:ListItem>
<asp:ListItem Value="RC">倒等腰</asp:ListItem>
<asp:ListItem Value="2C">背對背等腰</asp:ListItem>
<asp:ListItem Value="4C">蝴蝶</asp:ListItem>
</asp:DropDownList>
<asp:Button ID="btnSubmit" runat="server" Text="確定" OnClick="btnSubmit_Click" />
</div>
<table>
<tr>
<td>
<asp:Literal ID="ltDelta" runat="server"></asp:Literal>
</td>
<td>
</td>
<td>
<asp:Literal ID="ltDelta2" runat="server"></asp:Literal>
</td>
</tr>
<tr>
<td class="style1">
<asp:Literal ID="ltDelta3" runat="server"></asp:Literal>
</td>
<td class="style1">
</td>
<td class="style1">
<asp:Literal ID="ltDelta4" runat="server"></asp:Literal>
</td>
</tr>
</table>
</form>
</body>
</html>
.aspx.csusing System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Text;
namespace DeltaAlpha
{
public partial class WebForm1 : System.Web.UI.Page
{
private char[] symbols = new char[26 + 26 + 10];
private static int symbolIndex = 0;
protected void Page_Load(object sender, EventArgs e)
{
txtHeight.Focus();
initSymbols();
}
private void initSymbols()
{
char c = '1';
int i = 0;
while (c != '9')
{
symbols[i++] = c;
c = (char)(c + 1);
}
symbols[i++] = '0';
c = 'A';
while (c != 'Z')
{
symbols[i++] = c;
c = (char)(c + 1);
}
c = 'a';
while (c != 'z')
{
symbols[i++] = c;
c = (char)(c + 1);
}
}
private void resetSymbolIndex()
{
symbolIndex = 0;
}
private string currentSymbol()
{
//return symbols[symbolIndex];
return "<img src='images/skull.png' alt='' />";
}
private char nextSymbol()
{
char c = symbols[symbolIndex];
symbolIndex = (symbolIndex + 1) % symbols.Length;
return c;
}
/// <summary>
/// 偏左的直角三角形,第 i 層印 i 個骷髏頭
/// </summary>
/// <param name="h">三角形高度</param>
/// <returns>HTML</returns>
private string deltaLeft(int h)
{
resetSymbolIndex();
StringBuilder sb = new StringBuilder();
sb.Append("<table border='0'>");
for (int i = 1; i <= h; i++)
{
sb.Append("<tr>");
for (int j = 1; j <= i; j++)
{
sb.Append("<td>" + currentSymbol() + "</td>");
}
sb.Append("</tr>"); nextSymbol();
}
sb.Append("</table>");
return sb.ToString();
}
/// <summary>
/// 偏右的直角三角形,第 i 層印 (h-i) 個空格和 i 個骷髏頭
/// </summary>
/// <param name="h">三角形高度</param>
/// <returns>HTML</returns>
private string deltaRight(int h)
{
resetSymbolIndex();
StringBuilder sb = new StringBuilder();
sb.Append("<table border='0'>");
for (int i = 1; i <= h; i++)
{
sb.Append("<tr>");
for (int j = 1; j <= (h - i); j++)
{
sb.Append("<td> </td>");
}
for (int j = 1; j <= i; j++)
{
sb.Append("<td>" + currentSymbol() + "</td>");
}
sb.Append("</tr>"); nextSymbol();
}
sb.Append("</table>");
return sb.ToString();
}
/// <summary>
/// 正的等腰三角形,第 i 層印 (h-i) 個空格和 (2i-1) 個骷髏頭
/// </summary>
/// <param name="h">三角形高度</param>
/// <returns>HTML</returns>
private string deltaIsosceles(int h)
{
resetSymbolIndex();
StringBuilder sb = new StringBuilder();
sb.Append("<table border='0'>");
for (int i = 1; i <= h; i++)
{
sb.Append("<tr>");
for (int j = 1; j <= (h - i); j++)
{
sb.Append("<td> </td>");
}
for (int j = 1; j <= (2 * i - 1); j++)
{
sb.Append("<td>" + currentSymbol() + "</td>");
}
sb.Append("</tr>"); nextSymbol();
}
sb.Append("</table>");
return sb.ToString();
}
/// <summary>
/// 倒的偏左的直角三角形,第 i 層印 (h-i+1) 個骷髏頭
/// </summary>
/// <param name="h">三角形高度</param>
/// <returns>HTML</returns>
private string deltaDownLeft(int h)
{
resetSymbolIndex();
StringBuilder sb = new StringBuilder();
sb.Append("<table border='0'>");
for (int i = 1; i <= h; i++)
{
sb.Append("<tr>");
for (int j = 1; j <= (h - i + 1); j++)
{
sb.Append("<td>" + currentSymbol() + "</td>");
}
sb.Append("</tr>"); nextSymbol();
}
sb.Append("</table>");
return sb.ToString();
}
/// <summary>
/// 倒的偏右的直角三角形,第 i 層印 (i-1) 個空格和 (h-i+1) 個骷髏頭
/// </summary>
/// <param name="h">三角形高度</param>
/// <returns>HTML</returns>
private string deltaDownRight(int h)
{
resetSymbolIndex();
StringBuilder sb = new StringBuilder();
sb.Append("<table border='0'>");
for (int i = 1; i <= h; i++)
{
sb.Append("<tr>");
for (int j = 1; j <= (i - 1); j++)
{
sb.Append("<td> </td>");
}
for (int j = 1; j <= (h - i + 1); j++)
{
sb.Append("<td>" + currentSymbol() + "</td>");
}
sb.Append("</tr>"); nextSymbol();
}
sb.Append("</table>");
return sb.ToString();
}
/// <summary>
/// 倒的等腰三角形,第 i 層印 (i-1) 個空格和 2(h-i)+1 個骷髏頭
/// </summary>
/// <param name="h">三角形高度</param>
/// <returns>HTML</returns>
private string deltaDownIsosceles(int h)
{
resetSymbolIndex();
StringBuilder sb = new StringBuilder();
sb.Append("<table border='0'>");
for (int i = 1; i <= h; i++)
{
sb.Append("<tr>");
for (int j = 1; j <= (i - 1); j++)
{
sb.Append("<td> </td>");
}
for (int j = 1; j <= (2 * (h - i) + 1); j++)
{
sb.Append("<td>" + currentSymbol() + "</td>");
}
sb.Append("</tr>"); nextSymbol();
}
sb.Append("</table>");
return sb.ToString();
}
/// <summary>
/// 背對背等腰三角形,第 i 層印 (h-i) 個空格和 2i 個骷髏頭
/// </summary>
/// <param name="h">三角形高度</param>
/// <returns>HTML</returns>
private string delta2Isosceles(int h)
{
resetSymbolIndex();
StringBuilder sb = new StringBuilder();
sb.Append("<table border='0'>");
for (int i = 1; i <= h; i++)
{
sb.Append("<tr>");
for (int j = 1; j <= (h - i); j++)
{
sb.Append("<td> </td>");
}
for (int j = 1; j <= 2 * i; j++)
{
sb.Append("<td>" + currentSymbol() + "</td>");
}
sb.Append("</tr>"); nextSymbol();
}
sb.Append("</table>");
return sb.ToString();
}
protected void btnSubmit_Click(object sender, EventArgs e)
{
int h = int.Parse(txtHeight.Text);
string type = ddlType.SelectedValue;
ltDelta.Text = ltDelta2.Text = ltDelta3.Text = ltDelta4.Text = "";
if (type.Equals("L"))
ltDelta.Text = deltaLeft(h);
else if (type.Equals("R"))
ltDelta.Text = deltaRight(h);
else if (type.Equals("C"))
ltDelta.Text = deltaIsosceles(h);
else if (type.Equals("RL"))
ltDelta.Text = deltaDownLeft(h);
else if (type.Equals("RR"))
ltDelta.Text = deltaDownRight(h);
else if (type.Equals("RC"))
ltDelta.Text = deltaDownIsosceles(h);
else if (type.Equals("2C"))
{
ltDelta.Text = deltaDownRight(h);
ltDelta2.Text = deltaDownLeft(h);
}
else if (type.Equals("4C"))
{
ltDelta.Text = deltaDownRight(h);
ltDelta2.Text = deltaDownLeft(h);
ltDelta3.Text = deltaRight(h);
ltDelta4.Text = deltaLeft(h);
}
txtHeight.Focus();
}
}
}
GCD-OK.aspx
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm1.aspx.cs" Inherits="GCD.WebForm1" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title>兩正整數的最大公因數與最小公倍數</title>
<style type="text/css">
div
{
text-align:center;
}
</style>
</head>
<body>
<form id="form1" runat="server">
<div>
<h1>兩正整數的最大公因數與最小公倍數</h1>
<hr />
<br />
<asp:Label ID="Label1" runat="server" Text="第一正整數N: "></asp:Label>
<asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
<asp:RequiredFieldValidator ID="RequiredFieldValidator1" runat="server"
ControlToValidate="TextBox1" ErrorMessage="請輸入N">*</asp:RequiredFieldValidator>
<asp:RangeValidator ID="RangeValidator1" runat="server"
ControlToValidate="TextBox1" ErrorMessage="N值需大於0" MaximumValue="99999999"
MinimumValue="0" Type="Integer">*</asp:RangeValidator>
<asp:Label ID="Label2" runat="server" Text="第二正整數M: "></asp:Label>
<asp:TextBox ID="TextBox2" runat="server"></asp:TextBox>
<asp:RequiredFieldValidator ID="RequiredFieldValidator2" runat="server"
ControlToValidate="TextBox2" ErrorMessage="請輸入M">*</asp:RequiredFieldValidator>
<asp:RangeValidator ID="RangeValidator2" runat="server"
ControlToValidate="TextBox2" ErrorMessage="M值需大於0" MaximumValue="99999999"
MinimumValue="0" Type="Integer">*</asp:RangeValidator>
<br />
<asp:ValidationSummary ID="ValidationSummary1" runat="server"
HeaderText="以下資料有誤" ShowMessageBox="True" />
<asp:Button ID="Button1" runat="server" onclick="Button1_Click" Text="送出" />
<asp:Button ID="Button2" runat="server" onclick="Button2_Click" Text="清除" />
<br />
<br />
<asp:Literal ID="Literal1" runat="server"></asp:Literal>
</div>
</form>
</body>
</html>
.aspx.csusing System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
namespace GCD
{
public partial class WebForm1 : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
}
protected void Button2_Click(object sender, EventArgs e)
{
TextBox1.Text = "";
TextBox2.Text = "";
}
protected void Button1_Click(object sender, EventArgs e)
{
int n = int.Parse(TextBox1.Text);
int m = int.Parse(TextBox2.Text);
int c = 1;
string str = n + " 與 " + m;
int nn=n,mm=m;
while (c>0) {
c = nn % mm;
nn = mm;
mm = c;
}
if (nn == 1)
{
str += "兩數互質!<br>";
}
else {
str += "最大公因數是 " + nn + "<br>";
}
str += "最小公倍數是 " + m * n / nn;
Literal1.Text = str;
}
}
}
ListPrime-OK.aspx
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm1.aspx.cs" Inherits="ListPrime.WebForm1" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title>印出小於N的質數</title>
<style type="text/css">
h1
{
text-align:center;
}
</style>
</head>
<body>
<form id="form1" runat="server">
<div>
<h1>印出小於N的質數</h1>
<p> </p>
<hr />
<p>
<asp:Label ID="Label1" runat="server" Text="請輸入N值: "></asp:Label>
<asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
<asp:Button ID="Button1" runat="server" onclick="Button1_Click" Text="送出" />
<asp:Button ID="Button2" runat="server" onclick="Button2_Click" Text="清除" />
<asp:RequiredFieldValidator ID="RequiredFieldValidator1" runat="server"
ControlToValidate="TextBox1" ErrorMessage="請輸入"> *</asp:RequiredFieldValidator>
<asp:RangeValidator ID="RangeValidator1" runat="server"
ControlToValidate="TextBox1" ErrorMessage="須輸入大於等於2的正整數" MaximumValue="9999999"
MinimumValue="2" Type="Integer">*</asp:RangeValidator>
</p>
<asp:ValidationSummary ID="ValidationSummary1" runat="server" />
<asp:Literal ID="Literal1" runat="server"></asp:Literal>
</div>
</form>
</body>
</html>
.aspx.csusing System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
namespace ListPrime
{
public partial class WebForm1 : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
}
protected void Button2_Click(object sender, EventArgs e)
{
TextBox1.Text = "";
}
protected void Button1_Click(object sender, EventArgs e)
{
int n = int.Parse(TextBox1.Text);
int i, j;
int count = 0;
bool flag;
string str = "比" + n + "小的質數是: ";
if (n == 2)
{
Literal1.Text = "沒有比2小的質數。";
}
else {
for (i = 2; i < n;i++ )
{
for (j = 2, flag = true; j * j <= i &&flag; j++)
{
if (i % j == 0) flag = false;
}
if (flag==true)
{
if (count != 0)
str += ", ";
str += "" + i;
count++;
}
}
str += "<br>以上共計 "+ count + " 個質數。";
Literal1.Text = str;
}
}
}
}
Login-OK.aspx
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm1.aspx.cs" Inherits="Login.WebForm1" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title>模擬登入畫面</title>
<style type="text/css">
div
{
text-align:center;
margin: 1em 10%;
background-color:Aqua;
}
</style>
</head>
<body>
<form id="form1" runat="server">
<div>
<h1>模擬登入畫面</h1>
<hr />
<asp:Label ID="Label1" runat="server" Text="帳號: "></asp:Label>
<asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
<asp:RequiredFieldValidator ID="RequiredFieldValidator1" runat="server"
ControlToValidate="TextBox1" ErrorMessage="請輸入帳號"></asp:RequiredFieldValidator>
<br />
<asp:Label ID="Label2" runat="server" Text="密碼: "></asp:Label>
<asp:TextBox ID="TextBox2" runat="server" TextMode="Password"></asp:TextBox>
<asp:RequiredFieldValidator ID="RequiredFieldValidator2" runat="server"
ControlToValidate="TextBox2" ErrorMessage="請輸入密碼"></asp:RequiredFieldValidator>
<br />
<asp:Button ID="Button1" runat="server" Text="登入" onclick="Button1_Click" />
<asp:Button ID="Button2" runat="server" Text="重設" onclick="Button2_Click" />
<br />
<asp:CompareValidator ID="CompareValidator1" runat="server"
ControlToCompare="TextBox2" ControlToValidate="TextBox1"></asp:CompareValidator>
</div>
</form>
</body>
</html>
.aspx.csusing System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
namespace Login
{
public partial class WebForm1 : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
}
protected void Button2_Click(object sender, EventArgs e)
{
TextBox1.Text = "";
TextBox2.Text = "";
TextBox1.Focus();
}
protected void Button1_Click(object sender, EventArgs e)
{
if (CompareValidator1.IsValid)
{
Response.Write("<script type='text/javascript'>alert('歡迎光臨');</script>");
Response.Write("<script type='text/javascript'>self.moveTo(0,0);self.resizeTo(screen.availWidth,screen.availHeight);</script>");
Response.Write("<script type='text/javascript'>window.location.replace('http://www.ywdeng.idv.tw')</script>");
}
else {
Response.Write("<script type='text/javascript'>alert('帳號或密碼錯誤');</script>");
}
}
}
}
MagicMatrix-cheat演算法筆記 參考:http://openhome.cc/Gossip/AlgorithmGossip/OddArray.htm
.aspx
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm1.aspx.cs" Inherits="MagicMatrix.WebForm1" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title>九宮格(加強版)</title>
<style type="text/css">
.numberTextBox { text-align:center; }
</style>
</head>
<body>
<form id="form1" runat="server">
<div align="center">
<h1>
九宮格(加強版)</h1>
<asp:Panel ID="Panel1" runat="server" HorizontalAlign="Center">
請輸入一個大於等於 3 的奇數:
<asp:TextBox ID="TextBox1" runat="server" CssClass="numberTextBox" Width="73px" AutoPostBack="True"
OnTextChanged="Button1_Click"></asp:TextBox>
<asp:Button ID="Button1" runat="server" OnClick="Button1_Click" Text="顯示" /><br />
<asp:PlaceHolder ID="PlaceHolder1" runat="server"></asp:PlaceHolder>
<asp:Label ID="lblSum" runat="server"></asp:Label>
</asp:Panel>
<asp:Panel ID="panelError" Visible="false" HorizontalAlign="center" runat="server">
<asp:Label ID="lblMsg" runat="server"></asp:Label>
<br />
<asp:Button ID="btnReset" runat="server" Text="確定" OnClick="btnReset_Click" />
</asp:Panel>
</div>
</form>
</body>
</html>
.aspx.csusing System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
namespace MagicMatrix
{
public partial class WebForm1 : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
setFocus();
}
}
private void setFocus()
{
this.TextBox1.Focus();
ClientScript.RegisterStartupScript(this.GetType(),
"selectDefault",
"document.getElementById('" + TextBox1.ClientID + "').select();",
true);
}
private int[,] makeMatrix(int n)
{
int[,] m = new int[n, n];
int total = n * n;
int digit = 1;
int x, y;
for (y = 0; y < n; y++)
for (x = 0; x < n; x++)
m[y, x] = 0;
x = n / 2;
y = n - 1;
while (digit <= total)
{
m[y, x] = digit;
int nextX = (x + 1) % n;
int nextY = (y + 1) % n;
if (m[nextY, nextX] != 0)
{
y = y - 1;
}
else
{
x = nextX;
y = nextY;
}
digit++;
}
return m;
}
private void showMatrix(int[,] m)
{
Table t = new Table();
t.HorizontalAlign = HorizontalAlign.Center;
t.BorderStyle = BorderStyle.Solid;
int sum = 0;
for (int i = 0; i < m.GetLength(0); i++)
{
sum += m[i, 0];
TableRow row = new TableRow();
for (int j = 0; j < m.GetLength(1); j++)
{
TableCell cell = new TableCell();
cell.Text = m[i, j].ToString();
cell.BorderStyle = BorderStyle.Solid;
cell.HorizontalAlign = HorizontalAlign.Center;
cell.VerticalAlign = VerticalAlign.Middle;
cell.Width = 40;
cell.Height = 40;
row.Cells.Add(cell);
}
t.Rows.Add(row);
}
lblSum.Text = "總和 = " + sum;
this.PlaceHolder1.Controls.Clear();
this.PlaceHolder1.Controls.Add(t);
}
protected void Button1_Click(object sender, EventArgs e)
{
lblSum.Text = "";
try
{
int n = Convert.ToInt32(this.TextBox1.Text.Trim());
if (((n & 0x1) == 1) && (n >= 3))
{
int[,] matrix = makeMatrix(n);
showMatrix(matrix);
setFocus();
}
else
{
showError("請輸入一個大於等於 3 的奇數");
}
}
catch (Exception)
{
showError("數字格式錯誤!");
}
}
private void showError(string msg)
{
lblMsg.Text = msg;
this.Panel1.Visible = false;
this.panelError.Visible = true;
}
protected void btnReset_Click(object sender, EventArgs e)
{
this.panelError.Visible = false;
this.Panel1.Visible = true;
setFocus();
}
}
}
Notes-cheat.aspx
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm1.aspx.cs" Inherits="Ex7_2_Notes.WebForm1" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head id="Head1" runat="server">
<title>留言板範例</title>
<style>
#wrapper
{
margin: 1em 10%;
padding: 1em;
background-color: #FFC;
text-align: center;
}
table
{
margin: 1em auto;
text-align: left;
}
tr
{
vertical-align: middle;
text-align: left;
}
tr.top
{
vertical-align: top;
}
th
{
text-align: right;
}
td
{
text-align: left;
}
a
{
text-decoration: none;
}
a:link
{
color: #FFC;
}
a:visited
{
color: #FFC;
}
span.redStar
{
font-weight: bold;
color: Red;
}
</style>
<script type="text/javascript">
function ValidateCaptcha(sender, arg) {
var captcha1 = document.getElementById("<%= hfCaptcha.ClientID %>");
if (arg.Value == captcha1.value) {
arg.IsValid = true;
} else {
arg.IsValid = false;
}
}
</script>
</head>
<body>
<form id="form1" runat="server">
<div id="wrapper">
<h1>
留言板</h1>
<hr />
<asp:Panel ID="panelList" runat="server" HorizontalAlign="Center">
<asp:Button ID="btnPostNote" runat="server" Text="我要留言" OnClick="btnPostNote_Click" />
<asp:Table ID="tblNotes" runat="server">
</asp:Table>
</asp:Panel>
<asp:Panel ID="panelPost" runat="server" Visible="false" HorizontalAlign="Center">
<table>
<tr>
<th>
<span class="redStar">*</span> 姓名:
</th>
<td>
<asp:TextBox ID="txtName" runat="server"></asp:TextBox>
</td>
</tr>
<tr>
<th>
<span class="redStar">*</span> 信箱:
</th>
<td>
<asp:TextBox ID="txtEmail" runat="server" Width="350px"></asp:TextBox>
</td>
</tr>
<tr>
<th>
網站:
</th>
<td>
<asp:TextBox ID="txtWebSite" runat="server" Width="350px"></asp:TextBox>
</td>
</tr>
<tr valign="middle">
<th>
<span class="redStar">*</span>驗證碼:
</th>
<td>
<asp:TextBox ID="txtCaptcha" runat="server"></asp:TextBox>
<asp:Image ID="imgCaptcha" runat="server" ImageAlign="Top" ToolTip="請在驗證欄位內輸入圖中的文字" />
<asp:Button ID="btnCaptcha" runat="server" Text="重新產生" ToolTip="重新產生驗證碼"
onclick="btnCaptcha_Click" ValidationGroup="vgCaptcha" />
</td>
</tr>
<tr class="top">
<th>
<span class="redStar">*</span> 留言:
</th>
<td rowspan="2">
<asp:TextBox ID="txtNote" runat="server" Rows="6" TextMode="MultiLine" Width="350px"></asp:TextBox>
</td>
</tr>
<tr class="top">
<th>
<asp:Button ID="btnSubmit" runat="server" Text="送出" OnClick="btnSubmit_Click"
ValidationGroup="vgMain" /><br />
<asp:Button ID="btnCancel" runat="server" Text="取消" onclick="btnCancel_Click"
ValidationGroup="vgCancel" />
</th>
</tr>
</table>
<asp:HiddenField ID="hfCaptcha" runat="server" />
<asp:RequiredFieldValidator runat="server" ID="rfvName" ControlToValidate="txtName"
Display="None" ErrorMessage="請輸入姓名" ForeColor="Red" SetFocusOnError="True"
ValidationGroup="vgMain"></asp:RequiredFieldValidator>
<asp:RequiredFieldValidator runat="server" ID="rfvEmail" ControlToValidate="txtEmail"
ErrorMessage="請輸入 Email" ForeColor="Red" SetFocusOnError="True"
Display="None" ValidationGroup="vgMain"></asp:RequiredFieldValidator>
<asp:RegularExpressionValidator runat="server" ID="revEmail" ErrorMessage="請輸入正確的 Email!"
ValidationExpression="\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*" ControlToValidate="txtEmail"
ForeColor="Red" SetFocusOnError="True" Display="None"
ValidationGroup="vgMain"></asp:RegularExpressionValidator>
<asp:RegularExpressionValidator runat="server" ID="revWebSite" ErrorMessage="請輸入正確的網站 URL!"
ValidationExpression="http(s)?://([\w-]+\.)+[\w-]+(/[\w- ./?%&=]*)?" ControlToValidate="txtWebSite"
ForeColor="Red" SetFocusOnError="True" Display="None"
ValidationGroup="vgMain"></asp:RegularExpressionValidator>
<asp:RequiredFieldValidator runat="server" ID="rfvCaptcha" ControlToValidate="txtCaptcha"
Display="None" ForeColor="Red" ValidationGroup="vgMain"></asp:RequiredFieldValidator>
<asp:CustomValidator ID="cvCaptcha" runat="server" ControlToValidate="txtCaptcha"
ClientValidationFunction="ValidateCaptcha" ErrorMessage="驗證碼不正確!" ValidateEmptyText="true"
Display="None" ForeColor="Red" ValidationGroup="vgMain"></asp:CustomValidator>
<asp:RequiredFieldValidator ID="rfvNote" runat="server" ControlToValidate="txtNote"
ErrorMessage="請輸入留言" ForeColor="Red" SetFocusOnError="True" Display="None"
ValidationGroup="vgMain"></asp:RequiredFieldValidator>
<asp:ValidationSummary ID="ValidationSummary1" runat="server" ShowMessageBox="True"
ShowSummary="False" ForeColor="Red" ValidationGroup="vgMain" />
</asp:Panel>
</div>
</form>
</body>
</html>
.aspx.csusing System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Text;
using System.Drawing;
using System.Drawing.Imaging;
using System.Drawing.Text;
using System.IO;
namespace Ex7_2_Notes
{
public partial class WebForm1 : System.Web.UI.Page
{
private static string[] captchaDigits;
private static Random random = new Random();
private const int CAPTCHA_LEN = 6;
private const int CAPTCHA_WIDTH = 80;
private const int CAPTCHA_HEIGHT = 26;
private static List<NoteItem> notesList = new List<NoteItem>();
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
initCaptcha();
}
}
private void refreshCaptcha()
{
string captcha = getCaptchaString(CAPTCHA_LEN);
hfCaptcha.Value = captcha;
string captchaUrl = getCaptchaImage(captcha);
if (captchaUrl != null)
{
imgCaptcha.ImageUrl = captchaUrl;
}
}
private void initCaptcha()
{
captchaDigits = new string[35];
int i, j;
for (i = 1; i < 10; i++)
{
captchaDigits[i - 1] = i.ToString();
}
char c = 'a';
for (j = 1; j <= 26; i++, j++)
{
captchaDigits[i - 1] = c.ToString();
c++;
}
}
private string getCaptchaString(int len)
{
StringBuilder sb = new StringBuilder();
for (int i = 0; i < len; i++)
{
int n = random.Next(captchaDigits.Length);
sb.Append(captchaDigits[n]);
}
return sb.ToString();
}
private string getCaptchaImage(string s)
{
string imageUrl = "~/images/" + s + ".png";
string serverPath = HttpContext.Current.Server.MapPath("~/images");
string imageFileName = serverPath + "/" + s + ".png";
Bitmap bmp = new Bitmap(CAPTCHA_WIDTH, CAPTCHA_HEIGHT, PixelFormat.Format24bppRgb);
Graphics g = Graphics.FromImage(bmp);
g.TextRenderingHint = TextRenderingHint.AntiAlias;
g.Clear(Color.Orange);
g.DrawRectangle(Pens.White, 1, 1, CAPTCHA_WIDTH - 3, CAPTCHA_HEIGHT - 3);
g.DrawRectangle(Pens.Gray, 2, 2, CAPTCHA_WIDTH - 3, CAPTCHA_HEIGHT - 3);
g.DrawRectangle(Pens.Black, 0, 0, CAPTCHA_WIDTH, CAPTCHA_HEIGHT);
g.DrawString(s, new Font("Courier New", 12, FontStyle.Bold), SystemBrushes.WindowText, new PointF(4, 4));
// save to file
FileStream objFileStream = null;
try
{
objFileStream = new FileStream(imageFileName, FileMode.OpenOrCreate);
BinaryWriter objBinaryWriter = new BinaryWriter(objFileStream);
bmp.Save(objFileStream, ImageFormat.Png);
}
catch (Exception ex)
{
imageUrl = null;
}
finally
{
if (objFileStream != null) objFileStream.Close();
g.Dispose();
bmp.Dispose();
}
return imageUrl;
}
protected void btnPostNote_Click(object sender, EventArgs e)
{
panelList.Visible = false;
panelPost.Visible = true;
refreshCaptcha();
txtName.Focus();
}
protected void btnSubmit_Click(object sender, EventArgs e)
{
NoteItem item = new NoteItem(txtName.Text.Trim(), txtEmail.Text.Trim().ToLower(),
txtWebSite.Text.Trim(), txtNote.Text.Trim());
notesList.Add(item);
tblNotes.Rows.Clear();
foreach (NoteItem i in notesList)
{
tblNotes.Rows.Add(i.ToTableRow());
}
panelList.Visible = true;
panelPost.Visible = false;
}
protected void btnCaptcha_Click(object sender, EventArgs e)
{
refreshCaptcha();
txtCaptcha.Text = "";
txtCaptcha.Focus();
}
protected void btnCancel_Click(object sender, EventArgs e)
{
txtName.Text = "";
txtEmail.Text = "";
txtWebSite.Text = "";
txtCaptcha.Text = "";
txtNote.Text = "";
panelList.Visible = true;
panelPost.Visible = false;
}
}
}
ShoppingCart-cheat.aspx
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm1.aspx.cs" Inherits="ShopingCart.WebForm1" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head id="Head1" runat="server">
<title>加入購物車</title>
</head>
<body>
<h1 align="center">
選購商品加入購物車</h1>
<hr />
<form id="form1" runat="server">
<table align="center" border="0">
<tr align="left">
<th>
產品清單
</th>
<td>
</td>
<th>
我的購物車
</th>
</tr>
<tr align="left">
<td>
<asp:ListBox ID="lbProduct" runat="server" Rows="12" SelectionMode="Multiple" DataTextField="ProductName"
DataValueField="ProductID" Width="160px" ValidationGroup="product"></asp:ListBox>
</td>
<td align="center">
<asp:Button ID="btnAddAll" runat="server" Text="全部加入"
onclick="btnAddAll_Click" />
<br /><br />
<asp:Button ID="btnAdd" runat="server" Text="加入" OnClick="btnAdd_Click"
ValidationGroup="product" />
<br /><br />
<asp:Button ID="btnRemove" runat="server" Text="移除" OnClick="btnRemove_Click"
ValidationGroup="cart" />
<br /><br />
<asp:Button ID="btnRemoveAll" runat="server" Text="全部移除"
onclick="btnRemoveAll_Click" />
</td>
<td>
<asp:ListBox ID="lbCart" runat="server" Rows="12" SelectionMode="Multiple" DataTextField="ProductName"
DataValueField="ProductID" Width="160px" ValidationGroup="cart"></asp:ListBox>
</td>
</tr>
</table>
<asp:RequiredFieldValidator ID="rfvProduct" runat="server"
ErrorMessage="請從產品清單之中至少選擇一項產品!" ControlToValidate="lbProduct" Display="None"
SetFocusOnError="True" ValidationGroup="product"></asp:RequiredFieldValidator>
<asp:RequiredFieldValidator ID="rfvCart" runat="server"
ControlToValidate="lbCart" Display="None" ErrorMessage="請從購物車之中至少選擇一項產品!"
SetFocusOnError="True" ValidationGroup="cart"></asp:RequiredFieldValidator>
<asp:ValidationSummary ID="ValidationSummary1" runat="server"
ShowMessageBox="True" ShowSummary="False" ValidationGroup="product" />
<asp:ValidationSummary ID="ValidationSummary2" runat="server"
ShowMessageBox="True" ShowSummary="False" ValidationGroup="cart" />
</form>
</body>
</html>
.aspx.csusing System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
namespace ShopingCart
{
public partial class WebForm1 : System.Web.UI.Page
{
private List<ProductVO> listProd; // 產品清單
private List<ProductVO> listCart; // 購物清單
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
loadProduct();
}
}
/// <summary>
/// 從資料庫載入產品
/// </summary>
private void loadProduct()
{
ProductDAO dao = new ProductDAO();
listProd = dao.FindAll();
lbProduct.DataSource = listProd;
lbProduct.DataBind();
Session["ProductList"] = listProd;
listCart = new List<ProductVO>();
Session["ShoppingCart"] = listCart;
updateButtonState();
}
/// <summary>
/// 更新按鈕的狀態
/// </summary>
private void updateButtonState()
{
btnAdd.Enabled = btnAddAll.Enabled = (listProd != null) && (listProd.Count > 0);
btnRemove.Enabled = btnRemoveAll.Enabled = (listCart != null) && (listCart.Count > 0);
}
/// <summary>
/// 移動
/// </summary>
/// <param name="lbSrc">來源 ListBox</param>
/// <param name="listSrc">來源清單</param>
/// <param name="lbDst">目的地 ListBox</param>
/// <param name="listDst">目的地清單</param>
private void moveSelectedItems(ListBox lbSrc, List<ProductVO> listSrc, ListBox lbDst, List<ProductVO> listDst)
{
List<ProductVO> xList = new List<ProductVO>();
int[] selected = lbSrc.GetSelectedIndices();
for (int i = 0; i < selected.Length; i++)
{
ProductVO vo = listSrc[selected[i]];
xList.Add(vo);
}
foreach (ProductVO vo in xList)
{
listSrc.Remove(vo);
listDst.Add(vo);
}
lbSrc.DataSource = listSrc;
lbSrc.DataBind();
lbDst.DataSource = listDst;
lbDst.DataBind();
lbDst.ClearSelection();
foreach (ProductVO vo in xList)
{
for (int i = 0; i < lbDst.Items.Count; i++)
{
if (lbDst.Items[i].Value.Equals(vo.ProductID))
{
lbDst.Items[i].Selected = true;
}
}
}
}
/// <summary>
/// 按下加入按鈕
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
protected void btnAdd_Click(object sender, EventArgs e)
{
listProd = (List<ProductVO>)Session["ProductList"];
listCart = (List<ProductVO>)Session["ShoppingCart"];
moveSelectedItems(lbProduct, listProd, lbCart, listCart);
Session["ProductList"] = listProd;
Session["ShoppingCart"] = listCart;
updateButtonState();
}
/// <summary>
/// 按下移除按鈕
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
protected void btnRemove_Click(object sender, EventArgs e)
{
listProd = (List<ProductVO>)Session["ProductList"];
listCart = (List<ProductVO>)Session["ShoppingCart"];
moveSelectedItems(lbCart, listCart, lbProduct, listProd);
Session["ProductList"] = listProd;
Session["ShoppingCart"] = listCart;
updateButtonState();
}
/// <summary>
/// 按下全部加入按鈕
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
protected void btnAddAll_Click(object sender, EventArgs e)
{
for (int i = 0; i < lbProduct.Items.Count; i++)
{
lbProduct.Items[i].Selected = true;
}
btnAdd_Click(sender, e);
}
/// <summary>
/// 按下全部移除按鈕
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
protected void btnRemoveAll_Click(object sender, EventArgs e)
{
for (int i = 0; i < lbCart.Items.Count; i++)
{
lbCart.Items[i].Selected = true;
}
btnRemove_Click(sender, e);
}
}
}
SqlQuery-cheat.aspx
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm1.aspx.cs" Inherits="SqlQuery.WebForm1" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head id="Head1" runat="server">
<title>SQL 查詢</title>
<style type="text/css">
#wrapper { margin:1em auto; padding:1em; width:900px; background-color:#FFC; text-align:center; }
#input { margin: 0 auto; text-align:left; }
#buttons, #result { margin: 1em auto;}
table { margin: 0 auto; text-align:left; }
tr:nth-child(odd) { background-color:#eeedfc; }
tr:nth-child(even) { background-color:#eefcee; }
tr:first-child { background-color:#e7e7e7; }
td, th { margin:4px; padding:4px; }
th { text-align:center }
</style>
</head>
<body>
<form id="form1" runat="server">
<div id="wrapper">
<h1>SQL 指令練習</h1>
<hr />
<div id="input">
<asp:TextBox ID="txtSQL" runat="server" Rows="10" TextMode="MultiLine"
Width="100%"></asp:TextBox>
</div>
<div id="buttons">
<asp:Button ID="btnExecute" runat="server" Text="執行" OnClick="btnExecute_Click" ToolTip="執行 INSERT, UPDATE, DELETE" />
<asp:Button ID="btnQuery" runat="server" Text="查詢" OnClick="btnQuery_Click" ToolTip="執行 SELECT" />
</div>
<div id="result">
<asp:PlaceHolder ID="phResult" runat="server"></asp:PlaceHolder>
</div>
</div>
</form>
</body>
</html>
.aspx.csusing System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data;
using System.Data.SqlClient;
using System.Drawing;
namespace SqlQuery
{
public partial class WebForm1 : System.Web.UI.Page
{
private const string ConnStrDatabase1 =
@"Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\Database1.mdf;Integrated Security=True;User Instance=True";
protected void Page_Load(object sender, EventArgs e)
{
}
/// <summary>
/// 顯示錯誤訊息
/// </summary>
/// <param name="msg"></param>
private void showError(string msg)
{
phResult.Controls.Clear();
Label b = new Label();
b.Text = msg;
b.ForeColor = Color.Red;
phResult.Controls.Add(b);
}
/// <summary>
/// 顯示執行結果
/// </summary>
/// <param name="msg"></param>
private void showResult(string msg)
{
phResult.Controls.Clear();
Label b = new Label();
b.Text = msg;
b.ForeColor = Color.Blue;
phResult.Controls.Add(b);
}
/// <summary>
/// 按下『執行』按鈕,執行 INSERT, UPDATE, DELETE
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
protected void btnExecute_Click(object sender, EventArgs e)
{
string sql = txtSQL.Text.Trim();
try
{
using (SqlConnection conn = new SqlConnection(ConnStrDatabase1))
{
SqlCommand cmd = new SqlCommand(sql, conn);
conn.Open();
int n = cmd.ExecuteNonQuery();
showResult("執行結果:" + n);
conn.Close();
}
}
catch (Exception ex)
{
showError(ex.ToString());
}
}
/// <summary>
/// 按下『查詢』按鈕,執行 SELECT
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
protected void btnQuery_Click(object sender, EventArgs e)
{
string sql = txtSQL.Text.Trim();
try
{
using (SqlConnection conn = new SqlConnection(ConnStrDatabase1))
{
SqlCommand cmd = new SqlCommand(sql, conn);
conn.Open();
SqlDataAdapter ada = new SqlDataAdapter(cmd);
DataSet ds = new DataSet();
ada.Fill(ds);
phResult.Controls.Clear();
foreach (DataTable table in ds.Tables)
{
Label space = new Label();
space.Text = "<p> </p>";
phResult.Controls.Add(space);
GridView gv = new GridView();
gv.DataSource = table;
gv.DataBind();
phResult.Controls.Add(gv);
}
}
}
catch (Exception ex)
{
showError(ex.ToString());
}
}
}
}
TicTacToe-cheat.aspx
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm1.aspx.cs" Inherits="TicTacToe.WebForm1" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title>井字遊戲</title>
<link href="StyleSheet.css" rel="stylesheet" type="text/css" />
</head>
<body>
<form id="form1" runat="server">
<asp:Panel ID="panelWrapper" runat="server" HorizontalAlign="center" Visible="true">
<asp:Panel ID="panelRegister" runat="server" HorizontalAlign="center" Visible="true">
<h1>Tic-Tac-Toe</h1>
<hr />
<h1>井字遊戲</h1>
<asp:Table ID="Table1" runat="server" HorizontalAlign="Center">
<asp:TableRow ID="TableRow1" runat="server" BackColor="Blue">
<asp:TableCell ID="TableCell1" runat="server" ForeColor="White">藍方姓名:</asp:TableCell>
<asp:TableCell ID="TableCell2" runat="server">
<asp:TextBox ID="txtBlue" runat="server" ValidationGroup="GameRegister" />
</asp:TableCell>
</asp:TableRow>
<asp:TableRow ID="TableRow2" runat="server" BackColor="Red">
<asp:TableCell ID="TableCell3" runat="server" ForeColor="White">紅方姓名:</asp:TableCell>
<asp:TableCell ID="TableCell4" runat="server">
<asp:TextBox ID="txtRed" runat="server" ValidationGroup="GameRegister" />
</asp:TableCell>
</asp:TableRow>
<asp:TableRow ID="TableRow3" runat="server">
<asp:TableCell ID="TableCell5" ColumnSpan="2" runat="server">
<asp:Button ID="btnPlay" Text="開始玩" OnClick="btnPlay_Click" runat="server"
ValidationGroup="GameRegister" />
<asp:Button ID="btnReset" Text="清除" OnClick="btnPlay_Click" runat="server" />
</asp:TableCell>
</asp:TableRow>
</asp:Table>
<asp:RequiredFieldValidator ID="rfvBlueName" runat="server" ControlToValidate="txtBlue"
ErrorMessage="請輸入藍方姓名!" Display="None" SetFocusOnError="true"
ValidationGroup="GameRegister" />
<asp:RequiredFieldValidator ID="rfvRedName" runat="server" ControlToValidate="txtRed"
ErrorMessage="請輸入紅方姓名!" Display="None" SetFocusOnError="true"
ValidationGroup="GameRegister" />
<asp:CompareValidator ID="cvNames" runat="server" ControlToValidate="txtBlue"
ControlToCompare="txtRed" Operator="NotEqual" ErrorMessage="藍方姓名與紅方姓名不可相同!"
Display="None" SetFocusOnError="True" ValidationGroup="GameRegister" />
<asp:ValidationSummary ID="vsRegister" runat="server" ForeColor="Red"
ShowSummary="false" ShowMessageBox="true" ValidationGroup="GameRegister" />
<asp:Label ID="lblMessage" runat="server" ForeColor="red"></asp:Label>
</asp:Panel>
<asp:Panel ID="panelPlay" runat="server" HorizontalAlign="center" Visible="false">
<p><asp:Label ID="lblPlayRun" runat="server" Font-Size="Larger" Text="第1回合"></asp:Label></p>
<asp:Label ID="lblHint" runat="server"></asp:Label>
<table class="solidBorder">
<tr>
<td><asp:Button ID="btn00" runat="server" OnClick="btn_Click" Width="40px" Height="40px"
Font-Bold="True" Font-Size="Larger" CommandArgument="0,0" /></td>
<td><asp:Button ID="btn01" runat="server" OnClick="btn_Click" Width="40px" Height="40px"
Font-Bold="True" Font-Size="Larger" CommandArgument="0,1" /></td>
<td><asp:Button ID="btn02" runat="server" OnClick="btn_Click" Width="40px" Height="40px"
Font-Bold="True" Font-Size="Larger" CommandArgument="0,2" /></td>
</tr>
<tr>
<td><asp:Button ID="btn10" runat="server" OnClick="btn_Click" Width="40px" Height="40px"
Font-Bold="True" Font-Size="Larger" CommandArgument="1,0" /></td>
<td><asp:Button ID="btn11" runat="server" OnClick="btn_Click" Width="40px" Height="40px"
Font-Bold="True" Font-Size="Larger" CommandArgument="1,1" /></td>
<td><asp:Button ID="btn12" runat="server" OnClick="btn_Click" Width="40px" Height="40px"
Font-Bold="True" Font-Size="Larger" CommandArgument="1,2" /></td>
</tr>
<tr>
<td><asp:Button ID="btn20" runat="server" OnClick="btn_Click" Width="40px" Height="40px"
Font-Bold="True" Font-Size="Larger" CommandArgument="2,0" /></td>
<td><asp:Button ID="btn21" runat="server" OnClick="btn_Click" Width="40px" Height="40px"
Font-Bold="True" Font-Size="Larger" CommandArgument="2,1" /></td>
<td><asp:Button ID="btn22" runat="server" OnClick="btn_Click" Width="40px" Height="40px"
Font-Bold="True" Font-Size="Larger" CommandArgument="2,2" /></td>
</tr>
</table>
<asp:Button ID="btnResult" runat="server" Text="看結果" Visible="false"
OnClick="btnResult_Click" />
<br />
<asp:Literal ID="litLog" runat="server"></asp:Literal>
</asp:Panel>
<asp:Panel ID="panelResult" runat="server" HorizontalAlign="center" Visible="false">
<table>
<tr>
<td class="textAlignRight">藍方勝: </td>
<td><asp:Label ID="lblBlueWins" runat="server"></asp:Label></td>
<td> 次 </td>
</tr>
<tr>
<td class="textAlignRight">紅方勝: </td>
<td><asp:Label ID="lblRedWins" runat="server"></asp:Label></td>
<td> 次 </td>
</tr>
<tr>
<td class="textAlignRight">平手: </td>
<td><asp:Label ID="lblDue" runat="server"></asp:Label></td>
<td> 次 </td>
</tr>
</table>
<asp:Button ID="btnReplay" runat="server" Text="再玩一次" OnClick="btnReplay_Click" />
<asp:Button ID="btnRestart" runat="server" Text="重新開始" OnClick="btnRestart_Click" />
</asp:Panel>
</asp:Panel>
</form>
</body>
</html>
.aspx.csusing System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Drawing;
using System.Text;
namespace TicTacToe
{
public partial class WebForm1 : System.Web.UI.Page
{
private const int MATRIX_DIM = 3; // 井字棋盤尺寸:3x3
private int turn = 1; // 輪到那一方? 0=藍方; 1=紅方
private int[,] matrix = null; // 井字棋盤
private Button[] buttons = null; // 井字棋盤中的按鈕
private string[] symbol = { "O", "X" }; // 雙方的符號 0=藍方(O); 1=紅方(X)
private Color[] color = { Color.Blue, Color.Red }; // 雙方顏色 0=藍方; 1=紅方
private int blueWins = 0; // 藍方贏的累計次數
private int redWins = 0; // 紅方贏的累計次數
private int runCount = 0; // 目前遊戲進行到第幾個回合?
private int stepCount = 0; // 本回合遊戲進行到第幾個步驟?
private StringBuilder log; // 本回合遊戲歷程紀錄
protected void Page_Load(object sender, EventArgs e)
{
buttons = new Button[]{btn00,btn01,btn02,
btn10,btn11,btn12,
btn20,btn21,btn22};
if (!IsPostBack)
{
resetAll();
}
else
{
restoreFromSession();
}
}
private void resetAll()
{
cleanup();
runCount = 0;
blueWins = 0;
redWins = 0;
txtBlue.Text = "";
txtRed.Text = "";
saveToSession();
}
private void saveToSession()
{
Session["matrix"] = matrix;
Session["turn"] = turn;
Session["stepCount"] = stepCount;
Session["runCount"] = runCount;
Session["blueWins"] = blueWins;
Session["redWins"] = redWins;
Session["log"] = log;
}
private void restoreFromSession()
{
matrix = (int[,])Session["matrix"];
turn = (int)Session["turn"];
stepCount = (int)Session["stepCount"];
runCount = (int)Session["runCount"];
blueWins = (int)Session["blueWins"];
redWins = (int)Session["redWins"];
log = (StringBuilder)Session["log"];
}
private void cleanup()
{
matrix = new int[MATRIX_DIM, MATRIX_DIM];
for (int i = 0; i < MATRIX_DIM; i++)
{
for (int j = 0; j < MATRIX_DIM; j++)
{
matrix[i, j] = -1;
}
}
for (int i = 0; i < buttons.Length; i++)
{
buttons[i].Text = " ";
buttons[i].BackColor = Color.White;
buttons[i].Enabled = true;
}
btnResult.Visible = false;
turn = 1;
stepCount = 0;
log = new StringBuilder();
litLog.Text = "";
}
private void disableCells()
{
for (int i = 0; i < buttons.Length; i++)
buttons[i].Enabled = false;
}
private void takeTurn()
{
stepCount++;
turn = 1 - turn;
if (turn == 0)
{
lblHint.Text = "輪到藍方(" + txtBlue.Text + ")";
lblHint.ForeColor = Color.Blue;
}
else
{
lblHint.Text = "輪到紅方(" + txtRed.Text + ")";
lblHint.ForeColor = Color.Red;
}
}
protected void btnPlay_Click(object sender, EventArgs e)
{
if (sender == btnPlay)
{
if (txtBlue.Text.Trim().Length < 1)
{
lblMessage.Text = "請輸入藍方姓名!";
}
else if (txtRed.Text.Trim().Length < 1)
{
lblMessage.Text = "請輸入紅方姓名!";
}
else
{
panelRegister.Visible = false;
panelPlay.Visible = true;
takeTurn();
runCount = 1;
lblPlayRun.Text = "第 " + runCount + " 回合";
}
}
else if (sender == btnReset)
{
resetAll();
}
saveToSession();
}
private int analysis()
{
for (int i = 0; i < 3; i++)
{
if ((matrix[i, 0] >= 0) && (matrix[i, 0] == matrix[i, 1]) &&
(matrix[i, 1] == matrix[i, 2]))
{
return matrix[i, 0];
}
}
for (int i = 0; i < 3; i++)
{
if ((matrix[0, i] >= 0) && (matrix[0, i] == matrix[1, i]) &&
(matrix[1, i] == matrix[2, i]))
{
return matrix[0, i];
}
}
if ((matrix[0, 0] >= 0) && (matrix[0, 0] == matrix[1, 1]) &&
(matrix[1, 1] == matrix[2, 2]))
{
return matrix[0, 0];
}
if ((matrix[0, 2] >= 0) && (matrix[0, 2] == matrix[1, 1]) &&
(matrix[1, 1] == matrix[2, 0]))
{
return matrix[0, 2];
}
return -1;
}
private void judge()
{
int n = analysis();
if (n >= 0)
{
if (n == 0)
{
lblHint.Text = "藍方勝!";
lblHint.ForeColor = Color.Blue;
blueWins++;
}
else
{
lblHint.Text = "紅方勝!";
lblHint.ForeColor = Color.Red;
redWins++;
}
btnResult.Visible = true;
disableCells();
}
else if (stepCount == 9)
{
lblHint.Text = "雙方平手!";
btnResult.Visible = true;
disableCells();
}
else
{
takeTurn();
btnResult.Visible = false;
}
}
private void logStep(int row, int col, Button btn)
{
log.Append("<br />步驟 " + stepCount + ":" +
row + "," + col + "," +
(turn == 0 ? "藍" : "紅") + "," +
symbol[turn]);
litLog.Text = log.ToString();
matrix[row, col] = turn;
btn.Enabled = false;
btn.Text = symbol[matrix[row, col]];
btn.BackColor = color[matrix[row, col]];
judge();
}
protected void btn_Click(object sender, EventArgs e)
{
Button btn = sender as Button;
if (btn == null) return;
char[] sep = { ',' };
string[] tokens = btn.CommandArgument.Split(sep);
int row = int.Parse(tokens[0]);
int col = int.Parse(tokens[1]);
logStep(row, col, btn);
saveToSession();
}
protected void btnResult_Click(object sender, EventArgs e)
{
panelPlay.Visible = false;
panelResult.Visible = true;
lblBlueWins.Text = blueWins.ToString();
lblRedWins.Text = redWins.ToString();
int due = runCount - (blueWins + redWins);
lblDue.Text = due.ToString();
}
protected void btnReplay_Click(object sender, EventArgs e)
{
panelResult.Visible = false;
panelPlay.Visible = true;
cleanup();
takeTurn();
runCount++;
lblPlayRun.Text = "第 " + runCount + " 回合";
saveToSession();
}
protected void btnRestart_Click(object sender, EventArgs e)
{
panelResult.Visible = false;
panelRegister.Visible = true;
resetAll();
saveToSession();
}
}
}
UnitConvert-OKhtml.aspx
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm1.aspx.cs" Inherits="UnitConvert.WebForm1" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title>單位轉換</title>
<style type="text/css">
div
{
text-align:center;
}
</style>
</head>
<body>
<form id="form1" runat="server">
<div>
<img src="tiger.jpg" alt="" align="right"/>
<h1>單位轉換</h1>
<h5 style="color:Red">(小數點第2 位以下四捨五入)</h5>
<hr />
<asp:DropDownList ID="DropDownList1" runat="server" AutoPostBack="True">
<asp:ListItem Value="0">攝氏溫度轉華氏溫度</asp:ListItem>
<asp:ListItem Value="1">華氏溫度攝氏溫度</asp:ListItem>
</asp:DropDownList>
<br />
<asp:Label ID="lb1" runat="server" Text="攝氏溫度"></asp:Label>
<asp:TextBox ID="tb1" runat="server"></asp:TextBox>
<asp:Label ID="lb2" runat="server" Text="→ 華氏溫度"></asp:Label>
<asp:TextBox ID="tb2" runat="server" ReadOnly="True"></asp:TextBox>
<br />
<asp:RequiredFieldValidator ID="RequiredFieldValidator1" runat="server"
ControlToValidate="tb1" ErrorMessage="RequiredFieldValidator">請輸入</asp:RequiredFieldValidator>
<br />
<asp:RangeValidator ID="RangeValidator1" runat="server" ControlToValidate="tb1"
ErrorMessage="RangeValidator" Type="Double">請輸入數字</asp:RangeValidator>
<br />
<asp:Button ID="Button1" runat="server" Text="轉換" onclick="Button1_Click" />
<br />
<span style="color:Green">
<asp:Literal ID="Literal1" runat="server"></asp:Literal>
</span>
</div>
</form>
</body>
</html>
.aspx.csusing System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
namespace UnitConvert
{
public partial class WebForm1 : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
string type = DropDownList1.SelectedValue;
tb1.Text = "";
tb2.Text = "";
if (type == "0")
{
lb1.Text = "攝氏溫度";
lb2.Text = "→ 華氏溫度";
Literal1.Text = "華氏溫度 = 攝氏溫度 * 9 / 5 + 32";
}
else
{
lb1.Text = "華氏溫度";
lb2.Text = "→ 攝氏溫度";
Literal1.Text = "攝氏溫度 = (華氏溫度 - 32 ) * 5 / 9";
}
}
protected void Button1_Click(object sender, EventArgs e)
{
double temp = double.Parse(tb1.Text);
string type = DropDownList1.SelectedValue;
if (type == "0")
{
tb2.Text = "" + Math.Round(temp * 9 / 5 + 32, 2);
}
else {
tb2.Text = "" + Math.Round((temp - 32) * 5 / 9, 2);
}
}
}
}




















