这个是最基本的系统
具备基本的增改删查,还有打印显示,非常原始,后期会不定期更新~~~
话不多说,直接上代码:
/ 数据结构_课程设计_学生管理系统.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);
}