Python连接SqlServer+GUI嵌入式——学生管理系统1.0
学生管理系统1.0
1.建学生数据库
2.数据库嵌入高级语言(Python)
3.界面设计
简化思路:
1.先通过SqlServer2012建立学生数据库,包括账号、密码,姓名、选课等信息
2.运用Python的pymssql库与SqlServer建立连接再用tkinter库创建GUI界面
1)SqlServer建学生数据库
1 create database student_Mis
2 on
3 (name = student_Data,
4 filename='F:\SQL list\student_mis_data.mdf',
5 size = 20,
6 maxsize = 100,
7 filegrowth = 10)
8 log on
9 (name = student_Log,
10 filename = 'F:\SQL list\student_mis_log.ldf',
11 size = 5mb,
12 maxsize = 50mb,
13 filegrowth = 5mb)
2)在学生库内建表并插入数据
1 create table Students
2 (学号 char(10) primary key,
3 密码 varchar(20) not null,
4 姓名 char(20) not null,
5 性别 char(5),
6 出生日期 date
7 )
8
9 create table Course
10 (课程名 char(30) not null,
11 课程老师 char(20) not null,
12 课程号 char(10) primary key)
13
14 create table Report
15 (学号 char(10),
16 课程号 char(10),
17 成绩 int,
18 primary key(学号,课程号),
19 constraint Students_Report foreign key(学号) references Students,
20 constraint Couse_Report foreign key(课程号) references Course)
21
22
23 insert
24 into Students
25 values
26 ('2018165201','12345678','李铭','男','2000-02-01'),
27 ('2018165202','12345678','刘晓鸣','男','2000-08-02'),
28 ('2018165203','12345678','李明','男','1999-07-09'),
29 ('2018165204','12345678','张鹰','女','1998-08-20'),
30 ('2018165205','12345678','刘竟静','女','1999-09-09'),
31 ('2018165206','12345678','刘成刚','男','2000-10-10'),
32 ('2018165207','12345678','王铭','男','2000-01-01'),
33 ('2018165118','12345678','右耳朵耗子','男','1998-08-25')
34
35 insert
36 into Course
37 values
38 ('数据库', '美美', '20185101'),
39 ('概率论', '杨晓东', '20185102'),
40 ('C语言', '黄晓明', '20185103'),
41 ('计算机基础', '徐明', '20185104')
42
43 insert
44 into Report
45 values
46 ('2018165201','20185101', '90'),
47 ('2018165201','20185102', '80'),
48 ('2018165201','20185103', '99'),
49 ('2018165201','20185104', '88'),
50
51 ('2018165202','20185101', '70'),
52 ('2018165202','20185102', '90'),
53 ('2018165202','20185103', '90'),
54 ('2018165202','20185104', '78'),
55
56 ('2018165203','20185101', '89'),
57 ('2018165203','20185102', '85'),
58 ('2018165203','20185103', '90'),
59 ('2018165203','20185104', '67'),
60
61 ('2018165204','20185101', '88'),
62 ('2018165204','20185102', '85'),
63 ('2018165204','20185103', '85'),
64 ('2018165204','20185104', '85'),
65
66 ('2018165205','20185101', '90'),
67 ('2018165205','20185102', '90'),
68 ('2018165205','20185103', '90'),
69 ('2018165205','20185104', ''),
70
71 ('','', ''),
72 ('','', ''),
73 ('','', ''),
74 ('','', ''),
75
76 ('','', ''),
77 ('','', ''),
78 ('','', ''),
79 ('','', ''),
80 ('','', ''),
81 ('','', ''),
82 ('','', ''),
83 ('','', '')
3)Python建立连接并实现GUI界面
# ======================
# imports
# ====================== from tkinter import *
from tkinter import ttk
import pymssql # import uuid
# import _mssql
# import decimal from tkinter import messagebox
class Basedesk():
"""
基准框模块
"""
def __init__(self, master): self.root = master
self.root.config()
self.root.title('教务管理系统')
self.width = 380 # 界面宽
self.height = 300 # 界面高
# 获取屏幕尺寸以计算布局参数,使窗口居屏幕中央
self.screenwidth = self.root.winfo_screenwidth() # 屏幕宽
self.screenheight = self.root.winfo_screenheight() # 屏幕高
self.alignstr = '%dx%d+%d+%d' % (self.width, self.height, (self.screenwidth-self.width)/2, (self.screenheight-self.height)/2)
self.root.geometry(self.alignstr)
self.R = Register(self.root)
self.R.reigister(self.root) class Register(): def __init__(self, master):
self.root = master
# 基准框架 """以下三行需根据个人实际修改"""
self.ip = ' 填入个人ip地址 '
self.id = ' 填入个人使用的SqlServer的账号 '
self.pd = ' 填入SqlServer账号对应密码 ' """
登录模块
"""
def reigister(self, master):
# 账号密码输入框
self.initface = LabelFrame(self.root, text='教务系统登录', font=('微软雅黑', 14))
self.initface.grid(padx=85, pady=30, ) self.people = Label(self.initface, text='账号') # 账号
self.people.grid(row=1, column=0, padx=10, pady=10)
self.password = Label(self.initface, text='密码') # 密码
self.password.grid(row=2, column=0, padx=10, pady=10)
self.var1 = StringVar
self.var2 = StringVar
self.entry_people = Entry(self.initface, textvariable=self.var1) # 账号输入框
self.entry_people.grid(row=1, column=1, padx=10, pady=10)
self.entry_password = Entry(self.initface, textvariable=self.var2, show='*') # 密码输入框
self.entry_password.grid(row=2, column=1, padx=10, pady=10)
self.button_into = Button(self.initface, text='登录', command=self.conn) # 登录按钮
self.button_into.grid(row=3, column=0, padx=20, pady=20)
self.button_into = Button(self.initface, text='退出', command=self.root.quit) # 退出按钮
self.button_into.grid(row=3, column=1, padx=20, pady=20)
def conn(self):
self.connect = pymssql.connect(self.ip, self.id, self.pd, 'student_Mis1') # 服务器名,账户,密码,数据库名
self.cursor = self.connect.cursor()
if self.connect:
print('连接成功')
self.sql = "select Students.学号,Students.密码 from Students" self.cursor.execute(self.sql)
self.result = self.cursor.fetchone()
self.man = self.entry_people.get()
# self.pd = self.entry_password.get()
while self.result:
print('%s|%s' % (self.result[0], self.result[1])) if self.result[0] == self.entry_people.get() and self.result[1] == self.entry_password.get():
print('账号密码正确') self.initface.destroy() # 销毁initface
self.check() break else: self.result = self.cursor.fetchone()
else:
# 账号或密码错误清空输入框
self.entry_people.delete(0, END)
self.entry_password.delete(0, END)
messagebox.showinfo(title='提示', message='账号或密码输入错误\n请重新输入?')
# break self.cursor.close()
self.connect.close() """
选择模块
"""
def check(self):
self.frame_checkbutton = LabelFrame(self.root, text='功能选择', font=('微软雅黑', 14))
self.frame_checkbutton.grid(padx=60, pady=30)
# 查询成绩按钮 self.button_success = Button(self.frame_checkbutton, text='查询成绩', width=10, height=2, command=self.success)
self.button_success.grid(row=0, column=0, padx=20, pady=20)
# 修改密码按钮
self.button_revise = Button(self.frame_checkbutton, text='修改密码', width=10, height=2, command=self.revise)
self.button_revise.grid(row=0, column=1, padx=20, pady=20) def success(self): # 连接数据库
self.connect = pymssql.connect(self.ip, self.id, self.pd, 'student_Mis1') # 服务器名,账户,密码,数据库名
if self.connect:
print('连接成功')
print(self.man)
# 查询语句
search_sql = "select convert(nvarchar(20), 姓名) ,Students.学号,convert(nvarchar(20), 课程名) ,成绩 from Students, Report, Course " \
"where Students.学号=Report.学号 and Report.课程号=Course.课程号 and Students.学号=%s" % self.man # 创建游标
self.cursor1 = self.connect.cursor()
self.cursor1.execute(search_sql)
self.row = self.cursor1.fetchone() # 读取查询结果 # 表格框
root = Tk() # 初始框的声明
root.geometry('500x400+100+100')
root.title('成绩查询系统')
columns = ("姓名", "学号", "课程", "成绩")
self.treeview = ttk.Treeview(root, height=18, show="headings", columns=columns)
self.treeview.column("姓名", width=150, anchor='center') # 表示列,不显示
self.treeview.column("学号", width=100, anchor='center')
self.treeview.column("课程", width=150, anchor='center')
self.treeview.column("成绩", width=100, anchor='center') self.treeview.heading("姓名", text="姓名") # 显示表头
self.treeview.heading("学号", text="学号")
self.treeview.heading("课程", text="课程")
self.treeview.heading("成绩", text="成绩")
self.treeview.pack(side=LEFT, fill=BOTH) # 插入数据
while self.row:
self.treeview.insert('', 0, values=(self.row[0], self.row[1], self.row[2], self.row[3]))
self.row = self.cursor1.fetchone() # 读取查询结果, self.cursor1.close()
self.connect.close()
root.mainloop() def revise(self):
self.window = Tk() # 初始框的声明
self.window.geometry('400x200+100+100')
self.window.title('密码修改管理')
self.frame_revise = LabelFrame(self.window)
self.frame_revise.grid(padx=60, pady=60)
self.label_revise = Label(self.frame_revise, text='新密码:')
self.label_revise.grid(row=0, column=0, padx=10, pady=10)
self.var3 = StringVar
self.entry_revise = Entry(self.frame_revise, textvariable=self.var3)
self.entry_revise.grid(row=0, column=1, padx=10, pady=10)
self.button_ok = Button(self.frame_revise, text='确定', command=self.ok)
self.button_ok.grid(row=1, column=0)
self.button_resive = Button(self.frame_revise, text='取消', command=self.resive)
self.button_resive.grid(row=1, column=1)
self.button_quit = Button(self.frame_revise, text='退出', command=self.window.destroy)
self.button_quit.grid(row=1, column=2) def ok(self):
# 连接数据库
self.connect = pymssql.connect(self.ip, self.id, self.pd, 'student_Mis1') # 服务器名,账户,密码,数据库名
self.cursor2 = self.connect.cursor() # 创建游标
sql_revise = "update Students set 密码=%s where 学号=%s" % (self.entry_revise.get(), self.man) if self.connect:
print('连接成功')
print(self.man)
self.cursor2.execute(sql_revise)
self.connect.commit()
print(self.entry_revise.get())
messagebox.showinfo(title='提示', message='密码修改成功!')
self.cursor2.close()
self.connect.close() def resive(self):
self.entry_revise.delete(0, END) if __name__ == '__main__':
root = Tk()
Basedesk(root)
mainloop()
效果图:
1)登录界面

2)功能选择

3)成绩查询

4)密码修改

缺点:1.功能较少,仅查询成绩与修改个人密码。
2.界面设计较简陋。
3.数据模式设计还不够完整合理
说明:主要运用Python的pymssql和tkinter库和类定义等方法做出这个嵌入式作业,将于空闲时间继续改进,设计出更合理的数据关系模式。
Python连接SqlServer+GUI嵌入式——学生管理系统1.0的更多相关文章
- python学习--python 连接SQLServer数据库(两种方法)
1. python 学习.安装教程参照: http://www.runoob.com/python/python-tutorial.html 2. 集成开发环境 JetBrains PyCharm C ...
- <每日一题>题目7:简单的学生管理系统V1.0
''' # 学生管理系统v1.0 # 添加学生的信息 # 删除学生的信息 # 修改学生的信息 # 查看学生的信息 #遍历学生的信息 #退出系统 ''' import json #1 显示操作功能 de ...
- python连接sqlserver数据库
1.准备工作 python3.6连接sqlserver数据库需要引入pymssql模块 pymssql官方:https://pypi.org/project/pymssql/ 没有安装的话需要: pi ...
- python连接sqlserver和MySQL实现增删改查
参考python核心编程 编写一个用户洗牌的脚本,根据用户输入,选择连接sqlserver或者MySQL,创建数据库.表,随机生成数据,并实现增删改查. 其中,为了兼容python2和python3, ...
- 用Python连接SQLServer抓取分析数据、监控 (pymssql)
Python 环境:python3 服务器环境: centos6.5 数据库: Mysql 大概流程:在装有Python服务器,利用pymssql库连接MSSQL生产数据库取出数据然后写进mysql数 ...
- python 连接sqlserver: pymssql
停了一个月,终于还是把这个做了,工作需要!!!在装pymssql时,一直报错,确定了要先装freetds: 1. 安装freetds时报错,搜索到要先进行如下操作: brew unlink freet ...
- python连接sqlserver工具类
上代码: # -*- coding:utf-8 -*- import pymssql import pandas as pd class MSSQL(object): def __init__(sel ...
- python课程设计--学生管理系统
系统要求 1.添加学生 2.删除学生 3.修改学生信息 4.查询学生 5.查看所有学生信息 6.学生信息数据的存储与读取 源码:student.py #coding:utf-8 2 #定义学员类 3 ...
- 使用JDBC连接了数据库的图书管理系统2.0
更新日志: 2019.3.28 数据库版本2.0 1.使用mySQL数据库 2.修改代码使用JDBC连接数据库 3.新增Manage操作类及DBUtils数据库工具类 4.完善代码(封装及方法调用) ...
随机推荐
- Stack Overflow 上 250W 浏览量的一个问题:你对象丢了
在逛 Stack Overflow 的时候,发现最火的问题竟然是:什么是 NullPointerException(java.lang.NullPointerException),它是由什么原因导致的 ...
- Oracle 编写存储过程并设置定时执行
Oracle 版本:11g PL/SQL 版本:11.0.3.1770 1.如果编写单个存储过程,则直接在procedure新建并编写:如果需要写多个同类功能的存储过程,为了方便管理,可以现在pack ...
- Cocos2d-x 学习笔记(22) TableView
[Cocos2d-x 学习笔记 ]目录 1. 简介 TableView直接继承了ScrollView和ScrollViewDelegate.说明TableView能实现ScrollView拖动cont ...
- 安装并使用SourceTree进行代码管理(Mac环境)
应用场景 对于我们开发人员来说,熟练使用Git是最基本的技能之一.SourceTree又是一款比较好的Git UI工具,是 Windows 和Mac OS X 下免费的 Git 和 Hg 客户端,主要 ...
- Shiro:未登录时请求跳转问题
问题:前后端分离项目,在用Shiro做权限控制时,未登录状态发送的请求都会重定向,导致前端无法捕捉重定向后的消息.如何不重定向在原来的请求返回信息提示未登录,前端根据信息调到登录页? 首先,看一下Sh ...
- sql优化提速整理
sql优化提速整理 场景描述 在我们实际开发中,随着业务的不断增加,数据量也在不断的攀升,这样就离不开一个问题:数据查询效率优化 根据自己的以往实际项目工作经验和学习所知,现在对SQL查询优化做一个简 ...
- FileZilla Server超详细配置
FileZilla Server下载安装完成后,必须启动软件进行设置,由于此软件是英文,本来就是一款陌生的软件,再加上英文(注:本站提供中文版本,请点击下载),配置难度可想而知,站长从网上找到一篇非常 ...
- ESP8266开发之旅 网络篇① 认识一下Arduino Core For ESP8266
博主的 ESP8266开发之旅 专栏主要分为三个部分: 基础篇 网络篇 应用篇 从这一篇开始,博主将会带领各位读者在基础篇的基础上进入网络的世界.在此,博主认为各位读者已经具备以下前提 ...
- Apache2的安装
Apache2的安装 1.执行:sudo apt-get install apache2. 2.sudo vim /etc/apache2/apache2.conf在最后加上:ServerName l ...
- OptimalSolution(2)--二叉树问题(1)遍历与查找问题
一.二叉树的按层打印与ZigZag打印 1.按层打印: 1 Level 1 : 1 / \ 2 3 Level 2 : 2 3 / / \ 4 5 6 Level 3 : 4 5 6 / \ 7 8 ...