阶段案例—银行管理系统

题目描述

银行管理系统是一个集开户、查询、取款、存款、转账、锁定、解锁、退出等一系列业务于一体的管理系统,随着计算机技术在金融行业的广泛应用,银行企业采用管理系统替代了传统手工记账的方式,这极大地缩短了用户办理基础储蓄业务的时间,提升了银行企业的形象。
假设现有一银行管理系统,该系统的“欢迎登录银行管理系统”界面和“功能菜单”界面分别如图所示

***************************************************
***                                             ***
***                                             ***
***        欢迎登录银行管理系统                   ***
***                                             ***
***                                             ***
***************************************************图:"欢迎登录银行管理系统"界面
**************************************************
***                                            ***
***    1.开户(1)                 2.查询(2)  ***
***    3.取款(3)                 4.存款(4)  ***
***    5.转账(5)                 6.锁定(6)  ***
***    7.解锁(7)                              ***
***                                            ***
***    退出(Q)                                ***
***                                            ***
**************************************************图:"功能菜单"界面

银行管理系统启动后会显示“欢迎登录银行管理系统”界面,并要求工作人员按照提示输入管理员的账户和密码,输入正确的账户和密码后方可进入“功能菜单”界面,否则直接退出银行管理系统。管理员信息输入正确和输入错误的提示信息如图8-7所示。

请输入管理员账户:admin
请输入密码:12345
请输入密码:123
操作成功,请稍后…… 图:输入正确的账号密码
请输入管理员账户:ad
管理员账户输入错误……图:输入错误的账号
请输入管理员账户:admin
输入密码有误……图:输入错误的密码

图示的“功能菜单”界面显示了银行管理系统的全部功能,包括开户、查询、取款、存款、转账、锁定、解锁和退出,每个功能的介绍如下。

  • 开户功能:用户根据提示依次输入姓名、身份证号、手机号、预存金额、密码等信息,输入无误后会获取系统随机生成的一个不重复的由6位数字组成的卡号。
  • 查询功能:用户根据提示输入正确的卡号、密码后,可以查询卡中余额,若连续3次输入错误的密码,则卡号会被锁定。
  • 取款功能:用户根据提示输入正确的卡号、密码后,可以看到系统显示的卡中余额,之后输入取款金额,会看到系统显示取款后的卡中余额。如果用户连续3次输入错误的密码,那么用户的卡号会被锁定;如果用户输入的取款金额大于卡中余额或小于0,那么系统进行是示并返回“功能菜单”界面。
  • 存款功能:用户根据提示输入正确的卡号、密码后,可以看到系统显示的卡中余额,后输入存款金额,会看到系统显示取款后的卡中余额。如果用户输入的存款金额小于0,那么系统进行提示并返回“功能菜单”界面。
  • 转账功能:用户根据提示分别输入转出卡号和转入卡号,之后输入转账金额,并再大确认是否执行转账功能,确定执行转账功能后,转出卡与转入卡做相应金额计算;取消转账功能后,回退到之前的操作。如果用户连续3次输入错误的密码,那么用户的卡号会被锁定。
  • 锁定功能:用户根据提示输入卡号、密码后,会看到系统显示的锁定成功的信息。3定的卡号不能进行查询、取款、存款、转账等操作。
  • 解锁功能:用户根据提示输入卡号、密码后,会看到系统显示的解锁成功的信息。锁的卡号可以重新进行查询、取款、存款、转账等操作。
  • 退出功能:工作人员根据提示输入管理员的账户和密码,如果输入了错误的账户密码,会返回到系统的“功能菜单”界面;如果输入正确的账户和密码,那么会退出系统。
    本案例要求编写程序,实现一个基于面向对象的、具有上述功能的银行管理系统。

数据库准备

数据库配置

使用SSMS(Microsoft SQL Server Management Studio,版本:v18.9.1。如非此版本请手动创建数据库,因为可能会出现不兼容的情况。)
创建新用户
右键数据库名选择属性

选择安全性并按如图配置

右键登录名创建新用户

选择常规并配置用户名密码

选择安全对象并授权(要求能够查询,修改,添加,删除数据库的元素)

如图配置即可完成

配置完毕之后可以登录数据库试试

数据库文件准备

参考脚本如下

USE [master]
GO
/****** Object:  Database [bank]    Script Date: 2021/5/5 19:12:05 ******/
CREATE DATABASE [bank]CONTAINMENT = NONEON  PRIMARY
( NAME = N'bank', FILENAME = N'D:\Program Files\Microsoft SQL Server\MSSQL15.MSSQLSERVER\MSSQL\DATA\bank.mdf' , SIZE = 8192KB , MAXSIZE = UNLIMITED, FILEGROWTH = 65536KB )LOG ON
( NAME = N'bank_log', FILENAME = N'D:\Program Files\Microsoft SQL Server\MSSQL15.MSSQLSERVER\MSSQL\DATA\bank_log.ldf' , SIZE = 8192KB , MAXSIZE = 2048GB , FILEGROWTH = 65536KB )WITH CATALOG_COLLATION = DATABASE_DEFAULT
GO
ALTER DATABASE [bank] SET COMPATIBILITY_LEVEL = 150
GO
IF (1 = FULLTEXTSERVICEPROPERTY('IsFullTextInstalled'))
begin
EXEC [bank].[dbo].[sp_fulltext_database] @action = 'enable'
end
GO
ALTER DATABASE [bank] SET ANSI_NULL_DEFAULT OFF
GO
ALTER DATABASE [bank] SET ANSI_NULLS OFF
GO
ALTER DATABASE [bank] SET ANSI_PADDING OFF
GO
ALTER DATABASE [bank] SET ANSI_WARNINGS OFF
GO
ALTER DATABASE [bank] SET ARITHABORT OFF
GO
ALTER DATABASE [bank] SET AUTO_CLOSE OFF
GO
ALTER DATABASE [bank] SET AUTO_SHRINK OFF
GO
ALTER DATABASE [bank] SET AUTO_UPDATE_STATISTICS ON
GO
ALTER DATABASE [bank] SET CURSOR_CLOSE_ON_COMMIT OFF
GO
ALTER DATABASE [bank] SET CURSOR_DEFAULT  GLOBAL
GO
ALTER DATABASE [bank] SET CONCAT_NULL_YIELDS_NULL OFF
GO
ALTER DATABASE [bank] SET NUMERIC_ROUNDABORT OFF
GO
ALTER DATABASE [bank] SET QUOTED_IDENTIFIER OFF
GO
ALTER DATABASE [bank] SET RECURSIVE_TRIGGERS OFF
GO
ALTER DATABASE [bank] SET  DISABLE_BROKER
GO
ALTER DATABASE [bank] SET AUTO_UPDATE_STATISTICS_ASYNC OFF
GO
ALTER DATABASE [bank] SET DATE_CORRELATION_OPTIMIZATION OFF
GO
ALTER DATABASE [bank] SET TRUSTWORTHY OFF
GO
ALTER DATABASE [bank] SET ALLOW_SNAPSHOT_ISOLATION OFF
GO
ALTER DATABASE [bank] SET PARAMETERIZATION SIMPLE
GO
ALTER DATABASE [bank] SET READ_COMMITTED_SNAPSHOT OFF
GO
ALTER DATABASE [bank] SET HONOR_BROKER_PRIORITY OFF
GO
ALTER DATABASE [bank] SET RECOVERY FULL
GO
ALTER DATABASE [bank] SET  MULTI_USER
GO
ALTER DATABASE [bank] SET PAGE_VERIFY CHECKSUM
GO
ALTER DATABASE [bank] SET DB_CHAINING OFF
GO
ALTER DATABASE [bank] SET FILESTREAM( NON_TRANSACTED_ACCESS = OFF )
GO
ALTER DATABASE [bank] SET TARGET_RECOVERY_TIME = 60 SECONDS
GO
ALTER DATABASE [bank] SET DELAYED_DURABILITY = DISABLED
GO
ALTER DATABASE [bank] SET ACCELERATED_DATABASE_RECOVERY = OFF
GO
EXEC sys.sp_db_vardecimal_storage_format N'bank', N'ON'
GO
ALTER DATABASE [bank] SET QUERY_STORE = OFF
GO
USE [bank]
GO
/****** Object:  User [root]    Script Date: 2021/5/5 19:12:06 ******/
CREATE USER [root] FOR LOGIN [root] WITH DEFAULT_SCHEMA=[dbo]
GO
/****** Object:  Table [dbo].[account]    Script Date: 2021/5/5 19:12:06 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[account]([name] [varchar](20) NOT NULL,[id] [varchar](50) NOT NULL,[password] [varchar](50) NOT NULL,[balance] [float] NOT NULL,[telephone_number] [varchar](50) NOT NULL,[is_lock] [int] NOT NULL,[id_card] [varchar](50) NOT NULL,CONSTRAINT [PK_account] PRIMARY KEY CLUSTERED
([id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, OPTIMIZE_FOR_SEQUENTIAL_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY]
GO
INSERT [dbo].[account] ([name], [id], [password], [balance], [telephone_number], [is_lock], [id_card]) VALUES (N'Alice', N'178324', N'154737', 0, N'16574358756', 1, N'126467198709394765')
INSERT [dbo].[account] ([name], [id], [password], [balance], [telephone_number], [is_lock], [id_card]) VALUES (N'Dennis', N'189612', N'156464', 2035.1, N'16455631735', 0, N'164536199801017635')
INSERT [dbo].[account] ([name], [id], [password], [balance], [telephone_number], [is_lock], [id_card]) VALUES (N'Jobs', N'234244', N'163736', 0, N'16745461746', 0, N'164564199801017844')
INSERT [dbo].[account] ([name], [id], [password], [balance], [telephone_number], [is_lock], [id_card]) VALUES (N'Lincoln', N'234534', N'144563', 10000, N'15463656473', 0, N'219033198811129034')
INSERT [dbo].[account] ([name], [id], [password], [balance], [telephone_number], [is_lock], [id_card]) VALUES (N'Bidden', N'254546', N'132412', 0, N'16443745627', 1, N'164567199807081535')
INSERT [dbo].[account] ([name], [id], [password], [balance], [telephone_number], [is_lock], [id_card]) VALUES (N'Trump', N'324555', N'154632', 0, N'16735482798', 0, N'183647198902038464')
INSERT [dbo].[account] ([name], [id], [password], [balance], [telephone_number], [is_lock], [id_card]) VALUES (N'Maldives', N'325455', N'123212', 0, N'16744753877', 1, N'145666199802031846')
INSERT [dbo].[account] ([name], [id], [password], [balance], [telephone_number], [is_lock], [id_card]) VALUES (N'Bob', N'329574', N'174465', 0, N'16755748375', 0, N'174657199802031324')
INSERT [dbo].[account] ([name], [id], [password], [balance], [telephone_number], [is_lock], [id_card]) VALUES (N'Lucy', N'345656', N'154635', 100000, N'15746587368', 0, N'198773199908091846')
INSERT [dbo].[account] ([name], [id], [password], [balance], [telephone_number], [is_lock], [id_card]) VALUES (N'Bill', N'384594', N'154635', 0, N'15463641546', 1, N'153635199901017834')
INSERT [dbo].[account] ([name], [id], [password], [balance], [telephone_number], [is_lock], [id_card]) VALUES (N'Antone', N'685630', N'132354', 0.8, N'15464538775', 0, N'419817199897111735')
GO
USE [master]
GO
ALTER DATABASE [bank] SET  READ_WRITE
GO

数据库创建效果

源代码

# coding=utf-8
# sqlserver的连接
import random
import pymssqlclass MSSQL:def __GetConnect(self):"""得到连接信息返回: conn.cursor()"""self.conn = pymssql.connect(host='主机名(可以是localhost)', user='用户名(要求此用户有操作数据库数据的权限)', password='密码', database='数据库名', charset="utf8")cur = self.conn.cursor()if not cur:raise (NameError, "连接数据库失败")else:return curdef ExecQuery(self, sql):"""执行查询语句返回的是一个包含tuple的list,list的元素是记录行,tuple的元素是每行记录的字段"""cur = self.__GetConnect()cur.execute(sql)result_list = cur.fetchall()# 查询完毕后必须关闭连接self.conn.close()return result_listdef ExecNonQuery(self, sql):"""执行非查询语句"""cur = self.__GetConnect()try:cur.execute(sql)except Exception as ex:print(ex)self.conn.commit()self.conn.close()class Account:def new_account(self):name = input('欢迎成为我们的新用户,请输入您的姓名')account = str(random.randint(100000, 999999))password = input('请输入您的密码')repeat_password = input('请再输入一次')if password == repeat_password:telephone = input('请输入您的电话')import re#使用正则表达式匹配电话号码pattern_telephone = re.compile(R"^1[3578]\d{9}$")phone_match_result = pattern_telephone.match(telephone)if phone_match_result is not None:#使用正则表达式匹配身份证号码id_card = input('请输入您的身份证号码')pattern_id_card=re.compile(R"^[1-9]\d{5}(18|19|([23]\d))\d{2}((0[1-9])|(10|11|12))(([0-2]["R"1-9])|10|20|30|31)\d{3}[0-9Xx]$")id_card_match_result = pattern_id_card.match(id_card)if id_card_match_result is not None:money=input('请输入预存金额')da = MSSQL()sql = 'INSERT INTO account VALUES(' + "'" + name + "','" + account + "','" + password + "'," + money + ",'" + telephone + "'," + "0" + ",'" + id_card + "')"da.ExecNonQuery(sql)else:print('身份证号码无效')else:print("手机号码无效")else:print('注册失败,您输入的密码不一致')def find(self):d = MSSQL()account = input('欢迎使用ATM存取款一体机,请插入银行卡')sql = 'SELECT * FROM account WHERE id=' + accountresult_list = d.ExecQuery(sql)if len(result_list) == 0:print('非法卡,请重试')else:user_message = result_list[0]for i in range(3):password = input('请输入密码')if password == user_message[2]:print('亲爱的客户您好,您的信息如下')def check_account():if user_message[5] == 0:print('姓名', user_message[0], '\n账号', user_message[1], '\n余额', user_message[3], '\n手机号',user_message[4], '\n账户正常\n身份证号', user_message[6])else:print('您的账户已锁定,无法查询')returncheck_account()print('查询完毕,请取走卡片。\n谢谢您的光临')returnelse:print('密码错误,请重试')print('密码错误次数过多,银行卡已锁定')sql = 'UPDATE account SET is_lock=1 WHERE id=' + "'" + user_message[1] + "'"d.ExecNonQuery(sql)def get_money(self):account = input('欢迎使用ATM存取款一体机,请插入银行卡')d = MSSQL()sql = 'SELECT * FROM account WHERE id=' + accountresult_list = d.ExecQuery(sql)if len(result_list) == 0:print('非法卡,请重试')else:for i in range(3):password = input('请输入密码')user_message = result_list[0]if password == user_message[2]:if user_message[5] == 0:print('您的余额为', user_message[3])money = float(input('请取款'))if money > user_message[3]:print('您的余额不足,取款失败')returnelif money < 0:print('您的输入有误,取款失败')returnelse:money_ = user_message[3]money_ = str(money_ - money)sql = 'UPDATE account SET balance=' + money_ + ' WHERE id=' + "'" + user_message[1] + "'"d.ExecNonQuery(sql)print('取款成功,请核对。')returnelse:print('您的银行卡已锁定,无法操作')returnelse:print('密码错误,请重试')print('密码错误次数过多,银行卡已锁定')sql = 'UPDATE account SET is_lock=1 WHERE id=' + "'" + user_message[1] + "'"d.ExecNonQuery(sql)print('取款结束,请取走卡片。\n谢谢您的光临')def save_money(self):account = input('欢迎使用ATM存取款一体机,请插入银行卡')d = MSSQL()sql = 'SELECT * FROM account WHERE id=' + accountresult_list = d.ExecQuery(sql)if len(result_list) == 0:print('非法卡,请重试')else:for i in range(3):password = input('请输入密码')user_message = result_list[0]if password == user_message[2]:if user_message[5] == 0:print('您的余额为', user_message[3])money = float(input('请存款'))if money < 0:print('您的输入有误,存款失败')returnelse:money_ = user_message[3]money_ = str(money_ + money)sql = 'UPDATE account SET balance=' + money_ + ' WHERE id=' + "'" + user_message[1] + "'"d.ExecNonQuery(sql)print('存款成功,请核对。')returnelse:print('您的银行卡已锁定,无法操作')returnelse:print('密码错误,请重试')print('密码错误次数过多,银行卡已锁定')sql = 'UPDATE account SET is_lock=1 WHERE id=' + "'" + user_message[1] + "'"d.ExecNonQuery(sql)print('存款结束,请取走卡片。\n谢谢您的光临')def transfer_money(self):account = input('欢迎使用ATM存取款一体机,请插入银行卡')d = MSSQL()sql = 'SELECT * FROM account WHERE id=' + accountresult_list = d.ExecQuery(sql)if len(result_list) == 0:print('非法卡,请重试')else:user_message = result_list[0]for i in range(3):password = input('请输入密码')if password == user_message[2]:if user_message[5] == 0:print('您的余额为', user_message[3])person = input('请输入转到的银行卡号')money = float(input('请输入转账金额'))if money < 0:print('您的输入有误,转账失败')returnelse:make_sure_transfor=input('您确定转账?输入Y继续,输入其他退出')if make_sure_transfor=='Y':sql = 'SELECT * FROM account WHERE id=' + "'" + person + "'"de = d.ExecQuery(sql)if len(de) == 0:print('无效卡号,请核对')returnelse:if money > user_message[3]:print('您的余额不足,转账失败')returnelse:money_ = user_message[3]money_ = str(money_ - money)sql1 = 'UPDATE account SET balance=' + money_ + ' WHERE id=' + "'" + user_message[1] + "'"d.ExecNonQuery(sql1)money__ = de[0][3]money__ = str(money__ + money)sql2 = 'UPDATE account SET balance=' + money__ + ' WHERE id=' + "'" + person + "'"d.ExecNonQuery(sql2)print('转账成功,请核对。')returnelse:returnelse:print('您的银行卡已锁定,无法操作')returnelse:print('密码错误,请重试')print('密码错误次数过多,银行卡已锁定')sql = 'UPDATE account SET is_lock=1 WHERE id=' + "'" + user_message[1] + "'"d.ExecNonQuery(sql)print('转账结束,请取走卡片。\n谢谢您的光临')def lock(self):account = input('欢迎使用ATM存取款一体机,请输入银行卡卡号')d = MSSQL()sql = 'SELECT * FROM account WHERE id=' + accountresult_list = d.ExecQuery(sql)if len(result_list) == 0:print('非法卡,请重试')else:user_message = result_list[0]for i in range(3):password = input('请输入密码')if password == user_message[2]:if user_message[5] == 0:print('您的余额为', user_message[3])is_lock = input('您确定要锁定您的银行卡吗?输入1锁定银行卡,输入其他字符返回')if is_lock != '1':returnelse:sql = 'UPDATE account SET is_lock=1 WHERE id=' + "'" + user_message[1] + "'"d.ExecNonQuery(sql)print('锁定成功')returnelse:print('您的银行卡已锁定,无法操作')returnelse:print('密码错误,请重试')print('密码错误次数过多,银行卡已锁定')sql = 'UPDATE account SET is_lock=1 WHERE id=' + "'" + user_message[1] + "'"d.ExecNonQuery(sql)print('挂失结束。\n谢谢您的光临')def un_lock(self):account = input('欢迎使用ATM存取款一体机,请输入银行卡卡号')d = MSSQL()sql = 'SELECT * FROM account WHERE id=' + accountresult_list = d.ExecQuery(sql)if len(result_list) == 0:print('非法卡,请重试')else:user_message = result_list[0]for i in range(3):password = input('请输入密码')if password == user_message[2]:if user_message[5] == 1:print('您的余额为', user_message[3])is_lock = input('您确定要解锁您的银行卡吗?输入0解锁银行卡,输入其他字符返回')if is_lock != '0':returnelse:sql = 'UPDATE account SET is_lock=0 WHERE id=' + "'" + user_message[1] + "'"d.ExecNonQuery(sql)print('解锁成功')returnelse:print('您的银行卡未锁定,无法操作')returnelse:print('密码错误,请重试')print('密码错误次数过多,银行卡已锁定')sql = 'UPDATE account SET is_lock=1 WHERE id=' + "'" + user_message[1] + "'"d.ExecNonQuery(sql)print('挂失结束。\n谢谢您的光临')def welcome():welcome_ = '''
********************************************
***                                      ***
***                                      ***
***            欢迎登录银行管理系统          ***
***                                      ***
***                                      ***
********************************************'''print(welcome_)def main_menu():menu = '''
**************************************************
***                                            ***
***    1.开户(1)                 2.查询(2)    ***
***    3.取款(3)                 4.存款(4)    ***
***    5.转账(5)                 6.锁定(6)    ***
***    7.解锁(7)                              ***
***                                            ***
***    退出(Q)                                ***
***                                            ***
**************************************************'''print(menu)def login():acc = input('请输入管理员账户:')if acc != 'admin':print('管理员账户输入错误......')exit(0)p_s_w_d = input('请输入密码:')if p_s_w_d != '12345':print('输入密码有误......')exit(0)print('操作成功,请稍后......')def choose():a = Account()choose_ = input('请输入您的操作')if choose_ == '1':a.new_account()elif choose_ == '2':a.find()elif choose_ == '3':a.get_money()elif choose_ == '4':a.save_money()elif choose_ == '5':a.transfer_money()elif choose_ == '6':a.lock()elif choose_ == '7':a.un_lock()elif choose_ == 'Q':exit(0)else:print('输入错误')def main():welcome()login()while True:main_menu()choose()if __name__ == '__main__':main()

银行管理系统(使用SQL Server)-Python快速编程入门(第2版)-人民邮电出版社-阶段案例相关推荐

  1. Python快速编程入门 第2版 实训案例及课后编程题

    目录 本文档仅供参考,更新了 第2章 第3章 第4章 第5章 第6章 第7章 本文档仅供参考,更新了6.7章 第2章 2.4.1打印购物小票 蚂蚁森林是支付宝客户端发起"碳账户"的 ...

  2. 【python快速编程入门 第2版】第一章 python概述 习题

    一.填空题 1.Python是面向___对象的高级语言. 2.Python 可以在多种平台运行,这体现了Python语言_可移植性的特性. 3.Python模块的本质是.py文件. 4.使用impor ...

  3. Python快速编程入门#学习笔记01# |第一章 :Python基础知识 (Python发展历程、常见的开发工具、import模块导入)

    全文目录 ==先导知识== 1 认识Python 1.1.1 Python的发展历程 1.1.2 Python语言的特点 2. Python解释器的安装与Python程序运行 1.2.1 安装Pyth ...

  4. python快速编程入门教程-终于懂得python快速编程入门教程

    为了提高模块加载的速度,每个模块都会在__pycache__文件夹中放置该模块的预编译模块,命名为module.version.pyc,version是模块的预编译版本编码,一般都包含Python的版 ...

  5. [转载] Python快速编程入门课后程序题答案

    参考链接: Python程序添加两个矩阵 前言 本文只是简单的整理了一下课后习题的编程题,具体的填空.选择.判断可以见:Python快速编程入门课后习题答案 第一章 1.编写一个Python程序,输出 ...

  6. 黑马程序员 python快速编程入门课后答案_Python快速编程入门课后程序题答案

    前言 本文只是简单的整理了一下课后习题的编程题,具体的填空.选择.判断可以见:Python快速编程入门课后习题答案 第一章 1.编写一个Python程序,输出如下图效果. ++++++++++ +  ...

  7. Python快速编程入门#学习笔记03# |第二章 :Python基础(代码格式、标识符关键字、变量和数据类型、数字类型以及运算符)

    全文目录 ==先导知识== 学习目标: 2.1 代码格式 2.1.1 注释 2.1.2 缩进 2.1.3 语句换行 2.2 标识符和关键字 2.2.1 标识符 2.2.2 关键字 2.3 变量和数据类 ...

  8. Python快速编程入门课后习题答案

    文章目录 前言 第一章 一.填空题 二.判断题 三.选择题 四.简答题 第二章 一.填空题 二.判断题 三.选择题 四.简答题 第三章 一.填空题 二.判断题 三.选择题 四.简答题 第四章 一.单选 ...

  9. Python快速编程入门课后程序题答案

    前言 本文只是简单的整理了一下课后习题的编程题,具体的填空.选择.判断可以见:Python快速编程入门课后习题答案 第一章 1.编写一个Python程序,输出如下图效果. ++++++++++ +  ...

最新文章

  1. 51单片机学习笔记(郭天祥版)(4)——练习、动态扫描、练习、数码管消影...
  2. 创建和应用Java包文件的两种方式(转)
  3. python的序列类型及其特点_Fluent Python 笔记——序列类型及其丰富的操作
  4. C# BackgroudWorker
  5. OMP: Error #15: Initializing libiomp5md.dll, but found libiomp5md.dll already initialized.
  6. 阿里内核月报2017年01月
  7. java连接mysql数据库 R_Java连接Mysql数据库详细代码实例
  8. EAR、JAR、WAR(IT)
  9. 初学objective c语言4 dealloc
  10. 容量规划的一些探讨与实践
  11. linux下的关机重启
  12. 使用python实现深度神经网络--学习笔记
  13. dell服务器主板型号怎么看,我不懂硬件,帮我看看DELL600M的主板是什么型号
  14. pygame按键持续按下响应
  15. 关于Winxp U盘无法复制磁盘写保护解决办法
  16. java游戏服务端实现
  17. 中兴B860AV2.1B电视盒子刷机固件
  18. OpenGL | 设置视口glViewport 裁剪glScissor 屏幕截图 glReadPixel
  19. 公司欠债不还,法人不再被列入失信黑名单啦
  20. 3.2.2对中文的考察2

热门文章

  1. 微信内测朋友圈内容转发功能;快手前副总裁侵占756万余元,一审获刑7年;​俄罗斯法院驳回苹果上诉,将继续进行反垄断调查|极客头条
  2. 织梦DedeCMS搜索页面搜索结果总数调用方法
  3. python12306爬虫_爬虫12306返回数据怎么解析
  4. 华为云数据中心建设全面复工进行中,预计2021年投入使用
  5. 2021消防设施操作员考试实操口述题及答案解析
  6. 北纬三十度“神命谷”旅游策划方案
  7. FreeMarker 模板生成 PDF电子凭证/图片
  8. IDEA 程序包不存在,找不到符号但是明明存在对应的jar包 的解决方案
  9. 1-5分钟上手自动化测试——Airtest+Poco快速上手
  10. 反混淆JavaScript