数据结构课设----运动会分数统计系统(C++版)(优化版)

目录

 

1.优化内容

2.部分代码

3.完整代码

4.运行截图


ps:如果要实验报告或者ppt可告诉我。

优化内容

优化内容

1.增加了修改功能

2.文件输入到文本文档为字符流

3.将各个菜单美化

部分代码

 菜单函数

void menu(int n, int m, int w)
{//n代表学校数,m代表男子数,w代表女子数
    int c;
    void input(int n, int m, int w);//输入功能
    void output(int n, int m, int w);//输出功能
    void sortput(int n, int m, int w);//排序输出
    void search(int n, int m, int w);//查询功能
    void modify(int n, int m, int w);//修改功能
    cout<<"\t\t***********欢迎使用***********"<<endl;
    cout<< "\t\t******************************" << endl;
    cout<<"\t\t***** 运动会分数统计系统 *****"<<endl;
    cout <<"\t\t**                          **"<< endl;
    cout<<"\t\t**        1.信息输入        **"<<endl;
    cout<<"\t\t**        2.统计输出        **" << endl;
    cout<<"\t\t**        3.排序输出        **" << endl;
    cout<<"\t\t**        4.信息查询        **"<<endl;
    cout<<"\t\t**        5.修改功能        **"<<endl;
    cout<<"\t\t**        6.退出系统        **"<< endl;
    cout<<"\t\t**                          **"<< endl;
    cout<<"\t\t******************************" << endl;
    cout<<"\t\t******************************" << endl;
    cout << endl;
    cout<<"======================================================="<<endl;
    cout << endl;
    cout<<"请输入您想要实现的功能(1--6):"<<endl;
    cin >> c;
    switch (c) {
    case 1:
        input(n, m, w);
        break;
    case 2:
        output(n, m, w);
        break;
    case 3:
        sortput(n, m, w);
        break;
    case 4:
        search(n, m, w);
        break;
    case 5:
        modify(n, m, w);
        break;
    case 6:
        cout<<"感谢使用,祝您天天开心!!"<<endl;
        exit(0);//正常退出
    default:
        cout<<"您输入有误,请重新输入!";
        menu(n, m, w);
    }
}

 写入、写出、删除 文件

//将信息写入文件中
void savetofile(int n, int w, int m)
{
    ofstream file("file.txt", ios::app | ios::in | ios::out | ios::binary);
    if (file.fail()) {
        cout << "打开失败" << endl;
    }
    for (int i = 0; i < n; i++) {
        for (int j = 0; j < w + m; j++)
 for (int z = 0; z < 5; z++) {
        {
         file <<"学校编号:" << a[i].snum <<"  "<<"学校名字:" << a[i].sname<<"  "<<"学校总分:" << a[i].score <<"  "<<"男子总分:" <<a[i].mscore <<"  " <<"女子总分:" <<a[i].wscore <<"  "<<"项目编号:" <<a[i].t[j].inum <<"  "<<"项目取前" << a[i].t[j].top <<"名" << "  " << "项目名次:" << a[i].t[j].range[z] << "  " << "项目总分:" << a[i].t[j].mark[z] << endl;
            }
        }
    }
    file.close();
}

//将信息从文件里取出
void readfromfile(int n,int w,int m)
{
    ifstream file("file.txt", ios::app | ios::in | ios::out | ios::binary);
}

//将信息从文件里删除
void deletefile() {
   // string file_path = "file.txt";
    //remove(file_path.c_str());
    ofstream file("file.txt", ios_base::out | ios_base::trunc);
    file << "";
    file.close();
}

 信息输入功能

//信息输入功能
void input(int n, int m, int w)
{
    int i, j, s, k, q = 1;
    for (i = 0; i < n; i++) {
        cout<<"请输入学校的编号和学校的名字:"<<endl;
        cin >> a[i].snum>>a[i].sname;
        for (j = 0; j < m + w; j++) {//总的项目的输入
            cout << "请输入项目编号:";
            cin>> a[i].t[j].inum;
            if (a[i].t[j].inum % 2 == 0) {
               cout<<"编号为偶数取前三" << endl;
                cout << "获得的名次的个数(1--5):";
                }
                else if (a[i].t[j].inum % 2 == 1) {
                cout <<"编号为奇数的项目取前五"<<endl;
                    cout << "获得的名次的个数(1--5):";
                }
                else {
                    cout << "输入有误!程序退出....";
                    return;
                }
            cin >> k;//输入获得名次的个数
            for (s = 0; s < k; s++) {
                if(a[i].t[j].inum % 2 == 0){
                    cout<<"请输入获得的名次(1--3):";
                }
                else {
                    cout<<"请输入获得的名次(1--5):";
                }
                cin >> a[i].t[j].range[s];//输入所获得的名次的信息
            }
            cout << endl;
        }
    }
    for (i = 0; i < n; i++) {
        //初始化分数
        a[i].score = 0;//学校总分
        a[i].mscore = 0;//男子总分
        a[i].wscore = 0;//女子总分
    }
    for (i = 0; i < n; i++) {
        for (j = 0; j < m + w; j++) {
            if (a[i].t[j].inum % 2 == 1) {
                a[i].t[j].top = 5;
                cout << "项目" << j + 1 << "取得是前:"<< a[i].t[j].top <<"名"<<endl;
            }
            else if (a[i].t[j].inum % 2 == 0) {
                a[i].t[j].top = 3;
                cout << "项目" << j + 1 << "取得是前:" << a[i].t[j].top << "名" << endl;;
            }
                for (s = 0; s < 5; s++) {
                if (a[i].t[j].top == 3) {
                    switch (a[i].t[j].range[s]) {
                    case 0:
                        a[i].t[j].mark[s] = 0;
                        break;
                    case 1:
                        a[i].t[j].mark[s] = 5;
                        break;
                    case 2:
                        a[i].t[j].mark[s] = 3;
                        break;
                    case 3:
                        a[i].t[j].mark[s] = 2;
                        break;
                    }
                }
                else if (a[i].t[j].top == 5) {
                    switch (a[i].t[j].range[s]) {
                    case 0:
                        a[i].t[j].mark[s] = 0;
                        break;
                    case 1:
                        a[i].t[j].mark[s] = 7;
                        break;
                    case 2:
                        a[i].t[j].mark[s] = 5;
                        break;
                    case 3:
                        a[i].t[j].mark[s] = 3;
                        break;
                    case 4:
                        a[i].t[j].mark[s] = 2;
                        break;
                    case 5:
                        a[i].t[j].mark[s] = 1;
                        break;
                    }
                }
                a[i].score = a[i].score + a[i].t[j].mark[s];//学校总分
                if (j < m) {
                    a[i].mscore = a[i].mscore + a[i].t[j].mark[s];
                }
                else {//女子总分
                    a[i].wscore = a[i].wscore + a[i].t[j].mark[s];
                }
            }
        }
    }
    cout<<"输入完毕!(返回菜单请输入1):";
    cin >> q;
    cout << endl;
    if (q != 1) {
        cout<<"不能再添加信息了!";
    }
    cout << endl;
    savetofile(n,w,m);//保存文件
    menu(n, m, w);
}

 信息输出功能

//信息输出功能
void output(int n, int m, int w) /*2.统计输出*/
{
    readfromfile(n,m,w);
    int i, j, s, q = 0;
    for (i = 0; i < n; i++)  /*显示结果*/
    {
        cout << "学校编号:" << a[i].snum << "  ";
        cout << "学校名字:" << a[i].sname << "  ";
        cout << "学校总分:" << a[i].score << endl;
        cout << "男子总分:" << a[i].mscore <<"  " << "女子总分:" << a[i].wscore << endl;
        for (j = 0; j < m + w; j++)
        {
            cout << "项目编号:" << a[i].t[j].inum <<"  " << "所取名次取前:" << a[i].t[j].top<<"名"<< endl;
            for (s = 0; s < 5; s++)
            {
                if (a[i].t[j].range[s] != 0)
                    cout<<"名次:"<< a[i].t[j].range[s] <<"  " << "分数:"<< a[i].t[j].mark[s]<<"  "<<endl;
            }
        }
        cout << endl;
    }
    cout<<"\n";
    cout<<"统计完毕!返回?  1是 2否";    /*返回菜单*/
    cin >> q;
    cout << endl;
    if (q != 1)
        cout<<"统计已经结束!";
    cout << endl;
    menu(n, m, w);
}

 排序输出

//排序输出
void sortput(int n, int m, int w)//n为学校数,m为男子数,w为女子数
{
    readfromfile(n,m,w);
    int c, i, j, k, q = 0;
    int temp[N]={};
    cout<<"\t\t***** 排序输出系统 *****"<< endl;
    cout<<"\t\t************************"<< endl;
    cout<<"\t\t**                    **"<< endl;
    cout<<"\t\t**  1.按学校编号输出  **"<< endl;
    cout<<"\t\t**  2.按学校总分输出  **"<<endl;
    cout<<"\t\t**  3.按男子总分输出  **"<<endl;
    cout<<"\t\t**  4.按女子总分输出  **"<<endl;
    cout<<"\t\t**                    **"<< endl;
    cout<<"\t\t************************"<< endl;
    cout<<"\t\t************************"<< endl;
    cout<<"======================================================="<<endl;
    cout << endl;
    do {
        cout<<"请选择您想实现的功能的编号(1--4):";
        cin >> c;
        switch (c) {
        case 1:
            for (i = 0; i < n; i++) {
                temp[i] = i;
            }
            //用的是冒泡排序输出
            for (i = 0; i < n; i++) {
                for (j = i + 1; j < n; j++) {
                    if (a[temp[i]].snum > a[j].snum) {
                        k = temp[i];
                        temp[i] = temp[j];
                        temp[j] = k;
                    }
                }
            }
            for (i = 0; i < n; i++) {
                cout << "学校编号:" << a[temp[i]].snum <<"  " << "学校名字" << a[temp[i]].sname << "  " << "学校总分:" << a[temp[i]].score << endl;
                cout << "男子总分" << a[temp[i]].mscore << "  " << "女子总分:" << a[temp[i]].wscore << endl;
            }
            break;
        case 2:
            for (i = 0; i < n; i++) {
                temp[i] = i;
            }
            for (i = 0; i < n; i++) {
                for (j = i + 1; j < n; j++) {
                    if (a[temp[i]].score < a[j].score) {
                        k = temp[i];
                        temp[i] = temp[j];
                        temp[j] = k;
                    }
                }
            }
            for (i = 0; i < n; i++) {
                cout << "学校编号:" << a[temp[i]].snum << "  " << "学校名字" << a[temp[i]].sname <<"  " << "学校总分:" << a[temp[i]].score << endl;
                cout << "男子总分" << a[temp[i]].mscore << "  " << "女子总分:" << a[temp[i]].wscore << endl;
            }
            break;
        case 3:
            for (i = 0; i < n; i++) {
                temp[i] = i;
            }
            for (i = 0; i < n; i++) {
                for (j = i + 1; j < n; j++) {
                    if (a[temp[i]].mscore < a[j].mscore) {
                        k = temp[i];
                        temp[i] = temp[j];
                        temp[j] = k;
                    }
                }
            }
            for (i = 0; i < n; i++) {

                cout << "学校编号:" << a[temp[i]].snum << "  " << "学校名字" << a[temp[i]].sname << "  " << "学校总分:" << a[temp[i]].score << endl;
                cout << "男子总分" << a[temp[i]].mscore << "  " << "女子总分:" << a[temp[i]].wscore << endl;
            }
            break;
        case 4:
            for (i = 0; i < n; i++) {
                temp[i] = i;
            }
            for (i = 0; i < n; i++) {
                for (j = i + 1; j < n; j++) {
                    if (a[temp[i]].wscore < a[j].wscore) {
                        k = temp[i];
                        temp[i] = temp[j];
                        temp[j] = k;
                    }
                }
            }
            for (i = 0; i < n; i++) {
                cout << "学校编号:" << a[temp[i]].snum << "  " << "学校名字" << a[temp[i]].sname << "  " << "学校总分:" << a[temp[i]].score << endl;
                cout << "男子总分" << a[temp[i]].mscore << "  " << "女子总分:" << a[temp[i]].wscore << endl;
            }
            break;
        default:
            cout<<"您的输入有误!请从新输入...";
        }
        cout<<"请选择 1.返回主菜单  0.继续";
        cin >> q;
        cout << endl;
    }
    while (0 == q);
    cout << endl;
    if (q != 0) {
        menu(n, m, w);
    }
}

 查询功能

//查询功能
void search(int n, int m, int w)
{
    readfromfile(n,m,w);
    int c, i, j, k, d, l, q = 0;
    cout<<"\t\t********查询系统********"<<endl;
    cout << "\t\t************************"<< endl;
    cout << "\t\t**                    **"<< endl;
    cout << "\t\t**  1.按学校编号查询  **"<<endl;
    cout << "\t\t**  2.按项目编号查询  **"<< endl;
    cout << "\t\t**                    **" << endl;
    cout << "\t\t************************"<< endl;
    cout << "\t\t************************"<< endl;
cout << "=======================================================" << endl;
cout << endl;
do
{
    k = -1; d = -1; l = -1;
    cout << "请选择要实现功能的编号(1--2):";
    cin >> c;
    switch (c) {
    case 1:
        cout << "要查询的学校编号:";       /*查找学校编号下标*/
        cin >> c;
        for (i = 0; i < n; i++) {
            if (c == a[i].snum) {
                k = i;
            }
        }
        if (-1 == k) {
            cout << "错误:这个学校没有参加此次运动会!" << endl;
        }
        else {
            cout << "要查询的项目编号:";         /*查找项目编号下标*/
            cin >> c;
            for (j = 0; j < m + w; j++) {
                if (c == a[k].t[j].inum) {
                    d = j;
                }
            }
            if (-1 == d) {
                cout << "此次运动会没有这个项目" << endl;
            }
            else {
                cout << "这个项目取前" << a[k].t[d].top << "名,该学校的成绩如下:" << endl;
                for (i = 0; i < 5; i++) {
                    if (a[k].t[d].range[i] != 0) {
                        cout << "名次:" << a[k].t[d].range[i];
                    }
                }
            }
        }
        break;
    case 2:
        cout << "要查询的项目编号:";     /*查找项目编号下标*/
        cin >> c;
        for (i = 0; i < n; i++) {
            for (j = 0; j < m + w; j++) {
                if (c == a[i].t[j].inum) {
                    l = j;
                }
                if (-1 == l) {
                    cout << "此次运动会没有该项目";
                }
                else {
                    cout << "该项目取前a[0].t[l].top名,取得名次的学校" << endl;
                    for (i = 0; i < n; i++) {
                        for (j = 0; j < 5; j++) {
                            if (a[i].t[l].range[j] != 0) {
                                cout << "学校编号:" << a[i].snum << "  " << ", 名次:" << a[i].t[l].range[j] << endl;
                            }
                        }
                    }
                }
            }
        }
        break;
    default:
        cout << "输入错误,请重试!" << endl;
    }
    cout << "请选择:1.返回主菜单 0.继续";
    cin >> q;
    cout << endl;
} while (0 == q);
cout << endl;
if (q != 0) {
    menu(n, m, w);
}
}

 修改功能

//修改功能
void modify(int n, int m, int w) {
    int size = sizeof(a) / sizeof(a[0]); // 数组长度
    int c = 0, delete_snum = 0, key1 = 0, key2 = 0, j = 0, i = 0, modify_snum = 0, alter_snum = 0, alter_inum = 0, temp = 0, k = 0;
    string alter_sname;
    readfromfile(n, m, w);
    deletefile(); //将之前的信息从文件里删除
    cout << "\t\t*****************修改系统****************" << endl;
    cout << "\t\t*****************************************" << endl;
    cout << "\t\t**                                     **" << endl;
    cout << "\t\t**   1.利用学校编号删除学校全部信息    **" << endl;
    cout << "\t\t**   2.利用学校和项目编号删除项目信息  **" << endl;
    cout << "\t\t**   3.修改学校信息                    **" << endl;
    cout << "\t\t**   4.修改项目信息                    **" << endl;
    cout << "\t\t**                                     **" << endl;
    cout << "\t\t*****************************************" << endl;
    cout << "\t\t*****************************************" << endl;
    cout << "=======================================================" << endl;
    cout << endl;
    cout << "请选择要实现功能的编号(1--4):";
    cin >> c;
    switch (c) {
    case 1:             //利用学校编号删除学校全部信息
        cout << "要删除的学校编号:";       /*查找学校编号下标*/
        cin >> delete_snum;
        for (int i = 0; i < n; i++) {
            if (delete_snum == a[i].snum) {
                key1 = i;
            }
        }
        if (-1 == key1) {
            cout << "错误:这个学校没有参加此次运动会!" << endl;
        }
        //int size = sizeof(a) / sizeof(int);
        //delete& a[key1];
        //memmove(&arr[key1], &arr[key1 + 1], sizeof(int) * (size - key1 - 1));
        //memmove(&a[key1], &a[key1 + 1], sizeof(int) * (size - key1 - 1));
        //free(&a[key1]);
        for (int i = key1; i < size - 1; i++) {
            a[i] = a[i + 1];
        }
        size--;
        break;
    case 2:             //利用学校和项目编号删除项目信息
        cout << "要删除的学校编号:";       /*查找学校编号下标*/
        cin >> delete_snum;
        for (i = 0; i < n; i++) {
            if (delete_snum == a[i].snum) {
                key1 = i;
            }
        }
        if (-1 == key1) {
            cout << "错误:这个学校没有参加此次运动会!" << endl;
        }
        else {
            cout << "要查询的项目编号:";         /*查找项目编号下标*/
            cin >> c;
            for (j = 0; j < m + w; j++) {
                if (delete_snum == a[key1].t[j].inum) {
                    key2 = j;
                }
            }
            if (-1 == key2) {
                cout << "此次运动会没有这个项目" << endl;
            }
        }
        delete& a[key1].t[key2];
        break;
    case 3:             //修改学校信息
        cout << "要修改的学校编号:";       /*查找学校编号下标*/
        cin >> modify_snum;
        for (i = 0; i < n; i++) {
            if (modify_snum == a[i].snum) {
                key1 = i;
            }
        }
        if (-1 == key1) {
            cout << "错误:这个学校没有参加此次运动会!" << endl;
        }
        cout << "\t\t**************************" << endl;
        cout << "\t\t** 请选择你想修改的信息 **" << endl;
        cout << "\t\t**                      **" << endl;
        cout << "\t\t**     1. 学校编号      **" << endl;
        cout << "\t\t**     2. 学校名字      **" << endl;
        cout << "\t\t**                      **" << endl;
        cout << "\t\t***************************" << endl;
        cin >> c;
        if (c == 1) {
            cout << "请输入新的学校编号(1-20):" << endl;
            cin >> alter_snum;
            a[key1].snum = a[alter_snum].snum;
            temp = key1;
            delete& a[key1];
            a[alter_snum] = a[temp];
            cout << "学校编号修改成功!" << endl;
        }
        else if (c == 2) {
            cout << "请输入新的学校名字:" << endl;
            cin >> alter_sname;
            a[alter_snum].sname = alter_sname;
            a[key1].sname = a[alter_snum].sname;
            cout << "学校名字修改成功!" << endl;
        }
        else {
            cout << "请输入1或2!" << endl;
        }
        break;
    case 4:                //修改项目信息
        cout << "要修改的学校编号:";       /*查找学校编号下标*/
        cin >> modify_snum;
        for (i = 0; i < n; i++) {
            if (modify_snum == a[i].snum) {
                key1 = i;
            }
        }
        if (-1 == key1) {
            cout << "错误:这个学校没有参加此次运动会!" << endl;
        }
        else {
            cout << "要查询的项目编号:";         /*查找项目编号下标*/
            cin >> c;
            for (j = 0; j < m + w; j++) {
                if (delete_snum == a[key1].t[j].inum) {
                    key2 = j;
                }
            }
            if (-1 == key2) {
                cout << "此次运动会没有这个项目" << endl;
            }
        }
        cout << "\t\t**************************" << endl;
        cout << "\t\t**请选择想修改项目的信息**" << endl;
        cout << "\t\t**                      **" << endl;
        cout << "\t\t**     1. 项目编号      **" << endl;
        cout << "\t\t**     2. 名次          **" << endl;
        cout << "\t\t**                      **" << endl;
        cout << "\t\t**************************" << endl;
        cout << "\t\t**************************" << endl;
        if (c == 1) {
            cout << "请输入修改后的项目编号:" << endl;
            cin >> alter_inum;
            a[key1].t[key2].inum = alter_inum;
            cout << "修改成功!" << endl;
        }
        else if (c == 2) {
            cout << "请输入修改后的获得项目名次的个数:" << endl;
            cin >> k;//输入获得名次的个数
            for (int s = 0; s < k; s++) {
                if (a[key1].t[key2].inum % 2 == 0) {
                    cout << "请输入获得的名次(1--3):";
                }
                else {
                    cout << "请输入获得的名次(1--5):";
                }
                cin >> a[key1].t[key2].range[s];//输入所获得的名次的信息
            }
            if (a[key1].t[key2].inum % 2 == 1) {
                k = 5;
            }
            else if (a[key1].t[key2].inum % 2 == 0) {
                k = 3;
            }
            for (int s = 0; s < 5; s++) {
                if (k == 3) {
                    switch (a[key1].t[key2].range[s]) {
                    case 0:
                        a[key1].t[key2].mark[s] = 0;
                        break;
                    case 1:
                        a[key1].t[key2].mark[s] = 5;
                        break;
                    case 2:
                        a[key1].t[key2].mark[s] = 3;
                        break;
                    case 3:
                        a[key1].t[key2].mark[s] = 2;
                        break;
                    }
                }
                else if (k == 5) {
                    switch (a[i].t[j].range[s]) {
                    case 0:
                        a[key1].t[key2].mark[s] = 0;
                        break;
                    case 1:
                        a[key1].t[key2].mark[s] = 7;
                        break;
                    case 2:
                        a[key1].t[key2].mark[s] = 5;
                        break;
                    case 3:
                        a[key1].t[key2].mark[s] = 3;
                        break;
                    case 4:
                        a[key1].t[key2].mark[s] = 2;
                        break;
                    case 5:
                        a[key1].t[key2].mark[s] = 1;
                        break;
                    }
                }
                for (int j = 0; j < w + m; j++) {
                    for (int s = 0; s < 5; s++) {
                        a[key1].score = a[key1].score + a[key1].t[j].mark[s];//学校总分
                        if (j < m) {
                            a[key1].mscore = a[key1].mscore + a[key1].t[j].mark[s];
                        }
                        else {//女子总分
                            a[key1].wscore = a[key1].wscore + a[key1].t[j].mark[s];
                        }
                    }
                }
            }
        }
    }
    int q = 0;
    cout << "输入完毕!(返回菜单请输入1):";
    cin >> q;
    cout << endl;
    if (q != 1) {
        cout << "不能再添加信息了!";
    }
    cout << endl;
    savetofile(n, w, m);//保存文件
    menu(n, m, w);
}

 主函数

//主函数
int main()
{
    int n, m, w;//n为学校个数,m为男子数,w为女子数
    char sname[S];
    cout << "\t\t\t欢迎使用\t\t\t\t" << endl;
    cout << endl;
    cout << "\t***********运动会分数统计系统***********" << endl;
    cout << endl;
    cout << "请先输入运动会主要信息" << endl;
    cout << "输入学校个数:";
    cin >> n;
   cout<<"输入男子项目个数:";
   cin >> m;
   cout<<"输入女子项目个数:";
   cin >> w;
    menu(n, m, w);
}

完整代码

完整代码

#include<math.h>
#include<process.h>
#include <iostream>
#include <fstream>
#define _CRT_SECURE_NO_WARNINGS
using namespace std;

#define N 20 //学校最大数目
#define M 30 //男子项目最大数
#define W 20 //女子项目最大数
#define S 10000 //学校名字长度最大数

//存放项目信息的结构体
typedef struct
{
    int inum;//项目编号
    int top;//取名次的数目
    int range[5];//名次
    int mark[5];//分数
}itemnode;

//存放学校信息的结构体
typedef struct
{
    int snum;//学校编号
    string sname;//学校名字
    int score;//学校总分
    int mscore;//男子总分
    int wscore;//女子总分
    itemnode t[M + W];//项目数组
}snode;
snode a[N];//定义一个学校数组

//菜单函数
void menu(int n, int m, int w)
{//n代表学校数,m代表男子数,w代表女子数
    int c;
    void input(int n, int m, int w);//输入功能
    void output(int n, int m, int w);//输出功能
    void sortput(int n, int m, int w);//排序输出
    void search(int n, int m, int w);//查询功能
    void modify(int n, int m, int w);//修改功能
    cout<<"\t\t***********欢迎使用***********"<<endl;
    cout<< "\t\t******************************" << endl;
    cout<<"\t\t***** 运动会分数统计系统 *****"<<endl;
    cout <<"\t\t**                          **"<< endl;
    cout<<"\t\t**        1.信息输入        **"<<endl;
    cout<<"\t\t**        2.统计输出        **" << endl;
    cout<<"\t\t**        3.排序输出        **" << endl;
    cout<<"\t\t**        4.信息查询        **"<<endl;
    cout<<"\t\t**        5.修改功能        **"<<endl;
    cout<<"\t\t**        6.退出系统        **"<< endl;
    cout<<"\t\t**                          **"<< endl;
    cout<<"\t\t******************************" << endl;
    cout<<"\t\t******************************" << endl;
    cout << endl;
    cout<<"======================================================="<<endl;
    cout << endl;
    cout<<"请输入您想要实现的功能(1--6):"<<endl;
    cin >> c;
    switch (c) {
    case 1:
        input(n, m, w);
        break;
    case 2:
        output(n, m, w);
        break;
    case 3:
        sortput(n, m, w);
        break;
    case 4:
        search(n, m, w);
        break;
    case 5:
        modify(n, m, w);
        break;
    case 6:
        cout<<"感谢使用,祝您天天开心!!"<<endl;
        exit(0);//正常退出
    default:
        cout<<"您输入有误,请重新输入!";
        menu(n, m, w);
    }
}

//将信息写入文件中
void savetofile(int n, int w, int m)
{
    ofstream file("file.txt", ios::app | ios::in | ios::out | ios::binary);
    if (file.fail()) {
        cout << "打开失败" << endl;
    }
    for (int i = 0; i < n; i++) {
        for (int j = 0; j < w + m; j++)
 for (int z = 0; z < 5; z++) {
        {
         file <<"学校编号:" << a[i].snum <<"  "<<"学校名字:" << a[i].sname<<"  "<<"学校总分:" << a[i].score <<"  "<<"男子总分:" <<a[i].mscore <<"  " <<"女子总分:" <<a[i].wscore <<"  "<<"项目编号:" <<a[i].t[j].inum <<"  "<<"项目取前" << a[i].t[j].top <<"名" << "  " << "项目名次:" << a[i].t[j].range[z] << "  " << "项目总分:" << a[i].t[j].mark[z] << endl;
            }
        }
    }
    file.close();
}

//将信息从文件里取出
void readfromfile(int n,int w,int m)
{
    ifstream file("file.txt", ios::app | ios::in | ios::out | ios::binary);
}

//将信息从文件里删除
void deletefile() {
   // string file_path = "file.txt";
    //remove(file_path.c_str());
    ofstream file("file.txt", ios_base::out | ios_base::trunc);
    file << "";
    file.close();
}

//信息输入功能
void input(int n, int m, int w)
{
    int i, j, s, k, q = 1;
    for (i = 0; i < n; i++) {
        cout<<"请输入学校的编号和学校的名字:"<<endl;
        cin >> a[i].snum>>a[i].sname;
        for (j = 0; j < m + w; j++) {//总的项目的输入
            cout << "请输入项目编号:";
            cin>> a[i].t[j].inum;
            if (a[i].t[j].inum % 2 == 0) {
               cout<<"编号为偶数取前三" << endl;
                cout << "获得的名次的个数(1--5):";
                }
                else if (a[i].t[j].inum % 2 == 1) {
                cout <<"编号为奇数的项目取前五"<<endl;
                    cout << "获得的名次的个数(1--5):";
                }
                else {
                    cout << "输入有误!程序退出....";
                    return;
                }
            cin >> k;//输入获得名次的个数
            for (s = 0; s < k; s++) {
                if(a[i].t[j].inum % 2 == 0){
                    cout<<"请输入获得的名次(1--3):";
                }
                else {
                    cout<<"请输入获得的名次(1--5):";
                }
                cin >> a[i].t[j].range[s];//输入所获得的名次的信息
            }
            cout << endl;
        }
    }
    for (i = 0; i < n; i++) {
        //初始化分数
        a[i].score = 0;//学校总分
        a[i].mscore = 0;//男子总分
        a[i].wscore = 0;//女子总分
    }
    for (i = 0; i < n; i++) {
        for (j = 0; j < m + w; j++) {
            if (a[i].t[j].inum % 2 == 1) {
                a[i].t[j].top = 5;
                cout << "项目" << j + 1 << "取得是前:"<< a[i].t[j].top <<"名"<<endl;
            }
            else if (a[i].t[j].inum % 2 == 0) {
                a[i].t[j].top = 3;
                cout << "项目" << j + 1 << "取得是前:" << a[i].t[j].top << "名" << endl;;
            }
                for (s = 0; s < 5; s++) {
                if (a[i].t[j].top == 3) {
                    switch (a[i].t[j].range[s]) {
                    case 0:
                        a[i].t[j].mark[s] = 0;
                        break;
                    case 1:
                        a[i].t[j].mark[s] = 5;
                        break;
                    case 2:
                        a[i].t[j].mark[s] = 3;
                        break;
                    case 3:
                        a[i].t[j].mark[s] = 2;
                        break;
                    }
                }
                else if (a[i].t[j].top == 5) {
                    switch (a[i].t[j].range[s]) {
                    case 0:
                        a[i].t[j].mark[s] = 0;
                        break;
                    case 1:
                        a[i].t[j].mark[s] = 7;
                        break;
                    case 2:
                        a[i].t[j].mark[s] = 5;
                        break;
                    case 3:
                        a[i].t[j].mark[s] = 3;
                        break;
                    case 4:
                        a[i].t[j].mark[s] = 2;
                        break;
                    case 5:
                        a[i].t[j].mark[s] = 1;
                        break;
                    }
                }
                a[i].score = a[i].score + a[i].t[j].mark[s];//学校总分
                if (j < m) {
                    a[i].mscore = a[i].mscore + a[i].t[j].mark[s];
                }
                else {//女子总分
                    a[i].wscore = a[i].wscore + a[i].t[j].mark[s];
                }
            }
        }
    }
    cout<<"输入完毕!(返回菜单请输入1):";
    cin >> q;
    cout << endl;
    if (q != 1) {
        cout<<"不能再添加信息了!";
    }
    cout << endl;
    savetofile(n,w,m);//保存文件
    menu(n, m, w);
}

#if(1)//信息输出功能
void output(int n, int m, int w) /*2.统计输出*/
{
    readfromfile(n,m,w);
    int i, j, s, q = 0;
    for (i = 0; i < n; i++)  /*显示结果*/
    {
        cout << "学校编号:" << a[i].snum << "  ";
        cout << "学校名字:" << a[i].sname << "  ";
        cout << "学校总分:" << a[i].score << endl;
        cout << "男子总分:" << a[i].mscore <<"  " << "女子总分:" << a[i].wscore << endl;
        for (j = 0; j < m + w; j++)
        {
            cout << "项目编号:" << a[i].t[j].inum <<"  " << "所取名次取前:" << a[i].t[j].top<<"名"<< endl;
            for (s = 0; s < 5; s++)
            {
                if (a[i].t[j].range[s] != 0)
                    cout<<"名次:"<< a[i].t[j].range[s] <<"  " << "分数:"<< a[i].t[j].mark[s]<<"  "<<endl;
            }
        }
        cout << endl;
    }
    cout<<"\n";
    cout<<"统计完毕!返回?  1是 2否";    /*返回菜单*/
    cin >> q;
    cout << endl;
    if (q != 1)
        cout<<"统计已经结束!";
    cout << endl;
    menu(n, m, w);
}
#endif

//排序输出
void sortput(int n, int m, int w)//n为学校数,m为男子数,w为女子数
{
    readfromfile(n,m,w);
    int c, i, j, k, q = 0;
    int temp[N]={};
    cout<<"\t\t***** 排序输出系统 *****"<< endl;
    cout<<"\t\t************************"<< endl;
    cout<<"\t\t**                    **"<< endl;
    cout<<"\t\t**  1.按学校编号输出  **"<< endl;
    cout<<"\t\t**  2.按学校总分输出  **"<<endl;
    cout<<"\t\t**  3.按男子总分输出  **"<<endl;
    cout<<"\t\t**  4.按女子总分输出  **"<<endl;
    cout<<"\t\t**                    **"<< endl;
    cout<<"\t\t************************"<< endl;
    cout<<"\t\t************************"<< endl;
    cout<<"======================================================="<<endl;
    cout << endl;
    do {
        cout<<"请选择您想实现的功能的编号(1--4):";
        cin >> c;
        switch (c) {
        case 1:
            for (i = 0; i < n; i++) {
                temp[i] = i;
            }
            //用的是冒泡排序输出
            for (i = 0; i < n; i++) {
                for (j = i + 1; j < n; j++) {
                    if (a[temp[i]].snum > a[j].snum) {
                        k = temp[i];
                        temp[i] = temp[j];
                        temp[j] = k;
                    }
                }
            }
            for (i = 0; i < n; i++) {
                cout << "学校编号:" << a[temp[i]].snum <<"  " << "学校名字" << a[temp[i]].sname << "  " << "学校总分:" << a[temp[i]].score << endl;
                cout << "男子总分" << a[temp[i]].mscore << "  " << "女子总分:" << a[temp[i]].wscore << endl;
            }
            break;
        case 2:
            for (i = 0; i < n; i++) {
                temp[i] = i;
            }
            for (i = 0; i < n; i++) {
                for (j = i + 1; j < n; j++) {
                    if (a[temp[i]].score < a[j].score) {
                        k = temp[i];
                        temp[i] = temp[j];
                        temp[j] = k;
                    }
                }
            }
            for (i = 0; i < n; i++) {
                cout << "学校编号:" << a[temp[i]].snum << "  " << "学校名字" << a[temp[i]].sname <<"  " << "学校总分:" << a[temp[i]].score << endl;
                cout << "男子总分" << a[temp[i]].mscore << "  " << "女子总分:" << a[temp[i]].wscore << endl;
            }
            break;
        case 3:
            for (i = 0; i < n; i++) {
                temp[i] = i;
            }
            for (i = 0; i < n; i++) {
                for (j = i + 1; j < n; j++) {
                    if (a[temp[i]].mscore < a[j].mscore) {
                        k = temp[i];
                        temp[i] = temp[j];
                        temp[j] = k;
                    }
                }
            }
            for (i = 0; i < n; i++) {

                cout << "学校编号:" << a[temp[i]].snum << "  " << "学校名字" << a[temp[i]].sname << "  " << "学校总分:" << a[temp[i]].score << endl;
                cout << "男子总分" << a[temp[i]].mscore << "  " << "女子总分:" << a[temp[i]].wscore << endl;
            }
            break;
        case 4:
            for (i = 0; i < n; i++) {
                temp[i] = i;
            }
            for (i = 0; i < n; i++) {
                for (j = i + 1; j < n; j++) {
                    if (a[temp[i]].wscore < a[j].wscore) {
                        k = temp[i];
                        temp[i] = temp[j];
                        temp[j] = k;
                    }
                }
            }
            for (i = 0; i < n; i++) {
                cout << "学校编号:" << a[temp[i]].snum << "  " << "学校名字" << a[temp[i]].sname << "  " << "学校总分:" << a[temp[i]].score << endl;
                cout << "男子总分" << a[temp[i]].mscore << "  " << "女子总分:" << a[temp[i]].wscore << endl;
            }
            break;
        default:
            cout<<"您的输入有误!请从新输入...";
        }
        cout<<"请选择 1.返回主菜单  0.继续";
        cin >> q;
        cout << endl;
    }
    while (0 == q);
    cout << endl;
    if (q != 0) {
        menu(n, m, w);
    }
}

//查询功能
void search(int n, int m, int w)
{
    readfromfile(n,m,w);
    int c, i, j, k, d, l, q = 0;
    cout<<"\t\t********查询系统********"<<endl;
    cout << "\t\t************************"<< endl;
    cout << "\t\t**                    **"<< endl;
    cout << "\t\t**  1.按学校编号查询  **"<<endl;
    cout << "\t\t**  2.按项目编号查询  **"<< endl;
    cout << "\t\t**                    **" << endl;
    cout << "\t\t************************"<< endl;
    cout << "\t\t************************"<< endl;
cout << "=======================================================" << endl;
cout << endl;
do
{
    k = -1; d = -1; l = -1;
    cout << "请选择要实现功能的编号(1--2):";
    cin >> c;
    switch (c) {
    case 1:
        cout << "要查询的学校编号:";       /*查找学校编号下标*/
        cin >> c;
        for (i = 0; i < n; i++) {
            if (c == a[i].snum) {
                k = i;
            }
        }
        if (-1 == k) {
            cout << "错误:这个学校没有参加此次运动会!" << endl;
        }
        else {
            cout << "要查询的项目编号:";         /*查找项目编号下标*/
            cin >> c;
            for (j = 0; j < m + w; j++) {
                if (c == a[k].t[j].inum) {
                    d = j;
                }
            }
            if (-1 == d) {
                cout << "此次运动会没有这个项目" << endl;
            }
            else {
                cout << "这个项目取前" << a[k].t[d].top << "名,该学校的成绩如下:" << endl;
                for (i = 0; i < 5; i++) {
                    if (a[k].t[d].range[i] != 0) {
                        cout << "名次:" << a[k].t[d].range[i];
                    }
                }
            }
        }
        break;
    case 2:
        cout << "要查询的项目编号:";     /*查找项目编号下标*/
        cin >> c;
        for (i = 0; i < n; i++) {
            for (j = 0; j < m + w; j++) {
                if (c == a[i].t[j].inum) {
                    l = j;
                }
                if (-1 == l) {
                    cout << "此次运动会没有该项目";
                }
                else {
                    cout << "该项目取前a[0].t[l].top名,取得名次的学校" << endl;
                    for (i = 0; i < n; i++) {
                        for (j = 0; j < 5; j++) {
                            if (a[i].t[l].range[j] != 0) {
                                cout << "学校编号:" << a[i].snum << "  " << ", 名次:" << a[i].t[l].range[j] << endl;
                            }
                        }
                    }
                }
            }
        }
        break;
    default:
        cout << "输入错误,请重试!" << endl;
    }
    cout << "请选择:1.返回主菜单 0.继续";
    cin >> q;
    cout << endl;
} while (0 == q);
cout << endl;
if (q != 0) {
    menu(n, m, w);
}
}

//修改功能
void modify(int n, int m, int w) {
    int size = sizeof(a) / sizeof(a[0]); // 数组长度
    int c = 0, delete_snum = 0, key1 = 0, key2 = 0, j = 0, i = 0, modify_snum = 0, alter_snum = 0, alter_inum = 0, temp = 0, k = 0;
    string alter_sname;
    readfromfile(n, m, w);
    deletefile(); //将之前的信息从文件里删除
    cout << "\t\t*****************修改系统****************" << endl;
    cout << "\t\t*****************************************" << endl;
    cout << "\t\t**                                     **" << endl;
    cout << "\t\t**   1.利用学校编号删除学校全部信息    **" << endl;
    cout << "\t\t**   2.利用学校和项目编号删除项目信息  **" << endl;
    cout << "\t\t**   3.修改学校信息                    **" << endl;
    cout << "\t\t**   4.修改项目信息                    **" << endl;
    cout << "\t\t**                                     **" << endl;
    cout << "\t\t*****************************************" << endl;
    cout << "\t\t*****************************************" << endl;
    cout << "=======================================================" << endl;
    cout << endl;
    cout << "请选择要实现功能的编号(1--4):";
    cin >> c;
    switch (c) {
    case 1:             //利用学校编号删除学校全部信息
        cout << "要删除的学校编号:";       /*查找学校编号下标*/
        cin >> delete_snum;
        for (int i = 0; i < n; i++) {
            if (delete_snum == a[i].snum) {
                key1 = i;
            }
        }
        if (-1 == key1) {
            cout << "错误:这个学校没有参加此次运动会!" << endl;
        }
        //int size = sizeof(a) / sizeof(int);
        //delete& a[key1];
        //memmove(&arr[key1], &arr[key1 + 1], sizeof(int) * (size - key1 - 1));
        //memmove(&a[key1], &a[key1 + 1], sizeof(int) * (size - key1 - 1));
        //free(&a[key1]);
        for (int i = key1; i < size - 1; i++) {
            a[i] = a[i + 1];
        }
        size--;
        break;
    case 2:             //利用学校和项目编号删除项目信息
        cout << "要删除的学校编号:";       /*查找学校编号下标*/
        cin >> delete_snum;
        for (i = 0; i < n; i++) {
            if (delete_snum == a[i].snum) {
                key1 = i;
            }
        }
        if (-1 == key1) {
            cout << "错误:这个学校没有参加此次运动会!" << endl;
        }
        else {
            cout << "要查询的项目编号:";         /*查找项目编号下标*/
            cin >> c;
            for (j = 0; j < m + w; j++) {
                if (delete_snum == a[key1].t[j].inum) {
                    key2 = j;
                }
            }
            if (-1 == key2) {
                cout << "此次运动会没有这个项目" << endl;
            }
        }
        delete& a[key1].t[key2];
        break;
    case 3:             //修改学校信息
        cout << "要修改的学校编号:";       /*查找学校编号下标*/
        cin >> modify_snum;
        for (i = 0; i < n; i++) {
            if (modify_snum == a[i].snum) {
                key1 = i;
            }
        }
        if (-1 == key1) {
            cout << "错误:这个学校没有参加此次运动会!" << endl;
        }
        cout << "\t\t**************************" << endl;
        cout << "\t\t** 请选择你想修改的信息 **" << endl;
        cout << "\t\t**                      **" << endl;
        cout << "\t\t**     1. 学校编号      **" << endl;
        cout << "\t\t**     2. 学校名字      **" << endl;
        cout << "\t\t**                      **" << endl;
        cout << "\t\t***************************" << endl;
        cin >> c;
        if (c == 1) {
            cout << "请输入新的学校编号(1-20):" << endl;
            cin >> alter_snum;
            a[key1].snum = a[alter_snum].snum;
            temp = key1;
            delete& a[key1];
            a[alter_snum] = a[temp];
            cout << "学校编号修改成功!" << endl;
        }
        else if (c == 2) {
            cout << "请输入新的学校名字:" << endl;
            cin >> alter_sname;
            a[alter_snum].sname = alter_sname;
            a[key1].sname = a[alter_snum].sname;
            cout << "学校名字修改成功!" << endl;
        }
        else {
            cout << "请输入1或2!" << endl;
        }
        break;
    case 4:                //修改项目信息
        cout << "要修改的学校编号:";       /*查找学校编号下标*/
        cin >> modify_snum;
        for (i = 0; i < n; i++) {
            if (modify_snum == a[i].snum) {
                key1 = i;
            }
        }
        if (-1 == key1) {
            cout << "错误:这个学校没有参加此次运动会!" << endl;
        }
        else {
            cout << "要查询的项目编号:";         /*查找项目编号下标*/
            cin >> c;
            for (j = 0; j < m + w; j++) {
                if (delete_snum == a[key1].t[j].inum) {
                    key2 = j;
                }
            }
            if (-1 == key2) {
                cout << "此次运动会没有这个项目" << endl;
            }
        }
        cout << "\t\t**************************" << endl;
        cout << "\t\t**请选择想修改项目的信息**" << endl;
        cout << "\t\t**                      **" << endl;
        cout << "\t\t**     1. 项目编号      **" << endl;
        cout << "\t\t**     2. 名次          **" << endl;
        cout << "\t\t**                      **" << endl;
        cout << "\t\t**************************" << endl;
        cout << "\t\t**************************" << endl;
        if (c == 1) {
            cout << "请输入修改后的项目编号:" << endl;
            cin >> alter_inum;
            a[key1].t[key2].inum = alter_inum;
            cout << "修改成功!" << endl;
        }
        else if (c == 2) {
            cout << "请输入修改后的获得项目名次的个数:" << endl;
            cin >> k;//输入获得名次的个数
            for (int s = 0; s < k; s++) {
                if (a[key1].t[key2].inum % 2 == 0) {
                    cout << "请输入获得的名次(1--3):";
                }
                else {
                    cout << "请输入获得的名次(1--5):";
                }
                cin >> a[key1].t[key2].range[s];//输入所获得的名次的信息
            }
            if (a[key1].t[key2].inum % 2 == 1) {
                k = 5;
            }
            else if (a[key1].t[key2].inum % 2 == 0) {
                k = 3;
            }
            for (int s = 0; s < 5; s++) {
                if (k == 3) {
                    switch (a[key1].t[key2].range[s]) {
                    case 0:
                        a[key1].t[key2].mark[s] = 0;
                        break;
                    case 1:
                        a[key1].t[key2].mark[s] = 5;
                        break;
                    case 2:
                        a[key1].t[key2].mark[s] = 3;
                        break;
                    case 3:
                        a[key1].t[key2].mark[s] = 2;
                        break;
                    }
                }
                else if (k == 5) {
                    switch (a[i].t[j].range[s]) {
                    case 0:
                        a[key1].t[key2].mark[s] = 0;
                        break;
                    case 1:
                        a[key1].t[key2].mark[s] = 7;
                        break;
                    case 2:
                        a[key1].t[key2].mark[s] = 5;
                        break;
                    case 3:
                        a[key1].t[key2].mark[s] = 3;
                        break;
                    case 4:
                        a[key1].t[key2].mark[s] = 2;
                        break;
                    case 5:
                        a[key1].t[key2].mark[s] = 1;
                        break;
                    }
                }
                for (int j = 0; j < w + m; j++) {
                    for (int s = 0; s < 5; s++) {
                        a[key1].score = a[key1].score + a[key1].t[j].mark[s];//学校总分
                        if (j < m) {
                            a[key1].mscore = a[key1].mscore + a[key1].t[j].mark[s];
                        }
                        else {//女子总分
                            a[key1].wscore = a[key1].wscore + a[key1].t[j].mark[s];
                        }
                    }
                }
            }
        }
    }
    int q = 0;
    cout << "输入完毕!(返回菜单请输入1):";
    cin >> q;
    cout << endl;
    if (q != 1) {
        cout << "不能再添加信息了!";
    }
    cout << endl;
    savetofile(n, w, m);//保存文件
    menu(n, m, w);
}

//主函数
int main()
{
    int n, m, w;//n为学校个数,m为男子数,w为女子数
    char sname[S];
    cout << "\t\t\t欢迎使用\t\t\t\t" << endl;
    cout << endl;
    cout << "\t***********运动会分数统计系统***********" << endl;
    cout << endl;
    cout << "请先输入运动会主要信息" << endl;
    cout << "输入学校个数:";
    cin >> n;
   cout<<"输入男子项目个数:";
   cin >> m;
   cout<<"输入女子项目个数:";
   cin >> w;
    menu(n, m, w);
}

运行截图

运行截图

 

 

  • 10
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 13
    评论
运动会分数统计 问题描述:参加运动会有n个学校,学校编号为1……n。比赛分成m个男子项目,和w个女子项目。项目编号为男子1……m,女子m+1……m+w。不同的项目取前五名或前三名积分;取前五名的积分分别为:7、5、3、2、1,前三名的积分分别为:5、3、2;哪些取前五名或前三名由学生自己定。(m<=20,n<=20) 功能要求: 1) 可以输入各个项目的前三名或前五名的成绩; 2) 能统计各学校总分, 3) 可以按学校编号或名称、学校总分、男女团体总分排序输出; 4) 可以按学校编号查询学校某个项目的情况;可以按项目编号查询取得前三或前五名的学校。 5) 数据存入文件并能随时查询 6) 规定:输入数据形式和范围:可以输入学校的名称,运动项目的名称 输出形式:有中文提示,各学校分数为整形 界面要求:有合理的提示,每个功能可以立菜单,根据提示,可以完成相关的功能要求。 存储结构:学生自己根据系统功能要求自己计,但是要求运动会的相关数据要存储在数据文件中。(数据文件的数据读写方法等相关内容在c语言程序计的书上,请自学解决)请在最后的上交资料中指明你用到的存储结构; 测试数据:要求使用1、全部合法数据;2、整体非法数据;3、局部非法数据。进行程序测试,以保证程序的稳定。测试数据及测试结果请在上交的资料中写明;
评论 13
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值