课程设计 学生成绩查询

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;


    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;
}






程序实验



学生成绩管理系统设计” A.问题描述 学生信息包括:学号、姓名、性别、年龄、班级等信息。 小学生除了包括学生所有信息外,还包括英语数学和语文成绩。 中学生除了包括小学生所有信息外,还包括地理、历史成绩。 大学生除了包括学生所有信息外,还包括专业、英语、程序设计和高等数学等课程。 设计一程序能够对学生成绩进行管理,应用到继承、抽象类、虚函数、虚基类、多态和文件的输入/输出等内容。 B.功能要求 (1)添加功能:程序能够添加不同学生的记录,提供选择界面供用户选择所要添加的类别,要求学号要唯一,如果添加了重复学号的记录时,则提示数据添加重复并取消添加。 (2)查询功能:可根据学号、姓名等信息对已添加的学生记录进行查询,如果未找到,给出相应的提示信息,如果找到,则显示相应的记录信息。 (3)显示功能:可显示当前系统中所有学生的记录,每条记录占据一行。 (4)编辑功能:可根据查询结果对相应的记录进行修改,修改时注意学号的唯一性。 (5)删除功能:主要实现对已添加的学生记录进行删除。如果当前系统中没有相应的记录,则提示“记录为空!”并返回操作。 (6)统计功能:能根据多种参数进行统计。能统计学生人数、总分、单科的平均分等。 (7)保存功能:可将当前系统中各类记录存入文件中,存入方式任意。 (8)读取功能:可将保存在文件中的信息读入到当前系统中,供用户进行使用。 (9)排序功能:可按总分和单科成绩排名次。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值