学籍管理:对学生、课程、成绩分别建立三个数据文件(学生、课程、成绩属性自定)。
完成下列各题:
①对数据录入
②查询(如:某个学生的选课情况、成绩不及格的学生情况)
③插入、删除、修改
④排序(如:对课程名按不及格学生人数进行)等功能。(用文件或数组方式完成均可)
一个数据结构选的简单课设
用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("感谢您对本系统的使用和信任!!!")