postgresql数据库课程设计

烟草数据库

目录

一、设计意义... 3

二、系统功能需求分析... 3

2.1 系统功能分析... 3

2.2 数据库语义分析.. 5

2.3 实体与属性... 5

2.4 安全性控制... 6

三、数据库整体概念结构设计... 6

3.1 实体图... 6

3.2 实体关系 E-R 图.. 7

3.2.1 实体属性图... 8

3.2.2 实体联系图... 10

3.2.3 完整 E-R 图... 11

四、数据库整体逻辑结构设计... 11

4.1  逻辑转化... 11

4.2细化表结构... 12

4.3  关系模式分析... 14

五、数据库实施阶段... 14

5.1  创建数据库和基本表.. 14

5.2  插入数据... 18

5.3 建立触发器... 21

5.3.1.出售卷烟后,更改经销商库存的卷烟存量... 21

5.3.2. 经销商订购卷烟后,更改经销商和烟草局的卷烟存量... 22

5.4  建立视图... 22

5.4.1 用户视图... 23

5.4.2经销商视图... 23

5.5 建立用户和授权... 23

5.5.1建立消费者角色和授权... 23

5.5.2建立经销商角色和授权... 23

六、数据库系统界面应用... 23

6.1(登录界面). 23

七、课程设计总结... 25

八、贡献度... 25

附、C#源代码... 25

一、设计意

维新派与守旧派矛盾由来已久。维新派领袖丁真凭借电子烟科技与理塘地理因素对传统派大放阙词。①理塘海拔高,温度较低,​传统香​​不易燃烧。

②当地经济落后,一次性传统香烟易造成当地居民资金不足的问题。

③传统与变革碰撞,随着经济发展,电子烟越来越受到年轻人青睐。

④理塘海拔高 空气稀薄 传统香烟烟雾大 不易挥发 有损理塘形象大使形象。

 

为支持好哥们王源,为传统派扎起,设计简单的烟草数据库系统。

(烟草专卖是指国家对烟草专卖品的生产、销售和进出口业务实行垄断经营、统一管理的制度。----《中华人民共和国烟草专卖法》

烟草商品是一类重要商品,其为国家的经济及税收发展带来了重要利益,中国的卷烟市场是全世界最大的,全国总共有三亿多烟民,占世界总烟民的近三分之一,中国的烟叶生产量及成品烟销售量也是世界的三分之一左右。同时,中国在八个方面也有着世界第一的地位:烤烟种植面积第一,烤烟产量世界第一,烤烟增长速度世界第一,卷烟产销量世界第一,卷烟增长速度世界第一,吸烟人数世界第一,吸烟人数增加数量世界第一,烟税增长速度世界第一。在这种情况下,中国的卷烟消费量达3894.5万箱,国烟草行业年税收为国家的总税收的10%之多。

烟草制品受到国家管控,取得烟草专卖批发企业许可证的企业,应当在许可证规定的经营范围和地域范围内,从事烟草制品的批发业务。无烟草专卖批发企业许可证的单位或者个人,一次销售卷烟、雪茄烟50条以上的,视为无烟草专卖批发企业许可证从事烟草制品批发业务。

明确卷烟的流通数量可以避免倒卖卷烟,有利于烟草管控,我们小组在这次大作业的研究中制作了简单的烟草数据库系统。

本数据库系统结合 SQL 数据库设计和 C#界面编写,建立了一个模拟的简单烟草数据库系统,查询卷烟名称、经销商姓名、订单编号、派送人员编号、卷烟成本价、零售价等烟草系统基本信息。通过数据库可以实现查询烟草局的烟草储存信息与烟草价格信息,经销商处的出售情况信息,派送人员信息等功能。)

、系统功能需求分析

2.1 系统功能分析

(1)进入系统可查询烟草系统相关信息。

(2)实现触发功能:向订货订单表表中插入信息后,实现关联表烟草局卷烟总表、经销商烟草库存表的信息修改;向出售订单表表中插入信息后,实现关联表经销商烟草库存表的信息修改;

(3)完成数据库界面设计,可通过界面可视化交互,进行数据库相关操作, 查询相关信息等。

2.2 数据库语义分析

实体与实体间联系:

  1. 很多个经销商向烟草局订购烟草。一个烟草局卷烟总表有许多种类的卷烟对应着很多个经销商,所以烟草局卷烟总表中多种类的卷烟对应着多个经销商,关系为多对多。一个经销商会选购多个种类的卷烟,一个种类的卷烟会被多个经销商选购,所以经销商和卷烟之间的关系为多对多。所有的卷烟种类有部分被选购,所以烟草局的卷烟种类和订货订单时是多对多的关系。一个经销商会生成多个订单,一个订单对应一个经销商,所以经销商和订单是一对多的关系。

(烟草局卷烟:经销商:订货订单    m:1:n)

  1. 烟草卷烟总表指的是一个烟草局的烟草信息。一个烟草局会得到多份订货订单,所以是一对多的关系。(烟草局卷烟:订货订单     1:n)
  2. 一个的经销商会发出不同需求的订货订单。一个经销商对应着多份订货订单,所以是多对多的关系。(经销商:订货订单     1:n)
  3. 不同的配送人员会根据要求像不同的经销商进行配送,这其中一个配送人员可能会服务于多位经销商,一位经销商也可能需要多个配送人员服务,所以经销商表和配送人员表是多对多的关系。(经销商:配送人员     m:n)
  4. 每个经销商都会拥有经销商的多种类烟草的库存情况。所以经销商表和经销商烟草库存表是一对多的关系。(经销商:经销商烟草库存     1:n)
  5. 由经销商处的烟草库存,经销商会进行卷烟的出售,由此产生了多份出售订单,故经销商烟草库存表与出售订单表是一对多的关系。(经销商烟草库存:出售订单     1:n)

2.3 实体与属性

1. 系统共有 6 个实体

(1)   烟草局卷烟总表:  (卷烟名称,卷烟编号,卷烟存量,经销商进价,成本价,零售价)

(2)   经销商:  (经销商编号,经销商姓名,经销商电话,级别,可购买量)

(3)   出售订单:  (出售订单编号,卷烟编号,日期,购买量,出售人)

(4)   订货订单:  (订货订单编号,卷烟编号,日期,购买量,经销商编号)

(5)   配送人员:  (派送人员姓名,配送人员编号,工作状态,电话)

(6)   经销商库存:  (卷烟编号,卷烟名称,卷烟存量,经销商编号)

2.4 安全性控制

卷烟的销售由国家经营,所以卷烟价格统一管理。烟草局掌握成本价、经销商进价和售价。用户只能查看价格与经销商存量,经销商能查看售价和进价,以及插入出售订单和订货订单。

三、数据库整体概念结构设计

3.1 实体图

首先,先建立基本实体图,根据实体图以及各个实体之间的关系得到实体关系 E-R 图。各实体之间的联系为:

(1)  烟草局卷烟和经销商是一对多的关系。

(2)  烟草局卷烟和订货订单是一对多的关系。

(3)  经销商和订货订单是一对多的关系。

(4)  经销商和配送人员是多对多的关系。

(5)  经销商和经销商烟草库存是一对多的关系。

(6)  经销商烟草库存和出售订单是一对多的关系。

 

3.2 实体关系 E-R 图

根据之前分析的实体和实体之间的联系可得到如下的实体关系 E-R 图:

3.2.1 实体属性图

 

图 3-1 烟草局卷烟总表实体属性图

 

图 3-2 经销商实体属性图

 

图 3-3 出售订单实体属性图

 

图 3-4 订货订单实体属性图

 

图 3-5 配送人员实体属性图

 

图 3-6 经销商库存实体属性图

3.2.2 实体联系图

 

图 3-7 实体联系图

 

3.2.3 完整 E-R 图

图 3-8 完整 E-R 图

、数据库整体逻辑结构设计

4.1  逻辑转化

根据 3.2 节中的 E-R 图可以将系统中的概念模型转换为具体的表 (即关系) 结构,共分为 7 个关系 (关系就是给出关系名,属性就是实体属性,并标明该关 系的主键用下划线来表示) ,详细信息如下所示:

  1. 烟草局卷烟总表: (卷烟名称,卷烟编号,卷烟存量,经销商进价,成本价,零售价)
  2. 经销商: (经销商编号,经销商姓名,经销商电话,级别,可购买量)
  3. 出售订单: (出售订单编号卷烟编号,日期,购买量,出售人,经销商编号)
  4. 订货订单: (订货订单编号卷烟编号,日期,购买量,经销商编号)
  5. 配送人员: (派送人员姓名,配送人员编号,工作状态,电话)
  6. 配送: (人员编号,送烟日期,经销商编号订货订单编号卷烟编号)
  7. 经销商库存: (卷烟编号,卷烟名称,卷烟存量,经销商编号)

4.2细化表结构

根据上述文字描述,用英文简写为表名,实体图中的元素为列名, 并根据

实际需求来确定列的数据类型、数据最大宽度、必要的约束说明规则,为方便该烟草系统数据库在 SQL 中的建立,给出如下所示数据 库表的基本结构及说明

:烟草局卷烟表

列名

数据类型

长度

约束

说明

卷烟名称

CHAR

10

NOT NULL

卷烟编号

CHAR

4

PRIMARY KEY

卷烟存量

BIGINT

NOT NULL

经销商进价

FLOAT

5

NOT NULL

成本价

FLOAT

5

NOT NULL

零售价

FLOAT

5

NOT NULL

经销商表

列名

数据类型

长度

约束

说明

经销商编号

CHAR

4

PRIMARY KEY

经销商姓名

CHAR

6

NOT NULL

经销商电话

CHAR

11

NOT NULL

级别

INT

NOT NULL

可购买量

BIGINT

NOT NULL

出售订单表

列名

数据类型

长度

约束

说明

出售订单编号

CHAR

10

卷 烟 编 号 和出售订单编号共 同作为主码

卷烟编号

CHAR

10

卷 烟 编 号 和出售订单编号共 同作为主码

日期

DATE

NOT NULL

购买量

INT

NOT NULL

出售人

CHAR

6

经销商编号

CHAR

4

NOT NULL

订货订单表

列名

数据类型

长度

约束

说明

订货订单编号

CHAR

10

卷 烟 编 号 和订货订单编号共 同作为主码

卷烟编号

CHAR

10

卷 烟 编 号 和订货订单编号共 同作为主码

日期

DATE

NOT NULL

购买量

INT

小于 经销商可购买量

经销商编号

CHAR

4

FOREIGN KEY

派送人员表

列名

数据类型

长度

约束

说明

派送人员姓名

CHAR

6

NOT NULL

配送人员编号

CHAR

10

PRIMARY KEY

工作状态

INT

0 或 1

电话

CHAR

11

Not null

配送表

列名

数据类型

长度

约束

说明

人员编号

CHAR

10

FOREIGN KEY

送烟日期

DATE

NOT NULL

经销商编号

CHAR

4

FOREIGN KEY

订货订单编号

CHAR

10

FOREIGN KEY

除送烟日期外所有属性共同作为主码

卷烟编号

CHAR

10

FOREIGN KEY

经销商库存表

列名

数据类型

长度

约束

说明

卷烟编号

CHAR

4

卷 烟 编 号 和 经销 商 编 号 共 同作为主码

卷烟名称

CHAR

10

NOT NULL

卷烟存量

BIGINT

NOT NULL

经销商编号

CHAR

4

卷 烟 编 号 和 经销 商 编 号 共 同作为主码

4.3  关系模式分析

在设计数据库过程之中,有些关系模式存在插入,删除异常以及修改复杂数据冗余等问题,需要寻求解决这些问题的方法,所以我们要进行规范化处理,现在我们分析本数据库中关系模式的规范化程度。来判断是否需要进一步规范化处理。

1.对于关系模式烟草局卷烟库存(卷烟名称,卷烟编号,卷烟存量,经销商进价,成本价,零售价)

其中卷烟名称是一个候选码,卷烟编号是一个候选码,其他属性均完全函数依赖于任何一个候选码,且不存在传递依赖关系,同时卷烟名称完全函数依赖于卷烟编号,卷烟编号完全函数依赖于卷烟名称,所以是BC范式。

2.对于关系模式经销商表(经销商姓名,经销商编号,电话,级别,可购买量)

其中候选码为经销商姓名,经销商编号,其他属性均完全函数依赖于任何一个候选码,但是

级别可以决定可购买量存在传递依赖关系,所以是2范式。

3.对于关系模式出售订单表(   (出售订单编号,卷烟编号)    ,日期,购买量,出售人,经销商编号)

其中出售人依赖于出售订单编号,所以是1范式

4.对于关系模式订货订单表(   (订货订单编号,卷烟编号)    ,日期,购买量,经销商编号)

其中订货订单编号和卷烟编号共同构成一个候选码,经销商编号依赖于订货订单编号所以存在部分函数依赖关系,所以是1范式。

5.对于关系模式派送人员表(派送人员姓名,派送人员编号,工作状态,电话)

其中派送人员姓名是一个候选码,派送人员编号是一个候选码,其他属性均完全函数依赖于任何一个候选码,且不存在函数依赖关系,同时派送人员姓名完全函数依赖于派送人员编号,派送人员编号完全依赖于派送人员姓名,所以是BC范式。

6.对于关系模式配送表(   (卷烟人员编号,经销商编号,订货订单编号,卷烟编号)  ,送烟日期)

其中送烟日依赖于订货订单编号所以存在部分函数依赖关系所以是1范式。

7.对于关系模式经销商库存表(   (出售订单编号,经销商编号)    ,卷烟存量,卷烟名称)

其由于每个经销商的订单表编号互相可能存在重复问题,所以出售订单编号和经销商编号共同作为主码,于是本关系模式中出售订单编号和经销商编号共同构成一个候选码,且其他属性均完全函数依赖于这个候选码,同时卷烟名称与卷烟存量并不能互相决定即不存在传递函数依赖关系,且由于只有一个候选码所以是BC范式。

五、数据库实施阶段

5.1  创建数据库和基本表

1.建立数据库

CREATE database 烟草系统;

2.基本表的建立

(1).烟草局卷烟总表的建

CREATE table 烟草局卷烟总表

(

卷烟名称 char(10) NOT null,

   卷烟编号 char(4) PRIMARY KEY,

   卷烟存量 bigint NOT NULL,

   进销商进价 float(5) NOT NULL,

   成本价 float(5) NOT NULL,

   零售价 float(5) NOT NULL

);

(2).经销商表的建

CREATE table 经销商表

(

经销商编号 char(4) PRIMARY KEY,

经销商姓名 char(6) NOT NULL,

经销商电话 char(11) NOT NULL,

级别 int NOT NULL,

可购买量 bigint NOT NULL

);

(3).出售订单表的建

CREATE table 出售订单表

(

出售订单编号 char(10) not null,

   卷烟编号 char(10) NOT NULL,

   日期 date NOT NULL,

   购买量 int NOT NULL,

出售人 char(6),

   经销商编号 char(4) NOT NULL,

FOREIGN KEY(卷烟编号) references 烟草局卷烟总表(卷烟编号),

   primary key(出售订单编号,卷烟编号)

);

(4).订货订单表的建

CREATE table 订货订单表

(

 

订货订单编号 char(10) not null,

    卷烟编号 char(10) NOT NULL,

    日期 date NOT NULL,

    购买量 int NOT NULL,

经销商编号 char(4),

    primary key(订货订单编号,卷烟编号),

FOREIGN KEY(卷烟编号) references 烟草局卷烟总表(卷烟编号),

    FOREIGN KEY(经销商编号) references 经销商表(经销商编号));

(5)派送人员表的建立

CREATE table 派送人员表

(

派送人员姓名 char(6) NOT NULL,

   派送人员编号 char(10) PRIMARY KEY,

   工作状态 int, 电话 char(11) NOT NULL

   );

(6)配送表的建立

CREATE table 配送表

(

派送人员编号 char(10) NOT NULL,

    送烟日期 date NOT NULL,

    经销商编号 char(4) NOT NULL,

    订货订单编号 char(10) NOT NULL,

    卷烟编号 char(10) NOT NULL,

    primary key(派送人员编号,经销商编号,订货订单编号,卷烟编号),

FOREIGN KEY(派送人员编号) references 派送人员表(派送人员编号),

FOREIGN KEY(经销商编号) references 经销商表(经销商编号),

FOREIGN KEY(订货订单编号,卷烟编号) references 订货订单表(订货订单编号,卷烟编号)

);

(7)经销商库存表的建立

CREATE table 经销商库存表

(

卷烟编号 char(4) ,

    卷烟名称 char(10) NOT NULL,

    卷烟存量 BIGINT NOT NULL,

    经销商编号 char(4),

    PRIMARY KEY(卷烟编号,经销商编号)

);

5.2  插入数据

(1).烟草局卷烟总表的插入

INSERT INTO public."烟草局卷烟总表"(

"卷烟名称", "卷烟编号", "卷烟存量", "进销商进价", "成本价", "零售价")

VALUES ('中华(金中支)', 001, 10000, 800, 680, 850),('芙蓉王(细支硬蓝)', 002, 10000, 350, 300, 400),

('南京(炫赫门)', 003, 10000,150,120, 180),('红塔山(传奇)', 004, 10000,140,130, 150),

('云烟(黑金刚印象)', 005, 10000,560,510, 600);

(2). 派送人员表的插入

INSERT INTO public."派送人员表"(

"派送人员姓名", "派送人员编号", "工作状态", "电话")

VALUES ('赵甲','001','0','17829302992'),

('钱乙','002','0','19293056378'),

('王丙','003','1','10938395610'),

('李丁','004','1','18940383039'),

('张戊','005','1','18947300934');

(3). 经销商表的插入

INSERT INTO public."经销商表"(

"经销商编号", "经销商姓名", "经销商电话", "级别", "可购买量")

VALUES

('0001','张三','13729302998', '1' ,'30000'),

('0002','李四','13456894345','2','50000'),

('0003','王五','10948494034','3','100000'),

('0004','赵六','18494038504','4','150000'),

('0005','吴七','18403054303','5','200000');

(4). 出售订单表的插入

INSERT INTO public."出售订单表"(

"出售订单编号", "卷烟编号", "日期", "购买量", "出售人", "经销商编号")

 VALUES('00001','1','2022-10-31','190','李刚','0001'),

('00002','3','2022-10-23','100','赵强','0002'),

('00003','4','2022-10-27','230','王武','0003');

(5). 订货订单表的插入

INSERT INTO public."订货订单表"(

"订货订单编号", "卷烟编号", "日期", "购买量", "经销商编号")

VALUES ('01','1','2022-8-25','2000','0001'),

      ('02','2','2022-8-23','500','0001'),

      ('03','3','2022-8-10','900','0002'),

      ('04','4','2022-8-11','100','0002'),

      ('05','4','2022-8-25','200','0003'),

      ('06','3','2022-8-12','200','0003'),

      ('07','1','2022-7-31','300','0004'),

      ('08','2','2022-7-15','500','0004'),

      ('09','2','2022-8-26','800','0005'),

      ('10','4','2022-8-19','200','0005');

(6). 配送表的插入

INSERT INTO public."配送表"(

"派送人员编号", "送烟日期", "经销商编号", "订货订单编号", "卷烟编号")

VALUES

('001','2022-9-12','0001','01','1'),

('001','2022-9-10','0001','02','2'),

('002','2022-9-10','0002','03','3'),

('005','2022-9-21','0002','04','4'),

('003','2022-9-20','0003','05','4'),

('001','2022-8-31','0003','06','3'),

('003','2022-9-11','0004','07','1'),

('005','2022-8-30','0004','08','2'),

('002','2022-9-29','0005','09','2'),

('004','2022-9-30','0005','10','4');

(7). 经销商库存表的插入

INSERT INTO public."经销商库存表"(

"卷烟编号", "卷烟名称", "卷烟存量", "经销商编号")

VALUES

('1','中华(金中支)','2000','0001'),

('2','芙蓉王(细支硬蓝)','1000','0001'),

('3','南京(炫赫门)','3000','0001'),

('4','红塔山(传奇)','2000','0001'),

('5','云烟(黑金刚印象)','4000','0001'),

('1','中华(金中支)','3000','0002'),

('2','芙蓉王(细支硬蓝)','1000','0002'),

('3','南京(炫赫门)','4000','0002'),

('4','红塔山(传奇)','1000','0002'),

('5','云烟(黑金刚印象)','1000','0002'),

('1','中华(金中支)','2000','0003'),

('2','芙蓉王(细支硬蓝)','1000','0003'),

('3','南京(炫赫门)','2000','0003'),

('4','红塔山(传奇)','3000','0003'),

('5','云烟(黑金刚印象)','1000','0003'),

('1','中华(金中支)','3000','0004'),

('2','芙蓉王(细支硬蓝)','2000','0004'),

('3','南京(炫赫门)','4000','0004'),

('4','红塔山(传奇)','1000','0004'),

('5','云烟(黑金刚印象)','2000','0004'),

('1','中华(金中支)','1000','0005'),

('2','芙蓉王(细支硬蓝)','1000','0005'),

('3','南京(炫赫门)','3000','0005'),

('4','红塔山(传奇)','1000','0005'),

('5','云烟(黑金刚印象)','4000','0005');

5.3 建立触发器

5.3.1.出售卷烟后,更改经销商库存的卷烟存量

create or replace function chushou_func()

returns trigger as

$$

begin

update 经销商库存表

set 卷烟存量=卷烟存量-new.购买量

where 卷烟编号=new.卷烟编号 and 经销商编号=new.经销商编号;

return null;

end

$$

language plpgsql;

create trigger teacher_fun after insert on 出售订单表

for each row execute procedure chushou_func();

 

(触发前数据)

 

(触发触发器)

 

(触发后数据)

5.3.2. 经销商订购卷烟后,更改经销商和烟草局的卷烟存量

create or replace function dingdan_func()

returns trigger as

$$

begin

update 经销商库存表

set 卷烟存量=卷烟存量+new.购买量

where 卷烟编号=new.卷烟编号 and 经销商编号=NEW.经销商编号;

update 烟草局卷烟总表

set 卷烟存量=卷烟存量-new.购买量

where 卷烟编号=new.卷烟编号;

return null;

end

$$

language plpgsql;

create trigger teacher_fun after insert on 订货订单表

for each row execute procedure dingdan_func();

5.4  建立视图

基于需求分析,用户只能查看价格与经销商存量,经销商能查看售价和进价,以及插入出售订单和订货订单。

5.4.1 用户视图

Create view userview as

(select 零售价,经销商库存表.卷烟名称,经销商库存表.卷烟存量,经销商姓名

 from 烟草局卷烟总表,经销商库存表,经销商表

where 烟草局卷烟总表.卷烟编号=经销商库存表.卷烟编号 and

 经销商库存表.经销商编号=经销商表.经销商编号

)

5.4.2经销商视图

Create view businessview (卷烟名称,零售价,进价,卷烟存量)

as

(select 卷烟名称,零售价,进销商进价,卷烟存量

 from 烟草局卷烟总表

)

5.5 建立用户和授权

烟草局账户拥有所有权限。

消费者用户只能查询烟草零售价和经销商库存

经销商用户只能插入订货订单表,出售订单表和查询烟草的进价,零售价。

5.5.1建立消费者角色和授权

CREATE ROLE USER1 with password '123456';

GRANT SELECT ON USERVIEW

TO USER1;

5.5.2建立经销商角色和授权

CREATE ROLE BUSINESS with password '123456';

GRANT SELECT ON BUSINESSVIEW

TO BUSINESS;

GRANT INSERT ON 出售订单表

TO BUSINESS;

GRANT INSERT ON 订货订单表

TO BUSINESS;

、数据库系统界面应用

对于上述过程建立的数据库,借鉴先前优秀案例的思想,我们建立了C#窗体 程。本程序可以直接运用于烟草信息收集和统计。

6.1(登录界面)

使用不同的账号和密码登录,所赋予的权限不一样,烟草局账户拥有所有权限,而用户账户只能查询烟草零售价和经销商库存,而经销商账户只能插入订货订单表,出售订单表和查询烟草的进价,零售价。

 

6.2(用户界面) 

 

使用Gridview获取数据表,在通过textbox控件输入字符串,再利用字符串的拼接实现sql语句的输入输出和查询插入删除更新功能,其中用了控件的visible属性实现登录界面于用户界面的交换。

、课程设计总结

八、贡献度

 

附、C#源代码

    private void button1_Click_1(object sender, EventArgs e)

        {

            try

            {

                string connStr = "server=localhost;username="+textBox2.Text+";password="+textBox3.Text+";database=sasx";

                //创建.NET和PostgreSQL之间的登录连接

                NpgsqlConnection connection = new NpgsqlConnection(connStr);

                //连接开启

                connection.Open();

                //SQL语句

                string commandStr = textBox1.Text;

                NpgsqlCommand thisCommand = new NpgsqlCommand(commandStr, connection);

                thisCommand.ExecuteNonQuery();

                string[] a = Regex.Split(commandStr, " ", RegexOptions.IgnoreCase);

                if (a[0] == "select")

                {

                    NpgsqlDataAdapter objDataAdpter = new NpgsqlDataAdapter(); //构造数据操作对象

                    objDataAdpter.SelectCommand = new NpgsqlCommand(commandStr, connection); //构造命令对象

                    DataSet ds = new DataSet(); //构造数据集

                    objDataAdpter.Fill(ds, "表"); //取得全部数据

                    dataGridView1.DataSource = ds.Tables[0];

                }

                MessageBox.Show("执行成功!");

            }

            catch (Exception ee)

            {

                MessageBox.Show("执行失败!" + ee.ToString());

            }

        }//实现pgsql的连接,输入,输出

private void button3_Click(object sender, EventArgs e)

        {

           

            try

            {

                string connStr = "server=localhost;username=" + textBox2.Text + ";password="+textBox3.Text+";database=sasx";

                //创建.NET和PostgreSQL之间的登录连接

                NpgsqlConnection connection = new NpgsqlConnection(connStr);

                //连接开启

                connection.Open();

                int a = 1;

                if (a == 1)

                {

                    dataGridView1.Visible = true;

                    button1.Visible = true;

                    button2.Visible = true;

                    label3.Visible = true;

                    label4.Visible = true;      

                    textBox1.Visible = true;

                    button3.Visible = false;

                    textBox2.Visible = false;

                    textBox3.Visible = false;

                    label1.Visible = false;

                    label2.Visible = false;

                }

            }

            catch

            {

                MessageBox.Show("登录失败");

            }

        }

        private void button2_Click(object sender, EventArgs e)

        { 

                dataGridView1.Visible = false;

                button1.Visible = false;

                button2.Visible = false;

                label3.Visible = false;

                label4.Visible = false;

                textBox1.Visible = false;

                button3.Visible = true;

                textBox2.Visible = true;

                textBox3.Visible = true;

                label1.Visible = true;

                label2.Visible = true;

        }//实现登录界面和用户界面的交互,和账号密码登录的功能

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

胜天半子ymg

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

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

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

打赏作者

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

抵扣说明:

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

余额充值