摘要
随着科学技术的不断发展,应用计算机技术来实现对学生成绩的管理成为目前学校的主要手段。随着科技的日新月异,程序的简单化的广泛化成为了目前程序的重要性。
本系统是基于Python语言,通过对成绩管理工作的日常分析,确定了具体的研究目标以及业务功能。采用了结构化的设计方法设计了一个简单的框架,通过编程实现了对成绩信息的添加、修改、删除、查询,并且使用csv文件作为存储信息。
1.引言
1.1 背景
由于本学期开设了python课,同时也开设了软件工程的课。于是我与另外的两名同学组队以python语言为主体的,结合数据库知识,一起做了一个航空管理系统。
又由于现在python期末作业也需要每人做一个项目,正好我在软件工程项目中,我负责是做界面的部分,所以我自己又用python做了现在的这个成绩管理系统出来。
1.2 意义
做这个系统不仅锻炼了我的编程能力,还让我对python的理解更加了一层楼。懂得了python的强大地方除了它的简便和灵活外,还有的就是它提供了很多模块供我们使用,这让我们的学习兴趣能不断加强。
1.3 相关研究
成绩管理系统是使用计算机软件系统管理成绩的一种方式。目前国内基本所有的学校都已经实现了使用计算机软件来管理成绩的智能化管理。但一个简便的软件,方便好用成为了如今成绩管理系统的趋势,传统的成绩管理系统界面复杂操作困难,不适合任何人包括计算机小白的使用。
2. 系统结构
该系统主要有三个结构组成:登录页面、主页面、信息保存
两个页面都是使用python中的Tkinter库来创造,Tkinter库(模块)是Python的标准Tk GUI 工具包的接口。Tkinter可以在大多数的Unix和Windows平台下使用。TK8.0的后续版本可以实现本地窗口风格,并良好地运行在绝大多数平台中。Tkinter 是 Python 的标准 GUI 库。Python 使用 Tkinter 可以快速的创建 GUI 应用程序。
由于 Tkinter 是内置到 python 的安装包中、只要安装好 Python 之后就能 import Tkinter 库、而且 IDLE 也是用 Tkinter 编写而成、对于简单的图形界面 Tkinter 还是能应付自如。
Tkinter的提供各种控件,如按钮,标签和文本框,一个GUI应用程序中使用。
信息保存是使用了csv文件来保存,该种文件由任意数目的记录组成,记录间以某种换行符分隔;每条记录由字段组成,字段间的分割符是其它字符或字符串,最常见的是逗号或制表符
CSV没有通用标准规范。不同的程序间CSV的标准有差异很常见,这可能导致交互操作困难。互联网通信的CSV文件,资料的IETF文件( 符合RFC 4180于2005年10月)介绍了格式的“text/csv格式”MIME类型登记的IANA负责。另一个相关的规格是由派出文字其中也包括CSV格式。
3. 实现代码
3.1 登陆界面
首先创造的是主函数。主函数里面引入了tkinter库和登陆界面的类,创建了一个tkinter对象root,并且给它设置了标题,然后将root作为参数给LoginPage这个类
1. from tkinter import *
2. from LoginPage import *
3.
4.
5. root = Tk()
6. root.title('Python成绩管理系统by Joe Lau')
7. LoginPage(root)
8. root.mainloop()
接下来是登录界面的代码。登陆界面是创造了一个LoginPage的类,在类的构造函数里面设置好框的大小,然后调用createPage函数创造各个tkinter的部件。再利用register函数来执行注册操作,loginCheck函数来实现登录
1. from tkinter import *
2. from tkinter.messagebox import *
3. from MainPage import *
4.
5. class LoginPage(object):
6. def __init__(self, master=None):
7. self.root = master #定义内部变量root
8. self.root.geometry('%dx%d' % (300, 200)) #设置窗口大小
9. self.username = StringVar()
10. self.password = StringVar()
11. self.createPage()
12.
13. def createPage(self):
14. self.page = Frame(self.root) #创建Frame
15. self.page.pack()
16. Label(self.page).grid(row=0, stick=W)
17. Label(self.page, text = '账户: ').grid(row=1, stick=W, pady=10)
18. Entry(self.page, textvariable=self.username).grid(row=1, column=1, stick=E)
19. Label(self.page, text = '密码: ').grid(row=2, stick=W, pady=10)
20. Entry(self.page, textvariable=self.password, show='*').grid(row=2, column=1, stick=E)
21. Button(self.page, text='登陆', command=self.loginCheck).grid(row=3, column=0, pady=5)
22. Button(self.page, text='注册', command=self.register).grid(row=3, column=1, pady=5)
23. Button(self.page, text='退出', command=self.page.quit).grid(row=3, column=2, pady=5)
24.
25.
26. def loginCheck(self):
27. name = self.username.get()
28. password = self.password.get()
29. if self.isLegalUser(name,password):
30. self.page.destroy()
31. MainPage(self.root)#进入主界面
32. else:
33. showinfo(title='错误', message='账号或密码错误!')
34.
35. def isLegal(self,string):
36. alp = ['a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z','0','1','2','3','4','5','6','7','8','9']
37. for i in string:
38. if i in alp:
39. pass
40. else:
41. return False
42. return True
43.
44. def isLegalUser(self,name,password):#验证账号
45. f = open('账号密码.csv','r',encoding='utf-8')#打开csv文件,是用csv文件来存储账号密码信息
46. for line in f.readlines():#读出每一行
47. info = line[:-1].split(",")#获取账号和密码
48. if len(info)<2:#错误
49. break
50. if info[0].strip()==name and info[1].strip()==password :#如果获取到的账号和密码复合输入的情况
51. f.close()#关闭文件
52. return True
53. return False
54.
55.
56. def register(self