题目

某自来水公司收费管理系统

要求

实现客户信息、用水类型(类别号、类别名、水价)及业务员管理;

实现客户用水信息管理(客户号、月份、用水类别号、用水量);

实现客户费用管理(客户号、月份、费用、收费标志),收费标志的默认值为‘未收’;

实现收费登记(客户、月份、应收费用、实收费用、业务员),并自动修改收费标志(用触发器实现);

创建触发器,实现收费时自动更加应收费用和实收费用,计算本次结余,然后修改客户信息表中的结余金额;

创建存储过程统计指定月份应收费用和实收费用;

创建存储过程查询指定月份未交费的用户信息,以便催费;

建立表间关系。

工具

SQL Server 2008 R2(中文版);

PyCharm 2021.3.2 (社区版)。

数据库建立

新建数据库Tap water charge。

新建查询:

注意:运行代码时,要一段代码一段代码的运行(已分好代码段),不能全部代码一起运行。

/* 客户信息表 */
CREATE TABLE 客户信息(                                              客户号 varchar(10),客户名 nchar(10),结余金额 float NOT NULL,PRIMARY KEY(客户号)
)/* 业务员信息表 */
CREATE TABLE 业务员信息(                                         业务员号 varchar(10),业务员名 nchar(10),PRIMARY KEY(业务员号)
)/* 用水类型表 */
CREATE TABLE 用水类型(                                              类别号 varchar(10),类别名 nchar(10),单位水价 float NOT NULL,PRIMARY KEY(类别号),
)/* 用水信息管理表 */
CREATE TABLE 用水信息管理(                                            客户号 varchar(10) references 客户信息(客户号),月份 nchar(20),用水类别号 varchar(10) references 用水类型(类别号),用水量 float,PRIMARY KEY (客户号,月份)
)/* 收费登记表 */
CREATE TABLE 收费登记(                                              客户号 varchar(10) references 客户信息(客户号),月份 nchar(20),应收费用 float DEFAULT 0,实收费用 float DEFAULT 0,业务员 varchar(10) references 业务员信息(业务员号),PRIMARY KEY(客户号,月份)
)/* 费用管理表 */
CREATE TABLE 费用管理(                                              客户号 varchar(10) references 客户信息(客户号),月份 nchar(20),费用 float ,收费标志 nchar(10) default ('未收费'),PRIMARY KEY(客户号,月份),CHECK (收费标志='已收费' or 收费标志='未收费')
)/* 订单管理表 */
CREATE TABLE 订单管理
(订单号 varchar(20),客户号 varchar(10) references 客户信息(客户号),月份 nchar(20),收取费用 float,业务员号 varchar(10) references 业务员信息(业务员号),PRIMARY KEY(订单号)
)CREATE TRIGGER 用水消费记录_插入
ON 用水信息管理
AFTER INSERT
AS
DECLARE @客户号 varchar(10)
DECLARE @用水类别 varchar(10)
DECLARE @单位水价 float
DECLARE @用水量 float
DECLARE @水价 float
DECLARE @月份 nchar(20)
SELECT @用水量=用水量,@月份=月份,@客户号=客户号
FROM INSERTED
SELECT @单位水价=单位水价,@用水类别=类别号
FROM 用水类型
BEGININSERT INTO 收费登记(客户号,月份,应收费用) VALUES((select @客户号 from inserted),(select @月份 from inserted),(@用水量*@单位水价))
ENDCREATE TRIGGER 用水消费记录_更改
ON 用水信息管理
AFTER UPDATE
AS
DECLARE @客户号 varchar(10)
DECLARE @用水类别 varchar(10)
DECLARE @单位水价 float
DECLARE @用水量 float
DECLARE @水价 float
DECLARE @月份 nchar(20)
SELECT @用水量=用水量,@月份=月份,@客户号=客户号
FROM INSERTED
SELECT @单位水价=单位水价,@用水类别=类别号
FROM 用水类型
BEGINUPDATE 收费登记 SET 应收费用=@用水量*@单位水价 WHERE @客户号=收费登记.客户号 AND @月份=收费登记.月份
ENDCREATE TRIGGER 订单信息管理
ON 订单管理
AFTER INSERT
AS
DECLARE @客户号 varchar(10)
DECLARE @月份 nchar(20)
DECLARE @实收费用 float
DECLARE @收取费用 float
DECLARE @业务员号 varchar(10)
SELECT @客户号=客户号,@月份=月份,@收取费用=收取费用,@业务员号=业务员号
FROM INSERTED
SELECT @实收费用=实收费用 FROM 收费登记 where 客户号=@客户号 AND 月份=@月份
BEGINIF (SELECT 收费标志 FROM 费用管理 WHERE 客户号=@客户号 AND 月份=@月份)='已收费'ROLLBACKELSEUPDATE 收费登记 SET 业务员=@业务员号,@实收费用=@实收费用+@收取费用,实收费用=@实收费用 where @客户号=收费登记.客户号 and @月份=收费登记.月份   print(@实收费用)
END/* 规则 */
CREATE RULE 月份
AS
@月份 like'%年%月'/* 客户费用管理统计存储过程 */
CREATE PROCEDURE 客户费用管理统计
@月份 nchar(20)
AS
SELECT 收费登记.客户号,收费登记.应收费用,收费登记.实收费用,费用管理.收费标志
FROM 收费登记,费用管理
WHERE 收费登记.月份=@月份 AND 收费登记.客户号=费用管理.客户号 AND 费用管理.月份=@月份/* 客户欠费统计存储过程 */
CREATE PROCEDURE 客户欠费统计
@月份 nchar(20)
AS
SELECT 费用管理.客户号,客户信息.客户名,(应收费用实收费用) 拖欠费用
FROM 费用管理,客户信息,收费登记
WHERE 客户信息.客户号=费用管理.客户号 AND 费用管理.客户号=收费登记.客户号 AND 收费登记.月份=费用管理.月份 AND 费用管理.月份=@月份

创建用户:

第一步,点击新建登录名;

第二步,设定登录名和密码;

第三步,勾选所有的权限,并勾选自来水公司收费管理系统的数据库。

PyCharm连接数据库

首先,在PyCharm中引入pymssql库,作用是可以使用SQL语句。

方法:点击工具栏左上角File,点击Settings,点击Project,点击Python Interpreter,点击左上角加号,搜索pymssql然后安装。

之后,连接数据库:

import pymssqlconnect = pymssql.connect('(local)', 'MQiyirs', '123456', 'Tap water charge')  # 建立连接
if connect:print("连接自来水公司收费管理系统成功!")# 代码内容
connect.close()

这里的(local)是服务器名称, MQiyirs是登录名, 123456是密码, Tap water charge是数据库名称。

下面是完整python代码(中文乱码已解决):

import pymssqlconnect = pymssql.connect('(local)', 'MQiyirs', '123456', 'Tap water charge')  # 建立连接
if connect:print("连接华北自来水公司收费管理系统成功!")print("选择您要办的业务编号:1.客户信息管理 2.用水类型管理 3.业务员信息管理 4.用水登记 5.订单登记 6.未缴费信息")key = int(input())if key == 1:print("选择您要办的业务编号:1.增加信息 2.删除信息 3.更改信息 4.查询信息")key1 = int(input())if key1 == 1:cursor = connect.cursor()  # 创建一个游标对象python里的sql语句都要通过cursor来执行sql = 'insert into 客户信息(客户号,客户名,结余金额) values(%s,%s,%s)'print("客户号:")a = input()print("客户名:")b = input()print("结余金额:")c = input()cursor.execute(sql, (a, b, c))connect.commit()cursor.close()elif key1 == 2:cursor = connect.cursor()  # 创建一个游标对象python里的sql语句都要通过cursor来执行print("客户号:")a = input()rows = cursor.execute('delete from 户信息 where 客户号=%s ', a)connect.commit()  # 确认cursor.close()elif key1 == 3:cursor = connect.cursor()  # 创建一个游标对象python里的sql语句都要通过cursor来执行print("客户号:")a = input()print("结余金额:")b = input()rows = cursor.execute('update 客户信息 set 结余金额=%s where 客户号=%s' % (b, a))connect.commit()cursor.close()elif key1 == 4:cursor = connect.cursor()  # 创建一个游标对象python里的sql语句都要通过cursor来执行cursor.execute("select 客户号, 客户名, 结余金额 from 客户信息")  # 执行sql语句row = cursor.fetchone()  # 读取查询结果while row:  # 循环读取所有结果print("客户号:%s,客户名:%s,结余金额:%s" % (row[0], row[1], row[2]))  # 输出结果row = cursor.fetchone()cursor.close()else:print("未知错误!")elif key == 2:print("选择您要办的业务编号:1.增加信息 2.删除信息 3.更改信息 4.查询信息")key2 = int(input())if key2 == 1:cursor = connect.cursor()  # 创建一个游标对象python里的sql语句都要通过cursor来执行sql = 'insert into 用水类型(类别号,类别名,单位水价) values(%s,%s,%s)'print("类别号:")a = input()print("类别名:")b = input()print("单位水价:")c = input()cursor.execute(sql, (a, b, c))connect.commit()cursor.close()elif key2 == 2:cursor = connect.cursor()  # 创建一个游标对象python里的sql语句都要通过cursor来执行print("类别号:")a = input()rows = cursor.execute('delete from 用水类型 where 类别号=%s', a)connect.commit()  # 确认cursor.close()elif key2 == 3:cursor = connect.cursor()  # 创建一个游标对象python里的sql语句都要通过cursor来执行print("类别号:")a = input()print("单位水价:")b = input()rows = cursor.execute('update 用水类型 set 单位水价=%s where 类别号=%s' % (b, a))connect.commit()cursor.close()elif key2 == 4:cursor = connect.cursor()  # 创建一个游标对象python里的sql语句都要通过cursor来执行cursor.execute("select 类别号, 类别名, 单位水价 from 用水类型")  # 执行sql语句row = cursor.fetchone()  # 读取查询结果while row:  # 循环读取所有结果print("类别号:%s,类别名:%s,水价:%s" % (row[0], row[1], row[2]))  # 输出结果row = cursor.fetchone()cursor.close()else:print("未知错误!")elif key == 3:print("选择您要办的业务编号:1.增加信息 2.删除信息 3.查询信息")key3 = int(input())if key3 == 1:cursor = connect.cursor()  # 创建一个游标对象python里的sql语句都要通过cursor来执行sql = 'insert into 业务员信息(业务员号,业务员名) values(%s,%s)'print("业务员号:")a = input()print("业务员名:")b = input()cursor.execute(sql, (a, b))connect.commit()cursor.close()elif key3 == 2:cursor = connect.cursor()  # 创建一个游标对象python里的sql语句都要通过cursor来执行print("业务员号:")a = input()rows = cursor.execute('delete from 业务员信息 where 业务员号=%s', a)connect.commit()  # 确认cursor.close()elif key3 == 3:cursor = connect.cursor()  # 创建一个游标对象python里的sql语句都要通过cursor来执行cursor.execute("select 业务员号, 业务员名 from 业务员信息")  # 执行sql语句row = cursor.fetchone()  # 读取查询结果while row:  # 循环读取所有结果print("业务员号:%s,业务员名:%s" % (row[0], row[1]))  # 输出结果row = cursor.fetchone()cursor.close()else:print("未知错误!")elif key == 4:print("选择您要办的业务编号:1.增加信息 2.查询信息 3.删除信息")key4 = int(input())if key4 == 1:cursor = connect.cursor()  # 创建一个游标对象python里的sql语句都要通过cursor来执行sql = 'insert into 用水信息管理(客户号,月份,用水类别号,用水量) values(%s,%s,%s,%s)'print("客户号:")a = input()print("月份:")b = input()print("用水类别号:")c = input()print("用水量:")d = input()cursor.execute(sql, (a, b, c, d))connect.commit()cursor.close()elif key4 == 2:cursor = connect.cursor()  # 创建一个游标对象python里的sql语句都要通过cursor来执行cursor.execute("select 客户号, 月份, 用水类别号, 用水量 from 用水信息管理")  # 执行sql语句row = cursor.fetchone()  # 读取查询结果while row:  # 循环读取所有结果print("客户号:%s,月份:%s,用水类别号:%s,用水量:%s" % (row[0], row[1], row[2], row[3]))  # 输出结果row = cursor.fetchone()cursor.close()elif key4 == 3:cursor = connect.cursor()  # 创建一个游标对象python里的sql语句都要通过cursor来执行print("客户号:")a = input()print("月份:")b = input()rows = cursor.execute('delete from 用水信息管理 where 客户号=%s and 月份=%s', (a, b))connect.commit()  # 确认cursor.close()else:print("未知错误!")elif key == 5:print("选择您要办的业务编号:1.增加信息 2.查询信息 3.删除信息")key5 = int(input())if key5 == 1:cursor = connect.cursor()  # 创建一个游标对象python里的sql语句都要通过cursor来执行sql = 'insert into 订单管理(订单号,客户号,月份,收取费用,业务员号) values(%s,%s,%s,%s,%s)'print("订单号:")a = input()print("客户号:")b = input()print("月份:")c = input()print("收取费用:")d = input()print("业务员号:")e = input()cursor.execute(sql, (a, b, c, d, e))connect.commit()cursor.close()elif key5 == 2:cursor = connect.cursor()  # 创建一个游标对象python里的sql语句都要通过cursor来执行cursor.execute("select 订单号,客户号,月份,收取费用,业务员号 from 订单管理")  # 执行sql语句row = cursor.fetchone()  # 读取查询结果while row:  # 循环读取所有结果print("订单号:%s,客户号:%s,月份:%s,收取费用:%s,业务员号:%s" % (row[0], row[1], row[2], row[3], row[4]))  # 输出结果row = cursor.fetchone()cursor.close()elif key5 == 3:cursor = connect.cursor()  # 创建一个游标对象python里的sql语句都要通过cursor来执行print("订单号:")a = input()rows = cursor.execute('delete from 订单管理 where 订单号:=%s', a)connect.commit()  # 确认cursor.close()else:print("未知错误!")elif key == 6:print("选择您要办的业务编号:1.查询信息 2.删除信息")key6 = int(input())if key6 == 1:cursor = connect.cursor()  # 创建一个游标对象python里的sql语句都要通过cursor来执行cursor.execute("select 客户号,月份,费用,收费标志 from 费用管理 where 收费标志='未收费'")  # 执行sql语句row = cursor.fetchone()  # 读取查询结果while row:  # 循环读取所有结果print("客户号:%s,月份:%s,费用:%s,收费标志:%s" % (row[0], row[1], row[2], row[3]))  # 输出结果row = cursor.fetchone()cursor.close()elif key6 == 2:cursor = connect.cursor()  # 创建一个游标对象python里的sql语句都要通过cursor来执行print("客户号:")a = input()print("月份:")b = input()rows = cursor.execute('delete from 用水信息管理 where 客户号=%s and 月份=%s', (a, b))connect.commit()  # 确认cursor.close()else:print("未知错误!")else:print("未知错误!")connect.close()

【sql+python】数据库与程序实践——某自来水公司收费系统相关推荐

  1. python小程序源代码-Python数据库小程序源代码

    源代码: # dict1 是 字典 , 用来对应相应元素的下标,我们将文件转成列表,对应的也就是文件的下标,通过下标来找文件元素 dict1 = {'sort':0 , 'name':1 ,'age' ...

  2. 自来水公司收费管理系统升级

    实际上,在我接手这个系统的时候,我就觉得公司是完全为了赚取客户的钱而故意将弄的很复杂.     对于一个小县城的收费系统,数据库完全可以采用较为好管理的SQLServer,但公司却采用了Oracle, ...

  3. B站黑马程序员Oracle学习——项目案例:送水公司收费系统

    目录 一.项目介绍和需求分析 1.  项目背景: 2.  需求分析: 二.表结构设计 三.创建表空间 四.创建用户 五.用户赋权 一.项目介绍和需求分析 1.  项目背景: 某自来水公司为了更好地对自 ...

  4. SQL Server数据库迁移最佳实践,可降低风险和停机时间

    介绍 (Introduction) The main goal of many organizations, today, is reducing costs while maintaining th ...

  5. python 博客程序_项目1——博客系统 - Python测试和开发 - OSCHINA - 中文开源技术交流社区...

    一.绪言 今天又来更新博文了,学习Java也已经有一段时间了,经过这段时间的学习,我对Java有了更深一层的理解.从刚开始的HelloWorld到了现在的小型网页项目,这中间也经历了很多.话不多说,下 ...

  6. python完整程序源代码_Python数据库小程序源代码

    源代码: # dict1 是 字典 , 用来对应相应元素的下标,我们将文件转成列表,对应的也就是文件的下标,通过下标来找文件元素 dict1 = {'sort':0 , 'name':1 ,'age' ...

  7. 人人都是 DBA(V)SQL Server 数据库文件

    SQL Server 数据库安装后会包含 4 个默认系统数据库:master, model, msdb, tempdb. SELECT [name],database_id,suser_sname(o ...

  8. 10步骤优化SQL Server 数据库性能

    作者从基础的数据库索引开始全面讲述了SQL Server数据库应用程序的性能优化,包括数据库设计和数据访问代码.系列文章如下: Top 10 steps to optimize data access ...

  9. c++课程设计——绘本之家信息管理系统(qt图形化工具,SQL server数据库)

    绘本之家管理系统 一.题目需求 开发一个"绘本之家"信息管理系统,分为三大管理模块,综合查询模块和统计分析模块. (1)绘本资料的管理 绘本信息包括:绘本编号.绘本名.作者.出版社 ...

最新文章

  1. cssbefore图片大小_两小时学会CSS-before after 伪元素
  2. Java项目:嘟嘟图片展览馆管理系统(java+Springboot+SpringMVC+JPA+Jsp+maven+mysql)
  3. ftp在命令行状态下下载跟上传东西
  4. 存储过程排版工具_我的绘图工具箱
  5. input自适应_深度残差网络+自适应参数化ReLU(调参记录18)Cifar10~94.28%
  6. Mac bower install bootstrap bug解决
  7. ./和bash的区别
  8. [转]在ROS下使用zeroconf配置多机通信
  9. 程序员到底会不会修电脑?
  10. ESP定律手工脱壳步骤
  11. 【设计素材】表格数据形平面海报素材
  12. c++byte数组和文件的相互转换_5分钟系列之Java类文件结构(三、字节码指令简介)...
  13. ISO18000-6C超高频RFID蓝牙写卡器HX9816UBT上位机命令数据块
  14. php懂erp是什么意思,ERP是个什么鬼,这里的讲解通俗易懂
  15. 关于大学生期末复习学习地点和学习时间的调查
  16. java 获取 yyyymmdd_从JS日期对象获取YYYYMMDD格式的字符串?
  17. 云效告诉你如何进行研发排期,高效达成目标
  18. 苹果平板可以用html么,哪些苹果平板可以用苹果笔
  19. matlab中输入数学字母,Matlab希腊字母和数学符号
  20. 算法和设计模式(面经)

热门文章

  1. 中电信抢滩云计算 上海开建信息银行
  2. 风华才气,春华秋实———忆信管学子杨友岁月如歌
  3. 19 Flowable任务之调用子流程(CallActivity)
  4. 常用传感器讲解十五--触摸传感器(KY-036)
  5. [转载]用J2ME开发企业级无线应用
  6. 有耗介质中,电磁波的波速与频率的关系?--电磁波的色散效应
  7. 李开复写给中国大学生的第四封信
  8. Ymir安装问题汇总
  9. Android系统小知识
  10. wro4j的js和css压缩技术