예제 #1
0
        private void viewRollCallDetailsBtn_Click(object sender, EventArgs e)
        {
            var selectedproperty = (KeyValuePair <long, string>)courseListLbox3.SelectedItem; // 获取已经选择的项目

            if (selectedproperty.Key == -1)                                                   //判断是否有数据
            {
                return;
            }

            var rollCallingDetailRow = this.rollCallingDetailGview3.SelectedRows[0];

            var kkno = selectedproperty.Key;

            var skno = Convert.ToInt64(rollCallingDetailRow.Cells["上课编号"].Value);

            //验证离线密码
            var offlineVerifyResault = BriefcaseControl.VerifyOfflinePasswd(kkno);

            if (!offlineVerifyResault)
            {
                MsgBox.ShowMsgBoxDialog("验证口令失败");

                return;
            }
            // 如果验证不通过 则提示密码错误 并返回 什么都不做.

            //显示 View StudentsForm 窗口.
            var viewStudentForm = new ViewStudentsForm(kkno, skno, false);

            if (!viewStudentForm.IsDisposed)   // 判断该窗口是否已经被释放

            {
                viewStudentForm.ShowDialog();
            }
        }
예제 #2
0
        private void returnBtn_Click(object sender, EventArgs e)
        {
            var dmTable = OfflineDataControl.GetDmDatatable(kkno, skno);

            classBriefcase = BriefcaseControl.GetBriefcase(kkno);

            if (isRollCalling)
            {
                foreach (var student in RollCallControl.CopyOfStudentList)
                {
                    var dmTableRows = dmTable.Select(string.Format("XSID = '{0}'", student.StudentId));

                    if (!dmTableRows.Any())
                    {
                        continue;
                    }

                    student.RollCallStatus = Convert.ToInt16(dmTableRows.First()["DKZT"]);

                    if (dmTableRows.First()["DMSJ1"] != DBNull.Value)  // 如果点名时间1不为空的话
                    {
                        student.ArriveTime = Convert.ToDateTime(dmTableRows.First()["DMSJ1"]);
                    }
                }

                Student.DmTable = dmTable;

                Student.ClassBriefcase = classBriefcase;
            }

            Close();
        }
예제 #3
0
        /// <summary>
        /// ///上传数据按钮函数 需要做以下几件事
        /// 1.验证密码(已经做完)
        /// 2.传入kkno 显示窗口提示本节课信息
        /// 3.传入kkno和skno 显示上课时间 点击确定之后 上传数据.
        /// 4.提示是否刷新指纹信息
        /// 5.传入kkno 刷新指纹信息.
        /// 其中 上传数据 和 刷新指纹信息需要显示进度条
        /// 刷新指纹信息要时间长一些. 建议单独放在线程中去做.
        /// 所有的事情应该全部在DataUploadControl中.
        /// 不要传Briefcase要不然打死你
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void uploadDataBtn_Click(object sender, EventArgs e)
        {
            var selectedproperty = (KeyValuePair <long, string>)courseListLbox3.SelectedItem; // 获取已经选择的项目


            if (selectedproperty.Key == -1)   //判断是否有数据
            {
                MsgBox.ShowMsgBoxDialog("没有数据");
            }

            var courseInfo = new CourseInfo(selectedproperty.Key);

            Settings.Default.UserId = courseInfo.TeacherNo; // 设置登录时的教师编号

            var rollCallingDetailRow = this.rollCallingDetailGview3.SelectedRows[0];

            var kkno = selectedproperty.Key;

            var skno = Convert.ToInt64(rollCallingDetailRow.Cells["上课编号"].Value);

            var skdate = Convert.ToString((rollCallingDetailRow.Cells["上课日期"].Value));

            var kkname = Convert.ToString(selectedproperty.Value);
            //验证离线密码
            var offlineVerifyResault = BriefcaseControl.VerifyOfflinePasswd(kkno);

            if (!offlineVerifyResault)
            {
                MsgBox.ShowMsgBoxDialog("验证口令失败");

                return;
            }
            // 如果验证不通过 则提示密码错误 并返回 什么都不做.
            //todo:上传数据的业务逻辑在这里编写即可 需要从界面里带出去的东西:1.上课编号2.课程编号 3.预计上课时间

            var logonForm = new LogOnForm(); //登录窗口

            logonForm.ShowDialog();          // 显示登录窗口

            var displayString = DataUploadControl.GenerateConfirmString(kkno, kkname, skno, skdate);

            var confirmResault = ConfirmBox.ShowConfirmBoxDialog("请确认要上传的课程信息:\n" + displayString);

            if (confirmResault == DialogResult.Cancel)
            {
                return;                                       //如果点击了取消 就取消上传课程.
            }
            //todo:在这里写上传数据的业务逻辑

            DataUploadControl.UploadOneClass(kkno, skno);

            MsgBox.ShowMsgBoxDialog(displayString + "\n\n上传完成");

            //dp_RefreshMainForm ();

            dp_BindDataSourceForThirdClassListBox(); //为第三个标签页中的左上角Listbox绑定数据源
        }
예제 #4
0
        /// <summary>
        /// 结束点名按钮函数
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void stopRollCallBtn_Click(object sender, EventArgs e)
        {
            /***********得到kkno和skno 然后验证离线密码***********/

            var selectedproperty = (KeyValuePair <long, string>)coursesListBox1.SelectedItem; // 获取已经选择的项目

            if (selectedproperty.Key == -1)                                                   //判断是否有数据
            {
                MsgBox.ShowMsgBoxDialog("没有数据");
            }

            var rollCallingDetailRow = classInfoGview1.SelectedRows[0];

            var kkno = selectedproperty.Key;

            var skno = Convert.ToInt64(rollCallingDetailRow.Cells["上课编号"].Value);

            var ydSkdate = Convert.ToString((rollCallingDetailRow.Cells["上课日期"].Value));

            var kkname = Convert.ToString(selectedproperty.Value);

            //验证离线密码
            var offlineVerifyResault = BriefcaseControl.VerifyOfflinePasswd(kkno);

            if (!offlineVerifyResault)
            {
                MsgBox.ShowMsgBoxDialog("验证口令失败");

                return;
            }

            /***********得到kkno和skno 然后验证离线密码***********/

            RollCallControl.SetOneCourseDidNotSubmit(kkno, skno);

            stopRollCallBtn.Enabled = false;

            RollCallControl.StopFingerprint(); // 先停指纹仪

            dp_ResetMainForm();                // 再重置窗口

            dp_DisableRollCallButtons();       //然后把按钮关掉.
        }
예제 #5
0
        private void manualBtn_Click(object sender, EventArgs e)
        {
            /***********得到kkno和skno 然后验证离线密码***********/

            var selectedproperty = (KeyValuePair <long, string>)coursesListBox1.SelectedItem; // 获取已经选择的项目

            if (selectedproperty.Key == -1)                                                   //判断是否有数据
            {
                MsgBox.ShowMsgBoxDialog("没有数据");
            }

            var rollCallingDetailRow = classInfoGview1.SelectedRows[0];

            var kkno = selectedproperty.Key;

            var skno = Convert.ToInt64(rollCallingDetailRow.Cells["上课编号"].Value);

            var ydSkdate = Convert.ToString((rollCallingDetailRow.Cells["上课日期"].Value));

            var kkname = Convert.ToString(selectedproperty.Value);

            //验证离线密码
            var offlineVerifyResault = BriefcaseControl.VerifyOfflinePasswd(kkno);

            if (!offlineVerifyResault)
            {
                MsgBox.ShowMsgBoxDialog("验证口令失败");

                return;
            }

            /***********得到kkno和skno 然后验证离线密码***********/

            RollCallControl.StopFingerprint();                   // 初始化完了之后再停指纹仪

            new ViewStudentsForm(kkno, skno, true).ShowDialog(); // 手动点名完了之后 copyofstudentlist里面已经存着新的数据了.



            var showStudentInformationDelegate = new RollCallControl.UpdateUserInterfaceDelegate(ShowStudentInformation);

            RollCallControl.StartRollCall(RollCallControl.CopyOfStudentList, showStudentInformationDelegate);
        }
예제 #6
0
        private void changeToLeaveEarly_Click(object sender, EventArgs e)
        {
            //先把Briefcase找出来
            //classBriefcase = BriefcaseControl.GetBriefcase (kkno);

            //然后把当前的学号找出来
            var studentId = Convert.ToString(studentsGridView.SelectedRows.First().Cells["学号"].Value);

            //然后更改当前的上课状态 显示的上课状态哦
            dp_ChangeDisplayStatus(sender);

            //然后获取点名表
            var dmTable = OfflineDataControl.GetDmDatatable(kkno, skno);

            //改点名表里的记录 这里改的就是数据了.
            OfflineDataControl.ChangeDmRecord(ref dmTable, studentId, 2, DateTime.Now, 1);

            //存点名表.
            BriefcaseControl.SaveDmTable(classBriefcase, dmTable);
        }
예제 #7
0
        /// <summary>
        /// 手动更改签到状态
        /// </summary>
        /// <param name="kkno">开课编号</param>
        /// <param name="skno">上课编号</param>
        /// <param name="isRollCalling">是否正在签到</param>
        public ViewStudentsForm(long kkno, long skno, bool isRollCalling)
        {
            InitializeComponent();

            this.skno = skno;

            this.kkno = kkno;

            var dmTable = OfflineDataControl.GetDmDatatable(kkno, skno);

            this.isRollCalling = isRollCalling; // 是否正在签到

            if (dmTable == null)
            {
                // 判断获取到的点名表是否为空
                //如果为空 则显示出上课编号和开课编号

                MsgBox.ShowMsgBoxDialog(string.Format("数据有误 请将以下信息提供给维护人员:\n" +
                                                      "上课编号:{0}\n" +
                                                      "开课编号:{1}", skno, kkno));

                Close();

                return;
            }

            var dmDisplayTable = OfflineDataControl.DmtableToDisplayTable(dmTable);

            studentsGridView.DataSource = dmDisplayTable;

            classBriefcase = BriefcaseControl.GetBriefcase(kkno);

            //调用一个或者几个函数函数 该函数应该:
            //1.传入 kkno  和 skno 返回该堂课的点名表
            //2.传入kkno和datatable 可以正常写入briefcase.
            //指纹点名的时候也应该这样.
            //这些函数应该在OfflineDataControl中.
        }
예제 #8
0
        /// <summary>
        /// 当指纹仪找到这个人的时候,程序需要调用List中的对象的该函数来进行签到操作.
        /// 将签到时间传进来 该函数会自己判断是否迟到 并写入Briefcase中.
        /// </summary>
        /// <param name="arriveTime">签到时间</param>
        public void SignIn(DateTime arriveTime)
        {
            var isLate = (arriveTime > ExpectedArriveTime);

            //判断是否迟到 并将到课状态更改成指定的状态
            RollCallStatus = (short)(isLate ? 1 : 0);

            ArriveTime = arriveTime;

            /****************************************************************************************************************************/
            //把标记该门课的表取出来
            //var classBriefcase = BriefcaseControl.GetBriefcase(kkno);

            //然后获取点名表
            //var dmTable = OfflineDataControl.GetDmDatatable ( kkno, skno );
            //2015年5月8日 效率问题, 这里的从硬盘中取表操作已经被替换了. 如果需要拿Briefcase和点名表,请直接去Student.Dmtable和Student.ClassBriefcase中取.
            /**************************************************************************************************************************/

            //改点名表里的记录 这里改的就是数据了.注意 这里改的是Student中的静态变量.
            OfflineDataControl.ChangeDmRecord(ref DmTable, StudentId, RollCallStatus, arriveTime, RollCallTimes);

            //存点名表.注意 这里改的是Student中的静态变量.
            BriefcaseControl.SaveDmTable(ClassBriefcase, DmTable);
        }
예제 #9
0
        private void radButton1_Click_1(object sender, EventArgs e)
        {
            var selectedproperty = (KeyValuePair <long, string>)coursesListBox1.SelectedItem; // 获取已经选择的项目

            if (selectedproperty.Key == -1)                                                   //判断是否有数据
            {
                MsgBox.ShowMsgBoxDialog("没有数据");
            }

            var rollCallingDetailRow = classInfoGview1.SelectedRows[0];

            var kkno = selectedproperty.Key;

            var skno = Convert.ToInt64(rollCallingDetailRow.Cells["上课编号"].Value);

            var ydSkdate = Convert.ToString((rollCallingDetailRow.Cells["上课日期"].Value));

            var kkname = Convert.ToString(selectedproperty.Value);

            //验证离线密码
            var offlineVerifyResault = BriefcaseControl.VerifyOfflinePasswd(kkno);

            if (!offlineVerifyResault)
            {
                MsgBox.ShowMsgBoxDialog("验证口令失败");

                return;
            }
            // 如果验证不通过 则提示密码错误 并返回 什么都不做.
            //todo:指纹点名的业务逻辑在这里编写即可 需要从界面里带出去的东西:1.上课编号2.课程编号 3.实际上课时间

            //把预定上课时间传出去
            var getRollCallTimeForm = new SetTimeForm(Convert.ToDateTime(ydSkdate));

            var getRollCallTimeResault = getRollCallTimeForm.ShowDialog(); // 显示设置时间窗口

            if (getRollCallTimeResault == DialogResult.Cancel)             // 如果点击了返回 那么就不要再往下走了.
            {
                return;
            }

            var actualRollCallTime = getRollCallTimeForm.GetActualRollCallTime();

            var skrecordList = OfflineDataControl.GetSktable(kkno);   // 将来需要把这个拿来更新上课表

            //var skrecord = (from c in skrecordList where c.SKNO == skno select c).First (); // linq  完了以后把第一条记录取出来(一共就有一条记录.)

            //FindIndex(a => a.SKNO == (long) sktableRow["SKNO"])

            var skrecordIndex = skrecordList.FindIndex(a => a.SKNO == skno);

            var skrecord = skrecordList[skrecordIndex];

            skrecord.SKZT = 3;

            skrecord.DMFS = 1;

            skrecord.SKDATE = actualRollCallTime;

            OfflineDataControl.SaveSkTable(skrecordList, kkno);  // 存上课表


            courseNameLbl2.Text = kkname;                                  // 课程名称 label内容

            expectedTeachingTimeLbl.Text = ydSkdate;                       // 预定上课时间 label内容

            teacherNameLbl2.Text = teacherNameLbl1.Text;                   // 教师姓名 label内容

            actualTeachingTimeLbl.Text = actualRollCallTime.ToString("f"); //实际上课时间内容

            var studentList = RollCallControl.Init(kkno, skno, actualRollCallTime);

            //对于RollCallControl来说 这个委托是用来更新界面的.具体怎么更新界面他不用管 所以不用改名
            var showStudentInformationDelegate =
                new RollCallControl.UpdateUserInterfaceDelegate(ShowStudentInformation);

            RollCallControl.StartRollCall(studentList, showStudentInformationDelegate);

            mainPageView.SelectedPage = startRollCallPage;

            dp_ResetMainForm();

            dp_EnableRollcallButtons();

            rollCallStudentListGv.DataSource = RollCallControl.CopyOfStudentList;


            //todo:接下来要做的事情:
            //1.打开指纹仪
            //2.识别出来的号码拿出来 放到Student List里查 查完了把Student对象扔到界面委托里显示.
            //3.用while(bool变量)控制结束签到
            //4.结束签到的时候直接closeUsb即可
            //写一个函数 传入更新界面的Delegate 该函数需要在一个新的线程里编写.
        }