# 重点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();
}