目录
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);
}
运行截图
运行截图