数据库课程设计SQLServer数据库课程设计(学生宿舍管理),课设报告+源码+数据库关系图
Posted 不下水的鸭
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数据库课程设计SQLServer数据库课程设计(学生宿舍管理),课设报告+源码+数据库关系图相关的知识,希望对你有一定的参考价值。
数据库课程设计——学生宿舍管理,需要全部源码可以关注私信我,把邮箱发在评论区
前言
学生宿舍管理系统从实际问题出发,解决高校传统方式进行学生宿舍管理的缺点,极大提高了学生宿舍管理的效率。本系统基于SQLServer数据库系统,从学生和管理人员两个角度出发进行设计。从学生角度出发,学生能够查看个人信息,查看宿舍的信息,提交更换宿舍申请以及修改登录密码;从管理人员角度出发,实现管理宿舍信息、学生信息、对宿舍、学生进行增删改查、分配新生的宿舍、对申请更换宿舍的学生进行宿舍的分配。不仅如此,针对低权限的管理人员,不能操作宿舍楼、宿舍信息,加强了数据的保密性。
一、课题背景和开发环境
1、课题背景
学生宿舍管理系统对于一个学校来说是不可获取的重要组成部分。学生宿舍是大学生在高校校园里一个重要的学习、生活、交往的空间环境。大学生,大约有2/3 的时间是在宿舍环境里度过的。随着高校办学规模的扩大,在校学生的学历层次、思想状态、文化水平呈多样化、复杂化趋势,这在很大程度上给学生管理工作带来许多新的问题。例如:学生宿舍的住宿管理也日益增多,宿管员的工作难度逐渐加大,已经不能满足实际的需要,工作效率也比较低,并且这种传统方式也存在着许多弊端,如:保密性差,效率低,很难保存记录等。当今社会是飞速进步的世界,原始的记录方式已经被社会所淘汰了,计算机化管理正是适应时代的产物。采用计算机来管理宿舍和学生的信息,大大提高了查询的速度,节约了人力和物力资源。现如今,计算机的价格十分亲民,性能也有了很大的进步。它已经被应用于许多领域。我们针对高校学生宿舍存在的问题,设计了一套学生宿舍管理系统。本系统针对高校采用传统方式管理的缺点,极大提高了学生宿舍管理的效率,也是科学化、正规化的管理;本系统的开发是为了方便宿管员的管理以及对相关信息的更新,为老师、学生查询所在宿舍的信息。实现寝室信息管理工作流程的系统化、规范化和自动化。
2、开发环境
使用的数据库是Microsoft SQL Server Management Studio 18。具有许多显著的优点:易用性、适合分布式组织的可伸缩性、用于决策支持的数据仓库功能、与许多其他服务器软件紧密关联的集成性、良好的性价比等。使用了Visual Studio 2022中的Window 窗体应用(.NET Framework),用于创建具有Window窗体用户界面的项目。
二、系统功能及示意图
1、系统实现功能
从实际生活应用角度出发,学生宿舍管理系统应该同时提供给系统管理员与学生使用,而二者所需要的功能并不相同。因此系统从学生与管理员两个角度进行出发,结合实际所需要的操作进行分模块设计。
一、学生界面功能:
(1)登录功能:设计登录界面,针对学生输入的学号密码,通过匹配数据库里的学号密码,实现不同的学生进行登录。
(2)个人信息查询:通过学生的学号查询,学生可以检查自己的各项信息。
(3)修改密码:通过学号进行密码修改,学生可以修改自己的登录密码。
(4)宿舍信息查询:宿舍信息界面向学生展示了宿舍成员的信息,以及宿舍的一些基本信息。
(5)申请更换宿舍:学生可以根据自己需求,向管理员提出更换宿舍的申请,需等管理员同意且分配完宿舍后,才有新的宿舍信息。
二、管理人员界面功能
(1)宿舍楼管理:根据填写的信息,对宿舍楼进行增删改查。
(2)宿舍管理界面:根据填写的信息,对宿舍的信息进行增删改查操作。
(3)分配宿舍界面:给未分配宿舍的同学,进行宿舍分配,其中有未分配人员的信息,空余宿舍的信息。
(4)学生信息管理界面:对学生信息进行增删改查操作。
(5)调整宿舍界面:对申请更换宿舍的学生进行调整,其中有申请同学的信息和空余宿舍的信息。
(6)登录功能:在登录界面,选择管理员,输入正确的账号密码即可进入管理人员界面。对于低权限的管理人员不能进行宿舍楼管理和宿舍管理。只有超级管理员才可以进行这两个操作。
2、功能示意图
2.1学生模块
2.2管理人员模块
三、概念结构设计
1、管理员分配宿舍E_R图
2、数据库关系图
四、数据库表
①Student
由上表(数据图关系图)可知,学生需要有姓名,性别,出生日期,专业,班级,手机号码的属性,因此创建学生表。
代码如下:
CREATE TABLE [dbo].[Student](
[ssid] [char](10) NOT NULL,
[sname] [varchar](10) NULL,
[sex] [char](2) NULL,
[birth] [datetime] NULL,
[sdept] [varchar](20) NULL,
[class] [int] NULL,
[phone] [varchar](15) NULL,
PRIMARY KEY CLUSTERED
(
[ssid] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, OPTIMIZE_FOR_SEQUENTIAL_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY]
GO
②Studentlogin
学生登录表记录了学生的登录账号和密码,该表的账号为学生的学号,是Student表中ssid的外键。
代码如下:
CREATE TABLE [dbo].[Studentlogin](
[ssid] [char](10) NULL,
[pwd] [char](10) NULL
) ON [PRIMARY]
GO
③Building
宿舍楼有楼号,宿舍数量和地理位置的属性,所以我们创建宿舍楼表,记录每栋楼的信息,将楼号bid设为主键。
代码如下:
CREATE TABLE [dbo].[Building](
[bid] [char](10) NOT NULL,
[num] [int] NULL,
[local] [char](20) NULL,
CONSTRAINT [PK__Building__DE90ADE74750D263] PRIMARY KEY CLUSTERED
(
[bid] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, OPTIMIZE_FOR_SEQUENTIAL_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY]
GO
④Dormitory
宿舍有宿舍编号(方便运用),楼号,宿舍号,楼层,床位,价格等信息,所以我们建立宿舍表,将宿舍号设为主键。
代码如下:
CREATE TABLE [dbo].[Dormitory](
[did] [int] NOT NULL,
[bid] [char](10) NULL,
[dnum] [int] NULL,
[dfloor] [int] NULL,
[bed] [int] NULL,
[price] [decimal](18, 0) NULL,
CONSTRAINT [PK__Dormitor__D877D216A2D12D3F] PRIMARY KEY CLUSTERED
(
[did] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, OPTIMIZE_FOR_SEQUENTIAL_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY]
GO
⑤Manager
管理员拥有账号,密码,姓名和权限这些属性,权限用以区别超级管理员和普通管理员,并且将账号mid设为主键。
代码如下:
CREATE TABLE [dbo].[Manager](
[mid] [int] NOT NULL,
[pass] [char](10) NULL,
[sname] [char](5) NULL,
[permission] [char](1) NULL,
PRIMARY KEY CLUSTERED
(
[mid] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, OPTIMIZE_FOR_SEQUENTIAL_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY]
GO
⑥StuDormitory
学生宿舍表记录学生的宿舍编号和学号,将学号和宿舍编号设为主键,才能唯一确定一条记录,学号为Student表的ssid的外键,宿舍编号为Dormitoryd的did的外键。
代码如下:
CREATE TABLE [dbo].[StuDormitory](
[did] [int] NOT NULL,
[ssid] [char](10) NOT NULL,
PRIMARY KEY CLUSTERED
(
[did] ASC,
[ssid] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, OPTIMIZE_FOR_SEQUENTIAL_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY]
GO
⑦Apply
学生宿舍申请表拥有学号,旧宿舍,申请日期,原因和状态五个属性,状态为0表示处理完,状态为1表示未处理。学号是Student表的ssid的外键。
代码如下:
CREATE TABLE [dbo].[Apply](
[ssid] [char](10) NULL,
[olddnum] [int] NULL,
[adate] [datetime] NULL,
[reason] [varchar](50) NULL,
[condition] [int] NULL
) ON [PRIMARY]
GO
⑧Change
学生宿舍变动表记录学生的学号,处理日期,旧宿舍和更换过后的新宿舍,学号是Student表的外键。
代码如下:
CREATE TABLE [dbo].[Change](
[ssid] [char](10) NULL,
[olddnum] [int] NULL,
[newdnum] [int] NULL,
[cdata] [datetime] NULL
) ON [PRIMARY]
GO
五、数据库的实施
1、触发器设计
1、Studentlogin表的插入触发器。当插入学号和密码时,表中存在相同学号,则不允许插入。
2、更换宿舍申请表的插入触发器。当进行插入时,幻表中已经进行了插入,获取当前表中按时间顺序排第二的记录(即插入记录的上一条记录)得到处理状态,如果为0,证明处理完毕,可以进行插入,如果为1,证明尚未处理,不可插入。
3、学生宿舍表的插入触发器。如果在表中不存在插入的学号,并且插入的宿舍剩余床位大于0,则同意插入,不满足二者其一条件则不允许插入。
六、部分系统功能设计与实现
1、database类
创建database类,通过非连接的方式访问数据库,对传参的sql语句进行处理,有两个方法,获取数据()与更新(),获取数据主要是用于读取数据库的信息,利用SqlDataAdapter的对象myAdapter.Fill方法将数据从数据库复制到DataSet的对象myDataSet中,最后将myDataSet返回。就实现了从数据库获取信息。更新主要是用于对数据库的数据进行增删改查操作。创建database类方便之后要从数据库获取数据的代码编写,减少代码冗余。
代码如下:
using System;
using System.Collections.Generic;
using System.Data;
using System.Data.SqlClient;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace StudentdormManaSys
internal class database
private static string connStr = @"data source=.;database = Dormitorymanager; integrated security = true";
private static SqlConnection conn = new SqlConnection(connStr);
public static DataSet 获取数据(string sqlStr)//sqlStr是需要执行的sql语句
try
conn.Open();
SqlDataAdapter myAdapter = new SqlDataAdapter(sqlStr, conn);
DataSet myDataSet = new DataSet();
myDataSet.Clear();
myAdapter.Fill(myDataSet);
conn.Close();
if (myDataSet.Tables[0].Rows.Count != 0)
return myDataSet;
else
return null;
catch (Exception ex)
MessageBox.Show("打开数据库失败", "提示");
return null;
public static void 更新(string sqlStr)
try
conn.Open();
SqlCommand myCmd = new SqlCommand(sqlStr, conn);
myCmd.CommandType = CommandType.Text;
myCmd.ExecuteNonQuery();
conn.Close();
catch
MessageBox.Show("更新据库失败", "提示");
return;
2、登录界面
用户根据不同的身份(学生或者管理员)进行选择后,输入自己的用户名与密码,如果与数据库匹配正确即可登录。对登录组件利用Color.FromArgb方法设置成透明,使界面展示美观。点击学生则显示学生登录窗口,点击管理人员则显示管理人员登录窗口。一开始加载时默认选择学生登录。
(1)界面展示:
代码如下:
public static string ssid;//设置静态变量,方便之后调用
public static string mmid;
private void studentlogin_CheckedChanged(object sender, EventArgs e)
if (studentlogin.Checked == true)
Stulogin.Show();
Manlogin.Hide();
managerlogin.Checked = false;
private void managerlogin_CheckedChanged(object sender, EventArgs e)
if (managerlogin.Checked == true)
Manlogin.Show();
Stulogin.Hide();
studentlogin.Checked = false;
private void 登录_Load(object sender, EventArgs e)
studentlogin.Checked = true;
logintype.Show();
logintype.BackColor = Color.FromArgb(65, 204, 212, 230);
Stulogin.Show();
Stulogin.BackColor = Color.FromArgb(65, 204, 212, 230);
Manlogin.Hide();
Manlogin.BackColor = Color.FromArgb(65, 204, 212, 230);
button1.BackColor = Color.FromArgb(65, 204, 212, 230);
sidpassword.Clear();
midpassword.Clear();
对登录账号密码进行验证:根据学生跟管理人员的单选框有没有被选中进行判断是学生还是管理员进行登录操作(if-else判断)。采用非连接的方式访问数据库,设置一个DataSet 调用database中获取数据的方法。根据DataSet是否为空,判断是否存在账号。若存在则判断密码与DataSet中的密码字段是否相等,相等就显示登录成功。
代码如下:
private void button1_Click(object sender, EventArgs e)
string connstring = @"Data Source = .;Database = DormitoryManager;integrated security = true";
SqlConnection conn = new SqlConnection(connstring);
try
conn.Open();
if (studentlogin.Checked == true)
string sid = sidaccount.Text.Trim();
ssid = sid;
string sql1 = "select * from Studentlogin where ssid='" + sid + "'";//查找学生账号
DataSet s1 = new DataSet();//new一个对象
s1 = database.获取数据(sql1);//传入查询语句
if (s1 == null)//没有匹配到账户
MessageBox.Show("该账号不存在!");
else
string selectpwd1 = s1.Tables[0].Rows[0]["pwd"].ToString();
if (selectpwd1.Trim().Equals(sidpassword.Text.Trim()))//比较输入密码与表中密码是否一致
MessageBox.Show("恭喜您登录成功!");
学生管理 f1 = new 学生管理();
f1.Show();
else
MessageBox.Show("密码错误!", "提示");
else
string mid = midaccount.Text.Trim();
mmid = mid;
string sql2 = "select * from Manager where mid='"+mid+"'";//查找管理账号
DataSet s2 = new DataSet();//new一个对象
s2 = database.获取数据(sql2);//传入查询语句
if (s2 == null)//没有匹配到账户
MessageBox.Show("该账号不存在!");
else
string selectpwd2 = s2.Tables[0].Rows[0]["pass"].ToString();
if (selectpwd2.Trim().Equals(midpassword.Text.Trim()))//比较输入密码与表中密码是否一致
MessageBox.Show("恭喜您登录成功!");
管理人员界面 f2=new 管理人员界面();
f2.Show();
else
MessageBox.Show("密码错误!", "提示");
catch (Exception ex)
MessageBox.Show("数据库连接异常!" + ex.Message, "系统消息", MessageBoxButtons.OK, MessageBoxIcon.Information);
finally
conn.Close();
3、宿舍界面
(1)界面展示
(2)界面功能
对宿舍进行增删改查的操作,在文本框输入正确的信息即可实现对宿舍进行添加、修改、删除操作。
代码如下:
private void 宿舍更新(string str)//宿舍信息中宿舍信息表更新
DataSet ds = new DataSet();
ds = database.获取数据(str);
if (ds != null)
DorDgv.DataSource = ds.Tables[0];
DorDgv.Columns["did"].HeaderText = "宿舍id";
DorDgv.Columns医院管理系统数据库,课程设计,SQLserver,纯代码设计