1.3 认识项目
1.3.1 项目功能介绍
图1-9 系统登录
咱们先从界面上来认识一下本系统,认识系统都有哪些功能,通过每个功能我们要学会什么等。
有点感官认识有助于理解项目和学习后续课程。
(1)系统登录。如图1-9所示,输入正确的用户名和密码后将进入系统主界面。
以管理员和学生的身份进入系统后,将拥有不同的操作权限。
本项目管理员之一的用户名为“001”,密码为“123”,选中“管理员”复选框,单击“登录”按钮即可以管理员身份进入系统。
本项目学生之一的用户名为“00000001”,密码为“123”,取消选中“管理员”复选框,单击“登录”按钮即可以学生身份进入系统。
(2)系统主界面。若以管理员身份登录系统,则主界面如图1-10所示。
图1-10 管理员登录系统后的主界面
若以学生身份登录系统,则主界面如图1-11所示。
图1-11 学生登录系统后的主界面
管理员登录和学生登录功能的差别在于:学生登录后只可使用“学生选课”和“系统”两个菜单下的功能,而管理员登录后则可使用除“学生选课”外的所有功能。
读者也可以从主界面的菜单上大致先了解一下本系统有哪些功能。
通过该功能,我们将学习到菜单、工具栏、状态栏、MDI窗体以及不同用户权限的设计。
(3)以管理员身份登录后,在主菜单上单击“系部信息”菜单,将出现如图1-12所示的界面。
通过该功能,我们将学习在DataGridView中维护单表数据以及打印来自单表的数据。
图1-12 系部信息
(4)以管理员身份登录后,在主菜单上单击“班级信息”菜单,将出现如图1-13所示的界面。
注意:光标所在单元格编辑时为下拉列表(单击鼠标选中该单元格,再单击一下鼠标即可),通过该功能,我们将学习在DataGridView中使用下拉列表维护数据以及打印来自多表的数据。
图1-13 班级信息
(5)以管理员身份登录后,在主菜单上单击“学生信息”菜单,将出现如图1-14所示的界面。
通过该功能,我们将学习使用详细信息的方式维护数据,熟练使用数据绑定类型的下拉列表、固定值的下拉列表、DateTimePicker日期控件的使用。
图1-14 学生信息
(6)以管理员身份登录后,在主菜单上单击“课程信息”菜单,将出现如图1-15所示的界面。
通过该功能,我们将学习自己控制新增、修改、删除等数据维护方式。
图1-15 课程信息
图1-16 随机抽签
以上(3)、(4)、(5)、(6)各项功能都是与数据维护相关的,这里编者从教学的角度给出了各种不同的维护方式。在项目开发中,读者应该根据实际情况的需要选择最合适且风格相对统一的方式来设计。
(7)以管理员身份登录后,在主菜单上单击“选课抽签结果”菜单,再选择“随机抽签”子菜单,将出现如图1-16所示的界面。该功能将对报名后的数据进行随机抽签,以决定选课结果。
读者可以看到,该界面就是一个简单的对话框,实际上核心代码在数据库的存储过程中。通过该功能,我们将学习如何在Visual Studio中调用SQL Server数据库中的存储过程。
(8)以管理员身份登录后,在主菜单上单击“选课抽签结果”菜单,再选择“按课程查看选课结果”子菜单,将出现如图1-17所示的界面,该功能可以查询抽签后每门课程的学生名单。
图1-17 按课程查看选课结果
(9)以管理员身份登录后,在主菜单上单击“统计查询”菜单,再选择“按班级性别统计学生人数”子菜单,将出现如图1-18所示的界面,该功能将统计出各班男女的人数。
通过该功能,我们将学习灵活运用SQL语句、自定义表的打印、自定义控件(图1-18中的椭圆按钮)的开发和使用。
(10)以管理员身份登录后,在主菜单上单击“统计查询”菜单,再选择“未选课学生名单”子菜单,将出现如图1-19所示的界面,该功能将统计出还未报名选课的学生名单,以便催促这些学生及时报名。
通过该功能,希望读者能够根据客户需求进行统计查询的设计。
(11)在“系部信息”、“班级信息”和“按班级性别统计学生人数”功能中我们都提到了打印功能,在很多情形下我们可能都需要打印功能,如打印出来签字、和客户对账等,这些都是有需求的。
图1-18 各班男女人数统计
图1-19 未报名学生名单统计
通过该功能,我们将学习使用Crystal Reports来进行报表的开发应用。
在“系部信息”功能中单击工具栏上的”图标,将出现如图1-20所示的打印结果。通过该功能,我们将学习打印来自单表的数据。
图1-20 系部信息打印结果
在“班级信息”功能中单击工具栏上的”图标,将出现如图1-21所示的打印结果。通过该功能,我们将学习打印来自多表的数据。
图1-21 班级信息打印结果
在“按班级性别统计学生人数”功能中单击两个“打印”按钮中的任意一个,将出现如图1-22所示的打印结果。通过该功能,我们将学习自定义表的打印。
图1-22 按班级性别统计学生人数打印结果
(12)LINQ的学习。在LINQ菜单下有3个子菜单,分别为“LINQ TO DataSet示例”、“LINQ TO SQL示例”、“LINQ TO Object示例”。这是我们要学习的与LINQ相关的3个内容。从执行结果上看,这3个功能类似,图1-23是“LINQ TO DataSet示例”的运行结果。
(13)“关于”对话框。辛辛苦苦写了那么多程序,还是希望有个地方给自己的大名留上吧,这也是大多数软件都有的一个功能。以管理员或学生身份登录后,在主菜单的“系统”菜单上单击“关于”子菜单,运行结果如图1-24所示。
通过该功能,我们将学习如何开发“关于”对话框、学习使用程序集信息。
图1-23 LINQ TO DataSet示例的运行结果
图1-24 “关于”对话框
(14)以学生身份登录后,在主菜单上单击“学生选课”菜单,再选择“报名”子菜单,将出现如图1-25所示的界面。
图1-25 学生选课
该功能是本系统的核心业务逻辑,学生可以挑选课程来报名,也可以取消已报名的课程。
通过该功能,我们将学习灵活编程来实现自己的业务逻辑,以及一些各种编程小技巧,如拖拉数据行、显示行号等。
(15)以学生身份登录后,在主菜单上单击“学生选课”菜单,再选择“我的报名结果”子菜单,将出现如图1-26所示的界面。
图1-26 我的报名结果
项目的每一个功能我们都浏览了一遍,希望大家先有所认识,后续章节将逐个来实现。
1.3.2 熟悉项目数据库中的表
本项目中使用的选课数据库Xk中包含6个用户表,它们是Department(系部表)、Class(班级表)、Student(学生表)、Course(课程表)、StuCou(学生选课表)、Users(管理员表)。
(1)系部表(Department)有2列:DepartNo(系部编号)、DepartName(系部名称),表中数据如图1-27所示。
图1-27 系部表中的数据
(2)班级表(Class)有3列:ClassNo(班级编号)、DepartNo(系部编号)、ClassName(班级名称),表中数据如图1-28所示。
(3)学生表(Student)有6列:StuNo(学号)、ClassNo(班级编号)、StuName(姓名)、Sex(性别)、BirthDay(出生日期)、Pwd(密码),表中数据如图1-29所示。
图1-28 班级表中的数据
图1-29 学生表中的数据
(4)课程表(Course)有4列:CouNo(课程编号)、CouName(课程名称)、Credit(学分)、LimitNum(限选人数),表中数据如图1-30所示。
图1-30 课程表中的数据
(5)学生选课表(StuCou)有5列:StuNo(学号)、CouNo(课程编号)、WillOrder(志愿号)、State(选课状态:报名和选中)、RandomNum(随机数,当报名人数超过限选人数时,本系统采取随机抽签的方式进行),表中数据如图1-31所示。
图1-31 学生选课表中的数据
(6)管理员表(Users)有5列:UserID(用户号)、UserName(用户姓名)、Pwd(密码)、EMail(邮件地址)、Tel(联系电话),表中数据如图1-32所示。
图1-32 管理员表中的数据
1.3.3 数据库中表之间的关系
(1)如图1-33所示,在“对象资源管理器”中展开“数据库”,进一步展开“Xk”,再展开“数据库关系图”,双击“Diagram_0”选项。
图1-33 查看数据库关系图
(2)操作时如果出现如图1-34所示的提示,则执行第(3)、(4)、(5)步,否则直接跳到第(6)步。
图1-34 操作提示
(3)如图1-35所示,在“对象资源管理器”中展开“数据库”,右击“Xk”,选择“新建查询”命令。
图1-35 选择“新建查询”命令
(4)如图1-36所示,在查询窗口中输入命令“ALTER AUTHORIZATION ON DATABASE::Xk TO sa,单击按钮。
图1-36 执行命令
(5)重新按照第(1)步执行。
(6)用户表与表之间的关系如图1-37所示。
图1-37 数据库关系图
从图1-37中我们可以看到:
① 班级表(Class)和系部表(Department)之间通过DepartNo(系部编号)进行连接,表示班级所在的系部编号来源于系部表;
② 学生表(Student)与班级表(Class)之间通过ClassNo(班级编号)进行连接,表示学生所在的班级编号来源于班级表;
③ 学生选课表(StuCou)与学生表(Student)通过StuNo(学号)进行连接,学生选课表(StuCou)与课程表(Course)通过CouNo(课程编号)进行连接,分别表示学生选课数据中的学号来源于学生表,课程编号来源于课程表;
④ Users表相对孤立,和其他表没有主外键关系。
好,现在我们对数据库也有了大致的认识。