首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件架构设计 >

各位C语言高手们,小女子在做一个短学期课程结业设计,帮忙看一下这个程序的异常

2013-03-27 
各位C语言高手们,小女子在做一个短学期课程结业设计,帮忙看一下这个程序的错误/*篮球赛个人技术统计系统设

各位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 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个选手数据

热点排行