上机实验7讲课教案

合集下载
相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

上机实验7

攀枝花学院实验报告

实验课程: Visual C#,NET程序设计实验项目: 上机实验9

实验日期:2015年6月2日

系:数学与计算机学院班级: 2013级计算机科学与技术姓名: 学号: 同组人: 指导教师:罗明刚成绩:

实验仪器设备,药品,器材:Microsoft visual studio 2010

实验原理:

1.熟悉visual 2010的基本操作方法.

1.认真阅读本章相关内容,尤其是案例.

2.实验前进行程序设计,完成源程序的编写任务.

3.反复操作,直到不需要参考教材,能熟练操作为止.

实验内容:

1.要求创建一个银行账户类,一个银行客户类,客户类有账户,从银行客户类派生出儿子

和父亲,分别对应的操作为存款和取款。在主程序中创建两个辅助线程,将存款取款操作分给辅助线程,观察两个线程并发操作的结果并分析。

2.在实验1 的基础上,采用lock对存款取款进行操作,分析多个线程运行的结果,并分析存在的问题并说明原因。

3.在实验2的基础上,对两个主线程同步,实现父亲存款后儿子取款,父亲再存款儿子再取款的操作,观察实验结果并分析原理。

ing System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.Threading;

namespace BankAccount

{

public class Account

{

private int banlance;

private object obj = new object();

private bool flag = false;

public int Banlance

{

get { return banlance; }

}

public Account(int banlance)

{

this.banlance = banlance;

}

public void Withdraw(int money)

{

if (flag == false)

Monitor.Wait(obj);

if (money <= banlance)

{

banlance -= money;

Console.WriteLine(string.Format("取钱成功: {0} , 余额为: {1}", money, banlance));

}

else

{

Console.WriteLine(string.Format("取钱失败: 余额不足"));

}

flag = false;

Monitor.Pulse(obj);

}

public void Deposit(int money)

{

if (flag == true)

Monitor.Wait(obj);

banlance += money;

Console.WriteLine(string.Format("存钱成功: {0} is deposited, 余额为:{1}", money, banlance));

flag = true;

Monitor.Pulse(obj);

}

}

public abstract class Customer

{

protected Account acc;

public Account Acc

{

get { return acc; }

}

public Customer(Account acc)

{

this.acc = acc;

}

public abstract void DoTransact(int money);

}

public class Son:Customer

{

public Son(Account acc)

: base(acc)

{

}

public override void DoTransact(int money)

acc.Withdraw(money);

}

}

public class Father : Customer

{

public Father(Account acc):base(acc)

{

}

public override void DoTransact(int money) {

acc.Deposit(money);

}

}

}

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.Threading;

namespace BankAccount

{

class Program

{

public static Son son;

public static Father father;

public static Random r = new Random();

static void Main(string[] args)

{

Account acc = new Account(0);

son = new Son(acc);

father = new Father(acc);

Thread threadSon = new Thread(new ParameterizedThreadStart(SonProc));

threadSon.Start(r);

Thread threadFather = new Thread(new ParameterizedThreadStart(FatherProc));

threadFather.Start(r);

}

public static void FatherProc(object obj)

相关文档
最新文档