符合如下要求怎么写
我有现成代码,修改就行了,给你参考链接 https://blog.csdn.net/ly1358152944/article/details/127305819?spm=1001.2014.3001.5502
给你个参考吧,https://ask.csdn.net/questions/7545121,这种题目都每一届学生都有
可以参考一下:
https://blog.csdn.net/swy66/article/details/126444605
建议题主,看完这篇博文,在做评判【python学生成绩管理系统【完整版】】,链接:https://hacker707.blog.csdn.net/article/details/123532947?spm=1001.2101.3001.6650.2&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7ERate-3-123532947-blog-127305819.pc_relevant_3mothn_strategy_and_data_recovery&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7ERate-3-123532947-blog-127305819.pc_relevant_3mothn_strategy_and_data_recovery&utm_relevant_index=4
【这篇博文,适合小白,简单易懂,条理清晰。】
如有帮助,望采纳
# import pickle
import os
stulist = [] # 新建学生列表存储学生对象
class stu:
def __init__(self):
self.name = ""
self.id = ""
self.score1 = 0 # 语文
self.score2 = 0 # 数学
self.score3 = 0 # 英语
self.sum = 0 # 总分
def sumscore(self):
self.sum = self.score1 + self.score2 + self.score3
return self.sum
def output(self, file_object):
file_object.write(self.name)
file_object.write(" ")
file_object.write(self.id)
file_object.write(" ")
file_object.write(str(self.score1))
file_object.write(" ")
file_object.write(str(self.score2))
file_object.write(" ")
file_object.write(str(self.score3))
file_object.write(" ")
file_object.write(str(self.sum))
file_object.write("\n")
# 添加学生信息
def addstu():
student = stu()
student.name = input("请输入学生姓名:")
student.id = input("请输入学生学号:")
if (cfindstu(student.id) != -1):
print("该学生已存在,添加失败")
return False
student.score1 = int(input("请输入学生语文成绩:"))
student.score2 = int(input("请输入学生数学成绩:"))
student.score3 = int(input("请输入学生英语成绩:"))
stulist.append(student)
print("添加成功!")
return True
# 查找学生信息
def findstu():
idin = input("请输入学生学号:")
for i in range(0, len(stulist)):
if (idin == stulist[i].id):
print("该学生信息如下:")
print("学号:", stulist[i].id, end="\t|")
print("姓名:", stulist[i].name, end="\t|")
print("语文成绩:", stulist[i].score1, end="\t|")
print("数学成绩:", stulist[i].score2, end="\t|")
print("英语成绩:", stulist[i].score3, end="\t|")
print("总成绩:", stulist[i].sumscore())
return True
print("没有该学生信息")
return False
# 查重 已存在:返回列表中坐标;不存在:返回-1
def cfindstu(idin):
for i in range(0, len(stulist)):
if (idin == stulist[i].id):
return i
return -1
# 查看所有学生信息
def checkstu():
print("学生信息如下:")
print("=" * 100) # 换行
if len(stulist) == 0:
print("当前无学生信息")
for i in range(0, len(stulist)):
print("学号:", stulist[i].id, end="\t|")
print("姓名:", stulist[i].name, end="\t|")
print("语文成绩:", stulist[i].score1, end="\t|")
print("数学成绩:", stulist[i].score2, end="\t|")
print("英语成绩:", stulist[i].score3, end="\t|")
print("总成绩:", stulist[i].sumscore())
print("-" * 100) # 换行
# 删除学生信息
def delstu():
idin = input("请输入你要删除学生的学号:")
# 利用查重函数返回删除学生在列表中坐标
result = cfindstu(idin)
if result == -1:
print("该学生不存在")
else:
for i in range(result, len(stulist) - 1):
stulist[i] = stulist[i + 1]
del stulist[len(stulist) - 1]
print("删除成功")
# 修改学生信息
def changestu():
idin = input("请输入你要修改学生的学号:")
result = cfindstu(idin)
if result == -1:
print("该学生不存在")
else:
id = input("请重新输入学生id:")
if (cfindstu(id) != -1):
print("该id已存在,修改失败")
return False
stulist[result].id = id
stulist[result].name = input("请重新输入学生姓名:")
stulist[result].score1 = int(input("请重新输入学生语文成绩:"))
stulist[result].score2 = int(input("请重新输入学生数学成绩:"))
stulist[result].score3 = int(input("请重新输入学生英语成绩:"))
print("修改成功,按“5”查看")
# 按学生成绩排序,采用插入法
def sortstu():
for i in range(0, len(stulist) - 1):
for j in range(i + 1, 0, -1):
if stulist[j].sum > stulist[j - 1].sum:
tmp = stu()
tmp = stulist[j - 1]
stulist[j - 1] = stulist[j]
stulist[j] = tmp
print("排序成功!")
checkstu()
# 将学生信息保存到文件
def writeinfo():
if os.path.exists('students.txt'):
os.remove('students.txt')
i = 0
while i < len(stulist):
file_object = open("students.txt", "a")
stulist[i].output(file_object)
file_object.close()
i += 1
# 将学生信息读取到内存
def readinfo():
if os.path.exists('students.txt'):
file_object = open('students.txt', 'r')
for line in file_object:
stu1 = stu()
line = line.strip("\n")
s = line.split(" ")
stu1.name = s[0]
stu1.id = s[1]
stu1.score1 = int(s[2])
stu1.score2 = int(s[3])
stu1.score3 = int(s[4])
stu.sum = int(s[5])
stulist.append(stu1)
file_object.close()
print("加载成功")
else:
print("没有文件信息,加载失败")
def main():
print("欢迎来到学生成绩管理系统")
print("*" * 30)
print("-" * 7, "菜单", "-" * 7)
print("1.添加学生信息")
print("2.删除学生信息")
print("3.修改学生信息")
print("4.查找学生信息.")
print("5.察看所有学生信息")
print("6.学生成绩排序")
print("7.推出系统")
print("正在加载文件信息···")
readinfo() # 读取文件信息
while True:
writeinfo() # 保存到文件
a = input("请选择:")
if (a == "1"):
addstu()
elif a == "2":
delstu()
elif a == "3":
changestu()
elif (a == "4"):
findstu()
elif (a == "5"):
checkstu()
elif a == "6":
sortstu()
elif a == "7":
print("已退出!")
print("文件信息已更新!")
break;
else:
print("选择有误,请重新选择")
main()
import random
from tkinter import *
import customtkinter
import tkinter.ttk as ttk
from icecream import ic
import tkinter.messagebox as tkMessageBox
import sqlite3
#function to define database
def Database():
global conn, cursor
#creating contact database
conn = sqlite3.connect("contact.db")
cursor = conn.cursor()
#creating REGISTRATION table
cursor.execute(
"CREATE TABLE IF NOT EXISTS REGISTRATION (RID INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, FNAME TEXT, LNAME TEXT, GENDER TEXT, ADDRESS TEXT, CONTACT TEXT)")
#defining function for creating GUI Layout
def DisplayForm():
#creating window
display_screen = customtkinter.CTk()
#setting width and height for window
display_screen.geometry("900x400")
#setting title for window
display_screen.title("学生成绩管理")
global tree
global SEARCH
global fname,lname,gender,address,contact
SEARCH = StringVar()
fname = StringVar()
lname = StringVar()
gender = StringVar()
address = StringVar()
contact = StringVar()
#creating frames for layout
#topview frame for heading
TopViewForm = customtkinter.CTkFrame(display_screen, width=600, bd=1, relief=SOLID)
TopViewForm.pack(side=TOP, fill=X)
#first left frame for registration from
LFrom = customtkinter.CTkFrame(display_screen, width=350, bg="#15244C")
LFrom.pack(side=LEFT, fill=Y)
#seconf left frame for search form
LeftViewForm = customtkinter.CTkFrame(display_screen, width=500, bg="#0B4670")
LeftViewForm.pack(side=LEFT, fill=Y)
#mid frame for displaying lnames record
MidViewForm = customtkinter.CTkFrame(display_screen, width=600)
MidViewForm.pack(side=RIGHT)
#label for heading
lbl_text = customtkinter.CTkLabel(TopViewForm, text="Contact Management System", text_font=('verdana', 18), width=600,bg="cyan")
lbl_text.pack(fill=X)
#creating registration form in first left frame
customtkinter.CTkLabel(LFrom, text="First Name ", text_font=("Arial", 12),bg="#15244C",fg="white").pack(side=TOP)
customtkinter.CTkEntry(LFrom,text_font=("Arial",10,"bold"),textvariable=fname).pack(side=TOP, padx=10, fill=X)
customtkinter.CTkLabel(LFrom, text="Last Name ", text_font=("Arial", 12),bg="#15244C",fg="white").pack(side=TOP)
customtkinter.CTkEntry(LFrom, text_font=("Arial", 10, "bold"),textvariable=lname).pack(side=TOP, padx=10, fill=X)
customtkinter.CTkLabel(LFrom, text="Gender ", text_font=("Arial", 12),bg="#15244C",fg="white").pack(side=TOP)
#Entry(LFrom, font=("Arial", 10, "bold"),textvariable=gender).pack(side=TOP, padx=10, fill=X)
gender.set("Select Gender")
content={'Male','Female'}
ic(content)
customtkinter.CTkOptionMenu(master=LFrom,values=['Male','Female']).pack(side=TOP, padx=10, fill=X)
customtkinter.CTkLabel(LFrom, text="Address ", text_font=("Arial", 12),bg="#15244C",fg="white").pack(side=TOP)
customtkinter.CTkEntry(LFrom, text_font=("Arial", 10, "bold"),textvariable=address).pack(side=TOP, padx=10, fill=X)
customtkinter.CTkLabel(LFrom, text="Contact ", text_font=("Arial", 12),bg="#15244C",fg="white").pack(side=TOP)
customtkinter.CTkEntry(LFrom, text_font=("Arial", 10, "bold"),textvariable=contact).pack(side=TOP, padx=10, fill=X)
customtkinter.CTkButton(LFrom,text="Submit",text_font=("Arial", 10, "bold"),command=register,bg_color="#15244C",fg_color="white").pack(side=TOP, padx=10,pady=5, fill=X)
#creating search label and entry in second frame
lbl_txtsearch = customtkinter.CTkLabel(LeftViewForm, text="Enter fname to Search", text_font=('verdana', 10),bg="#0B4670")
lbl_txtsearch.pack()
#creating search entry
search = customtkinter.CTkEntry(LeftViewForm, textvariable=SEARCH, text_font=('verdana', 15), width=10)
search.pack(side=TOP, padx=10, fill=X)
#creating search button
btn_search = customtkinter.CTkButton(LeftViewForm, text="Search", command=SearchRecord,bg_color="cyan")
btn_search.pack(side=TOP, padx=10, pady=10, fill=X)
#creating view button
btn_view = customtkinter.CTkButton(LeftViewForm, text="View All", command=DisplayData,bg="cyan")
btn_view.pack(side=TOP, padx=10, pady=10, fill=X)
#creating reset button
btn_reset = customtkinter.CTkButton(LeftViewForm, text="Reset", command=Reset,bg="cyan")
btn_reset.pack(side=TOP, padx=10, pady=10, fill=X)
#creating delete button
btn_delete = customtkinter.CTkButton(LeftViewForm, text="Delete", command=Delete,bg="cyan")
btn_delete.pack(side=TOP, padx=10, pady=10, fill=X)
#create update button
btn_delete = customtkinter.CTkButton(LeftViewForm, text="Update", command=Update,bg="cyan")
btn_delete.pack(side=TOP, padx=10, pady=10, fill=X)
#setting scrollbar
scrollbarx = customtkinter.CTkScrollbar(MidViewForm, orientation=HORIZONTAL)
scrollbary = customtkinter.CTkScrollbar(MidViewForm, orientation=VERTICAL)
tree = ttk.Treeview(MidViewForm,columns=("Student Id", "Name", "Contact", "Email","Rollno","Branch"),
selectmode="extended", height=100, yscrollcommand=scrollbary.set, xscrollcommand=scrollbarx.set)
scrollbary.configure(command=tree.yview)
scrollbary.pack(side=RIGHT, fill=Y)
scrollbarx.configure(command=tree.xview)
scrollbarx.pack(side=BOTTOM, fill=X)
#setting headings for the columns
tree.heading('Student Id', text="Id", anchor=W)
tree.heading('Name', text="FirstName", anchor=W)
tree.heading('Contact', text="LastName", anchor=W)
tree.heading('Email', text="Gender", anchor=W)
tree.heading('Rollno', text="Address", anchor=W)
tree.heading('Branch', text="Contact", anchor=W)
#setting width of the columns
tree.column('#0', stretch=NO, minwidth=0, width=0)
tree.column('#1', stretch=NO, minwidth=0, width=100)
tree.column('#2', stretch=NO, minwidth=0, width=150)
tree.column('#3', stretch=NO, minwidth=0, width=80)
tree.column('#4', stretch=NO, minwidth=0, width=120)
tree.pack()
DisplayData()
#function to update data into database
def Update():
Database()
#getting form data
fname1=fname.get()
lname1=lname.get()
gender1=gender.get()
address1=address.get()
contact1=contact.get()
#applying empty validation
if fname1=='' or lname1==''or gender1=='' or address1==''or contact1=='':
tkMessageBox.showinfo("Warning","fill the empty field!!!")
else:
#getting selected data
curItem = tree.focus()
contents = (tree.item(curItem))
selecteditem = contents['values']
#update query
conn.execute('UPDATE REGISTRATION SET FNAME=?,LNAME=?,GENDER=?,ADDRESS=?,CONTACT=? WHERE RID = ?',(fname1,lname1,gender1,address1,contact1, selecteditem[0]))
conn.commit()
tkMessageBox.showinfo("Message","Updated successfully")
#reset form
Reset()
#refresh table data
DisplayData()
conn.close()
def register():
Database()
#getting form data
fname1=fname.get()
lname1=lname.get()
gender1=gender.get()
address1=address.get()
contact1=contact.get()
# import random
# fname1 = random.choice(['赵','钱', '张','屈'])
# lname1 = random.choice(['yi','as', 'asd','Fad'])
# gender1 = random.choice(['yi123','as45', 'a45sd','Fad45'])
# address1 = random.choice(['12312312312','1231231as', 'a12312sd','F123123ad'])
# contact1 = random.choice([1,2,4,5,6,7,9])
#applying empty validation
if fname1=='' or lname1==''or gender1=='' or address1==''or contact1=='':
tkMessageBox.showinfo("Warning","fill the empty field!!!")
else:
#execute query
conn.execute('INSERT INTO REGISTRATION (FNAME,LNAME,GENDER,ADDRESS,CONTACT) \
VALUES (?,?,?,?,?)',(fname1,lname1,gender1,address1,contact1));
conn.commit()
# tkMessageBox.showinfo("Message","Stored successfully")
#refresh table data
# DisplayData()
conn.close()
def Reset():
#clear current data from table
tree.delete(*tree.get_children())
#refresh table data
DisplayData()
#clear search text
SEARCH.set("")
fname.set("")
lname.set("")
gender.set("")
address.set("")
contact.set("")
def Delete():
#open database
Database()
if not tree.selection():
tkMessageBox.showwarning("Warning","Select data to delete")
else:
result = tkMessageBox.askquestion('Confirm', 'Are you sure you want to delete this record?',
icon="warning")
if result == 'yes':
curItem = tree.focus()
contents = (tree.item(curItem))
selecteditem = contents['values']
tree.delete(curItem)
cursor=conn.execute("DELETE FROM REGISTRATION WHERE RID = %d" % selecteditem[0])
conn.commit()
cursor.close()
conn.close()
#function to search data
def SearchRecord():
#open database
Database()
#checking search text is empty or not
if SEARCH.get() != "":
#clearing current display data
tree.delete(*tree.get_children())
#select query with where clause
cursor=conn.execute("SELECT * FROM REGISTRATION WHERE FNAME LIKE ?", ('%' + str(SEARCH.get()) + '%',))
#fetch all matching records
fetch = cursor.fetchall()
#loop for displaying all records into GUI
for data in fetch:
tree.insert('', 'end', values=(data))
cursor.close()
conn.close()
#defining function to access data from SQLite database
def DisplayData():
#open database
Database()
#clear current data
tree.delete(*tree.get_children())
#select query
cursor=conn.execute("SELECT * FROM REGISTRATION")
#fetch all data from database
fetch = cursor.fetchall()
#loop for displaying all data in GUI
for data in fetch:
tree.insert('', 'end', values=(data))
tree.bind("<Double-1>",OnDoubleClick)
cursor.close()
conn.close()
def OnDoubleClick(self):
#getting focused item from treeview
curItem = tree.focus()
contents = (tree.item(curItem))
selecteditem = contents['values']
#set values in the fields
fname.set(selecteditem[1])
lname.set(selecteditem[2])
gender.set(selecteditem[3])
address.set(selecteditem[4])
contact.set(selecteditem[5])
# for i in range(10_0000):
# print(i)
# register()
DisplayForm()
if __name__=='__main__':
#Running Application
mainloop()
凑和改去吧
CSDN上有很多相关系统的实现程序,可以去搜索一下作为参考。