您的位置:首页 > 其它

课程设计 学生成绩查询

2017-12-21 17:19 357 查看
void menu();  //主界面

void select();//主菜单

void SearchNum(struct stu *head);  //  按学号查找

void SearchName(struct stu *head);  // 按姓名查找

void print(struct stu *head);      //输出学生的信息

void No(struct stu *head);      //名次的排名

void selectmh(struct stu *head);// 学生查找入口

void sort(struct stu *head);   //对学生信息的排序

void insert(struct stu *head,int &);  // 添加学生的信息

void del(struct stu *head,int &); //   功能6中的删除学生信息

struct stu *creat(int &);

struct stu

{
int num;     //学号
char name[20];   //姓名的数组
float Ma;//  数学
float En;//  语文
float Ch;//英语
float C;    //化学
float W;     //物理
float all;   //总分
int order;   //名次
struct stu *next;

};

#include "zhang.h"

#include<iostream>

#include<malloc.h>

#include<iomanip>

#include<string.h>

#define NULL 0

#define LinkList sizeof(struct stu)

using namespace std;

struct stu *creat(int &n)      // 统计学生的成绩整理.

{

    system("cls");

    struct stu *head,*p1,*p2;  //  创建链表

    n=0;

    p1=p2=(struct stu *)malloc(LinkList);

    int a=0,i;

    cout<<"请输入该班级的学生人数:"<<endl;

    cin>>a;

    system("cls");

    head=p1;

    for(i=0;i<a;i++)

    {

        cout<<"请输入第"<<i+1<<"名学生学号"<<endl;

        cin>>p1->num;

        cout<<"请输入第"<<i+1<<"名学生姓名"<<endl;

        cin>>p1->name;

        cout<<"请输入第"<<i+1<<"名学生数学"<<endl;

        cin>>p1->Ma;

        cout<<"请输入第"<<i+1<<"名学生语文"<<endl;

        cin>>p1->En;

        cout<<"请输入第"<<i+1<<"名学生英语"<<endl;

        cin>>p1->Ch;

        cout<<"请输入第"<<i+1<<"名学生化学"<<endl;

        cin>>p1->C;

        cout<<"请输入第"<<i+1<<"名学生物理"<<endl;

        cin>>p1->W;

        p1->all=p1->Ma+p1->En+p1->Ch+p1->C+p1->W;

        p2->next=p1;

        p2=p1;

        p1=(struct stu*)malloc(LinkList);  //malloc是C语言中的内存申请函数  首先申请了一个大小为(LinkList)的内存块,内存地址强制类型转换为结构体指针(struct stu *),用指针变量p1来保存.

        system("cls");     //执行控制台命令cls,就是CMD下面的cls,功能是清屏,清除所有显示的信息

        n++;

    }

    p2->next=NULL;

    return head;

}

void print(struct stu *head)

{

    system("cls");

    cout<<"学号 "<<"姓名 "<<"数学 "<<"语文 "<<"英语 "<<"化学 "<<"物理 "<<"总分"<<endl;

    struct stu *p;

    p=head;

    if(head!=NULL)

    {

        do

        {

            cout<<" "<<setiosflags(ios_base::left)<<setw(5)<<p->num<<setw(5)<<p->name<<setw(5)<<p->Ma<<setw(5)<<p->En<<setw(5)<<p->Ch<<setw(5)<<p->C<<setw(5)<<p->W<<setw(5)<<p->all<<resetiosflags(ios_base::left)<<endl;

            p=p->next;

        }

        while(p!=NULL);

        cout<<endl<<endl<<endl<<endl<<endl<<endl<<endl<<endl<<endl;

    }

    else exit(0);

}

void del(struct stu *head,int &n)

{

    system("cls");

    if(n==0)

    {

        cout<<"成绩表已经为空"<<endl;

        exit(0);

    }

    int num;

    cout<<"请输入要删除信息的学号:";

    cin>>num;

    while(num!=0)

    {

        struct stu *p1,*p2;

        p1=head;

        while(num!=p1->num&&p1->next!=NULL)    // 连表的遍历

        {

            p2=p1;

            p1=p1->next;

        }

        if(num==p1->num)

        {

            if(p1==head)

            {

                head=p1->next;

            }

            else

            {

                p2->next=p1->next;

            }

            cout<<num<<"号已被删除"<<endl;

            n--;

        }

        else cout<<"未找到此数据!"<<endl;

        cout<<"请输入要删除的序号";

        cin>>num;

    }

    if(n==0){cout<<"此时链表已为空!"<<endl;exit(0);}

}

void insert(struct stu *head,int &n)    // 添加学生的信息

{

    system("cls");

    struct stu *stu;

    stu=(struct stu*)malloc(LinkList);

    cout<<"请输入该学生学号"<<endl;

    cin>>stu->num;

    cout<<"请输入该学生姓名"<<endl;

    cin>>stu->name;

    cout<<"请输入该学生 数学成绩"<<endl;

    cin>>stu->Ma;

    cout<<"请输入该学生 语文成绩"<<endl;

    cin>>stu->En;

    cout<<"请输入该学生 英语成绩"<<endl;

    cin>>stu->Ch;

    cout<<"请输入该学生 化学成绩成绩"<<endl;

    cin>>stu->C;

    cout<<"请输入该学生 物理成绩成绩"<<endl;

    cin>>stu->W
c118
;

    stu->all=stu->Ma+stu->En+stu->Ch+stu->C+stu->W;//进行求和运算。

    n++;

    struct stu *p0,*p1,*p2;

    p1=head;

    p0=stu;

    if(head==NULL)

    {

        head=p0;

        p0->next=NULL;

    }

    else

    {

        while(p0->num>p1->num&&p1->next!=NULL)

        {

            p2=p1;

            p1=p1->next;

        }

        if(p0->num<p1->num)

        {

            if(head==p1){head=p0;}

            else p2->next=p0;

            p0->next=p1;

        }

        else

        {

            p1->next=p0;

            p0->next=NULL;

        }

    }

}

void sort(struct stu *head)

{

    struct stu *p1,*p2,*p0;

    float b;

    char temp[20];

    int NO=0;

    p0=head;

    p2=head;

    p1=p2->next;

    b=(p2->all);

    while(p0->next!=NULL)

    {

        while(p1!=NULL)   //排序

        {

            if((p1->all)>b)

            {

                b=(p1->all);

                p2=p1;

            }

            p1=p1->next;

        };

        p2->order=++NO;

        b=p2->order;

        p2->order=p0->order;

        p0->order=b;

        b=p2->num;

        p2->num=p0->num;

        p0->num=b;

        b=p2->Ma;

        p2->Ma=p0->Ma;

        p0->Ma=b;

        b=p2->En;

        p2->En=p0->En;

        p0->En=b;

        b=p2->Ch;

        p2->Ch=p0->Ch;

        p0->Ch=b;

        b=p2->C;

        p2->C=p0->C;

        p0->C=b;

        b=p2->W;

        p2->W=p0->W;

        p0->W=b;

        b=p2->all;

        p2->all=p0->all;

        p0->all=b;

        strcpy(temp,p2->name);   //strcpy是一种C语言的标准库函数,strcpy把从src地址开始且含有'\0'结束符的字符串复制到以dest开始的地址空间,返回值的类型为char*。

        strcpy(p2->name,p0->name);

        strcpy(p0->name,temp);

        p0=p0->next;

        p2=p0;

        p1=p2->next;

        b=(p2->all);

    }

    if(p0->next==NULL)p2->order=++NO;

}

void menu()

{

    cout<<"┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓"<<endl;

    cout<<"┃                                                          ┃"<<endl;

    cout<<"┃                                                          ┃"<<endl;

    cout<<"┃                                                          ┃"<<endl;

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

    cout<<"┃                                                          ┃"<<endl;

    cout<<"┃                                                          ┃"<<endl;

    cout<<"┃                                                          ┃"<<endl;

    cout<<"┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛"<<endl;

}

void select()

{

    cout<<   "┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓"<<endl;

    cout<<   "┃                                                          ┃"<<endl;

    cout<<   "┃     (1)学生成绩整理          (4)学生成绩排名             ┃"<<endl;

    cout<<   "┃                                                          ┃"<<endl;

    cout<<   "┃                                                          ┃"<<endl;

    cout<<   "┃     (2)学生成绩显示          (5)学生信息添加             ┃"<<endl;

    cout<<   "┃                                                          ┃"<<endl;

    cout<<   "┃                                                          ┃"<<endl;

    cout<<   "┃     (3)学生成绩查询          (6)学生信息删除             ┃"<<endl;

    cout<<   "┃                                                          ┃"<<endl;

    cout<<   "┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛"<<endl;

    cout<<"请输入您的选择"<<endl;

}

void selectmh(struct stu *head)

{

    system("cls");

    int a;

    cout<<"┏━━━━━━━━━━━━━━━━━━━━━━━━━━━┓"<<endl;

    cout<<"┃                                                      ┃"<<endl;

    cout<<"┃      (1)按姓名查找          (2)按号查找<2>           ┃"<<endl;

    cout<<"┃                                                      ┃"<<endl;

    cout<<"┗━━━━━━━━━━━━━━━━━━━━━━━━━━━┛"<<endl;

    cout<<"请输入您的选择"<<endl;

    cin>>a;

    if(a>2||a<1) cout<<"无该选项,请从1~2中选择"<<endl;

    else

        switch(a)

    {

        case 1:SearchName(head);break;

        case 2:SearchNum(head);break;

    }

}

void SearchNum(struct stu *head)

{

    system("cls");

    int num;

    struct stu *p;

    p=head;

    cout<<"请输入要查找的学生的学号:";

    cin>>num;

    while(p->num!=num&&p->next!=NULL)

    {

        p=p->next;

    }

    if(p->num==num)

    {

        cout<<"该生的成绩为:"<<endl;

        cout<<"学号 "<<"姓名 "<<"数学 "<<"语文 "<<"英语 "<<"化学 "<<"物理 "<<"总分"<<endl;

        cout<<" "<<setiosflags(ios_base::left)<<setw(5)<<p->num<<setw(5)<<p->name<<setw(5)<<p->Ma<<setw(5)<<p->En<<setw(5)<<p->Ch<<setw(5)<<p->C<<setw(5)<<p->W<<setw(5)<<p->all<<resetiosflags(ios_base::left)<<endl;

        cout<<endl<<endl<<endl<<endl<<endl<<endl<<endl<<endl<<endl;

    }

    else cout<<"该学生并未录入成绩!"<<endl<<endl<<endl;

}

void SearchName(struct stu *head)

{

    system("cls");

    struct stu *p;

    p=head;

    char name[20];

    cout<<"请输入要查找的学生的“姓名”:";

    cin>>name;

    while(strcmp(p->name,name)!=0&&p->next!=NULL)

    {

        p=p->next;

    }

    if(strcmp(p->name,name)==0)

    {

        cout<<"该生的成绩为:"<<endl;

        cout<<"学号 "<<"姓名 "<<"数学 "<<"语文 "<<"英语 "<<"化学 "<<"物理 "<<"总分"<<endl;

        cout<<" "<<setiosflags(ios_base::left)<<setw(5)<<p->num<<setw(5)<<p->name<<setw(5)<<p->Ma<<setw(5)<<p->En<<setw(5)<<p->Ch<<setw(5)<<p->C<<setw(5)<<p->W<<setw(5)<<p->all<<resetiosflags(ios_base::left)<<endl;

        cout<<endl<<endl<<endl<<endl<<endl<<endl<<endl<<endl<<endl;

    }

    else cout<<"该学生并未录入成绩"<<endl<<endl<<endl;

}

void No(struct stu *head)

{

    system("cls");

    int i,j;

    struct stu *p;

    p=head;

    for(j=1;j<=20;j++)

    {

        if(p->order==1&&p->next!=NULL)

        {

            cout<<"名次 "<<"学号 "<<"姓名 "<<"数学 "<<"语文 "<<"英语 "<<"化学 "<<"物理 "<<"总分"<<endl;

            for(i=0;i<10;i++)

            {

                cout<<" "<<setiosflags(ios_base::left)<<setw(5)<<p->order<<setw(5)<<p->num<<setw(5)<<p->name<<setw(5)<<p->Ma<<setw(5)<<p->En<<setw(5)<<p->Ch<<setw(5)<<p->C<<setw(5)<<p->W<<setw(5)<<p->all<<resetiosflags(ios_base::left)<<endl;

                if(p->next!=NULL)

                    p=p->next;

                else

                {

                    cout<<"已经输出全部成绩"<<endl;

                    break;

                }

            }

            cout<<endl<<endl<<endl<<endl<<endl<<endl<<endl<<endl<<endl<<endl<<endl;

        }

    }

}

#include "zhang.h"

#include<iostream>

using namespace std;

int main()

{

    int n=0;

    struct stu *head;

    int a;

    menu();

    while(a)

    {

        select();

        cin>>a;

        switch(a)

        {

        case 1:head=creat(n);break;

        case 2:print(head);break;

        case 3:selectmh(head);break;

        case 4:sort(head);No(head);break;

        case 5:insert(head,n);break;

        case 6:del(head,n);break;

        }

    }

    return 0;

}

程序实验

















内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: