精华内容
下载资源
问答
  • python成绩录入系统
    2021-09-12 11:39:51

            上次我写了一个python的成绩系统,用vscode写的,没发布,(因为bug有点多)最近学了try语句,就改了改,发在这里,有需要的自取

    '''
    程序:成绩单2.0版
    作者:夏宇彬
    编写日期:2021年7月14日
    '''
    class Student:
        def __init__(self):
            self.name = ""
            self.ID = ""
            self.score1 = 0
            self.score2 = 0
            self.score3 = 0
    
        def getSum(self):
            self.total = self.score1 + self.score2 + self.score3
    
        def printStudent(self):
            print(self.ID,"\t",self.name,"\t",self.score1,"\t",self.score2,"\t",self.score3,"\t",self.total)
    def showInfo():
        print("-" * 30)
        print(" 学生成绩系统 ")
        print(" 1.添加学生的信息")
        print(" 2.删除学生的信息")
        print(" 3.修改学生的信息")
        print(" 4.查询学生的信息")
        print(" 5.列出所有学生的信息")
        print(" 6.退出系统")
        print("-" * 30)
    def hasRecord(sList,sID):
        result = -1
        i = 0
        for temp in sList:
            if temp.ID == sID:
                result = i
    def getScore(subject,action):
        try:
            score=float(input("请输入"+subject+"成绩:"))            
        except:
            print ("输入的不是数字,"+action+"失败!")
            return -1                        
        if score <= 100 and score >= 0 :
            return score
        else:
            print ("输入的"+subject+"成绩有错误,"+action+"失败!")
            return -1
    def updateStudent(student):
        while True:
            try:    
                alterNum = int(input(" 1.修改姓名\n 2.修改学号 \n 3.修改语文成绩 \n 4.修改数学成绩 \n 5.修改英语成绩 \n 6.退出修改 \n"))
            except:
                print("输入有误,。请输入编号1到6")
                continue
            if alterNum == 1:
                newName = input("请输入更改后的姓名")
                student.name = newName
                print("姓名修改成功")
                break
            elif alterNum == 2:
                newId = input("请输入更改后的学号")
                newIndex = hasRecord(studentList,newId)
                if newIndex > -1:
                    print("输入学号不可重复,修改失败!")
                else:
                    student.ID = newId
                    print("学号修改成功")
                break
            elif alterNum == 3:
                score1 = getScore("语文", "修改")
                if score1 > -1:
                    student.score1 = score1
                    student.getSum()
                    print("语文成绩修改成功!")
                    break
            elif alterNum == 4:
                score2 = getScore("数学", "修改")
                if score2 > -1:
                    student.score2 = score2
                    student.getSum()
                    print("数学成绩修改成功!")
                    break
            elif alterNum == 5:
                score3 = getScore("英语", "修改")
                if score3 > -1:
                    student.score3 = score3
                    student.getSum()
                    print("英语成绩修改成功!")
                    break
            elif alterNum == 6:
                break
            else:
                print("输入错误请重新输入")
        WriteToText(studentList)  
    def LoadFromText(sList):
        print("加载已有数据......")
        try:
           txtFile = open("students.txt","r")
           while True:
                line = txtFile.readline()
                if not line or line.strip()=="":
                   break
                else:
                    s = line.split("  ")
                    stu = Student()
                    stu.ID = s[0]
                    stu.name = s[1]
                    stu.score1 = float(s[2])
                    stu.score2 = float(s[3])
                    stu.score3 = float(s[4])
                    stu.total = float(s[5])
                    sList.append(stu)
        except:
            txtFile = open("students.txt","w")
    
        txtFile.close()
        print("加载成功!")
    def AddToText(stu):
        txtFile = open("students.txt","a")
        txtFile.write(stu.ID)
        txtFile.write("  ")
        txtFile.write(stu.name)
        txtFile.write("  ")
        txtFile.write(str(stu.score1))
        txtFile.write("  ")
        txtFile.write(str(stu.score2))
        txtFile.write("  ")
        txtFile.write(str(stu.score3))
        txtFile.write("  ")
        txtFile.write(str(stu.total))
        txtFile.write("\n")
        txtFile.close()
    def WriteToText(sList):
        txtFile = open("students.txt","w")
        for stu in sList:
            txtFile.write(stu.ID)
            txtFile.write("  ")
            txtFile.write(stu.name)
            txtFile.write("  ")
            txtFile.write(str(stu.score1))
            txtFile.write("  ")
            txtFile.write(str(stu.score2))
            txtFile.write("  ")
            txtFile.write(str(stu.score3))
            txtFile.write("  ")
            txtFile.write(str(stu.total))
            txtFile.write("\n")
        txtFile.close()
    studentList = []
    LoadFromText(studentList)
    while True:
        showInfo()
    
        try:
            key = int(input("请选择功能(输入序号1到6):"))
        except:
            print("您的输入有误,请输入序号1到6")
            continue
    
        if key == 1:
            print("您选择了添加学生信息功能")
            name = input("请输入姓名:")
            stuId = input("请输入学号(不可重复):")
    
            index = hasRecord(studentList, stuId)
            if index >-1:
                print("输入学号重复,添加失败!")
                continue
            else:
                newStudent = Student()
                newStudent.name = name
                newStudent.ID = stuId
                score1 = getScore("语文", "添加")
                if score1 > -1:
                    newStudent.score1 = score1
                else:
                    continue
                score2 = getScore("数学", "添加")
                if score2 > -1:
                    newStudent.score2 = score2
                else:
                    continue
                score3 = getScore("英语", "添加")
                if score3 > -1:
                    newStudent.score3 = score3
                else:
                    continue
    
                newStudent.getSum()
                studentList.append(newStudent)
                print(newStudent.name +"的成绩录入成功!")
        elif key == 2:
            print("您选择了删除学生信息功能")
            stuId = input("请输入要删除的学号:")
            index = hasRecord(studentList, stuId)
            if index > -1:
                del studentList[index]
                WriteToText(studentList)
                print("删除成功!")
            else:
                print("没有此学生学号,删除失败!")
        elif key == 3:
            print("您选择了修改学生信息功能")
            stuId = input("请输入你要修改学生的学号:")
            index = hasRecord(studentList, stuId)
            if index > -1:
                print("没有此学号,修改失败!")
            else:
                temp = studentList[index]
                updateStudent(temp)
        elif key == 4:
            print("您选择了查询学生信息功能")
            stuId = input("请输入你要查询学生的学号:")
            index = hasRecord(studentList, stuId)
            if index == -1:
                print("没有此学生学号,查询失败!")
            else:
                temp = studentList[index]
                print("学号\t姓名\t语文\t数学\t英语\t总分")
                temp.printStudent()
        elif key == 5:
            print("接下来遍历所有的学生信息...")
            print("学号\t姓名\t语文\t数学\t英语\t总分")
            for temp in studentList:
                temp.printStudent()
        elif key == 6:
            quitConfirm = input("确认要退出系统吗(Y或N)?")
            if quitConfirm.upper() == "Y":
                print("欢迎使用本系统,谢谢")
                break
        else:
            print("您输入有误,请重新输入")

    请务必注明出处(注释也行)

    这是我第一写文章,如有错误,请多多谅解。

    更多相关内容
  • 主要为大家详细介绍了python实现简单成绩录入系统,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
  • 教师录入成绩:可以录入学生的成绩:包含学生的所属班级,考试批次,姓名,科目,成绩,可以编辑删除操作 教师查看班级:可以查看现在的班级情况 教师查看专业:可以查看现在的专业情况 修改密码:可以修改个人...
  • Python成绩管理系统,直接可以运行,无bug
  • 这次作业做的是学生python成绩管理系统,使用pyhton3.0实现了一个学生成绩管理系统,功能有:增加学生成绩、显示所有学生成绩、删除学生成绩、修改学生成绩、导入学生成绩、保存学生成绩等功能。 1.输入并存储 信息...
  • 主要为大家详细介绍了Python实现学生成绩管理系统,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
  • stuinfo=[] #主菜单函数 def menu(): print('='*30) print("****** 1.... print("****** 2.... print("****** 3.... print("****** 4.... print("****** 5.... print("****** 6.退出系统 ******") print('='*30) #增加学
  • 300来行python代码实现简易版学生成绩管理系统,供大家参考,具体内容如下 使用链表来实现 class Node(object): def __init__(self, data, pointer): self.data = data self.next = pointer # 创建单链表 class ...
  • Python成绩管理系统:1、包括增、删、改、查 2、拥有简易UI界面 3、数据使用CSV文件存储 4、不包含数据库
  • python学生成绩管理系统【完整版】

    万次阅读 多人点赞 2022-03-16 18:27:50
    一个带有登录界面具有增减改查功能的学生成绩管理系统(面向对象思想,利用tkinter库进行制作,利用.txt文件进行存储数据) 内附完整代码(仅供学习参考,最好还是自己多敲多练习)

    ✅作者简介:大家好我是hacker707,大家可以叫我hacker,新星计划第三季python赛道Top1🏆
    📃个人主页:hacker707的csdn博客
    🔥系列专栏:python
    💬推荐一款模拟面试、刷题神器👉点击跳转进入网站

    在这里插入图片描述

    学生成绩管理系统简介

    一个带有登录界面具有增减改查功能的学生成绩管理系统(面向对象思想,利用tkinter库进行制作,利用.txt文件进行存储数据)

    在这里插入图片描述在这里插入图片描述
    在这里插入图片描述

    在这里插入图片描述
    在这里插入图片描述

    在这里插入图片描述

    源代码🏆

    ✅仅供学习参考,最好还是自己多敲多练习(实践是检验真理的唯一标准)

    students.txt

    用于存储数据

    main.py

    from tkinter import *
    from Login import *
    import tkinter as tk
    
    root = tk.Tk()
    root.title('欢迎进入学生成绩管理系统')
    LoginPage(root)
    root.mainloop()
    

    Login.py

    from tkinter import *
    from tkinter.messagebox import *
    from MenuPage import *
    
    
    class LoginPage(object):
        def __init__(self, master=None):
            self.root = master  # 定义内部变量root
            self.root.geometry('%dx%d' % (300, 180))  # 设置窗口大小
            self.username = StringVar()
            self.password = StringVar()
            self.createPage()
    
        def createPage(self):
            self.page = Frame(self.root)  # 创建Frame
            self.page.pack()
            Label(self.page).grid(row=0, stick=W)
            Label(self.page, text='账户: ').grid(row=1, stick=W, pady=10)
            Entry(self.page, textvariable=self.username).grid(row=1, column=1, stick=E)
            Label(self.page, text='密码: ').grid(row=2, stick=W, pady=10)
            Entry(self.page, textvariable=self.password, show='*').grid(row=2, column=1, stick=E)
            Button(self.page, text='登陆', command=self.loginCheck).grid(row=3, stick=W, pady=10)
            Button(self.page, text='退出', command=self.page.quit).grid(row=3, column=1, stick=E)
    
        def loginCheck(self):
            name = self.username.get()
            password = self.password.get()
            if name == 'hacker707' and password == 'admin':
                self.page.destroy()
                MenuPage(self.root)
            else:
                showinfo(title='错误', message='账号或密码错误!')
    

    db.py

    import json
    
    
    class StudentDB(object):
        def __init__(self):
            self.students = []
            self._load_students_data()
    
        def insert(self, student):
            self.students.append(student)
            print(self.students)
    
        def all(self):
            return self.students
    
        def delete_by_name(self, name):  # 删除数据
            for student in self.students:
                if name == student["name"]:
                    self.students.remove(student)
                    break
            else:
                return False
            return True
    
        # 查询
        def search_by_name(self, name):
            for student in self.students:
                if name == student["name"]:
                    return student  # 姓名+成绩
            else:
                return False
    
        # 修改
        def update(self, stu):  # 修改数据
            name = stu["name"]
            for student in self.students:
                if name == student["name"]:
                    student.update(stu)
                    return True
            else:
                return False
    
        # 加载文件
        def _load_students_data(self):
            with open("students.txt", "r", encoding="utf-8") as f:
                text = f.read()
            if text:
                self.students = json.loads(text)
    
        # 保存数据
        def save_data(self):
            with open("students.txt", 'w', encoding="utf-8") as f:
                text = json.dumps(self.students, ensure_ascii=False)
                f.write(text)
    
    
    db = StudentDB()
    

    MenuPage.py

    import tkinter as tk
    from view import *
    
    
    class MenuPage(object):
        def __init__(self, master=None):
            self.root = master
            self.root.geometry('%dx%d' % (600, 400))
            self.create_page()
            self.input_page = InputFrame(self.root)
            self.query_page = QuerryFrame(self.root)
            self.delete_page = DeleteFrame(self.root)
            self.update_page = UpdateFrame(self.root)
            self.about_page = AboutFrame(self.root)
            self.input_page.pack()
    
        def create_page(self):
            # 创建菜单对象
            menubar = tk.Menu(self.root)
            # add_command 添加
            menubar.add_command(label="录入", command=self.input_data)  # label
            menubar.add_command(label="查询", command=self.query_data)  # label
            menubar.add_command(label="删除", command=self.delete_data)  # label
            menubar.add_command(label="修改", command=self.update_data)  # label
            menubar.add_command(label="关于", command=self.about_data)  # label
            # 设置菜单栏
            self.root.config(menu=menubar)
    
        # 切换界面
        def input_data(self):
            self.input_page.pack()
            self.update_page.pack_forget()
            self.delete_page.pack_forget()
            self.about_page.pack_forget()
            self.query_page.pack_forget()
    
        def query_data(self):
            self.input_page.pack_forget()
            self.query_page.pack()
            self.update_page.pack_forget()
            self.delete_page.pack_forget()
            self.about_page.pack_forget()
    
        def update_data(self):
            self.input_page.pack_forget()
            self.update_page.pack()
            self.delete_page.pack_forget()
            self.about_page.pack_forget()
            self.query_page.pack_forget()
    
        def delete_data(self):
            self.input_page.pack_forget()
            self.update_page.pack_forget()
            self.delete_page.pack()
            self.about_page.pack_forget()
            self.query_page.pack_forget()
    
        def about_data(self):
            self.input_page.pack_forget()
            self.update_page.pack_forget()
            self.delete_page.pack_forget()
            self.about_page.pack()
            self.query_page.pack_forget()
    

    view.py

    import tkinter as tk
    from db import db
    from tkinter import ttk
    
    
    # 录入类
    class InputFrame(tk.Frame):
        def __init__(self, master=None):
            super().__init__(master)
            self.root = master
            self.name = tk.StringVar()
            self.math = tk.StringVar()
            self.chinese = tk.StringVar()
            self.english = tk.StringVar()
            self.status = tk.StringVar()
            self.create_page()
    
        def create_page(self):
            tk.Label(self).grid(row=0, stick=tk.W, pady=10)
            tk.Label(self, text="姓名:").grid(row=1, stick=tk.W, pady=10)
            # 单行文本框 entry,textvariable绑定变量
            tk.Entry(self, textvariable=self.name).grid(row=1, column=1, stick=tk.E)
    
            tk.Label(self, text="数学:").grid(row=2, stick=tk.W, pady=10)
            # 单行文本框 entry,textvariable绑定变量
            tk.Entry(self, textvariable=self.math).grid(row=2, column=1, stick=tk.E)
    
            tk.Label(self, text="语文:").grid(row=3, stick=tk.W, pady=10)
            # 单行文本框 entry,textvariable绑定变量
            tk.Entry(self, textvariable=self.chinese).grid(row=3, column=1, stick=tk.E)
    
            tk.Label(self, text="英语:").grid(row=4, stick=tk.W, pady=10)
            # 单行文本框 entry,textvariable绑定变量
            tk.Entry(self, textvariable=self.english).grid(row=4, column=1, stick=tk.E)
    
            tk.Button(self, text="录入", command=self.recode_student).grid(row=5, column=1, stick=tk.E, pady=10)
            tk.Label(self, textvariable=self.status).grid(row=6, column=1, stick=tk.E, pady=10)
    
        # 录入成绩
        def recode_student(self):
            student = {
                "name": self.name.get(),
                "math": self.math.get(),
                "chinese": self.chinese.get(),
                "english": self.english.get(),
            }  # 一个学生的成绩
            db.insert(student)
            # get()得到值
            # set()设置值
            self.status.set("插入数据成功!")
            self._clear_data()
            db.save_data()
    
        # 清空文本数据
        def _clear_data(self):
            self.name.set("")
            self.math.set("")
            self.chinese.set("")
            self.english.set("")
    
    
    # 查询类
    class QuerryFrame(tk.Frame):
        def __init__(self, master=None):
            super().__init__(master)
            self.root = master
            self.create_page()
    
        # 创建查询界面
        def create_page(self):
            self.create_tree_view()
            self.show_data_frame()
            # grid()
            tk.Button(self, text="刷新数据", command=self.show_data_frame).pack(anchor=tk.E, pady=5)
    
        # Treeview
        def create_tree_view(self):
            # 表头
            columns = ("name", "chinese", "math", "english")
            self.tree_view = ttk.Treeview(self, show='headings', columns=columns)
            self.tree_view.column("name", width=80, anchor='center')
            self.tree_view.column("chinese", width=80, anchor='center')
            self.tree_view.column("math", width=80, anchor='center')
            self.tree_view.column("english", width=80, anchor='center')
            self.tree_view.heading("name", text='姓名')
            self.tree_view.heading("chinese", text='语文')
            self.tree_view.heading("math", text='数学')
            self.tree_view.heading("english", text='英语')
            self.tree_view.pack()
    
        # 显示数据
        def show_data_frame(self):
            # 删除原节点 map(int,值)
            for i in map(self.tree_view.delete, self.tree_view.get_children("")):
                pass
            # 拿到列表里面所有值、students[]
            students = db.all()
            # 同时拿到索引跟value值
            for index, stu in enumerate(students):
                self.tree_view.insert('', index, values=(stu["name"], stu["chinese"], stu
                ["math"], stu["english"]))
    
    
    class DeleteFrame(tk.Frame):
        def __init__(self, master=None):
            super().__init__(master)
            tk.Label(self, text='删除数据').pack()
            self.status = tk.StringVar()
            self.de_name = tk.StringVar()  # 获取删除学生的姓名
            self.create_page()
    
        # 创建界面
        def create_page(self):
            tk.Label(self, text="根据姓名删除信息").pack(anchor=tk.W, padx=20)
            e1 = tk.Entry(self, textvariable=self.de_name)
            e1.pack(side=tk.LEFT, padx=20, pady=5)
    
            tk.Button(self, text='删除', command=self._delete).pack(side=tk.RIGHT)
            tk.Label(self, textvariable=self.status).pack()
    
        # 删除
        def _delete(self):
            name = self.de_name.get()
            print(name)
            result = db.delete_by_name(name)
            if result:
                self.status.set(f'{name}已经被删')
                self.de_name.set("")
            else:
                self.status.set(f'{name}不存在')
    
    
    class UpdateFrame(tk.Frame):
        def __init__(self, master=None):
            super().__init__(master)
            self.root = master
            tk.Label(self, text='修改界面').pack()
            self.change_frame = tk.Frame(self)
            self.change_frame.pack()
            self.name = tk.StringVar()
            self.math = tk.StringVar()
            self.chinese = tk.StringVar()
            self.english = tk.StringVar()
            self.status = tk.StringVar()
            self.create_page()
    
        def create_page(self):
            tk.Label(self.change_frame).grid(row=0, stick=tk.W, pady=10)
            tk.Label(self.change_frame, text="姓名:").grid(row=1, stick=tk.W, pady=10)
            # 单行文本框 entry,textvariable绑定变量
            tk.Entry(self.change_frame, textvariable=self.name).grid(row=1, column=1, stick=tk.E)
    
            tk.Label(self.change_frame, text="数学:").grid(row=2, stick=tk.W, pady=10)
            # 单行文本框 entry,textvariable绑定变量
            tk.Entry(self.change_frame, textvariable=self.math).grid(row=2, column=1, stick=tk.E)
    
            tk.Label(self.change_frame, text="语文:").grid(row=3, stick=tk.W, pady=10)
            # 单行文本框 entry,textvariable绑定变量
            tk.Entry(self.change_frame, textvariable=self.chinese).grid(row=3, column=1, stick=tk.E)
    
            tk.Label(self.change_frame, text="英语:").grid(row=4, stick=tk.W, pady=10)
            # 单行文本框 entry,textvariable绑定变量
            tk.Entry(self.change_frame, textvariable=self.english).grid(row=4, column=1, stick=tk.E)
    
            # 按钮
            tk.Button(self.change_frame, text='查询', command=self._search).grid(row=6, column=0, stick=tk.W, pady=10)
            tk.Button(self.change_frame, text='修改', command=self._change).grid(row=6, column=1, stick=tk.E, pady=10)
    
            tk.Label(self.change_frame, textvariable=self.status).grid(row=7, column=1, stick=tk.E, pady=10)
    
        # 查询
        def _search(self):
            name = self.name.get()
            student = db.search_by_name(name)
            if student:
                self.math.set(student["math"])
                self.chinese.set(student["chinese"])
                self.english.set(student["english"])
                self.status.set(f'查询到{name}同学的信息')
            else:
                self.status.set(f'没有查询到{name}同学的信息')
    
        #  更改成绩
        def _change(self):
            name = self.name.get()
            math = self.math.get()
            chinese = self.chinese.get()
            english = self.english.get()
            stu = {
                "name": name,
                "math": math,
                "chinese": chinese,
                "english": english,
            }
            r = db.update(stu)
            if r:
                self.status.set(f"{name}同学的信息更新完毕")
            else:
                self.status.set(f"{name}同学的信息更新失败")
    
    
    class AboutFrame(tk.Frame):
        def __init__(self, master=None):
            super().__init__(master)
            self.root = master
            self.create_page()
    
        def create_page(self):
            tk.Label(self, text="关于本作品(人生苦短,我用python)").pack(anchor=tk.W)
    

    结束语🏆

    🔥推荐一款模拟面试、刷题神器网站
    点击链接注册即可
    1、算法篇(398题):面试必刷100题、算法入门、面试高频榜单
    2、SQL篇(82题):快速入门、SQL必知必会、SQL进阶挑战、面试真题
    3、大厂笔试真题:字节跳动、美团、百度、腾讯…

    在这里插入图片描述

    展开全文
  • Python成绩管理系统

    千次阅读 多人点赞 2020-06-11 09:44:22
    系统是基于Python语言,通过对成绩管理工作的日常分析,确定了具体的研究目标以及业务功能。采用了结构化的设计方法设计了一个简单的框架,通过编程实现了对成绩信息的添加、修改、删除、查询,并且使用csv文件...

    摘要

    随着科学技术的不断发展,应用计算机技术来实现对学生成绩的管理成为目前学校的主要手段。随着科技的日新月异,程序的简单化的广泛化成为了目前程序的重要性。
    本系统是基于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):  
    57.	        name = self.username.get()    
    58.	        password = self.password.get()  
    59.	        if len(name)==0 or len(password)==0:  
    60.	            showinfo(title='错误', message='账号密码不能为空')  
    61.	            return  
    62.	        for i in password:  
    63.	            if i is ',' or i is ' ':  
    64.	                showinfo(title='错误', message='密码不能含有非法字符')  
    65.	                return  
    66.	        if self.isLegal(name):  
    67.	            pass  
    68.	        else:  
    69.	            showinfo(title='错误', message='账号不能含有非法字符')  
    70.	            return  
    71.	          
    72.	        f = open('账号密码.csv','r',encoding='utf-8')  
    73.	        for line in f.readlines():  
    74.	            info = line[:-1].split(",")  
    75.	            if len(info)<2:  
    76.	                break  
    77.	            if info[0].strip()==name:  
    78.	                 messagebox.showinfo(title='结果', message ="已存在该用户信息!")  
    79.	                 f.close()  
    80.	                 return  
    81.	        f.close()  
    82.	          
    83.	        f = open('账号密码.csv','a',encoding='utf-8')  
    84.	        f.write('{},{}\n'.format(name,password))  
    85.	        f.close()  
    86.	        messagebox.showinfo(title='提示', message ="注册成功")  
    
    

    3.2 主界面
    主界面也是创造了一个类,然后创建了4个函数inputData、deleteData、modifyData、queryData。四个函数分别创建了不同tkinter独有的框架Frame,Frame里面以在主函数创造的tkinter变量tk为上层,逐步的创造每个功能所特有的画面。
    四个不同的函数在view.py中以不同的类而实现,调用那四个函数实际上也是调用了view.py上面所创造的四个不同的类。

    1.	from tkinter import *    
    2.	from view import *  #菜单栏对应的各个子页面    
    3.	    
    4.	class MainPage(object):    
    5.	    def __init__(self, master=None):    
    6.	        self.root = master #定义内部变量root    
    7.	        self.root.geometry('%dx%d' % (600, 400)) #设置窗口大小    
    8.	        self.createPage()    
    9.	    
    10.	    def createPage(self):    
    11.	        self.inputPage = InputFrame(self.root) # 创建不同Frame    
    12.	        self.deletePage = DeleteFrame(self.root)  
    13.	        self.modifyPage = ModifyFrame(self.root)  
    14.	        self.queryPage = QueryFrame(self.root)   
    15.	        self.inputPage.pack() #默认显示数据录入界面    
    16.	        menubar = Menu(self.root)    
    17.	        menubar.add_command(label='增加信息', command = self.inputData)    
    18.	        menubar.add_command(label='删除信息', command = self.deleteData)    
    19.	        menubar.add_command(label='修改信息', command = self.modifyData)    
    20.	        menubar.add_command(label='查询信息', command = self.queryData)    
    21.	        self.root['menu'] = menubar  # 设置菜单栏    
    22.	    
    23.	    def inputData(self):    
    24.	        self.inputPage.pack()    
    25.	        self.queryPage.pack_forget()    
    26.	        self.deletePage.pack_forget()  
    27.	        self.modifyPage.pack_forget()   
    28.	  
    29.	    def deleteData(self):    
    30.	        self.inputPage.pack_forget()    
    31.	        self.queryPage.pack_forget()    
    32.	        self.deletePage.pack()    
    33.	        self.modifyPage.pack_forget()  
    34.	  
    35.	    def modifyData(self):    
    36.	        self.inputPage.pack_forget()    
    37.	        self.queryPage.pack_forget()    
    38.	        self.deletePage.pack_forget()    
    39.	        self.modifyPage.pack()           
    40.	          
    41.	    def queryData(self):    
    42.	        self.inputPage.pack_forget()    
    43.	        self.queryPage.pack()    
    44.	        self.deletePage.pack_forget()    
    45.	        self.modifyPage.pack_forget()    
    46.	    
    47.	    
    48.	    
    1.	     from tkinter import *    
    2.	from tkinter.messagebox import *    
    3.	    
    4.	class InputFrame(Frame): # 继承Frame类    
    5.	    def __init__(self, master=None):    
    6.	        Frame.__init__(self, master)    
    7.	        self.root = master #定义内部变量root    
    8.	        self.E1 = Entry(self)  
    9.	        self.E2 = Entry(self)  
    10.	        self.E3 = Entry(self)  
    11.	        self.E4 = Entry(self)  
    12.	        self.E5 = Entry(self)  
    13.	        self.E6 = Entry(self)  
    14.	        self.createPage()    
    15.	  
    16.	    def Isspace(self,text):  
    17.	        temp = 0  
    18.	        for i in text:  
    19.	           if not i.isspace():  
    20.	               temp = 1  
    21.	               break;  
    22.	  
    23.	        if temp==1:  
    24.	            return 0  
    25.	        else:  
    26.	            return 1  
    27.	  
    28.	  
    29.	    def write(self,name,num,course,score):  
    30.	        f = open('成绩.csv','r',encoding='utf-8')  
    31.	        for line in f.readlines():  
    32.	            info = line[:-1].split(",")  
    33.	            if len(info)<4:  
    34.	                break  
    35.	            if info[1] ==num and info[2] ==course:  
    36.	                 messagebox.showinfo(title='结果', message ="已存在该学生科目信息!")  
    37.	                 f.close()  
    38.	                 return  
    39.	  
    40.	        f.close()  
    41.	        f = open('成绩.csv','a',encoding='utf-8')  
    42.	        f.write('{},{},{},{}\n'.format(name,num,course,score))  
    43.	        f.close()  
    44.	        messagebox.showinfo(title='提示', message ="写入成功")  
    45.	        return  
    46.	      
    47.	    def click(self):  
    48.	        name = self.E1.get()  
    49.	        num = self.E2.get()  
    50.	        course = self.E3.get()  
    51.	        score = self.E4.get()  
    52.	        if self.Isspace(name) or self.Isspace(num) or self.Isspace(course) or self.Isspace(score) :  
    53.	            messagebox.showinfo(title='提示', message ="输入项为空")  
    54.	        else:  
    55.	            self.write(name,num,course,score)  
    56.	              
    57.	          
    58.	          
    59.	    def createPage(self):    
    60.	        Label(self).grid(row=0, stick=W, pady=10)  
    61.	          
    62.	        Label(self, text = '姓名: ').grid(row=1, stick=W, pady=10)  
    63.	        self.E1.grid(row=1, column=1, stick=E)  
    64.	  
    65.	        Label(self, text = '学号: ').grid(row=2, stick=W, pady=10)  
    66.	        self.E2.grid(row=2, column=1, stick=E)  
    67.	  
    68.	        Label(self, text = '科目: ').grid(row=3, stick=W, pady=10)   
    69.	        self.E3.grid(row=3, column=1, stick=E)   
    70.	  
    71.	        Label(self, text = '成绩: ').grid(row=4, stick=W, pady=10)  
    72.	        self.E4.grid(row=4, column=1, stick=E)         
    73.	          
    74.	        Button(self, text='录入',command=self.click).grid(row=6, column=1, stick=E, pady=10)    
    75.	    
    76.	    
    77.	class DeleteFrame(Frame): # 继承Frame类    
    78.	    def __init__(self, master=None):    
    79.	        Frame.__init__(self, master)    
    80.	        self.root = master #定义内部变量root  
    81.	        self.E1 = Entry(self)  
    82.	        self.E2 = Entry(self)  
    83.	        self.createPage()  
    84.	          
    85.	    def Isspace(self,text):  
    86.	        temp = 0  
    87.	        for i in text:  
    88.	           if not i.isspace():  
    89.	               temp = 1  
    90.	               break;  
    91.	  
    92.	        if temp==1:  
    93.	            return 0  
    94.	        else:  
    95.	            return 1  
    96.	  
    97.	    def delete(self,num,course):  
    98.	        temp = 0  
    99.	        with open("成绩.csv","r",encoding="utf-8") as f:  
    100.	            lines = f.readlines()  
    101.	     
    102.	        with open("成绩.csv","w",encoding="utf-8") as f_w:  
    103.	            for line in lines:  
    104.	                info = line[:-1].split(",")  
    105.	                if info[1] ==num and info[2] ==course:  
    106.	                    temp = 1  
    107.	                    continue  
    108.	                f_w.write(line)  
    109.	        if temp==0:  
    110.	            messagebox.showinfo(title='提示', message ="没有该信息")  
    111.	        else:  
    112.	            messagebox.showinfo(title='提示', message ="删除成功")  
    113.	          
    114.	    def click(self):  
    115.	        num = self.E1.get()  
    116.	        course = self.E2.get()  
    117.	        if self.Isspace(num) or self.Isspace(course):  
    118.	            messagebox.showinfo(title='提示', message ="输入项为空")  
    119.	        else:  
    120.	            self.delete(num,course)  
    121.	              
    122.	    def createPage(self):  
    123.	        Label(self).grid(row=0, stick=W, pady=10)  
    124.	          
    125.	        Label(self, text = '学号: ').grid(row=1, stick=W, pady=10)  
    126.	        self.E1.grid(row=1, column=1, stick=E)  
    127.	  
    128.	        Label(self, text = '科目: ').grid(row=2, stick=W, pady=10)  
    129.	        self.E2.grid(row=2, column=1, stick=E)  
    130.	  
    131.	        Button(self, text='删除',command=self.click).grid(row=6, column=1, stick=E, pady=10)    
    132.	    
    133.	    
    134.	class ModifyFrame(Frame): # 继承Frame类    
    135.	    def __init__(self, master=None):    
    136.	        Frame.__init__(self, master)    
    137.	        self.root = master #定义内部变量root    
    138.	        self.E1 = Entry(self)  
    139.	        self.E2 = Entry(self)  
    140.	        self.E3 = Entry(self)  
    141.	        self.E4 = Entry(self)  
    142.	        self.E5 = Entry(self)  
    143.	        self.createPage()    
    144.	  
    145.	    def Isspace(self,text):  
    146.	        temp = 0  
    147.	        for i in text:  
    148.	           if not i.isspace():  
    149.	               temp = 1  
    150.	               break;  
    151.	  
    152.	        if temp==1:  
    153.	            return 0  
    154.	        else:  
    155.	            return 1  
    156.	  
    157.	          
    158.	    def modify(self,name,num,course,score):  
    159.	        temp = 0  
    160.	        with open("成绩.csv","r",encoding="utf-8") as f:  
    161.	            lines = f.readlines()  
    162.	     
    163.	        with open("成绩.csv","w",encoding="utf-8") as f_w:  
    164.	            for line in lines:  
    165.	                info = line[:-1].split(",")  
    166.	                if info[1] ==num and info[2] ==course:  
    167.	                    temp = 1  
    168.	                    f_w.write('{},{},{},{}\n'.format(name,num,course,score))  
    169.	                    continue  
    170.	                f_w.write(line)  
    171.	        if temp==0:  
    172.	            messagebox.showinfo(title='提示', message ="没有该信息")  
    173.	        else:  
    174.	            messagebox.showinfo(title='提示', message ="修改成功")  
    175.	          
    176.	    def click(self):  
    177.	        name = self.E1.get()  
    178.	        num = self.E2.get()  
    179.	        course = self.E3.get()  
    180.	        score = self.E4.get()  
    181.	        if self.Isspace(name) or self.Isspace(num) or self.Isspace(course) or self.Isspace(score) :  
    182.	            messagebox.showinfo(title='提示', message ="输入项为空")  
    183.	        else:  
    184.	            self.modify(name,num,course,score)  
    185.	          
    186.	          
    187.	    def createPage(self):    
    188.	        Label(self).grid(row=0, stick=W, pady=10)  
    189.	        Label(self, text = '姓名: ').grid(row=1, stick=W, pady=10)  
    190.	        self.E1.grid(row=1, column=1, stick=E)  
    191.	  
    192.	        Label(self, text = '学号: ').grid(row=2, stick=W, pady=10)  
    193.	        self.E2.grid(row=2, column=1, stick=E)  
    194.	  
    195.	        Label(self, text = '科目: ').grid(row=3, stick=W, pady=10)   
    196.	        self.E3.grid(row=3, column=1, stick=E)   
    197.	  
    198.	        Label(self, text = '成绩: ').grid(row=4, stick=W, pady=10)  
    199.	        self.E4.grid(row=4, column=1, stick=E)         
    200.	          
    201.	        Button(self, text='修改',command=self.click).grid(row=6, column=1, stick=E, pady=10)    
    202.	  
    203.	class QueryFrame(Frame): # 继承Frame类    
    204.	    def __init__(self, master=None):    
    205.	        Frame.__init__(self, master)    
    206.	        self.root = master #定义内部变量root  
    207.	        self.E1 = Entry(self)  
    208.	        self.E2 = Entry(self)  
    209.	        self.createPage()    
    210.	  
    211.	    def Isspace(self,text):  
    212.	        temp = 0  
    213.	        for i in text:  
    214.	           if not i.isspace():  
    215.	               temp = 1  
    216.	               break;  
    217.	  
    218.	        if temp==1:  
    219.	            return 0  
    220.	        else:  
    221.	            return 1  
    222.	  
    223.	    def query(self,num,course):  
    224.	        f = open('成绩.csv','r',encoding='utf-8')  
    225.	        for line in f.readlines():  
    226.	            info = line[:-1].split(",")  
    227.	            if info[1] ==num and info[2] ==course:  
    228.	                 messagebox.showinfo(title='结果', message ="姓名:"+info[0] +"\n学号:"+info[1] +"\n科目:"+info[2] +"\n成绩:"+info[3] )  
    229.	                 f.close()  
    230.	                 return  
    231.	  
    232.	        messagebox.showinfo(title='提示', message ="没有该信息")  
    233.	        f.close()  
    234.	        return          
    235.	          
    236.	          
    237.	    def click(self):  
    238.	        num = self.E1.get()  
    239.	        course = self.E2.get()  
    240.	        if self.Isspace(num) or self.Isspace(course):  
    241.	            messagebox.showinfo(title='提示', message ="输入项为空")  
    242.	        else:  
    243.	            self.query(num,course)  
    244.	              
    245.	              
    246.	    def createPage(self):  
    247.	        Label(self).grid(row=0, stick=W, pady=10)  
    248.	          
    249.	        Label(self, text = '学号: ').grid(row=1, stick=W, pady=10)  
    250.	        self.E1.grid(row=1, column=1, stick=E)  
    251.	  
    252.	        Label(self, text = '科目: ').grid(row=2, stick=W, pady=10)  
    253.	        self.E2.grid(row=2, column=1, stick=E)  
    254.	  
    255.	        Button(self, text='查找',command=self.click).grid(row=6, column=1, stick=E, pady=10)    
    
    
    1. 实验结果
      在这里插入图片描述
      在这里插入图片描述
      在这里插入图片描述
      在这里插入图片描述
      在这里插入图片描述

    2. 总结与展望
      由于在软件工程小组中,我是负责写界面的人,同时也是小组的组长,所以在这次python语言程序设计课程的个人项目当中,我发现了自己一个人的力量是远远不够众人的力量,所以很多东西都是需要团队的支持下才能成功。
      这次的成绩管理系统不仅增强了我的编程能力,同时也让我对python学习程度上的一个总结。可惜自己在小组中并不是负责数据库这一方面,否则也可以增上数据库的内容,而不是使用简单的csv文件来存储数据,虽然这样方便操作,但是可能走以后使用成绩管理系统的过程中,难免会出现bug,可能还存在一些后期的使用才能发现的错误。
      希望在以后的学习中,能使用python将数据库接口学习一下,这样就可以使用数据库来存储数据了,比较方便可靠。

    展开全文
  • 数据库课程设计:Python学生成绩发布系统源码.zip
  • 本学期学校开设了python课程,实验课时自己写了个学生管理系统,发出来与大家分享分享。 实验步骤 1.初始化 class StudentSystem: def __init__(self): #存储全部数据 self.all = [] #单独存储学号 ...

    前言

    本学期学校开设了python课程,实验课时自己写了个学生管理系统,发出来与大家分享分享。


    实验步骤

    1.初始化

     class StudentSystem:
     	    def __init__(self):
     	    	#存储全部数据
    	        self.all = []
    	        #单独存储学号
    	        self.number = []
    	        #单独存储姓名成绩
    	        self.name = []
    	        #单独存储数学成绩
    	        self.math = []
    	        #单独存储语文成绩
    	        self.chinese = []
    	        #单独存储英语成绩
    	        self.english = []
    	        #单独存储总成绩
    	        self.total = []
    

    2.插入数据

    #建立一个临时数组用来存储
    box = []
    number = input("学号:")
    box.append(number)
    self.number.append(number)
    name = input("姓名:")
    box.append(name)
    self.name.append(name)
    chinese = int(input("语文成绩:"))
    if 0 <= chinese <= 100:
        box.append(chinese)
        self.chinese.append(chinese)
    else:
        print("请输入正确的数字")
        self.insert()
    math = int(input("数学成绩:"))
    if 0 <= math <= 100:
        box.append(math)
        self.math.append(math)
    else:
        print("请输入正确的数字")
        self.insert()
    english = int(input("英语成绩:"))
    if 0 <= english <= 100:
        box.append(english)
        self.english.append(english)
    else:
        print("请输入正确的数字")
        self.insert()
    box.append(chinese + math + english)
    #使用二维数组进行存储即每个box存储的是每个学生的信息
    self.all.append(box)
    

    3.输出数据

    init = ["学号", "姓名", "语文成绩", "数学成绩", "英语成绩", "成绩总和"]
    for i in init:
          print("%-10s" % i, end="")
    print()
    for i in self.all:
        for j in i:
            print("%-12s" % j, end="", )
        print()
    

    4.删除数据

    k = 0
    opt1 = input("输入删除的学号:")
    if len(self.number) == 0:
        print("系统中学号为空")
    for i in self.number:
        if i == opt1:
            m = self.number.index(opt1)
            self.all.remove(self.all[m])
            self.name.remove(self.name[m])
            self.number.remove(self.number[m])
            self.math.remove(self.math[m])
            self.chinese.remove(self.chinese[m])
            self.english.remove(self.english[m])
            print("删除成功")
        k += 1
        while k == len(self.number):
              print("系统中没有该学号")
              break
    

    5.更新数据

    while True:
       print("1 修改学号")
       print("2 修改姓名")
       print("3 修改语文成绩")
       print("4 修改数学成绩")
       print("5 修改英语成绩")
       print("6 返回主菜单")
       opt2 = int(input("输入选项:"))
       if opt2 == 1:
           n = input("请输入旧学号:")
           m = input("请输入新学号:")
           #通过学号列表获取到要all中要更改的信息
           j = self.number.index(n)
           self.number[j] = m
           self.all[j][0] = m
           print("修改成功")
       elif opt2 == 2:
           n = input("请输入学生学号")
           m = input("请输入新名字:")
           j = self.number.index(n)
           self.number[j] = m
           self.all[j][1] = m
           print("修改成功")
       elif opt2 == 3:
           n = input("请输入学生学号:")
           m = int(input("请输入新语文成绩:"))
           j = self.number.index(n)
           self.number[j] = m
           self.all[j][2] = m
           #对成绩进行更改的同时也要对成绩总和进行修改
           self.all[j][5] = self.all[j][4] + self.all[j][3] + self.all[j][2]
           print("修改成功")
       elif opt2 == 4:
           n = input("请输入学生学号:")
           m = int(input("请输入新数学成绩:"))
           j = self.number.index(n)
           self.number[j] = m
           self.all[j][3] = m
           self.all[j][5] = self.all[j][4] + self.all[j][3] + self.all[j][2]
           print("修改成功")
       elif opt2 == 5:
           n = input("请输入学生学号:")
           m = int(input("请输入新英语成绩:"))
           j = self.number.index(n)
           self.number[j] = m
           self.all[j][4] = m
           self.all[j][5] = self.all[j][4] + self.all[j][3] + self.all[j][2]
           print("修改成功")
       elif opt2 == 6:
           self.menu()
       else:
           print("请输入有效选项!")
           self.update()
    

    6. 排序数据

    这里对总成绩进行从高到低的排序
    其他成绩的排序与与总成绩排序一致,以此类推即可

    sort = []
    j = 0
    for i in range(0, len(self.all)):
    	#采集总成绩
        self.total.append(self.all[i][5])
    #对总成绩里面的信息进行排序
    self.total.sort(reverse=True)
    while j < len(self.all):
        for i in self.all:
        	#遍历数组寻找与总成绩中相同的元素
            if i[5] == self.total[j]:
            	#按从高到低添加到排序数据里
                sort.append(i)
        j += 1
    init2 = ["学号", "姓名", "语文成绩", "数学成绩", "英语成绩", "成绩总和"]
    for i in init2:
        print("%-10s" % i, end="")
    print()
    for i in sort:
        for j in i:
            print("%-12s" % j, end="", )
        print()
    

    7.对各分段人数进行统计

     a1 = 0
    b1 = 0
    c1 = 0
    d1 = 0
    e1 = 0
    a2 = 0
    b2 = 0
    c2 = 0
    d2 = 0
    e2 = 0
    a3 = 0
    b3 = 0
    c3 = 0
    d3 = 0
    e3 = 0
    a4 = 0
    b4 = 0
    c4 = 0
    d4 = 0
    e4 = 0
    all1 = []
    box1 = ["语文"]
    box2 = ["数学"]
    box3 = ["英语"]
    print("1 获取语文各分数段的人数")
    print("2 获取数学各分数段的人数")
    print("3 获取英语各分数段的人数")
    print("4 获取总分各分数段的人数")
    print("5 总览")
    for j in self.chinese:
        if j < 60:
            a1 += 1
        elif 60 <= j < 70:
            b1 += 1
        elif 70 <= j < 80:
            c1 += 1
        elif 80 <= j < 90:
            d1 += 1
        elif 90 <= j <= 100:
            e1 += 1
    box1.append(a1)
    box1.append(b1)
    box1.append(c1)
    box1.append(d1)
    box1.append(e1)
    all1.append(box1)
    for j in self.math:
        if j < 60:
            a2 += 1
        elif 60 <= j < 70:
            b2 += 1
        elif 70 <= j < 80:
            c2 += 1
        elif 80 <= j < 90:
            d2 += 1
        elif 90 <= j <= 100:
            e2 += 1
    box2.append(a2)
    box2.append(b2)
    box2.append(c2)
    box2.append(d2)
    box2.append(e2)
    all1.append(box2)
    for j in self.english:
        if j < 60:
            a3 += 1
        elif 60 <= j < 70:
            b3 += 1
        elif 70 <= j < 80:
            c3 += 1
        elif 80 <= j < 90:
            d3 += 1
        elif 90 <= j <= 100:
            e3 += 1
    box3.append(a3)
    box3.append(b3)
    box3.append(c3)
    box3.append(d3)
    box3.append(e3)
    all1.append(box3)
    for j in self.total:
        if j < 180:
            a4 += 1
        elif 180 <= j < 210:
            b4 += 1
        elif 210 <= j < 240:
            c4 += 1
        elif 240 <= j < 270:
            d4 += 1
        elif 270 <= j <= 300:
            e4 += 1
    m = int(input("输入选项:"))
    if m == 1:
        print("60分以下:", a1)
        print("60分到70分:", b1)
        print("70分到80分:", c1)
        print("80分到90分:", d1)
        print("90分到100分:", e1)
    elif m == 2:
        print("60分以下:", a2)
        print("60分到70分:", b2)
        print("70分到80分:", c2)
        print("80分到90分:", d2)
        print("90分到100分:", e2)
    elif m == 3:
        print("60分以下:", a3)
        print("60分到70分:", b3)
        print("70分到80分:", c3)
        print("80分到90分:", d3)
        print("90分到100分:", e3)
    elif m == 4:
        print("60分以下:", a4)
        print("60分到70分:", b4)
        print("70分到80分:", c4)
        print("80分到90分:", d4)
        print("90分到100分:", e4)
    elif m == 5:
        init3 = ["科目", "60分以下", "60分到70分", "70分到80分", "80分到90分", "90分到100分"]
        for i in init3:
            print("%-10s" % i, end="")
        print()
        for m in all1:
            for n in m:
                print("%-12s" % n, end="")
            print()
    

    8.汇总

    class StudentSystem:
    
        def __init__(self):
            self.all = []
            self.number = []
            self.name = []
            self.math = []
            self.chinese = []
            self.english = []
            self.total = []
    
        def insert(self):
            box = []
            number = input("学号:")
            box.append(number)
            self.number.append(number)
            name = input("姓名:")
            box.append(name)
            self.name.append(name)
            chinese = int(input("语文成绩:"))
            if 0 <= chinese <= 100:
                box.append(chinese)
                self.chinese.append(chinese)
            else:
                print("请输入正确的数字")
                self.insert()
            math = int(input("数学成绩:"))
            if 0 <= math <= 100:
                box.append(math)
                self.math.append(math)
            else:
                print("请输入正确的数字")
                self.insert()
            english = int(input("英语成绩:"))
            if 0 <= english <= 100:
                box.append(english)
                self.english.append(english)
            else:
                print("请输入正确的数字")
                self.insert()
            box.append(chinese + math + english)
            self.all.append(box)
    
        def show(self):
            init = ["学号", "姓名", "语文成绩", "数学成绩", "英语成绩", "成绩总和"]
            for i in init:
                print("%-10s" % i, end="")
            print()
            for i in self.all:
                for j in i:
                    print("%-12s" % j, end="", )
                print()
    
        def delete(self):
            k = 0
            opt1 = input("输入删除的学号:")
            if len(self.number) == 0:
                print("系统中学号为空")
            for i in self.number:
                # 使用try + self.number.index(opt)减少时间复杂度
                if i == opt1:
                    m = self.number.index(opt1)
                    self.all.remove(self.all[m])
                    self.name.remove(self.name[m])
                    self.number.remove(self.number[m])
                    self.math.remove(self.math[m])
                    self.chinese.remove(self.chinese[m])
                    self.english.remove(self.english[m])
                    print("删除成功")
                k += 1
                while k == len(self.number):
                    print("系统中没有该学号")
                    break
    
        def update(self):
            while True:
                print("1 修改学号")
                print("2 修改姓名")
                print("3 修改语文成绩")
                print("4 修改数学成绩")
                print("5 修改英语成绩")
                print("6 返回主菜单")
                opt2 = int(input("输入选项:"))
                if opt2 == 1:
                    n = input("请输入旧学号:")
                    m = input("请输入新学号:")
                    j = self.number.index(n)
                    self.number[j] = m
                    self.all[j][0] = m
                    print("修改成功")
                elif opt2 == 2:
                    n = input("请输入学生学号")
                    m = input("请输入新名字:")
                    j = self.number.index(n)
                    self.number[j] = m
                    self.all[j][1] = m
                    print("修改成功")
                elif opt2 == 3:
                    n = input("请输入学生学号:")
                    m = int(input("请输入新语文成绩:"))
                    j = self.number.index(n)
                    self.number[j] = m
                    self.all[j][2] = m
                    self.all[j][5] = self.all[j][4] + self.all[j][3] + self.all[j][2]
                    print("修改成功")
                elif opt2 == 4:
                    n = input("请输入学生学号:")
                    m = int(input("请输入新数学成绩:"))
                    j = self.number.index(n)
                    self.number[j] = m
                    self.all[j][3] = m
                    self.all[j][5] = self.all[j][4] + self.all[j][3] + self.all[j][2]
                    print("修改成功")
                elif opt2 == 5:
                    n = input("请输入学生学号:")
                    m = int(input("请输入新英语成绩:"))
                    j = self.number.index(n)
                    self.number[j] = m
                    self.all[j][4] = m
                    self.all[j][5] = self.all[j][4] + self.all[j][3] + self.all[j][2]
                    print("修改成功")
                elif opt2 == 6:
                    self.menu()
                else:
                    print("请输入有效选项!")
                    self.update()
    
        def sort(self):
    
            sort = []
            j = 0
            for i in range(0, len(self.all)):
                self.total.append(self.all[i][5])
            self.total.sort(reverse=True)
            while j < len(self.all):
                for i in self.all:
                    if i[5] == self.total[j]:
                        sort.append(i)
                j += 1
            init2 = ["学号", "姓名", "语文成绩", "数学成绩", "英语成绩", "成绩总和"]
            for i in init2:
                print("%-10s" % i, end="")
            print()
            for i in sort:
                for j in i:
                    print("%-12s" % j, end="", )
                print()
    
        def stat(self):
            a1 = 0
            b1 = 0
            c1 = 0
            d1 = 0
            e1 = 0
            a2 = 0
            b2 = 0
            c2 = 0
            d2 = 0
            e2 = 0
            a3 = 0
            b3 = 0
            c3 = 0
            d3 = 0
            e3 = 0
            a4 = 0
            b4 = 0
            c4 = 0
            d4 = 0
            e4 = 0
            all1 = []
            box1 = ["语文"]
            box2 = ["数学"]
            box3 = ["英语"]
            print("1 获取语文各分数段的人数")
            print("2 获取数学各分数段的人数")
            print("3 获取英语各分数段的人数")
            print("4 获取总分各分数段的人数")
            print("5 总览")
            for j in self.chinese:
                if j < 60:
                    a1 += 1
                elif 60 <= j < 70:
                    b1 += 1
                elif 70 <= j < 80:
                    c1 += 1
                elif 80 <= j < 90:
                    d1 += 1
                elif 90 <= j <= 100:
                    e1 += 1
            box1.append(a1)
            box1.append(b1)
            box1.append(c1)
            box1.append(d1)
            box1.append(e1)
            all1.append(box1)
            for j in self.math:
                if j < 60:
                    a2 += 1
                elif 60 <= j < 70:
                    b2 += 1
                elif 70 <= j < 80:
                    c2 += 1
                elif 80 <= j < 90:
                    d2 += 1
                elif 90 <= j <= 100:
                    e2 += 1
            box2.append(a2)
            box2.append(b2)
            box2.append(c2)
            box2.append(d2)
            box2.append(e2)
            all1.append(box2)
            for j in self.english:
                if j < 60:
                    a3 += 1
                elif 60 <= j < 70:
                    b3 += 1
                elif 70 <= j < 80:
                    c3 += 1
                elif 80 <= j < 90:
                    d3 += 1
                elif 90 <= j <= 100:
                    e3 += 1
            box3.append(a3)
            box3.append(b3)
            box3.append(c3)
            box3.append(d3)
            box3.append(e3)
            all1.append(box3)
            for j in self.total:
                if j < 180:
                    a4 += 1
                elif 180 <= j < 210:
                    b4 += 1
                elif 210 <= j < 240:
                    c4 += 1
                elif 240 <= j < 270:
                    d4 += 1
                elif 270 <= j <= 300:
                    e4 += 1
            m = int(input("输入选项:"))
            if m == 1:
                print("60分以下:", a1)
                print("60分到70分:", b1)
                print("70分到80分:", c1)
                print("80分到90分:", d1)
                print("90分到100分:", e1)
            elif m == 2:
                print("60分以下:", a2)
                print("60分到70分:", b2)
                print("70分到80分:", c2)
                print("80分到90分:", d2)
                print("90分到100分:", e2)
            elif m == 3:
                print("60分以下:", a3)
                print("60分到70分:", b3)
                print("70分到80分:", c3)
                print("80分到90分:", d3)
                print("90分到100分:", e3)
            elif m == 4:
                print("60分以下:", a4)
                print("60分到70分:", b4)
                print("70分到80分:", c4)
                print("80分到90分:", d4)
                print("90分到100分:", e4)
            elif m == 5:
                init3 = ["科目", "60分以下", "60分到70分", "70分到80分", "80分到90分", "90分到100分"]
                for i in init3:
                    print("%-10s" % i, end="")
                print()
                for m in all1:
                    for n in m:
                        print("%-12s" % n, end="")
                    print()
    
        def menu(self):
    
            while True:
                print("1 插入成绩")
                print("2 输出成绩")
                print("3 删除数据")
                print("4 更新数据")
                print("5 排序数据")
                print("6 获取各分段人数")
                print("7 退出系统")
                option = int(input("输入选项:"))
                if option == 1:
                    self.insert()
                    print("插入成功")
                elif option == 2:
                    self.show()
                elif option == 3:
                    self.delete()
                elif option == 4:
                    self.update()
                elif option == 5:
                    self.sort()
                elif option == 6:
                    self.stat()
                elif option == 7:
                    break
                else:
                    print("请输入有效选项")
                    self.menu()
    
    
    s = StudentSystem
    s().menu()
    

    总结

    至此所有的内容就成功实现了,分享下自己的实验成果,纪念下通过写代码获得的成就感,代码或多或少会过于复杂,各位大佬如有更好的解决方法也请不吝赐教,感谢各位观看。

    展开全文
  • 最近在往网页里录入学生成绩,原来的网页里没有提供批量导入的功能...7,成绩录入后,按ESC键退出录入模式 更多的输入就可以循环如下步骤: 1,更新“成绩.xlsx” 2,重新运行scoreinput.py 3,继续按backspace键输入
  • 目的是通过课程设计的综合训练,培养学生实际分析问题、解决问题的能力,以及编程和动手能力,最终目标是通过课程设计这种形式,帮助学生系统掌握Python这门课程的主要内容,养成良好的编程习惯,更好的完成教学任务...
  • 【简单】python学生成绩管理系统

    千次阅读 2022-05-14 22:10:57
    python学生成绩管理系统简易版
  • 课程设计大作业基于Python的学生成绩管理系统,已获高分通过的项目,文档部署资料。 第一章 需求分析 1、添加学生及成绩信息 2、将学生信息保存到文件中 3、修改和删除学生信息 4、查询学生信息 5、根据学生成绩进行...
  • python gui学生成绩管理系统

    千次阅读 2021-10-20 15:21:13
    准备工作就是建立数据库可以参考之前的博客:python mysql学生成绩管理系统 1 首先我写了一个登陆界面类 login: 这个界面就是实现用户的登录,以及登陆后软件界面的显示以及本界面的关闭,难的就是布局的问题,我也...
  • python 学生成绩管理系统源码两百多行代码
  • python 学生成绩管理系统

    千次阅读 多人点赞 2021-04-06 16:38:49
    python 学生成绩管理系统 需求: 代码: import os filename = 'student.txt' def main(): while True: menu() choice = int(input("请选择:")) if choice in [0,1,2,3,4,5,6,7]: if choice==0: answer = ...
  • 本文实例为大家分享了python实现教务管理系统,供大家参考,具体内容如下 mysql+python构成教务管理系统,提供系统管理员,教职工,学生三级。有注册,添加,修改,发布信息等功能。 Login.py #-*- coding:utf-8 -*...
  • 今天主要是为大家详细介绍了python实现简单的学生成绩管理系统,文中示例代码介绍的非常详细,大家还想学习更多关于Python免费只是的,可以点击这个链接。 1 2 3 4 5 6 7 8 ...
  • 继上篇博客Python实现简易通讯录后,我就想写一个复杂点的学生信息管理系统,这次实现的功能有 1.学生信息的录入管理;  2.学生选课操作;  3.学生选课情况查询; 这次仍然用到sqlite3模块。虽然看着挺简单,...
  • python实现学生成绩管理系统

    万次阅读 多人点赞 2020-07-25 00:58:34
    python的学生成绩管理系统实现 附上代码 注释详细 # _*_ coding:utf-8 _*_ # 开发工具:PyCharm import re # 导入正则表达式模块 import os # 导入操作系统模块 filename = "students.txt" # 定义保存学生信息...
  • 上一次,公众号详情了如何使用 Python 实现单链表,下面让我们一探单链表的简单应用:在命令行,实现简易版成绩管理系统。这次的简易版成绩管理系统,主要有六大功能:添加学生信息、删除学生信息、修改学生信息、...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 8,050
精华内容 3,220
关键字:

python成绩录入系统

友情链接: cy.zip