学生管理系统1.0

1.建学生数据库

2.数据库嵌入高级语言(Python)

3.界面设计

简化思路:

1.先通过SqlServer2012建立学生数据库,包括账号、密码,姓名、选课等信息

2.运用Python的pymssql库与SqlServer建立连接再用tkinter库创建GUI界面

1)SqlServer建学生数据库

  1. 1 create database student_Mis
  2. 2 on
  3. 3 (name = student_Data,
  4. 4 filename='F:\SQL list\student_mis_data.mdf',
  5. 5 size = 20,
  6. 6 maxsize = 100,
  7. 7 filegrowth = 10)
  8. 8 log on
  9. 9 (name = student_Log,
  10. 10 filename = 'F:\SQL list\student_mis_log.ldf',
  11. 11 size = 5mb,
  12. 12 maxsize = 50mb,
  13. 13 filegrowth = 5mb)

2)在学生库内建表并插入数据

  1. 1 create table Students
  2. 2 (学号 char(10) primary key,
  3. 3 密码 varchar(20) not null,
  4. 4 姓名 char(20) not null,
  5. 5 性别 char(5),
  6. 6 出生日期 date
  7. 7 )
  8. 8
  9. 9 create table Course
  10. 10 (课程名 char(30) not null,
  11. 11 课程老师 char(20) not null,
  12. 12 课程号 char(10) primary key)
  13. 13
  14. 14 create table Report
  15. 15 (学号 char(10),
  16. 16 课程号 char(10),
  17. 17 成绩 int,
  18. 18 primary key(学号,课程号),
  19. 19 constraint Students_Report foreign key(学号) references Students,
  20. 20 constraint Couse_Report foreign key(课程号) references Course)
  21. 21
  22. 22
  23. 23 insert
  24. 24 into Students
  25. 25 values
  26. 26 ('2018165201','12345678','李铭','男','2000-02-01'),
  27. 27 ('2018165202','12345678','刘晓鸣','男','2000-08-02'),
  28. 28 ('2018165203','12345678','李明','男','1999-07-09'),
  29. 29 ('2018165204','12345678','张鹰','女','1998-08-20'),
  30. 30 ('2018165205','12345678','刘竟静','女','1999-09-09'),
  31. 31 ('2018165206','12345678','刘成刚','男','2000-10-10'),
  32. 32 ('2018165207','12345678','王铭','男','2000-01-01'),
  33. 33 ('2018165118','12345678','右耳朵耗子','男','1998-08-25')
  34. 34
  35. 35 insert
  36. 36 into Course
  37. 37 values
  38. 38 ('数据库', '美美', '20185101'),
  39. 39 ('概率论', '杨晓东', '20185102'),
  40. 40 ('C语言', '黄晓明', '20185103'),
  41. 41 ('计算机基础', '徐明', '20185104')
  42. 42
  43. 43 insert
  44. 44 into Report
  45. 45 values
  46. 46 ('2018165201','20185101', '90'),
  47. 47 ('2018165201','20185102', '80'),
  48. 48 ('2018165201','20185103', '99'),
  49. 49 ('2018165201','20185104', '88'),
  50. 50
  51. 51 ('2018165202','20185101', '70'),
  52. 52 ('2018165202','20185102', '90'),
  53. 53 ('2018165202','20185103', '90'),
  54. 54 ('2018165202','20185104', '78'),
  55. 55
  56. 56 ('2018165203','20185101', '89'),
  57. 57 ('2018165203','20185102', '85'),
  58. 58 ('2018165203','20185103', '90'),
  59. 59 ('2018165203','20185104', '67'),
  60. 60
  61. 61 ('2018165204','20185101', '88'),
  62. 62 ('2018165204','20185102', '85'),
  63. 63 ('2018165204','20185103', '85'),
  64. 64 ('2018165204','20185104', '85'),
  65. 65
  66. 66 ('2018165205','20185101', '90'),
  67. 67 ('2018165205','20185102', '90'),
  68. 68 ('2018165205','20185103', '90'),
  69. 69 ('2018165205','20185104', ''),
  70. 70
  71. 71 ('','', ''),
  72. 72 ('','', ''),
  73. 73 ('','', ''),
  74. 74 ('','', ''),
  75. 75
  76. 76 ('','', ''),
  77. 77 ('','', ''),
  78. 78 ('','', ''),
  79. 79 ('','', ''),
  80. 80 ('','', ''),
  81. 81 ('','', ''),
  82. 82 ('','', ''),
  83. 83 ('','', '')

3)Python建立连接并实现GUI界面

  1. # ======================
  2. # imports
  3. # ======================
  4.  
  5. from tkinter import *
  6. from tkinter import ttk
  7. import pymssql
  8.  
  9. # import uuid
  10. # import _mssql
  11. # import decimal
  12.  
  13. from tkinter import messagebox
  14. class Basedesk():
  15. """
  16. 基准框模块
  17. """
  18. def __init__(self, master):
  19.  
  20. self.root = master
  21. self.root.config()
  22. self.root.title('教务管理系统')
  23. self.width = 380 # 界面宽
  24. self.height = 300 # 界面高
  25. # 获取屏幕尺寸以计算布局参数,使窗口居屏幕中央
  26. self.screenwidth = self.root.winfo_screenwidth() # 屏幕宽
  27. self.screenheight = self.root.winfo_screenheight() # 屏幕高
  28. self.alignstr = '%dx%d+%d+%d' % (self.width, self.height, (self.screenwidth-self.width)/2, (self.screenheight-self.height)/2)
  29. self.root.geometry(self.alignstr)
  30. self.R = Register(self.root)
  31. self.R.reigister(self.root)
  32.  
  33. class Register():
  34.  
  35. def __init__(self, master):
  36. self.root = master
  37. # 基准框架 """以下三行需根据个人实际修改"""
  38. self.ip = ' 填入个人ip地址 '
  39. self.id = ' 填入个人使用的SqlServer的账号 '
  40. self.pd = ' 填入SqlServer账号对应密码 '
  41.  
  42. """
  43. 登录模块
  44. """
  45. def reigister(self, master):
  46. # 账号密码输入框
  47. self.initface = LabelFrame(self.root, text='教务系统登录', font=('微软雅黑', 14))
  48. self.initface.grid(padx=85, pady=30, )
  49.  
  50. self.people = Label(self.initface, text='账号') # 账号
  51. self.people.grid(row=1, column=0, padx=10, pady=10)
  52. self.password = Label(self.initface, text='密码') # 密码
  53. self.password.grid(row=2, column=0, padx=10, pady=10)
  54. self.var1 = StringVar
  55. self.var2 = StringVar
  56. self.entry_people = Entry(self.initface, textvariable=self.var1) # 账号输入框
  57. self.entry_people.grid(row=1, column=1, padx=10, pady=10)
  58. self.entry_password = Entry(self.initface, textvariable=self.var2, show='*') # 密码输入框
  59. self.entry_password.grid(row=2, column=1, padx=10, pady=10)
  60. self.button_into = Button(self.initface, text='登录', command=self.conn) # 登录按钮
  61. self.button_into.grid(row=3, column=0, padx=20, pady=20)
  62. self.button_into = Button(self.initface, text='退出', command=self.root.quit) # 退出按钮
  63. self.button_into.grid(row=3, column=1, padx=20, pady=20)
  64. def conn(self):
  65. self.connect = pymssql.connect(self.ip, self.id, self.pd, 'student_Mis1') # 服务器名,账户,密码,数据库名
  66. self.cursor = self.connect.cursor()
  67. if self.connect:
  68. print('连接成功')
  69. self.sql = "select Students.学号,Students.密码 from Students"
  70.  
  71. self.cursor.execute(self.sql)
  72. self.result = self.cursor.fetchone()
  73. self.man = self.entry_people.get()
  74. # self.pd = self.entry_password.get()
  75. while self.result:
  76. print('%s|%s' % (self.result[0], self.result[1]))
  77.  
  78. if self.result[0] == self.entry_people.get() and self.result[1] == self.entry_password.get():
  79. print('账号密码正确')
  80.  
  81. self.initface.destroy() # 销毁initface
  82. self.check()
  83.  
  84. break
  85.  
  86. else:
  87.  
  88. self.result = self.cursor.fetchone()
  89. else:
  90. # 账号或密码错误清空输入框
  91. self.entry_people.delete(0, END)
  92. self.entry_password.delete(0, END)
  93. messagebox.showinfo(title='提示', message='账号或密码输入错误\n请重新输入?')
  94. # break
  95.  
  96. self.cursor.close()
  97. self.connect.close()
  98.  
  99. """
  100. 选择模块
  101. """
  102. def check(self):
  103. self.frame_checkbutton = LabelFrame(self.root, text='功能选择', font=('微软雅黑', 14))
  104. self.frame_checkbutton.grid(padx=60, pady=30)
  105. # 查询成绩按钮
  106.  
  107. self.button_success = Button(self.frame_checkbutton, text='查询成绩', width=10, height=2, command=self.success)
  108. self.button_success.grid(row=0, column=0, padx=20, pady=20)
  109. # 修改密码按钮
  110. self.button_revise = Button(self.frame_checkbutton, text='修改密码', width=10, height=2, command=self.revise)
  111. self.button_revise.grid(row=0, column=1, padx=20, pady=20)
  112.  
  113. def success(self):
  114.  
  115. # 连接数据库
  116. self.connect = pymssql.connect(self.ip, self.id, self.pd, 'student_Mis1') # 服务器名,账户,密码,数据库名
  117. if self.connect:
  118. print('连接成功')
  119. print(self.man)
  120. # 查询语句
  121. search_sql = "select convert(nvarchar(20), 姓名) ,Students.学号,convert(nvarchar(20), 课程名) ,成绩 from Students, Report, Course " \
  122. "where Students.学号=Report.学号 and Report.课程号=Course.课程号 and Students.学号=%s" % self.man
  123.  
  124. # 创建游标
  125. self.cursor1 = self.connect.cursor()
  126. self.cursor1.execute(search_sql)
  127. self.row = self.cursor1.fetchone() # 读取查询结果
  128.  
  129. # 表格框
  130. root = Tk() # 初始框的声明
  131. root.geometry('500x400+100+100')
  132. root.title('成绩查询系统')
  133. columns = ("姓名", "学号", "课程", "成绩")
  134. self.treeview = ttk.Treeview(root, height=18, show="headings", columns=columns)
  135. self.treeview.column("姓名", width=150, anchor='center') # 表示列,不显示
  136. self.treeview.column("学号", width=100, anchor='center')
  137. self.treeview.column("课程", width=150, anchor='center')
  138. self.treeview.column("成绩", width=100, anchor='center')
  139.  
  140. self.treeview.heading("姓名", text="姓名") # 显示表头
  141. self.treeview.heading("学号", text="学号")
  142. self.treeview.heading("课程", text="课程")
  143. self.treeview.heading("成绩", text="成绩")
  144. self.treeview.pack(side=LEFT, fill=BOTH)
  145.  
  146. # 插入数据
  147. while self.row:
  148. self.treeview.insert('', 0, values=(self.row[0], self.row[1], self.row[2], self.row[3]))
  149. self.row = self.cursor1.fetchone() # 读取查询结果,
  150.  
  151. self.cursor1.close()
  152. self.connect.close()
  153. root.mainloop()
  154.  
  155. def revise(self):
  156. self.window = Tk() # 初始框的声明
  157. self.window.geometry('400x200+100+100')
  158. self.window.title('密码修改管理')
  159. self.frame_revise = LabelFrame(self.window)
  160. self.frame_revise.grid(padx=60, pady=60)
  161. self.label_revise = Label(self.frame_revise, text='新密码:')
  162. self.label_revise.grid(row=0, column=0, padx=10, pady=10)
  163. self.var3 = StringVar
  164. self.entry_revise = Entry(self.frame_revise, textvariable=self.var3)
  165. self.entry_revise.grid(row=0, column=1, padx=10, pady=10)
  166. self.button_ok = Button(self.frame_revise, text='确定', command=self.ok)
  167. self.button_ok.grid(row=1, column=0)
  168. self.button_resive = Button(self.frame_revise, text='取消', command=self.resive)
  169. self.button_resive.grid(row=1, column=1)
  170. self.button_quit = Button(self.frame_revise, text='退出', command=self.window.destroy)
  171. self.button_quit.grid(row=1, column=2)
  172.  
  173. def ok(self):
  174. # 连接数据库
  175. self.connect = pymssql.connect(self.ip, self.id, self.pd, 'student_Mis1') # 服务器名,账户,密码,数据库名
  176. self.cursor2 = self.connect.cursor() # 创建游标
  177. sql_revise = "update Students set 密码=%s where 学号=%s" % (self.entry_revise.get(), self.man)
  178.  
  179. if self.connect:
  180. print('连接成功')
  181. print(self.man)
  182. self.cursor2.execute(sql_revise)
  183. self.connect.commit()
  184. print(self.entry_revise.get())
  185. messagebox.showinfo(title='提示', message='密码修改成功!')
  186. self.cursor2.close()
  187. self.connect.close()
  188.  
  189. def resive(self):
  190. self.entry_revise.delete(0, END)
  191.  
  192. if __name__ == '__main__':
  193. root = Tk()
  194. Basedesk(root)
  195. mainloop()

效果图:

1)登录界面

2)功能选择

3)成绩查询

4)密码修改

缺点:1.功能较少,仅查询成绩与修改个人密码。

   2.界面设计较简陋。

     3.数据模式设计还不够完整合理

说明:主要运用Python的pymssql和tkinter库和类定义等方法做出这个嵌入式作业,将于空闲时间继续改进,设计出更合理的数据关系模式。

Python连接SqlServer+GUI嵌入式——学生管理系统1.0的更多相关文章

  1. python学习--python 连接SQLServer数据库(两种方法)

    1. python 学习.安装教程参照: http://www.runoob.com/python/python-tutorial.html 2. 集成开发环境 JetBrains PyCharm C ...

  2. <每日一题>题目7:简单的学生管理系统V1.0

    ''' # 学生管理系统v1.0 # 添加学生的信息 # 删除学生的信息 # 修改学生的信息 # 查看学生的信息 #遍历学生的信息 #退出系统 ''' import json #1 显示操作功能 de ...

  3. python连接sqlserver数据库

    1.准备工作 python3.6连接sqlserver数据库需要引入pymssql模块 pymssql官方:https://pypi.org/project/pymssql/ 没有安装的话需要: pi ...

  4. python连接sqlserver和MySQL实现增删改查

    参考python核心编程 编写一个用户洗牌的脚本,根据用户输入,选择连接sqlserver或者MySQL,创建数据库.表,随机生成数据,并实现增删改查. 其中,为了兼容python2和python3, ...

  5. 用Python连接SQLServer抓取分析数据、监控 (pymssql)

    Python 环境:python3 服务器环境: centos6.5 数据库: Mysql 大概流程:在装有Python服务器,利用pymssql库连接MSSQL生产数据库取出数据然后写进mysql数 ...

  6. python 连接sqlserver: pymssql

    停了一个月,终于还是把这个做了,工作需要!!!在装pymssql时,一直报错,确定了要先装freetds: 1. 安装freetds时报错,搜索到要先进行如下操作: brew unlink freet ...

  7. python连接sqlserver工具类

    上代码: # -*- coding:utf-8 -*- import pymssql import pandas as pd class MSSQL(object): def __init__(sel ...

  8. python课程设计--学生管理系统

    系统要求 1.添加学生 2.删除学生 3.修改学生信息 4.查询学生 5.查看所有学生信息 6.学生信息数据的存储与读取 源码:student.py #coding:utf-8 2 #定义学员类 3 ...

  9. 使用JDBC连接了数据库的图书管理系统2.0

    更新日志: 2019.3.28 数据库版本2.0 1.使用mySQL数据库 2.修改代码使用JDBC连接数据库 3.新增Manage操作类及DBUtils数据库工具类 4.完善代码(封装及方法调用) ...

随机推荐

  1. 10个比较流行的JavaScript面试题

    1.如何理解 JS 中的this关键字? JS 初学者总是对this关键字感到困惑,因为与其他现代编程语言相比,JS 中的这this关键字有点棘手. “this” 一般是表示当前所在的对象,但是事情并 ...

  2. “零基础”如何快速掌握web前端核心技术?

    前端开发要学的知识内容涉及的会很宽泛,虽然说主要是HTML.CSS和JavaScript这些基础知识点,今天想强调一下,学前端开发除了要学这些基础知识外,学员还要在这之上进行延伸和深入的去学,而且互联 ...

  3. 记个mimikatz小坑

    今晚回学校无聊搞搞自己school  实战的时候遇到mimikatz抓密码报错  以前没遇过 记一下(水一篇) 爆ERROR kuhl_m_privilege_simple ; RtlAdjustPr ...

  4. XSS扫盲到漏洞挖掘上手

    复习xss ,也总结一下XSS基础的点到进阶的知识  目录 0x01 XSS扫盲入门 0x02 XSS payload构造 0x03 XSS payload变形进阶   0x01 XSS扫盲入门 XS ...

  5. 代码审计-DedeCMS-V5.7前台任意用户密码重置

    0x01 漏洞影响 该漏洞允许攻击者修改任意前台用户密码. 0x02 漏洞利用条件 1,开启会员模块 2,攻击者拥有一个正常的会员账号 3,目标没有设置安全问题 0x03 漏洞分析 漏洞文件:/mem ...

  6. Spring Boot项目中如何定制HTTP消息转换器

    在构建RESTful数据服务过程中,我们定义了controller.repositories,并用一些注解修饰它们,但是到现在为止我们还没执行过对象的转换--将java实体对象转换成HTTP的数据输出 ...

  7. mac外接显示器 字体发虚解决方案

    描述 今天买的LG性价比之王21:9的2k显示器到了,但是连接mbp后发现,字体发虚,模糊 Macbook 外接显示器默认为 TV 模式,TV 渲染模式下,文字效果非常非常非常差 解决 下载 patc ...

  8. 百万年薪python之路 -- 内置函数练习

    1.整理今天笔记,课上代码最少敲3遍. 2.用列表推导式做下列小题 过滤掉长度小于3的字符串列表,并将剩下的转换成大写字母 lst = [["a","b"],[ ...

  9. C++ 11标准

    C++11,也称为C++0x.为目前C++编程语言的最新正式标准(ISO/IEC 14882:2011).它将取代第二版标准ISO/IEC 14882:2003(第一版ISO/IEC 14882:19 ...

  10. SpringBoot与MybatisPlus3.X整合之动态表名 SQL 解析器(七)

    pom.xml <dependencies> <dependency> <groupId>org.springframework.boot</groupId& ...