大家好,又见面了,我是你们的朋友全栈君。
目录
1.需求分析
开发平台:Microsoft Visual Studio 2013
开发环境:微软在Builder 2013开发者大会上发布了Visual Studio 2013预览版,并且发布其程序组件库.NET 4.5.1的预览版,该软件已于北京时间2013年11月13日23:00时正式发布。Visual Studio 2013 预览版以 Visual Studio 2012 和后续的Microsoft Visual Studio 更新中的进展为基础构建而成,为开发团队提供需要的解决方案,使其接纳这种转变并开发和交付利用下一波Windows 平台创新 (Windows 8.1) 的新式应用程序,同时在所有 Microsoft 平台上支持多种设备和服务。
1.1 数据需求描述
分析系统的数据需求,用数据字典和数据流图描述系统的数据需求,一般要求有2级(初级和详细级)数据流图,并确定系统开发边界。
1.2 系统功能需求
系统功能框架介绍,处理模块描述。
管理员
- 添加教师名单
- 查询教师名单
- 修改教师信息
- 删除教师信息
- 添加学生名单
- 查询学生名单
- 修改学生名单
- 统计生源地信息
- 修改管理员密码
- 重置教师密码
- 重置学生密码
学生
- 查询个人基本信息
- 查询个人成绩
- 查询班级课表
- 查询个人课表
- 修改个人密码
- 查询自己的总学分
教师
- 查询教师个人信息
- 查询个人任课信息
- 查询所任课程平均成绩
- 查询所任课程学生排名
- 提交所任课程的学生成绩
- 修改个人密码
1.3 其他性能需求
1.3 其他性能需求
(1)用户输入出错时,有错误提示。
(2)给管理员,教师,学生不同的权限,提高数据安全性;
(3)创建触发器,存储过程,防止数据不一致;
2、概念结构设计
2.1 局部E-R图
画出局部的E-R图,进一步进行解释说明。
2.2 全局E-R图
合并成全局的E-R图,5个数据类别之间存在6个关系。
2.3 优化E-R图
因为本次的E-R已经符合了要求,这里就不需要优化了。
3、逻辑结构设计
3.1 关系模式设计
教师teachers(教师编号,教师姓名,教师性别,教师年龄,教师职称,联系电话)
专业major(专业编号,专业名称)
班级class(班级编号,班级名称,专业编号)
学生students(学号,姓名,性别,年龄,地区,已修学分,班级编号)
课程course(课程编号,课程名称,课程学时,教师姓名,课程学期,考核方式,学分)
开设 class-course(课程编号,班级编号)
上课 teacher-class(教师编号,班级编号)
授课 teacher-course(教师编号,课程编号)
成绩报告 reports (学号,课程编号,学期,成绩,教师姓名)
管理员账号administer-account(管理员账号,管理员密码)
教师账号Teachers-account(教师账号,教师密码)
学生账号students-account(学生账号,学生密码)
3.2 数据类型定义
- 教师Teacher表
表1 Teacher表
数据项名 |
数据类型 |
长度 |
完整性约束 |
教师编号 |
char |
10 |
主键 |
教师姓名 |
char |
10 |
|
教师性别 |
char |
5 |
|
教师年龄 |
int |
||
职称 |
char |
10 |
|
联系电话 |
char |
20 |
- 专业Major表
表2 Major表
数据项名 |
数据类型 |
长度 |
完整性约束 |
专业编号 |
char |
10 |
主键 |
专业名称 |
char |
10 |
- 班级Class表
表3 class表
数据项名 |
数据类型 |
长度 |
完整性约束 |
班级编号 |
char |
10 |
主键 |
班级名称 |
char |
10 |
|
专业编号 |
char |
10 |
外键 |
- 学生表Students表
表4 students表
数据项名 |
数据类型 |
长度 |
完整性约束 |
学号 |
char |
12 |
主键 |
姓名 |
char |
10 |
|
性别 |
char |
5 |
|
年龄 |
int |
||
生源所在地 |
char |
20 |
|
已修学分 |
float |
||
班级编号 |
char |
10 |
外键 |
- 课程Course表
表5 courses表
数据项名 |
数据类型 |
长度 |
完整性约束 |
课程编号 |
char |
10 |
主键 |
课程名称 |
char |
10 |
|
教师姓名 |
char |
10 |
|
课程学期 |
char |
20 |
|
课程学时 |
int |
>0 |
|
考核方式 |
char |
5 |
|
学分 |
float |
>0 |
- 开设 class-course表
表6 class-course表
数据项名 |
数据类型 |
长度 |
完整性约束 |
|
班级编号 |
char |
10 |
主键 |
外键 |
课程编号 |
char |
10 |
外键 |
- 上课 teacher-class表
表7 teacher-class表
数据项名 |
数据类型 |
长度 |
完整性约束 |
|
教师编号 |
char |
10 |
主键 |
外键 |
班级编号 |
char |
10 |
外键 |
- 授课 teacher-course表
表8 teacher-course表
数据项名 |
数据类型 |
长度 |
完整性约束 |
|
教师编号 |
char |
10 |
主键 |
外键 |
课程编号 |
char |
10 |
外键 |
- 成绩报告表reports表
表9 reports表
数据项名 |
数据类型 |
长度 |
完整性约束 |
|
学号 |
char |
12 |
主键 |
外键 |
课程编号 |
char |
10 |
外键 |
|
学期 |
char |
10 |
||
成绩 |
int |
|||
教师姓名 |
char |
10 |
- 教师账号
表10 Teacher-account表
数据项名 |
数据类型 |
长度 |
完整性约束 |
教师编号 |
char |
10 |
主键 |
教师密码 |
char |
10 |
- 管理员账号
表11 Admin-account表
数据项名 |
数据类型 |
长度 |
完整性约束 |
管理员编号 |
char |
10 |
主键 |
管理员密码 |
char |
10 |
- 学生账号
表12 student-account表
数据项名 |
数据类型 |
长度 |
完整性约束 |
学生编号 |
char |
12 |
主键 |
学生密码 |
char |
10 |
3.3 关系模式的优化
该关系模式已经满足规范化需求,这里不进行规范化处理。
4、物理结构设计
4.1 聚簇设计
教师Teacher(教师编号)
课程Course(课程编号)
学生Students(学生编号,班级编号)
班级Class(班级编号)
原因:这几张表都是实体表,同时聚簇中的属性都是主键或是外键,且被访问次数高,而其他表或者这些表上的其他属性被访问次数较低,没有考虑聚簇的必要。
原则:
1基本表中该属性访问次数较多
2基本表中某属性列重复率较高
3基本表中某属性列的值修改很少,或者增加和删除元组次数较少
4.2 索引设计
建立索引的一般规则:
- 在主键属性列和外键属性列上通常都可以分别建立索引,不仅有助于唯一性检查和完整性检查,而且可以加快连接查询的速度。
- 以查询为主的关系可建立尽可能多的索引。
- 对等值连接,但满足条件的元组较少的查询可以考虑建立索引。
- 如果查询可以从索引直接得到结果而不必访问关系,则对此种查询可以建立索引。
所以我们建了这些索引:
(1)
教师表Xum_Teachers18 索引:(教师编号 xm_Tno18)
create unique index Tea_Tno on Xum_Teachers18(xm_Tno18)
(2)
课程表Xum_Courses18 索引:(课程编号xm_Cno18)
create unique index Cour_Cno on Xum_Courses18(xm_Cno18)
(3)
班级表 Xum_Class18 索引:(班级编号 xm_CLno18, 专业编号xm_Mno18)
create unique index Mno_CLno on Xum_Class18(xm_CLno18,xm_Mno18)
(4)
学生表Xum_Students18 索引:(学生学号xm_Sno18,班级编号xm_CLno18)
create unique index CLno_Sno on Xum_Students18(xm_Sno18,xm_CLno18)
(5)
成绩报告表Xum_Reports18 索引:(学生编号xm_Sno18 ,课程编号xm_Cno18)
create unique index Cno_Sno on Xum_Reports18(xm_Sno18,xm_Cno18)
(6)
专业表 xm_Cno18 索引:(专业编号xm_Mno18)
create unique index Majo_Mno on Xum_Majors18(xm_Mno18)
4.3 分区设计
磁盘分区设计的一般原则:
1减少访问冲突,提高I/O并发性。多个事物并发访问同一磁盘时,会产生磁盘访问冲突而导致效率低下,如果事务访问数据均能分布于不同磁盘上,则I/O可并发执行,从而提高数据库访问速度。
2分散热点数据,均衡I/O负担。在数据库中数据访问的频率是不均匀的,那些经常被访问的数据成为热点数据,此类数据宜分散存在于不同的磁盘上,以均衡各个磁盘的负荷,充分发挥多磁盘的并行操作的优势。
3保证关键数据快速访问,缓解系统瓶颈。在数据库中有些数据如数据字典等的访问频率很高,为保证对它的访问不直接影响整个系统的效率,可以将其存放在某一固定磁盘上,以保证其快速访问。
实际例子有将关系和索引放在不同磁盘上,查询时两个磁盘同时运行提高物理I/O效率。
不过考虑到本次课题数据量有限,暂不考虑分区设计。
5、数据库实施
5.1 基本表建立
- (1)教师表建立 Xum_Teachers18
图10 建立教师表
create table Xum_Teachers18 (
xm_Tno18 char(10) primary key,
xm_Tname18 char(10),
xm_Tsex18 char(5),
xm_Tage18 int,
xm_Tpos18 char(10),
xm_Tpho18 char(20)
)
(2)专业表建立Xum_Majors18
create table Xum_Majors18(
xm_Mno18 char(10) primary key,
xm_Mname18 char(10)
)
(3)班级表建立Xum_Class18
create table Xum_Class18(
xm_Clno18 char(10) primary key,
xm_Clname char(10),
xm_Mno18 char(10)
constraint Major_Class foreign key(xm_Mno18) references Xum_Majors18
)
(4)学生表Xum_Students18
create table Xum_Students18(
xm_Sno18 char(12) primary key,
xm_Sname18 char(10),
xm_Ssex18 char(5),
xm_Sage18 int,
xm_Sorig18 char(20),
xm_Ssum18 float,
xm_Clno18 char(10)
constraint Class_Student foreign key(xm_Clno18) references Xum_Class18
)
(5)课程表 Xum_Courses18
create table Xum_Courses18(
xm_Cno18 char(10) primary key,
xm_Cname18 char(10),
xm_Tname18 char(10),
xm_Cdate18 char(20),
xm_Cway18 char(5),
xm_Ccredit18 float check(xm_Ccredit18>0),
xm_Chour18 int check(xm_Chour18>0)
)
(6)授课表 Xum_Tea_Cour18
create table Xum_Tea_Cour18(
xm_Tno18 char(10),
xm_Cno18 char(10),
primary key(xm_Tno18,xm_Cno18),
constraint teacher_course foreign key(xm_Tno18) references Xum_Teachers18,
constraint tea_cour foreign key(xm_Cno18) references Xum_Courses18
)
(7)班级上课表Xum_Class_Cour18
create table Xum_Class_Cour18(
xm_Clno18 char(10),
xm_Cno18 char(10),
primary key(xm_Clno18,xm_Cno18),
constraint class_course foreign key(xm_Clno18) references Xum_Class18,
constraint clas_cour foreign key(xm_Cno18) references Xum_Courses18
)
(8)教师任课表Xum_Teac_Class18
create table Xum_Teac_Class18(
xm_Tno18 char(10),
xm_Clno18 char(10),
primary key(xm_Tno18,xm_Clno18),
constraint tea_class foreign key(xm_Tno18) references Xum_Teachers18,
constraint teach_class foreign key(xm_Clno18) references Xum_Class18
)
(9)成绩表Xum_Reports18
create table Xum_Reports18(
xm_Cno18 char(10),
xm_Sno18 char(12),
xm_Score18 float,
xm_date char(10),
xm_Tname18 char(10),
primary key(xm_Cno18,xm_Sno18),
constraint cour foreign key(xm_Cno18) references Xum_Courses18,
constraint stude foreign key(xm_Sno18) references Xum_Students18
)
(10)管理员账号密码表 (11)学生账号密码表(12)教师账号密码表
create table Students_account18(
xm_Sno18 char(12) primary key,
xm_Skey18 char(10)
)
create table Teachers_account18(
xm_Tno18 char(12) primary key,
xm_Tkey18 char(10)
)
create table Admin_account18(
xm_Ano18 char(12) primary key,
xm_Akey18 char(10)
)
(13)数据库表预览
5.2 视图的建立
(1)学生成绩
create view 学生成绩统计
as
(select Xum_Students18.xm_Sno18,Xum_Students18.xm_Sname18,
Xum_Courses18.xm_Cname18,Xum_Class18.xm_Clname,
Xum_Reports18.xm_Tname18,Xum_Courses18.xm_Ccredit18,
Xum_Courses18.xm_Cdate18,Xum_Reports18.xm_Score18
from Xum_Reports18,Xum_Students18,Xum_Courses18,Xum_Class18
where Xum_Students18.xm_Sno18=Xum_Reports18.xm_Sno18
and Xum_Reports18.xm_Cno18=Xum_Courses18.xm_Cno18
and Xum_Class18.xm_Clno18=Xum_Students18.xm_Clno18
)
(2)课程平均成绩
create view 每门平均成绩
as(
select xm_Cno18,avg(xm_Score18)平均分
from Xum_Reports18
group by xm_Cno18
)
(3)课程和学分统计
create view 课程和学分统计
as
(
select xm_Sno18,xm_Cname18,xm_Ccredit18
from 学生成绩统计
)
(4)教师课表
create view 教师课表
as(
select xm_Tno18,Xum_Teachers18.xm_Tname18,xm_Cno18,xm_Cname18,
xm_Ccredit18,xm_Chour18
from Xum_Teachers18,Xum_Courses18
where Xum_Teachers18.xm_Tname18=Xum_Courses18.xm_Tname18
)
(5)班级课表
create view 班级课表
as
(
select Xum_Class18.xm_Clno18,xm_Clname,Xum_Courses18.xm_Cno18,
xm_Cname18,xm_Cdate18,xm_Ccredit18,xm_Chour18
from Xum_Class18,Xum_Courses18,Xum_Class_Cour18
where Xum_Class18.xm_Clno18=Xum_Class_Cour18.xm_Clno18
and Xum_Class_Cour18.xm_Cno18=Xum_Courses18.xm_Cno18
)
(6)生源地人员统计
create view 生源地人员统计
as
(select xm_Sorig18,count(xm_Sno18)数量
from Xum_Students18
group by xm_Sorig18
)
(7)教师课程成绩
create view 教师课程成绩
as
(
select xm_Tno18,Xum_Teachers18.xm_Tname18,xm_Cno18,xm_Sno18,xm_Score18
from Xum_Teachers18,Xum_Reports18
where Xum_Teachers18.xm_Tname18=Xum_Reports18.xm_Tname18
)
(8)教师与学生成绩
(9)视图预览
5.3 索引的建立
create unique index Tea_Tno on Xum_Teachers18(xm_Tno18)
create unique index Cour_Cno on Xum_Courses18(xm_Cno18)
create unique index Mno_CLno on Xum_Class18(xm_CLno18,xm_Mno18)
create unique index Majo_Mno on Xum_Majors18(xm_Mno18)
create unique index CLno_Sno on Xum_Students18(xm_Sno18,xm_CLno18)
create unique index Cno_Sno on Xum_Reports18(xm_Sno18,xm_Cno18)
5.4 触发器建立
(1)教师删除(删除一个教师时,与教师相关的记录全都删除)
这里漏写了删除教师账号信息 如果运行出错了 可以参考“学生删除“代码 改写触发器
create trigger 教师删除18
on Xum_Teachers18
for delete
as
delete xm_Tno18
where Xum_Tea_Cour18.xm_Tno18=(select xm_Tno18 from deleted)
and Xum_Teac_Class18.xm_Tno18=(select xm_Tno18 from deleted)
(2)学生删除(删除一个学生时,与该学生相关的记录全都删除
create trigger 学生删除18
on Xum_Students18
for delete
as
begin
delete from Xum_Reports18
where Xum_Reports18.xm_Sno18 in (select xm_Sno18 from deleted)
delete from Students_account18
where Students_account18.xm_Sno18 in (select xm_Sno18 from deleted)
end
(3)学生统计(提交成绩时,将》=60的成绩记为合格,同时加上该课程学分)
create trigger 学分统计18 on Xum_Reports18
for insert
as
update Xum_Students18
set xm_Ssum18=(
select sum(xm_Ccredit18)
from Xum_Courses18
where xm_Cno18 in
(
select xm_Cno18
from Xum_Reports18
where xm_Score18>=60
and Xum_Reports18.xm_Sno18 in
(select xm_Sno18
from inserted)
)
)
where Xum_Students18.xm_Sno18 in
(
select xm_Sno18
from inserted
)
(4)教师更新
create trigger 教师更新
on Xum_Teachers18
for update
as
if update(xm_Tno18)
begin
update Xum_Tea_Cour18
set xm_Tno18=i.xm_Tno18
from deleted d,inserted i ,Xum_Tea_Cour18 t
where t.xm_Tno18=d.xm_Tno18
end
begin
update Xum_Teac_Class18
set xm_Tno18=i.xm_Tno18
from deleted d,inserted i,Xum_Teac_Class18 c
where c.xm_Tno18=d.xm_Tno18
end
(5)学生添加 自动注册新用户 默认密码12345
create trigger 插入创建学生新用户18
on Xum_Students18
for insert
as
declare @sno char(10)
begin
select @sno=xm_Sno18 from inserted
insert into Students_account18
values(@sno,'12345')
end
(6)教师添加 自动注册新用户 默认密码12345
create trigger 插入创建教师新用户18
on Xum_Teachers18
for insert
as
declare @tno char(10)
begin
select @tno=xm_Tno18 from inserted
insert into Teachers_account18
values(@tno,'12345')
end
5.5 建存储过程
(1)插入新学生
create procedure pro_插入新学生
@sno char(12),
@sname char(10),
@ssex char(5),
@sage int,
@sorig char(20),
@ssum float,
@clno char(10)
as
insert Xum_Students18(xm_Sno18,xm_Sname18,xm_Ssex18,xm_Sage18
,xm_Sorig18,xm_Ssum18,xm_Clno18)
values(@sno,@sname,@ssex,@sage,@sorig,@ssum,@clno)
select *
from Xum_Students18
go
(2)自动算学分
create procedure pro_输入成绩自动生成学分
@sno char(12),
@cno char(10),
@cname char(10),
@cdate char(10),
@score int,
@tname char(10),
@credit float
as
begin
insert into pro_选修
values(@sno,@cno,@score)
update Xum_Students18
set xm_Ssum18=xm_Ssum18+@credit
where Xum_Students18.xm_Sno18=@sno
end
6、应用系统开发与试运行
6.1 开发平台和开发环境介绍。
Visual studio 2013 + SQL server 2014
Win10系统
6.2 前台界面与后台数据库连接说明,代码实现。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;
using System.Data.SqlClient;
using System.Windows.Forms;
namespace WindowsFormsApplication1
{
class sqlConnect
{
public SqlConnection conn = null;
public sqlConnect()
{
if (conn == null)
{
string connectString = "Data Source =LAPTOP-FPCD1SM8\\SQL2014; database =XumMIS18; " +
"Integrated Security = True";
conn = new SqlConnection(connectString);
if (conn.State == ConnectionState.Closed) conn.Open();
}
}
public void closeConnect()
{
if (conn.State == ConnectionState.Closed) conn.Close();
}
public DataSet Getds(string sql)
{
if (conn.State == ConnectionState.Closed) conn.Open();
DataSet ds = new DataSet();
SqlDataAdapter da = new SqlDataAdapter(sql, conn);
da.Fill(ds);
conn.Close();
return ds;
}
public int OperateData(string sql)
{
if (conn.State == ConnectionState.Closed) conn.Open();
SqlCommand sqlcom = new SqlCommand();
sqlcom.CommandText = sql;
sqlcom.CommandType = CommandType.Text;
sqlcom.Connection = conn;
int x = sqlcom.ExecuteNonQuery();
conn.Close();
return x;
}
public DataSet BindDataGridView(DataGridView dgv, string sql)
{
if (conn.State == ConnectionState.Closed) conn.Open();
SqlDataAdapter da = new SqlDataAdapter(sql, conn);
DataSet ds = new DataSet();
da.Fill(ds);
dgv.DataSource = ds.Tables[0];
return ds;
}
}
}
6.3 系统各功能设计和运行界面截图。
(1)登录界面如图所示
①登入异常
(输入的密码、账号错误,提示框报错)
图43 账号或密码错误
②输入不完整
③验证成功
(2)进入学生界面
①个人信息查询
②成绩查询,选择学年查询
③班级课表查询
④学生课表和学分查询
⑤修改密码
输入为空
原密码输入错误(原密码为123456)
两次新密码验证不通过
修改成功
(3)教师界面
①教师个人信息查询
②教师任课查询
③所任课程平均成绩
④查询选择该课程学生的分数排名(分数按降序)
⑤教师提交学生成绩 添加成绩(课程里只有这个老师教的课)
确定课程出现选择该课程学生的信息
删除信息
修改成绩(只能修改成绩,只有最后一行可编辑,将第二位同学 99改为98)
⑥修改密码和学生界面类似
(4)管理员界面
①教师管理
实现插入编号为T10的教师信息,同时查询编号为T10老师的信息
插入的教室信息(T10,舒克,男,46,教授,3765874563)查询T10老师的信息
教师删除(删除为T10教师的信息)
修改T09教师的年龄(36–>45)
②学生界面
可以实现学生信息的插入、删除、修改以及查询和教师界面类似,这里不做过大介绍
③管理员生源统计
④管理员修改密码与学生老师的相同
⑤管理员重置教师、学生密码
为防止有教师、学生忘记密码,这里提供密码重置功能。
7、实验总结
7.1 遇到的问题和解决的办法
(1)因为从来没有写过C#代码,刚开始的时候,对这门语言非常陌生,不知道从何下,所以,我的界面模块都是按照书本后面的实例代码写的,写的时候其实心里还是非常模糊,不知道怎么实现代码和数据库的嵌入,花了很多时间在探索上。但是C#是一门非常适合做界面的语言,它继承了C语言和java语言的优点,同时界面上控件的安放十分简单上手。
(2)在系统需求分析完成以后,根据用户需求设计概念结构的时候遇到了数据冗余等多种问题,经过慢慢的分解关系最终得到了相对来说还比较完善的概念结构,通过ER图表示出来。
(3)设计数据库的时候,原本是没有想到触发器和存储过程的设计,但是当界面设计完成的差不多,要初步测试界面功能时,才发现数据库的设计存在很多缺陷,在实现插入、删除时,多张表之间存在信息不对称问题,例如教师或学生删除后,没有将其相关记录删除,也没有将其账号注销,更新信息也同样存在这样的问题,因此,测试时出现了很多异常情况,不过后来添加了触发器,大抵上解决了这些问题。
(4)SQL语句经常出错。因为是写在代码里面,查询语句表现出来就是一串字符串,在SQL SEVER写查询语句时,会自动检查拼写、逻辑错误,直接在代码里面写SQL语句非常容易出错,导致程序的中端。因为本质上都是对数据库的操作,我认为可以先在SQL SEVER中写好语句,并且验证其的正确性之后,再写入C# 代码中,这样会大大降低错误率。
(5)字符串匹配问题,在实现用户登录及密码修改时,我发现,对查询结果与本身的字符串进行匹配时,尽管他们显示出是相等的,但是匹配是不成功的。譬如说登录时,输入账号为A01,先通过查询找出A01的密码,在将输入的密码与其匹配,实验中将这两个进行输出,肉眼上是看不出差别的,但是程序匹配上是永远失败的,这个问题产生的原因至今我还是不太清楚。后来,我将这两个查询语句进行合并,返回满足账号和密码的记录数,若记录为0,则说明输入的账号或密码有误,若不是0,则说明输入无误。
7.2 系统设计的不足
(1)数据库表格的设计存在一些不合理的地方,Reports表中,感觉加入教师编号会更利与数据库的实现,因为只有教师姓名,会加剧设计教师与学生操作的复杂性,且出错率也会变高。
(2)功能实现的不够全面,管理员的功能主要体现在老师和学生这两种类别上,其实还可以进行课程的管理等等,学生的选课、退课功能也还没有考虑上,整个系统还是比较脆弱简单的。
(3)在进行学生成绩排名的时候,只能显示排名结果,但是不能显示名次。
(4)数据库设计时,涉及到班级和专业的地方很少,实际中,应该把这两个也考虑进去,才能完善整个系统。
(5)建立了太多视图,设计视图的时候,因为有很多信息的交叉,还有很多外键,需要很多自然连接 ,非常繁琐。
7.3 进一步改进思路和体会
(1)本次课设让我理解了设计数据库的复杂性,并且数据库的设计一定要保障数据库的完整性和准确性,这些在数据定义、基本表建立、设计触发器和存储过程时都要仔细考虑。
(2)本次实验也让我对C#这么语言有了初步的理解,C#集合了c语言和java语言的优点,是一门非常适合做界面的语言,界面制作比较容易上手。
(3)设计更多的触发器,加强表与表之间的联系,尽量减少视图的数量,提高基本表与视图的有效性。
(4)优化界面,使界面更加符合实际需求。
体会
通过这次课程设计发现这其中需要的很多知识我们没有接触过,还有很多需要我们掌握的东西我们不明白。同时也发现有很多已经学过的东西我们没有理解到位,不能灵活运用于实际,不能很好的用来解决问题,这就需要我们不断的大量的实践,通过不断的自学,不断地发现问题,思考问题,进而解决问题。从 种文档的阅读到开始的需求分析、概念结构设计、逻辑结构设计、物理结构设计。亲身体验了一回系统的设计开发过程。很多东西书上写的很清楚,貌似看着也很简单,操作起来要考虑到方方面面,这还只是一个比较简单的系统,可想可知在我们生活中应用的数据库会有多么复杂。
(写得比较简陋,页面不太美观,数据结构也存在问题,数据库文件已经找不到了,想要参考C#源码的可以私我,一定要先建好数据库(修改sqlConnect.cs的数据库名称),确保连接没问题,再将C#每个页面的查询语句改成自己建的表)
不知道的看SQL Sever开启时服务器名称
要成功运行 一定要建好数据库、插入数据,插入的数据一定要有一定的对应关系,遵循主外键约束,当数据插入完毕之后。
插入数据参考
insert
into Xum_Majors18
values('M01','计智')
insert
into Xum_Majors18
values('M02','计科')
insert
into Xum_Majors18
values('M03','软工')
insert
into Xum_Majors18
values('M04','网工')
insert
into Xum_Class18
values('CL01','计智1902','M01')
insert
into Xum_Class18
values('CL02','计智1902','M01')
insert
into Xum_Class18
values('CL03','计科1902','M02')
insert
into Xum_Class18
values('CL04','计科1902','M02')
insert
into Xum_Class18
values('CL05','网工1901','M03')
insert
into Xum_Class18
values('CL06','网工1902','M03')
insert
into Xum_Class18
values('CL07','软工1901','M04')
insert
into Xum_Class18
values('CL08','软工1902','M04')
insert
into Xum_Courses18
values('C01','离散数学','程珍','大一下','考试',4,24)
insert
into Xum_Courses18
values('C03','机器学习','黄亮','大一下','考查',4 ,24)
insert
into Xum_Courses18
values('C04','数字电路','赵冬冬','大一下','考试',4 ,24)
insert
into Xum_Courses18
values('C05','数字电路','龙胜春','大一下','考试',4 ,24)
insert
into Xum_Courses18
values('C06','马原','周文','大一上','考试',3 ,18)
insert
into Xum_Courses18
values('C07','毛概','陈燕','大一下','考试',3 ,18)
insert
into Xum_Courses18
values('C08','思修','吴五','大一上','考试', 4,24)
insert
into Xum_Students18
values('06060101','张三','男',20,'浙江',20,'CL01')
insert
into Xum_Students18
values('06060102','李四','男',20,'浙江',15,'CL01')
insert
into Xum_Students18
values('06060103','王五','男',20,'浙江',10,'CL02')
insert
into Xum_Students18
values('06060104','张南','女',20,'浙江',22,'CL02')
insert
into Xum_Students18
values('06060105','丽丽','女',20,'北京',18,'CL03')
insert
into Xum_Students18
values('06060106','倩倩','女',20,'浙江',19,'CL03')
insert
into Xum_Students18
values('06060107','悠悠','女',20,'浙江',25,'CL04')
insert
into Xum_Students18
values('06060108','琪琪','男',20,'安徽',22,'CL04')
insert
into Xum_Students18
values('06060109','贝奇','男',20,'湖南',20,'CL05')
insert
into Xum_Students18
values('06060110','洛克','男',20,'浙江',20,'CL05')
insert
into Xum_Students18
values('06060202','尼克','男',20,'江苏',15,'CL06')
insert
into Xum_Students18
values('06060203','艾米','女',20,'江西',10,'CL06')
insert
into Xum_Students18
values('06060301','丝尔特','女',20,'福建',20,'CL07')
insert
into Xum_Students18
values('06060302','梅森','男',20,'浙江',15,'CL07')
insert
into Xum_Students18
values('06060403','大卫','男',20,'浙江',10,'CL08')
insert
into Xum_Students18
values('06060405','汤米','女',20,'浙江',22,'CL08')
insert
into Xum_Teachers18
values('T01','程珍','女',35,'教师','13344332278')
insert
into Xum_Teachers18
values('T02','王英姿','女',35,'教师','13756742178')
insert
into Xum_Teachers18
values('T03','黄亮','男',34,'教师','15745723349')
insert
into Xum_Teachers18
values('T04','赵冬冬','男',30,'教师','17858640979')
insert
into Xum_Teachers18
values('T05','龙胜春','女',37,'教师','17857573670')
insert
into Xum_Teachers18
values('T06','周文','女',32,'教师','18367986174')
insert
into Xum_Teachers18
values('T07','陈燕','女',45,'教师','17858427842')
insert
into Xum_Teachers18
values('T08','吴五','男',35,'教师','15724547842')
insert
into Xum_Tea_Cour18
values('T01','C01')
insert
into Xum_Tea_Cour18
values('T02','C02')
insert
into Xum_Tea_Cour18
values('T03','C03')
insert
into Xum_Tea_Cour18
values('T04','C04')
insert
into Xum_Tea_Cour18
values('T05','C05')
insert
into Xum_Tea_Cour18
values('T06','C06')
insert
into Xum_Tea_Cour18
values('T07','C07')
insert
into Xum_Tea_Cour18
values('T08','C08')
insert
into Xum_Class_Cour18
values('CL01','C01')
insert
into Xum_Class_Cour18
values('CL02','C02')
insert
into Xum_Class_Cour18
values('CL03','C03')
insert
into Xum_Class_Cour18
values('CL04','C04')
insert
into Xum_Class_Cour18
values('CL05','C05')
insert
into Xum_Class_Cour18
values('CL06','C06')
insert
into Xum_Class_Cour18
values('CL07','C07')
insert
into Xum_Class_Cour18
values('CL08','C08')
insert
into Xum_Teac_Class18
values('T01','CL01')
insert
into Xum_Teac_Class18
values('T02','CL02')
insert
into Xum_Teac_Class18
values('T03','CL03')
insert
into Xum_Teac_Class18
values('T04','CL04')
insert
into Xum_Teac_Class18
values('T05','CL05')
insert
into Xum_Teac_Class18
values('T06','CL06')
insert
into Xum_Teac_Class18
values('T07','CL07')
insert
into Xum_Teac_Class18
values('T08','CL08')
insert
into Xum_Reports18
values('C01','06060101',90,'大一下','程珍')
insert
into Xum_Reports18
values('C01','06060102',93,'大一下','程珍')
insert
into Xum_Reports18
values('C02','06060103',78,'大一上','王英姿')
insert
into Xum_Reports18
values('C02','06060104',96,'大一上','王英姿')
insert
into Xum_Reports18
values('C03','06060105',87,'大一下','黄亮')
insert
into Xum_Reports18
values('C03','06060106',98,'大一下','黄亮')
insert
into Xum_Reports18
values('C04','06060107',94,'大一下','赵冬冬')
insert
into Xum_Reports18
values('C04','06060108',80,'大一下','赵冬冬')
insert
into Xum_Reports18
values('C05','06060109',87,'大一下','龙胜春')
insert
into Xum_Reports18
values('C05','06060110',96,'大一下','龙胜春')
insert
into Xum_Reports18
values('C06','06060202',95,'大一上','周文')
insert
into Xum_Reports18
values('C06','06060203',93,'大一上','周文')
insert
into Xum_Reports18
values('C07','06060301',98,'大一下','陈燕')
insert
into Xum_Reports18
values('C07','06060302',77,'大一下','陈燕')
insert
into Xum_Reports18
values('C08','06060403',67,'大一上','吴五')
insert
into Xum_Reports18
values('C08','06060405',88,'大一上','吴五')
insert
into Teachers_account18
values('T01','12345')
insert
into Teachers_account18
values('T02','12345')
insert
into Teachers_account18
values('T03','12345')
insert
into Teachers_account18
values('T04','12345')
insert
into Teachers_account18
values('T05','12345')
insert
into Teachers_account18
values('T06','12345')
insert
into Teachers_account18
values('T07','12345')
insert
into Teachers_account18
values('T08','12345')
insert into
Students_account18
values('06060101','12345')
insert into
Students_account18
values('06060102','12345')
insert into
Students_account18
values('06060103','12345')
insert into
Students_account18
values('06060104','12345')
insert into
Students_account18
values('06060105','12345')
insert into
Students_account18
values('06060106','12345')
insert into
Students_account18
values('06060107','12345')
insert into
Students_account18
values('06060108','12345')
insert into
Students_account18
values('06060109','12345')
insert into
Students_account18
values('06060110','12345')
insert into
Students_account18
values('06060202','12345')
insert into
Students_account18
values('06060203','12345')
insert into
Students_account18
values('06060301','12345')
insert into
Students_account18
values('06060302','12345')
insert into
Students_account18
values('06060403','12345')
insert into
Students_account18
values('06060405','12345')
insert into
Admin_account18
values('A01','12345')
insert into
Admin_account18
values('A02','12345')
打开所有协议,然后修改每个界面的查询语句
注意点:
1.C#源码用VS2013运行 其他版本可能会出错 SQL sever选择2014版
2.不要重复插入数据,插入的数据遵循主外键约束
3.触发器一定要写 如果不想写的话 就把对应的功能去掉(譬如“教师删除“”触发器,可以直接删除掉“删除教师”的功能)如果要留下这些功能 一定要写触发器
4.视图可以不建立 运行过程中并没有用到
5.可以先在SQL里面运行语句 再去C#里面运行 这样出错概率低
6.源码里面有几个页面多余 运行时没有用到就可以删掉
7.数据库连接问题 要把所有协议打开 保证服务器名没有写错
8.页面可以自己重新编辑(换控件、背景jpg、增添功能)
(不需要关注我的 只是学习分享,只要私信我,或者在下方留言我都会发的 不需要已关注的)
因为感觉评论好像会审核 提醒的也比较慢 并且也有点泄露隐私 大家尽量私信我就好了 这样回复也方便一点
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/160483.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...