實訓第二天
************************************************************************************************************************
今天是實訓的第二天,中午在教室小憩一會兒,醒來頭很疼(還想再睡)感覺到累了。
講的內容較昨天多,最讓人頭疼的是代碼部分的練習,繞來繞去思維有點亂了 思維亂了心情糟了,再循環下去就有可能導致個人“死機”(崩潰),所以要break下!
自己也明白知識是一點一點積累的 思路在亂的時候需要整理,可是在真正面對時我會真正靜下來嗎?這個也是一個考驗,來吧,我全都接受,我可以搞定的!相信自己!
控制檯成員這部分學到很多方法,
例如:
Console.Beep(1000, 200);//播放聲音通過控制檯揚聲器播放提示音,兩個參數(頻率,時間)更多的會在後面代碼中出現
練習
彈鋼琴小程序:
while (true)//完成無限的輸入按鍵
{
ConsoleKeyInfo cki = Console.ReadKey(true);//讀取按鍵
int mark;
if (int.TryParse(cki.KeyChar.ToString(), out mark))//判斷按鍵是否爲數字
{
if (mark > 0 && mark < 8)//判斷按鍵是否在1-7
{
Console.BackgroundColor = (ConsoleColor)mark;//設置色彩
for (int i = 1; i < mark; i++) //添加背景空格,達到1-7不同長度
{
Console.Write(" ");
}
Console.Beep(mark * 1000, 200);//播放聲音
Console.WriteLine(cki.KeyChar);//打印數字
}
}
}
C# 是強類型語言;因此每個變量和對象都必須具有聲明類型
字面量:在數值不能準確表達出數據類型時使用字面量
變量表示數值或字符串值或類的對象
變量是字段的一種類型。常數是另一種類型的字段,賦值後在任何情況下都不會發生更改。
四種命名法:
1匈牙利命名法TempBoolMark:Temp(屬性)+Bool(類型)+Mark(對象描述):
2駝峯命名法:printEmployeePaychecks();
3下劃線法命名:print_employee_paychecks();
4帕斯卡命名法是在命名的時候將首字母大寫string UserName;
在C#中,以帕斯卡命名法和駝峯命名法居多
數據類型
值類型(struct)本質是結構體,表示實際數據 將值存放在內存中 存儲在線程堆棧中
引用類型(class)本質是類,表示指向數據的引用 包含內存堆中對象的地址 存儲在託管堆中
中存放方法,而對象執行方法。 函數返回值是什麼類型 用什麼類型變量接收 consonleinfo ck = consonle.readkey();
console.wline(ck.key/keychar/Modifiers);
(aA/AA/讀鍵值shift)
readerkey(true/flase);/(1/11)
匿名類型與var:
var
在方法範圍中聲明的變量可以具有隱式類型 var。
隱式類型的本地變量是強類型變量(就好像您已經聲明該類型一樣),但由編譯器確定類型。
var i = 10;
int i = 10;
匿名類型
匿名類型提供了一種方便的方法,可用來將一組只讀屬性封裝到單個對象中,而無需首先顯式定義一個類型。類型名由編譯器生成,並且不能在源代碼級使用。這些屬性的類型由編譯器推斷。
var v = new { Amount = 108, Message = "Hello" };
在將匿名類型分配給變量時,必須使用 var 構造初始化該變量。這是因爲只有編譯器能夠訪問匿名類型的基礎名稱。
裝箱是值類型到 object 類型或到此值類型所實現的任何接口類型的隱式轉換。對值類型裝箱會在堆中分配一個對象實例,並將該值複製到新的對象中。拆箱反之;裝箱3步拆兩步 裝箱很耗資源儘量避免
類型轉換:
Parse
類型.Parse(string)
int i=int.Parse(“123”);
Convert.To類型
強類型轉換
int i=Convert.ToInt32(“123”);
Dynamic類型:
Visual C# 2010 引入了一個新類型 dynamic。 該類型是一種靜態類型,但類型爲 dynamic 的對象會跳過靜態類型檢查。 大多數情況下,該對象就像具有類型 object 一樣。 在編譯時,將假定類型化爲 dynamic 的元素支持任何操作。 因此,您不必考慮對象是從 COM API、從動態語言(例如 IronPython)、從 HTML 文檔對象模型 (DOM)、從反射還是從程序中的其他位置獲取自己的值。 但是,如果代碼無效,則在運行時會捕獲到錯誤。
練習
銀行系統,完成查詢餘額,轉帳,存款,取款:
using System.IO;
class Program
{
static void WriteLog(string content)//寫入日誌
{
File.AppendAllText(@"d:/log.txt",DateTime.Now.ToString("yyyy年MM月dd日 hh時mm分ss秒")+" "+content + "\r\n");
//寫入文件函數及獲取當前時間(格式)"\r\n"換行
}
static string Account = "1234";//賬號
static string Password = "111111";//密碼
static float SumMoney = 10000f;//總金額
static void Main()
{
while (true)
{
Console.Clear();//清屏
Console.ForegroundColor = ConsoleColor.Blue;//設置控制檯前臺顏色
Console.WriteLine("******歡迎使用銀行系統********");
Console.ResetColor();//控制檯恢復默認顏色
Console.WriteLine();
Console.WriteLine("請輸入帳號:");
string account = Console.ReadLine();//string類型
Console.WriteLine("請輸入密碼:");//掩碼處理
string password = "";
for (int i = 0; i < 6; i++)
{
ConsoleKeyInfo cki = Console.ReadKey(true);
//參數爲true只打印不多,如輸入1出現1 若flase則11
Console.Write("*"); //用*覆蓋密碼值
password += cki.KeyChar.ToString();
}
Console.WriteLine();
if (account == Account && password == Password)
{
WriteLog(account + "登錄成功!");
string readstr = "";
do
{
Console.Clear();//清屏
Console.WriteLine("1、取款 2、查詢餘額 3、存款 4、轉帳 5、退出");
readstr = Console.ReadLine();
switch (readstr)
{
case "1":
if (GetMoney())
{
WriteLog("取款成功!");
}
else
{
WriteLog("取款失敗!");
}
break;
case "2":
Console.WriteLine("餘額爲:{0}", SumMoney);
WriteLog("查詢餘額!");
break;
case "3":
if (SetMoney())
{
WriteLog("存款成功!");
}
else
{
WriteLog("存款失敗!");
}
break;
case "4":
break;
default:
break;
}
System.Threading.Thread.Sleep(3000);
} while (readstr != "5");//(5、退出),不在循環內
}
else
{
WriteLog(account + "登錄失敗!");
Console.WriteLine("帳號或者密碼錯誤!");
}
}
}
static bool GetMoney()
{
Console.WriteLine("請輸入取款金額:");
float money;
if (float.TryParse(Console.ReadLine(), out money))
{//將數字的字符串轉爲等效單精度浮點數字
if (money > SumMoney)
{
Console.WriteLine("你現在餘額爲:{0},已不足", SumMoney);
return false;//函數是bool類型
}
else
{
SumMoney = SumMoney - money;
Console.WriteLine("取款成功!");
return true;
}
}
else
{
Console.WriteLine("你的輸入有誤!");
return false;
}
}
static bool SetMoney()
{
Console.WriteLine("請輸入存款金額:");
float money;
if (float.TryParse(Console.ReadLine(), out money))
{
SumMoney = SumMoney + money;
Console.WriteLine("存款成功!你的餘額爲:{0}", SumMoney);
return true;
}
else
{
Console.WriteLine("你的輸入有誤!");
return false;
}
}
}
***************************************************************************