C++ 基于单链表的学生管理系统

这个是最基本的系统

具备基本的增改删查,还有打印显示,非常原始,后期会不定期更新~~~

话不多说,直接上代码:

/ 数据结构_课程设计_学生管理系统.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
/*原作者:苏格扯底
*首次编写时间:2020年10月5日
*    完成时间:2020年10月7日  
*
*
*/

#include <iostream>
#include <iomanip>
#define I 0 //用于初始阶段指2录入单一学科分数

using namespace std;

typedef struct file {
    
    

    string name;//姓名
    int num;//学号
    float score[10]; //分数(这里分数可以有不同学科)
    file* next;

 }file;

class cla//班级
{
    
    
public:
	cla();
    cla(string );//班级名称
	~cla();
    //更改班级名称
    void changeclaname(string);
    /*创建学生列表*/
    void createn(int);
    //打印学生列表
    void print(); 
    //插入新的学生信息
    void insertx(string, int, float); 
    //查找。输入姓名和学号,并返回所在节点
    int searchx(string, int, file& s);
    //查找。输入姓名和学号
    int searchx(string xname, int xnum);
    //删除,输入姓名和学号
    void deletex(string , int);
    //查找重复
    void derepeat();  
    //计算平均分
    float averagescore();
private:
    file* head;//头节点
    string classname;//班级名称
    int stunum;//学生人数
    int totalscore[10];//全部分数之和,用于计算平均分
};

cla::cla()
{
    
    
    head = new file;
    head->next = NULL;
    this->stunum = 0;
    this->classname = "网络工程1班(默认设定班级)";
    this->totalscore[I] = 0;
}

cla::cla(string classname) //给班级命名
{
    
    
    head = new file;
    this->classname = classname;
    this->stunum = 0;
    head->next = NULL;
    this->totalscore[I] = 0;
}

cla::~cla()
{
    
    
    delete head;
}

void cla::changeclaname(string classname)
{
    
    
    this->classname = classname;
}

void cla::createn(int n)//共插入i个学生
{
    
    
    file*s ,* p = head;
    for (int i = 0; i < n; i++)
    {
    
    
        //对单个学生进行录入信息
        s = new file;
        cout << "请输入第" << i + 1 << "个人的姓名" << endl;
        cin >> s->name;

        cout << "请输入第" << i + 1 << "个人的学号" << endl;
        cin >> s->num;

        cout << "请输入第" << i + 1 << "个人的分数" << endl;
        cin >> s->score[I];
        this->totalscore[I] += s->score[I]; //全体学生分数增加

        cout << "第" << i + 1 << "个人输入完成\a" << endl << endl;
        
        s->next = p->next;
        p->next = s;
        p = s;
        this->stunum++; //学生人数+1
    }
}

void cla::print()
{
    
      
    cout << endl;
    cout<< right << setw(16) << "班级名称:" << this->classname << endl;
    cout<< right << setw(16) << "班级人数:" << this->stunum << endl;
    //第一行输出:编号|姓名|学号|分数
    cout << left << setw(4) << "编号" << setw(12) << "|姓名" << setw(12) << "|学号" << setw(10) << "|分数" << endl;

    file* p = this->head->next;
    int i = 1;
    while (p)
    {
    
       //之后顺次输出:编号|姓名|学号|分数
        cout << left << setw(4) << i++ << setw(12) << "|"+ p->name <<  "|"<<setw(11) << p->num << "|"<< setw(9) << p->score[I] << endl;
        p = p->next;
    }
    cout << left << setw(28)<< "均分|——————————" << "|" << setw(9) << this->averagescore() << endl;
}

void cla::insertx(string xname, int xnum, float xscore)
{
    
    
    file* s, * p = head;
    
        s = new file;
        s->name = xname;
        s->num = xnum;
        s->score[I] = xscore;
        this->totalscore[I] += s->score[I]; //全体学生分数增加
        this->stunum++; //学生人数+1

        s->next = p->next;
        p->next = s;
        p = s;
 }


int cla::searchx(string xname, int xnum)
{
    
    
    file* p = head->next;
    while (p)
    {
    
    
        if (xnum == p->num)
        {
    
    
            if (xname == p->name)
            {
    
    
                return 1; //成功找到
            }

            return -1;  //错误,学号重复
        }
        p = p->next;
    }
    return 0; //没有查询到该学生信息
}


int cla::searchx(string xname, int xnum, file& s) //函数重载
{
    
    
    file* p = head->next;
    while (p)
    {
    
    
        if (xnum == p->num)
        {
    
    
            if (xname == p->name)
            {
    
    
                return 1; //成功找到
                s = *p;
            }

            return -1; //错误,学号重复
        }
        p = p->next;
    }
    return 0; //没有查询到该学生信息
}
void cla::deletex(string xname, int xnum)
{
    
    
    file* p = head,*s = p->next;
    while (s)
    {
    
    
        if (xnum == s->num)
        {
    
    
            if (xname == s->name)
            {
    
    
                p->next = s->next;
                delete s;
                return;
            }
            cout << endl << "出错,学号与姓名不符" << endl;
            return;
        }
        p = s;
        s = p->next;
    }
    cout << "没有查找到相关学生信息" << endl;
}

void cla::derepeat()
{
    
    
}

float cla::averagescore()
{
    
    
    return this->totalscore[I]/this->stunum;
}

int main()
{
    
    
    cla clas("对外贸易一班");
    clas.createn(1);
    clas.print();
    clas.insertx("王五", 2, 100);
    clas.print();
    clas.insertx("李四", 88, 100);
    clas.print();
    cout << clas.searchx("李四", 88);
    clas.deletex("赵六", 88);
}

猜你喜欢

转载自blog.csdn.net/CX299792458/article/details/108951896