一、前言:
这是个学生成绩信息系统的窗口化,结合了sqlite3。
刚写好登录注册窗口,会陆续更新。
窗口设计用的是Qtdesinger,可参考:记录分享学习Qt设计师的文章及简介
1、实现效果
2、亮点:
1、能在出错的时候在注册页面显示错误信息,Label处的字体会变化,且标红;
2、账号输入框后有一个图标(action)能进行判断;
3、在注册成功的时候能创建一个独属于他的数据库。
3、思路简介:
(1)传统的登录界面和注册界面;
(2)在注册窗口能进行各种限定,比如账号和密码的限定长度,以及验证两次密码的一致(后来美化了消息提示,用了四个用于提示的标签);
(3)注册成功将往账号数据库里面添加这个账号的信息,并创建一个独属于这个账号的数据库;
(4)在账号窗口能进行验证账号的正确性;
(5)连接两个窗口的相互跳转:
①登录窗口能打开注册窗口,此时登录窗口 不 自动关闭;
②注册成功后 自动关闭 注册窗口,回到登录窗口,即使之前关掉了登录窗口,重新打开即可。
二、数据库
1、思路:
(1)一个数据库用来存放系统的账号密码和用户名信息;
(2)一个账号注册成功就多一个独属于它的数据库,存放学生成绩信息。
2、代码:
import sqlite3
(1)创建系统账号的数据库
def create_account_db( db_name):
"""创建系统账号的数据库"""
cn = sqlite3.connect( db_name)
c = cn.cursor()
sql = '''CREATE TABLE Accounts(
Account CHAR(15) PRIMARY KEY,
Aname CHAR(4) NOT NULL,
Password CHAR(15) NOT NULL
);'''
c.execute(sql)
cn.commit()
cn.close()
(2)创建学生信息的数据库
def create_stu_db( db_name):
"""创建学生信息的数据库"""
cn = sqlite3.connect( db_name)
c = cn.cursor()
sql = '''CREATE TABLE Students(
Sno CHAR(10) PRIMARY KEY,
Sname NVARCHAR(4) NOT NULL,
Sgender NCHAR(1)
CHECK( Sgender='男' or Sgender='女')
default '男',
Sbirth TEXT,
Sclass NVARCHAR(8),
Snative NVARCHAR(20)
);'''#学生表
c.execute(sql)
sql = '''CREATE TABLE Courses(
Cno CHAR(8) PRIMARY KEY,
Cname NVARCHAR(20) NOT NULL,
Chours INTEGER,
Ccredit INTEGER
);'''#课程表
c.execute(sql)
sql = '''CREATE TABLE Reports(
Sno CHAR(10),
Cno CHAR(8),
Racademicyear INT,
Rterm INT,
Grade INT,
PRIMARY KEY (Sno, Cno)
);'''#成绩表
c.execute(sql)
cn.commit()
cn.close()
三、视图代码
注册和登录窗口的视图代码:
窗口设计用的是Qtdesinger,可参考:记录分享学习Qt设计师的文章及简介
用ui文件转换成py文件,再修了一下。为了节省文章长度就不列出,如果需要的话,可以直接下载,上传了资源。
下载注册和登录窗口的文件:
PyQt5学生成绩信息系统(一):登录和注册窗口
(2022/8/3更新:这文章好多人看啊,我把这个注册登录用到的文件都塞到这个资源里了,包括用pyqt做的ui文件,ui文件转的py文件,还有这篇文章的代码的py文件,改改就能用吧,大概…要是这文章看的人再多一点,等有空了说不定就更新这个系列了,好久之前整个系统做是做好了,虽然有点烂,主要忘记了这些代码是做啥子的了…)
四、逻辑代码
1、需要导入的包:
import sys
import os
import sqlite3 #用于数据库
from PyQt5.QtWidgets import QApplication, QWidget, QMessageBox, QAction