C++基于单链表实现学生成绩管理系统
本文实例为大家分享了c++实现学生成绩管理系统的具体代码,供大家参考,具体内容如下
#include<iOStream>
using namespace std;
struct node;
typedef struct Node* PNode;
struct Node
{
long int stuId;
char name[30];
//成绩
float Math;
float English;
float Chinese;
float sum;//总分
PNode link;
};
typedef struct Node* LinkList;
//输入学生信息
LinkList Input(LinkList llist)
{
LinkList p;
long int n;
cout << "\n***********************成绩输入入口***********************\n";
cout << "请输入你想输入的学生信息个数:\n";
cin >> n;
for (int i = n; i > 0; i--)//前插法插入信息
{
p = (LinkList)malloc(sizeof(struct Node));
cout << "输入学生学号:\n";
cin >> p->stuId;
cout << "输入学生姓名:\n";
cin >> p->name;
cout << "输入学生数学成绩:\n";
cin >> p->Math;
cout << "输入学生英语成绩:\n";
cin >> p->English;
cout << "输入学生语文成绩:\n";
cin >> p->Chinese;
p->sum = p->Math + p->English + p->Chinese;//总分
//使用含有头结点的单链表实现信息的输入
p->link = llist->link;
llist->link = p;
}
return llist;
}
//查找/修正学生的信息
void Check(LinkList llist)
{
LinkList p, q;
long int id;
char sName[30];
cout << "\n***********************成绩查改入口***********************\n";
if (llist->link == NULL)
cout << "没有学生信息记录\n";
else
{
cout << "输入查找方式:\n"
<< "1.按学号查找\n2.按姓名查找\n";
int a;
cin >> a;
if (a == 1)//按学号查找
{
p = llist;
q = p->link;
cout << "输入学生学号:\n";
cin >> id;
while (q->stuId != id&&q->link != NULL)//从单链表表头顺序查找
{
p = q;
q = q->link;
}
if (q->stuId == id)
{
cout << "学生信息如下:\n";
cout << q->stuId << "\t" << q->name << "\t" << q->Math << "\t"
<< q->English << "\t" << q->Chinese << "\t" << q->sum << endl;
cout << "输入功能序号:\n"
<< "1.修改学生信息\n2.删除学生信息\n0.退出\n";
int b;
cin >> b;
if (b == 1)//修改学生信息
{
cout << "请输入修正后的学生信息:\n";
cout << "输入学生学号:\n";
cin >> q->stuId;
cout << "输入学生姓名:\n";
cin >> q->name;
cout << "输入学生数学成绩:\n";
cin >> q->Math;
cout << "输入学生英语成绩:\n";
cin >> q->English;
cout << "输入学生语文成绩:\n";
cin >> q->Chinese;
q->sum = q->Math + q->English + q->Chinese;
}
else if (b == 2)//删除学生信息
{
p->link = q->link;
free(q);
}
}
else
cout << "查无此人\n";
}
else if (a == 2)//按姓名查找
{
p = llist;
q = p->link;
cout << "输入学生姓名:\n";
cin >> sName;
while (strcmp(sName, q->name) != 0 && q->link != NULL)//从单链表表头顺序查找
{
p = q;
q = q->link;
}
if (strcmp(sName, q->name) == 0)
{
cout << "学生信息如下:\n";
cout << q->stuId << "\t" << q->name << "\t" << q->Math << "\t"
<< q->English << "\t" << q->Chinese << "\t" << q->sum << endl;
cout << "输入功能序号:\n"
<< "1.修改学生信息\n2.删除学生信息\n0.退出\n";
int b;
cin >> b;
if (b == 1)//修改学生信息
{
cout << "请输入修正后的学生信息:\n";
cout << "输入学生学号:\n";
cin >> q->stuId;
cout << "输入学生姓名:\n";
cin >> q->name;
cout << "输入学生数学成绩:\n";
cin >> q->Math;
cout << "输入学生英语成绩:\n";
cin >> q->English;
cout << "输入学生语文成绩:\n";
cin >> q->Chinese;
q->sum = q->Math + q->English + q->Chinese;
}
else if (b == 2)//删除学生信息
{
p->link = q->link;
free(q);
}
}
else
cout << "查无此人";
}
}
}
//对学生信息排序
void Sort(LinkList llist)
{
LinkList p, q, r;
cout << "\n***********************成绩排序入口***********************\n";
if (llist->link == NULL)
cout << "没有学生信息记录\n";
else
{
cout << "选择排序方式:\n"
<< "1.按学号\n2.按数学成绩\n3.按英语成绩\n4.按语文成绩\n5.按总分\n";
int a;
cin >> a;
//使用直接插入法进行排序
switch (a)
{
case 1://按学号
p = llist->link->link;
llist->link->link = NULL;
while (p != NULL)//学号由小到大排列
{
r = p->link;
q = llist;
while (q->link != NULL&&q->link->stuId < p->stuId)//查找插入位置
q = q->link;
//插入
p->link = q->link;
q->link = p;
p = r;
}
break;
case 2://按数学
p = llist->link->link;
llist->link->link = NULL;
while (p != NULL)//数学成绩由高到低排列
{
r = p->link;
q = llist;
while (q->link != NULL&&q->link->Math > p->Math)//查找插入位置
q = q->link;
//插入
p->link = q->link;
q->link = p;
p = r;
}
break;
case 3://按英语
p = llist->link->link;
llist->link->link = NULL;
while (p != NULL)//英语成绩由高到低排列
{
r = p->link;
q = llist;
while (q->link != NULL&&q->link->English > p->English)//查找插入位置
q = q->link;
//插入
p->link = q->link;
q->link = p;
p = r;
}
break;
case 4://按语文
p = llist->link->link;
llist->link->link = NULL;
while (p != NULL)//语文成绩由高到低排列
{
r = p->link;
q = llist;
while (q->link != NULL&&q->link->Chinese > p->Chinese)//查找插入位置
q = q->link;
//插入
p->link = q->link;
q->link = p;
p = r;
}
break;
case 5://按总分
p = llist->link->link;
llist->link->link = NULL;
while (p != NULL)//总分成绩由高到低排列
{
r = p->link;
q = llist;
while (q->link != NULL&&q->link->sum > p->sum)//查找插入位置
q = q->link;
//插入
p->link = q->link;
q->link = p;
p = r;
}
break;
}
}
}
//显示学生的信息
void Display(LinkList llist)
{
LinkList p;
p = llist->link;
cout << "\n***********************成绩显示入口***********************\n";
if (llist->link == NULL)
cout << "没有学生信息记录\n";
else
{
cout << "学生信息如下:\n";
cout << "学号\t 姓名\t 数学\t 英语\t 语文\t 总分\n";
while (p)//输出学生信息
{
cout << p->stuId << "\t" << p->name << "\t" << p->Math << "\t"
<< p->English << "\t" << p->Chinese << "\t" << p->sum<<endl;
p = p->link;
}
}
}
//程序主体
int main()
{
LinkList llist= (LinkList)malloc(sizeof(struct Node));
llist->link = NULL;
int a, b=1;
while (b)//循环使用菜单
{
cout << "\n***********************成绩管理系统***********************\n"
<< "请选择你所需要的功能:\n"
<< "1.输入学生信息\n2.查找/修正学生信息\n3.排序学生信息\n4.显示学生信息\n5.退出\n";
cin >> a;
switch (a)
{
case 1:
llist=Input(llist);
break;
case 2:
Check(llist);
break;
case 3:
Sort(llist);
break;
case 4:
Display(llist);
break;
case 5:
b = 0;
break;
}
}
cout << "\n***********************感谢您的使用***********************\n";
cin.get(); cin.get();
}
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
相关文章