C++|C++数据结构 线性表的链式存储结构应用 简单的学生成绩管理系统

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++数据结构 线性表的链式存储结构应用 简单的学生成绩管理系统
文章图片

2.显示学生成绩列表 C++|C++数据结构 线性表的链式存储结构应用 简单的学生成绩管理系统
文章图片

3.删除一个学生的成绩 C++|C++数据结构 线性表的链式存储结构应用 简单的学生成绩管理系统
文章图片

4.插入一个学生的成绩 C++|C++数据结构 线性表的链式存储结构应用 简单的学生成绩管理系统
文章图片

5.按成绩排序 C++|C++数据结构 线性表的链式存储结构应用 简单的学生成绩管理系统
文章图片

6.计算学生的总数。 C++|C++数据结构 线性表的链式存储结构应用 简单的学生成绩管理系统
文章图片

7.按学号查找学生。 C++|C++数据结构 线性表的链式存储结构应用 简单的学生成绩管理系统
文章图片

8.按姓名查找学生。 【C++|C++数据结构 线性表的链式存储结构应用 简单的学生成绩管理系统】C++|C++数据结构 线性表的链式存储结构应用 简单的学生成绩管理系统
文章图片

    推荐阅读