当前位置:编程学习 > C#/ASP.NET >>

大一初学者 求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技术 ,  非技术区
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,