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 = varargin{1};
end
if (nargin < 1)
obj.id = [];
end
if (nargin > 1)
obj.name = varargin{2};
end
if (nargin < 2)
obj.name = -1;
end
if (nargin > 2)
obj.zhuanye = varargin{3};
end
if (nargin < 3)
obj.zhuanye = -1;
end
if (nargin > 3)
obj.ke1 = varargin{4};
end
if (nargin < 4)
obj.ke1 = -1;
end
if (nargin > 4)
obj.ke2 = varargin{5};
end
if (nargin < 5)
obj.ke2 = -1;
end
if (nargin > 5)
obj.ke3 = varargin{6};
end
if (nargin < 6)
obj.ke3 = -1;
end
if (nargin > 6)
obj.ke4 = varargin{7};
end
if (nargin < 7)
obj.ke4 = -1;
end
if (nargin > 7)
obj.ke5 = varargin{8};
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.stusMATLAB 设计一个学生管理系统(类与对象)