C++课程设计报告计算机二级考试培训班报名模块.doc
.net技术基础课程设计 (论文)项目名称:计算机二级考试培训班报名模块 学号姓名: 专业班级: 计算机科学与技术08802 指导教师: 完成日期: 2010年12月24日 目 录一、系统需求分析1二、系统设计22.1、系统功能分析22.2、系统流程图3三、数据库设计5四、详细设计74.1、主窗体设计74.2、注册窗体设计84.3、登录窗体94.4、管理员管理窗体设计13五、总结20六、致谢22七、参考文献23一、系统需求分析 “计算机二级考试培训班报名模型”是以报名为主,宣传和文件管理为辅的一个项目。由此,我们可以推断出它的大致要求:(1)由于项目使用对象较多,因此需要较好的权限管理;(2)原始数据要修改方便;(3)便捷的数据查询;(4)在相应的权限下,删除数据简单,数据稳定性较好;(5)网页框架合理,方便用户便捷浏览。二、系统设计2.1、系统功能分析系统开发的总体任务是实现学生信息关系的系统化,规范化和自动化。此项目中有三种权限选择:a、普通成员;b、学员;c、管理员。其中普通成员是由注册页面生成的,其权限最低,信息最为简单,因此单独存放在一个数据表结构中;学员权限是由管理员从普通成员中进行信息补充后,转入另一个数据表结构中生成的,此权限为已经报名的成员享有;管理员权限是建立数据库,进行数据初步填充的时候直接固定下来的,在项目中没有对该权限进行信息修改操作的环境。该项目需要完成的功能有:·成员登陆:普通成员由于信息简单,未生成ID,因此由其注册的用户名直接进行登陆;而学员和管理员都是用其数字ID账号登陆。这导致了两个用户群的登陆界面差异。·成员权限识别:在登陆的时候,如果是管理员,则直接跳转到管理员管理界面,如果是普通成员或者学员,则直接在登陆界面下方的panel容器中显示其具体信息。·成员信息管理:成员信息管理包括成员查询、成员删除、成员信息修改、普通成员权限提升等方面。这些功能都是在管理员管理界面中集中操作。对上述各功能进行集中、分块、按照结构化程序设计的要求。图2-1项目功能模块图2.2、系统流程图系统流程图又叫事务流程图,是在计算机事务处理应用进行系统分析时常用的一种描述方法(另一个是数据流图),它描述了计算机事务处理中从数据输入开始到获得输出为止,各个处理工序的逻辑过程。图2-2系统流程图三、数据库设计本项目的数据库中包含三个用户表,分别为普通成员表:Pre_Member表、管理员和学员表:Member表和班级表:Class表。图3-1报名系统数据库流程图用户信息管理系统数据库中各个表格的设计结果如下面的几个表所示。每个表表示在据库中的一个数据表。图3-2普通成员信息表Pre_Member表 普通成员信息表包括Name和Password数据项,分别存放用户名和密码。当注册时,注册成功的信息将存放在此表中,权限都为普通成员权限。并且,在权限提升的时候,初始数据将来源于此表。图3-3学员和管理员信息表Member表 学员和管理员信息表包括ID、Name、Password、Tel、Fee、Book、Class、和Pre_Teacher共8个数据项,其中ID为主键,分别存放数字ID账号、用户名、密码、电话号码、培训费缴费与否(为1时代表已缴,为0时代表未缴)、教材费缴费与否(为1时代表已缴,为0时代表未缴)、班级号、前任老师。ID账号前两位为10时代表学员权限,为50时代表管理员权限。图3-4班级表Class表 班级表包括Tept、P_Fee、Book_Fee、Teacher、Class共五个数据项,其中Class为主键,分别存放系别名、培训费、教材费、任课老师、班级号。此表为Member表的拓展表,可以减少Member表的冗余度。该表的信息为固定的,任何成员不得修改。四、详细设计4.1、主窗体设计本窗体为主窗体,ID为Main_Form。本窗体主要由四个Button按钮和两个label框组成,分别为链接注册窗体的注册按钮、链接登录窗体的登录按钮、链接网页浏览但是实际未启用的非登录浏览按钮、窗体退出功能实现的退出按钮、显示窗体总标题的label框和显示现在时间的label框。由于本窗体为主窗体,因此我设计得尽量简洁,并将按钮和背景相合,尽量使两者之间的存在不发生视觉冲突。且在本窗体中,登录按钮的Index值最小为0,因此登录按钮为第一启动按钮。图4-1主窗体效果截图 4.2、注册窗体设计本窗体生成由主窗体的注册按钮的单击事件发生,ID为Register_Form。由于本项目设计时,就计划好只支持普通成员注册,学员的权限生成由管理员对普通成员的信息补充操作进行,因此本注册窗口的信息输入就变得很少,所实现功能中,大多为注册信息验证。本窗体中,提交按钮的功能为将信息验证一遍,若有不合规则的,则提示相应错误提示,无错误之后,将信息提交给数据库的Pre_member表中,并关闭本窗口;清空选项按钮的功能为清空窗体中三个TextBox的Text属性值;取消按钮的功能为关闭当前窗口。图4-2注册窗体效果截图4.3、登录窗体本窗口为注册窗体,ID为Login_Form。由于本项目中用户群体因数据库表的结构而被分为两个群体:普通用户群体与学员和管理员群体,所以,两个群体登录的方式有所不同。故,本项目在登陆界面上安排了两个按钮,用以对用户群体的认证,并对窗体控件的部分属性进行修改,其效果分别如图4.3.1和图4.3.2所示。而在窗体下方的登录按钮点击后,立马先与相对应的表进行数据验证。取消按钮点击后,关闭当前窗体。图4-3学员或管理员登录界面效果截图图4-4普通成员登录界面效果截图在登陆按钮的点击事件触发时,课分为两种情况:a、当权限为管理员时,窗体跳转到管理员管理界面,当前窗体隐藏;b、当权限为普通成员或者学员的时候,触发登录界面下的panel容器Hide属性为FALSE,呈显现状态,并对该窗体的大小进行Y轴方向拉长,使得panel容器出现在窗体中,并将普通成员或者学员的信息输出在panel容器中。当权限为普通成员的时候,效果如图4.3.3所示;当权限为学员的时候,效果如图4.3.4所示。图4-5普通用户登录成功效果截图 由于普通成员的属性值不足以填满整个panel容器中控件,则把其余的所有控件Text属性值清空。又由于此处是查询,并不作修改操作,故容器中所有控件(注销按钮除外)的Visible属性或Enable属性值为FALSE。图4-6学员登录成功效果截图由于设计时认为一次只可以登录一个人,故在用户登录后,若是管理员的话,登陆界面会隐藏起来,若是普通成员或者学员的时候,原登录界面的所有控件Visible属性为FALSE,呈灰色状态,使整个界面呈不可登录状态,起到限制登录的效果。同时,与之对应的,在panel容器中加入一个注销按钮相应。注销按钮的单击事件为将panel容器隐藏,窗体大小Y轴方向缩短,并恢复原登录界面控件的Visible属性值,并将输入密码的TextBox的Text属性值清空,使整个界面呈可登录状态。这样便实现了一次只可以登录一个人的目的。4.4、管理员管理窗体设计本窗体为管理员窗体,ID为Member_Form。本窗体的主界面包括一个MenuTrip控件、两个DataGridView控件、六个Button控件和一个label控件,初始效果如图4.4.1所示。图4-7管理员窗体初始效果截图在单击成员查询按钮时,会将两个DataGridView控件中的显示Member表信息的DGVMember隐藏属性呈显示状态,显示Pre_member表信息的DGVPre_Member隐藏属性呈隐藏状态,并刷新一次DataGridView控件中显示的内容。成员删除按钮时直接删除右侧DataGridView中所显示的数据项中被选中的一项,并刷新一次DataGridView控件中显示的内容。信息修改按钮在单击后,窗体在Y轴方向拉长,被隐藏在窗体下方的panel容器2隐藏属性呈显示状态,并将DataGridView控件中被选中项的具体信息输出于其中。权限修改按钮的作用与成员查询按钮的恰恰相反。退出按钮的作用为关闭当前窗体。上述的五个Button被放置在panel容器1中。图4-8 panel容器2在单击DGVMember数据项后效果截图Panel容器1下方的label框加入了Timer控件,用以显示当前具体的日期时间。而DataGridView控件下方的打开按钮的功能只是单纯的对Panel容器显示与否的控制:在初始时,panel容器呈隐藏状态,按钮置于600*450大小窗体的右下角,Text属性为打开;当单击此按钮,或触发panel容器呈显示状态时,打开按钮会下移到已经拉伸到600*600大小的窗体的右下角,Text属性为关闭;当再次单击此按钮时,此按钮恢复原态,其效果如图4.4.1和图4.4.2所示。当点击权限提升按钮,导致DGVPre_Member呈显示状态后,单击其中数据项后的效果如图4.4.3所示。图4-9 panel容器2在单击DGVPre_Member数据项后效果截图在panel容器2中,我们可以对选中数据项信息进行一定的修改,在点击修改按钮后,将提交数据给数据库表中。若此时所提交的数据原先属于Pre_member表中时,程序会作权限提升处理,将该数据项完善后的数据插入到Member表中,原表中数据不变,也就是说该用户拥有了两个身份:普通成员身份和学员身份。修改操作完成时,对DataGridView中内容进行刷新,修改按钮单击事件核心代码如下:private void BtnUpdateGet_Click(object sender, EventArgs e) bool DGVVisible = DGVMember.Visible; if (DGVVisible = true) int m_Member_Form = 0, n_Member_Form = 0; if (comboBook.Text = "已缴") m_Member_Form = 1; else if (comboBook.Text = "未缴") m_Member_Form = 0; else MessageBox.Show("请对培训费缴费与否选项进行正确选择!"); if (comboFee.Text = "已缴") n_Member_Form = 1; else if (comboFee.Text = "未缴") n_Member_Form = 0; else MessageBox.Show("请对书本费缴费与否选项进行正确选择!"); string sql = string.Format("Update Member set Tel='0',Fee='1',Book='2',Class='3',Pre_Teacher='4'where ID='5'", TxtTel.Text.Trim(), m_Member_Form, n_Member_Form, comboClass.Text.Trim(), textBox4.Text.Trim(), TxtID.Text.Trim(); SqlCommand cmd = new SqlCommand(sql, DBhelper.connection); DBhelper.connection.Open(); int count = cmd.ExecuteNonQuery(); DBhelper.connection.Close(); if (count > 0) MessageBox.Show("恭喜您,修改成功!"); this.memberTableAdapter.Fill(_Sience_ExamDataSet.Member); else MessageBox.Show("对不起,修改失败!"); else if (TxtID.Text = "") MessageBox.Show("请将ID账号正确输入!"); int m_Member_Form = 0, n_Member_Form = 0; if (comboBook.Text = "已缴") m_Member_Form = 1; else if (comboBook.Text = "未缴") m_Member_Form = 0; else MessageBox.Show("请对培训费缴费与否选项进行正确选择!"); if (comboFee.Text = "已缴") n_Member_Form = 1; else if (comboFee.Text = "未缴") n_Member_Form = 0; else MessageBox.Show("请对书本费缴费与否选项进行正确选择!"); string sql = string.Format("Insert into Member values(0,'1','2','3',4,5,'6','7')", int.Parse(TxtID.Text.Trim(), TxtName.Text.Trim(), DGVPre_Member.SelectedRows0.Cells1.Value.ToString(), TxtTel.Text.Trim(), m_Member_Form, n_Member_Form, comboClass.Text.Trim(), textBox4.Text.Trim(); SqlCommand cmd = new SqlCommand(sql, DBhelper.connection); DBhelper.connection.Open(); int count = cmd.ExecuteNonQuery(); DBhelper.connection.Close(); if (count > 0) MessageBox.Show("恭喜您,权限提升成功!"); else MessageBox.Show("对不起,权限提升失败!"); 我觉得这样两个表中都存在一个人的数据信息在此项目中不会出现什么冲突,故不作删除操作。 在菜单栏中,成员管理中的选项与其下方panel容器1中五个按钮的触发事件一致;网站管理中的功能本来是连接水晶报表和网页浏览的,但是由于水平问题,暂未实现;其后的帮助选项内有关于选项,单击后,弹出窗体如图4.4.4所示,显示的为此版本问题,制作一个玩笑罢了;至于其后的退出选项,效果与退出按钮无二。图4-10关于选项弹出窗体效果截图五、总结回顾该系统从选题,到调研、需求分析、设计、编码实现、测试等,论文的撰写,这系列连贯的过程,感想颇多,收获也很多。大致的总结几点,如下:1设计开发一个软件,首先要了解所涉及到行业的现状,一定要想办法进行行业调研,从不同途径获取该行业的专业知识。合理安排系统设计开发时间,进行实际开发会发现需求分析与系统设计占主要的时间,如果前面的工作做好了,编码实现占用的时间很短。所以我们要借助软件工程的思想-对软件开发过程进行控制。2. 在开发一个系统时,前期的分析准备工作非常的重要。对于系统的需求要明确,这样才能做到有的放矢。特别是对于系统中数据的存储和重要算法的设计,设计的不好会出现大量的冗余,不仅浪费存储空间,还影响查询效率。3.在设计的初期,对一个功能模块的设计,要想出两种或两种以上方案,这样可以进行比较,从而获得更佳的设计方案,设计开发过程中一定要吸取经验教训,避免返工。尤其是一些重要算法或功能。在对具体实现功能模块进行编程时,要养成良好的加注释的习惯,这样的话不仅能理清思路,而且可以为以后的调试程序带来很大的方便。5. 懂得充分利用网络资源,因为实地调研的时间是非常有限的,所以需求分析中大部分分析结构都是在我阅读专业书籍,网络资料后得出的。由于在外面工作以及其他原因,我无法借到专业书籍,只好在浩瀚的网络中寻找我所需要的资料,这无形当中培养了我通过网络获取资料信息的能力。由于本人是初次开发系统,在知识、经验方面都存在着不足。另外,在整个开发的过程中,时间也比较仓促。因此,该系统必然会存在一些缺陷和不足。谨请老师提出宝贵的意见。六、致谢在这里我应该首先感谢培养我的学校,特别是计算机科学与技术系的全体领导和老师们,感谢他们在四年的大学生活、学习中对我的教育、指导和关心,使我能顺利的完成四年的大学学习七、参考文献1 孙三才,许熏伊.精通C#与ASP.net程序设计M.北京:中国铁道出版社,2003:37-46 2 华国栋,刘文予.基于ADO.NET的数据库访问及其性能优化J.电脑知识与技术学术交流,2007(09):20-213 朱印红,苏振巍. ASP.NET+SQL Serve网站模块化开发全程实录. 北京:清华大学出版社,2009.74 常永英.ASP.NET程序设计教程:C#版.北京:机械工业出版社,2009.9.论文成绩评定综合成绩评定: (百分制)论 文 等 级: 指导教师签字: 检 查 时 间: 08本.net技术基础课程设计网站验收情况记载表系 别: 计算机系 课程名称:.net技术基础课程设计学生姓名: 徐聪 指导教师: 张海燕 提出的主要问题与学生回答问题情况一、教师提出的问题及学生的回答(不少于3个问题)1、数据库组成情况?答:数据库中包括三个表:注册用户存储表Pre_Member表、学员和管理员表Member表和班级表Class表。三个表中,刚注册的用户只能放在Pre_Member表中,信息只包括用户名和密码;在Member表中事先录入了管理员信息,在管理员对pre_member表中成员进行权限提升之后,该成员才会进入Member表中;Class表中信息是对Member表中信息的一个减少冗余的补充。2、DataGridView控件与按钮之间的同步问题? 答:为了实现DataGridView控件与按钮同步,在信息查询按钮和修改按钮等一些与DataGridView控件相关的按钮都加入了一段刷新代码。在对基本功能完成之后,实现对DataGridView控件内容的一个刷新。3、登录问题? 答:由于本项目数据结构问题,本项目登录分为两个部分,分别针对两个不同群体:普通成员群体与学员和管理员群体。因此在登录界面的布局中有对群体选择的相关按钮,系统针对按钮的属性不同,识别群体区别,从而分别实现用户识别,并跳转窗体。二、你认为你的网站的特色体现在哪些方面?答:本项目的特色体现在管理员窗体中DataGridView控件与诸多按钮之间同步的实现;窗体隐藏部分的打开和关闭,实现对信息的详细输出等方面。其中DataGridView控件的同步问题是通过系统提供的数据库加载代码实现,其代码如下:/ TODO: 这行代码将数据加载到表“com_Sience_ExamDataSet1.Pre_Member”中。您可以根据需要移动或移除它。 this.pre_MemberTableAdapter.Fill(_Sience_ExamDataSet1.Pre_Member);/ TODO: 这行代码将数据加载到表“com_Sience_ExamDataSet.Member”中。您可以根据需要移动或移除它。 this.memberTableAdapter.Fill(_Sience_ExamDataSet.Member);在完成基本功能的实现后,通过对数据库相关表的重新加载完成刷新功能,从而实现同步。 网站分数: (由教师填写)答辩时间: 2010年12月24日 记 录 人: 徐聪