求问Python学生成绩管理系统的问题

符合如下要求怎么写

img

我有现成代码,修改就行了,给你参考链接 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()

凑和改去吧

img

CSDN上有很多相关系统的实现程序,可以去搜索一下作为参考。

img