Pythonのタイトル。学生情報管理システム - アドバンス版 (GUI + MySQLデータベース)
2022-02-17 08:48:21
Pythonの話題です。学生情報管理システム-上級編 (GUI + MySQLデータベース)
グラフィカルインターフェースを使って表示する X人分の3つの授業(機械学習、Pythonプログラミング、大学院英語)の成績を保存するデータベースを操作するためのリスト、タプル、辞書、マップなどのデータ構造を選び、以下のように実装しなさい。
1. 学生情報の追加
2. 学生情報の修正
3. 学生の削除
4. 生徒の成績を追加する
5. 学生の成績修正
6. 名前または番号による生徒の検索、3クラスの生徒情報および成績の表示、ランキングの表示
7. 学生の成績統計(各コースの平均点、最高点、最低点)
コード内のコメントはかなりわかりやすいので、ここでは説明しませんので、質問があればコメントしてください。
なお、この
- は、データテーブルが存在しない場合にテーブルを作成しますが、自動的に作成されるテーブルは空白です 管理者ユーザー名とパスワード が必要です。 自分自身 で データベースを追加します。 A ( また、記事の最後にあるsqlステートメントを実行すると )、なぜこれが問題なのかというと、これは授業の課題だからで、その時は設計されていない、今またコードを変更するのは億劫だ╭(╯﹏╰)╭......。
- データベースはコードの中にある(It's in the code) データベースのユーザー名とパスワードの変更が必要な箇所2箇所 と 66行目 と 490行目 として構成されています。
# Open database connection Connection test
db = pymysql.connect("localhost", "root", "root", "student")
はそれぞれ ホスト名:localhost、ユーザ名:root、パスワード:root、データベース名:student
以下は、インターフェースのスクリーンショットです。
管理者用インターフェース、追加、削除、変更、チェック機能、さらにはソート機能φ(>ω<*)を備え、タブバーをクリックして素早く試すことができます。
コード
#! /usr/bin/python3
import pymysql
from tkinter import ttk
import tkinter as tk
import tkinter.font as tkFont
from tkinter import * # Graphical interface library
import tkinter.messagebox as messagebox # popups
class StartPage:
def __init__(self, parent_window):
parent_window.destroy() # Destroy the child interface
self.window = tk.Tk() # declaration of initial box
self.window.title('Student Information Management System')
self.window.geometry('300x470') # Here the multiplication is small x
label = Label(self.window, text="Student Information Management System", font=("Verdana", 20))
label.pack(pady=100) # pady=100 length of the interface
Button(self.window, text="Admin Login", font=tkFont.Font(size=16), command=lambda: AdminPage(self.window), width=30, height=2,
fg='white', bg='gray', activebackground='black', activeforeground='white').pack()
Button(self.window, text="Student Login", font=tkFont.Font(size=16), command=lambda: StudentPage(self.window), width=30,
height=2,fg='white', bg='gray', activebackground='black', activeforeground='white').pack()
Button(self.window, text="About", font=tkFont.Font(size=16), command=lambda: AboutPage(self.window), width=30, height=2,
fg='white', bg='gray', activebackground='black', activeforeground='white').pack()
Button(self.window, text='Exit system', height=2, font=tkFont.Font(size=16), width=30, command=self.window.destroy,
fg='white', bg='gray', activebackground='black', activeforeground='white').pack()
self.window.mainloop() # Main message loop
# admin login page
class AdminPage:
def __init__(self, parent_window):
parent_window.destroy() # Destroy the main interface
self.window = tk.Tk() # declaration of initial box
self.window.title('admin login page')
self.window.geometry('300x450') # Here the multiplication is small x
label = tk.Label(self.window, text='Admin Login', bg='green', font=('Verdana', 20), width=30, height=2)
label.pack()
Label(self.window, text='Admin account:', font=tkFont.Font(size=14)).pack(pady=25)
self.admin_username = tk.Entry(self.window, width=30, font=tkFont.Font(size=14), bg='Ivory')
self.admin_username.pack()
Label(self.window, text='Admin password:', font=tkFont.Font(size=14)).pack(pady=25)
self.admin_pass = tk.Entry(self.window, width=30, font=tkFont.Font(size=14), bg='Ivory', show='*')
self.admin_pass.pack()
Button(self.window, text="Login", width=8, font=tkFont.Font(size=12), command=self.login).pack(pady=40)
Button(self.window, text="Return to home", width=8, font=tkFont.
results = cursor.fetchall()
for row in results:
self.id.append(row[0])
self.name.append(row[1])
self.gender.append(row[2])
self.age.append(row[3])
# print(self.id)
# print(self.name)
# print(self.gender)
# print(self.age)
except:
print("Error: unable to fetch data")
messagebox.showinfo('Warning!' , 'Database connection failed! , 'Database connection failed!')
db.close()# Close the database connection
print("test***********************")
for i in range(min(len(self.id), len(self.name), len(self.gender), len(self.age))): # write data
self.tree.insert('', i, values=(self.id[i], self.name[i], self.gender[i], self.age[i]))
for col in self.columns: # Bind function to make table headers sortable
self.tree.heading(col, text=col,
command=lambda _col=col: self.tree_sort_column(self.tree, _col, False))
# Define the top area
# Define the top left region
self.top_title = Label(self.frame_left_top, text="Student Info:", font=('Verdana', 20))
self.top_title.grid(row=0, column=0, columnspan=2, sticky=NSEW, padx=50, pady=10)
self.left_top_frame = tk.Frame(self.frame_left_top)
self.var_id = StringVar() # declare the school number
self.var_name = StringVar() # Declare the name
self.var_gender = StringVar() # Declare gender
self.var_age = StringVar() # Declare the age
# The school number
self.right_top_id_label = Label(self.frame_left_top, text="School number: ", font=('Verdana', 15))
self.right_top_id_entry = Entry(self.frame_left_top, textvariable=self.var_id, font=('Verdana', 15))
self.right_top_id_label.grid(row=1, column=0) # Position setting
self.right_top_id_entry.grid(row=1, column=1)
# Name
self.right_top_name_label = Label(self.frame_left_top, text="Name: ", font=('Verdana', 15))
self.right_top_name_entry = Entry(self.frame_left_top, textvariable=self.var_name, font=('Verdana', 15))
self.right_top_name_label.grid(row=2, column=0) # Position setting
self.right_top_name_entry.grid(row=2, column=1)
# Gender
self.right_top_gender_label = Label(self.frame_left_top, text="Gender: ", font=('Verdana', 15))
self.right_top_gender_entry = Entry(self.frame_left_top, textvariable=self.var_gender,
font=('Verdana', 15))
self.right_top_gender_label.grid(row=3, column=0) # position setting
self.right_top_gender_entry.grid(row=3, column=1)
# Age
self.right_top_gender_label = Label(self.frame_left_top, text="Age: ", font=('Verdana', 15))
self.right_top_gender_entry = Entry(self.frame_left_top, textvariable=self.var_age,
font=('Verdana', 15))
self.right_top_gender_label.grid(row=4, column=0) # Position setting
self.right_top_gender_entry.grid(row=4, column=1)
# Define the top-right area
self.right_top_title = Label(self.frame_right_top, text="action:", font=('Verdana', 20))
self.tree.bind('<Button-1>', self.click) # Left click to get position
self.right_top_button1 = ttk.Button(self.frame_right_top, text='New Student Information', width=20, command=self.new_row)
self.right_top_button2 = ttk.Button(self.frame_right_top, text='Update selected student information', width=20,
command=self.updata_row)
self.right_top_button3 = ttk.Button(self.frame_right_top, text='Delete selected student information', width=20,
command=self.del_row)
# Position setting
self.right_top_title.grid(row=1, column=0, pady=10)
self.right_top_button1.grid(row=2, column=0, padx=20, pady=10)
self.right_top_button2.grid(row=3, column=0, padx=20, pady=10)
self.right_top_button3.grid(row=4, column=0, padx=20, pady=10)
# Overall area positioning
self.frame_left_top.grid(row=0, column=0, padx=2, pady=5)
self.frame_right_top.grid(row=0, column=1, padx=30, pady=30)
self.frame_center.grid(row=1, column=0, columnspan=2, padx=4, pady=5)
self.frame_bottom.grid(row=2, column=0, columnspan=2)
self.frame_left_top.grid_propagate(0
これは、私のコンピュータのデータベースからダンプしたSQLファイルです。
/*
Navicat MySQL Data Transfer
Source Server : mysql
Source Server Version : 50532
Source Host : localhost:3306
Source Database : student
Target Server Type : MYSQL
Target Server Version : 50532
File Encoding : 65001
Date: 2019-11-28 15:09:36
*/
SET FOREIGN_KEY_CHECKS=0;
-- ----------------------------
-- Table structure for `admin_login_k`
-- ----------------------------
DROP TABLE IF EXISTS `admin_login_k`;
CREATE TABLE `admin_login_k` (
`admin_id` char(20) NOT NULL,
`admin_pass` char(20) DEFAULT NULL,
PRIMARY KEY (`admin_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-- ----------------------------
-- Records of admin_login_k
-- ----------------------------
INSERT INTO `admin_login_k` VALUES ('admin', 'admin');
-- ----------------------------
-- Table structure for `student_k`
-- ----------------------------
DROP TABLE IF EXISTS `student_k`;
CREATE TABLE `student_k` (
`id` char(20) NOT NULL,
`name` char(20) DEFAULT NULL,
`gender` char(5) DEFAULT NULL,
`age` char(5) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-- ----------------------------
-- Records of student_k
-- ----------------------------
INSERT INTO `student_k` VALUES ('182085211003', 'a', 'female', '22');
INSERT INTO `student_k` VALUES ('182085211004', 'b', 'female', '18');
INSERT INTO `student_k` VALUES ('182085211005', 'abc', 'male', '23');
INSERT INTO `student_k` VALUES ('182085211006', 'abc', 'female', '24');
INSERT INTO `student_k` VALUES ('182085211008', 'tom', 'male', '23');
INSERT INTO `student_k` VALUES ('182085211009', 'Tom', 'Male', '23');
INSERT INTO `student_k` VALUES ('182085211010', 'Tom', 'Male', '23');
INSERT INTO `student_k` VALUES ('182085211011', 'Tom', 'Male', '23');
INSERT INTO `student_k` VALUES ('1820852110111', 'Tom', 'Male', '23');
INSERT INTO `student_k` VALUES ('182085211012', 'Tom', 'Male', '23');
INSERT INTO `student_k` VALUES ('182085211013', 'Tom', 'Male', '23');
INSERT INTO `student_k` VALUES ('182085211014', 'Tom2', 'Male', '23');
INSERT INTO `student_k` VALUES ('182085211015', 'Tom1', 'Male', '23');
INSERT INTO `student_k` VALUES ('182085211016', 'Tom', 'Male', '23');
INSERT INTO `student_k` VALUES ('182085211017', 'Tom', 'Male', '23');
INSERT INTO `student_k` VALUES ('182085211018', 'Tom', 'Male', '23');
INSERT INTO `student_k` VALUES ('182085211019', 'Tom', 'Male', '23');
INSERT INTO `student_k` VALUES ('182085211020', 'Tom', 'Male', '23');
INSERT INTO `student_k` VALUES ('182085211021', 'Tom', 'Male', '23');
INSERT INTO `student_k` VALUES ('1820852110211', 'Tom', 'Male', '23');
INSERT INTO `student_k` VALUES ('182085211022', 'Tom1', 'Male', '23');
INSERT INTO `student_k` VALUES ('182085211023', 'Tom', 'Male', '23');
INSERT INTO `student_k` VALUES ('182085211024', 'Tom', 'Male', '23');
INSERT INTO `student_k` VALUES ('182085211034', 'Tom', 'Male', '23');
-- ----------------------------
-- Table structure for `stu_login_k`
-- ----------------------------
DROP TABLE IF EXISTS `stu_login_k`;
CREATE TABLE `stu_login_k` (
`stu_id` char(20) NOT NULL,
`stu_pass` char(20) DEFAULT NULL,
PRIMARY KEY (`stu_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-- ----------------------------
-- Records of stu_login_k
-- ----------------------------
INSERT INTO `stu_login_k` VALUES ('182085211000', '123456');
-- ----------------------------
-- Table structure for `t_course`
-- ----------------------------
DROP TABLE IF EXISTS `t_course`;
CREATE TABLE `t_course` (
`SNO` char(255) NOT NULL,
`COURSE` char(255) DEFAULT NULL,
`CREDIT` char(255) DEFAULT NULL,
`GRADE` char(255) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-- ----------------------------
-- Records of t_course
-- ----------------------------
INSERT INTO `t_course` VALUES ('08300205', 'Programming', '4', '88');
INSERT INTO `t_course` VALUES ('08300205', 'Database', '2.5', '90');
INSERT INTO `t_course` VALUES ('08300205', 'mechanics', '5', '92');
INSERT INTO `t_course` VALUES ('08080929', 'Database', '2.5', '85');
INSERT INTO `t_course` VALUES ('09350124', 'database', '2.5', '92');
INSERT INTO `t_course` VALUES ('09620233', 'database', '2.5', '80');
INSERT INTO `t_course` VALUES ('09300218', 'database', '2.5', '78');
INSERT INTO `t_course` VALUES ('09010122', 'database', '2.5', '87');
INSERT INTO `t_course` VALUES ('08080929', 'Programming', '4', '86');
INSERT INTO `t_course` VALUES ('09010122', 'Programming', '4', '80');
INSERT INTO `t_course` VALUES ('08300516', 'Programming', '4', '76');
-- ----------------------------
-- Table structure for `t_st`
-- ----------------------------
DROP TABLE IF EXISTS `t_st`;
CREATE TABLE `t_st` (
`SNO` char(11) NOT NULL,
`SNAME` char(255) DEFAULT NULL,
`SSEX` char(255) DEFAULT NULL,
`AGE` char(255) DEFAULT NULL,
`DEPT` char(255) DEFAULT NULL,
PRIMARY KEY (`SNO`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-- ----------------------------
-- Records of t_st
-- ----------------------------
INSERT INTO `t_st` VALUES ('08080929', 'Liu Chaoshi', 'Male', '19', 'Computer Application Technology');
INSERT INTO `t_st` VALUES ('08300205', 'Li Yuanyuan', 'F', '19', 'Software Engineering');
INSERT INTO `t_st` VALUES ('09300218', 'Wang Haichao', 'M', '19', 'Software Engineering');
INSERT INTO `t_st` VALUES ('09350124', 'Wang Tong', 'F', '19', 'Principles of Communication');
INSERT INTO `t_st` VALUES ('09620233', 'Chen Xiaoli', 'F', '21', 'Communication Engineering');
便利だと思ったら、行く前に「いいね!」をクリック^_^。
関連
-
PythonがNameError: name '_name_' is not definedのようなエラーを発生させる。
-
Pythonエラー解決] 'urllib2'という名前のモジュールがない解決方法
-
Pythonでナンバープレート自動認識システムを作ろう!楽しくて実用的です。
-
Pythonでフォルダをトラバースして大きなファイルを探す
-
OperationalError: データベースファイルを開くことができない Solution
-
Python3 はエンコーディングの問題を解決します: UnicodeEncodeError: 'gbk' codec can't encode character '\xa9' in position
-
Pycharmの未解決の参照問題
-
Pythonです。相対インポート 相対パス ValueError: パッケージ以外での相対インポートの試み
-
plt.acorr() 関数の使用例 - ValueError: object too deep for desired array (オブジェクトが深すぎて、必要な配列が得られない)
-
AttributeError: 'dict' オブジェクトには 'iteritems' という属性がありません。
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
python error TypeError: 'bool' object is not subscriptable
-
SyntaxError: 構文が無効です。
-
AttributeError: モジュール 'tensorflow' には 'enable_eager_execution' という属性がない。
-
AttributeError: 'NoneType' オブジェクトには 'group' という属性がありません。
-
python マルチスレッド操作エラー。logger "websocket "のハンドラが見つかりませんでした。
-
Python27 PILソリューションという名前のモジュールがない
-
ImportError: pandas という名前のモジュールがない 問題が解決される
-
ImportError: scipy'という名前のモジュールがありません。
-
プログラム実行中にPythonの例外が発生しました。TypeError: 'NoneType' オブジェクトは呼び出し可能ではありません。
-
Python2.7のエンコード問題:UnicodeDecodeError: 'ascii' codec can't decode byte 0xe8 in position... 解決方法