前言


提示:该课程设计使用C#+sql语言,文章为原创,仅供参考


链接: https://pan.baidu.com/s/17cD9JKikljMehg6M5sp5jQ 提取码:6wog 复制这段内容后打开百度网盘手机App,操作更方便哦

在这里插入图片描述


一、 概述

(一)、程序名称: 学生宿舍管理系统

(二)、开发平台:Window 10

Microsoft Visual Studio 2010
Microsoft SQL Server 2008

(三)、运行环境: Windows NT/2000/XP/VISTA/7/8/10

(四)、系统管理的对象:

◇系统用户信息:用户编号、用户名、密码、用户权限
◇宿舍信息:宿舍编号、宿舍号、宿舍楼、楼层、床位数、单价、人数
◇宿舍楼信息:楼编号、宿舍数、楼位置
◇学生信息:学号、姓名、性别、年龄、所在院系、年级、电话
◇学生进出记录: 学号、进入时间、离开时间、是否晚归、原因
◇调整宿舍信息:学号、调整时间、原宿舍、新宿舍、理由
◇学生宿舍信息:学号、宿舍编号

(五)、开发背景:

学生宿舍管理系统对于一个学校来说是必不可少的组成部分。目前好多学校还停留在宿舍管理人员手工记录数据的最初阶段,手工记录对于规模小的学校来说还勉强可以接受,但对于学生信息量比较庞大,需要记录存档的数据比较多的高校来说,人工记录是相当麻烦的。而且当查找某条记录时,由于数据量庞大,还只能靠人工去一条条的查找,这样不但麻烦还浪费了许多时间,效率也比较低。当今社会是飞速进步的世界,原始的记录方式已经被社会所淘汰了,计算机化管理正是适应时代的产物。信息世界永远不会是一个平静的世界,当一种技术不能满足需求时,就会有新的技术诞生并取代旧技术。21世纪的今天,信息社会占着主流地位,计算机在各行各业中的运用已经得到普及,自动化、信息化的管理越来越广泛应用于各个领域。我们针对如此,设计了一套学生宿舍管理系统。学生宿舍管理系统采用的是计算机化管理,系统做的尽量人性化,使用者会感到操作非常方便,管理人员需要做的就是将数据输入到系统的数据库中去。由于数据库存储容量相当大,而且比较稳定,适合较长时间的保存,也不容易丢失。这无疑是为信息存储量比较大的学校提供了一个方便、快捷的操作方式。本系统具有运行速度快、安全性高、稳定性好的优点,并且具备完善的报表生成、修改功能,能够快速的查询学校所需的住宿信息。

(六)、程序基本原理及技术需求说明:

为了使系统使用者操作方便,提供便利的数据查询修改和删除信息,在程序上开发出了八个主面板每个面板都负责不同的功能,可以查询、添加、删除学生、宿舍、楼房等信息,便于管理、节省人力。同时,提供了人性化、美观的操作界面、尽可能的为用户的录入,查询等操作提供方便,同时,系统应具备以下功能:
◇用户管理:不同权限用户实现不同管理功能。超级管理员可以管理宿舍楼 信息,楼中的宿舍房等信息;普通管理员可以管理宿舍成员;普通用户可查看宿舍成员的信息。
◇宿舍管理:根据院系、年级分配寝室,登记住宿情况,可调整学生宿舍。
每个同学只能在一个宿舍,不同宿舍的费用标准可以不同。不同院系、年级的同学可以住同一间宿舍。
◇学生管理:实现入住学生信息的登记、维护和查询功能。
◇信息查询:按公寓楼号、学生姓名等查询住宿信息。
◇出入登记:对学生进出公寓的情况进行登记、实现基本的出、入监控功能。

二、 程序概要设计

(一)、程序结构图

在这里插入图片描述

(二)、数据库设计

1.Building

在这里插入图片描述

2.Dormitory

在这里插入图片描述
在这里插入图片描述

3.Manager

在这里插入图片描述

4.Student

在这里插入图片描述
在这里插入图片描述

5.StuDormitory

在这里插入图片描述

6.Visiter

在这里插入图片描述

7.Adjust

在这里插入图片描述

8.InOut

在这里插入图片描述
在这里插入图片描述

(三)、程序的文件结构

数据库信息保存在mdf文件中,ldf文件为数据库的日志文件。cs文件为程序类文件,存放定义的各种类以及界面信息,jpg文件为程序背景图片,用于美化界面,resx 文件为资源文件 ,是用于将逻辑层与显示层隔离。csproj文件为程序的工程文件
关系E-R图
在这里插入图片描述

(四)、分配宿舍子E-R图

在这里插入图片描述

三、程序详细设计

(一)、系统数据库的设计

1.创建数据库

CREATE DATABASE [dms] ON PRIMARY
( NAME = N’test’, FILENAME = N’E:\sql server 2008 r2\sql server 实例\MSSQL10_50.MSSQLSERVER\MSSQL\DATA\test.mdf’ , SIZE = 3072KB , MAXSIZE = UNLIMITED, FILEGROWTH = 1024KB )
LOG ON
( NAME = N’test_log’, FILENAME = N’E:\sql server 2008 r2\sql server 实例\MSSQL10_50.MSSQLSERVER\MSSQL\DATA\test_log.ldf’ , SIZE = 1024KB , MAXSIZE = 2048GB , FILEGROWTH = 10%)
GO
CREATE DATABASE home
ON
(NAME = home_Data,
FILENAME = ''E:\sql server 2008 r2\sql server 实例\MSSQL10_50.MSSQLSERVER\MSSQL\DATA\test.mdf ',
SIZE = 3072kb
MAXSIZE = UNLIMITED
FILEGROWTH =1024kb
LOG ON
(NAME = ’ test_log ',
FILENAME = ’ E:\sql server 2008 r2\sql server 实例\MSSQL10_50.MSSQLSERVER\MSSQL\DATA\test_log.ldf ',
SIZE = 1024kb,
MAXSIZE = 2048gb,
FILEGROWTH = 10%
此段代码为数据库的建库代码,通过SQL语句建立了名为test的这个数据库,位置为: E:\sql server 2008 r2\sql server 实例\MSSQL10_50.MSSQLSERVER\MSSQL\DATA

2.建表

CREATE TABLE [dbo].[Manager](
[mid] [int] NOT NULL,
[pass] char NOT NULL,
[name] varchar NOT NULL,
[permision] char NOT NULL,
CONSTRAINT PRIMARY KEY CLUSTERED
([mid] ASC)
) ON [PRIMARY]
此段为数据库的建表代码,建立了名为Manager的表,以及表内的各个列名。

CREATE TABLE Adjust(
sid bigint NOT NULL,
atime date NOT NULL,
olddid int NOT NULL,
newdid int NOT NULL,
reason nvarchar(50) NULL,
PRIMARY KEY (sid ,atime),
foreign key(sid) references Student(sid)on UPDATE CASCADE ON DELETE CASCADE,
foreign key(olddid) references Dormitory(did)on UPDATE CASCADE ON DELETE CASCADE,
foreign key(newdid) references Dormitory(did)on UPDATE CASCADE ON DELETE CASCADE,
)
该段建立了名为Adgust的表,其中,主码为sid 外码为olddid和newdid ,同时设置了级联操作,在主表更新或删除记录是能够将与其相关的信息也进行更新
后面的几个表格的建表代码都与这段大同小异,无异于数据的类型不一样,以及每一列的列名不一样,是都能被设置成空值,以及是否有主键,主键为哪一个列。

(二)、程序主体代码

1.连接数据库

string constr = @“data source=.;database = dms; integrated security = true”;
SqlConnection connection = new SqlConnection(constr);
connection.Open();
此段代码为在C#的窗口中连接数据库用的语句,但是这个语句在C#中调用SQL语句要添加头文件using System.Data.SqlClient;但是每次连接完数据库后都建议使用connection.Close();来关闭数据库的连接,以造成数据库的信息的泄露。

2.获取数据库信息

public static DataSet 获?取¨?数ºy据Y(string sqlStr)
{
try
{
try
{
conn.Open();
}
catch
{
}
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
{
MessageBox.Show(“打䨰开a数ºy据Y库a失º¡ì败㨹”, “提¬¨¢示º?”);
return null;
}
}
为方便程序需要,直接将获取表格数据的操作分装为一个静态类,以便于其他类或方法调用

3.登录功能

为了区分登录账号信息,避免过多的无用访问数据库,在登录的时候检查了账号信息

并通过正则表达式检查信息
public class 正则¨
{

    public static bool IsInt(string value)//正整数
    {
        return Regex.IsMatch(value, @"^[1-9]\d*$");
    }

}

接着通过SQL的SELECT语句来查询在manager表中的信息
String 数据库字符串 =“select * from Manager where mid=’” + 账号Text.Trim() + “’”;
DataSet 数据集 = new DataSet();
数据集 = database.获取数据(数据库字符串);
if (数据集 == null)//没有匹配账户
{……}
else登录成功
{
String 原密码 = 数据集
Tables[0].Rows[0][“pass”].ToString();
if (原密码Trim().Equals(密码.Text.Trim()))//匹配成功
{……}
else //匹配失败
{……}
}

若在查询中找到一样的账号名,则使用if语句来判断输入的密码是否与数据库中的该账号所对应的密码是否一样。若一样则登录成功。否则为密码或账号错误,无法登录。登录后会跳转页面到主菜单的界面,并且关闭掉不用使用的登录窗体。

4.查看学生同一宿舍成员信息

DataSet ds = new DataSet();
DataTable dt = new DataTable();
ds = database.获取数据
(@“select *from Student where sid in
(select sid from StuDormitory where did in
(select did from StuDormitory
where StuDormitory.sid=’” + 登录d.ToString() + “’))”
);
改选择语句先从学生-宿舍表里选择和当前学生相同宿舍编号的学号,再在学生表里用聚合语句选出,具有所选学号的学生
if (ds != null)
{
int count = ds.Tables[0].Rows.Count;
dt.Columns.Add(“sid”, typeof(string));//添加列
……
……
dt.Columns.Add(“phone”, typeof(string)) //添加列
for (int i = 0; i < count; i++)
{
DataRow dr1 = dt.NewRow();
dr1[“sid”] = ds.Tables[0].Rows[i][“sid”].ToString();
……
……
Convert.ToDateTime(ds.Tables[0].Rows[i][“birth”].ToString()).Year).ToString() + “岁¨º”;
dr1[“faculty”] = ds.Tables[0].Rows[i][“faculty”].ToString();
dr1[“class”] = ds.Tables[0].Rows[i][“class”].ToString();
dr1[“phone”] = ds.Tables[0].Rows[i][“phone”].ToString();
dt.Rows.InsertAt(dr1, 0);
}
信息表.DataSource = dt;
信息表.Columns[“sid”].HeaderText = “学¡ì号?”;
……
……
信息表.Columns[“year”].HeaderText = “年¨º龄¢?”;
信息表.Columns[“year”].DisplayIndex = 3;

        }
        else
        {
            信息表.DataSource = null;
        }
在这里将查询到的表数据作为临时数据、再新建一个显示表,由于在基本表里存放的数据需要经过边换,
例如学生的生日转换成年龄,再为显示表增加一列,显示年龄。

5. 空余宿舍获取

ds = database.获取数据
("select * from Dormitory where bed> (select COUNT (StuDormitory.did) from StuDormitory where StuDormitory.did=Dormitory.did) ")
该语句从学生-宿舍表里列出每一个宿舍标号的记录数量,该数量就表示住宿的学生数量,该数量与Dormitory 里的床位相比,选出床位大于数量的宿舍。

6.修改信息

sqlStr1 = “update Building set bid=’” + 楼号文本框.Text.Trim() +
“’,num=’” + 宿舍文本框.Text.Trim() +
“’,local=’” + 楼位置文本框.Text.Trim() +
“‘where bid=’” + 楼号文本框.Text.Trim() + “’”;
database.更新(sqlStr1);
UPDATE的命令用于修改数据库数据的语句,用于修改更信息。此处的UPDATE语句用于将程序窗体上的各个文本框分别赋值给表中的各个列。另外此处的SQL语句中有添加条件,在语句的末尾有where,这里的where用来匹配查找这次需要修改的表所在的行。bid为Bulidinng表的主键,此处的功能就是通过这个主键来判断我们要找的行从而准确的修改数据库中的信息。

7.增加功能

if (分配宿舍id.Text.Equals("") || 分配宿舍学号显示框.Text.Equals(""))
{
MessageBox.Show(“缺¨¡À少¦¨´选?中D数ºy据Y!”, “提¬¨¢示º?”);
return;
}

            if (!IsNotExist_OtherSex(分配宿舍id.Text.Trim(), 分配宿舍学号显示框.Text.Trim()))
            {……}
            try
            {

string str2 = @" insert into StuDormitory values(’" + 分配宿舍id.Text.Trim() + “’,’” + 分配宿舍学号显示框.Text.Trim() + “’)”;
database.更新(str2);
……
……
}
Catch
{……}
添加功能使用了INSERT的命令,进行数据库信息的添加,此处为将窗口的中的字符赋值给数据库中的表的各个列的数据。在将数据写入数据库前代码中有一个if条件语句,例如插入学生,首先要检查所插入的学生是否存在,存在后再检查宿舍里有没有其他先别性别的学生,如果有就不允许插入,没有就再检查所插入的宿舍名额满了没,或是该宿舍是否没人入住,通过以上条件后才允许入住。

8.删除功能

sqlStr1 = “delete from Dormitory where did=’” + 宿舍id.Text.Trim() + “’”;
database.更新(sqlStr1);
宿舍获取();
删除功能也是通过让用户输入一个条件,通过这个条件,在该表中寻找到符合要求的主键所在的行,将该行从这个表中删除。这个删除功能也可以在本系统中其他板块的的删除中使用,只要在表中有可以识别的唯一标识,就可以将其设为主键,然后通过主键来删除整行的数据库的数据。

四、 程序发布和测试

(一)、程序测试

1.登录

在这里插入图片描述

2.学生界面

在这里插入图片描述

3.查看宿舍人员信息

在这里插入图片描述

4.查看出入记录

在这里插入图片描述

5.管理员界面(宿舍楼管理)

在这里插入图片描述

6.管理员界面(宿舍管理)

在这里插入图片描述

7.管理员界面(宿舍报修管理)

在这里插入图片描述
点击标题可以排序,点序号前面可以自动选择 点击删除则直接删除报修信息

8.管理员界面(学生信息管理)

在这里插入图片描述
宿舍管理员会提示权限不足
在这里插入图片描述

9.管理员界面(分配宿舍)

在这里插入图片描述
该功能会自动列出还未分配的学生以及还有空余床位的宿舍,管理员只需点击学生与宿舍,即可将学生与宿舍信息绑定到信息栏,进而分配宿舍

10.管理员界面(调整宿舍)

在这里插入图片描述

11.管理员界面(记录登记)

在这里插入图片描述

五、 总结与分析

(一)、程序优缺点分析

优点:程序总体结构简单、执行高效,功能较为完善,使用简单方便易上手。
程序的界面看上去非常的简洁所有功能都清晰可见对于数据库的操作十分的简单,就算是没有任何计算机知识的人也可以轻松上手这个程序。整个程序逻辑严谨,有明确的提示引导用户使用。
缺点:程序的部分功能考虑得可能不够周全,容错性不够高,输入信息时有很多格式上的容错性没有做。
SQL语句简单基础不够高级,程序对数据库的操作有待加强。

(二)、总结与感悟

历时两个星期,在不断地纠错和改正中终于完成了数据库大作业,通过这次的大作业,我明白到在开发这样的数据库系统的过程中要不断思考,不断创新,这需要我们付出更多的精力和时间。例如价格数据库里表格的数据进行读写,需要将其转换成程序能够兼容的数据,在设计基本表时,还要考虑表格与表格之间的关联,是否符合3nf范式或者bcnf范式以及更高。我们要不断钻研,研究,思考放开我们的思维去打代码。要不断的汲取学习心得知识,复习旧的知识,将各种知识串联起来。

总结

继续加油!!!!码字不易,喜欢就点个赞吧!

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐