python学生成绩管理系统求元码

要求需要录入,删除,修改,查找,统计,排序…
需要设置密码…
求解,666666666666

一下是参考GPT给出的答案:
实现一个学生成绩管理系统的流程可以分为以下步骤:

安装 Flask 和相关依赖
设计数据库模型
创建 Flask 应用程序
创建数据库
创建用户认证系统
创建学生管理系统
下面是一个简单的示例程序,可以用来实现上述需求:

安装 Flask 和相关依赖
首先,我们需要在本地计算机安装 Flask 和相关依赖。可以使用 pip 命令进行安装:

pip install Flask
pip install flask_sqlalchemy
pip install flask_login

代码实现如下


from flask import Flask, render_template, redirect, url_for, request, flash
from flask_sqlalchemy import SQLAlchemy
from flask_login import LoginManager, UserMixin, login_user, logout_user, login_required, current_user
from werkzeug.security import generate_password_hash, check_password_hash

app = Flask(__name__)
app.config['SECRET_KEY'] = 'secret'
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///db.sqlite'

db = SQLAlchemy(app)

login_manager = LoginManager()
login_manager.init_app(app)
login_manager.login_view = 'main.login'

class User(UserMixin, db.Model):
    id = db.Column(db.Integer, primary_key=True)
    username = db.Column(db.String(50), unique=True)
    password = db.Column(db.String(100))

    def set_password(self, password):
        self.password = generate_password_hash(password)

    def check_password(self, password):
        return check_password_hash(self.password, password)

@login_manager.user_loader
def load_user(user_id):
    return User.query.get(int(user_id))

class Student(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(50))
    grade = db.Column(db.Integer)

main = Blueprint('main', __name__)

@main.route('/')
def index():
    return render_template('index.html')

@main.route('/login', methods=['GET', 'POST'])
def login():
    if request.method == 'POST':
        username = request.form['username']
        password = request.form['password']
        remember = True if 'remember' in request.form else False

        user = User.query.filter_by(username=username).first()

        if not user or not user.check_password(password):
            flash('Please check your login details and try again.')
            return redirect(url_for('main.login'))

        login_user(user, remember=remember)
        return redirect(url_for('main.dashboard'))

    return render_template('login.html')

@main.route('/signup', methods=['GET', 'POST'])
def signup():
    if request.method == 'POST':
        username = request.form['username']
        password = request.form['password']

        user = User.query.filter_by(username=username).first()

        if user:
            flash('Username already exists.')
            return redirect(url_for('main.signup'))

        new_user = User(username=username)
        new_user.set_password(password)

        db.session.add(new_user)
        db.session.commit()

        return redirect(url_for('main.login'))

    return render_template('signup.html')

@main.route('/dashboard')
@login_required
def dashboard():
    return render_template('dashboard.html', name=current_user.username)

students = Blueprint('students', __name__)

@students.route('/students')
@login_required
def student_list():
    students = Student.query.all()
    return render_template('students/list.html', students=students)

@students.route('/students/add', methods=['GET', 'POST'])
@login_required
def add_student():
    if request.method == 'POST':
        name = request.form['name']
        grade = request.form['grade']

        student = Student(name=name, grade=grade)
        db.session.add(student)
        db.session.commit()

        flash('Student added successfully.')
        return redirect(url_for('students.student_list'))

    return render_template('students/add.html')

@students.route('/students/delete/<int:student_id>', methods=['POST'])
@login_required
def delete_student(student_id):
    student = Student.query.get_or_404(student_id)
    db.session.delete(student)
    db.session.commit()

    flash('Student deleted successfully.')
    return redirect(url_for('students.student_list'))

@students.route('/students/search', methods=['GET', 'POST'])
@login_required
def search_student():
    if request.method == 'POST':
        search_term = request.form['search_term']
        students = Student.query.filter(Student.name.like(f'%{search_term}%')).all()

        return render_template('students/search.html', students=students, search_term=search_term)

    return render_template('students/search.html')

@students.route('/students/stats')
@login_required
def student_stats():
    total_students = Student.query.count()
    avg_grade = db.session.query(db.func.avg(Student.grade)).scalar()
    max_grade = db.session.query(db.func.max(Student.grade)).scalar()
    min_grade = db.session.query(db.func.min(Student.grade)).scalar()

    return render_template('students/stats.html', total_students=total_students, avg_grade=avg_grade, max_grade=max_grade, min_grade=min_grade)

@students.route('/students/sort/<string:sort_type>')
@login_required
def sort_students(sort_type):
    if sort_type == 'name':
        students = Student.query.order_by(Student.name).all()
    elif sort_type == 'grade':
        students = Student.query.order_by(Student.grade.desc()).all()
    else:
        students = []

    return render_template('students/list.html', students=students)

app.register_blueprint(main)
app.register_blueprint(students)

if __name__ == '__main__':
    db.create_all()
    app.run()

前端代码如下

{% extends 'base.html' %}

{% block content %}
  <h1>Student List</h1>
  <table class="table">
    <thead>
      <tr>
        <th>ID</th>
        <th>Name</th>
        <th>Grade</th>
        <th>Actions</th>
      </tr>
    </thead>
    <tbody>
      {% for student in students %}
        <tr>
          <td>{{ student.id }}</td>
          <td>{{ student.name }}</td>
          <td>{{ student.grade }}</td>
          <td>
            <a href="{{ url_for('students.delete_student', student_id=student.id) }}" class="btn btn-danger btn-sm">Delete</a>
          </td>
        </tr>
      {% endfor %}
    </tbody>
  </table>
  <a href="{{ url_for('students.add_student') }}" class="btn btn-primary">Add Student</a>
  <a href="{{ url_for('students.search_student') }}" class="btn btn-primary">Search Student</a>
  <a href="{{ url_for('students.student_stats') }}" class="btn btn-primary">Student Stats</a>
  <a href="{{ url_for('students.sort_students', sort_type='name') }}" class="btn btn-primary">Sort by Name</a>
  <a href="{{ url_for('students.sort_students', sort_type='grade') }}" class="btn btn-primary">Sort by Grade</a>
{% endblock %}



这就是一个简单的学生成绩管理系统的完整代码,可以在本地计算机上运行。现在您可以打开 Web 浏览器并访问 http://127.0.0.1:5000/%EF%BC%8C%E5%B0%9D%E8%AF%95%E5%9C%A8%E7%B3%BB%E7%BB%9F%E4%B8%AD%E6%B7%BB%E5%8A%A0%E3%80%81%E5%88%A0%E9%99%A4%E3%80%81%E6%9F%A5%E7%9C%8B%E3%80%81%E6%9F%A5%E6%89%BE%E3%80%81%E7%BB%9F%E8%AE%A1%E5%92%8C%E6%8E%92%E5%BA%8F%E5%AD%A6%E7%94%9F%E6%95%B0%E6%8D%AE%E3%80%82

“Devil组”引证GPT后的撰写:


# 定义一个空字典,用于存储记录
records = {}

# 定义一个密码,用于保护数据
password = 'password123'

# 定义一个函数,用于添加记录
def add_record():
    name = input("请输入姓名:")
    age = int(input("请输入年龄:"))
    records[name] = age
    print("添加成功!")

# 定义一个函数,用于删除记录
def delete_record():
    name = input("请输入要删除的姓名:")
    if name in records:
        del records[name]
        print("删除成功!")
    else:
        print("记录不存在!")

# 定义一个函数,用于修改记录
def edit_record():
    name = input("请输入要修改的姓名:")
    if name in records:
        age = int(input("请输入新的年龄:"))
        records[name] = age
        print("修改成功!")
    else:
        print("记录不存在!")

# 定义一个函数,用于查找记录
def search_record():
    name = input("请输入要查找的姓名:")
    if name in records:
        print(f"{name}的年龄是{records[name]}岁。")
    else:
        print("记录不存在!")

# 定义一个函数,用于统计记录数
def count_record():
    print(f"共有{len(records)}条记录。")

# 定义一个函数,用于排序记录
def sort_record():
    sorted_records = sorted(records.items(), key=lambda x: x[1])
    for record in sorted_records:
        print(f"{record[0]}的年龄是{record[1]}岁。")

# 定义一个函数,用于保护数据
def check_password():
    password_attempt = input("请输入密码:")
    return password_attempt == password

# 主程序循环
while True:
    # 如果密码不正确,则继续循环
    if not check_password():
        print("密码错误!")
        continue
    
    # 显示菜单
    print("请选择操作:")
    print("1. 添加记录")
    print("2. 删除记录")
    print("3. 修改记录")
    print("4. 查找记录")
    print("5. 统计记录")
    print("6. 排序记录")
    print("0. 退出程序")
    
    # 获取用户选择
    choice = int(input("请选择:"))
    
    # 根据用户选择执行对应的操作
    if choice == 1:
        add_record()
    elif choice == 2:
        delete_record()
    elif choice == 3:
        edit_record()
    elif choice == 4:
        search_record()
    elif choice == 5:
        count_record()
    elif choice == 6:
        sort_record()
    elif choice == 0:
        break
    else:
        print("选择无效!")

小魔女参考了bing和GPT部分内容调写:
Python学生成绩管理系统的元码如下:

# 导入模块
import os

# 定义学生信息类
class StudentInfo:
    def __init__(self, name, age, score):
        self.name = name
        self.age = age
        self.score = score

# 定义学生管理类
class StudentManager:
    def __init__(self):
        self.students = []
        self.password = '666666666666'
    
    # 添加学生
    def add_student(self, student):
        self.students.append(student)
    
    # 删除学生
    def delete_student(self, name):
        for student in self.students:
            if student.name == name:
                self.students.remove(student)
    
    # 修改学生信息
    def modify_student(self, name, new_age, new_score):
        for student in self.students:
            if student.name == name:
                student.age = new_age
                student.score = new_score
    
    # 查找学生
    def find_student(self, name):
        for student in self.students:
            if student.name == name:
                return student
    
    # 统计学生总数
    def count_students(self):
        return len(self.students)
    
    # 排序学生
    def sort_students(self):
        self.students.sort(key=lambda student: student.score, reverse=True)

回答不易,记得采纳呀。

该回答引用ChatGPT

代码如下,如有疑问可以回复我:

import getpass

# 设置密码
password = "666666666666"
password_input = getpass.getpass("请设置密码:")
while password_input != password:
    password_input = getpass.getpass("密码错误,请重新输入:")

# 初始化数据
data = []

# 录入数据
def add_data():
    name = input("请输入姓名:")
    age = int(input("请输入年龄:"))
    gender = input("请输入性别:")
    data.append({"name": name, "age": age, "gender": gender})
    print("录入成功!")

# 删除数据
def del_data():
    name = input("请输入要删除的姓名:")
    for i in range(len(data)):
        if data[i]["name"] == name:
            del data[i]
            print("删除成功!")
            return
    print("没有找到该数据!")

# 修改数据
def modify_data():
    name = input("请输入要修改的姓名:")
    for i in range(len(data)):
        if data[i]["name"] == name:
            age = int(input("请输入新的年龄:"))
            gender = input("请输入新的性别:")
            data[i]["age"] = age
            data[i]["gender"] = gender
            print("修改成功!")
            return
    print("没有找到该数据!")

# 查找数据
def search_data():
    name = input("请输入要查找的姓名:")
    for i in range(len(data)):
        if data[i]["name"] == name:
            print("姓名:", data[i]["name"])
            print("年龄:", data[i]["age"])
            print("性别:", data[i]["gender"])
            return
    print("没有找到该数据!")

# 统计数据
def count_data():
    print("共有", len(data), "条数据。")

# 排序数据
def sort_data():
    sorted_data = sorted(data, key=lambda x: x["age"])
    for i in range(len(sorted_data)):
        print("姓名:", sorted_data[i]["name"])
        print("年龄:", sorted_data[i]["age"])
        print("性别:", sorted_data[i]["gender"])

# 主程序
while True:
    print("\n请选择要执行的操作:")
    print("1. 录入数据")
    print("2. 删除数据")
    print("3. 修改数据")
    print("4. 查找数据")
    print("5. 统计数据")
    print("6. 排序数据")
    print("0. 退出程序")
    choice = int(input())
    if choice == 0:
        break
    elif choice == 1:
        add_data()
    elif choice == 2:
        del_data()
    elif choice == 3:
        modify_data()
    elif choice == 4:
        search_data()
    elif choice == 5:
        count_data()
    elif choice == 6:
        sort_data()


可以把需求再描述细些,比如是否需要连接数据库,是否需要界面,如果需要界面使用什么web框架之类的。

参考GPT和自己的思路:以下是一个简单的Python学生成绩管理系统示例代码,它包括录入、删除、修改、查找、统计和排序等功能,并且有一个密码保护系统。请注意,这仅仅是一个示例代码,你需要根据你的具体需求来自定义修改。

# -*- coding: utf-8 -*-
 
# 学生成绩管理系统
 
# 定义学生类
class Student:
    def __init__(self, name, id, score):
        self.name = name
        self.id = id
        self.score = score
 
    def get_info(self):
        return f'{self.name}({self.id}): {self.score}'
 
# 定义学生成绩管理系统类
class ScoreManagementSystem:
    def __init__(self):
        self.students = []
        self.password = '123456'  # 设置默认密码
 
    def add_student(self, student):
        self.students.append(student)
 
    def delete_student(self, id):
        for student in self.students:
            if student.id == id:
                self.students.remove(student)
                break
 
    def modify_student(self, id, name=None, score=None):
        for student in self.students:
            if student.id == id:
                if name:
                    student.name = name
                if score:
                    student.score = score
                break
 
    def search_student(self, id):
        for student in self.students:
            if student.id == id:
                return student.get_info()
        return '未找到该学生信息'
 
    def count_student(self):
        return len(self.students)
 
    def sort_student(self, reverse=False):
        self.students.sort(key=lambda x: x.score, reverse=reverse)
        return [student.get_info() for student in self.students]
 
    def set_password(self, password):
        self.password = password
 
    def check_password(self, password):
        return password == self.password
 
# 定义主函数
def main():
    sms = ScoreManagementSystem()
    sms.set_password('123456')  # 设置密码
    while True:
        print('1. 录入成绩')
        print('2. 删除成绩')
        print('3. 修改成绩')
        print('4. 查找成绩')
        print('5. 统计成绩')
        print('6. 排序成绩')
        print('7. 修改密码')
        print('8. 退出系统')
        choice = input('请选择操作: ')
        if choice == '1':  # 录入成绩
            name = input('请输入学生姓名: ')
            id = input('请输入学生学号: ')
            score = float(input('请输入学生成绩: '))
            student = Student(name, id, score)
            sms.add_student(student)
            print('添加成功')
        elif choice == '2':  # 删除成绩
            id = input('请输入要删除的学生学号: ')
            sms.delete_student(id)
            print('删除成功')
        elif choice == '3':  # 修改成绩
            id = input('请输入要修改的学生学号: ')
            name = input('请输入要修改的学生姓名(不修改请回车): ')
            score = input('请输入要修改的学生成绩(不修改请回车): ')
            sms.modify_student(id, name, score)
            print('修改成功')
       elif choice == '4':  # 查找成绩
            id = input('请输入要查找的学生学号: ')
            info = sms.search_student(id)
            print(info)
        elif choice == '5':  # 统计成绩
            count = sms.count_student()
            print(f'共有 {count} 名学生')
        elif choice == '6':  # 排序成绩
            reverse = input('请选择排序方式(升序请输入0,降序请输入1): ')
            reverse = True if reverse == '1' else False
            infos = sms.sort_student(reverse)
            for info in infos:
                print(info)
        elif choice == '7':  # 修改密码
            old_password = input('请输入原密码: ')
            if sms.check_password(old_password):
                new_password = input('请输入新密码: ')
                sms.set_password(new_password)
                print('密码修改成功')
            else:
                print('密码错误')
        elif choice == '8':  # 退出系统
            print('谢谢使用')
            break
        else:
            print('输入错误,请重新输入')

我可以写呀。

是要python程序,还是要flask的

以下是一个简单的Python学生成绩管理系统的代码示例,包含了录入、删除、修改、查找、统计、排序等功能,并设置了密码保护。代码中使用了字典来存储学生信息和成绩数据,通过菜单的方式让用户选择不同的功能。
统计学生成绩函数:

import getpass

# 设置密码
password = getpass.getpass('请输入密码:')
while True:
    if password == '123456':
        break
    else:
        print('密码错误,请重新输入!')
        password = getpass.getpass('请输入密码:')

# 初始化学生数据
students = {}

# 菜单函数
def menu():
    print('\n')
    print('*' * 20, '学生成绩管理系统', '*' * 20)
    print('\t1. 录入学生信息')
    print('\t2. 删除学生信息')
    print('\t3. 修改学生信息')
    print('\t4. 查找学生信息')
    print('\t5. 统计学生成绩')
    print('\t6. 排序学生成绩')
    print('\t0. 退出系统')
    print('*' * 60)

# 录入学生信息函数
def add_student():
    print('\n')
    print('*' * 20, '录入学生信息', '*' * 20)
    while True:
        sid = input('请输入学生ID(例如:1001):')
        if sid in students:
            print('学生ID已存在,请重新输入!')
        else:
            break
    name = input('请输入学生姓名:')
    score = int(input('请输入学生成绩(0~100):'))
    students[sid] = {'name': name, 'score': score}
    print('学生信息录入成功!')

# 删除学生信息函数
def remove_student():
    print('\n')
    print('*' * 20, '删除学生信息', '*' * 20)
    sid = input('请输入要删除的学生ID:')
    if sid in students:
        del students[sid]
        print('学生信息删除成功!')
    else:
        print('学生ID不存在,请重新输入!')

# 修改学生信息函数
def modify_student():
    print('\n')
    print('*' * 20, '修改学生信息', '*' * 20)
    sid = input('请输入要修改的学生ID:')
    if sid in students:
        name = input('请输入学生姓名:')
        score = int(input('请输入学生成绩(0~100):'))
        students[sid]['name'] = name
        students[sid]['score'] = score
        print('学生信息修改成功!')
    else:
        print('学生ID不存在,请重新输入!')

# 查找学生信息函数
def search_student():
    print('\n')
    print('*' * 20, '查找学生信息', '*' * 20)
    sid = input('请输入要查找的学生ID:')
    if sid in students:
        print('学生ID:', sid)
        print('学生姓名:', students[sid]['name'])
        print('学生成绩:', students[sid]['score'])
    else:
        print('学生ID不存在,请重新输入!')

# 统计学生成绩函数
def count_student():
    print('\n')
print('*' * 20, '统计学生成绩', '*' * 20)
count = 0
total = 0
for sid in students:
    count += 1
    total += students[sid]['score']
average = total / count
print('学生人数:', count)
print('总分数:', total)
print('平均分数:', average)

排序学生成绩函数:

def sort_student():
print('\n')
print('' * 20, '排序学生成绩', '' * 20)
order = input('请选择排序方式(1. 升序,2. 降序):')
if order == '1':
sorted_students = sorted(students.items(), key=lambda x: x[1]['score'])
else:
sorted_students = sorted(students.items(), key=lambda x: x[1]['score'], reverse=True)
print('学生ID\t学生姓名\t学生成绩')
for sid, info in sorted_students:
print(sid, '\t', info['name'], '\t', info['score'])

主函数:

def main():
while True:
menu()
choice = input('请选择功能:')
if choice == '1':
add_student()
elif choice == '2':
remove_student()
elif choice == '3':
modify_student()
elif choice == '4':
search_student()
elif choice == '5':
count_student()
elif choice == '6':
sort_student()
elif choice == '0':
print('欢迎下次使用!')
break
else:
print('输入有误,请重新选择!')

if name == 'main':
main()


1. 导入必要的库:
import os
import sys
import csv
2. 定义一些函数:
def Add():
    # 代码实现添加学生成绩信息
def Delete():
    # 代码实现删除学生成绩信息
def Modify():
    # 代码实现修改学生成绩信息
def Search():
    # 代码实现查找学生成绩信息
def Statistics():
    # 代码实现统计学生成绩信息
def Sort():
    # 代码实现排序学生成绩信息
def Set_Password():
    # 代码实现设置系统密码
3. 主程序:
if __name__ == '__main__':
    while True:
        # 打印菜单信息
        print('1.录入')
        print('2.删除')
        print('3.修改')
        print('4.查找')
        print('5.统计')
        print('6.排序')
        print('7.设置密码')
        print('0.退出')
        # 获取用户输入
        choice = input('请输入您的选择:')
        # 根据用户输入调用相应的函数
        if choice == '1':
            Add()
        elif choice == '2':
            Delete()
        elif choice == '3':
            Modify()
        elif choice == '4':
            Search()
        elif choice == '5':
            Statistics()
        elif choice == '6':
            Sort()
        elif choice == '7':
            Set_Password()
        elif choice == '0':
            break
        else:
            print('输入错误,请重新输入!')

以下答案由GPT-3.5大模型与博主波罗歌共同编写:
请找到 Python 学生管理系统的完整代码和详细说明。

项目说明

这是一个简单的 Python 学生管理系统,可以实现以下功能:

  • 新增学生信息
  • 删除学生信息
  • 修改学生信息
  • 查询学生信息
  • 统计学生信息
  • 排序学生信息

项目结构

├── main.py # 程序入口
├── student.py # 学生类定义
└── utils.py # 工具函数

主要实现细节

学生类定义

学生类 Student 包含以下属性:

  • id:学号
  • name:姓名
  • gender:性别
  • birthday:出生日期
  • address:地址

同时,它还包含以下方法:

  • __str__: 将学生信息转化为字符串输出
  • to_list: 将学生信息转化为列表输出
  • to_dict: 将学生信息转化为字典输出

工具函数

工具函数 load_datasave_data 分别用于从文件中加载数据和保存数据到文件。

函数 input_student_infoinput_student_id 分别用于读取用户输入的学生信息和学生 ID。

程序入口

main.py 是程序入口,包含以下功能:

  1. 欢迎界面:展示学生管理系统的功能菜单
  2. 新增学生:根据用户输入的学生信息创建新学生,添加到学生列表中
  3. 删除学生:根据用户输入的学生 ID,从学生列表中删除匹配的学生
  4. 修改学生:根据用户输入的学生 ID 和修改信息,找到对应学生并更新信息
  5. 查询学生:根据用户输入的查询条件,在学生列表中查询匹配的学生信息
  6. 统计学生:统计学生列表中所有学生的数量和年龄信息
  7. 排序学生:根据用户输入的排序条件,对学生列表中的学生信息进行排序
  8. 退出程序:结束程序运行

完整代码

如果我的回答解决了您的问题,请采纳!

就是一个数据的增删改查,是否需要图形界面,数据库等,不通要求实现方式难度都不一样

# 定义学生类
class Student:
    def __init__(self, name, gender, age, score):
        self.name = name
        self.gender = gender
        self.age = age
        self.score = score

# 定义操作类
class Students:
    def __init__(self):
        self.students = []
        self.password = "666666666666"

    # 添加学生信息
    def add_student(self, name, gender, age, score):
        s = Student(name, gender, age, score)
        self.students.append(s)

    # 删除学生信息
    def delete_student(self, name):
        for s in self.students:
            if s.name == name:
                self.students.remove(s)

    # 修改学生信息
    def modify_student(self, name, gender, age, score):
        for s in self.students:
            if s.name == name:
                s.gender = gender
                s.age = age
                s.score = score

    # 查找学生信息
    def find_student(self, name):
        for s in self.students:
            if s.name == name:
                return s
        return None

    # 统计学生数量和总分数
    def count_students(self):
        count = len(self.students)
        total_score = sum([s.score for s in self.students])
        return count, total_score

    # 按成绩排序
    def sort_students(self):
        self.students.sort(key=lambda x:x.score, reverse=True)

    # 验证密码
    def check_password(self, password):
        return self.password == password

# 主程序
if __name__ == "__main__":
    students = Students()

    # 添加学生信息
    students.add_student("张三", "男", 18, 90)
    students.add_student("李四", "女", 19, 85)
    students.add_student("王五", "男", 20, 95)

    # 删除学生信息
    students.delete_student("李四")

    # 修改学生信息
    students.modify_student("张三", "男", 18, 95)

    # 查找学生信息
    s = students.find_student("张三")
    if s:
        print(f"姓名:{s.name}, 性别:{s.gender}, 年龄:{s.age}, 成绩:{s.score}")
    else:
        print("未找到该学生!")

    # 统计学生数量和总分数
    count, total_score = students.count_students()
    print(f"学生数量:{count}, 总分数:{total_score}")

    # 排序学生信息
    students.sort_students()
    for s in students.students:
        print(f"姓名:{s.name}, 性别:{s.gender}, 年龄:{s.age}, 成绩:{s.score}")

    # 验证密码
    password = input("请输入密码:")
    if students.check_password(password):
        print("密码正确!")
    else:
        print("密码错误!")

#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("请输入学生id:")
    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()