深度分析MVC学生信息管理系统

# 重点1:本类中方法互相调用self.方法名
# 重点2:跨类调用语法——构造函数中实例化变量 = 他类实例化,可以用实例化变量调用他类
# 重点3:跨类调用语法——在方法中变量=他类实例化,每次调用方法时都会执行他类构造函数
# 重点4:不被调用的属性私有化
# 重点5:根据需求写对象时提前注意重写的内置函数有哪些
class StudentModel:
    """学生模型: 封装View与Controller传递数据"""

    def __init__(self, name='', age=0, score=0, sid=0):
        self.name = name
        self.age = age
        self.score = score
        self.sid = sid

    def __str__(self):  # 打印信息
        return f'学号:{self.sid}\t姓名:{self.name}\t年龄:{self.age}\t成绩:{self.score}'

    # def __gt__(self, other):  # 根据分数确定大小
    #     return self.score > other.score
    #
    # def __ge__(self, other):  # 分数相等的时候
    #     return self.score >= other.score


class StudentController:
    """学生控制器:负责处理业务逻辑"""

    def __init__(self):
        self.list_student = []  # 储存学生信息的列表
        self.__start_id = 1001  # 初始化学号

    # 增
    def add_student(self, new):
        new.sid = self.__start_id
        self.__start_id += 1
        self.list_student.append(new)

    # 删
    def remove_student(self, sid):
        for item in self.list_student:
            if sid == item.sid:
                self.list_student.remove(item)
                return True
        return False

    # 改
    def update_student(self, new):
        for item in self.list_student:
            if item.sid == new.sid:
                item.__dict__ = new.__dict__  # 字典匹配赋值
                return True
        return False

    # 查
    def show_student(self, sid):
        for item in self.list_student:
            if item.sid == sid:
                print(item)
                return True
        return False

    # 排序
    def rank(self):
        rank_list = self.list_student.copy()
        rank_list.sort(key=lambda x: x.score, reverse=True)  # 根据分数排序学生信息
        return rank_list


class StudentView:
    """视图:提供输入、输出等界面逻辑"""

    def __init__(self):
        self.__controller = StudentController()  # 重点3:跨类语法调用2,#私有变量

    # 入口
    def main(self):
        print('欢迎进入学生信息管理系统!')
        print('按1录入学生信息')
        print('按2查看学生信息')
        print('按3删除学生信息')
        print('按4修改学生信息')
        print('按5键退出')
        num = input('请输入需要进行的操作:')
        if num == '1':
            self.__input_student()  # 重点1:本类中方法互相调用self.方法名
        elif num == '2':
            self.__select_students()  # 重点4:自动生成函数快捷键:alt+回车
        elif num == '3':
            self.__delete_student()
        elif num == '4':
            self.__modify_student()
        elif num == '5':
            print('感谢使用!')

    # 增 #私有方法
    def __input_student(self):
        # 重点2:跨类调用语法1
        model = StudentModel()
        model.name = input('请输入姓名:')
        model.age = int(input('请输入年龄:'))
        model.score = int(input('请输入分数:'))
        self.__controller.add_student(model)  # 重点3:跨类语法调用2

    # 删
    def __delete_student(self):
        sid = int(input('输入需要删除的学号:'))
        if self.__controller.remove_student(sid):
            print('删除成功!')
        else:
            print('删除失败!')

    # 改
    def __modify_student(self):
        model = StudentModel()
        model.sid = int(input('请输入需要修改学生的学号:'))
        n = 0
        for item in self.__controller.list_student:
            if item.sid == model.sid:
                print('该学生的信息是:')
                print(item)
                model.name = input('请输入新的姓名:')
                model.age = int(input('请输入新的年龄:'))
                model.score = int(input('请输入新的分数:'))
                if self.__controller.update_student(model):
                    print('修改成功!')
                break
            else:
                n += 1
                if n == len(self.__controller.list_student):
                    # 遍历完所有说明查不到
                    print('未查询到该学生!')

    # 查
    def __select_students(self):
        print('按1键查看所有学生信息')
        print('按2键根据学号查询信息')
        print('按3键查看学生分数排名')
        print('按4键退出查询')
        while True:
            num = input('请选择:')
            if num == '1':
                for item in self.__controller.list_student:
                    print(item)
                break
            elif num == '2':
                sid = int(input('请输入学生学号:'))
                self.__controller.show_student(sid)
                break
            elif num == '3':
                rank_list = self.__controller.rank()
                for item in rank_list:
                    print(f'第{rank_list.index(item) + 1}名:{item}')
                break
            elif num == '4':
                self.main()
                break


view = StudentView()
while True:
    view.main()

c++

xitong.h

#include<vector>
struct student
{	
	int id;
	char name[9];
	int age;
	int score;
};

class View {
private:
	int id = 1001;
	vector<student> students;
	void add();
	void show();
	void remove();
public:
	void list();
};

xingtong.cpp

#include<iostream>
#include<locale>

using namespace std;
#include"xitong.h"

void View::list(){
	while (true)
	{
		int num;
		cout << "学生信息管理系统!" << endl;
		cout << "1.添加信息" << endl;
		cout << "2.查看信息" << endl;
		cout << "3.删除信息" << endl;
		cout << "0.退出" << endl;
		cout << "请输入:";	cin >> num;
		if (num == 0) break;
		else if (num == 1) this->add();
		else if (num == 2) this->show();
		else if (num == 3) this->remove();
		else {
			cout << "输入有误,请重新输入!";
			continue;
		};
	}
}

void View::add() {
	while (true)
	{
		student stu;
		char name[9]; int age, score;
		cout << "请输入姓名,年龄,分数:"; cin >> name >> age >> score;
		stu.age = age; stu.score = score; stu.id = this->id;
		strcpy_s(stu.name, sizeof(stu.name), name);
		this->students.push_back(stu);
		this->id++;
		cout << "添加成功!" << endl;
		break;
	}

}
void View::show() {
	int length = this->students.size();
	for (int i = 0; i < length; i++)
	{
		cout << this->students[i].id << "\t";
		cout << this->students[i].name << "\t";
		cout << this->students[i].age << "\t";
		cout << this->students[i].score << endl;
	}
}

void View::remove() {
	int num;
	cout << "请输入需要删除的编号:"; cin >> num;
	int length = this->students.size();
	for (int i = 0; i < length; i++)
	{
		if (this->students[i].id == num)
		{
			this->students.erase(this->students.begin() + i);
			cout << "删除成功!" << endl;
			break;
		}
		else cout << "没有该学生" << endl;;
	}
}

student.cpp

// student.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//
#include<locale>
#include <iostream>
using namespace std;
#include "xitong.h"


int main()
{
	View view;
	view.list();
}

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值