MATLAB 设计一个学生管理系统(类与对象)

Posted Wang_rush

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MATLAB 设计一个学生管理系统(类与对象)相关的知识,希望对你有一定的参考价值。

设计一个简单的学生成绩管理程序,包含如下功能:
1、可创建不少于100名学生成员;
2、每名成员的记录包括:学号、姓名、专业和5门课程的成绩; 
3、能够实现添加、删除、修改学生成员;
4、能够实现添加、删除、修改学生成员的课程成绩;
5、分别计算每一门课程的平均成绩 ;
6、每一门课程单独排序,输出由高到低的课程、姓名、成绩信息。

文件代码
将文件夹放入工作目录,运行main.m文件
版本2020a

%%main.m
clear all;
global stu;
stu = students();
welcome();
while true
    choices();
    op = input('\\n请输入你要进行的操作(输入括号内代表的操作数):');
    switch op
        case 0
            goodbye();
            clear all;
            break
        case 1
            stu.print();
        case 2
            add_student();
        case 3
            remove_student();
        case 4
            update_student();
        case 5
            add_grade();
        case 6
            update_grade();
        case 7
            remove_grade();
        case 8
            avg_grade();
        case 9
            sort_grade();
        otherwise
            warning('请输入正确的操作数');
    end
end

function welcome()
fprintf('------------------------------------------------------------\\n');
fprintf('|                                                          |\\n');
fprintf('|                                                          |\\n');
fprintf('|                   欢迎使用学生管理系统                    |\\n');
fprintf('|          本系统所有数据保存在内存中,关闭即丢失,请注意    |\\n');
fprintf('|                                                          |\\n');
fprintf('|                                                          |\\n');
fprintf('------------------------------------------------------------\\n');
end
function goodbye()
fprintf('------------------------------------------------------------\\n');
fprintf('|                                                          |\\n');
fprintf('|                                                          |\\n');
fprintf('|                系统已结束,所有信息均已删除               |\\n');
fprintf('|                         欢迎再次使用:)                   |\\n');
fprintf('|                                                          |\\n');
fprintf('|                                                          |\\n');
fprintf('------------------------------------------------------------\\n');
end
% 选项页面
function choices()
fprintf('查看所有学生信息\\t\\t(1)\\n');
fprintf('添加学生\\t\\t\\t\\t(2)\\n');
fprintf('删除学生\\t\\t\\t\\t(3)\\n');
fprintf('修改学生信息\\t\\t\\t(4)\\n');
fprintf('添加学生成绩\\t\\t\\t(5)\\n');
fprintf('修改学生成绩\\t\\t\\t(6)\\n');
fprintf('删除学生成绩\\t\\t\\t(7)\\n');
fprintf('单科平均成绩\\t\\t\\t(8)\\n');
fprintf('单科成绩排名\\t\\t\\t(8)\\n');
fprintf('结束程序\\t\\t\\t\\t(0)\\n');
end
function add_student()
    global stu;
    id = input('\\n请输入学号:');
    if ~isreal(id)
        warning('请输入正确的数字');
        return
    end
    if stu.find_by_id(id) ~= -1
        warning('已经有同样学号的学生了,请更改学号');
        return
    end
    name = input('请输入姓名:', 's');
    zy = input('请输入专业:', 's');
    op = input('是否输入成绩?(y/n):', 's');
    if op == 'n'
        isok = stu.append(student(id, name, zy));
        if isok == 1
            fprintf('\\n添加成功\\n\\n');
        else
            fprintf('\\n添加失败\\n');
        end
        return
    end
    ke1 = input('课程1成绩:');
    ke2 = input('课程2成绩:');
    ke3 = input('课程3成绩:');
    ke4 = input('课程4成绩:');
    ke5 = input('课程5成绩:');
    isok = stu.append(student(id, name, zy, ke1, ke2, ke3, ke4, ke5));
    if isok == 1
        fprintf('\\n添加成功\\n\\n');
    else
        fprintf('\\n添加失败\\n\\n');
    end
end
function remove_student()
    global stu;
    id = input('\\n请输入要删除学生的学号:');
    if ~isreal(id)
        warning('请输入正确的数字');
        return
    end
    isok = stu.delete_student_by_id(id);
    if isok == 1
        fprintf('\\n删除成功\\n\\n');
    else
        fprintf('\\n删除失败\\n\\n');
    end
end
function update_student()
    global stu;
    id = input('\\n请输入要修改信息的学生的学号:');
    if ~isreal(id)
        warning('请输入正确的数字');
        return
    end
    idx = stu.find_by_id(id);
    if idx == -1
        warning('未找到该学生');
        return
    end
    fprintf('修改学号\\t\\t(1)\\n');
    fprintf('修改姓名\\t\\t(2)\\n');
    fprintf('修改专业\\t\\t(3)\\n');
    op = input('请输入要进行的操作:');
    values = input('请输入修改后的信息:');
    isok = stu.update_student_by_id(id, op, values);
    if isok == 1
        fprintf('\\n修改成功\\n\\n');
    else
        fprintf('\\n修改失败\\n\\n');
    end
end
function add_grade()
    global stu;
    id = input('\\n请输入学号:');
    if ~isreal(id)
        warning('请输入正确的数字');
        return
    end
    idx = stu.find_by_id(id);
    if idx == -1
        warning('未找到该学生');
        return
    end
    op = input('请输入要添加几号课程的成绩:');
    values = input('请输入成绩');
    isok = stu.update_grade_by_id(id, op, values);
    if isok == 1
        fprintf('\\n添加成功\\n\\n');
    else
        fprintf('\\n添加失败\\n');
    end
end
function update_grade()
    global stu;
    id = input('\\n请输入学号:');
    if ~isreal(id)
        warning('请输入正确的数字');
        return
    end
    idx = stu.find_by_id(id);
    if idx == -1
        warning('未找到该学生');
        return
    end
    op = input('请输入要修改几号课程的成绩:');
    values = input('请输入成绩');
    isok = stu.update_grade_by_id(id, op, values);
    if isok == 1
        fprintf('\\n修改成功\\n\\n');
    else
        fprintf('\\n修改失败\\n');
    end
end
function remove_grade()
    global stu;
    id = input('\\n请输入学号:');
    if ~isreal(id)
        warning('请输入正确的数字');
        return
    end
    idx = stu.find_by_id(id);
    if idx == -1
        warning('未找到该学生');
        return
    end
    op = input('请输入要删除几号课程的成绩:');
    isok = stu.delete_grade_by_id(id, op);
    if isok == 1
        fprintf('\\n修改成功\\n\\n');
    else
        fprintf('\\n修改失败\\n');
    end
end
function avg_grade()
    global stu;
    op = input('请输入要计算第几门课程的成绩?(1~5):');
    fprintf('平均成绩为:%d\\n\\n', stu.average(op));
end
function sort_grade()
    global stu;
    op = input('请输入要按照第几门的课程成绩排名?(1~5):');
    switch op
        case 1
            f = @stu.cmp1;
        case 2
            f = @stu.cmp2;
        case 3
            f = @stu.cmp3;
        case 4
            f = @stu.cmp4;
        case 5
            f = @stu.cmp5;
        otherwise
            warning('请输入正确的操作数');
            return
    end
    stu.sort(f);
end

%%student.m
%单个学生定义类
classdef student < handle
    properties
        id              %学号 num
        name            %姓名 str
        zhuanye         %专业 str
        ke1             %1  num
        ke2             %2  num
        ke3             %3  num
        ke4             %4  num
        ke5             %5  num
    end
    methods
        function obj = student(varargin)
            if (nargin > 0)
                obj.id = varargin1;
            end
            if (nargin < 1)
                obj.id = [];
            end
            if (nargin > 1)
                obj.name = varargin2;
            end
            if (nargin < 2)
                obj.name = -1;
            end
            if (nargin > 2)
                obj.zhuanye = varargin3;
            end
            if (nargin < 3)
                obj.zhuanye = -1;
            end
            if (nargin > 3)
                obj.ke1 = varargin4;
            end
            if (nargin < 4)
                obj.ke1 = -1;
            end
            if (nargin > 4)
                obj.ke2 = varargin5;
            end
            if (nargin < 5)
                obj.ke2 = -1;
            end
            if (nargin > 5)
                obj.ke3 = varargin6;
            end
            if (nargin < 6)
                obj.ke3 = -1;
            end
            if (nargin > 6)
                obj.ke4 = varargin7;
            end
            if (nargin < 7)
                obj.ke4 = -1;
            end
            if (nargin > 7)
                obj.ke5 = varargin8;
            end
            if (nargin < 8)
                obj.ke5 = -1;
            end
        end
        function obj = print(obj)
            fprintf('学号:%d\\t姓名:%s\\t专业:%s\\n', obj.id, obj.name, obj.zhuanye);
            fprintf('\\n');
        end
        function obj = print_line(obj)
            fprintf('%d\\t\\t%s', obj.id, obj.name);
            % 单行输出,姓名长度自适应
            if length(obj.name) > 2
                fprintf('\\t');
            else
                fprintf('\\t\\t');
            end
            fprintf('%s\\t\\t%d\\t\\t%d\\t\\t%d\\t\\t%d\\t\\t%d\\t\\t\\n', obj.zhuanye, obj.ke1, obj.ke2, obj.ke3, obj.ke4, obj.ke5);
        end
    end
end

%%students.m
% 学生列表类
% 建议点击每个function前面的加号,折叠代码,便于阅读
classdef students < handle
    properties
        stus = []
    end
    methods
        % 课程平均成绩,没有成绩的会被算0分
        function res = average(obj, op)
            res = 0;
            len = length(obj.stus);
            switch op
                case 1
                    for i = obj.stus
                        if i.ke1 ~= -1
                            res = res + i.ke1;
                        end
                    end
                case 2
                    for i = obj.stus
                        if i.ke2 ~= -1
                            res = res + i.ke2;
                        end
                    end
                case 3
                    for i = obj.stus
                        if i.ke3 ~= -1
                            res = res + i.ke3;
                        end
                    end
                case 4
                    for i = obj.stus
                        if i.ke4 ~= -1
                            res = res + i.ke4;
                        end
                    end
                case 5
                    for i = obj.stus
                        if i.ke5 ~= -1
                            res = res + i.ke5;
                        end
                    end
            end
            if len > 0
                res = res / len;
            end
        end
        function swap(obj, a, b)
            c = obj.stus(a);
            obj.stus(a) = obj.stus(b);
            obj.stus(b) = c;
        end
        % 比较函数
        function res = cmp1(obj, a, b)
            if obj.stus(a).ke1 == obj.stus(b).ke1
                if obj.stus(a).id > obj.stus(b).id
                    res = -1;
                else
                    res = 1;
                end
            elseif obj.stus(a).ke1 < obj.stus(b).ke1
                res = -1;
            else
                res = 1;
            end
        end
        function res = cmp2(obj, a, b)
            if obj.stus(a).ke2 == obj.stus(b).ke2
                if obj.stus(a).id > obj.stus(b).id
                    res = -1;
                else
                    res = 1;
                end
            elseif obj.stus(a).ke2 < obj.stus(b).ke2
                res = -1;
            else
                res = 1;
            end
        end
        function res = cmp3(obj, a, b)
            if obj.stus(a).ke3 == obj.stus(b).ke3
                if obj.stus(a).id > obj.stus(b).id
                    res = -1;
                else
                    res = 1;
                end
            elseif obj.stus(a).ke3 < obj.stus(b).ke3
                res = -1;
            else
                res = 1;
            end
        end
        function res = cmp4(obj, a, b)
            if obj.stus(a).ke4 == obj.stus(b).ke4
                if obj.stus(a).id > obj.以上是关于MATLAB 设计一个学生管理系统(类与对象)的主要内容,如果未能解决你的问题,请参考以下文章

MATLAB 设计一个学生管理系统(类与对象)

MATLAB 设计一个学生管理系统(类与对象)

数据分析基于matlab GUI学生成绩管理系统含Matlab源码 1981期

MATLAB 设计一个学生管理系统(简易结构体版)

MATLAB 设计一个学生管理系统(简易结构体版)

MATLAB 设计一个学生管理系统(简易结构体版)