期末课程设计—学生成绩查询系统

/*            
*Copyright(c)2017,烟台大学计算机学院            
*All right reserved.            
*文件名:main.cpp sqqueue.h sqqueue.cpp            
*作者:黄士胜           
*完成日期:2017年12月19日            
*版本号:v1.0            
*            
*问题描述: 设计一个学生成绩查询系统     
           
*/  


采用了多文件组织对此项目进行编写。


主函数代码如下:

#include "huang.h"
#include <iostream>
#include <string.h>
#include <stdlib.h>
#include <conio.h>
using namespace std;

int main()
{
    LinkList L;
    int order,flag=1,confirm=1;
    char a[50];

    cout<<"┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓"<<endl;
    cout<<"┃                                                          ┃"<<endl;
    cout<<"┃                                                          ┃"<<endl;
    cout<<"┃                                                          ┃"<<endl;
    cout<<"┃    ☆☆☆☆☆欢迎进入高中生成绩查询系统☆☆☆☆☆        ┃"<<endl;
    cout<<"┃                                                          ┃"<<endl;
    cout<<"┃                                                          ┃"<<endl;
    cout<<"┃                                                          ┃"<<endl;
    cout<<"┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛"<<endl;


    while(confirm)
    {
        while(flag)
        {



                cout<<   "┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓"<<endl;
    cout<<   "┃                                                          ┃"<<endl;
    cout<<   "┃     (1)学生成绩整理          (6)学生成绩显示             ┃"<<endl;
    cout<<   "┃                                                          ┃"<<endl;
    cout<<   "┃                                                          ┃"<<endl;
    cout<<   "┃     (2)学生成绩输出          (7)学生成绩排序             ┃"<<endl;
    cout<<   "┃                                                          ┃"<<endl;
    cout<<   "┃                                                          ┃"<<endl;
    cout<<   "┃     (3)添加学生成绩          (8)显示不及格人数           ┃"<<endl;
    cout<<   "┃                                                          ┃"<<endl;
    cout<<   "┃     (4)学生成绩删除          (9)统计学生是否达到优秀线   ┃"<<endl;
    cout<<   "┃                                                          ┃"<<endl;
    cout<<   "┃     (5)学生成绩查询          (10)退出系统                ┃"<<endl;

    cout<<   "┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛"<<endl;
    cout<<"请输入您的选择"<<endl;
            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();break;
                case 8: L.Count();break;
                case 9: L.Count1();break;
                case 10: 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");
    return 0;
}

huang.cpp代码如下

#include "huang.h"
#include <iostream>
#include <string.h>
#include <stdlib.h>
#include <conio.h>
using namespace std;


LinkList::LinkList()//链表的初始化
{
    head=(LNode *)malloc(sizeof(LNode));
    head->next=NULL;
    length=0;
}
//判断用户是否建立了链表,如果是,则返回值为1,反之为0
bool LinkList::IsCreate()

 {

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

}

/*运行建立链表的程序时,先预先判断是否建立了链表,
如果建立了链表,则返回主菜单;如果没有建表,则建立链表*/
void LinkList::CreatList()
{
    if(IsCreate())
    {
        cout<<"已经建立链表!"<<endl<<"请按任意键继续. . . "<<endl;
        getch();
    }
    else
    {
        int n;
        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<<"请输入语文成绩: ";cin>>p->Ce;
            cout<<"请输入英语成绩: ";cin>>p->Eh;
            p->all=p->Score+p->Ce+p->Eh;
            p->next=head->next;//指向头节点的指针指向指针指向的下一个节点
            head->next=p;
        }
        cout<<"********************************************************************************"<<endl;
        cout<<"请按任意键继续. . ."<<endl;
        getch();
    }
}
//查找成绩
void LinkList::Find()
{
    if(!IsCreate())
    {
        cout<<"您还没有建表,请先建表!"<<endl;
        cout<<"请按任意键继续. . ."<<endl;
        getch();
    }
    else /*利用while循环从头结点开始,循环查找各个节点,直到找到为止,
         若查找循环结束后仍然未找到,则提示输出“无法查找到所要查找的学生信息!”*/
    {
        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<<"语文成绩: "<<p->Ce<<endl;
            cout<<"英语成绩: "<<p->Eh<<endl;
        }
        cout<<"********************************************************************************"<<endl;
        cout<<"请按任意键继续. . ."<<endl;
        getch();
    }
}
//删除成绩
void LinkList::DeleteList()
{
    if(!IsCreate())
    {
        cout<<"您还没有建表,请先建表!"<<endl;
        cout<<"请按任意键继续. . ."<<endl;
        getch();
    }
    else//利用while循环从头结点开始,循环查找各个节点

    {
        char num[N];
        cout<<"请输入所要删除的学生的学号:";
        cin>>num;
        LNode *p=head;
        while(p->next&&strcmp(p->next->num,num)!=0)
        {
            p->next=p->next->next;
        }
        if(!(p->next))
        cout<<"找不到所要删除的内容,操作失败!";
        else//找到后将当前节点的前一个节点的next指针指向当前节点的下一个节点,并且释放当前节点
        {
            length--;
            LNode *q=p->next;
            p->next=p->next->next;
            free(q);
        }
        cout<<"********************************************************************************"<<endl;
        cout<<"请按任意键继续. . ."<<endl;
        getch();
    }
}
//显示学生成绩
void LinkList::Display()
{
    if(!IsCreate())
    {
        cout<<"您还没有建表,请先建表!"<<endl;
        cout<<"请按任意键继续. . ."<<endl;
        getch();
    }
    else//利用链表的循环查找方式从头结点的下一个节点依次输出数据
    {
        cout<<"所有学生的成绩如下:"<<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;
            cout<<"语文成绩: "<<p->Ce<<endl<<endl;
            cout<<"英语成绩: "<<p->Eh<<endl<<endl;

            p=p->next;
        }
        cout<<"********************************************************************************"<<endl;
        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//利用while循环从头结点开始,循环查找各个节点
        {
            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;
            cout<<"请输入语文成绩: ";cin>>q->Ce;
            cout<<"请输入英语成绩: ";cin>>q->Eh;

            /*先将要插入的节点的next指针指向找到的节点的下一个节点,
                             再将找到的节点的next指针指向要插入的节点*/
            q->next=p->next;
            p->next=q;
            length++;
            cout<<"********************************************************************************"<<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;
        float temp5;
        float temp6;
        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;

                     temp5=_node->Ce;
                    _node->Ce=_node->next->Ce;
                    _node->next->Ce=temp5;


                    temp6=_node->Eh;
                    _node->Eh=_node->next->Eh;
                    _node->next->Eh=temp6;





                }
            }
        }
    }
}
//统计不及格人数模块
void LinkList::Count()
{
    if(!IsCreate())
    {
        cout<<"您还没有建表,请先建表!"<<endl;
        cout<<"请按任意键继续. . ."<<endl;
        getch();
    }
    else
    {
        LNode *p=head->next;
        int count=0;//设置一个计数变量count并赋初值为0
        while(p)//若当前节点的Score的值小于60,则count加1,直到整个链表查找完后,count的值就是不及格的人数
        {
            if(p->Score<60) count++;
            p=p->next;
        }
        cout<<"这"<<length<<"名学生中有"<<count<<"名学生数学成绩不及格."<<endl;
        cout<<"********************************************************************************"<<endl;
        cout<<"请按任意键继续. . ."<<endl;
        getch();
    }

    if(!IsCreate())
    {
        cout<<"您还没有建表,请先建表!"<<endl;
        cout<<"请按任意键继续. . ."<<endl;
        getch();
    }
   else
    {
        LNode *p=head->next;
        int count=0;//设置一个计数变量count并赋初值为0
        while(p)//若当前节点的Score的值小于60,则count加1,直到整个链表查找完后,count的值就是不及格的人数
        {
            if(p->Ce<60) count++;
            p=p->next;
        }
        cout<<"这"<<length<<"名学生中有"<<count<<"名学生语文成绩不及格."<<endl;
        cout<<"********************************************************************************"<<endl;
        cout<<"请按任意键继续. . ."<<endl;
        getch();
    }


    if(!IsCreate())
    {
        cout<<"您还没有建表,请先建表!"<<endl;
        cout<<"请按任意键继续. . ."<<endl;
        getch();
    }
     else
    {
        LNode *p=head->next;
        int count=0;//设置一个计数变量count并赋初值为0
        while(p)//若当前节点的Score的值小于60,则count加1,直到整个链表查找完后,count的值就是不及格的人数
        {
            if(p->Eh<60) count++;
            p=p->next;
        }
        cout<<"这"<<length<<"名学生中有"<<count<<"名学生英语成绩不及格."<<endl;
        cout<<"********************************************************************************"<<endl;
        cout<<"请按任意键继续. . ."<<endl;
        getch();
    }
}
void LinkList::menu()
{

    cout<<"┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓"<<endl;
    cout<<"┃                                                          ┃"<<endl;
    cout<<"┃                                                          ┃"<<endl;
    cout<<"┃                                                          ┃"<<endl;
    cout<<"┃    ☆☆☆☆☆欢迎进入高中生成绩查询系统☆☆☆☆☆        ┃"<<endl;
    cout<<"┃                                                          ┃"<<endl;
    cout<<"┃                                                          ┃"<<endl;
    cout<<"┃                                                          ┃"<<endl;
    cout<<"┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛"<<endl;

}
void LinkList::Count1()
{
    if(!IsCreate())
    {
        cout<<"您还没有建表,请先建表!"<<endl;
        cout<<"请按任意键继续. . ."<<endl;
        getch();
    }
    else
    {
        LNode *p=head->next;
        int count=0;//设置一个计数变量count并赋初值为0
        while(p)//若当前节点的Score的值小于240,则count加1,直到整个链表查找完后,count的值就是不及格的人数
        {
            if(p->all>240) count++;
            p=p->next;
        }
        cout<<"这"<<length<<"名学生中有"<<count<<"名学生总成绩达到了优秀."<<endl;
        cout<<"请按任意键继续. . ."<<endl;
        getch();
    }

}










头文件代码如下

huang.h:

#define N 50
typedef struct LNode//数据节点定义
{
    char num[N];//学号
    char name[N];//姓名
    int age;//年龄
    float Score;//数学成绩
    float Ce;  // 语文成绩
    float Eh; //英语成绩
    float all; //总成绩
    LNode *next;
}LNode;
class LinkList//链表类
{
private://将节点封装为私有变量
    LNode *head;
    int length;
public:
    void menu();
    LinkList();//构造函数
    bool IsCreate();//判断是否建立链表
    void ListSize();//求链表长度
    void CreatList(); //建立链表
    void InsertList();//插入
    void DeleteList();//删除
    void Find(); //查找
    void Display(); //显示数据
    void BubbleSortList();//链表的冒泡排序法
    void Count();//统计成绩不及格的人数
    void Count1();
};
逐步运行结果如下:

主页面的运行结果如图:


项目一演示:


项目二展示:对三位学生进行显示:


对项目四进行演示:


列表中有二个学生信息:



对学号一进行删除:


对项目三进行演示:

插入学号为12的同学:


显示学号为12的同学的信息:



对项目五进行展示:


项目八 与 项目九 截图如下:




  


对项目十进行演示:





  • 9
    点赞
  • 57
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值