有n个学校参加运动会,学校名对应的编号为1……n。比赛分成m个男子项目,和w个女子项目。每个项目取前三名积分,前三名的积分分别为:5、3、2;数据可以存储在一个数据文件中,数据结构、具体数据自定。
具体功能有:
(1)从键盘输入学校、项目、项目得分信息;
(2)能统计各学校总分;
(3)能统计各个项目的前三名;
(4)可以按学校编号或名称、学校总分、男女团体总分排序输出;
(5)可以按学校编号查询学校某个项目的情况;
(6)可以按项目编号查询取得前三名的学校。
(7)数据存入文件并能随时查询。
zb大学 2018到2019年数据结构课设 17级 lzx 留,过去的祖传代码已经不适合当前需求了,学长在此留下代码,供后面的做些许参考,不希望写完的代码仅仅放在磁盘里。
#include<stdio.h>
#include<malloc.h>
#include<stdlib.h>
#define N 20 //男子,女子项目的最大个数
int n; //学校的个数
int m; //男子项目的个数
int w; //女子项目的个数
FILE *fp;
typedef struct {
int num;
int score;
int rank;
}Woman;
typedef struct {
int num;
int score;
int rank;
}Man;
typedef struct Item {
int num; //学校编号
char schoolName[N]; //学校名字
int score; //该学校所有成绩的综合
int Mscore; //男子所有项目的成绩和
int Wscore; //女子所有项目的成绩和
Man manItem[N];
Woman womanItem[N];
struct Item *next;
}Item,*ItemNode;
//链表的创建
void ListCreat(ItemNode &I){
ItemNode p,q,temp;
printf("请问此次有多少学校参加运动会?\n");
scanf("%d",&n);
printf("请问此次活动有多少男子项目?\n");
scanf("%d",&m);
printf("请问此次活动有多少女子项目?\n");
scanf("%d",&w);
p=I;
if((fp=fopen("sports.txt","w"))==NULL){
printf("文件打开失败\n");
getchar();
exit(1);
} else {
for(int i=1;i<=n;i++){
q = (ItemNode)malloc(sizeof(Item));
printf("第%d所学校的名字为:",i);
scanf("%s",q->schoolName);
fprintf(fp,"第%d所学校的名字为:",i);
fprintf(fp,"%s\n",q->schoolName);
printf("第%d所学校的编号为:",i);
scanf("%d",&q->num);
fprintf(fp,"第%d所学校的编号为:",i);
fprintf(fp,"%d\n",q->num);
fprintf(fp,"第%d所学校男子信息录入\n",i);
//男子项目信息的录入
for(int j=1;j<=m;j++){
printf("第%d所学校的第%d个男子项目的编号是:\n",i,j);
scanf("%d",&q->manItem[j].num);
printf("该学校该项目获得第几名?\n");
scanf("%d",&q->manItem[j].rank);
fprintf(fp,"编号:%d\t",j);
fprintf(fp,"名次:%d\n",q->manItem[j].rank);
}
fprintf(fp,"第%d所学校女子信息录入\n",i);
//女子项目信息的录入
for(int k=1;k<=w;k++){
printf("第%d所学校的第%d个女子项目的编号是:\n",i,k);
scanf("%d",&q->womanItem[k].num);
printf("该学校该项目获得第几名?\n");
scanf("%d",&q->womanItem[k].rank);
fprintf(fp,"编号:%d\t",k);
fprintf(fp,"名次:%d\n",q->womanItem[k].rank);
}
p->next = q;
p = q;
printf("\n******************************************\n\n");
fprintf(fp,"\n");
}
q->next = NULL;
fclose(fp);
}
}
//对于得分情况的计算
void calculate(ItemNode &I){
ItemNode p;
int i,j,k;
int Wresult=0;
int Mresult=0;
p=I;
//对获得名次的项目赋值
for(i=1;i<=n;i++){
p=p->next;
//给男子项目计算分数
for(j=1;j<=m;j++){