大一初学者 求c#编写考试考试流程的代码。
用 c# 的委托与事件来编写一个程序用来“模拟考试流程,有一个教师类Teacher、一个学生类Student,教师引发开始考试事件,学生开始考试,学生答题完毕引发答题完成事件,教师收卷。”该怎么写代码@?刚接触c#,晕晕的,无从下手。求帮忙。 --------------------编程问答-------------------- using System;
using System.Collections.Generic; using System.Text;
namespace DelegateEvent {
//定义委托
public delegate void delegateFinishExam(DateTime FinishiTime, Student student); public class Student {
//用委托定义事件
public event delegateFinishExam FinishExam;
private string name;
public Student(string name) {
this.name = name; } //答题
public void Testing(DateTime BeginTime) {
Console.WriteLine("{0}\t{1}\t开始答题...", name, BeginTime); }
//答题结束,引发考试完成事件 public void HandInPaper() {
Console.WriteLine("{0}答题完成", name); FinishExam(DateTime.Now, this); }
public override string ToString() {
return this.name; } } }
3)添加Teacher类,代码如下:
using System;
using System.Collections.Generic; using System.Text;
namespace DelegateEvent {
public delegate void DelegateStartExam(DateTime StartTime); public class Teacher {
public event DelegateStartExam StartExam; public void NotifyBeginExam() {
StartExam(DateTime.Now); } //收卷
public void AcceptPaper(DateTime acceptTime, Student student) {
Console.WriteLine("收{0}的考卷", student.ToString()); } } }
4)改写Program.cs的代码如下:
using System;
using System.Collections.Generic; using System.Text;
namespace DelegateEvent {
class Program {
static void Main(string[] args) {
Teacher teacher = new Teacher(); Student[] students = new Student[5]; int index = 0;
students[index++] = new Student("张三"); students[index++] = new Student("李四"); students[index++] = new Student("王五"); students[index++] = new Student("周六"); students[index++] = new Student("冯七"); foreach (Student tester in students)
{
//事件
teacher.StartExam += new DelegateStartExam(tester.Testing); tester.FinishExam += new delegateFinishExam(teacher.AcceptPaper); }
//引发开始答卷事件
teacher.NotifyBeginExam();
//引发完成答卷事件
students[1].HandInPaper(); } } }
--------------------编程问答-------------------- public delegate void delTest();
public event delTest test;
this.test +=delTest(学生考试);
老师发卷子()
{
this.test();
}
学生考试()
{
} --------------------编程问答--------------------
using System;--------------------编程问答-------------------- 谢谢大神回复~~~~~~~~~~~想问一楼!!!!!
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ConsoleApplication30
{
class Program
{
static void Main(string[] args)
{
Teacher t = new Teacher();
Student s = new Student();
t.sj += new Teacher.wt(s.答题);
t.sj += new Teacher.wt(t.收卷);
t.考试();
Console.ReadKey();
}
}
class Teacher
{
public delegate void wt();
public event wt sj;
public void 考试()
{
Console.WriteLine("考试了");
if (sj != null)
{
sj();
}
}
public void 收卷()
{
Console.Write("开始收卷");
}
}
class Student
{
public void 答题()
{
Console.WriteLine("开始考试");
Console.WriteLine("---------------");
Console.WriteLine("答题完成");
}
}
}
public delegate void delegateFinishExam(DateTime FinishiTime, Student student); 为什么是两个student? Console.WriteLine("{0}\t{1}\t开始答题...", name, BeginTime); } 中的"\t"是什么意思?
额外想问个问题,目前学c#好还是java、c?c#老师上课我都一头雾水,觉得要靠的是自己课后自学才能真正懂。 --------------------编程问答-------------------- 其实学好C好处还是挺多的,至于JAVA C#,JAVA比较火吧 --------------------编程问答-------------------- 挺有意思的~ --------------------编程问答--------------------
这是什么意思、?要怎么解决? --------------------编程问答-------------------- 感觉这个论坛挺活跃滴。。。不过这样回复好没有针对性。我被淹没在茫茫的回复中。。。话说,如果c#跟java或其他语言一起学,会好一点吗?还是会更乱。打好基础先 --------------------编程问答-------------------- 写个try catch抓住异常 我不是大神 我也是初级的 刚学为了工作 慢慢来吧 可以加我QQ 我给你发几个视频资料 自己学吧 老师只是领进门 修行还得靠个人~~~ --------------------编程问答-------------------- 我QQ449758996 --------------------编程问答--------------------
class Program
{
static void Main(string[] args)
{
new Teacher() { Name = "teacher" }
.StartExam(
new List<Student> {
new Student { Name = "studentA",Time= 1} ,
new Student { Name = "studentB",Time= 2} ,
new Student { Name = "studentC",Time= 3} ,
new Student { Name = "studentD",Time= 4}
});
Console.ReadKey();
}
}
class Teacher
{
public string Name { get; set; }
internal IList<Student> Students { get; set; }
internal event Action _finishevent;
public Teacher()
{
if (_finishevent == null)
_finishevent = new Action(delegate()
{
if (this.Students.All(p => p._isFinish))
Console.WriteLine("所有学生答题完毕,学生试卷被收回..");
});
}
/// <summary>
/// 开始考试
/// </summary>
/// <param name="s">考试的学生</param>
internal void StartExam(List<Student> s)
{
this.Students = s;
Console.WriteLine("{0}老师,开始监考", this.Name);
s.ForEach(delegate(Student student)
{
new Thread(new ThreadStart(delegate
{
student.Replay(_finishevent);
})).Start();
});
}
}
class Student
{
public string Name { get; set; }
/// <summary>
/// 答题所需时间
/// </summary>
public int Time { get; set; }
internal bool _isFinish = false;
/// <summary>
/// 学生答题(答完题后通知老师收卷)
/// </summary>
/// <param name="finish">收卷委托</param>
internal void Replay(Action finish)
{
Console.WriteLine("{0}:开始答题...", this.Name);
Thread.Sleep(this.Time * 1000);
Console.WriteLine("{0}题目答完了..", this.Name);
this._isFinish = true;
finish();
}
}
随手写了一个 --------------------编程问答-------------------- thanks~~
补充:.NET技术 , 非技术区