C++数据结构 线性表的链式存储结构应用 简单的学生成绩管理系统
#include
#include
#include
#include
#include"stdlib.h"
using namespace std;
struct Node{
int num;
char name[20];
float Score;
Node *next;
};
class StudList
{
private:
Node *head;
public:
StudList();
void CreateList();
//创建链表
void Display();
//显示链表
int Getlen() ;
//获取链表长度
Node *GetHead();
void pushBack();
//尾部添加一个学生 信息
void Insert();
//在指定位置插入一个学生
int Delete();
//删除一个个学生
int Update();
//修改一个个学生 的信息
void Sort();
//按成绩排序
void FindByNum();
// 按学号查找
void FindByName();
//按姓名查找
};
void menu(StudList *list);
int main(){
StudList list;
list.CreateList();
menu(&list);
return 0;
}
StudList::StudList()//::是作用域操作符,表示你引用的变量限定在该作用域内。
{
head=new Node();
head->next=NULL;
} //建立一个空表
void StudList::CreateList()
{
head->num=0;
}
Node *StudList::GetHead(){
return head;
}
void StudList::Display(){
Node *cur=head;
int len = Getlen();
cout<<" 人数:"<num;
cout<<"姓名:"<name;
cout<<"成绩:"<Score;
cout<next;
}
}
//在单链表末尾加上一个学生的信息
void StudList::pushBack(){
Node *cur,*p,*t;
if(!head){
head = new Node();
}
cur=head;
p=new Node();
t= head;
while(cur->next){
cur=cur->next;
}
cout<<" 输入学号:"<>p->num;
while(t){
if(t->num==p->num){
cout<<" 已存在该学号!"<next;
}
cout<<" 输入姓名:"<>p->name;
cout<<" 输入成绩:"<>p->Score;
if(head->num==0){
head = p;
return;
}
cur->next = p;
p->next=NULL;
}
//获取单链表长度 (=学生总数)
int StudList::Getlen(){
int n=0;
Node *cur;
cur=head;
while( cur ){
n++;
cur=cur->next;
}
return n;
}
//在指定位置插入一个结点
void StudList::Insert(){
int i,len;
cout<<" 输入要插入学生的位置:";
cin>>i;
len=Getlen();
Node *cur,*t,*pr,*newNode;
if(head==NULL||head->num==0){
cout<<" 当前表为空!"<next;
}
newNode = new Node();
t=head;
cout<<" 输入插入学生的学号:"<>newNode->num;
while(t){//判断是否是已存在学号
if(t->num==newNode->num){
cout<<" 已存在该学号!"<next;
}
cout<<" 输入姓名:"<>newNode->name;
cout<<" 输入成绩:"<>newNode->Score;
pr->next=newNode;
newNode->next=cur;
}
//删除
int StudList::Delete() {//n表示学号
int n;
Node *cur,*pr;
cur=head;
pr=head;
cout<<" 输入要删除学生的学号:";
cin>>n;
while(cur){
if(cur->num==n){
if(cur==head){//如果删除的是头节点,直接令头结点为头结点的下一结点
head=head->next;
return 1;
}
pr->next=cur->next;
return 1;
//若删除的是最后一个结点则不能使用 cur->next->next,前边已经 cur = cur->next;
不许操作
}
pr=cur;
cur=cur->next;
}
cout<<" 没有查到要删除的学号"<>n;
while(cur){
if(cur->num==n){
cout<<" 1.修改姓名"<>a ;
switch(a){
case 1:
cout<<" 请输入修改姓名:";
cin>>cur->name;
return 1;
case 2:
cout<<" 请输入修改的成绩:";
cin>>cur->Score;
return 1;
default:
cout<<" 退出修改"<next;
}
return -1;
}
//交换两结点的信息
void swapNode(Node *a,Node *b){
int temp;
char c;
float ft;
temp=a->num;
a->num=b->num;
b->num=temp;
//姓名交换
for(int i=0;
i<20;
i++){
c=a->name[i];
a->name[i]=b->name[i];
b->name[i]=c;
}
//成绩交换
ft=a->Score;
a->Score=b->Score;
b->Score=ft;
}
//按成绩排序
void StudList::Sort(){
int len,inlen;
Node *cur;
len =Getlen();
while(--len){
inlen = len;
cur = head;
while(inlen--){
if(cur->Scorenext->Score){
swapNode(cur,cur->next);
}
cur=cur->next;
}
}
}//按学号查找某一学生的信息
void StudList::FindByNum(){
int n;
int flag=0;
Node *cur;
cur=head;
cout<<" 输入要查询的学生的学号:";
cin>>n;
while(cur!=NULL){
if(cur->num==n){
flag=1;
cout<<" 下面是查找结果:"<num<<" ";
cout<<" 姓名:"<name<<" ";
cout<<" 成绩:"<Score<<" ";
cout<next;
if(flag==0){
cout<<" 不存在该学号!"<>name;
while(cur!=NULL){
if(cur->name==name){
flag=1;
cout<<" 下面是查找结果:"<num<<" ";
cout<<" 姓名:"<name<<" ";
cout<<" 成绩:"<Score<<" ";
cout<next;
}
if(flag==0){
cout<<" 不存在该学生!"<>a;
switch(a){
case 1:
list->pushBack();
break;
case 2:
list->Display();
list->Delete();
list->Display();
break;
case 3:
list->Display();
list->Update();
list->Display();
break;
case 4:
list->Display();
list->Insert();
list->Display();
break;
case 5:
list->Display();
break;
case 6:
list->Sort();
list->Display();
break;
case 7:
list->Getlen();
list->Display();
break;
case 8:
list->FindByNum();
break;
case 9:
list->FindByName();
break;
}
}
}
运行结果: 下面是每一步的验证 1.插入数据
![C++|C++数据结构 线性表的链式存储结构应用 简单的学生成绩管理系统](https://img.it610.com/image/info8/d532fd04b5a942c1ac63797671d68818.jpg)
文章图片
2.显示学生成绩列表
![C++|C++数据结构 线性表的链式存储结构应用 简单的学生成绩管理系统](https://img.it610.com/image/info8/b173693b3ec84128a71e679321774fb7.jpg)
文章图片
3.删除一个学生的成绩
![C++|C++数据结构 线性表的链式存储结构应用 简单的学生成绩管理系统](https://img.it610.com/image/info8/4aab2ebca5ac4e6ca66606c05fb0e0f8.png)
文章图片
4.插入一个学生的成绩
![C++|C++数据结构 线性表的链式存储结构应用 简单的学生成绩管理系统](https://img.it610.com/image/info8/16e8acedb3c048ad806de1231ffde2a0.jpg)
文章图片
5.按成绩排序
![C++|C++数据结构 线性表的链式存储结构应用 简单的学生成绩管理系统](https://img.it610.com/image/info8/70607a7ede9b435cb0a7dadafd9d4cd0.png)
文章图片
6.计算学生的总数。
![C++|C++数据结构 线性表的链式存储结构应用 简单的学生成绩管理系统](https://img.it610.com/image/info8/48c60a75c5034398be69f743031c9005.png)
文章图片
7.按学号查找学生。
![C++|C++数据结构 线性表的链式存储结构应用 简单的学生成绩管理系统](https://img.it610.com/image/info8/0d8899f3faf94a8282aec18c82308681.png)
文章图片
8.按姓名查找学生。 【C++|C++数据结构 线性表的链式存储结构应用 简单的学生成绩管理系统】
![C++|C++数据结构 线性表的链式存储结构应用 简单的学生成绩管理系统](https://img.it610.com/image/info8/d0607815c3d94480b780ffad4530583f.png)
文章图片
推荐阅读
- 笔记|C语言数据结构——二叉树的顺序存储和二叉树的遍历
- C语言学习(bit)|16.C语言进阶——深度剖析数据在内存中的存储
- 个人日记|K8s中Pod生命周期和重启策略
- 数据结构和算法|LeetCode 的正确使用方式
- 先序遍历 中序遍历 后序遍历 层序遍历
- 学习分享|【C语言函数基础】
- C++|C++浇水装置问题
- 数据结构|C++技巧(用class类实现链表)
- 数据结构|贪吃蛇代码--c语言版 visual c++6.0打开
- C++|从零开始学C++之基本知识