您的位置:首页 > 理论基础 > 数据结构算法

数据结构课程设计运动会统计系统

2020-07-15 05:09 375 查看

经过一天的俩人的瞎糊弄,搞出来的系统。。代码有点冗余,不要在意。

#include <iostream>
#include <time.h>
#include <stdlib.h>
#include<unistd.h>
#include<iomanip>
using namespace std;
typedef struct School {
int num;        //学校编号
char name[20];  //学校名称
int score;      //学校总分
int man_score;  //男团体总分
int women_score;//女团体总分
struct School *next;
}*Sch;
Sch P=(Sch)malloc(sizeof(School));//学校链表头指针
typedef struct Project {
int pnum;           //项目编号
char name[20];      //项目名称
int sex;			//区分男女项目,男为1,女为0;
int top_r[6];       //名次
int mark[6];        //分数
struct Project *next;
} *Pro;
Pro Q=(Pro)malloc(sizeof(Project));//项目链表头指针
void Initialization();  //初始化学校和运动项目的编号和名称
void Input();           //成绩输入
void view();            //菜单
void Sum_Score();   //统计总分
Sch GetSchool();//函数返回学校链表头指针
Pro GetProject();//函数返回项目链表头指针
void Sc_numsort();//按学校编号排序
void Sc_scoreSort();//按学校总分排序
void Sc_ManSort();//按男团
void Sc_WomenSort();//按女团
void Find_Scnum();//按学校编号
void Find_ProNum();//按项目编号
char* GetSch_Name(int n);//输入编号查询学校名
int main() {
cout<<"是否进行重置初始化(1.是  2.否)"<<endl;
char i;
while(1){
cin>>i;
if(i=='1') {
Initialization();	//初始化学校和项目
break;
}
else if(i=='2'){
break;
}
else{
cout<<"输入有误,请重新输入:";
}
}
P=GetSchool();			//函数返回学校链表头指针
if(P==NULL){
cout<<"学校相关信息丢失,请重新格式化!";
return 0;
}
Q=GetProject();			//函数返回项目链表头指针
if(Q==NULL){
cout<<"项目相关信息丢失,请重新格式化!";
return 0;
}
view();
free(P);
free(Q);
return 0;
}
void Initialization() {
system("cls");
int sch_num;	//学校数量
int pro_num;	//项目数量
int man_num;	//男子项目数量
int i;
FILE *fp;
if((fp = fopen("information.txt","w"))==NULL) {
cout<<"文件不存在正在建立..."<<endl;
cout<<"建立成功!"<<endl;
}
cout<<"请输入参加学校个数:";
cin>>sch_num;
for(i=1; i<=sch_num; i++) {
Sch S=(Sch)malloc(sizeof(School));
cout<<endl<<"请输入第"<<i<<"个学校名称:";
cin>>S->name;
cout<<endl<<"请输入第"<<i<<"个学校编号:";
cin>>S->num;
S->man_score=0;
S->women_score=0;
S->score=0;
//存进文件
fprintf(fp,"\n%s %d %d %d %d",S->name,S->num, S->man_score,S->women_score,S->score);
}
cout<<"学校初始化成功"<<endl<<endl;
FILE *ff;
if((ff = fopen("pro.txt","w"))==NULL) {
cout<<"文件不存在正在建立..."<<endl;
cout<<"建立成功!"<<endl;
}
cout<<"请输入项目个数:";
cin>>pro_num;
cout<<"请输入男子项目个数:";
cin>>man_num;
for(i=1; i<=man_num; i++) {
Pro n=(Pro)malloc(sizeof(Project));
cout<<endl<<"请输入第"<<i<<"个男子项目名称:";
cin>>n->name;
n->pnum=i;
if(i%2==0) {
fprintf(ff,"\n%d %s 1 0 0 0 0 0 0",n->pnum,n->name);
} else if(i%2!=0) {
fprintf(ff,"\n%d %s 1 0 0 0 0 0 0 0 0 0 0",n->pnum,n->name);
}

}
for(i=1; i<=pro_num-man_num; i++) {
Pro n=(Pro)malloc(sizeof(Project));
cout<<endl<<"请输入第"<<i<<"个女子项目名称:";
cin>>n->name;
n->pnum=i+man_num;
if(i%2==0) {
fprintf(ff,"\n%d %s 0 0 0 0 0 0 0",n->pnum,n->name);
} else if(i%2!=0) {
fprintf(ff,"\n%d %s 0 0 0 0 0 0 0 0 0 0 0",n->pnum,n->name);
}
}
cout<<"写入成功"<<endl;
cout<<"项目初始化成功"<<endl<<endl;
fclose(ff);
fclose(fp);
cout<<"初始化完成,即将进入主菜单......";
sleep(2);
system("cls");
}
void view() {
while(1){
system("cls");
char op;
cout<<endl;
cout<<"\t欢迎来到郑轻运动会统计系统"<<endl;
cout<<"\t 1.输入成绩并存储"<<endl;
cout<<"\t 2.统计各学院总分"<<endl;
cout<<"\t 3.按学校编号排序输出"<<endl;
cout<<"\t 4.按学校总分排序输出"<<endl;
cout<<"\t 5.按男子总分排序输出"<<endl;
cout<<"\t 6.按女子总分排序输出"<<endl;
cout<<"\t 7.按学校编号查询"<<endl;
cout<<"\t 8.按项目编号查询"<<endl;
cout<<"\t 9.退出"<<endl;
cout<<"-----------------------------------------"<<endl;
cout<<"请输入你的选择:"<<endl;
cin>>op;
switch (op) {
case '1':Input();break;
case '2':Sum_Score();break;
case '3':Sc_numsort();break;
case '4':Sc_scoreSort();break;
case '5':Sc_ManSort();break;
case '6':Sc_WomenSort();break;
case '7':Find_Scnum();break;
case '8': Find_ProNum();
break;
case '9':
return;
default:
cout<<"输入有错请重新输入"<<endl;
view();
}
cout<<"操作完成!"<<endl;
cout<<"1.返回主菜单   else.退出"<<endl;
cin>>op;
if(op!='1'){
break;
}
}
}
Sch GetSchool() {
Sch p=(Sch)malloc(sizeof(School));
Sch t=p;
FILE *ff;
ff=fopen("information.txt","r");
if(fgetc(ff)==EOF) {//判断文件是否为空
return NULL;
}
while(!feof(ff)) {
int num;
char name[20];
int score;
int man_score;
int women_score;
fscanf(ff,"%s%d%d%d%d",name,&num,&man_score,&women_score,&score);
Sch m=(Sch)malloc(sizeof(School));
m->num=num;
strcpy(m->name,name);
m->score=score;
m->man_score=man_score;
m->women_score=women_score;
t->next=m;
t=t->next;
}
t->next=NULL;
fclose(ff);
return p;
}
Pro GetProject() {
Pro p=(Pro)malloc(sizeof(Project));
Pro t=p;
FILE *ff;
ff=fopen("pro.txt","r");
if(fgetc(ff)==EOF) {//判断文件是否为空
return NULL;
}
int pronum=1;
while(!feof(ff)) {
int pnum;
char name[20];
int sex;
int top_r[5];
int mark[5];
Pro m=(Pro)malloc(sizeof(Project));
if(pronum%2==0) {
fscanf(ff,"%d%s%d%d%d%d%d%d%d",&pnum,name,&sex,&top_r[1],&top_r[2],&top_r[3],&mark[1],&mark[2],&mark[3]);
pronum++;
m->pnum=pnum;
strcpy(m->name,name);
m->sex=sex;
for(int i=1;i<=3;i++)
{
m->top_r[i]=top_r[i];
m->mark[i]=mark[i];
}
} else if(pronum%2!=0) {
fscanf(ff,"%d%s%d%d%d%d%d%d%d%d%d%d%d",&pnum,name,&sex,&top_r[1],&top_r[2],&top_r[3],&top_r[4],&top_r[5],
&mark[1],&mark[2],&mark[3],&mark[4],&mark[5]);
pronum++;
m->pnum=pnum;
strcpy(m->name,name);
m->sex=sex;
for(int i=1;i<=5;i++){
m->top_r[i]=top_r[i];
m->mark[i]=mark[i];
}
}
t->next=m;
t=t->next;
}
t->next=NULL;
fclose(ff);
return p;
}
void Input() {
Sch m;
m=P->next;
Pro n;
n=Q->next;
system("cls");
int i;
int pro_num;		//要输入的项目个数
int pnum;			//输入的项目编号
char schname[20]; 	//输入的学校名
char proname[20];	//输入的项目名
int score;			//输入的成绩
int score_f;		//两个成绩变量用于判断成绩是否呈降序
cout<<"请输入项目个数:";
cin>>pro_num;
//检查是否存在此项目
for(i=1; i<=pro_num; i++) {
while(1){
cout<<"请输入第"<<i<<"个项目编号:"<<endl;
cin>>pnum;
n=Q->next;
while(n!=NULL) {//查询是否已经存在
if(n->pnum==pnum) {
break;
}
n=n->next;
}
if(n==NULL) {
cout<<"该项目不存在,请重新输入:"<<endl;
} else {
if(pnum%2==0) {//偶数前三名
cout<<"请依次输入该项目前三名成绩信息:"<<endl;
int j=1;
score_f=100;		//将标记成绩设置为100
for(j;j<4;j++)
{
while(1){
cout<<"请输入第"<<j<<"名的学校名:";
cin>>schname;
m=P->next;
//检查学校名是否存在
while(m!=NULL){
if(strcmp(m->name,schname)==0){
break;
}
m=m->next;
}
if(m==NULL){
cout<<"该学校不存在,请重新输入:"<<endl;
}else{
cout<<"请输入成绩:";
while(1){
cin>>score;
if(score>score_f){
cout<<"比第"<<(j-1)<<"名成绩高,请重新输入:";
}
else{
score_f=score;
n->top_r[j]=m->num;
n->mark[j]=score;
m->score+=score;
if(n->sex==1){
m->man_score+=score;
}
else if(n->sex==0){
m->women_score+=score;
}break;
}
}break;
}
}
}
}
else if(pnum%2!=0){
cout<<"请依次输入该项目前五名成绩信息:"<<endl;
int j=1;
score_f=100;		//将标记成绩设置为100
for(j;j<6;j++)
{
while(1){
cout<<"请输入第"<<j<<"名的学校名:";
cin>>schname;
m=P->next;
while(m!=NULL){
if(strcmp(m->name,schname)==0){
break;
}
m=m->next;
}
if(m==NULL){
cout<<"该学校不存在,请重新输入:"<<endl;
}else{
cout<<"请输入成绩:";
while(1){
cin>>score;
if(score>score_f){
cout<<"比第"<<(j-1)<<"名成绩高,请重新输入:";
}
else{
score_f=score;
n->top_r[j]=m->num;
n->mark[j]=score;
m->score+=score;
if(n->sex==1){
m->man_score+=score;
}
else if(n->sex==0){
m->women_score+=score;
}
break;
}
}
break;
}
}
}
}
break;
}
}
}
//以下部分为写文件,可以写成函数
FILE *ff=fopen("information.txt","w");
m=P->next;
while(m!=NULL){
fprintf(ff,"\n%s %d %d %d %d",m->name,m->num,m->man_score,m->women_score,m->score);
m=m->next;
}
fclose(ff);
FILE *fp=fopen("pro.txt","w");
n=Q->next;
while(n!=NULL){
if(n->pnum%2==0){
fprintf(ff,"\n%d %s %d %d %d %d %d %d %d",n->pnum,n->name,n->sex,n->top_r[1],n->top_r[2],
n->top_r[3],n->mark[1],n->mark[2],n->mark[3]);
}
else if(n->pnum%2!=0){
fprintf(ff,"\n%d %s %d %d %d %d %d %d %d %d %d %d %d",n->pnum,n->name,n->sex,n->top_r[1],n->top_r[2],
n->top_r[3],n->top_r[4],n->top_r[5],n->mark[1],n->mark[2],n->mark[3],n->mark[4],n->mark[5]);
}
n=n->next;
}
fclose(fp);
cout<<"录入成功!"<<endl;
}
void Sum_Score() {
Sch q;
cout<<"\t各学校总分为"<<endl;
for(q=P->next; q!=NULL; q=q->next) {
cout<<setiosflags(ios::left);
cout<<"\t"<<setw(8)<<q->name<<" :"<<setw(5)<<q->score<<endl;
}

}
void Sc_numsort()
{
Sch  i,j,m,q,t;
int sum=0,n=0;
q=GetSchool();//获得头指针
cout<<"按编号排序输出为:"<<endl;
for(i=q->next;i!=NULL;i=i->next)
sum++;
//冒泡排序
while(sum!=1)
{
m=q;i=q->next;
j=i->next;
n=sum;
sum--;
while(n!=1)
{
n--;
if(i->num>j->num)
{
m->next=j;
i->next=j->next;
j->next=i;

m=j;
j=i->next;
}
else
{
m=i;
i=j;
j=j->next;
}
}
}
cout<<setiosflags(ios::left);
cout<<setw(10)<<"学校编号"<<setw(15)<<"学校名"<<setw(15)<<"学校总得分"<<setw(15)<<"男子团体总分"<<setw(15)<<"女子团体总分"<<endl;
for(i=q->next;i!=NULL;i=i->next)
{
cout<<" "<<setw(9)<<i->num<<setw(15)<<i->name <<setw(15)<<i->score <<setw(15)<<i->man_score<<setw(15)<<i->women_score<<endl;
}
free(q);

}
void Sc_scoreSort()
{
Sch  i,j,m,q,t;
int sum=0,n;
q=GetSchool();
cout<<"按学校总分排序输出为:"<<endl;
for(i=q->next;i!=NULL;i=i->next)
sum++;
while(sum!=1)
{
m=q;i=q->next;
j=i->next;
n=sum;
sum--;
while(n!=1)
{
n--;
if(i->score < j->score)
{
m->next=j;
i->next=j->next;
j->next=i;

m=j;
j=i->next;
}
else
{
m=i;
i=j;
j=j->next;
}
}
}
cout<<setiosflags(ios::left);
cout<<setw(15)<<"学校总得分"<<setw(10)<<"学校编号"<<setw(15)<<"学校名"<<setw(15)<<"男子团体总分"<<setw(15)<<"女子团子总分"<<endl;
for(i=q->next;i!=NULL;i=i->next)
{
cout<<setw(15)<<i->score<<setw(10)<<i->num<<setw(15)<<i->name<<setw(15)<<i->man_score<<setw(15)<<i->women_score<<endl;
}
free(q);
}
void Sc_ManSort()
{
Sch  i,j,m,q,t;
int sum=0,n;
q=GetSchool();
cout<<"按男子团体总分排序输出为:"<<endl;
for(i=q->next;i!=NULL;i=i->next)
sum++;
while(sum!=1)
{
m=q;i=q->next;
j=i->next;
n=sum;
sum--;
while(n!=1)
{
n--;
if(i->man_score < j->man_score)
{
m->next=j;
i->next=j->next;
j->next=i;
m=j;
j=i->next;
}
else
{
m=i;
i=j;
j=j->next;
}
}
}
cout<<setiosflags(ios::left);
cout<<setw(15)<<"男子团体总分"<<setw(15)<<"女子团体总分"<<setw(15)<<"学校总得分"<<setw(10)<<"学校编号"<<setw(15)<<"学校名"<<endl;
for(i=q->next;i!=NULL;i=i->next)
{
cout<<setw(15)<<i->man_score<<setw(15)<<i->women_score<<setw(15)<<i->score<<setw(10)<<i->num<<setw(15)<<i->name<<endl;
}
free(q);
}
void Sc_WomenSort()
{
Sch  i,j,m,q,t;
int sum=0,n;
q=GetSchool();
cout<<"按女子团体总分排序输出为:"<<endl;
for(i=q->next;i!=NULL;i=i->next)
sum++;
while(sum!=1)
{
m=q;i=q->next;
j=i->next;
n=sum;
sum--;
while(n!=1)
{
n--;
if(i->women_score < j->women_score)
{
m->next=j;
i->next=j->next;
j->next=i;
m=j;
j=i->next;
}
else
{
m=i;
i=j;
j=j->next;
}
}
}
cout<<setiosflags(ios::left);
cout<<setw(15)<<"女子团体总分"<<setw(15)<<"男子团体总分"<<setw(15)<<"学校总得分"<<setw(10)<<"学校编号"<<setw(15)<<"学校名"<<endl;
for(i=q->next;i!=NULL;i=i->next)
{
cout<<setw(15)<<i->women_score<<setw(15)<<i->man_score<<setw(15)<<i->score<<setw(10)<<i->num<<setw(15)<<i->name<<endl;
}
free(q);
}
void Find_Scnum()
{
int n,flag=0;
Sch q,i;
q=GetSchool();
cout<<"请输入学校编号:";
cin>>n;
cout<<setiosflags(ios::left);
for(i=q->next;i!=NULL;i=i->next)
{
if(i->num==n)
{
flag=1;
cout<<setw(15)<<"学校名"<<setw(10)<<"学校编号"<<setw(15)<<"学校总得分"<<setw(15)<<"男子团体总分"<<setw(15)<<"女子团体总分"<<endl;
cout<<setw(15)<<i->name<<setw(10)<<i->num<<setw(15)<<i->score<<setw(15)<<i->man_score<<setw(15)<<i->women_score<<endl;
}

20000
}
if(flag==0)
{
cout<<"学校不存在,请重新输入"<<endl;
Find_Scnum();
}
free(q);
}
char* GetSch_Name(int n)
{
Sch q,i;
q=GetSchool();
for(i=q->next;i!=NULL;i=i->next)
{
if(i->num==n)
{
return i->name;
}
}
free(q);
return NULL;
}
void Find_ProNum()//按项目编号
{
cout<<"请输入项目编号:";
int n,flag=0;
char *str1,*str2,*str3;
Pro pro,i;
Sch q,j;
q=GetSchool();
cin>>n;
pro=GetProject();
cout<<setiosflags(ios::left);
for(i=pro->next;i!=NULL;i=i->next)
{
if(n==i->pnum)//找到项目编号
{    flag=1;
if(n%2==0)//偶数三个项目
{
cout<<setw(10)<<"项目编号"<<setw(10)<<"项目名称"<<setw(10)<<"学校"<<setw(10)<<"成绩"<<endl;
for(int l=1;l<=3;l++)
{
str1=GetSch_Name(i->top_r[l]);
cout<<setw(10)<<i->pnum<<setw(10)<<i->name<<setw(10)<<str1<<setw(10)<<i->mark[l]<<endl;
}
}
if(n%2!=0)//奇数5个项目
{
cout<<setw(10)<<"项目编号"<<setw(10)<<"项目名称"<<setw(10)<<"学校"<<setw(10)<<"成绩"<<endl;
for(int l=1;l<=5;l++)
{
str1=GetSch_Name(i->top_r[l]);
cout<<setw(10)<<i->pnum<<setw(10)<<i->name<<setw(10)<<str1<<setw(10)<<i->mark[l]<<endl;
}
}
}
}
if(flag==0)
{
cout<<"项目不存在,请重新输入:"<<endl;
Find_ProNum();
}
free(q);
free(pro);
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: