各位C语言高手们,小女子在做一个短学期课程结业设计,帮忙看一下这个程序的错误
/*篮球赛个人技术统计系统
设某篮球联赛要统计20名著名球员个人技术数据。要求用高级语言实现篮球联赛个人技术数据处理系统。该系统在磁盘上存储如下信息:
1。每场球赛的个人技术数据。一场球一个人的技术数据包括:姓名,所属球队,三分球个数,篮板球个数,扣篮成功次数,抢断次数,得分,比赛日期。
2。个人技术数据汇总表。表中反映了每个人的技术数据的累计结果。表羡为:姓名,三分球总数,篮板球总数,扣篮成功总次数,抢断总次数,得分总数,比赛场数。
本系统功能如下:
1。创建存储每常球赛个人技术数据的存储系统(第一次输入个人技术数据时),然后自动创建存储个人技术数据汇总表的存储系统。
2。每场比赛后,添加个人技术数据,然后自动修改个人技术数据汇总表
3。能输出当前的个人技术数据汇总表
4。能输出指定技术项目平均每场数据较高的前三名运动员的姓名,所在队名和平均每场的单项数据。*/
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define SIZE 20
#define LEN sizeof(struct Player)
struct Date //声明结构体类型 struct Date
{int year;
int month;
int day;
};
struct Player //声明结构体类型strucct Player
{int num;
char *name;
char *team;
int three_point;
int rebound;
int dunk;
int steal;
int scores;
struct Date;
struct Player *next;
} people[SIZE]; //定义全局结构体数组Player,包含20个选手数据
struct SummarySheet
{
struct Player;
int match_nums;
struct SummarySheet *next;
};
void save() //定义函数save,向文件输出SIZE个选手数据
{FILE*fp;
int i;
if((fp=fopen("file","w"))==NULL)
{printf("cannot open file\n");
return;
}
for(i=0;i<SIZE;i++)
{if(fwrite(&people[i],sizeof(struct Player),1,fp)!=1)
printf("file write error\n");
fclose(fp);
}
}
int n; //定义全局变量,本文件模块中各函数均可使用它
struct Player * creat(void) //建立链表的函数
{struct Player *p1,*p2;
struct Player *head;
n=0;
p1=p2=(struct Player * )malloc(LEN); //开辟一个新单元
scanf("%d,%s,%s,%d,%d,%d,%d,%d",&p1->num,&p1->name,&p1->team,&p1->three_point,&p1->rebound,&p1->dunk,&p1->steal,&p1->scores);
scanf("%d,%d,%d",&p1->struct Date.year,&p1->struct Date.month,&p1->struct Date.day);
head=NULL;
while(p1->num!=0)
{n=n+1;
if(n==1)head=p1;
else p2->next=p1;
p2=p1;
p1=(struct Player*)malloc(struct Player);
scanf("%d, %s, %s, %d, %d, %d, %d, %d",&p1->num,&p1->name,&p1->team,&p1->three_point,&p1->rebound,&p1->dunk,&p1->steal,&p1->scores);
scanf("%d, %d, %d",&p1->Date.year,&p1->Date.month,&p1->Date.day);
}
p2->next=NULL;
return(head);
}
void CalculateMemberData(struct SummarySheet *sheet_head, struct SummarySheet *item) //定义一个函数统计队员总技术数据
{
struct SummarySheet *p, *pre;
p = sheet_head->next;
pre = sheet_head;
while(p)
{
if (strcmp(p->Player.name, item->Player.name) == 0 && strcmp(p->Player.team, item->Player.team) == 0)
{
p->Player.three_point += item->Player.three_point;
p->Player.rebound += item->Player.rebound;
p->Player.dunk += item->Player.dunk;
p->Player.steal += item->Player.steal;
p->Player.scores += item->Player.scores;
++p->match_nums;
free(item);
return;
}
pre = p;
p = p->next;
}
item->next = pre->next;
pre->next = item;
}
void PrintSheet(struct SummarySheet *head, const int num) //个人技术列表函数
{
struct SummarySheet *p = head, *q;
int i = 0;
printf("--------------------------------------------------------------------------\n");
printf("Name\tThree-Points\tRebound\tDunk\tSteal\tScores\tMatchs\n");
while(p)
{
if (num == 0)
printf("%s %d %d %d %d %d %d\n", p->Player.name, p->Player.three_point, p->Player.rebound, p->Player.dunk, p->Player.steal, p->Player.scores, p->match_nums);
else if (i < num)
{
printf("%s %d %d %d %d %d %d\n", p->Player.name, p->Player.three_point / p->match_nums, p->Player.backboards / p->match_nums, p->Player.dunks / p->match_nums, p->Player.steal / p->match_nums, p->Player.scores / p->match_nums, p->match_nums);
++i;
}
q = p;
p = p->next;
free(q);
}
printf("--------------------------------------------------------------------------\n");
}
void PrintSummarySheet() //输出汇总列表函数
{
struct SummarySheet *head = GenerateSummarySheet();
PrintSheet(head, 0);
}
void SortByThreePoints(struct SummarySheet *head)
{
struct SummarySheet *p = head, *q, *flag, *xx, *yy, *zz;
while(p->next)
{
flag = p;
q = p->next;
while(q->next)
{
if (flag->next->Player.three_point < q->next->Player.three_point)
flag = q;
q = q->next;
}
if (flag != p)
{
zz = flag->next;
flag->next = p->next;
p->next = zz;
xx = flag->next->next;
flag->next->next = p->next->next;
p->next->next = xx;
}
p = p->next;
}
}
void PrintFrontThreeNameOfThreePoints() //输出三分球前三的选手
{
struct SummarySheet head;
head.next = GenerateSummarySheet();
SortByThreePoints(&head);
PrintSheet(head.next, 3);
}
void SortByRebound(struct SummarySheet *head)
{
struct SummarySheet *p = head, *q, *flag, *xx, *yy, *zz;
while(p->next)
{
flag = p;
q = p->next;
while(q->next)
{
if (flag->next->Player.rebound < q->next->Player.rebound)
flag = q;
q = q->next;
}
if (flag != p)
{
zz = flag->next;
flag->next = p->next;
p->next = zz;
xx = flag->next->next;
flag->next->next = p->next->next;
p->next->next = xx;
}
p = p->next;
}
}
void PrintFrontThreeNameOfRebound() //输出篮板球前三的选手
{
struct SummarySheet head;
head.next = GenerateSummarySheet();
SortByRebound(&head);
PrintSheet(head.next, 3);
}
void SortByDunk(struct SummarySheet *head)
{
struct SummarySheet *p = head, *q, *flag, *xx, *yy, *zz;
while(p->next)
{
flag = p;
q = p->next;
while(q->next)
{
if (flag->next->Player.dunk < q->next->Player.dunk)
flag = q;
q = q->next;
}
if (flag != p)
{
zz = flag->next;
flag->next = p->next;
p->next = zz;
xx = flag->next->next;
flag->next->next = p->next->next;
p->next->next = xx;
}
p = p->next;
}
}
void PrintFrontThreeNameOfDunk() //输出扣篮总数前三的选手
{
struct SummarySheet head;
head.next = GenerateSummarySheet();
SortByDunk(&head);
PrintSheet(head.next, 3);
}
void SortBySteal(struct SummarySheet *head)
{
struct SummarySheet *p = head, *q, *flag, *xx, *yy, *zz;
while(p->next)
{
flag = p;
q = p->next;
while(q->next)
{
if (flag->next->Player.steal < q->next->Player.steal)
flag = q;
q = q->next;
}
if (flag != p)
{
zz = flag->next;
flag->next = p->next;
p->next = zz;
xx = flag->next->next;
flag->next->next = p->next->next;
p->next->next = xx;
}
p = p->next;
}
}
void PrintFrontThreeNameOfSteal() //输出抢断次数前三的选手
{
struct SummarySheet head;
head.next = GenerateSummarySheet();
SortBySteal(&head);
PrintSheet(head.next, 3);
}
void SortByScores(struct SummarySheet *head)
{
struct SummarySheet *p = head, *q, *flag, *xx, *yy, *zz;
while(p->next)
{
flag = p;
q = p->next;
while(q->next)
{
if (flag->next->Player.scores < q->next->Player.scores)
flag = q;
q = q->next;
}
if (flag != p)
{
zz = flag->next;
flag->next = p->next;
p->next = zz;
xx = flag->next->next;
flag->next->next = p->next->next;
p->next->next = xx;
}
p = p->next;
}
}
void PrintFrontThreeNameOfScores() //输出总分前三的选手函数
{
struct SummarySheet head;
head.next = GenerateSummarySheet();
SortByScores(&head);
PrintSheet(head.next, 3);
}
void PrintBestMembersOfTeam() //输出最好的选手函数
{
struct SummarySheet head;
head.next = GenerateSummarySheet();
SortByScores(&head);
struct SummarySheet *p = head.next, *q;
char team[NAME_MAX];
printf("Input Team's Name: ");
scanf("%s", team);
int i = 0;
printf("--------------------------------------------------------------------------\n");
printf("Name\tThree-Point\tRebound\tDunk\tSteal\tScores\tMatchs\n");
while(p)
{
if (strcmp(team, p->Player.team) == 0)
{
printf("%s %d %d %d %d %d %d\n", p->Player.name, p->Player.three_point, p->Player.rebound, p->Player.dunk, p->Player.steal, p->Player.scores, p->match_nums);
++i;
}
q = p;
p = p->next;
free(q);
}
printf("--------------------------------------------------------------------------\n");
if (!i)
printf("Team's name '%s' error or don't have this team!\n", team);
}
void Select(const int flag)
{
switch(flag)
{
case 1:
AddMatchFile();
break;
case 2:
PrintSummarySheet();
break;
case 3:
PrintFrontThreeNameOfThreePoint();
break;
case 4:
PrintFrontThreeNameOfRebound();
break;
case 5:
PrintFrontThreeNameOfDunk();
break;
case 6:
PrintFrontThreeNameOfSteal();
break;
case 7:
PrintFrontThreeNameOfScores();
break;
case 8:
PrintBestMembersOfTeam();
break;
default:
printf("Input Error! Please input again!\n");
break;
}
}
int main(int argc, const char *argv[])
{
int flag;
while(1)
{
printf("*********************************Begin*************************************\n");
printf("1---Add Compentition\n"
"2---Print Summary Sheet\n"
"3---Print Front Three Three-Point\n"
"4---Print Front Three Rebound\n"
"5---Print Front Three Dunk\n"
"6---Print Front Three Steal\n"
"7---Print Front Three Scores\n"
"8---Print Best Member Of Team\n"
"0---Exit\n");
printf("\nPlease input Num: ");
scanf("%d", &flag);
if (!flag)
{
printf("**********************************End**************************************\n\n\n");
printf("Exit!\n");
break;
}
else
Select(flag);
printf("**********************************End**************************************\n\n\n");
}
return 0;
}