数据库原理与运用综合大实验报告(Sql server软件的相关环境配置、数据关系等等,语言是C#)

数据库实验应该是智科人在大三上最重要的一个实验,也是非常考验自己创新能力的一个实验,需要用到自己前面自己学的语言与后台数据库连接(这里提供C#的连接和写法),有些同学刚刚开始学这门课就开始做数据库,毕竟实验时间比较紧张,学有余力可以学期开始就可以着手去设计自己的界面,设计是没有上限的,很利于培养工程能力。

这里提供验收时候老师会检查的一些东西:如何限制数据库的元素为唯一、特殊等等(答案是在sql server里面改),老师还会把你设计的数据库中输入的数字弄成负的(比如物品数量),告诉你这样不合理,怎么改,也是改SQL server里面的限制,尽可能所有问题从后台数据库去改,基本老师不会问你前面界面设计的问题。。。。。。

还有智科人没有软件工程这个课,其他专业有,他们数据库完成还需要完成软件工程相关的数据库搭建。

我把我在VS code设计的C#页面、后台SQL server设计的数据和整体框架都打包放在一个文件夹中(资料区下载)
文件名称:数据库实验所有程序(验优)
文件内容如下:
在这里插入图片描述
从上到下依次是VS的界面程序、sql server的恢复文件、一些恢复方法、踩坑记录。
在这里插入图片描述
废话少说,报告开冲:
先看具体要求:
在这里插入图片描述
我做的是超市销售系统,把所有的报告要求全部完成(每完成一小块会有个打钩,按完成度给分)

每个人可以选择的系统是不一样的:
在这里插入图片描述

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

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

create view buy_dingdan(bno,pname,gname,bmoney,bnumber,btime) as 
select bno,pname,gname,bmoney,bnumber,btime
from buy,good
where buy.gno=good.gno

在这里插入图片描述

(3)触发器
本来定义了两个触发器
(1)

create  trigger kucun on buy
after insert  as
begin 
update good
set good.gamount=good.gamount-inserted.bnumber
from inserted
where good.gno=inserted.gno
End

(2)

create trigger shanchu on per
for delete
as
begin
delete buy where buy.pname in(select pname from deleted)
print('历史订单表也删除此销售员信息!')
end

第一个触发器的作用是每当销售员结账完毕,buy表中插入订单流水时候,就会触发good表,减少good表相应的商品库存,更加接近现实,已经成功,满足了需求分析里面的库存减少需求。
第二个触发器我本来是没有知道级联删除的设置在哪,想通过设置per表的销售员pname一删除就触发删除buy表中的对应订单,结果失败了,上网查了一下原来是因为:
触发器的执行是
1。执行前触发器
2。进行数据合法性,一致性,完整性检查,如果不能通过,就报错并回滚
3。数据真正作用在数据库中
4。执行相应触发器
所以第二个触发器优先级在外键之后,于是取消了这个触发器,后来找到了级联删除的设置面板。

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

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
三页核心代码附上:(老师要求不能多于三页的核心代码)

(2)b站学会的定义dao类方法调用数据库,减少代码量(这里把{}去掉,增加写报告的空间)

 class dao  //定义这个类,下面是方法和属性
        SqlConnection sc;
        public SqlConnection connect()
            //数据库连接字符串
            sc = new SqlConnection("Integrated Security = SSPI; Persist Security Info = False; Initial Catalog = 超市销售管理系统; Data Source =.");//创建数据库连接对象
            sc.Open();//打开数据库
            return sc;//返回数据库连接对象
        public SqlCommand command(string sql)
            SqlCommand cmd = new SqlCommand(sql, connect());
            return cmd;//返回对象
        public int Execute(string sql)//更新操作        
            return command(sql).ExecuteNonQuery();  //执行SQL语句并返回受影响行数      
        public SqlDataReader read(string sql) //读取操作
            return command(sql).ExecuteReader();     
        public void DaoClose()
            sc.Close();//关闭数据库连接

  利用if搞定老板和销售员直接登录的区别
if (Convert.ToDouble(dc["plb1"]) == 1)
                        MessageBox.Show("登录成功");
                        boss1 user = new boss1(); //实例化
                        this.Hide();    //隐藏旧窗体
                        user.ShowDialog();    //show和showDialog的区别是对话框
                        this.Show();
                    
Regex regex1 = new Regex("^\\d{11}$");  //手机号码十一位的正则表达式

注册成功时候的调用
dao dao = new dao();
                    string sql = $"insert into per values({textBox1.Text},{textBox2.Text},'{textBox3.Text}',{maskedTextBox1.Text},'{k}',{x})";
                    int n = dao.Execute(sql);  //n是受影响的行数
                    if (n > 0)
                    {
                        MessageBox.Show("注册成功");                      
                        this.Close();
                    }
                    dao.DaoClose();
实时时间的实现(去掉了{}private void timer1_Tick(object sender, EventArgs e)
            label7.Text= DateTime.Now.ToString("yyyy年MM月dd日hh时mm分ss秒");

合并查询的实现
dataGridView1.Rows.Clear();  //清空旧数据
            dao dao = new dao();
            string sql = $"select * from good where gno='{textBox1.Text}'or gname like'%{textBox1.Text}%' ";     //我一开始分开,现在想改成合并查询
            IDataReader dc = dao.read(sql);  
            while (dc.Read())   
            {
                dataGridView1.Rows.Add(dc[0].ToString(), dc[1].ToString(), dc[2].ToString(), dc[3].ToString(), dc[4].ToString());
            }
            dc.Close();
            dao.DaoClose();
删除商品的实现
DialogResult dr = MessageBox.Show("确认删除该商品吗?","信息提示",MessageBoxButtons.OKCancel, MessageBoxIcon.Question);
                if(dr== DialogResult.OK)
                    string sql = $"delete from good where gno='{gno}'";
                    dao dao = new dao();
                    if (dao.Execute(sql)> 0)  //受影响行数
                        MessageBox.Show("删除成功");
修改商品时候的传值调用(另一个窗口收到值)
try
            {
                string gno = dataGridView1.SelectedRows[0].Cells[0].Value.ToString();
                string gname = dataGridView1.SelectedRows[0].Cells[1].Value.ToString();
                string gprice = dataGridView1.SelectedRows[0].Cells[2].Value.ToString();
                string bprice = dataGridView1.SelectedRows[0].Cells[3].Value.ToString();
                string gamount = dataGridView1.SelectedRows[0].Cells[4].Value.ToString();
                boss22 admin = new boss22(gno,gname,gprice,bprice,gamount);
                admin.ShowDialog();
                Table();   //刷新数据
            }
            catch
            {
                MessageBox.Show("出错了,请检查商品名称和编号,不能和已有的相同");
            }
......
public boss22(string gno, string gname, string gprice, string bprice, string gamount)

刷新功能实现
foreach (Control ctr in Controls)   //遍历控件,清空文本
            {
                if (ctr is TextBox)            //找到TextBox控件                
                    ((TextBox)ctr).Text = string.Empty;  //清空TextBox控件的文本内容               
            }

修改商品实现
string sql = $"update good set gno='{textBox1.Text}',[gname]='{textBox2.Text}',gprice={textBox3.Text},bprice={textBox4.Text},gamount={textBox5.Text}where gno='{Gno}'";
            dao dao = new dao();
            if (dao.Execute(sql) > 0)        
                MessageBox.Show("修改成功");
                this.Close();
 
定义公用类,返回状态栏中的登录状态,同时,int那个用来返回结账页面表行数,方便使用for循环来把已经结账的流水循环插入订单buy表中
 class Data
    {   //利用后面调用
        public static string UID = "", UName = ""; //登录用户的用户名和姓名
        public static int count,t;//结账页面总行数,和第一行的第一个自增
}

视图查询中实现多条件查询
dataGridView1.Rows.Clear();  //清空旧数据
            string sql = "1";  //对它赋空值
            if (textBox1.Text != "" && textBox2.Text == "" && textBox3.Text == "")
                sql = $"select * from buy_dingdan where pname like '%{textBox1.Text}%'or gname like'%{textBox1.Text}%' ";
            else if (textBox1.Text == "" && textBox2.Text != "" && textBox3.Text != "")
                sql = $"select * from buy_dingdan where  (bmoney>='{textBox2.Text}') and   (bmoney<='{textBox3.Text}')";
            else if (textBox1.Text != "" && textBox2.Text != "" && textBox3.Text != "")
                sql = $"select * from buy_dingdan where pname like '%{textBox1.Text}%'or gname like'%{textBox1.Text}%' and (bmoney >= '{textBox2.Text}') and(bmoney <= '{textBox3.Text}') ";
            if (sql != "1")
                dao dao = new dao();
                IDataReader dc = dao.read(sql);
               while (dc.Read()) //读到就循环,且Read()跳下一条
                  dataGridView1.Rows.Add(dc[0].ToString(), dc[1].ToString(), dc[2].ToString(), dc[3].ToString(), dc[4].ToString(), dc[5].ToString());
                dc.Close();
                dao.DaoClose();


结账成功(支付成功)后,还原清空kong表这个临时表,方便下次结账
 while (dc.Read())
            {
                sql = $"insert into buy values('{Data.UName}','{dc[1].ToString()}','{dc[5].ToString()}',{Convert.ToInt16(dc[4].ToString())}, getdate())";
            }
                                            
            dao.Execute("Delete from kong where 1=1");
            dao.DaoClose();

            MessageBox.Show("恭喜你,支付成功!!");
            this.Close();

三、课程设计(综合实验)总结或结论

四、同学间相互协作情况
借了隔壁宿舍一本书,是《c#从入门到精通》

五、参考文献
[1] 王珊,萨师煊. 《数据库系统概论》.高等教育出版社,第5版.2014年9月
[2] 明日科技. 《C#从入门到精通》.清华大学出版社,第6版.2020年5月

笔者介绍:某智科卑微牛马,一项省级大创已结项,一项国家级大创和一项校级大创已成功立项,都交给小自己一届的学弟去做,参加的挑战杯项目在其余队友参加大创后也获得了省级优秀和国家级优秀结项。同时组织并担任了2022年挑战杯、两项互联网+、电子商务大赛、舞蹈机器人大赛、“创青春”青年创新创业大赛的队长,并参加过节能减排大赛、调研河北大赛、数学建模美赛、蓝桥杯省赛、机器人国赛等比赛若干,获得过舞蹈机器人一等、电子商务大赛二等、挑战杯三等、节能减排省一等、创新创业优秀个人、社会实践优秀个人等奖项。

程序下载说明:作者所有的实验、课设验收基本都是优,也不缺这几米,不过不想自己的文章或者作品烂大街,想留点门槛,应该是几米这样子,作品都是保证高质量的,给有需要的学弟学妹们学习,大部分还是免费的,因为一些大型的文件不好上传,故放在付费资料区下载,真的非常良心!!

1、 Find the name, loan number and loan amount of all customers; rename the column name loan_number as loan_id. 2、 Find the names of all customers whose street includes the substring “Main”. 3、Find all customers who have a loan, an account, or both: 4、Find all customers who have both a loan and an account. 5、Find all customers who have an account but no loan. 6、Find the average account balance at the Perryridge branch. 7、 Find the number of tuples in the customer relation. 8、 Find the number of depositors in the bank. 9、 Find the number of depositors for each branch. 10、Find the names of all branches where the average account balance is more than $1,200. 11、Find all loan number which appear in the loan relation with null values for amount. 12、Find all customers who have both an account and a loan at the bank. 13、Find all customers who have a loan at the bank but do not have an account at the bank 14、Find all customers who have both an account and a loan at the Perryridge branch 15、Find all branches that have greater assets than some branch located in Brooklyn. 16、Find the names of all branches that have greater assets than all branches located in 1、创建一个School数据库,该数据库的主数据文件逻辑名称为SCHOOL_data,物理文件名为School.mdf,初始大小为10MB,最大尺寸为无限大,增长速度为10%;数据库的日志文件逻辑名称为School_log,物理文件名为School.ldf,初始大小为1MB,最大尺寸为5MB,增长速度为1MB。 2、用SQL语句建立上述表,自定义主键和外键,对于student表建立约束条件:ssex仅能取male或female;sage在18和22之间。并完成下面的查询语句。 1、查询所有选修过“Bibliometrics”课的学生的姓名和成绩; 2、查询考试成绩不及格的学生的个数; 3、查询名字中至少含有一个“z”字符的学生的姓名、学号和性别; 4、查询选修了“Introduction to the Internet”课程的学生的学号及其成绩,查询结果按分数的降序排列; 5、查询“Zuo li”同学选修课程的总学时(time)数 6、查询年龄不大于20岁的学生的平均考试成绩; 7、查询 “computer science”专业学生选修 “Database System”的人数; 8、查询同时选修课程“Database System”和“Introduction to the Internet”的学生姓名; 9、查询选修的课程中含有“Wang gang”同学所有选修课程的学生姓名。 10、查询“Information Technology for Information Management”考试成绩为空的学生姓名及专业名称。 11、查询“computer science”专业学生每个人的选修课总学分。 12、查询个人考试平均成绩高于专业平均成绩的学生姓名 13、查询个人考试平均成绩高于女生平均成绩的男生姓名 14、查询比“computer science”专业所有学生年龄都大的学生姓名。 15、查询考试成绩仅有一科不及格学生姓名
数据库课程设计报告 学校: 系别:计算机科学系 班级:11软件工程一班 姓名: 学号: 课题名称:JIA服装公司销售管理系统 指导老师: 一、Jia服装公司简介 Jia服装公司主营服装成品,产品面向全国、以批发为主,公司希望借助计算机或计 算机网络实现生产运作和服装营销信息在公司各部门之间的流通及财务监控功能的完整 、强化。以提高效率和反应速度、规范公司管理,能够对市场竞争做出及时准确的反应 。 Jia服装公司有如下职能单位:总经理、生产部门、销售部门、仓库、财务、设计部 门、技术部门等。公司以销售为中心,不设加工厂。 二、需求分析 以下为各部门的需求状况: 1.总经理 通过查看有关报表的信息,充分了解公司经营状况,制定发展公司的长远计划。 2.生产部门 负责联系加工商生产客户订单服装,负责产生成品入库单,该公司只生产有订单的服 装。 3.销售部门 1. 管理客户 2. 产生出库单 3. 不接受客户退货(公司有设计部门和技术部门,支持客户的修改意见,所以不考虑退货 情况) 4. 及时掌握销售情况 4.仓库 负责货物的出库与入库的管理,及时了解库存情况,给客户发货。该公司的仓库只存储 成品,生产的物料由加工商负责。该公司只有一个仓库。 5.财务部门 把控公司的经营状况,管理公司内部的财务状况,为公司员工发放工资。 6.设计部门 为销售部门出谋划策,为客户的修改意见提供修改方案。 7.技术部门 结合设计部门的修改方案,提供技术支持,生产样衣。 计算机要完成的内容 1. 查询成品的库存 查找的数据:款号、品名、色号、颜色、S、M、L、XL、XXL、XXXL 通过不定时查看入库信息,出库信息,了解有关L、库存数、标准销售价、类型、面料、 。 2. 增加、保存、查询、修改客户信息、资料(包括客户财务状况查询) 主要数据有:客户名称、所在城市,联系方式,地址,账户,身份证,电话,邮编 3. 打印出库单,记录出库单流水账 出库单涉及的内容有:客户、发货方式、发货单位、发货日期等,并根据该客户享受的 折扣进行计算所发出的每一款服装;出库单应记录款号,品名,单位,颜色,S,M,L, XL,XXL,小计数量,成品单价,面料,以及数量、金额合计;出库单要由负责人和经手 人签名后才能生效。 4)打印成品入库单,记录入库单流水账 成品入库单要记录供应商名称,编号,款号品名、单位、颜色、S、M、L、XL、XXL、XX XL数量、单价、金额、面料、入库日期。 5. 浏览出库单 按照时间段、客户、运输单位浏览出库单 6. 掌握销售动态、预测销售趋势 7. 生成统计报表 以下为该公司简化后的销售流程: 数据字典: 1、数据项 "数据项"含义说明 "类型 "长度 "取值范围"取值含义"与其他数据项的逻辑 " "名 " " " " " "关系 " "款号 "唯一标识每款成 "字符型"4 "字母数字" " " " "品 " " "组合 " " " "数据项"含义说明 "类型 "长度 "取值范围"取值含义"与其他数据项的逻辑 " "名 " " " " " "关系 " "色号 "用来唯一表示一"字符型"4 "0000~999"分别表示" " " "种颜色 " " "9 "不同的颜" " " " " " " "色 " " "数据项"含义说明 "类型 "长度 "取值范围"取值含义"与其他数据项的逻辑 " "名 " " " " " "关系 " "色名 "用来表示一件商 "字符型"不定 " "分别表示" " " "品的颜色 " " " "衣服的不" " " " " " " "同颜色 " " "数据项"含义说明 "类型 "长度 "取值范围"取值含义"与其他数据项的逻辑 " "名 " " " " " "关系 " "标准销"用来表示一种品 "长整型"5 "000.00到"分别表示" " "售价 "的原始销售单价 " " "999.99 "不同的价" " " " " " " "格 " " "数据项"含义说明 "类型 "长度 "取值范围"取值含义"与其他数据项的逻辑 " "名 " " " " " "关系 " "类型 "用来表示一种商 "字符型"不定 "000.00到"分别表示" " " "品的款式 " " "999.99 "不同种类" " " " " " " "衣服 " " "数据项"含义说明 "类型 "长度 "取值范围"取值含义"与其他数据项的逻辑 " "名 " " " " " "关系 " "面料 "用来表示一种商 "字符型"不定 "字母数字"分别表示" " " "品的成分 " " "组合 "不同种类" " " " " " " "的服装面" " " " " " " "料 " " "数据项"含义说明 "类型 "长度"取值范围 "取值含义"与其他数据项的逻辑" "名 " " " " " "
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

华电第一深情

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值