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

Ambralle 2012-08-30 06:55:01
/*篮球赛个人技术统计系统
设某篮球联赛要统计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;
}
...全文
300 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
「已注销」 2012-09-07
  • 打赏
  • 举报
回复
记住,struct Player 相当于 int,后边应该紧跟变量的,Player不是变量名,struct Player整体是数据类型的一部分。下边红色的地方,和所有调用为"p->Player."的地方改好了程序就能运行了。

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个选手数据
「已注销」 2012-09-07
  • 打赏
  • 举报
回复
帮你改好了,把缺的函数不上就应该可以运行了。
1.缺少3个函数
void AddMatchFile();
void PrintFrontThreeNameOfThreePoint();
struct SummarySheet *GenerateSummarySheet();
2.结构体使用错误
结构体作为成员被调用时一定声明为结构体变量,比如 struct Player *player;
然后调用时为 p->player->bound;等等,而不能 p->struct Player.bound;这是绝对不允许的。
你的程序最大的问题就是结构体定义与调用问题。


#include<stdio.h>
#include<stdlib.h>
#include<string.h>

#define NAME_MAX 15
#define SIZE 20
#define LEN sizeof(struct Player)

void AddMatchFile();
void PrintFrontThreeNameOfThreePoint();
struct SummarySheet *GenerateSummarySheet();

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 *date;
struct Player *next;
} people[SIZE]; //定义全局结构体数组Player,包含20个选手数据

struct SummarySheet
{
struct Player *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->date->year),&(p1->date->month),&(p1->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(sizeof(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->rebound / p->match_nums, p->player->dunk / 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;
}
Mr_defy_L 2012-09-06
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 的回复:]
第一个错误提示,是应为你输入的是全角的.号,切换输入法
[/Quote]

全角能输出.吗,全角的是。
pangmkin 2012-09-06
  • 打赏
  • 举报
回复
这是小驴子吗?乃巾帼不让须眉啊。我叹!何时我做到这一半啊
chenzhichao2008 2012-09-02
  • 打赏
  • 举报
回复
看到小女子,心不软了!!!
jobe1013 2012-09-01
  • 打赏
  • 举报
回复
第一个错误提示,是应为你输入的是全角的.号,切换输入法
jobe1013 2012-09-01
  • 打赏
  • 举报
回复
第一个错误提示,是应为你输入的是全角的.号,切换输入法
Ambralle 2012-08-30
  • 打赏
  • 举报
回复
:\c语言大作业题目\Zwl.cpp(65) : error C2059: syntax error : '.'
F:\c语言大作业题目\Zwl.cpp(66) : error C2039: 'head' : is not a member of 'Player'
F:\c语言大作业题目\Zwl.cpp(22) : see declaration of 'Player'
F:\c语言大作业题目\Zwl.cpp(67) : error C2039: 'p1' : is not a member of 'Player'
F:\c语言大作业题目\Zwl.cpp(22) : see declaration of 'Player'
F:\c语言大作业题目\Zwl.cpp(67) : fatal error C1903: unable to recover from previous error(s); stopping compilation
Error executing cl.exe.
这个是提示的错误,说指针head,p1,p2不是struct的成员,可是这一段程序是从书上copy下来的,小女子初学者,很不懂啊,望大家多多指教···

33,007

社区成员

发帖
与我相关
我的任务
社区描述
数据结构与算法相关内容讨论专区
社区管理员
  • 数据结构与算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧