#include <iostream>
#include <string.h>
#include <fstream>
#include <conio.h>
#include <Windows.h>
#include <string>
using namespace std;
string ID; //定义全局的变量
class Student { //定义学生类
protected:
string Number;
char Name[30];
char Sex[10];
string Age;
Student *next;
float Grade1;
float Grade2;
float Grade3;
public:
Student(string ID, char *Name, char *Sex, string Age, float Grade1, float Grade2, float Grade3)
{ //构造函数
strcpy_s(this->Name, Name);
strcpy_s(this->Sex, Sex);
this->Grade1 = Grade1;
this->Grade2 = Grade2;
this->Grade3 = Grade3;
this->Number = ID;
this->Age = Age;
}
friend class Teacher;
};
class Teacher { //定义友元类
private:
Student *student;
public:
Teacher() { //构造函数
student = 0;
Load();
}
~Teacher() { //析构函数
Student *s;
s = student;
while (s) {
s = s->next;
delete student;
student = s;
}
student = 0;
}
void Find(char Name[20]); //名字查找
void Find(string ID); //ID查找
void Add(); //添加信息
void Delete(); //删除信息
void Modify(string ID); //修改信息
void Query(); //查询信息
void Save(); //保存数据
void Load(); //读入数据
void Look();//预览
void TJ(); //统计
void DesTory();
void Output(Student *s) //输出函数
{
cout << "\t\t学号: " << s->Number << endl;
cout << "\t\t姓名: " << s->Name << endl;
cout << "\t\t性别: " << s->Sex << endl;
cout << "\t\t年龄: " << s->Age << endl;
cout << "\t\t实验成绩: " << s->Grade1 << endl;
cout << "\t\t考勤成绩: " << s->Grade2 << endl;
cout << "\t\t报告成绩: " << s->Grade3 << endl;
cout << endl;
}
};
void Teacher::Add() //添加成绩的信息
{
system("cls");
Student *s, *s2; //新结点指针
string Number, Age;
float Grade1;
float Grade2;
float Grade3;
char Name[20], Sex[10];
char c;
cout << "\n新增学生成绩\n";
//输入学生信息
cout << "输入学号:\t";
cin >> Number;
cout << endl;
{
Student *s1;
s1 = student;
while (s1)
{
if (s1->Number == Number) //判断学号是否已经存在
{
break;
}
else
{
s1 = s1->next;
}
}
if (s1 != NULL)
{
cout << "该学号已存在,是否修改该学生信息(Y/N) " << endl;
cin >> c;
if (toupper(c) == 'Y')
{
cout << "该学生信息为:" << endl;
Find(Number);
cout << endl;
Modify(Number);
return;
}
else
return;
}
}
cout << "输入姓名:\t";
cin >> Name;
cout << endl;
cout << "输入性别:\t";
cin >> Sex;
cout << endl;
cout << "输入年龄:\t";
cin >> Age;
cout << endl;
cout << "输入实验成绩:\t";
cout << endl;
cin >> Grade1;
cout << "输入考勤成绩:\t";
cout << endl;
cin >> Grade2;
cout << "输入报告成绩:\t";
cout << endl;
cin >> Grade3;
cout << endl;
s = new Student(Number, Name, Sex, Age, Grade1, Grade2, Grade3);
s->next = 0;
//学生结点加入链表
if (student) //若已经存在结点
{
s2 = student;
while (s2->next) //查找尾结点
{
s2 = s2->next;
}
s2->next = s; //连接
}
else //若不存在结点(表空)
{
student = s; //连接
}
system("cls");
cout << "\t\t\t 添加成功\n" << endl;
cout << "是否继续添加(Y/N) " << endl;
cin >> c;
if (toupper(c) == 'Y')
{
Add();
return;
}
else
return;
}
void Teacher::Delete() //删除人员
{
system("cls");
char c;
string Number;
cout << "\n删除信息\n";
cout << "输入要删除的学生ID:\t";
cin >> Number;
cout << endl;
//查找要删除的结点
Student *s1, *s2;
s1 = student;
s2 = 0;
while (s1)
{
if (s1->Number == Number)
break;
else
{
s2 = s1;
s1 = s1->next;
}
}
//删除结点
if (s1 != NULL)//若找到结点,则删除
{
cout << "所要删除的学生的信息如下:\n" << endl;
Output(s1);
cout << "确定是否删除(Y/N): ";
cin >> c;
if (toupper(c) != 'Y')
return;
// system("pause");
if (s1 == student) //若要删除的结点是第一个结点
{
student = s1->next;
delete s1;
}
else //若要删除的结点是后续结点
{
s2->next = s1->next;
delete s1;
}
cout << "\t\t删除成功\n";
cout << "是否继续删除(Y/N) " << endl;
cin >> c;
if (toupper(c) == 'Y')
{
Delete();
return;
}
else
return;
}
else //未找到结点
cout << "未找到该学生!\n";
_getch();
}
void Teacher::Modify(string ID)
{
Student *s1;
char c;
s1 = student;
while (s1)
{
if (s1->Number == ID)
break;
else
{
s1 = s1->next;
}
}
if (s1 != NULL)//若找到结点
{
system("cls");
cout << "所要修改的学生的信息如下:\n" << endl;
Output(s1);
do
{
cout << "1. 修改姓名 2. 修改性别 3. 修改年龄 4. 修改实验成绩 5. 修改考勤成绩 6. 修改报告成绩 7. 退出修改 \n" << endl;
cout << "请选择(1-5)要修改的信息\n" << endl;
cin >> c;
if (c != '5')
cout << "请输入新的信息: ";
switch (c)
{
case '1': cin >> s1->Name; break;
case '2': cin >> s1->Sex; break;
case '3': cin >> s1->Age; break;
case '4': cin >> s1->Grade1; break;
case '5': cin >> s1->Grade2; break;
case '6': cin >> s1->Grade3; break;
default: break;
}
} while (c != '7');
system("cls");
cout << "\t修改成功\n" << endl;
cout << "是否继续修改(Y/N): " << endl;
cin >> c;
if (toupper(c) == 'Y')
{
cout << "请输入要修改人员的ID: ";
cin >> ID;
cout << endl;
Modify(ID);
return;
}
else
return;
}
else //未找到结点
cout << "未找到该学生!\n";
_getch();
}
void Teacher::Save() //数据写入到文件
{
ofstream fStudent("Student.txt", ios::out | ios::binary);
char c;
cout << "\n保存数据,是否继续?[Y/N]:";
cin >> c;
if (toupper(c) != 'Y')
return;
Student *s = student;
while (s)
{
fStudent << s->Number << " " << s->Name << " " << s->Sex << " " << s->Age << " " << s->Grade1 << " " << s->Grade2 << " " << s->Grade3 << " " << endl;
s = s->next;
}
fStudent.close();
cout << "\n保存成功!\n";
system("pause");
}
void Teacher::Load() //数据读入
{
ifstream fStudent;
Student *s = student;
string Number, Age;
float Grade1;
float Grade2;
float Grade3;
char Name[20], Sex[10];
fStudent.open("Student.dat", ios::in | ios::binary);
fStudent >> Number >> Name >> Sex >> Age >> Grade1 >> Grade2 >> Grade3;
while (fStudent.good())
{
s = new Student(Number, Name, Sex, Age, Grade1, Grade2, Grade3);
s->next = 0; //学生的结点加入链表
if (student) //若已经存在结点
{
Student *s2;
s2 = student;
while (s2->next) //查找尾结点
{
s2 = s2->next;
}
s2->next = s; //连接
}
else //若不存在结点(表空)
{
student = s; //连接
}
fStudent >> Number >> Name >> Sex >> Age >> Grade1 >> Grade2 >> Grade3;
}
fStudent.close();
}
void Teacher::Find(string ID) //按照ID进行查找
{
Student *s1;
s1 = student;
while (s1)
{
if (s1->Number == ID)
break;
else
{
s1 = s1->next;
}
}
if (s1 != NULL)
{
Output(s1);
}
else
cout << "未找到该学生" << endl;
}
void Teacher::Find(char Name[20]) //按照名字查找
{
Student *s1;
int count = 0;
s1 = student;
while (s1)
{
if (strcmp(s1->Name, Name) == 0)
{
count++;
Output(s1);
}
s1 = s1->next;
}
if (count)
{
cout << "\t查询成功!!!" << endl;
cout << "\n共找到 " << count << " 个名字为 " << Name << " 的同学\n" << endl;
}
else
cout << "\n\t\t未找到该学生!!!\n" << endl;
}
void Teacher::Query() //查找的方式
{
char c;
string ID, Grade1, Grade2, Grade3;
char Name[20];
do {
cout << "1.按学号查找\n2.按名字查找\n3.退出查找" << endl;
cin >> c;
// system("cls");
cout << endl;
switch (c)
{
case '1':
{
cout << "输入学号: ";
cin >> ID;
Find(ID);
}; break;
case '2':
{
cout << "输入姓名: ";
cin >> Name;
Find(Name);
}; break;
case '3':break;
default: cout << "输入有误 请重新输入!!!\n" << endl;
}
} while (c != '1'&&c != '2'&&c != '3'&&c
学生成绩管理系统(cpp)
5星 · 超过95%的资源 需积分: 1 107 浏览量
2023-10-08
12:37:39
上传
评论 1
收藏 4KB ZIP 举报
机智的程序员zero
- 粉丝: 2171
- 资源: 4254
最新资源
- 基于 python+mindspore框架训练多智能体强化学习中的mpe环境
- ICC V7 软件,开发AVR工具软件
- STM32F429单片机DCMI驱动OV5640摄像头拍摄图像直接显示在5.0英寸LCD屏上软件例程源码.zip
- halcon多种条码识别例子
- 基于python+stk11的多智能体强化学习卫星调度实验
- 识别和读取盲文上的文字
- 基于 python的强化学习算法-多智能体强化学习(离散化动作)
- 利用python深度强化学习的方法实现多智能体间离散无交流的障碍避免
- 分布式锁与信号量分布式锁与信号量.txt
- 自然语言处理大作业基于词典的分词方法的Python实现源码+文档说明+实验报告.zip
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈