羊蹓狼 发表于 2024-6-21 13:40:47

【数据库课程计划】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学生模块

https://img-blog.csdnimg.cn/b59a8ac0e5aa40f1967653217c70fa64.png#pic_center
2.2管理职员模块

https://img-blog.csdnimg.cn/a8a1fb5d0068458d8e1828cd941896b6.png#pic_center
三、概念布局计划

https://img-blog.csdnimg.cn/797b3edeaa924110acade6549415bebf.png#pic_center
https://img-blog.csdnimg.cn/6236f02be49e4382981b57d052a6e43d.png#pic_center
1、管理员分配宿舍E_R图

https://img-blog.csdnimg.cn/b29e51388e8b4e728515f774d2344daf.png#pic_center
2、数据库关系图

https://img-blog.csdnimg.cn/57cd379d315d435198e5bd0ffcc1b9db.png#pic_center
四、数据库表

①Student
由上表(数据图关系图)可知,学生需要有姓名,性别,出生日期,专业,班级,手机号码的属性,因此创建学生表。
https://img-blog.csdnimg.cn/7a92513a07634020a60ee25c01672341.png#pic_center
代码如下:
CREATE TABLE .(
        (10) NOT NULL,
        (10) NULL,
        (2) NULL,
        NULL,
        (20) NULL,
        NULL,
        (15) NULL,
PRIMARY KEY CLUSTERED
(
        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
) ON
GO
②Studentlogin
学生登录表记录了学生的登录账号和密码,该表的账号为学生的学号,是Student表中ssid的外键。
https://img-blog.csdnimg.cn/c24a5cf396214cae8c4394265a926e5f.png#pic_center
代码如下:
CREATE TABLE .(
        (10) NULL,
        (10) NULL
) ON
GO
③Building
宿舍楼有楼号,宿舍数目和地理位置的属性,所以我们创建宿舍楼表,记录每栋楼的信息,将楼号bid设为主键。
https://img-blog.csdnimg.cn/15fb31d740b140459049f56e4f00677b.png#pic_center
代码如下:
CREATE TABLE .(
        (10) NOT NULL,
        NULL,
        (20) NULL,
CONSTRAINT PRIMARY KEY CLUSTERED
(
        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
) ON
GO
④Dormitory
宿舍有宿舍编号(方便运用),楼号,宿舍号,楼层,床位,价格等信息,所以我们创建宿舍表,将宿舍号设为主键。
https://img-blog.csdnimg.cn/097a1821f9664cb5953e6582edf3f2fb.png#pic_center
代码如下:
CREATE TABLE .(
        NOT NULL,
        (10) NULL,
        NULL,
        NULL,
        NULL,
        (18, 0) NULL,
CONSTRAINT PRIMARY KEY CLUSTERED
(
        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
) ON
GO
⑤Manager
管理员拥有账号,密码,姓名和权限这些属性,权限用以区别超级管理员和平常管理员,并且将账号mid设为主键。
https://img-blog.csdnimg.cn/e2864475d3ed4592bba5b07ab6576d94.png#pic_center
代码如下:
CREATE TABLE .(
        NOT NULL,
        (10) NULL,
        (5) NULL,
        (1) NULL,
PRIMARY KEY CLUSTERED
(
        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
) ON
GO
⑥StuDormitory
学生宿舍表记录学生的宿舍编号和学号,将学号和宿舍编号设为主键,才气唯一确定一条记录,学号为Student表的ssid的外键,宿舍编号为Dormitoryd的did的外键。
https://img-blog.csdnimg.cn/904c0c36997447e799b06ffda3ce09ec.png#pic_center
代码如下:
CREATE TABLE .(
        NOT NULL,
        (10) NOT NULL,
PRIMARY KEY CLUSTERED
(
        ASC,
        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
) ON
GO
⑦Apply
学生宿舍申请表拥有学号,旧宿舍,申请日期,原因和状态五个属性,状态为0表现处理完,状态为1表现未处理。学号是Student表的ssid的外键。
https://img-blog.csdnimg.cn/476c95d3123d4cc88107e70186bd6978.png#pic_center
代码如下:
CREATE TABLE .(
        (10) NULL,
        NULL,
        NULL,
        (50) NULL,
        NULL
) ON
GO
⑧Change
学生宿舍变动表记录学生的学号,处理日期,旧宿舍和更换过后的新宿舍,学号是Student表的外键。
https://img-blog.csdnimg.cn/7b739a7985954306ac4586a2295fe107.png#pic_center
代码如下:
CREATE TABLE .(
    (10) NULL,
    NULL,
    NULL,
    NULL
) ON
GO
五、数据库的实施

1、触发器计划

1、Studentlogin表的插入触发器。当插入学号和密码时,表中存在相同学号,则不允许插入。
https://img-blog.csdnimg.cn/9a7e408b3bf44fd18c9f0060859bd298.png#pic_center
2、更换宿舍申请表的插入触发器。当举行插入时,幻表中已经举行了插入,获取当前表中按时间顺序排第二的记录(即插入记录的上一条记录)得到处理状态,如果为0,证明处理完毕,可以举行插入,如果为1,证明尚未处理,不可插入。
https://img-blog.csdnimg.cn/aa7440a6f01d4da081a087278957d4ad.png#pic_center
3、学生宿舍表的插入触发器。如果在表中不存在插入的学号,并且插入的宿舍剩余床位大于0,则同意插入,不满足二者其一条件则不允许插入。
https://img-blog.csdnimg.cn/7faf909da86240568219e3fa0878eb62.png#pic_center
六、部分系统功能计划与实现

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.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)界面展示:

https://img-blog.csdnimg.cn/74d8d0fffcda43f2a708234c5aa012ed.png#pic_center
代码如下:
      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.Rows["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.Rows["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)界面展示

https://img-blog.csdnimg.cn/87162febba0e4396a198f7c3b2f482e1.png#pic_center
(2)界面功能

对宿舍举行增删改查的操纵,在文本框输入正确的信息即可实现对宿舍举行添加、修改、删除操纵。
代码如下:
      private void 宿舍更新(string str)//宿舍信息中宿舍信息表更新
      {
            DataSet ds = new DataSet();
            ds = database.获取数据(str);

            if (ds != null)
            {
                DorDgv.DataSource = ds.Tables;
                DorDgv.Columns["did"].HeaderText = "宿舍id";
                DorDgv.Columns["bid"].HeaderText = "楼号";
                DorDgv.Columns["dnum"].HeaderText = "宿舍号";
                DorDgv.Columns["dfloor"].HeaderText = "楼层";
                DorDgv.Columns["bed"].HeaderText = "床位数";
                DorDgv.Columns["price"].HeaderText = "单价";
            }
            else
            {
                DorDgv.DataSource = null;
            }
      }
      
      private bool IsNotchongfu_d_b(string did, string dnum, string bid)
      {
            DataSet ds = new DataSet();
            ds = database.获取数据
                ("select * from Dormitory where did !='" + did + "'and dnum='" + dnum + "'" + "and bid='" + bid + "'");

            if (ds != null)
            {
                return false;
            }
            else
            {
                return true;
            }
      }
      
      private bool IsNotExist_did(string no)
      {
            DataSet ds = new DataSet();
            ds = database.获取数据("select * from Dormitory where did='"+no+"'");
            if (ds == null)
                return true;
            else return false;

      }
编写宿舍更新方法、判定宿舍记录是否存在。一个是同一栋楼是否有相同的宿舍号,一个是判定宿舍编号是否相同。
代码如下:
      private void 添加Dor_Click(object sender, EventArgs e)//宿舍信息界面添加宿舍
      {
            string did=didtxt.Text.Trim();
            string bid=bidtxt.Text.Trim();
            string dnum = dnumtxt.Text.Trim();
            string floor=floortxt.Text.Trim();
            string bed=bedtxt.Text.Trim();
            string price=pricetxt.Text.Trim();
            if (didtxt.Text.Trim().Equals("") || bidtxt.Text.Trim().Equals("") || dnumtxt.Text.Trim().Equals("") || floortxt.Text.Trim().Equals("") || bedtxt.Text.Trim().Equals("") || pricetxt.Text.Trim().Equals(""))
            {
                if (didtxt.Text.Trim().Equals("")) MessageBox.Show("请输入宿舍id!", "提示");
                else if (bidtxt.Text.Trim().Equals("")) MessageBox.Show("请选择楼号!", "提示");
                else if (dnumtxt.Text.Trim().Equals("")) MessageBox.Show("请输入宿舍号!", "提示");
                else if (floortxt.Text.Trim().Equals("")) MessageBox.Show("请输入楼层!", "提示");
                else if (bedtxt.Text.Trim().Equals("")) MessageBox.Show("请输入床位数!", "提示");
                else if (pricetxt.Text.Trim().Equals("")) MessageBox.Show("请输入单价!", "提示");
            }
            else if (!IsNotExist_did(didtxt.Text.Trim()) || !IsNotchongfu_d_b(didtxt.Text.Trim(), dnumtxt.Text.Trim(), bidtxt.Text.Trim()))
            {
                MessageBox.Show("该记录已存在!", "提示");
                return;
            }
            else
            {
                string sqlStr1;
                try
                {
                  sqlStr1 = "insert into Dormitory values('" + didtxt.Text.Trim() + "','"
                         + bidtxt.Text.Trim() + "','" + dnumtxt.Text.Trim() + "','" + floortxt.Text.Trim() + "','" + bedtxt.Text.Trim() + "','" + pricetxt.Text.Trim() + "')";
                  database.更新(sqlStr1);
                  宿舍获取();
                  MessageBox.Show("添加成功!", "提示");
                }
                catch
                {
                  MessageBox.Show("操作失败!请检查规范", "提示");
                }

            }

      }
      
      private void 修改Dor_Click(object sender, EventArgs e)//宿舍信息界面修改宿舍信息
      {
            if (bidtxt.Text.Trim().Equals("") || didtxt.Text.Trim().Equals("") || dnumtxt.Text.Trim().Equals("") || floortxt.Text.Trim().Equals("") || bedtxt.Text.Trim().Equals("") || pricetxt.Text.Trim().Equals(""))
            {
                if (didtxt.Text.Trim().Equals("")) MessageBox.Show("请输入宿舍id!", "提示");
                else if (bidtxt.Text.Trim().Equals("")) MessageBox.Show("请选择楼号!", "提示");
                else if (dnumtxt.Text.Trim().Equals("")) MessageBox.Show("请输入宿舍号!", "提示");
                else if (floortxt.Text.Trim().Equals("")) MessageBox.Show("请输入楼层!", "提示");
                else if (bedtxt.Text.Trim().Equals("")) MessageBox.Show("请输入床位数!", "提示");
                else if (pricetxt.Text.Trim().Equals("")) MessageBox.Show("请输入单价!", "提示");
            }
            else if (IsNotExist_did(didtxt.Text.ToString().Trim())==true)
            {
                MessageBox.Show("该记录不存在!", "提示");
                return;
            }
            else if (!IsNotchongfu_d_b(didtxt.Text.Trim(), dnumtxt.Text.Trim(), bidtxt.Text.Trim()))
            {
                MessageBox.Show("该宿舍记录已存在!", "提示");
                return;
            }
            else
            {
                string sqlStr1;
                try
                {
                  sqlStr1 = "updateDormitory set did='" + didtxt.Text.Trim() + "',bid='"
                        +bidtxt.Text.Trim() + "',dnum='" + dnumtxt.Text.Trim() + "',dfloor='"
                        + floortxt.Text.Trim() + "',bed='" + bedtxt.Text.Trim() + "',price='"
                        + pricetxt.Text.Trim()+ "' where did='" + didtxt.Text.Trim() + "'";
                  database.更新(sqlStr1);
                  宿舍获取();
                  MessageBox.Show("修改成功!", "提示");
                }
                catch
                {
                  MessageBox.Show("操作失败!请检查规范", "提示");
                }
            }
      }

      private void 删除Dor_Click(object sender, EventArgs e)//宿舍信息界面删除宿舍
      {
            if (didtxt.Text.Trim().Equals(""))
            {
                MessageBox.Show("请输入宿舍id!", "提示");
            }
            else if (!IsNotExist_did(didtxt.Text.ToString().Trim()))
            {
                string sqlStr1;
                if (MessageBox.Show("确定要删除该记录吗?无法撤销!", "删除", MessageBoxButtons.YesNo, MessageBoxIcon.Question, MessageBoxDefaultButton.Button2) == DialogResult.Yes)
                {
                  try
                  {
                        sqlStr1 = "delete from Dormitory where did='" + didtxt.Text.Trim() + "'";
                        database.更新(sqlStr1);
                        宿舍获取();
                        MessageBox.Show("删除成功!", "提示");
                  }
                  catch(Exception ex)
                  {
                        MessageBox.Show("操作失败!请检查规范", "提示");
                  }
                }
                else return;

            }
            else
            {
                MessageBox.Show("该记录不存在!", "提示");
                return;

            }
      }

      private void 取消Dor_Click(object sender, EventArgs e)
      {
            bidtxt.Text = "";
            didtxt.Text = "";
            dnumtxt.Text = "";
            floortxt.Text = "";
            bedtxt.Text = "";
            pricetxt.Text = "";
            查询txt.Text = "";
      }
编写按钮的点击变乱,实现对宿舍的增删改查操纵,每次操纵完后更新一下DataGridView中的信息。以便管理职员直接看到数据变化。
代码如下:
      private void 取消Dor_Click(object sender, EventArgs e)
      {
            bidtxt.Text = "";
            didtxt.Text = "";
            dnumtxt.Text = "";
            floortxt.Text = "";
            bedtxt.Text = "";
            pricetxt.Text = "";
            查询txt.Text = "";
      }
      private void button8_Click(object sender, EventArgs e)
      {
            宿舍获取();
      }
4、分配宿舍界面

(1)界面展示

https://img-blog.csdnimg.cn/15633a0f3c0343979882fefee20e4fee.png#pic_center
(2)界面功能

对未分配的学生分配宿舍,在右边输入正确的信息,查看空宿舍,点击分配宿舍既可给学生分配宿舍。
代码如下:
       private void 分配宿舍学生信息更新(string str)//分配宿舍表更新
       {
         DataSet ds = new DataSet();
         DataTable dt = new DataTable();
         ds = database.获取数据(str);
         if (ds != null)
         {
               int count = ds.Tables.Rows.Count;

               dt.Columns.Add("ssid", typeof(string));//添加一列
               dt.Columns.Add("sname", typeof(string));//添加一列
               dt.Columns.Add("sex", typeof(string));//添加一列
               dt.Columns.Add("birth",typeof(string));
               dt.Columns.Add("sdept", typeof(string));//添加一列
               dt.Columns.Add("class", typeof(string));//添加一列
               dt.Columns.Add("phone", typeof(string));//添加一列
               for (int i = 0; i < count; i++)
               {
                   DataRow dr1 = dt.NewRow();
                   dr1["ssid"] = ds.Tables.Rows["ssid"].ToString();
                   dr1["sname"] = ds.Tables.Rows["sname"].ToString();
                   dr1["sex"] = ds.Tables.Rows["sex"].ToString();
                   dr1["birth"] = ds.Tables.Rows["birth"].ToString();
                   dr1["sdept"] = ds.Tables.Rows["sdept"].ToString();
                   dr1["class"] = ds.Tables.Rows["class"].ToString();
                   dr1["phone"] = ds.Tables.Rows["phone"].ToString();
                   dt.Rows.InsertAt(dr1, 0);
               }
               分配宿舍学生信息.DataSource = dt;
               分配宿舍学生信息.Columns["ssid"].HeaderText = "学号";
               分配宿舍学生信息.Columns["sname"].HeaderText = "姓名";
               分配宿舍学生信息.Columns["sex"].HeaderText = "性别";
               分配宿舍学生信息.Columns["birth"].HeaderText = "出生日期";
               分配宿舍学生信息.Columns["sdept"].HeaderText = "专业";
               分配宿舍学生信息.Columns["class"].HeaderText = "班级";
               分配宿舍学生信息.Columns["phone"].HeaderText = "电话";
         }
         else
         {
               分配宿舍学生信息.DataSource = null;
         }
       }
       private void 获取空余宿舍()
       {
         DataSet ds = new DataSet();
         DataTable dt = new DataTable();
         DataSet number = new DataSet();
         ds = database.获取数据
               ("select * from Dormitory where bed> (select COUNT (StuDormitory.did) from StuDormitory where StuDormitory.did=Dormitory.did) ");
         if (ds != null)
         {
               int count = ds.Tables.Rows.Count;
               dt.Columns.Add("did", typeof(string));//添加一列
               dt.Columns.Add("bid", typeof(string));//添加一列
               dt.Columns.Add("dnum", typeof(string));//添加一列
               dt.Columns.Add("dfloor", typeof(string));//添加一列
               dt.Columns.Add("bed", typeof(string));//添加一列
               dt.Columns.Add("remain", typeof(string));//添加一列
               dt.Columns.Add("price", typeof(string));//添加一列

               for (int i = 0; i < count; i++)
               {
                   DataRow dr1 = dt.NewRow();
                   dr1["did"] = ds.Tables.Rows["did"].ToString();
                   dr1["bid"] = ds.Tables.Rows["bid"].ToString();
                   dr1["dnum"] = ds.Tables.Rows["dnum"].ToString();
                   try
                   {
                     number = database.获取数据
               ("select COUNT(did) from StuDormitory where StuDormitory.did='" + ds.Tables.Rows["did"].ToString() + "'");

                     dr1["remain"] = (Convert.ToInt32(ds.Tables.Rows["bed"].ToString()) - Convert.ToInt32(number.Tables.Rows)).ToString();
                   }
                   catch
                   {
                     dr1["remain"] = "计算失败";
                   }

                   dr1["dfloor"] = ds.Tables.Rows["dfloor"].ToString();
                   dr1["bed"] = ds.Tables.Rows["bed"].ToString();
                   dr1["price"] = ds.Tables.Rows["price"].ToString();
                   dt.Rows.InsertAt(dr1, 0);
               }

               dataGridView1.DataSource = dt;
               dataGridView1.Columns["did"].HeaderText = "宿舍id";
               dataGridView1.Columns["bid"].HeaderText = "楼号";
               dataGridView1.Columns["dnum"].HeaderText = "宿舍号";
               dataGridView1.Columns["dfloor"].HeaderText = "楼层";
               dataGridView1.Columns["bed"].HeaderText = "床位数";
               dataGridView1.Columns["price"].HeaderText = "单价";
               dataGridView1.Columns["remain"].HeaderText = "剩余床位";

         }
         else
         {
               dataGridView1.DataSource = null;
         }
       }
       private bool IsNotExist_OtherSex(string did, string sid)
       {
         DataSet ds = new DataSet();
         ds = database.获取数据
               (@"select * from StuDormitory,Student
               where StuDormitory.ssid=Student.ssid and did='" + did +
                  "'and sex=(select sex from Student where ssid='" + sid + "')");
         if (ds != null)
         {
               return true;
         }
         else
         {
               ds = database.获取数据
               (@"select * from StuDormitory
               wheredid='" + did + "'");
               if (ds != null)
               {
                   return false;
               }
               else return true;
         }
       }
编写获取空余宿舍和分配宿舍学生信息更新两个方法,方便后面点击变乱的更新和获取学生、宿舍信息数据的代码编写。编写判定原宿舍的成员性别和添加的学生性别是否一致,不一致就拒绝添加。
代码如下:
      private void 男生rb_CheckedChanged(object sender, EventArgs e)//分配宿舍查询男生信息
      {
            if (男生rb.Checked == true)
            {
                string str = "select * from Student where ssid not in(select ssid from StuDormitory) and sex='男'";
                分配宿舍学生信息更新(str);
            }
      }

      private void 女生rb_CheckedChanged(object sender, EventArgs e)//分配宿舍查询女生信息
      {
            if (女生rb.Checked == true)
            {
                string str = "select * from Student where ssid not in(select ssid from StuDormitory)and sex='女'";
                分配宿舍学生信息更新(str);
            }
      }

      private void allrb_CheckedChanged(object sender, EventArgs e)//分配宿舍查询所有信息
      {
            if (allrb.Checked)
            {
                string str = "select * from Student where ssid not in(select ssid from StuDormitory )";
                分配宿舍学生信息更新(str);
            }
      }
编写按钮点击变乱,实现对未分配宿舍的学生举行宿舍分配。
代码如下:
      private void 分配宿舍查询_Click(object sender, EventArgs e)//分配宿舍查询空宿舍信息
      {
            获取空余宿舍();
      }

      private void 分配宿舍Bt_Click(object sender, EventArgs e)
      {
            if (分配宿舍宿舍编号txt.Text.Equals("") || 分配宿舍学号txt.Text.Equals(""))
            {
                MessageBox.Show("缺少选中数据!", "提示");
                return;
            }
            else
            {
                if (!IsNotExist_OtherSex(分配宿舍宿舍编号txt.Text.Trim(), 分配宿舍学号txt.Text.Trim()))
                {
                  MessageBox.Show("该宿舍已经有其他性别的学生!", "提示");
                  return;
                }
                try
                {
                  string str2 = @"
                   insert into StuDormitory values('" + 分配宿舍宿舍编号txt.Text.Trim() + "','" + 分配宿舍学号txt.Text.Trim() + "')";
                  database.更新(str2);
                  分配宿舍楼号txt.Text = "";
                  分配宿舍宿舍编号txt.Text = "";
                  分配宿舍宿舍号txt.Text = "";
                  分配宿舍学号txt.Text = "";
                  分配宿舍性别txt.Text = "";
                  分配宿舍姓名txt.Text = "";
                  分配宿舍学生信息更新(@"select * from Student where not exists(
                select * from StuDormitory where ssid=Student.ssid )");
                  获取空余宿舍();
                  MessageBox.Show("操作完成", "提示");
                }
                catch
                {
                  MessageBox.Show("操作失败!", "提示");
                }
            }

      }
七、系统测试(部分功能)

1、学生登录

https://img-blog.csdnimg.cn/055b2f6084084442be865d0c56831101.png#pic_center
https://img-blog.csdnimg.cn/2775ba43759b4e49984a301a2071bc3d.png#pic_center
(1)查看个人信息:

https://img-blog.csdnimg.cn/ef2012850b574839a9df79ba3b5d1a26.png#pic_center
(2)查看宿舍信息:

可以查看宿舍成员以及宿舍的根本信息。
https://img-blog.csdnimg.cn/eca339e9547a4b328c1d85b968379fd0.png#pic_center
(3)申请更换宿舍:

https://img-blog.csdnimg.cn/d2a51db0bff742d9be98542069a9b6ab.png#pic_center
https://img-blog.csdnimg.cn/23f27dbff0ac49ddbeb3afe2c5fc33c3.png#pic_center
学生提交申请更换宿舍的请求,最后一个列数值为1表现还未被处理。
2、管理职员登录(用权限为1管理员登录可以举行所有操纵):

(1)宿舍楼管理:

https://img-blog.csdnimg.cn/cf45de789b2244aca6fbe92be5ecbce9.png#pic_center
添加宿舍楼:
https://img-blog.csdnimg.cn/e05f1ba4e11e454b808703085c37c492.png#pic_center
修改宿舍楼信息:
https://img-blog.csdnimg.cn/221439c44843415db96256b4b00a35f9.png#pic_center
删除宿舍楼信息:
https://img-blog.csdnimg.cn/d2f865e8be41446b9ce6490d07470d5c.png#pic_center
(2)宿舍管理:

https://img-blog.csdnimg.cn/3ef6c306611347e8a93e5c203232b5dd.png#pic_center
添加宿舍信息:
https://img-blog.csdnimg.cn/99c989288b8842fab842e8c9c118eeec.png#pic_center
删除宿舍信息:
https://img-blog.csdnimg.cn/4371fe33a94041dcb16bfd56bd38eb0e.png#pic_center
https://img-blog.csdnimg.cn/1b5df552067c4343856631d9ac7823fe.png#pic_center
总结

此次课程计划利用了SQL Server与VS中的Window 窗体应用相结合,根据实际环境举行需求分析,计划学生宿舍管理系统。该系统解决高校传统方式举行学生宿舍管理的缺点,极大进步了学生宿舍管理的服从。系统还存在许多功能没有完善,比方对宿舍报修的处理、对宿舍放假回家的出入统计等功能。接下来可以继续增加这方面的功能来完善该系统。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页: [1]
查看完整版本: 【数据库课程计划】SQLServer数据库课程计划(学生宿舍管理),课设报告+源