当前位置: 首页 > news >正文

Delphi+SQL Server实现的(GUI)户籍管理系统

1.项目简介

  本项目是一个户籍管理系统,用于记录住户身份信息,提供新户登记(增加)、户籍变更(修改)、户籍注销(删除)、户籍查询、曾用名查询、迁户记录查询以及创建备份、删除备份共8个功能。

1.1. 软件环境与开发工具

  • 操作系统:Windows 10 Home China 1809 17763
  • 数据库:SQL Server Express 2017
  • 集成开发环境:Embarcadero Delphi Architect 10.3

2. 数据库设计

2.1. 概要结构设计

  数据库Manager共包括以下3张表:

表名

说明

People

存储用户信息,是程序的核心表

Rename

存储用户改名记录,作为曾用名表

Move

存储用户的住址变更记录,作为户籍变更历史

Controller

存储系统管理员账户信息

2.2. 数据表结构分析

  4张数据表的字段分别列举如下:

字段名

含义

类型

Name

姓名

NVARCHAR(10)

Sex

性别

NCHAR(2)

ID_Num

身份证号(主键)

CHAR(18)

Address

户籍地址

NVARCHAR(100)

Tel_No

联系方式

NUMERIC(12, 0)

Date

更新时间

DATETIME

字段名

含义

类型

ID_Num

身份证号(主键)

CHAR(18)

Old_Name

曾用名

CHAR(10)

Date

改名时间(升序索引)

DATETIME

字段名

含义

类型

ID_Num

身份证号(主键)

CHAR(18)

Address

曾用户籍地

NVARCHAR(100)

Date

迁户时间(升序索引)

DATETIME

字段名

含义

类型

Username

用户名(主键)

NCHAR(10)

Alias

别名

NCHAR(10)

Password

密码

VARBINARY(128)

2.3建表语句

USE [Manager]
GO
EXEC sys.sp_dropextendedproperty @name=N'MS_Description' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'Rename', @level2type=N'CONSTRAINT',@level2name=N'FK_Rename_People'
GO
EXEC sys.sp_dropextendedproperty @name=N'MS_Description' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'People', @level2type=N'CONSTRAINT',@level2name=N'CK_Tel_Limit'
GO
EXEC sys.sp_dropextendedproperty @name=N'MS_Description' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'People', @level2type=N'CONSTRAINT',@level2name=N'CK_Sex_Limit'
GO
EXEC sys.sp_dropextendedproperty @name=N'MS_Description' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'People', @level2type=N'CONSTRAINT',@level2name=N'CK_ID_Limit'
GO
EXEC sys.sp_dropextendedproperty @name=N'MS_Description' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'People', @level2type=N'COLUMN',@level2name=N'Date'
GO
EXEC sys.sp_dropextendedproperty @name=N'MS_Description' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'People', @level2type=N'COLUMN',@level2name=N'Tel_No'
GO
EXEC sys.sp_dropextendedproperty @name=N'MS_Description' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'People', @level2type=N'COLUMN',@level2name=N'Address'
GO
EXEC sys.sp_dropextendedproperty @name=N'MS_Description' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'People', @level2type=N'COLUMN',@level2name=N'ID_Num'
GO
EXEC sys.sp_dropextendedproperty @name=N'MS_Description' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'People', @level2type=N'COLUMN',@level2name=N'Sex'
GO
EXEC sys.sp_dropextendedproperty @name=N'MS_Description' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'People', @level2type=N'COLUMN',@level2name=N'Name'
GO
EXEC sys.sp_dropextendedproperty @name=N'MS_Description' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'Move', @level2type=N'CONSTRAINT',@level2name=N'FK_Move_People'
GO
ALTER TABLE [dbo].[People] DROP CONSTRAINT [CK_Tel_Limit]
GO
ALTER TABLE [dbo].[People] DROP CONSTRAINT [CK_Sex_Limit]
GO
ALTER TABLE [dbo].[People] DROP CONSTRAINT [CK_ID_Limit]
GO
ALTER TABLE [dbo].[Rename] DROP CONSTRAINT [FK_Rename_People]
GO
ALTER TABLE [dbo].[People] DROP CONSTRAINT [FK_People_People]
GO
ALTER TABLE [dbo].[Move] DROP CONSTRAINT [FK_Move_People]
GO
/****** Object:  Index [IX_Rename_1]    Script Date: 2019/5/27 1:20:03 ******/
DROP INDEX [IX_Rename_1] ON [dbo].[Rename]
GO
/****** Object:  Index [IX_Rename]    Script Date: 2019/5/27 1:20:03 ******/
DROP INDEX [IX_Rename] ON [dbo].[Rename]
GO
/****** Object:  Index [IX_Move_1]    Script Date: 2019/5/27 1:20:03 ******/
DROP INDEX [IX_Move_1] ON [dbo].[Move]
GO
/****** Object:  Index [IX_Move]    Script Date: 2019/5/27 1:20:03 ******/
DROP INDEX [IX_Move] ON [dbo].[Move]
GO
/****** Object:  Table [dbo].[Rename]    Script Date: 2019/5/27 1:20:03 ******/
DROP TABLE [dbo].[Rename]
GO
/****** Object:  Table [dbo].[People]    Script Date: 2019/5/27 1:20:03 ******/
DROP TABLE [dbo].[People]
GO
/****** Object:  Table [dbo].[Move]    Script Date: 2019/5/27 1:20:03 ******/
DROP TABLE [dbo].[Move]
GO
USE [master]
GO
/****** Object:  Database [Manager]    Script Date: 2019/5/27 1:20:03 ******/
DROP DATABASE [Manager]
GO
/****** Object:  Database [Manager]    Script Date: 2019/5/27 1:20:03 ******/
CREATE DATABASE [Manager] ON  PRIMARY 
( NAME = N'Citizens', FILENAME = N'D:\Program_Files_(x64)\Microsoft\SQL_Server_2017\Instances\MSSQL14.EXPRESS17\MSSQL\UserData\Citizens.mdf' , SIZE = 8192KB , MAXSIZE = 1048576KB , FILEGROWTH = 1%)LOG ON 
( NAME = N'Citizens_log', FILENAME = N'D:\Program_Files_(x64)\Microsoft\SQL_Server_2017\Instances\MSSQL14.EXPRESS17\MSSQL\UserData\Citizens_log.ldf' , SIZE = 8192KB , MAXSIZE = 1048576KB , FILEGROWTH = 1%)
GO
IF (1 = FULLTEXTSERVICEPROPERTY('IsFullTextInstalled'))
begin
EXEC [Manager].[dbo].[sp_fulltext_database] @action = 'enable'
end
GO
ALTER DATABASE [Manager] SET ANSI_NULL_DEFAULT OFF 
GO
ALTER DATABASE [Manager] SET ANSI_NULLS OFF 
GO
ALTER DATABASE [Manager] SET ANSI_PADDING OFF 
GO
ALTER DATABASE [Manager] SET ANSI_WARNINGS OFF 
GO
ALTER DATABASE [Manager] SET ARITHABORT OFF 
GO
ALTER DATABASE [Manager] SET AUTO_CLOSE ON 
GO
ALTER DATABASE [Manager] SET AUTO_SHRINK OFF 
GO
ALTER DATABASE [Manager] SET AUTO_UPDATE_STATISTICS ON 
GO
ALTER DATABASE [Manager] SET CURSOR_CLOSE_ON_COMMIT OFF 
GO
ALTER DATABASE [Manager] SET CURSOR_DEFAULT  GLOBAL 
GO
ALTER DATABASE [Manager] SET CONCAT_NULL_YIELDS_NULL OFF 
GO
ALTER DATABASE [Manager] SET NUMERIC_ROUNDABORT OFF 
GO
ALTER DATABASE [Manager] SET QUOTED_IDENTIFIER OFF 
GO
ALTER DATABASE [Manager] SET RECURSIVE_TRIGGERS OFF 
GO
ALTER DATABASE [Manager] SET  DISABLE_BROKER 
GO
ALTER DATABASE [Manager] SET AUTO_UPDATE_STATISTICS_ASYNC OFF 
GO
ALTER DATABASE [Manager] SET DATE_CORRELATION_OPTIMIZATION OFF 
GO
ALTER DATABASE [Manager] SET TRUSTWORTHY OFF 
GO
ALTER DATABASE [Manager] SET ALLOW_SNAPSHOT_ISOLATION OFF 
GO
ALTER DATABASE [Manager] SET PARAMETERIZATION SIMPLE 
GO
ALTER DATABASE [Manager] SET READ_COMMITTED_SNAPSHOT OFF 
GO
ALTER DATABASE [Manager] SET HONOR_BROKER_PRIORITY OFF 
GO
ALTER DATABASE [Manager] SET RECOVERY SIMPLE 
GO
ALTER DATABASE [Manager] SET  MULTI_USER 
GO
ALTER DATABASE [Manager] SET PAGE_VERIFY CHECKSUM  
GO
ALTER DATABASE [Manager] SET DB_CHAINING OFF 
GO
USE [Manager]
GO
/****** Object:  Table [dbo].[Move]    Script Date: 2019/5/27 1:20:03 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[Move]([ID_Num] [char](18) NOT NULL,[Address] [nvarchar](100) NOT NULL,[Date] [datetime] NOT NULL
) ON [PRIMARY]
GO
/****** Object:  Table [dbo].[People]    Script Date: 2019/5/27 1:20:03 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[People]([Name] [nvarchar](10) NOT NULL,[Sex] [nchar](2) NOT NULL,[ID_Num] [char](18) NOT NULL,[Address] [nvarchar](100) NOT NULL,[Tel_No] [numeric](12, 0) NOT NULL,[Date] [datetime] NOT NULL,CONSTRAINT [PK_People] PRIMARY KEY CLUSTERED 
([ID_Num] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
/****** Object:  Table [dbo].[Rename]    Script Date: 2019/5/27 1:20:03 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[Rename]([ID_Num] [char](18) NOT NULL,[Old_Name] [char](10) NOT NULL,[Date] [datetime] NOT NULL
) ON [PRIMARY]
GO
INSERT [dbo].[Move] ([ID_Num], [Address], [Date]) VALUES (N'440101200101010101', N'北京市', CAST(N'2019-05-27T00:14:47.990' AS DateTime))
INSERT [dbo].[Move] ([ID_Num], [Address], [Date]) VALUES (N'440111201111111111', N'上海', CAST(N'2019-05-27T00:34:22.500' AS DateTime))
INSERT [dbo].[Move] ([ID_Num], [Address], [Date]) VALUES (N'440111201111111111', N'杭州', CAST(N'2019-05-27T00:35:12.933' AS DateTime))
INSERT [dbo].[Move] ([ID_Num], [Address], [Date]) VALUES (N'440111201111111111', N'杭州', CAST(N'2019-05-27T00:35:44.370' AS DateTime))
INSERT [dbo].[People] ([Name], [Sex], [ID_Num], [Address], [Tel_No], [Date]) VALUES (N'John', N'男 ', N'440101200101010101', N'北京市', CAST(13333333333 AS Numeric(12, 0)), CAST(N'2019-05-27T00:23:28.633' AS DateTime))
INSERT [dbo].[People] ([Name], [Sex], [ID_Num], [Address], [Tel_No], [Date]) VALUES (N'Ben', N'男 ', N'440111201111111111', N'杭州', CAST(13333333333 AS Numeric(12, 0)), CAST(N'2019-05-27T00:35:44.367' AS DateTime))
INSERT [dbo].[Rename] ([ID_Num], [Old_Name], [Date]) VALUES (N'440101200101010101', N'Alice     ', CAST(N'2019-05-27T00:08:35.767' AS DateTime))
INSERT [dbo].[Rename] ([ID_Num], [Old_Name], [Date]) VALUES (N'440101200101010101', N'Alice     ', CAST(N'2019-05-27T00:14:47.987' AS DateTime))
INSERT [dbo].[Rename] ([ID_Num], [Old_Name], [Date]) VALUES (N'440101200101010101', N'Cindarela ', CAST(N'2019-05-27T00:15:07.933' AS DateTime))
INSERT [dbo].[Rename] ([ID_Num], [Old_Name], [Date]) VALUES (N'440101200101010101', N'Alice     ', CAST(N'2019-05-27T00:18:24.390' AS DateTime))
INSERT [dbo].[Rename] ([ID_Num], [Old_Name], [Date]) VALUES (N'440101200101010101', N'Bob       ', CAST(N'2019-05-27T00:19:22.057' AS DateTime))
INSERT [dbo].[Rename] ([ID_Num], [Old_Name], [Date]) VALUES (N'440101200101010101', N'Ben       ', CAST(N'2019-05-27T00:20:54.577' AS DateTime))
INSERT [dbo].[Rename] ([ID_Num], [Old_Name], [Date]) VALUES (N'440101200101010101', N'John      ', CAST(N'2019-05-27T00:23:28.633' AS DateTime))
INSERT [dbo].[Rename] ([ID_Num], [Old_Name], [Date]) VALUES (N'440111201111111111', N'Alice     ', CAST(N'2019-05-27T00:34:22.500' AS DateTime))
INSERT [dbo].[Rename] ([ID_Num], [Old_Name], [Date]) VALUES (N'440111201111111111', N'Ben       ', CAST(N'2019-05-27T00:35:12.930' AS DateTime))
INSERT [dbo].[Rename] ([ID_Num], [Old_Name], [Date]) VALUES (N'440111201111111111', N'Ben       ', CAST(N'2019-05-27T00:35:44.370' AS DateTime))
SET ANSI_PADDING ON
GO
/****** Object:  Index [IX_Move]    Script Date: 2019/5/27 1:20:03 ******/
CREATE NONCLUSTERED INDEX [IX_Move] ON [dbo].[Move]
([ID_Num] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
GO
/****** Object:  Index [IX_Move_1]    Script Date: 2019/5/27 1:20:03 ******/
CREATE UNIQUE NONCLUSTERED INDEX [IX_Move_1] ON [dbo].[Move]
([Date] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
GO
SET ANSI_PADDING ON
GO
/****** Object:  Index [IX_Rename]    Script Date: 2019/5/27 1:20:03 ******/
CREATE NONCLUSTERED INDEX [IX_Rename] ON [dbo].[Rename]
([ID_Num] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
GO
/****** Object:  Index [IX_Rename_1]    Script Date: 2019/5/27 1:20:03 ******/
CREATE UNIQUE NONCLUSTERED INDEX [IX_Rename_1] ON [dbo].[Rename]
([Date] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = ON, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
GO
ALTER TABLE [dbo].[Move]  WITH CHECK ADD  CONSTRAINT [FK_Move_People] FOREIGN KEY([ID_Num])
REFERENCES [dbo].[People] ([ID_Num])
GO
ALTER TABLE [dbo].[Move] CHECK CONSTRAINT [FK_Move_People]
GO
ALTER TABLE [dbo].[People]  WITH CHECK ADD  CONSTRAINT [FK_People_People] FOREIGN KEY([ID_Num])
REFERENCES [dbo].[People] ([ID_Num])
GO
ALTER TABLE [dbo].[People] CHECK CONSTRAINT [FK_People_People]
GO
ALTER TABLE [dbo].[Rename]  WITH CHECK ADD  CONSTRAINT [FK_Rename_People] FOREIGN KEY([ID_Num])
REFERENCES [dbo].[People] ([ID_Num])
GO
ALTER TABLE [dbo].[Rename] CHECK CONSTRAINT [FK_Rename_People]
GO
ALTER TABLE [dbo].[People]  WITH CHECK ADD  CONSTRAINT [CK_ID_Limit] CHECK  ((len([ID_Num])=(15) OR len([ID_Num])=(18)))
GO
ALTER TABLE [dbo].[People] CHECK CONSTRAINT [CK_ID_Limit]
GO
ALTER TABLE [dbo].[People]  WITH CHECK ADD  CONSTRAINT [CK_Sex_Limit] CHECK  (([Sex]='男' OR [Sex]='女'))
GO
ALTER TABLE [dbo].[People] CHECK CONSTRAINT [CK_Sex_Limit]
GO
ALTER TABLE [dbo].[People]  WITH CHECK ADD  CONSTRAINT [CK_Tel_Limit] CHECK  ((len([Tel_No])>=(10) AND len([Tel_No])<=(12)))
GO
ALTER TABLE [dbo].[People] CHECK CONSTRAINT [CK_Tel_Limit]
GO
EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'身份证绑定' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'Move', @level2type=N'CONSTRAINT',@level2name=N'FK_Move_People'
GO
EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'姓名' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'People', @level2type=N'COLUMN',@level2name=N'Name'
GO
EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'性别' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'People', @level2type=N'COLUMN',@level2name=N'Sex'
GO
EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'身份证号' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'People', @level2type=N'COLUMN',@level2name=N'ID_Num'
GO
EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'家庭住址' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'People', @level2type=N'COLUMN',@level2name=N'Address'
GO
EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'联系方式' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'People', @level2type=N'COLUMN',@level2name=N'Tel_No'
GO
EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'户籍变更时间' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'People', @level2type=N'COLUMN',@level2name=N'Date'
GO
EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'限制身份证长度' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'People', @level2type=N'CONSTRAINT',@level2name=N'CK_ID_Limit'
GO
EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'限制性别取值' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'People', @level2type=N'CONSTRAINT',@level2name=N'CK_Sex_Limit'
GO
EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'限制号码长度' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'People', @level2type=N'CONSTRAINT',@level2name=N'CK_Tel_Limit'
GO
EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'身份证号关联' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'Rename', @level2type=N'CONSTRAINT',@level2name=N'FK_Rename_People'
GO
USE [master]
GO
ALTER DATABASE [Manager] SET  READ_WRITE 
GO

3.系统实现

3.1登录业务

object Form1: TForm1Left = 0Top = 0BorderStyle = bsDialogCaption = #30331#24405#35748#35777ClientHeight = 329ClientWidth = 457Color = clBtnFaceFont.Charset = DEFAULT_CHARSETFont.Color = clWindowTextFont.Height = -11Font.Name = 'Tahoma'Font.Style = []OldCreateOrder = FalsePosition = poScreenCenterVisible = TruePixelsPerInch = 96TextHeight = 13object GridPanel1: TGridPanelLeft = 100Top = 135Width = 257Height = 59Align = alClientBevelOuter = bvNoneCaption = 'GridPanel1'ColumnCollection = <itemValue = 29.999999999999990000enditemValue = 70.000000000000010000end>ControlCollection = <itemColumn = 0Control = Label1Row = 0enditemColumn = 1Control = Edit1Row = 0enditemColumn = 0Control = Label2Row = 1enditemColumn = 1Control = Edit2Row = 1end>RowCollection = <itemValue = 49.999999999999990000enditemValue = 50.000000000000020000end>ShowCaption = FalseTabOrder = 0ExplicitWidth = 254object Label1: TLabelLeft = 0Top = 0Width = 77Height = 29Align = alClientCaption = #29992#25143#21517#65306Font.Charset = DEFAULT_CHARSETFont.Color = clWindowTextFont.Height = -19Font.Name = #23435#20307Font.Style = []ParentFont = FalseExplicitLeft = 51ExplicitTop = 1ExplicitWidth = 76ExplicitHeight = 19endobject Edit1: TEditLeft = 77Top = 0Width = 180Height = 29Align = alClientFont.Charset = DEFAULT_CHARSETFont.Color = clWindowTextFont.Height = -19Font.Name = #23435#20307Font.Style = []ParentFont = FalseTabOrder = 0ExplicitLeft = 127ExplicitTop = 1ExplicitWidth = 126ExplicitHeight = 27endobject Label2: TLabelLeft = 0Top = 29Width = 77Height = 30Align = alClientCaption = #23494#30721#65306Font.Charset = DEFAULT_CHARSETFont.Color = clWindowTextFont.Height = -19Font.Name = #23435#20307Font.Style = []ParentFont = FalseExplicitLeft = 70ExplicitWidth = 57ExplicitHeight = 19endobject Edit2: TEditLeft = 77Top = 29Width = 180Height = 30Align = alClientFont.Charset = DEFAULT_CHARSETFont.Color = clWindowTextFont.Height = -19Font.Name = #23435#20307Font.Style = []ParentFont = FalsePasswordChar = '*'TabOrder = 1ExplicitLeft = 127ExplicitWidth = 126ExplicitHeight = 27endendobject Panel1: TPanelLeft = 0Top = 0Width = 457Height = 135Align = alTopBevelOuter = bvNoneCaption = 'Panel1'ShowCaption = FalseTabOrder = 1ExplicitWidth = 454object Label3: TLabelLeft = 0Top = 50Width = 457Height = 35Align = alClientAlignment = taCenterCaption = #36890#29992#25143#31821#31649#29702#31995#32479Font.Charset = DEFAULT_CHARSETFont.Color = clWindowTextFont.Height = -27Font.Name = #38582#20070Font.Style = []ParentFont = FalseExplicitWidth = 224ExplicitHeight = 27endobject Panel5: TPanelLeft = 0Top = 0Width = 457Height = 50Align = alTopBevelOuter = bvNoneCaption = 'Panel5'ShowCaption = FalseTabOrder = 0ExplicitWidth = 454endobject Panel7: TPanelLeft = 0Top = 85Width = 457Height = 50Align = alBottomBevelOuter = bvNoneCaption = 'Panel7'ShowCaption = FalseTabOrder = 1ExplicitTop = 91endendobject Panel2: TPanelLeft = 0Top = 194Width = 457Height = 135Align = alBottomBevelEdges = []BevelOuter = bvNoneCaption = 'Panel2'ShowCaption = FalseTabOrder = 2ExplicitTop = 199ExplicitWidth = 454object Panel6: TPanelLeft = 0Top = 0Width = 150Height = 25Align = alLeftBevelOuter = bvNoneCaption = 'Panel6'ShowCaption = FalseTabOrder = 0ExplicitHeight = 40endobject Panel8: TPanelLeft = 307Top = 0Width = 150Height = 25Align = alRightBevelOuter = bvNoneCaption = 'Panel8'ShowCaption = FalseTabOrder = 1ExplicitLeft = 322ExplicitHeight = 40endobject Panel9: TPanelLeft = 0Top = 25Width = 457Height = 110Align = alBottomBevelOuter = bvNoneCaption = 'Panel9'ShowCaption = FalseTabOrder = 2ExplicitTop = 30endobject GridPanel2: TGridPanelLeft = 150Top = 0Width = 157Height = 25Align = alClientBevelOuter = bvNoneCaption = 'GridPanel2'ColumnCollection = <itemValue = 50.000000000000000000enditemValue = 50.000000000000000000end>ControlCollection = <itemColumn = 0Control = Button1Row = 0enditemColumn = 1Control = Button2Row = 0end>RowCollection = <itemValue = 100.000000000000000000end>ShowCaption = FalseTabOrder = 3ExplicitLeft = 136ExplicitTop = 48ExplicitWidth = 185ExplicitHeight = 41DesignSize = (15725)object Button1: TButtonLeft = 0Top = 0Width = 78Height = 25Align = alClientCaption = #30331#24405Font.Charset = DEFAULT_CHARSETFont.Color = clWindowTextFont.Height = -19Font.Name = #23435#20307Font.Style = []ParentFont = FalseTabOrder = 0OnClick = Button1ClickExplicitLeft = 40ExplicitWidth = 75endobject Button2: TButtonLeft = 80Top = 0Width = 75Height = 25Anchors = []Caption = #21462#28040Font.Charset = DEFAULT_CHARSETFont.Color = clWindowTextFont.Height = -19Font.Name = #23435#20307Font.Style = []ParentFont = FalseTabOrder = 1OnClick = Button2ClickExplicitLeft = 40endendendobject Panel3: TPanelLeft = 0Top = 135Width = 100Height = 59Align = alLeftBevelEdges = []BevelOuter = bvNoneCaption = 'Panel3'ShowCaption = FalseTabOrder = 3endobject Panel4: TPanelLeft = 357Top = 135Width = 100Height = 59Align = alRightBevelOuter = bvNoneCaption = 'Panel4'ShowCaption = FalseTabOrder = 4ExplicitLeft = 354endobject ADOQuery1: TADOQueryConnection = DataModule1.ADOConnection1Parameters = <>Left = 24Top = 264end
end
unit Login;interfaceusesWinapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, Vcl.ExtCtrls, Data.DB,Data.Win.ADODB;typeTForm1 = class(TForm)GridPanel1: TGridPanel;Label1: TLabel;Panel1: TPanel;Panel2: TPanel;Edit1: TEdit;Panel3: TPanel;Panel4: TPanel;Label2: TLabel;Edit2: TEdit;Panel5: TPanel;Panel7: TPanel;Label3: TLabel;Panel6: TPanel;Panel8: TPanel;Panel9: TPanel;GridPanel2: TGridPanel;Button1: TButton;Button2: TButton;ADOQuery1: TADOQuery;procedure Button2Click(Sender: TObject);procedure Button1Click(Sender: TObject);private{ Private declarations }public{ Public declarations }end;varForm1: TForm1;implementationuses Main, Connect;{$R *.dfm}procedure TForm1.Button1Click(Sender: TObject);
begin// 判断用户名或密码为空if (Edit1.Text = '') thenbeginshowMessage('错误:用户名不能为空!');Edit1.SetFocus;endelsebeginADOQuery1.Close;ADOQuery1.SQL.Clear;// 尝试登录ADOQuery1.SQL.Add('SELECT ''TRUE'' AS [Authorized], [Alias], [Username] FROM [Controller] WHERE [Username] = '+ '''' + Edit1.Text + ''' AND [Password] = HASHBYTES(''MD5'', ''' +Edit2.Text + ''')');ADOQuery1.Open;// 如果登陆成功if (ADOQuery1.FieldByName('Authorized').AsString = 'TRUE') thenbegin// 用户是否有别名?if (ADOQuery1.FieldByName('Alias').AsString <> '') thenbeginForm2.Label1.Caption := '欢迎您,' + trim(ADOQuery1.FieldByName('Alias').AsString)+ '!';end// 否则,显示用户名elsebeginForm2.Label1.Caption := '欢迎您,' + trim(ADOQuery1.FieldByName('Username').AsString)+ '!';end;Form1.Hide;Form2.Show;endelsebeginshowMessage('错误:用户名或密码错误!');end;end;
end;procedure TForm1.Button2Click(Sender: TObject);
beginEdit1.Text := '';Edit2.Text := '';
end;end.

3.2主启动类

unit Main;interfaceusesWinapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.Menus, Vcl.StdCtrls,Vcl.Imaging.jpeg, Vcl.ExtCtrls;typeTForm2 = class(TForm)MainMenu1: TMainMenu;F1: TMenuItem;Q1: TMenuItem;M1: TMenuItem;A1: TMenuItem;G1: TMenuItem;N1: TMenuItem;M2: TMenuItem;Image1: TImage;Label1: TLabel;N2: TMenuItem;N3: TMenuItem;B1: TMenuItem;procedure FormCreate(Sender: TObject);procedure Q1Click(Sender: TObject);procedure FormClose(Sender: TObject; var Action: TCloseAction);procedure G1Click(Sender: TObject);procedure A1Click(Sender: TObject);procedure N1Click(Sender: TObject);procedure M2Click(Sender: TObject);procedure N3Click(Sender: TObject);procedure N5Click(Sender: TObject);procedure B1Click(Sender: TObject);private{ Private declarations }public{ Public declarations }end;varForm2: TForm2;implementationuses Login, Edit, Rename, Move, About, Backup, Connect;{$R *.dfm}procedure TForm2.A1Click(Sender: TObject);
beginForm4.Show;
end;procedure TForm2.B1Click(Sender: TObject);
beginForm7.Show;Form7.FileListBox1.Directory := 'D:\Program_Files_(x64)\Git\Repos\Delphi_Design\bak';Form7.FileListBox1.Update;
end;procedure TForm2.FormClose(Sender: TObject; var Action: TCloseAction);
beginForm1.Close;
end;procedure TForm2.FormCreate(Sender: TObject);
beginForm2.Visible := False;
end;procedure TForm2.G1Click(Sender: TObject);
beginForm3.Show;
end;procedure TForm2.M2Click(Sender: TObject);
beginForm6.Show;Form6.ADOTable1.Close;Form6.ADOTable1.Open;
end;procedure TForm2.N1Click(Sender: TObject);
beginForm5.Show;Form5.ADOTable1.Close;Form5.ADOTable1.Open;
end;procedure TForm2.N3Click(Sender: TObject);
beginForm2.Hide;Label1.Caption := '';Form1.Show;Form1.SetFocus;
end;procedure TForm2.N5Click(Sender: TObject);
beginForm7.Show;DataModule1.ADOConnection1.Close;Form7.FileListBox1.Directory := 'D:\Program_Files_(x64)\Git\Repos\Delphi_Design\bak';Form7.FileListBox1.Update;
end;procedure TForm2.Q1Click(Sender: TObject);
beginForm1.Close;
end;end.

3.3部分代码

unit Rename;interfaceusesWinapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Data.DB, Data.Win.ADODB, Vcl.Grids,Vcl.DBGrids;typeTForm5 = class(TForm)ADOTable1: TADOTable;DBGrid1: TDBGrid;DataSource1: TDataSource;procedure FormCreate(Sender: TObject);private{ Private declarations }public{ Public declarations }end;varForm5: TForm5;implementationuses Connect;{$R *.dfm}procedure TForm5.FormCreate(Sender: TObject);
beginADOTable1.Active := True;
end;end.

4. 系统设计与实现

5. 结论与尚存在的问题

  以下是本项目仍然存在的问题:

  1. 用户查询功能存在缺陷,无法在DBGrid中显示ADOQuery的查询结果;
  2. 数据库无法从*.bak文件中恢复。

6. 个人总结

  项目由可视化集成开发环境(快速应用程序开发工具)制作而成,对比于C/C++ MFC/QT、Java Swing/SWT、Python TKinter,Delphi具有方便、快捷的优势,在界面布局方面节省了大量的时间。但在另一方面,仍有个别功能只能通过编写代码实现,大量由Delphi自动生成的Object-Pascal代码使得项目维护难度提高。

  本次开发工作存在较大的失误,项目分工错误让我基本承担所有工作。此外项目的开工时间极度延后,导致工期不足,甚至无法完成基本功能。

  通过此次开发的教训,在后续课程设计乃至今后的生产环境开发都要提前估计工作量与工期,合理安排开发进度,杜绝临时赶工的行为。

7. 项目用法

  由于项目需要连接数据库程序,而不同设备的数据库配置可能存在差异,有别于直接连接到库文件的Microsoft Office Access、SQLite。由我使用Windows-32bit Release模式编译发布的可执行程序并不通用,所以请根据以下步骤编译运行:

  1. 项目提供了Citizens_log.ldf数据库日志文件和Citizens.mdf数据库主文件,这2个文件仅支持Microsoft SQL Server 2017及以上版本数据库的附加。对于之前的版本,项目额外提供了script.sql以实现数据库导入工作,此脚本最低兼容SQL Server 2008。脚本仅涉及架构,没有任何数据。如有测试需要,请在运行此脚本生成数据库后自行添加备用数据。
  2. 使用Delphi打开代码库中的Manager.dproj,定位至Connect.pas文件的窗体设计视图。
  3. 修改ADOConnection1控件的ConnectionString属性,点击Build选项,在数据库连接向导切换为您设备的配置(包括驱动程序、服务器名、登陆账号及密码、数据库名)。
  4. 定位至Backup.pas文件的窗体设计视图,同样地修改ADOQuery1控件的ConnectionString属性。
  5. 定位至Edit.pasMove.pasRename.pas,重新激活各个页面的ADOTable1,确认DBGrid能够正常显示数据库的内容。
  6. 以上,即可正常编译运行。

相关文章:

Delphi+SQL Server实现的(GUI)户籍管理系统

1.项目简介 本项目是一个户籍管理系统&#xff0c;用于记录住户身份信息&#xff0c;提供新户登记&#xff08;增加&#xff09;、户籍变更&#xff08;修改&#xff09;、户籍注销&#xff08;删除&#xff09;、户籍查询、曾用名查询、迁户记录查询以及创建备份、删除备份共8…...

Ungoogled Chromium127 编译指南 MacOS篇(七)- 安装依赖包

1. 引言 在获取了 Ungoogled Chromium 的源代码之后&#xff0c;我们需要安装所有必要的依赖包。这些依赖包对于成功编译 Chromium 至关重要。本文将指导您完成所有必需软件包的安装。 2. 依赖包安装 2.1 使用 Homebrew 安装基础依赖 # 安装 Ninja 构建系统 brew install n…...

开放词汇检测新晋SOTA:地瓜机器人开源DOSOD实时检测算法

在计算机视觉领域&#xff0c;目标检测是一项关键技术&#xff0c;旨在识别图像或视频中感兴趣物体的位置与类别。传统的闭集检测长期占据主导地位&#xff0c;但近年来&#xff0c;开放词汇检测&#xff08;Open-Vocabulary Object Detection-OVOD 或者 Open-Set Object Detec…...

json dump避免转义字符反斜杠

笔者在将json序列化到文件时&#xff0c;发现内容包含了反斜杠&#xff1a; [{"video": "MSRVTT-QA\/video_features\/7010.mp4","id": 170859},... ]解决办法是使用ensure_asciiFalse&#xff1a; json.dump(result_items, f, ensure_asciiFa…...

PL/SQL语言的正则表达式

PL/SQL语言的正则表达式详解 在现代软件开发中&#xff0c;数据处理和文本处理是至关重要的环节之一。尤其是在数据库操作中&#xff0c;使用正则表达式来处理字符串数据能大幅提高效率和灵活性。PL/SQL&#xff08;Procedural Language/SQL&#xff09;是Oracle数据库的过程性…...

C/C++中头文件time

在C/C中&#xff0c;<ctime>头文件提供了处理时间和日期的函数&#xff0c;这些函数允许你获取当前时间、计算时间差、格式化时间字符串等。以下是一些<ctime>头文件中常用函数的详细介绍和使用示例&#xff1a; time()&#xff1a;获取当前时间。 time_t currentT…...

【.NET】Kafka消息队列介绍,使用Confluent.Kafka集成Kafka消息队列

一、Kafka介绍 kafka是一种高吞吐量、分布式、可扩展的消息中间件系统&#xff0c;最初由LinkedIn公司开发。随着不断的发展&#xff0c;在最新的版本中它定义为分布式的流处理平台&#xff0c;现在在大数据应用中也是十分广泛。 它可以处理大量的实时数据流&#xff0c;被广…...

图像处理|膨胀操作

在图像处理领域&#xff0c;形态学操作是一种基于图像形状的操作&#xff0c;用于分析和处理图像中对象的几何结构。**膨胀操作&#xff08;Dilation&#xff09;**是形态学操作的一种&#xff0c;它能够扩展图像中白色区域&#xff08;前景&#xff09;或减少黑色区域&#xf…...

kali安装

2024年最新kali Linux安装教程&#xff08;超详细&#xff0c;图文并茂&#xff09;_kali安装-CSDN博客 【2024年最新版】Kali安装详细教程-CSDN博客 Kali Linux 安装过程 超详细&#xff08;图文并茂&#xff0c;通用版&#xff09;-腾讯云开发者社区-腾讯云...

【Python3】异步操作 redis

aioredis 在高版本已经不支持了&#xff0c; 不要用 代码示例 redis 连接池异步操作redis以及接口 import asyncio from sanic import Sanic from sanic.response import json import redis.asyncio as redis from redis.asyncio import ConnectionPool# 创建 Sanic 应用 app…...

C++ vtordisp的应用场景

文章目录 问题代码1. 基本概念回顾2. 应用场景虚继承与虚函数并存的类层次结构 3. 编译器相关考虑 问题代码 #include <iostream> using namespace std;class base { public:base() {}virtual void show() { cout << "base:: show"<<endl; } priv…...

花生好坏缺陷识别数据集,7262张图片,支持yolo,coco json,pasical voc xml格式的标注,识别准确率在95.7%

花生好坏缺陷识别数据集,7262张图片&#xff0c;支持yolo&#xff0c;coco json&#xff0c;pasical voc xml格式的标注&#xff0c;识别准确率在95.7% 数据集分割 训练组87&#xff05; 6353图片 有效集8% 606图片 测试集4% 303图片 预处理 自动定…...

递归构建树菜单节点

一、获取所有分类上下级信息 /*** 获取所有分类上下级信息*/ public R<List<ResearchTypeTreeVO>> getTypeTreeList(){//获取所有分类数据List<ResearchTypeVO> list ibResearchTypeService.getSuperList(null);List<ResearchTypeTreeVO> researchTy…...

物联网无线芯片模组方案,设备智能化交互升级,ESP32-C3控制应用

无线交互技术的核心在于实现设备之间的无缝连接和数据传输。在智能家居系统中&#xff0c;各种智能设备如智能灯泡、智能插座、智能门锁等&#xff0c;都通过无线网络相互连接&#xff0c;形成一个互联互通的生态。 用户可以通过语音助手、手机APP或其他智能终端&#xff0c;远…...

【Unity万人同屏插件】使用手册 保姆级教程 GPU动画 Jobs多线程渲染

【万人同屏插件】 基于Dots技术&#xff0c;高性能实现3D、2D Spine渲染、海量单位锁敌/碰撞检测。同时通过自定义BRG渲染器绕过对Entities包的依赖&#xff0c;也就是不用写ECS代码即可拥有Entities Graphics的高性能渲染&#xff0c;使用传统开发方式BRG接管Renderer组件。 …...

结合前端的响应式开发深入理解设备像素比

前端响应式开发中设备像素比是一个绕不开的概念&#xff0c;彻底理解这个概念&#xff0c;我们首先要梳理清楚屏幕设备的物理像素&#xff08;Physical Pixel&#xff09;、逻辑像素&#xff08;Logical Pixel&#xff09;以及css像素&#xff08;px&#xff09;之前的区别和联…...

QT c++ 按钮 样式 设置按下和松开的背景颜色

上一篇文章&#xff0c;需要自定义类&#xff0c;本文使用样式设置按下和松开的背景颜色。 1.头文件 #ifndef WIDGET_H #define WIDGET_H #include <QWidget> //#include "CustomButton.h" #include <QVBoxLayout> //#include <QLinearGradient>…...

解决Docker冲突问题

错误&#xff1a;docker-ce-cli conflicts with 2:docker-1.13.1-210.git7d71120.el7.centos.x86_64 错误&#xff1a;docker-ce conflicts with 2:docker-1.13.1-210.git7d71120.el7.centos.x86_64 您可以尝试添加 --skip-broken 选项来解决该问题 您可以尝试执行&#xff1a;…...

C++之闭散列哈希表

目录 unordered_set和unordered_map 哈希概念 哈希表基本结构 哈希冲突 线性探测​编辑 二次探测 前几期我们学习了红黑树和红黑树的模拟实现&#xff0c;最终使用红黑树封装了map和set。本期开始我们将学习下一个重要的知识点---哈希表&#xff0c;最终使用哈希表封装u…...

微信小程序map组件所有markers展示在视野范围内

注意&#xff1a;使用include-points属性不生效&#xff0c;要通过createMapContext实现 <template><view class"map-box"><map id"map" class"map" :markers"markers" :enable-traffic"true" :enable-poi&…...

Ubuntu平台虚拟机软件学习笔记

Ubuntu平台上常见虚拟机软件 VirtualBox [Download]KVM/QEMU 1. VirtualBox 1.1 查看安装版本 VBoxManage -V2. KVM/QEMU KVM: Kernel-based Virtual Machine QEMU: Quick EMUlator 通义千问&#xff1a; virt-manager 既不是QEMU也不是KVM&#xff0c;而是用于管理和创建…...

EasyExcel数据的导入导出

1.easyExcel简介 EasyExcel是一个基于Java的、快速、简洁、解决大文件内存溢出的Excel处理工具。 他能让你在不用考虑性能、内存的等因素的情况下&#xff0c;快速完成Excel的读、写等功能。 EasyExcel 的主要特点如下&#xff1a; 1、高性能&#xff1a;EasyExcel 采用了异…...

CSS Grid 布局全攻略:从基础到进阶

文章目录 一.Grid 是什么二.示例代码1. 基础使用 - 固定宽高2.百分百宽高3.重复设置-repeat4.单位-fr5.自适应6.间距定义其他 一.Grid 是什么 CSS 中 Grid 是一种强大的布局方式&#xff0c;它可以同时处理行和列 Grid 和Flex有一些类似&#xff0c;都是由父元素包裹子元素使用…...

C语言的语法

C语言的语法与应用探讨 C语言作为一种高效的程序设计语言&#xff0c;自1970年代问世以来&#xff0c;一直在科学计算、系统编程、嵌入式系统等领域中扮演着重要角色。本文将深入探讨C语言的基本语法、数据结构、控制结构以及其在实际应用中的重要性。 一、C语言基础 1.1 数…...

Go中的context 包使用详解

context 包在 Go 中非常重要&#xff0c;特别是在处理并发和超时的场景下&#xff0c;它能让你在多个 goroutine 之间传递取消信号、超时控制或其他控制信息。context 是 Go 并发模型中的一个重要工具&#xff0c;尤其适用于 HTTP 请求、数据库操作、分布式系统等场景。 1. 基…...

通俗易懂之线性回归时序预测PyTorch实践

线性回归&#xff08;Linear Regression&#xff09;是机器学习中最基本且广泛应用的算法之一。它不仅作为入门学习的经典案例&#xff0c;也是许多复杂模型的基础。本文将全面介绍线性回归的原理、应用&#xff0c;并通过一段PyTorch代码进行实践演示&#xff0c;帮助读者深入…...

机器学习模型评估指标

模型的评估指标是衡量一个模型应用于对应任务的契合程度&#xff0c;常见的指标有&#xff1a; 准确率&#xff08;Accuracy&#xff09;: 正确预测的样本数占总样本数的比例。适用于类别分布均衡的数据集。 精确率&#xff08;Precision&#xff09;: 在所有被预测为正类的样…...

嵌入式软件C语言面试常见问题及答案解析(三)

嵌入式软件C语言面试常见问题及答案解析(三) 上一篇已经足够长了,再长也就有点不礼貌了,所以在这儿继续来总结分享那个面试中遇到的题目,文中的问题和提供的答案或者代码均代表个人的理解,如有不合理或者错误的地方,欢迎大家批评指正。 本文中题目列表 1. 编码实现子串定…...

LeetCode:165. 比较版本号(双指针 Java)

目录 165. 比较版本号 题目描述&#xff1a; 实现代码与解析&#xff1a; 双指针 原理思路&#xff1a; 165. 比较版本号 题目描述&#xff1a; 给你两个 版本号字符串 version1 和 version2 &#xff0c;请你比较它们。版本号由被点 . 分开的修订号组成。修订号的值 是它…...

Golang中遇到“note module requires Go xxx”后的解决方案,不升级Go版本!

前几天&#xff0c;需要对一个两年前写的项目添加点儿新功能&#xff0c;需要用到一个 Http 客户端包&#xff0c;于是就用了 https://github.com/go-resty/resty 这个插件包。 我先是直接在项目根目录下执行了以下包的安装命令&#xff1a; go get -v github.com/go-resty/res…...

ubuntu编译ijkplayer,支持rmvb以及mkv

1. 准备环境 sudo apt-get update apt install gcc yasm cmake python p7zip-full vim pkg-config autoconf automake build-essential dos2unix mercurial cmake-curse-gui -y apt-get -y --force-yes install libass-dev libtheora-dev libtool libva-dev libvdpau-dev libv…...

mysql之sql的优化方案(重点)

1、全字段匹配是最棒的 假如一个Staffs 这个表&#xff0c;将 name,age ,pos 组合成了一个联合索引&#xff0c;在where条件下&#xff0c;能够使用到的索引越多越好。 EXPLAIN SELECT * FROM staffs WHERE NAME July; EXPLAIN SELECT * FROM staffs WHERE NAME July AND age…...

使用Qt实现json数据的格式检测并序列化输出 Qt5.4.0环境

问题&#xff1a; 使用 Qt 实现 JSON 数据的格式检测&#xff0c;并输出各个键值 代码&#xff1a; widget.h #include <QWidget> #include <QJsonDocument> /*序列化 反序列化(F1查看帮助文档)*/ #include <QJsonObject> /*利用对象代表了一段json数据*/ …...

Internet协议原理

文章目录 考试说明Chapter 0: 本书介绍Chapter 1: Introduction And Overview 【第1章&#xff1a;引言与概述】Chapter 2: Overview Of Underlying Network Technologies 【第2章&#xff1a;底层网络技术的回顾】Chapter 3: Internetworking Concept And Architectural Model…...

国标GB28181-2022视频平台EasyGBS小知识:局域网ip地址不够用怎么解决?

在局域网中&#xff0c;IP地址不足的问题通常不会在小型网络中出现&#xff0c;但在拥有超过255台设备的大型局域网中&#xff0c;就需要考虑如何解决IP地址不够用的问题了。 在企业局域网中&#xff0c;经常会出现私有IP地址如192.168.1.x到192.168.1.255不够用的情况。由于0…...

CentOS 使用 yum 方式安装 Nginx

CentOS 使用 yum 方式安装 Nginx 文章目录 CentOS 使用 yum 方式安装 Nginx1、Nginx 安装前提条件步骤 1&#xff1a;更新系统软件包步骤 2&#xff1a;查看 Nginx 相关的软件包步骤 3&#xff1a;安装 Nginx步骤 4&#xff1a;启动并启用 Nginx步骤 5&#xff1a;验证 Nginx 是…...

Spring Boot教程之五十一:Spring Boot – CrudRepository 示例

Spring Boot – CrudRepository 示例 Spring Boot 建立在 Spring 之上&#xff0c;包含 Spring 的所有功能。由于其快速的生产就绪环境&#xff0c;使开发人员能够直接专注于逻辑&#xff0c;而不必费力配置和设置&#xff0c;因此如今它正成为开发人员的最爱。Spring Boot 是…...

消息队列:原理、问题与设计全解析

1.如何保证消息的顺序性 保证消息顺序性通常是在分布式系统或网络通信中遇到的一个挑战。以下是几种常见的方法来确保消息的顺序性&#xff1a; 单生产者单消费者模型&#xff1a; 如果系统设计为只有一个生产者和一个消费者&#xff0c;那么保持消息顺序相对简单&#xff0c;…...

成功!QT 5.15.2编译mysql驱动

首选要说明&#xff0c;5.15与6.7编译驱动是完全不同的。搞错了永远编译不出来。 参考 主要是参考安装QT&#xff0c;安装mysql等。 编译成功&#xff01;QT/6.7.2/Creator编译Windows64 MySQL驱动(MSVC版)_mingw编译qt6.7-CSDN博客 复制mysql的include和lib到一个方便的目…...

【玩转全栈】----Django连接MySQL

阅前先赞&#xff0c;养好习惯&#xff01; 目录 1、ORM框架介绍 选择建议 2、安装mysqlclient 3、创建数据库 4、修改settings&#xff0c;连接数据库 5、对数据库进行操作 创建表 删除表 添加数据 删除数据 修改&#xff08;更新&#xff09;数据&#xff1a; 获取数据 1、OR…...

【Spring Boot】Spring AOP 快速上手指南:开启面向切面编程新旅程

前言 &#x1f31f;&#x1f31f;本期讲解关于spring aop的入门介绍~~~ &#x1f308;感兴趣的小伙伴看一看小编主页&#xff1a;GGBondlctrl-CSDN博客 &#x1f525; 你的点赞就是小编不断更新的最大动力 &#x1f386;那么废话不…...

力扣--54.螺旋矩阵

题目 给你一个 m 行 n 列的矩阵 matrix &#xff0c;请按照 顺时针螺旋顺序 &#xff0c;返回矩阵中的所有元素。 提示&#xff1a; m matrix.length n matrix[i].length 1 < m, n < 10 -100 < matrix[i][j] < 100代码 class Solution { public List spiralOr…...

【Uniapp-Vue3】image媒体组件属性

如果我们想要在页面上展示图片就需要使用到image标签。 这部分最重要的是图片的裁剪&#xff0c;图片的裁剪和缩放属性&#xff1a; mode 图片裁剪、缩放的模式 默认值是scaleToFill 我将用两张图片对属性进行演示&#xff0c;一张是pic1.jpg&#xff08;宽更长&#xf…...

Ubuntu上安装Apache Spark

在Ubuntu上安装Apache Spark的步骤如下&#xff1a; 1. 安装Java Spark是用Scala编写的&#xff0c;并且依赖Java。因此&#xff0c;首先需要安装Java。 安装OpenJDK 8&#xff08;或更高版本&#xff09; 执行以下命令安装OpenJDK&#xff1a; sudo apt update sudo apt …...

Nginx入门笔记

Nginx入门笔记 一、Nginx基本概念二、代理1、正向代理2、反向代理 三、准备工作1、CentOS 7安装nginx&#xff08;1&#xff09;. 安装必要的依赖&#xff08;2&#xff09;下载nginx&#xff08;3&#xff09;编译安装&#xff08;4&#xff09;编译并安装 Nginx(5)启动nginx …...

HTML5 滑动效果(Slide In/Out)详解

HTML5 滑动效果&#xff08;Slide In/Out&#xff09;详解 滑动效果&#xff08;Slide In/Out&#xff09;是一种常见的动画效果&#xff0c;使元素从一侧滑入或滑出&#xff0c;增强页面的动态感和用户体验。以下是滑动效果的详细介绍及实现示例。 1. 滑动效果的特点 动态视…...

unity学习8:unity的基础操作 和对应shortcut

目录 1 unity的基础操作的工具&#xff0c;就在scene边上 1.1 对应shortcut快捷键 2 物体的重置/ 坐标归到0附近 3 F&#xff1a;快速找到当前gameobject 4 Q&#xff1a;小手和眼睛&#xff0c;在场景中移动 5 W&#xff1a;十字箭头&#xff0c;移动gameobject 6 …...

计算机网络 (32)用户数据报协议UDP

前言 用户数据报协议&#xff08;UDP&#xff0c;User Datagram Protocol&#xff09;是计算机网络中的一种重要传输层协议&#xff0c;它提供了无连接的、不可靠的、面向报文的通信服务。 一、基本概念 UDP协议位于传输层&#xff0c;介于应用层和网络层之间。它不像TCP那样提…...

java内存区域 - 栈

目录 java内存区域 - 栈1. Java虚拟机栈的组成2. 栈帧中的详细内容2.1 局部变量表2.2 操作数栈2.3 动态链接2.4 方法返回地址2.5 附加信息 3. JVM栈的生命周期4. 示例解析 - 运行时的栈帧分布5. 栈中的异常6.栈配置7.本地方法栈 java内存区域 - 栈 在JDK11中&#xff0c;JVM栈…...

AI大模型-提示工程学习笔记5

卷首语&#xff1a;我所知的是我自己非常无知&#xff0c;所以我要不断学习。 写给AI入行比较晚的小白们&#xff08;比如我自己&#xff09;看的&#xff0c;大神可以直接路过无视了。 零提示是什么 “零提示”&#xff08;Zero-shot&#xff09;是指在没有提供任何特定示例…...