Python实现 学籍管理:对学生、课程、成绩分别建立三个数据文件(学生、课程、成绩属性自定)完成下列各题:①对数据录入②查询③插入、删除、修改④排序等功能

 学籍管理:对学生、课程、成绩分别建立三个数据文件(学生、课程、成绩属性自定)。

完成下列各题:

①对数据录入

②查询(如:某个学生的选课情况、成绩不及格的学生情况)

③插入、删除、修改

④排序(如:对课程名按不及格学生人数进行)等功能。(用文件或数组方式完成均可)

一个数据结构选的简单课设

用python实现的

留在这里记录一下

有优化的地方

大佬来指正

(已经更改完成之后的版本)

import os
import pandas as pd
import csv
import numpy as np


def creat_data():
    # 初始化数据文件
    with open("学生.csv", 'a', encoding='utf-8', newline='') as df:
        csv_write = csv.writer(df)
        students = ['学号', '姓名', '性别']
        csv_write.writerow(students)
    with open("课程.csv", 'a', encoding='utf-8', newline='') as df:
        csv_write = csv.writer(df)
        lesson = ['课程']
        csv_write.writerow(lesson)
    with open("成绩.csv", 'a', encoding='utf-8', newline='') as df:
        csv_write = csv.writer(df)
        score = ['成绩', '评级']
        csv_write.writerow(score)


class student_status(object):

    def __init__(self):
        self.number = None
        self.name = None
        self.gender = None
        self.lesson = None
        self.score = None
        self.achievement = '优秀'

    # 添加操作
    def entry_data(self):
        self.number = int(input("请输入录入学生学号:"))
        self.name = input("请输入录入学生姓名:")
        self.gender = input("请输入录入学生姓别:")
        self.lesson = input("请输入录入学生课程:")
        self.score = int(input("请输入录入学生成绩:"))
        if 0 < self.score < 60:
            self.achievement = '不合格'
        if 60 <= self.score < 80:
            self.achievement = '合格'
        if 80 <= self.score <= 100:
            self.achievement = '优秀'
        with open("学生.csv", 'a', encoding='utf-8', newline='') as df:
            csv_write = csv.writer(df)
            students = [self.number, self.name, self.gender]
            csv_write.writerow(students)
        with open("课程.csv", 'a', encoding='utf-8', newline='') as df:
            csv_write = csv.writer(df)
            csv_write.writerow([self.lesson])
        with open("成绩.csv", 'a', encoding='utf-8', newline='') as df:
            csv_write = csv.writer(df)
            score = [self.score, self.achievement]
            csv_write.writerow(score)
        print("写入之后的数据为:")
        self.printf_student_data()

    # 查询操作
    def search_data(self):
        items = np.array(pd.read_csv("学生.csv"))[:, 0]
        print(items)
        name = int(input("请输入学号选择查询该学生的学籍信息:"))
        items = np.array(pd.read_csv("学生.csv"))[:, 0]
        i = -1
        for item in items:
            i += 1
            if name == item:
                student_data = list(np.array(pd.read_csv("学生.csv"))[i])
                lesson_data = list(np.array(pd.read_csv("课程.csv"))[i])
                score_data = list(np.array(pd.read_csv("成绩.csv"))[i])
                print(
                    f"学号:{student_data[0]}\n姓名:{student_data[1]}\n性别:{student_data[2]}\n课程:{lesson_data[0]}\n成绩:{score_data[0]}\n评级:{score_data[1]}")

    # 插入操作
    def insert_data(self):
        items = np.array(pd.read_csv("学生.csv"))[:, 0]
        print(items)
        name = int(input("请输入要插入谁的学号后面:"))
        i = -1
        for item in items:
            i += 1
            if item == name:
                self.number = input("请输入插入学生学号:")
                self.name = input("请输入插入学生姓名:")
                self.gender = input("请输入插入学生姓别:")
                self.lesson = input("请输入插入学生课程:")
                self.score = int(input("请输入插入学生成绩:"))
                if 0 < self.score < 60:
                    self.achievement = '不合格'
                if 60 <= self.score < 80:
                    self.achievement = '合格'
                if 80 <= self.score <= 100:
                    self.achievement = '优秀'
                student_data = np.array(pd.read_csv("学生.csv"))
                lesson_data = np.array(pd.read_csv("课程.csv"))
                score_data = np.array(pd.read_csv("成绩.csv"))
                student_data = np.insert(student_data, i + 1, [self.number, self.name, self.gender], axis=0)
                lesson_data = np.insert(lesson_data, i + 1, [self.lesson], axis=0)
                score_data = np.insert(score_data, i + 1, [self.score, self.achievement], axis=0)
                with open("学生.csv", 'w', encoding='utf-8', newline='') as df:
                    csv_write = csv.writer(df)
                    students = ['学号', '姓名', '性别']
                    csv_write.writerow(students)
                    for data in student_data:
                        csv_write.writerow(data)
                with open("课程.csv", 'w', encoding='utf-8', newline='') as df:
                    csv_write = csv.writer(df)
                    lesson = ['课程']
                    csv_write.writerow(lesson)
                    for data in lesson_data:
                        csv_write.writerow(data)
                with open("成绩.csv", 'w', encoding='utf-8', newline='') as df:
                    csv_write = csv.writer(df)
                    score = ['成绩', '评级']
                    csv_write.writerow(score)
                    for data in score_data:
                        csv_write.writerow(data)
        print("插入之后的数据为:")
        self.printf_student_data()

    # 删除操作
    def delete_data(self):
        items = np.array(pd.read_csv("学生.csv"))[:, 0]
        print(items)
        name = int(input("请问需要删除哪个学号的学生的学籍数据:"))
        i = -1
        for item in items:
            i += 1
            if item == name:
                student_data = np.array(pd.read_csv("学生.csv"))
                lesson_data = np.array(pd.read_csv("课程.csv"))
                score_data = np.array(pd.read_csv("成绩.csv"))
                student_data = np.delete(student_data, i, axis=0)
                lesson_data = np.delete(lesson_data, i, axis=0)
                score_data = np.delete(score_data, i, axis=0)
                with open("学生.csv", 'w', encoding='utf-8', newline='') as df:
                    csv_write = csv.writer(df)
                    students = ['学号', '姓名', '性别']
                    csv_write.writerow(students)
                    for data in student_data:
                        csv_write.writerow(data)
                with open("课程.csv", 'w', encoding='utf-8', newline='') as df:
                    csv_write = csv.writer(df)
                    lesson = ['课程']
                    csv_write.writerow(lesson)
                    for data in lesson_data:
                        csv_write.writerow(data)
                with open("成绩.csv", 'w', encoding='utf-8', newline='') as df:
                    csv_write = csv.writer(df)
                    score = ['成绩', '评级']
                    csv_write.writerow(score)
                    for data in score_data:
                        csv_write.writerow(data)
        print("删除之后的数据为:")
        self.printf_student_data()

    # 修改操作
    def revise_data(self):
        items = np.array(pd.read_csv("学生.csv"))[:, 0]
        print(items)
        name = int(input("请问需要修改哪位学号的学生的数据:"))
        i = -1
        for item in items:
            i += 1
            if item == name:
                print("学号,姓名,性别,课程,成绩")
                data = str(input("请选择需要修改该学生的哪个数据:"))
                student_data = np.array(pd.read_csv("学生.csv"))
                lesson_data = np.array(pd.read_csv("课程.csv"))
                score_data = np.array(pd.read_csv("成绩.csv"))
                if data == "学号":
                    self.number = input("请输入修改后的学号")
                    student_data[i][1] = self.number
                    with open("学生.csv", 'w', encoding='utf-8', newline='') as df:
                        csv_write = csv.writer(df)
                        students = ['学号', '姓名', '性别']
                        csv_write.writerow(students)
                        for data in student_data:
                            csv_write.writerow(data)
                    break
                if data == "姓名":
                    self.name = input("请输入修改后的姓名:")
                    student_data[i][1] = self.name
                    with open("学生.csv", 'w', encoding='utf-8', newline='') as df:
                        csv_write = csv.writer(df)
                        students = ['学号', '姓名', '性别']
                        csv_write.writerow(students)
                        for data in student_data:
                            csv_write.writerow(data)
                    break
                if data == "性别":
                    self.gender = input("请输入修改后的性别:")
                    student_data[i][2] = self.gender
                    with open("学生.csv", 'w', encoding='utf-8', newline='') as df:
                        csv_write = csv.writer(df)
                        students = ['学号', '姓名', '性别']
                        csv_write.writerow(students)
                        for data in student_data:
                            csv_write.writerow(data)
                    break
                if data == "课程":
                    self.lesson = input("请输入修改后的课程:")
                    lesson_data[i] = self.lesson
                    with open("课程.csv", 'w', encoding='utf-8', newline='') as df:
                        csv_write = csv.writer(df)
                        lesson = ['课程']
                        csv_write.writerow(lesson)
                        for data in lesson_data:
                            csv_write.writerow(data)
                    break
                if data == "成绩":
                    self.score = int(input("请输入修改后的成绩:"))
                    score_data[i][0] = self.score
                    if 0 < self.score < 60:
                        self.achievement = '不合格'
                    if 60 <= self.score < 80:
                        self.achievement = '合格'
                    if 80 <= self.score <= 100:
                        self.achievement = '优秀'
                    score_data[i][1] = self.achievement
                    with open("成绩.csv", 'w', encoding='utf-8', newline='') as df:
                        csv_write = csv.writer(df)
                        score = ['成绩', '评级']
                        csv_write.writerow(score)
                        for data in score_data:
                            csv_write.writerow(data)
                    break
        print("修改之后的数据为:")
        self.printf_student_data()

    # 排序操作
    def sort_data(self):
        data = input("请问是按照学号进行排序还是按照成绩进行排序:")
        student_lines = np.array(pd.read_csv("学生.csv"))
        lesson_lines = np.array(pd.read_csv("课程.csv"))
        score_lines = np.array(pd.read_csv("成绩.csv"))
        if data == "成绩":
            items = np.array(pd.read_csv("成绩.csv"))[:, 0]
            for j in range(len(items)):
                for i in range(len(items) - 1):
                    if int(items[i]) < int(items[i + 1]):
                        student_lines[[i, i + 1], :] = student_lines[[i + 1, i], :]
                        lesson_lines[[i, i + 1], :] = lesson_lines[[i + 1, i], :]
                        score_lines[[i, i + 1], :] = score_lines[[i + 1, i], :]
                        items[i], items[i + 1] = items[i + 1], items[i]
        if data == "学号":
            items = np.array(pd.read_csv("学生.csv"))[:, 0]
            for j in range(len(items)):
                for i in range(len(items) - 1):
                    if int(items[i]) > int(items[i + 1]):
                        student_lines[[i, i + 1], :] = student_lines[[i + 1, i], :]
                        lesson_lines[[i, i + 1], :] = lesson_lines[[i + 1, i], :]
                        score_lines[[i, i + 1], :] = score_lines[[i + 1, i], :]
                        items[i], items[i + 1] = items[i + 1], items[i]
        with open("学生.csv", 'w', encoding='utf-8', newline='') as df:
            csv_write = csv.writer(df)
            students = ['学号', '姓名', '性别']
            csv_write.writerow(students)
            for line in student_lines:
                csv_write.writerow(line)
        with open("课程.csv", 'w', encoding='utf-8', newline='') as df:
            csv_write = csv.writer(df)
            lesson = ['课程']
            csv_write.writerow(lesson)
            for line in lesson_lines:
                csv_write.writerow(line)
        with open("成绩.csv", 'w', encoding='utf-8', newline='') as df:
            csv_write = csv.writer(df)
            score = ['成绩', '评级']
            csv_write.writerow(score)
            for line in score_lines:
                csv_write.writerow(line)
        print("排序之后的数据为:")
        self.printf_student_data()

    # 输出当前所有学生信息
    def printf_student_data(self):
        items = np.array(pd.read_csv("成绩.csv"))[:, 0]
        for i in range(0, len(items)):
            student_data = list(np.array(pd.read_csv("学生.csv"))[i])
            lesson_data = list(np.array(pd.read_csv("课程.csv"))[i])
            score_data = list(np.array(pd.read_csv("成绩.csv"))[i])
            print(
                f"学号:{student_data[0]}\t姓名:{student_data[1]}\t性别:{student_data[2]}\t课程:{lesson_data[0]}\t成绩:{score_data[0]}\t评级:{score_data[1]}")


if __name__ == '__main__':
    student = student_status()
    # student.revise_data()
    if not os.path.exists('学生.csv'):
        creat_data()  # 调用创造初始文件
    while True:
        print("*" * 51)
        print("--------欢迎使用学生学籍管理系统!!--------------------")
        print("--------输入1对学生学籍数据进行写入--------------------")
        print("--------输入2对学生学籍数据进行查询--------------------")
        print("--------输入3对学生学籍数据进行插入--------------------")
        print("--------输入4对学生学籍数据进行删除--------------------")
        print("--------输入5对学生学籍数据进行修改--------------------")
        print("--------输入6对学生学籍数据进行排序--------------------")
        print("--------输入7对学生学籍数据进行查看--------------------")
        print("--------输入8退出学生学籍数据管理系统-------------------")
        print("*" * 51)
        number = int(input("请输入数字选择你要进行的操作-->"))
        if number == 1:
            student.entry_data()
        if number == 2:
            student.search_data()
        if number == 3:
            student.insert_data()
        if number == 4:
            student.delete_data()
        if number == 5:
            student.revise_data()
        if number == 6:
            student.sort_data()
        if number == 7:
            student.printf_student_data()
        if number == 8:
            break
    print("感谢您对本系统的使用和信任!!!")

  • 16
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值