运动会积分系统C语言.docx
《运动会积分系统C语言.docx》由会员分享,可在线阅读,更多相关《运动会积分系统C语言.docx(30页珍藏版)》请在冰豆网上搜索。
运动会积分系统C语言
程序设计报告
(2014/2015学年第2学期)
题目:
运动会积分系统
专业
组长学号姓名
组员学号姓名
指导教师
指导单位
日期
成员分工
组长()
组员()
组员()
评分细则
评分项
优秀
良好
中等
差
遵守机房规章制度
上机时的表现
学习态度
程序准备情况
程序设计能力
团队合作精神
课题功能实现情况
算法设计合理性
用户界面设计
报告书写认真程度
内容详实程度
文字表达熟练程度
回答问题准确度
简短评语
教师签名:
年月日
评分等级
查柯丞
贾世恩
备注
评分等级共五种:
优秀、良好、中等、及格、不及格
运动会积分系统
一、课题内容和要求
学生运动会成绩数据库系统记录某校运动会上全部运动项目,各系获得的分数及排名的情况,包括50、100、200,400,1500米,跳高,跳远,标枪,铅球铁饼等。
请设计一个积分系统,方便学校对比赛成绩进行统计管理。
二、需求分析
运动会积分系统的功能框架图如图1所示。
图1功能框架图
管理员:
1)以管理员身份登录,预先设定参加运动会的系院数目,男子项目数女子项目数,(每项目取前三名,分别为10,5,2分)
2)管理员凭密码进入录入成绩状态,填写比赛结果,输入各项目获奖运动员的信息,但录入完成后不得修改成绩。
可以按各系院编号输出总分;按总分排序;按男团体总分排序;按系院编号查询;按项目编号查询;按女团体总分排序。
3)审核各院系提交的复核申请,予以批准后修改成绩。
普通用户:
1)普通用户可以查询各个比赛成绩,生成团体总分报表,查看参赛院系的成绩和各比赛项目最终名次等。
2)允许提交复核申请,提请管理员修改成绩。
三、概要设计
1主要结构体
typedefstructnode1{
intschool;/*院系编号*/
intrecord;/*项目成绩*/
structnode1*next;/*链域*/
}Schools;
typedefstruct{
intitem;/*项目编号*/
Schools*firstschool;/*链域指向链表中第一个结点*/
}ITEM;
typedefstruct{
intz;/*项目总数*/
ITEMa[MAX];
}ALLitems;
typedefstructnode2{
intitem;/*该院系获奖的项目*/
intrecord;/*项目成绩*/
structnode2*next;/*链域*/
}Items;
typedefstruct{
intschool;/*院系编号*/
intscore;/*院系总分*/
intboys;/*男团体总分*/
intgirls;/*女团体总分*/
Items*firstitem;/*链域指向链表中第一个获奖项目的结点*/
}SCHNode;
typedefstruct{
intn;/*院系总数*/
SCHNodeb[MAX];
}ALLNode;
ALLitems*g1;
ALLNode*g2;
2主要函数流程图
图2登录函数
图3主函数流程
四、源程序代码
#include
#include
#include
#include
//#include/*屏幕操作函数*/
#defineMAX50
//#defineNULL0
structuser
{
charuser_Name[6];
charuser_Pass[6];
}stu[1]={"admin","admin"};//初始化用户名和对应密码
voidprint_Passwd(void)
{
inti=0;//当前账号标记
intflag1=0;//登录成功标记
intflag=0;//密码正确标记
charp[6];//临时用户名
chars[6];//临时密码
charnum=0;//密码次数
chartemp;//登录后改密码
printf("请输入登录名:
\n");
scanf("%s",p);
if(strcmp(stu[i].user_Name,p)==0)
{
flag=1;
}
if(1==flag)
{
printf("请输入密码:
\n");
scanf("%s",s);
}
else
{
printf("没有此用户:
\n");
exit(0);
}
while(strcmp(stu[i].user_Pass,s)!
=0)
{
printf("密码错误!
\n");
printf("请重新输入密码:
\n");
scanf("%s",s);
}
printf("登录成功!
\n");
printf("注:
你是管理员!
\n");
}
typedefstructnode1{
intschool;/*院系编号*/
intrecord;/*项目成绩*/
structnode1*next;/*链域*/
}Schools;
typedefstruct{
intitem;/*项目编号*/
Schools*firstschool;/*链域指向链表中第一个结点*/
}ITEM;
typedefstruct{
intz;/*项目总数*/
ITEMa[MAX];
}ALLitems;
typedefstructnode2{
intitem;/*该院系获奖的项目*/
intrecord;/*项目成绩*/
structnode2*next;/*链域*/
}Items;
typedefstruct{
intschool;/*院系编号*/
intscore;/*院系总分*/
intboys;/*男团体总分*/
intgirls;/*女团体总分*/
Items*firstitem;/*链域指向链表中第一个获奖项目的结点*/
}SCHNode;
typedefstruct{
intn;/*院系总数*/
SCHNodeb[MAX];
}ALLNode;
ALLitems*g1;
ALLNode*g2;
voidfunct1(ALLitems*g1,ALLNode*g2)
{
Schools*p1;
Items*p2;
inti=1,j,k,m,w,h,x;
p1=(Schools*)malloc(sizeof(Schools));
p2=(Items*)malloc(sizeof(Items));
if(!
p1||!
p2)
exit
(1);
printf("\n******输入各个项目信息******\n\n");
printf("输入男子项目总数m:
");
scanf("%d",&m);
if(m<0||m>20)
{
printf("输入有误,m是20以内的整数,请重新输入:
");
scanf("%d",&m);
}
printf("输入女子项目总数w:
");
scanf("%d",&w);
if(w<0||w>20)
{
printf("输入有误,w是20以内的整数,请重新输入:
");
scanf("%d",&w);
}
printf("输入参加运动会的院系总数n:
");
scanf("%d",&g2->n);
if(g2->n<0||g2->n>20)
{
printf("输入有误,n是20以内的整数,请重新输入:
");
scanf("%d",&g2->n);
}
g1->z=m+w;
printf("则项目编号为男子1-%d,女子%d-%d",m,m+1,g1->z);
printf("\n\n****记录运动会成绩****");
printf("\n\n(输入0标志结束)\n");
printf("\t项目1:
50米、项目2:
100米、项目3:
200米、项目4:
400米、项目5:
1500米、\n");
printf("\t项目6:
跳高、项目7:
跳远、项目8:
标枪、项目9:
铅球、项目10:
铁饼\n");
for(k=1;k<=g1->z;k++)
{
g1->a[k].item=k;
g1->a[k].firstschool=NULL;
}
for(k=1;k<=g2->n;k++)
{
g2->b[k].school=k;
g2->b[k].firstitem=0;
g2->b[k].score=0;
g2->b[k].boys=0;
g2->b[k].girls=0;
}
g2->b[0].score=0;
g2->b[0].boys=0;
g2->b[0].girls=0;
while(i!
=0)
{
printf("\n项目:
");
scanf("%d",&i);
if(i!
=0)
{
printf("请输入前三名:
\n");
h=3;
do{
printf("第%d名:
院系(院系编号为数字)",h);
scanf("%d",&x);
p1=(Schools*)malloc(sizeof(Schools));
p1->school=x;
p2=(Items*)malloc(sizeof(Items));
p2->item=i;
if(h==3)p2->record=p1->record=2;
if(h==2)p2->record=p1->record=5;
if(h==1)p2->record=p1->record=10;
p1->next=g1->a[i].firstschool;
g1->a[i].firstschool=p1;
p2->next=g2->b[x].firstitem;
g2->b[x].firstitem=p2;
g2->b[x].score=g2->b[x].score+p2->record;/*累计总分*/
if(i<=m)g2->b[x].boys=g2->b[x].boys+p2->record;/*累计男团体总分*/
elseg2->b[x].girls=g2->b[x].girls+p2->record;/*累计女团体总分*/
h--;
}while(x!
=0&&h!
=0);
}
}
}
voidsave()
{
FILE*fp1,*fp2;
fp1=(FILE*)malloc(sizeof(FILE));
fp2=(FILE*)malloc(sizeof(FILE));
if((fp1=fopen("sports1","wb"))==NULL)
{
printf("cannotopenfile.\n");
return;
}
if(fwrite(g1,sizeof(ALLitems),1,fp1)!
=1)
printf("filewriteerror.\n");
fclose(fp1);
if((fp2=fopen("sports2","wb"))==NULL)
{
printf("cannotopenfile.\n");
return;
}
if(fwrite(g2,sizeof(ALLNode),1,fp2)!
=1)
printf("filewriteerror.\n");
fclose(fp2);
}
voidfunct2(ALLNode*g2)/*输出各院系总分*/
{
intk;
printf("\n\n******输出各院系总分******\n");
printf("院系编号\t总分\n");
for(k=1;k<=g2->n;k++)
printf("%d\t\t\t%d\n",k,g2->b[k].score);
printf("\n");
system("pause");
printf("按任意键返回主菜单......");
getchar();
}
voidfunct3(ALLNode*g2)/*按院系编号排序输出*/
{
intk;
Items*p2;
p2=(Items*)malloc(sizeof(Items));
printf("\n\n******按院系编号排序输出******\n");
printf("院系编号\t\t\t获奖情况\n");
scanf("%d",&k);
for(k=1;k<=g2->n;k++)
{
printf("\t\t\t%d\t",k);
p2=g2->b[k].firstitem;
while(p2!
=NULL)
{
printf("\t\t项目%d:
得%d分",p2->item,p2->record);
p2=p2->next;
}
printf("\n");
}
printf("\n");
system("pause");
printf("按任意键返回主菜单......");
getchar();
}
voidfunct4(ALLNode*g2)/*按院系总分排序输出*/
{
inti,j,k;
Items*p2;
printf("\n\n******按院系总分排序输出******\n");
printf("院系编号\t\t总分\n");
scanf("%d",&k);
//printf("输入要查询的项目编号:
");
for(i=2;i<=g2->n;i++)
{
printf("%d\t",k);
p2=g2->b[k].firstitem;
while(p2!
=NULL)
{
printf("%d\t\t%d\n",g2->b[k].school,g2->b[k].score);
p2=p2->next;
}
printf("\n");
g2->b[0].score=g2->b[i].score;
g2->b[0].boys=g2->b[i].boys;
g2->b[0].girls=g2->b[i].girls;
g2->b[0].school=g2->b[i].school;
j=i-1;
while(g2->b[0].scoreb[j].score&&j>0)
{
g2->b[j+1].score=g2->b[j].score;
g2->b[j+1].boys=g2->b[j].boys;
g2->b[j+1].girls=g2->b[j].girls;
g2->b[j+1].school=g2->b[j].school;
j--;
}
g2->b[j+1].score=g2->b[0].score;
g2->b[j+1].boys=g2->b[0].boys;
g2->b[j+1].girls=g2->b[0].girls;
g2->b[j+1].school=g2->b[0].school;
}
for(k=1;k<=g2->n;k++)
printf("%d\t\t%d\n",g2->b[k].school,g2->b[k].score);
system("pause");
printf("按任意键返回主菜单......");
getchar();
}
voidfunct5(ALLNode*g2)/*按男团体总分排序输出*/
{
inti,j,k;
Items*p2;
p2=(Items*)malloc(sizeof(Items));
printf("\n\n******按男团体总分排序输出******\n");
printf("院系编号\t\t男团体总分\n");
scanf("%d",&k);
//printf("输入要查询的院系编号:
");
for(i=2;i<=g2->n;i++)
{
printf("%d\t",k);
p2=g2->b[k].firstitem;
while(p2!
=NULL)
{
printf("%d\t\t%d\n",g2->b[k].school,g2->b[k].boys);
p2=p2->next;
}
printf("\n");
g2->b[0].score=g2->b[i].score;
g2->b[0].boys=g2->b[i].boys;
g2->b[0].girls=g2->b[i].girls;
g2->b[0].school=g2->b[i].school;
j=i-1;
while(g2->b[0].boysb[j].boys&&j>0)
{
g2->b[j+1].score=g2->b[j].score;
g2->b[j+1].boys=g2->b[j].boys;
g2->b[j+1].girls=g2->b[j].girls;
g2->b[j+1].school=g2->b[j].school;
j--;
}
g2->b[j+1].score=g2->b[0].score;
g2->b[j+1].boys=g2->b[0].boys;
g2->b[j+1].girls=g2->b[0].girls;
g2->b[j+1].school=g2->b[0].school;
}
for(k=1;k<=g2->n;k++)
printf("%d\t\t%d\n",g2->b[k].school,g2->b[k].boys);
system("pause");//暂停等待
printf("按任意键返回主菜单......");
getchar();
}
voidfunct6(ALLNode*g2)/*按女团体总分排序输出*/
{
inti,j,k;
Items*p2;
p2=(Items*)malloc(sizeof(Items));
printf("\n\n******按女团体总分排序输出******\n");
printf("院系编号\t\t女团体总分\n");
scanf("%d",&k);
//printf("输入要查询的项目编号:
");
for(i=2;i<=g2->n;i++)
{
printf("%d\t",k);
p2=g2->b[k].firstitem;
while(p2!
=NULL)
{
printf("%d\t\t%d\n",g2->b[k].school,g2->b[k].girls);
p2=p2->next;
}
printf("\n");
g2->b[0].score=g2->b[i].score;
g2->b[0].boys=g2->b[i].boys;
g2->b[0].girls=g2->b[i].girls;
g2->b[0].school=g2->b[i].school;
j=i-1;
while(g2->b[0].girlsb[j].girls&&j>0)
{
g2->b[j+1].score=g2->b[j].score;
g2->b[j+1].boys=g2->b[j].boys;
g2->b[j+1].girls=g2->b[j].girls;
g2->b[j+1].school=g2->b[j].school;
j--;
}
g2->b[j+1].score=g2->b[0].score;
g2->b[j+1].boys=g2->b[0].boys;
g2->b[j+1].girls=g2->b[0].girls;
g2->b[j+1].school=g2->b[0].school;
}
for(k=1;k<=g2->n;k++)
printf("%d\t\t%d\n",g2->b[k].school,g2->b[k].girls);
system("pause");
printf("按任意键返回主菜单......");
getchar();
}
voidfunct7(ALLNode*g2)/*按院系编号查询院系某个项目情况*/
{
inti,j;
It