搜索
您的当前位置:首页正文

某高校选课系统分析与设计

来源:二三娱乐
1.系统介绍

选课是高校行政管理工作中的重要一项,而且是每个学期必须面对的。选课工作做不好,学生不知道自己将要学习的课程,老师也不知道自己将要讲授的课程,教务处的排课计划、教室安排等其他调度工作也无从做起。因此,如何解决高校教务管理中的选课工作便成为了各大高校面临的很实际的问题。

1

2.系统分析

2.1 可行性分析

2.1.1 经济上的可行性

系统界面友好,操作简单,系统的配置要求不高,实现可行,因此经济可行。该系统可以容易实现学生、老师与学校之间的联系,在Internet上实现完成部分教务工作,提高办事效率。

2.1.2 技术上的可行性

随着网络的蓬勃发展,越来越多的机构将教务管理与网络融合到一起,以方便管理。在这样一个社会背景下,基于Windows和SQL Server 2005 ,运用先进的ASP.NET技术、先进的C#语言,采用B/S模式开发的学生网上选课系统,将学生、老师、管理员有机地结合在一起,有效地提高管理水平和效率。随着科学技术的不断提高,计算机科学日渐成熟,基于以上的技术在现今比较容易实现。

2.1.3 社会可行性

随着近几年高校的持续扩招,学生人数逐年增加。为了满足广大学生的求学需要,各个高校的师资力量、硬件配置也随之增强。这样一来,日常行政部门的工作也就越来越繁重,这一点在选课这块显得尤为突出。而传统的手工操作,即费时又费力,而且容易出错,工作效率较低。因此,拥有一套实用、高效、完善的在线选课系统就显得尤为重要,它可以提升高校的教育质量和教学管理质量,提高工作效率,降低行政成本。

2.2 详细调查

2.2.1组织结构图

选课管理系统组织结构图

2

2.2.2业务流程图

学生选课工作的一般过程是:教务处发通知,通知教师将申报课程名单给教务处,教务处审批,审批合格后将课程及上课时间和每门课程的名额限制公布给学生,不合格的退还给教师,学生在规定的时间内选课,正确的选课结果交给教务处错误的返回给学生。

选课管理系统业务流程图

3

2.2.3数据流程图

根据系统功能要求,画出学生选修课管理系统的分层DFD图。首先画出顶层的DFD图。

顶层确定了系统的范围,其外部实体为教师、学生。

在顶层DFD图的基础上再进行分解,做进一步分解: (1) 用户登录

获取用户输入的用户名及密码;

若出现用户名、密码错误或不匹配现象,反馈错误提示; 在用户名及密码都正确的前提下,支持密码修改。 (2) 选课

首先发布选课通知,即先对教师发出通知(教师得到通知后才可申请教课),然后对学生发出通知(此时已安排完有关选修课的所有信息)

创建课程指定任课教师

设定课程的人数和开课时间安排

分配账号及密码(由于是管理员操作此部分)。 (3) 教师开课

获取教师申请教课的信息,包括教师信息及其所要教的课程信息; 提供教师浏览课程的功能,即课程时间、教室等的安排;并提供查询学生选课情况的功能,即选此门课程的名单等;

处理和统计教师对学生成绩的评定。 (4) 学生选课

提供学生修改个人信息的功能;

提供学生浏览全部选修课信息的功能,然后接受学生的选课操作; 获取学生及其所选课程的信息后,提供学生浏览自己所选课程的安排情况; 得到选课系统的指令,在相应时间内可以让学生修改自己的选课; 将选课系统统计好的成绩信息反馈给学生供其浏览。 通过以上分析,建立第一层DFD图

4

课程信息添加:管理员用户登录后,进入课程信息管理功能单元,输入课程号,课序号,课程名称,教师姓名,这些数据后提交数据,完成课程信息地添加操作,此时在选课表中将出现刚才添加的课程的有关信息。

课程信息修改:管理员用户登录后,进入课程信息管理功能单元,如果是已经登录了,选择要修改的课序号,选定后就可以修改该选定课程的课程编号,课序号,课程名称,教师姓名,提交后就得到该门课程修改后的信息。 课程信息删除:管理员用户登录后,进入课程信息管理功能单元,如果是已经登录,选择要删除的课程的课序号,提交后,就将选定课程删除了。 已选课程信息的维护:管理员用户登录后,进入选课程功能单元,就可以看到学生已选的课程,可以通过选择相应的课程号来将相应学生的选课记录删除。

用户信息添加:管理员用户登录后,进入用户信息管理功能单元,如果是已经登录进入,输入用户名,用户密码,但是此时的用户必须与学生信息管理系统中的学生相对应,即用户必须是存在的。提交后就将新用户添加到了用户组里面,即这个用户可以使用该系统了。

用户信息修改:管理员用户登录后,进入用户信息管理功能单元,如果是已经登录进入,选择要修改的用户的用户名,点击后就可以修改该用户的密码。点击提交后就完成了该用户信息的修改,就得到了该用户修改后的信息。

用户信息删除:管理员用户登录后,进入用户信息管理功能单元,如果是已经登录进入,选择要删除的用户的用户名,提交之后就将该用户删除了。用户组

5

里面将不存在改用户。

在第一层分解的基础上,对四个加工进一步分解,建立第二层DFD图 教师开课:教师将课程及个人信息交由教务处审批,如果教务处审批合格,将课程表公布给学生,如果不合格,则反馈给教师修改。

教师开课数据流程图

学生选课:学生用户登录后,进入选课管理功能页面,浏览选课信息,学生可以选择要选修的课程,如果限定的课程开设人数已满,或是不足规定人数取消该课程安排的信息,个人在规定日期前就可以修改选课。

学生选课业务流程图

用户登录:学生用户输入用户名及密码,如果是有效信息,即可以登录选课及成绩查询,如果是无效的信息,则反馈给学生;教师用户输入用户名及密码,如果是有效信息,即可以登录,录入成绩和查询选课信息,如果无效反馈给教师。

6

教师用户登录数据流程图

学生用户登录数据流程图

7

2.2.4.数据字典

数据流

编号: D1 名称: 选课单 描述:学生根据可选课程提交的选课记录信息 来源:学生 去向:报名 数据流组成:选课单编号+学生(选课时)基本信息+所选课程信息+选课单状态 单位时间流量 : 10KB/S

编号: D2 名称: 课程表 描述:教务处发给学生的课程表 来源:教务处 去向: 学生 数据流组成:课程表编号+课程(选课时)基本信息+上课 时间+上课地点 单位时间流量 : 10KB/S 编号: D3 名称: 所申请的课程表 描述:教师提出申请的课表 来源:教师 去向:教务处 息+上课时间+所申请的课程表状态 单位时间流量 : 10KB/S 数据流组成:所申请的课程表编号+课程(选课时)基本信8

编号: D4 名称:课程安排 描述:教务处安排的课程 来源:教务处 去向:教师开课模块,学生选课模块 数据流组成:课程安排编号+课程(选课时)基本信息+上课时间+上课地点 单位时间流量 : 10KB/S 编号: D5 名称: 学生信息 描述:学生的个人信息 来源:用户登录模块 去向: 学生选课模块 数据流组成:学生信息表编号+学生姓名+学生学号+学生专业 单位时间流量 : 10KB/S 编号: D6 名称: 教师信息 描述:教师的个人信息 来源:用户登录模块 去向:教师开课模块 数据流组成:教师信息表编号+教师姓名+教师所在系名 单位时间流量 : 10KB/S

9

编号: D7 名称: 学生名单 描述:学生选课名单 来源:管理员 去向:教师 数据流组成:学生名单编号+学生姓名+学生学号+学生专业 单位时间流量 : 10KB/S 编号: D8 名称:学生用户名密码 描述:学生登录的凭证 来源:学生 去向: 用户登录模块 数据流组成:学生用户名密码编号+学生用户名+用户名密码 单位时间流量 : 10KB/S 编号: D9 名称:教师用户名密码

描述:教师登录的凭证 来源:教师 去向: 用户登录模块 数据流组成:教师用户名密码编号+教师用户名+用户名密码 单位时间流量 : 10KB/S

编号: D10 名称: 信息录入 描述:管理员向系统录入的信息 来源:管理员

去向: 选课 数据流组成:信息录入编号+教师姓名+教师所教课程+课程序号+课程表 单位时间流量 : 10KB/S 10

编号: D12 名称: 不审批的课程 描述:教师申请不符合的课程 来源:申请开课模块 去向: 教师 数据流组成:不审批的课程编号+课程名称+课程序号+选课单状态 单位时间流量 : 10KB/S 编号: D13 名称: 成绩信息

描述:教师录入的成绩 来源:教师 登录模块 去向: 学生成绩文档 数据流组成:成绩信息编号+课程名称+课程序号+学生姓名+学生学号+学生得分情况 单位时间流量 : 10KB/S 编号: D14 名称:添加 描述:将学生信息添加到报名表 来源:报名模块 去向: 学生报名表文档 数据流组成:添加编号+课程名称+课程序号+学生姓名+学生学号 单位时间流量 : 10KB/S 编号: D15 名称: 修改 描述:修改选课 来源:修改模块

去向: 学生报名表文档 数据流组成:修改编号+课程名称+课程序号+学生姓名+学生学号 单位时间流量 : 10KB/S 11

编号: D16 名称: 查询 描述:成绩查询 来源:学生登录模块 去向: 学生成绩文档 数据流组成:查询编号+学期+课程序号+学生得分情况 单位时间流量 :开放期间10KB/S 编号: D17 名称: 选课 描述:登录系统选课 来源:登录模块 去向: 选课文档 数据流组成:成绩信息编号+课程名称+课程序号+学生姓名+学生学号+学生得分情况 单位时间流量 :开放期间10KB/S 编号: D18 名称: 教师用户有效信息 描述:正确的用户名密码 来源:审核模块 去向: 登录模块 数据流组成:教师用户有效信息编号+用户名+密码+ 单位时间流量 :开放期间10KB/S 编号: D19 名称: 教师用户无效信息 描述:错误的用户名密码 来源:审核模块 去向: 登录模块 数据流组成:教师用户无效信息编号+用户名+密码+ 单位时间流量 :开放期间10KB/S 12

编号: D20 名称: 学生用户有效信息 描述:正确的用户名密码 来源:审核模块 去向: 登录模块 数据流组成:学生用户有效信息编号+用户名+密码+ 单位时间流量 :开放期间10KB/S 编号: D21 名称: 学生用户无效信息 描述:错误的用户名密码 来源:审核模块 去向: 登录模块 数据流组成:学生用户无效信息编号+用户名+密码+ 单位时间流量 :开放期间10KB/S 处理逻辑

处理逻辑编号:P2.1 处理逻辑名称:申请开课 简述:课程审核 输入的数据流:课程及个人信息 处理:审核 输出的数据流:课程表,不审批的课程 处理的频率:每学期一次 处理逻辑编号:P3.1 处理逻辑名称:在线报名 简述:学生报名选课 输入的数据流:学生信息 处理:浏览课程,选课添加 输出的数据流:选课单 处理的频率:每学期一次 13

处理逻辑编号:P3.2 处理逻辑名称:报名 简述:学生报名选课 输入的数据流:选课单 处理:选定课程,选定教师,选定上课时间,选定上课地点 输出的数据流:添加 处理的频率:每学期一次 处理逻辑编号:P3.3 处理逻辑名称:修改 简述:退课修改 输入的数据流:修改的课程信息 处理:浏览课程,修改课程,修改教师,修改上课时间,修改上课地点 输出的数据流:修改 处理的频率:每学期一次 处理逻辑编号:P4.1 处理逻辑名称:审核 简述:用户身份审核 输入的数据流:用户名密码 处理:教师身份认证,学生身份认证 输出的数据流:有效的用户信息,无效的用户信息 处理的频率:每学期一次 处理逻辑编号:P4.2 处理逻辑名称:登录 简述:用户登录 输入的数据流:有效的信息 处理:用户进入到系统 输出的数据流:查询,选课,成绩信息 处理的频率:每学期一次

14

数据存储

编号:F1 名称:学生成绩 描述: 存放成绩信息 数据结构:学生学号+课程号+分数 主键:学生学号,课程号 相关联的处理:登录 编号:F2 名称:选课信息 描述: 存放课程信息 数据结构:学生学号+课程号+教师编号 主键:课程号 相关联的处理:登录 编号:F3 名称:学生报名表 描述: 存放学生信息 数据结构:学生学号+课程号 主键:学生学号 相关联的处理:报名,修改 编号:F4 名称:课程报名表 描述: 存放教师申请的课程信息 数据结构:教师编号+课程号 主键:教师编号,课程号 相关联的处理:登录

15

实体

外部实体编号:S1 外部实体名称:学生 简述:选课的主体 输入的数据流:不合格的选课单,课程表 输出地数据流:选课单 外部实体编号:S2 外部实体名称:教师 简述:教课的主体 输入的数据流:不审批的课程单,课程表 输出地数据流:所申请的课程 外部实体编号:S3 外部实体名称:教务处 简述:管理选课的主体 输入的数据流:课程统计 输出地数据流:信息录入

16

3.系统设计

3.1功能结构图

3.2. 数据库概念模型设计(E-R图)

E-R 图

实体教师-属性图

17

实体学生-属性图

实体课程-属性图

18

实体联系图

3.3数据库设计

3.3.1表的设计

表1:学生信息表

名称 自动编号 学生学号 姓名 性别 民族 政治面貌 联系方式 家庭住址 邮政编码 备注

19

数据类型 int nvarchar(50)

nchar char nchar char nchar nchar nchar nchar

长度 10 50 8 2 10 10 11 50 10 50

是否允许为空

No No Yes Yes Yes Yes Yes Yes Yes Yes

表2:教师信息表

名称 教师编号 教师姓名 性别 民族 家庭住址 联系方式 名称 课程编号 课程名称 学期 名称 成绩编号 学期 学生学号 课程编号 课程名称 分数 表5:申请课表

名称 教师编号 教师姓名 课程编号 课程名称 表6:选课信息表

名称 学生学号 课程编号 课程名称

20

数据类型 nchar nchar nchar nchar nvarchar nvarchar 数据类型 nvarchar(50) nchar(30) nchar(20) 数据类型 int nchar(20) nvarchar(50) nvarchar(50) nvarchar(50)

Int 数据类型 nchar nchar nchar nchar 数据类型 nchar nvarchar nchar

长度 10 10 10 10 50 50 长度 50 30 20 长度 10 20 50 50 50 10 长度 10 10 10 10 长度 10 50 10

是否允许为空

Yes Yes Yes Yes Yes Yes 是否允许为空

No Yes Yes 是否允许为空

No Yes No No Yes Yes 是否允许为空

No Yes Yes Yes 是否允许为空

Yes Yes Yes

表3:课程信息表

表4:成绩信息表

表7:教师分配表

名称 教师姓名 教师编号 课程编号 课程名称 名称 通知编号 通知内容 表9:角色信息表 名称 Rolename 浏览课程 学生之在线选课 学生之修改选课 学生之成绩查询 教师之申请教课 教师之查询学生选课情

教师之成绩评定 管理员之录入选课信息 教师之浏览通知表 用户信息修改 管理员之用户管理 管理员之统计学生选课

信息

管理员之发放通知 管理员之课程管理 表10:用户信息表

名称 Roles UserID Password

数据类型 bit bit bit

数据类型 bit bit bit bit bit bit bit bit bit bit bit bit bit bit bit 是否允许为空

Yes Yes Yes

是否允许为空

Yes Yes Yes Yes Yes Yes

Yes Yes Yes Yes Yes Yes Yes Yes Yes

数据类型 nchar nchar nvarchar nvarchar 数据类型 int varchar

长度 10 10 50 50 长度 10 50

是否允许为空

Yes Yes Yes Yes 是否允许为空

No No

表8:通知信息表

3.3.2创建数据表的代码

成绩信息表

CREATE TABLE [dbo].[成绩信息表]( [成绩编号] [int] IDENTITY(1,1) NOT NULL,

21

[学期] [nchar](20) COLLATE Chinese_PRC_CI_AS NULL, [学生学号] [nvarchar](50) COLLATE Chinese_PRC_CI_AS NOT NULL, [课程编号] [nvarchar](50) COLLATE Chinese_PRC_CI_AS NULL, [课程名称] [nvarchar](50) COLLATE Chinese_PRC_CI_AS NULL, [分数] [int] NULL,

CONSTRAINT [PK__成绩信息表__0DAF0CB0] PRIMARY KEY CLUSTERED ( [学生学号] ASC

)WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY] ) ON [PRIMARY] 角色信息表

CREATE TABLE [dbo].[角色信息表]( [Rolename] [varchar](15) COLLATE Chinese_PRC_CI_AS NULL, [浏览课程] [bit] NOT NULL, [学生之在线选课] [bit] NULL, [学生之修改选课] [bit] NULL, [学生之成绩查询] [bit] NULL, [教师之申请教课] [bit] NULL, [教师之查询学生选课情况] [bit] NULL, [教师之成绩评定] [bit] NULL, [管理员之录入选课信息] [bit] NULL, [管理员之课程管理] [bit] NULL, [管理员之发放通知] [bit] NULL, [管理员之统计学生选课信息] [bit] NULL, [管理员之用户管理] [bit] NULL, [用户信息修改] [bit] NULL, [教师之浏览通知表] [bit] NULL ) ON [PRIMARY] 教师分配表

CREATE TABLE [dbo].[教师分配表]( [教师姓名] [nchar](10) COLLATE Chinese_PRC_CI_AS NULL, [教师编号] [nchar](10) COLLATE Chinese_PRC_CI_AS NULL, [课程编号] [nvarchar](50) COLLATE Chinese_PRC_CI_AS NULL, [课程名称] [nvarchar](50) COLLATE Chinese_PRC_CI_AS NULL ) ON [PRIMARY] 教师信息表

CREATE TABLE [dbo].[教师信息表]( [教师编号] [nchar](10) COLLATE Chinese_PRC_CI_AS NULL, [教师姓名] [nchar](10) COLLATE Chinese_PRC_CI_AS NULL, [性别] [nchar](10) COLLATE Chinese_PRC_CI_AS NULL, [民族] [nchar](10) COLLATE Chinese_PRC_CI_AS NULL, [联系方式] [nvarchar](50) COLLATE Chinese_PRC_CI_AS NULL, [家庭住址] [nvarchar](50) COLLATE Chinese_PRC_CI_AS NULL ) ON [PRIMARY]

22

课程信息表

CREATE TABLE [dbo].[课程信息表]( [课程编号] [nvarchar](50) COLLATE Chinese_PRC_CI_AS NOT NULL, [课程名称] [nchar](30) COLLATE Chinese_PRC_CI_AS NULL, [学期] [nchar](20) COLLATE Chinese_PRC_CI_AS NULL,

CONSTRAINT [PK__课程信息表__7E6CC920] PRIMARY KEY CLUSTERED ( [课程编号] ASC

)WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY] ) ON [PRIMARY] 申请课表

CREATE TABLE [dbo].[申请课表]( [教师编号] [nchar](10) COLLATE Chinese_PRC_CI_AS NOT NULL, [教师姓名] [nchar](10) COLLATE Chinese_PRC_CI_AS NULL, [课程编号] [nchar](10) COLLATE Chinese_PRC_CI_AS NULL, [课程名称] [nchar](10) COLLATE Chinese_PRC_CI_AS NULL, CONSTRAINT [PK_申请课表] PRIMARY KEY CLUSTERED ( [教师编号] ASC

)WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY] ) ON [PRIMARY] 通知信息表

CREATE TABLE [dbo].[通知信息表]( [通知编号] [int] IDENTITY(1,1) NOT NULL, [通知内容] [varchar](50) COLLATE Chinese_PRC_CI_AS NOT NULL, CONSTRAINT [PK_通知信息表] PRIMARY KEY CLUSTERED ( [通知内容] ASC

)WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY] ) ON [PRIMARY] 选课信息表

CREATE TABLE [dbo].[选课信息表]( [学生学号] [nchar](10) COLLATE Chinese_PRC_CI_AS NOT NULL, [课程名称] [nchar](10) COLLATE Chinese_PRC_CI_AS NULL, [课程编号] [nvarchar](50) COLLATE Chinese_PRC_CI_AS NOT NULL ) ON [PRIMARY] 学生信息表

CREATE TABLE [dbo].[学生信息表]( [自动编号] [int] IDENTITY(1,1) NOT NULL, [学生学号] [nvarchar](50) COLLATE Chinese_PRC_CI_AS NOT NULL, [姓名] [nchar](8) COLLATE Chinese_PRC_CI_AS NULL, [性别] [char](2) COLLATE Chinese_PRC_CI_AS NULL, [民族] [nchar](10) COLLATE Chinese_PRC_CI_AS NULL, [政治面貌] [char](10) COLLATE Chinese_PRC_CI_AS NULL,

23

[联系方式] [nchar](11) COLLATE Chinese_PRC_CI_AS NULL, [家庭住址] [nchar](50) COLLATE Chinese_PRC_CI_AS NULL, [邮政编码] [nchar](10) COLLATE Chinese_PRC_CI_AS NULL, [备注] [nchar](50) COLLATE Chinese_PRC_CI_AS NULL,

CONSTRAINT [PK__学生信息表__0425A276] PRIMARY KEY CLUSTERED ( [学生学号] ASC

)WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY] ) ON [PRIMARY] 用户信息表

CREATE TABLE [dbo].[用户信息表]( [Roles] [char](15) COLLATE Chinese_PRC_CI_AS NULL, [UserID] [nvarchar](50) COLLATE Chinese_PRC_CI_AS NULL, [Password] [nvarchar](50) COLLATE Chinese_PRC_CI_AS NULL ) ON [PRIMARY]

3.3.3存储过程代码

create proc [dbo].[liulan] @cid nvarchar(50) as

select *

from 课程信息表

where 课程编号=@cid

3.3.4视图代码

视图名:学生选课信息表

CREATE VIEW [dbo].[学生选课信息表] AS

SELECT dbo.选课信息表.学生学号, dbo.选课信息表.课程名称, dbo.教师分配表.教师姓名

FROM dbo.选课信息表INNER JOIN

dbo.教师分配表ON dbo.选课信息表.课程编号= dbo.教师分配表.课程编号

24

4系统实现

4.1登陆界面

登录窗体代码:

private void 登录button1_Click(object sender, EventArgs e) {

try {

string strdt = \"select * from 用户信息表 where UserID='\" + 用户名textBox1.Text.Trim()+ \"'and Password='\"+ 密码textBox2.Text.Trim() + \"' and Roles='\" + 用户类型comboBox1.Text.Trim() + \"'\"; DataTable dt = new DataTable();

SqlDataAdapter da = new SqlDataAdapter(strdt, MyConnection); da.Fill(dt);

role = 用户类型comboBox1.Text; if (dt.Rows.Count != 0) {

MessageBox.Show(\"登录成功!\\"提示!\MessageBoxButtons.OK, MessageBoxIcon.Information); this.Hide();

MainForm f1 = new MainForm();

string sql = \"select * from 角色信息表 where Rolename='\" + 用户类型comboBox1.Text.Trim() + \"'\";

MyConnection.Open();

SqlCommand cmd1 = new SqlCommand(sql, MyConnection); SqlDataReader dr = cmd1.ExecuteReader();

25

dr.Read();

f1.浏览课程ToolStripMenuItem.Visible = (bool)(dr.GetValue(1)); f1.在线选课ToolStripMenuItem.Visible = (bool)(dr.GetValue(2)); f1.修改选课ToolStripMenuItem.Visible = (bool)(dr.GetValue(3)); f1.成绩查询ToolStripMenuItem.Visible = (bool)(dr.GetValue(4)); f1.申请教课ToolStripMenuItem.Visible = (bool)(dr.GetValue(5)); f1.查询学生选课情况ToolStripMenuItem.Visible = (bool)(dr.GetValue(6)); f1.成绩评定ToolStripMenuItem.Visible = (bool)(dr.GetValue(7));

f1.录入选课信息ToolStripMenuItem.Visible = (bool)(dr.GetValue(8)); f1.课程管理ToolStripMenuItem.Visible = (bool)(dr.GetValue(9)); f1.发放通知ToolStripMenuItem.Visible = (bool)(dr.GetValue(10));

f1.统计学生选课信息ToolStripMenuItem.Visible = (bool)(dr.GetValue(11)); f1.用户管理ToolStripMenuItem.Visible = (bool)(dr.GetValue(12));

f1.用户信息修改ToolStripMenuItem.Visible = (bool)(dr.GetValue(13)); f1.浏览通知ToolStripMenuItem.Visible = (bool)(dr.GetValue(14)); f1.Show(); } else {

MessageBox.Show(\"用户名或密码错误!\\"提示!\MessageBoxButtons.OK, MessageBoxIcon.Information);

} }

catch (Exception ex) {

MessageBox.Show(ex.Message.ToString()); } }

26

4.2主界面

系统管理员登陆的主界面:

学生登陆的主界面:

27

教师登录的主界面:

主窗体代码:

private void 在线选课ToolStripMenuItem_Click(object sender, EventArgs e) {

Form Dlg = new 在线选课();

for (int x = 0; x < this.MdiChildren.Length; x++) {

Form tempChild = (Form)this.MdiChildren[x]; tempChild.Close(); }

Dlg.MdiParent = this;

Dlg.WindowState = FormWindowState.Normal; Dlg.Show(); }

private void 修改选课ToolStripMenuItem_Click(object sender, EventArgs e) {

Form Dlg = new 修改选课();

for (int x = 0; x < this.MdiChildren.Length; x++) {

Form tempChild = (Form)this.MdiChildren[x]; tempChild.Close(); }

Dlg.MdiParent = this;

Dlg.WindowState = FormWindowState.Normal; Dlg.Show(); }

private void 成绩查询ToolStripMenuItem_Click(object sender, EventArgs e)

28

{

Form Dlg = new 成绩查询();

for (int x = 0; x < this.MdiChildren.Length; x++) {

Form tempChild = (Form)this.MdiChildren[x]; tempChild.Close(); }

Dlg.MdiParent = this;

Dlg.WindowState = FormWindowState.Normal; Dlg.Show(); }

private void 申请教课ToolStripMenuItem_Click(object sender, EventArgs e) {

Form Dlg = new 申请教课();

for (int x = 0; x < this.MdiChildren.Length; x++) {

Form tempChild = (Form)this.MdiChildren[x]; tempChild.Close(); }

Dlg.MdiParent = this;

Dlg.WindowState = FormWindowState.Normal; Dlg.Show(); }

private void 查询学生选课情况ToolStripMenuItem_Click(object sender, EventArgs e) {

Form Dlg = new 查询学生选课情况();

for (int x = 0; x < this.MdiChildren.Length; x++) {

Form tempChild = (Form)this.MdiChildren[x]; tempChild.Close(); }

Dlg.MdiParent = this;

Dlg.WindowState = FormWindowState.Normal; Dlg.Show(); }

private void 成绩评定ToolStripMenuItem_Click(object sender, EventArgs e) {

Form Dlg = new 成绩评定();

for (int x = 0; x < this.MdiChildren.Length; x++) {

Form tempChild = (Form)this.MdiChildren[x]; tempChild.Close(); }

29

Dlg.MdiParent = this;

Dlg.WindowState = FormWindowState.Normal; Dlg.Show(); }

private void 录入选课信息ToolStripMenuItem_Click(object sender, EventArgs e) {

Form Dlg = new 录入选课信息();

for (int x = 0; x < this.MdiChildren.Length; x++) {

Form tempChild = (Form)this.MdiChildren[x]; tempChild.Close(); }

Dlg.MdiParent = this;

Dlg.WindowState = FormWindowState.Normal; Dlg.Show(); }

private void 课程管理ToolStripMenuItem_Click(object sender, EventArgs e) {

Form Dlg = new 课程管理();

for (int x = 0; x < this.MdiChildren.Length; x++) {

Form tempChild = (Form)this.MdiChildren[x]; tempChild.Close(); }

Dlg.MdiParent = this;

Dlg.WindowState = FormWindowState.Normal; Dlg.Show(); }

private void 发放通知ToolStripMenuItem_Click(object sender, EventArgs e) {

Form Dlg = new 发放通知();

for (int x = 0; x < this.MdiChildren.Length; x++) {

Form tempChild = (Form)this.MdiChildren[x]; tempChild.Close(); }

Dlg.MdiParent = this;

Dlg.WindowState = FormWindowState.Normal; Dlg.Show(); }

private void 统计学生选课信息ToolStripMenuItem_Click(object sender, EventArgs e) {

Form Dlg = new 统计学生选课信息();

30

for (int x = 0; x < this.MdiChildren.Length; x++) {

Form tempChild = (Form)this.MdiChildren[x]; tempChild.Close(); }

Dlg.MdiParent = this;

Dlg.WindowState = FormWindowState.Normal; Dlg.Show(); }

private void 浏览课程ToolStripMenuItem_Click(object sender, EventArgs e) {

Form Dlg = new 浏览课程();

for (int x = 0; x < this.MdiChildren.Length; x++) {

Form tempChild = (Form)this.MdiChildren[x]; tempChild.Close(); }

Dlg.MdiParent = this;

Dlg.WindowState = FormWindowState.Normal; Dlg.Show(); }

private void 用户管理ToolStripMenuItem_Click(object sender, EventArgs e) {

Form Dlg = new 用户管理();

for (int x = 0; x < this.MdiChildren.Length; x++) {

Form tempChild = (Form)this.MdiChildren[x]; tempChild.Close(); }

Dlg.MdiParent = this;

Dlg.WindowState = FormWindowState.Normal; Dlg.Show(); }

private void 用户信息修改ToolStripMenuItem_Click(object sender, EventArgs e) {

Form Dlg = new 用户信息修改();

for (int x = 0; x < this.MdiChildren.Length; x++) {

Form tempChild = (Form)this.MdiChildren[x]; tempChild.Close(); }

Dlg.MdiParent = this;

Dlg.WindowState = FormWindowState.Normal; Dlg.Show();

31

}

private void 退出系统toolStripMenuItem1_Click(object sender, EventArgs e) {

this.Close(); }

private void 重新登录ToolStripMenuItem_Click(object sender, EventArgs e) {

LoginForm ld = new LoginForm(); ld.Show(); this.Close(); }

private void MainForm_Load(object sender, EventArgs e) {

this.toolStripStatusLabel3.Text = \"登录时间:\" DateTime.Now.ToString(\"yyyy-MM-dd hh:mm:ss\");

this.toolStripStatusLabel3.Text = \"系统当前时间:\" DateTime.Now.ToString(\"yyyy-MM-dd hh:mm:ss\"); this.timer1.Interval = 1000; this.timer1.Start();

this.toolStripStatusLabel2.Text = \"当前用户:\" + LoginForm.role; }

private void timer1_Tick(object sender, EventArgs e) {

this.toolStripStatusLabel3.Text = \"系统当前时间:\" DateTime.Now.ToString(\"yyyy-MM-dd hh:mm:ss\"); }

private void 浏览通知ToolStripMenuItem_Click(object sender, EventArgs e) {

Form Dlg = new 浏览通知();

for (int x = 0; x < this.MdiChildren.Length; x++) {

Form tempChild = (Form)this.MdiChildren[x]; tempChild.Close(); }

Dlg.MdiParent = this;

Dlg.WindowState = FormWindowState.Normal; Dlg.Show(); }

32

+ + + 4.3其他窗体模块

成绩评定窗体:

插入成绩代码:

private void button1_Click(object sender, EventArgs e) {

if (学生学号textBox1.Text.Trim() == \"\" || 课程编号textBox2.Text.Trim() == \"\" || 课程名称textBox3.Text.Trim() == \"\" || 学期textBox4.Text.Trim() == \"\" || 分数textBox5.Text.Trim() == \"\")

MessageBox.Show(\"请输入完整的成绩信息\提示\"); else {

string sql = \"select * from 课程信息表 where 课程编号 = '\" + 课程编号textBox2.Text.Trim() + \"'\";

DataTable dt = new DataTable();

SqlDataAdapter da = new SqlDataAdapter(sql, MyConnection); da.Fill(dt);

if (dt.Rows.Count == 0)

MessageBox.Show(\"没有该课程编号\提示\"); else {

string sql1 = \"select * from 学生信息表 where 学生学号 = '\" + 学生学号textBox1.Text.Trim() + \"'\";

DataTable dt1 = new DataTable();

SqlDataAdapter da1 = new SqlDataAdapter(sql1, MyConnection); da1.Fill(dt1);

33

if (dt.Rows.Count == 0)

MessageBox.Show(\"没有该学生学号\提示\"); else {

string sql2; int i;

sql2 = \"insert into 成绩信息表(学生学号,课程编号,课程名称,学期,分数) values ('\" + 学生学号textBox1.Text.ToString() + \"','\" + 课程编号textBox2.Text.ToString() + \"','\" + 课程名称textBox3.Text.ToString() + \"','\" + 学期textBox4.Text.ToString() + \"','\" + 分数textBox5.Text.ToString() + \"' )\";

try {

MyConnection.Open();

SqlCommand cmd = new SqlCommand(sql2, MyConnection); i = (int)cmd.ExecuteNonQuery(); }

catch (Exception ex) {

throw new Exception(ex.Message); }

finally {

MyConnection.Close(); }

if (i == 1) {

MessageBox.Show(\"成绩添加成功\提示\"); } } } } }

34

申请教课窗体:

提交代码:

private void 提交button1_Click(object sender, EventArgs e) {

if (教师编号textBox1.Text.Trim() == \"\" || 教师姓名textBox2.Text.Trim() == \"\" || 课程编号textBox3.Text.Trim() == \"\" || 课程名称textBox4.Text.Trim() == \"\") MessageBox.Show(\"请输入完整的申请课表信息\提示\"); else {

string sql = \"select * from 课程信息表 where 课程编号 = '\" + 课程编号textBox3.Text.Trim() + \"'\";

DataTable dt = new DataTable();

SqlDataAdapter da = new SqlDataAdapter(sql, MyConnection); da.Fill(dt);

if (dt.Rows.Count == 0)

MessageBox.Show(\"没有该课程编号\提示\"); else {

string sql1; int i;

sql1 = \"insert into 申请课表(教师编号,教师姓名,课程编号,课程名称) values ('\" + 教师编号textBox1.Text.ToString() + \"','\" + 教师姓名textBox2.Text.ToString() + \"','\" + 课程编号textBox3.Text.ToString() + \"','\" + 课程名称textBox4.Text.ToString() + \"' )\";

35

try {

MyConnection.Open();

SqlCommand cmd = new SqlCommand(sql1, MyConnection); i=(int)cmd.ExecuteNonQuery(); }

catch (Exception ex) {

throw new Exception(ex.Message); } } }

}

finally {

MyConnection .Close(); }

if (i == 1) {

MessageBox.Show(\"申请课程添加成功\提示\"); } 36

查询学生选课情况窗体:

private void 查询学生选课情况_Load(object sender, EventArgs e) {

SqlConnection MyConnection = new SqlConnection(学生选课管理系统.Data.Conn.ConnStr);

string MySQL = \"select * from 选课信息表\"; MyConnection.Open();

DataSet ds = new DataSet();

SqlDataAdapter adp = new SqlDataAdapter(MySQL, MyConnection); adp.Fill(ds, \"coure\");

学生学号textBox1.DataBindings.Add(\"Text\学生学号\"); 课程名称textBox2.DataBindings.Add(\"Text\课程名称\"); 课程编号textBox3.DataBindings.Add(\"Text\课程编号\"); UserAmend = (CurrencyManager)BindingContext[ds.Tables[0]]; dataGridView1.DataSource = ds.Tables[\"coure\"]; }

37

浏览课程窗体:

private void button1_Click(object sender, EventArgs e) {

SqlConnection MyConnection = new SqlConnection(学生选课管理系统.Data.Conn.ConnStr);

string MySQL = \"exec liulan'\" + 课程编号textBox1.Text .Trim () + \"'\"; MyConnection.Open();

DataSet ds = new DataSet();

SqlDataAdapter adp = new SqlDataAdapter(MySQL, MyConnection); adp.Fill(ds, \"course\");

dataGrid1.DataSource = ds.Tables[\"course\"]; }

private void toolBar1_ButtonClick(object sender, ToolBarButtonClickEventArgs e) {

if (e.Button.ToolTipText == \"首记录\") {

this.dataGrid1.UnSelect(cmOrders.Position); //取消原选中的行 cmOrders.Position = 0;

this.dataGrid1.Select(cmOrders.Position); //选中当前行

this.dataGrid1.CurrentRowIndex = cmOrders.Position; //移动表头指示图标 return; }

if (e.Button.ToolTipText == \"上一条记录\") {

if (cmOrders.Position >= 0) {

38

this.dataGrid1.UnSelect(cmOrders.Position); cmOrders.Position--;

this.dataGrid1.Select(cmOrders.Position);

this.dataGrid1.CurrentRowIndex = cmOrders.Position; }

return; }

if (e.Button.ToolTipText == \"下一条记录\") {

if (cmOrders.Position <= cmOrders.Count - 1) {

this.dataGrid1.UnSelect(cmOrders.Position); cmOrders.Position++;

this.dataGrid1.Select(cmOrders.Position);

this.dataGrid1.CurrentRowIndex = cmOrders.Position; } return; }

if (e.Button.ToolTipText == \"尾记录\") {

this.dataGrid1.UnSelect(cmOrders.Position); cmOrders.Position = cmOrders.Count - 1; this.dataGrid1.Select(cmOrders.Position);

this.dataGrid1.CurrentRowIndex = cmOrders.Position; return; } }

用户信息修改窗体:

private void 修改密码button1_Click(object sender, EventArgs e) {

if (!(this.新密码textBox2.Text == this.再输一次密码textBox3.Text) || (this.新密码textBox2.Text.Length == 0))

39

{

MessageBox.Show(\"两次密码的输入不一致!\\"信息提示\MessageBoxButtons.OK, MessageBoxIcon.Information); return; }

string MyOldPassword = this.旧密码textBox1.Text; string MyNewPassword = this.新密码textBox2.Text;

SqlConnection MyConnection = new SqlConnection(学生选课管理系统.Data.Conn.ConnStr);

string MySQL = \"Update 用户信息表 Set Password='\" + MyNewPassword + \"' Where UserID='\" + this.用户名称textBox4.Text + \"' AND Password='\" + MyOldPassword + \"'\";

MyConnection.Open();

SqlCommand MyCommand = new SqlCommand(MySQL, MyConnection); int MyCount = MyCommand.ExecuteNonQuery(); if (MyCount == 1) {

MessageBox.Show(\"在数据库中修改用户密码操作成功!\\"信息提示\ }

else {

MessageBox.Show(\"在数据库中修改用户密码操作失败!\\"信息提示\ }

if (MyConnection.State == ConnectionState.Open) {

MyConnection.Close(); } }

40

浏览通知窗体:

private void

浏览通知_Load(object sender, EventArgs e)

{

SqlConnection MyConnection = new SqlConnection(学生选课管理系统.Data.Conn.ConnStr);

string MySQL = \"Select * From 通知信息表 \"; MyConnection.Open(); DataSet ds = new DataSet();

SqlDataAdapter adp = new SqlDataAdapter(MySQL, MyConnection); adp.Fill(ds, \"通知\");

dataGrid1.DataSource = ds.Tables[\"通知\"]; }

41

在线选课窗体:

private void 选课button1_Click(object sender, EventArgs e) {

string sno = 学生学号textBox1.Text; string cname = 课程名称textBox2.Text;

string cno = 课程编号textBox1.Text;

SqlConnection MyConnection = new SqlConnection(学生选课管理系统.Data.Conn.ConnStr);

string sqlString = @\"Select * From 选课信息表\";

SqlDataAdapter da = new SqlDataAdapter(sqlString, MyConnection); DataSet myDataSet = new DataSet(); da.Fill(myDataSet, \"xuanke\");

DataRow dr = myDataSet.Tables[\"xuanke\"].NewRow(); dr[\"学生学号\"] = sno; dr[\"课程名称\"] = cname; dr[\"课程编号\"] = cno; myDataSet.BeginInit();

myDataSet.Tables[\"xuanke\"].Rows.Add(dr); myDataSet.EndInit();

SqlCommandBuilder sqlBuild = new SqlCommandBuilder(da); da.InsertCommand = sqlBuild.GetInsertCommand(); try {

da.Update(myDataSet, \"xuanke\"); myDataSet.AcceptChanges();

MessageBox.Show(\"插入成功!\");

42

}

catch (Exception ex) {

MessageBox.Show(\"插入出错!错误原因为:\\n\" + ex.Message + \"\\n\"); }

dataGridView1.DataSource = myDataSet.Tables[\"xuanke\"]; }

修改选课窗体:

private void 修改button1_Click(object sender, EventArgs e) {

SqlConnection MyConnection = new SqlConnection(学生选课管理系统.Data.Conn.ConnStr);

string sql = \"update 选课信息表 set 课程名称='\" + 课程名称textBox3.Text.Trim() + \"' , 课程编号='\" + 课程编号textBox2.Text.Trim() + \"' where 学生学号='\" + 学生学号textBox1 .Text .Trim ()+ \"'\"; SqlCommand cmd = new SqlCommand(sql, MyConnection); MyConnection.Open(); cmd.ExecuteNonQuery();

MessageBox.Show(\"课程修改成功\提示\"); }

43

成绩查询窗体:

private void button1_Click(object sender, EventArgs e) {

SqlConnection MyConnection = new SqlConnection(学生选课管理系统.Data.Conn.ConnStr);

string MySQL = \"Select * From 成绩信息表 Where 学生学号= '\" + 学生学号textBox1.Text.Trim() + \"'\"; MyConnection.Open();

DataSet ds = new DataSet();

SqlDataAdapter adp = new SqlDataAdapter(MySQL, MyConnection); adp.Fill(ds, \"student\");

dataGridView1.DataSource = ds.Tables[\"student\"]; }

录入选课信息窗体:

private void 录入选课信息_Load(object sender, EventArgs e)

44

{

MyConnection.Open();

string sql = \"select * from 教师信息表\"; DataSet ds = new DataSet();

SqlDataAdapter da = new SqlDataAdapter(sql, MyConnection); da.Fill(ds,\"teacher\");

教师编号comboBox1.DataSource=ds.Tables[\"teacher\"]; 教师编号comboBox1.DisplayMember = \"教师编号\"; 教师姓名comboBox2.DataSource = ds.Tables[\"teacher\"]; 教师姓名comboBox2.DisplayMember = \"教师姓名\";

SqlDataAdapter da1 = new SqlDataAdapter(\"select * from 课程信息表\

da1.Fill(ds,\"course\");

课程编号comboBox3.DataSource = ds.Tables[\"course\"]; 课程编号comboBox3.DisplayMember = \"课程编号\"; 课程名称comboBox4.DataSource = ds.Tables[\"course\"]; 课程名称comboBox4.DisplayMember = \"课程名称\"; MyConnection.Close(); }

private void 录入button1_Click(object sender, EventArgs e) {

string sql = \"insert into 教师分配表(教师编号,教师姓名,课程编号,课程名称) values( '\" + 教师编号comboBox1.Text.Trim() + \"', '\" + 教师姓名comboBox2.Text.Trim() + \"','\" + 课程编号comboBox3.Text.Trim() + \"','\" + 课程名称comboBox4.Text.Trim() + \"')\";

DataTable dt = new DataTable();

SqlDataAdapter da = new SqlDataAdapter(sql, MyConnection); da.Fill(dt);

MessageBox.Show(\"录入成功\提示\"); }

45

课程管理窗体:

private void 删除button2_Click(object sender, EventArgs e) {

if (MessageBox.Show(\"确实要删除这条记录吗\\"提示\MessageBoxButtons.YesNo) == DialogResult.Yes) {

try {

if (UserAmend.Count > 0) {

SqlConnection MyConnection = new SqlConnection(学生选课管理系统.Data.Conn.ConnStr);

string MySQL1 = \"delete from 课程信息表 where 课程编号='\" + 课程编号textBox1.Text.Trim() + \"'and 课程名称='\" + 课程名称textBox2.Text.Trim() + \"'and 学期='\" + 学期textBox3.Text.Trim() + \"'\"; MyConnection.Open();

DataSet ds = new DataSet(); SqlDataAdapter adp = new SqlDataAdapter(MySQL1, MyConnection);

adp.Fill(ds, \"course2\");

dataGridView1.DataSource = ds.Tables[\"course2\"]; } else {

MessageBox.Show(\"没有可删的数据\\"提示\

46

MessageBoxButtons.OK, MessageBoxIcon.Error); } }

catch (Exception express) {

MessageBox.Show(express.ToString(), MessageBoxButtons.OK, MessageBoxIcon.Error); }

return; } }

发放通知窗体:

\"提示\

private void 发送button1_Click(object sender, EventArgs e) {

if (richTextBox1.Text.Trim() == \"\")

MessageBox.Show(\"请输入完整的成绩信息\提示\"); else {

SqlConnection MyConnection = new SqlConnection(学生选课管理系统.Data.Conn.ConnStr);

string sql = \"insert into 通知信息表(通知内容) values( '\" + richTextBox1.Text.Trim() + \"')\";

DataTable dt = new DataTable();

SqlDataAdapter da = new SqlDataAdapter(sql, MyConnection); da.Fill(dt);

MessageBox.Show(\"插入成功\提示\"); } }

47

统计学生选课信息窗体:

private void 搜索button1_Click(object sender, EventArgs e) {

SqlConnection MyConnection = new SqlConnection(学生选课管理系统.Data.Conn.ConnStr);

string MySQL = \"Select * From 学生选课信息表 Where 课程名称= '\" + 课程名称comboBox1.Text.Trim() + \"'\"; MyConnection.Open();

DataSet ds = new DataSet();

SqlDataAdapter adp = new SqlDataAdapter(MySQL, MyConnection); adp.Fill(ds, \"course\");

dataGrid1.DataSource = ds.Tables[\"course\"]; }

48

用户管理窗体:

private void button3_Click(object sender, EventArgs e) {

SqlConnection MyConnection = new SqlConnection( 学生选课管理系统.Data.Conn.ConnStr);

string MySQL = \"select * from 用户信息表\"; MyConnection.Open(); DGTable.Clear();

SqlDataAdapter adp = new SqlDataAdapter(MySQL, MyConnection); adp.Fill(DGTable);

DataSet ds = new DataSet();

SqlDataAdapter adp1 = new SqlDataAdapter(MySQL, MyConnection); adp1.Fill(ds, \"user\");

用户名称textBox2.DataBindings.Clear(); 用户密码textBox1.DataBindings.Clear(); 用户类型comboBox1.DataBindings.Clear(); dataGridView1.DataSource = ds.Tables[\"user\"];

用户名称textBox2.DataBindings.Add(\"Text\ 用户密码textBox1.DataBindings.Add(\"Text\ 用户类型comboBox1.DataBindings.Add(\"Text\ }

private void 添加button1_Click(object sender, EventArgs e)

49

{

string cusname = 用户名称textBox2.Text; string pwd = 用户密码textBox1.Text;

SqlConnection MyConnection = new SqlConnection(学生选课管理系统.Data.Conn.ConnStr);

string MySQL = @\"Select * From 用户信息表\"; ds.Clear();

SqlDataAdapter adp = new SqlDataAdapter(MySQL, MyConnection); adp.Fill(ds, \"user\");

UserAmend = (CurrencyManager)BindingContext[ds.Tables[0]]; DataRow dr = ds.Tables[\"user\"].NewRow(); dr[\"UserID\"] = cusname; dr[\"Password\"] = pwd;

dr[\"Roles\"] = 用户类型comboBox1.Text; ds.BeginInit();

ds.Tables[\"user\"].Rows.Add(dr); ds.EndInit();

SqlCommandBuilder sqlBuild = new SqlCommandBuilder(adp); adp.InsertCommand = sqlBuild.GetInsertCommand(); try {

adp.Update(ds, \"user\"); ds.AcceptChanges();

MessageBox.Show(\"插入成功!\");

}

catch (Exception ex) {

MessageBox.Show(\"插入出错!错误原因为:\\n\" + ex.Message + \"\\n\"); }

dataGridView1.DataSource = ds.Tables[\"user\"]; return; }

50

5.总结

这次实习的课程设计是“学生选课管理系统”,通过两个星期对其各阶段任务的分析实验操作(系统介绍、系统分析、系统设计),使我们对这门课程有了更深层次的了解,同时也学到了很多东西。

先弄清系统背景,后进行了可行性研究,可行性研究的主要任务不是具体解决系统中的问题,而是以最小的代价在尽可能短的时间内确定问题是否值得解决,是否能够解决,因此我们考虑了经济、技术与操作上的可行。开始用结构化的方法时,由于对系统的了解程度不够,有很多方面都考虑的不周全。通过进行数据流程图的划分,使功能模块的实现看起来更具体。我将数据流程图划分到第三层,按照“自上而下,逐层分解”的总原则划分,逐层到每一层的复杂度。

根据论文设计系统时出现很多错误,尤其是数据库表的设计,与做出的系统很不相称,还有业务流程图,数据流程图。理论与实践相差很多,但理论联系实际,理论又来源于实际,写论文时实体没分清,业务流程图和数据流程图的来源和去向没搞清楚,此次开发系统最大的感触是:开发系统首先要调查此系统的功能结构图,通过功能结构图设计主界面,和各个功能模块。

然后我们又花了两三天进行设计阶段的工作,这部分我们熟悉了一个画图工具—Microsoft Office Visio, 用Microsoft Office Visio工具大大节约了时间并且减少了出错率,之后根据需要对系统进行了数据库的设计,这部分内容比较简洁,因为我们平时就用选课系统,所包含的具体结构相对而言较为清楚。

统计学生选课模块需要把学生信息、课程信息、教师信息都统计出来,整了好长时间,写了一大堆代码,最后改用视图一目了然,很快就解决问题。

此次课程设计要求用视图、触发器、存储过程、游标,其实系统有的用了简单,有的用了这些也就复杂了,所以做什么事都应该视情况而定。

总之,此次课程设计最大的收获就是训练了我们的实践性,使设计能力、分析和解决问题的能力有了较好的提高。

51

因篇幅问题不能全部显示,请点此查看更多更全内容

Top