数据结构程序设计

/***********************************************************
* 文件名称: 学生成绩查询.cpp
* 文件标示: 无
* 功能简介:增添学生信息、修改删除学生信息、查询统计学生信息
* 其他说明:无
* 当前版本:v1.0
* 作者:张耀
* 完成日期: 2015.12.24
************************************************************/

头文件

#define N 20
typedef struct LNode{
    char num[N];
    char name[N];
    int age;
    float Score;
    LNode *next;
}LNode;
class LinkList
{
private:
    LNode *head;
    int length;
public:
    LinkList();
    bool IsCreate();
    void ListSize();
    void CreatList();
    void InsertList();
    void DeleteList();
    void Find();
    void Display();
    void BubbleSortList(); 
    void Count();
};

代码

#include "ds.h"
#include <iostream>
#include <string.h>
#include <stdlib.h>
#include <conio.h>
//#include <fstream>
using namespace std;

//构造函数链表的初始化//
LinkList::LinkList()
{
    head=(LNode *)malloc(sizeof(LNode));
    head->next=NULL;
    length=0;
}

//是否建立了链表//
bool LinkList::IsCreate()
{
    if(length==0)
        return 0;
    return 1;
}

//创建链表//
void LinkList::CreatList()
{
    if(IsCreate())
    {
        cout<<"已经建立链表!"<<endl<<"请按任意键继续. . . "<<endl;
        getch();
    }
    else
    {
        int n;
        cout<<" ******************利用头插法创建链表*****************"<<endl;
        cout<<"请输入要创建的单链表的节点数: ";
        cin>>n;
        LNode *p=head;length=n;
        for(int i=n;i>0;i--)
        {
            LNode *p=(LNode *)malloc(sizeof(LNode));
            cout<<"请输入学号: ";cin>>p->num;
            cout<<"请输入姓名: ";cin>>p->name;
            cout<<"请输入年龄: ";cin>>p->age;
            cout<<"请输入成绩: ";cin>>p->Score;
            cout<<"********************************************************************************"<<endl;
            p->next=head->next;
            head->next=p;
        }
        cout<<"请按任意键继续. . ."<<endl;
        getch();
    }
}

//输出//
void LinkList::Display()
{
    if(!IsCreate())
    {
        cout<<"您还没有建表,请先建表!"<<endl;
        cout<<"请按任意键继续. . ."<<endl;
        getch();
    }
    else
    {
        cout<<"所有学生的信息如下:"<<endl<<"********************************************************************************"<<endl;
        cout<<"共有"<<length<<"个学生的信息"<<endl;
        LNode *p=head->next;
        while(p)
        {
            cout<<"学号: "<<p->num<<endl;
            cout<<"姓名: "<<p->name<<endl;
            cout<<"年龄: "<<p->age<<endl;
            cout<<"成绩: "<<p->Score<<endl<<endl;
            p=p->next;
        }
        cout<<"请按任意键继续. . ."<<endl;
        getch();
    }
}

//插入//
void LinkList::InsertList()
{
    if(!IsCreate())
    {
        cout<<"您还没有建表,请先建表!"<<endl;
        cout<<"请按任意键继续. . ."<<endl;
        getch();
    }
    else
    {
        int n,i=1;
        cout<<"请输入要插入的位置: ";cin>>n;
        if(n<1||n>length+1)cout<<"插入的位置不正确,操作失败!"<<endl;
        else
        {
            LNode *q,*p=head;
            q=(LNode *)malloc(sizeof(LNode));
            while(i<n)
            {
                p=p->next;
                i++;    
            }
            cout<<"请输入学号: ";cin>>q->num;
            cout<<"请输入姓名: ";cin>>q->name;
            cout<<"请输入年龄: ";cin>>q->age;
            cout<<"请输入成绩: ";cin>>q->Score;
            q->next=p->next;
            p->next=q;
            length++;
            cout<<"请按任意键继续. . ."<<endl;
            getch();
        }
    }
}

//删除//
void LinkList::DeleteList()
{
    if(!IsCreate())
    {
        cout<<"您还没有建表,请先建表!"<<endl;
        cout<<"请按任意键继续. . ."<<endl;
        getch();
    }
    else
    {
        char num[N];
        cout<<"请输入所要删除的学生的学号: ";
        cin>>num;
        LNode *p=head;
        while(p->next&&strcmp(p->next->num,num)!=0)
        {
            p=p->next;
        }
        if(!(p->next))cout<<"找不到所要删除的内容,操作失败!";
        else 
        {
            length--;
            LNode *q=p->next;
            p->next=p->next->next;
            free(q);
        }
        cout<<"请按任意键继续. . ."<<endl;
        getch();
    }
}

//查找//
void LinkList::Find()
{
    if(!IsCreate())
    {
        cout<<"您还没有建表,请先建表!"<<endl;
        cout<<"请按任意键继续. . ."<<endl;
        getch();
    }
    else
    {
        char num[N];
        cout<<"请输入学号: ";
        cin>>num;
        LNode *p=head->next;
        while(p&&strcmp(p->num,num)!=0)
        {
            p=p->next;
        }
        if(!p)cout<<"无法查找到所要查找的学生信息!"<<endl;
        else{
            cout<<"姓名: "<<p->name<<endl;
            cout<<"年龄: "<<p->age<<endl;
            cout<<"成绩: "<<p->Score<<endl;
        }
        cout<<"请按任意键继续. . ."<<endl;
        getch();
    }
}

//显示数据总数//
void LinkList::ListSize()
{
    if(!IsCreate())
    {
        cout<<"您还没有建表,请先建表!"<<endl;
        cout<<"请按任意键继续. . ."<<endl;
        getch();
    }
    else
    {
        cout<<"共存储了"<<length<<"个学生的数据信息."<<endl;
        cout<<"请按任意键继续. . ."<<endl;
        getch();
    }
}

//排序//
void LinkList::BubbleSortList()   
{
    if(!IsCreate())
    {
        cout<<"您还没有建表,请先建表!"<<endl;
        cout<<"请按任意键继续. . ."<<endl;
        getch();
    }
    else
    {
        LNode *_temp=head->next;
        LNode *_node=head->next;
        char temp1[N],temp2[N];int temp3;float temp4;
        for(;_temp->next;_temp=_temp->next)
        {
            for(_node=head->next;_node->next;_node=_node->next)
            {
                if(_node->Score<_node->next->Score)
                {
                    strcpy(temp1,_node->num);
                    strcpy(_node->num,_node->next->num);
                    strcpy(_node->next->num,temp1);
                    strcpy(temp2,_node->name);
                    strcpy(_node->name,_node->next->name);
                    strcpy(_node->next->name,temp2);
                    temp3=_node->age;
                    _node->age=_node->next->age;
                    _node->next->age=temp3;
                    temp4=_node->Score;
                    _node->Score=_node->next->Score;
                    _node->next->Score=temp4;
                }
            }
        }
    }
}

//输出不及格//
void LinkList::Count()
{
    if(!IsCreate())
    {
        cout<<"您还没有建表,请先建表!"<<endl;
        cout<<"请按任意键继续. . ."<<endl;
        getch();
    }
    else
    {
        LNode *p=head->next;int count=0;
        while(p)
        {
            if(p->Score<60) 
            {
                count++;    
                cout<<"学号: "<<p->num<<endl; 
                cout<<"姓名: "<<p->name<<endl;
                cout<<"年龄: "<<p->age<<endl; 
                cout<<"成绩: "<<p->Score<<endl<<endl;
            }
            p=p->next;
        }
        cout<<"这"<<length<<"名学生中有"<<count<<"名学生成绩不及格."<<endl;
        cout<<"请按任意键继续. . ."<<endl;
        getch();
    }
}

//主函数//
int main()
{
    LinkList L;int order,flag=1,confirm=1;char a[20];
    cout<<'\n'
        <<" ┏━━━━━━━━━━━━┓ "<<'\n'
        <<" ┃欢迎进入学生信息管理系统┃ "<<'\n'
        <<" ┗━━━━━━━━━━━━┛ "<<'\n';

    while(confirm)
    {
        while(flag)
        {
            cout<<" ╭─────╮ "<<'\n'
                <<" │请输入命令│ "<<'\n'
                <<" ╰─────╯ "<<endl;
            cout<<" ╔══════════╦══════════╗ "<<'\n'
                <<" ║ 1.创建链表 ║ 2.输出链表 ║ "<<'\n'
                <<" ╠══════════╬══════════╣ "<<'\n'
                <<" ║ 3.插入数据 ║ 4.删除数据 ║ "<<'\n'
                <<" ╠══════════╬══════════╣ "<<'\n'
                <<" ║ 5.查询数据 ║ 6.显示数据总数 ║ "<<'\n'
                <<" ╠══════════╬══════════╣ "<<'\n'
                <<" ║ 7.按照成绩排序 ║ 8.显示不及格的人数 ║ "<<'\n'
                <<" ╠══════════╩══════════╣ "<<'\n'
                <<" ║ 9.退出系统 ║ "<<'\n'
                <<" ╚═════════════════════╝ "<<endl;
            cout<<"输入命令(数字标号):";
            cin>>order;
            switch(order)
            {
                case 1: L.CreatList();break;
                case 2: L.Display();;break;
                case 3: L.InsertList();break;
                case 4: L.DeleteList();;break;
                case 5: L.Find();break;
                case 6: L.ListSize();break;
                case 7: L.BubbleSortList();L.Display();break;
                case 8: L.Count();break;
                case 9: flag=0;break;
            }
            cout<<endl;
        }
        //退出//
question:   cout<<"您确定要退出吗?(Y/N): ";
        cin>>a;
        if(!strcmp(a,"Y")||!strcmp(a,"y"))
        {
            cout<<"欢迎下次再使用本系统,谢谢!"<<endl;
            confirm=0;
        }
        else if(!strcmp(a,"N")||!strcmp(a,"n"))flag=1;
        else
        {
            cout<<"您输入的命令不正确,请重新输入!"<<endl;
            goto question;
        }
    }
    system("pause");
    /*ofstream write; //write只是个名字 你可以定义为任何其他的名字 write.open("text.txt"); write<<L.Display(); //这里是你想要输出的内容,这里是输出了一个string abc write.close(); // 输出完毕后关闭这个文件*/
    return 0;
}

你可能感兴趣的:(数据结构程序设计)