您的位置:首页 > 其它

我的C程序,学了两天,就让我弄这么一个几百行的程序,还没有做完,过两天放假继续写,感兴趣的可以看看哦

2007-07-01 22:53 507 查看
#include "stdio.h"
#include "stdlib.h"
#include "malloc.h"
#include "string.h"
//==============================================================================
//链表实现区1
struct Event
{
char eventName[15];
char eventDate[15];
};
//===============================================================================
//链表实现区2
struct Competior
{
int cID;
char name[20];
char sex[10];
char birthdate[20];
char team[10];
float score[5];
float netScore;
struct Competior *next;

};
static int n=0;
static int N=0;
static int read=0;//判断是否在此次打开系统时创建了数据
static int could=0;//判断是否可以查询
struct Competior *Head=NULL;//将链表表头指针记录

struct Competior* creatCompetiorData()
{
struct Competior*head;
struct Competior*p1,*p2;
p1=p2=(struct Competior*)malloc(sizeof(struct Competior));//开辟一个新空间
scanf("%d%s%s%s%s",&p1->cID,p1->name,p1->sex,p1->birthdate,p1->team);
read=1;
n=0;
head=NULL;
while(p1->cID!=0)
{
n+=1;
N+=1;
if(n==1)head=p1;
else
p2->next=p1;
p2=p1;
p1=(struct Competior*)malloc(sizeof(struct Competior));
scanf("%d%s%s%s%s",&p1->cID,p1->name,p1->sex,p1->birthdate,p1->team);
}
p2->next=NULL;
return(head);
}
//===============================================================================
//函数声明区
void welcome();
void welcomeToCompetiorData();
void welcomeToEventData();
void chooseEvent();
void thankyouTOhere();
void showCompetiorData(struct Competior*head);
void singleSeachData(struct Competior*head,int cid);
void allSeachData();
void saveCompetiorData();
void getScores();
void operatorScores(struct Competior*p);
void showRusult() ;//显示排序结果
void doSquence(); //进行排序
//===============================================================================
void main()//程序的入口
{
welcome();
}
//===============================================================================
//主界面函数
void welcome()
{
int a;
do{
printf("[ Copyright @ 2007 本人 Inc. All Rights reserved ]/n");
printf("/n");
printf("=========欢迎进入该系统=========/n");
printf("======= 1 /"运动员资料/" ======= /n======= 2 /"比赛资料/" ======= /n======= 3 /"关注赛事/" ======= /n");
printf("================================/n");
printf("Please choose the item:");
scanf("%d",&a);
switch(a)
{
case 1:welcomeToCompetiorData();break;
case 2: welcomeToEventData();break;
case 3: chooseEvent();break;
default:printf("输入错误! 请从新输入!/n");break;
}
}while(a<1||a>3);
}
//===============================================================================
//////////////////////////////////////////////////////////////////////////////////
//处理运动员资料的函数群
void welcomeToCompetiorData()//进入"运动员资料"界面函数
{
int aa;
int go=1;
struct Competior *pr;
do{
printf("==========(运动员资料)==========/n");
printf("======= ====/n");
printf("======= * 1/"创建运动员资料/" ==== /n======= * 2/"查询运动员资料/" ==== /n======= * 3/"修改运动员资料/" ==== /n");
printf("======= * 4/"删除运动员资料/" ==== /n======= * 0/"返回上级/" ==== /n");
printf("======= ====/n");
printf("================================/n");
printf("Please choose the item:");
scanf("%d",&aa);
switch(aa)
{
case 1://创建运动员资料
{
printf("该操作创建运动员的原始资料/n");
printf("操作说明:处理cID是int型外,其它都是字符或字符串数组!创建cID不能重复!!/n规定停止创建的规则是:创建一组cId值为0的数据即可跳出创建/n输入格式如下:/ncID name sex birthdate team/n");
do{
pr= creatCompetiorData();
Head=pr;
if(go==1)
{showCompetiorData(pr);

}
printf("======= * 1 继续创建 ======/n======= * 0 停止创建并返回 ======/n");
scanf("%d",&go);
if(go!=0&&go!=1)
{
printf("请按提示输入!/n对次操作,系统默认返回/n");
go=0;
}
if(go==0)
welcomeToCompetiorData();

}while(go!=0);
break;
}
case 2: //查询运动员资料
{
if(N==1)//第一次创建资料,将以前数据覆盖掉
{
FILE*fp;
if((fp=fopen("competior.txt","w+"))==NULL)
{
printf("Cannot open file/n");
return;
}
fclose(fp);
}/**/
if(read==1&&could==1)
allSeachData();
else
{
printf("Error!There are no data in the opened-file!/nYou must create 10 values before you seach!/n");
welcomeToCompetiorData();
}
break;
}
case 3: //修改运动员资料
{
printf("sha b");
break;
}
case 4://修改运动员资料
printf("未做下级");break;
case 0:
welcome();break;
default:printf("你的输出格式不对,请按照提示操作!/n");break;
}
}while(aa<0||aa>4);
}

void showCompetiorData(struct Competior*head)//
{
struct Competior*p;
struct Competior*p0;
FILE*fp;//定义指向文件的指针

printf("你已经创建了%d 个数据/n此次创建%d个数据如下:/n",N,n);//算个数
printf("cID name sex birthdate team/n");
p=head;
if(head!=NULL)
do
{
if((fp=fopen("competior.txt","ab"))==NULL)
{
printf("Cannot open file/n");
return;
}
p0=p;
if(fwrite(p0,sizeof(struct Competior),1,fp)!=1) //将数据保存到文件
printf("file write error/n");
fclose(fp);
printf("%-d %-s %-s %-s %-s/n",p->cID,p->name,p->sex,p->birthdate,p->team);
p=p->next;
}while(p!=NULL);
printf("恭喜您!创建成功!/n提示:你还有需要建%d个数据/n",10-N);
if(N==10)
{
printf("按照规则,每组只能有10个人参加比赛,你已经创建完毕/n请输入0返回!/n");
could=1;
}
}

void singleSeachData(struct Competior*head,int cid)//用于单个查询
{
struct Competior*p;
p=head;
if(head!=NULL)
do
{
p=p->next;
}while(p!=NULL || p->cID==cid);
printf("%-d %-s %-s %-s %-s/n",p->cID,p->name,p->sex,p->birthdate,p->team);
}

void allSeachData()//用于查询所有数据
{int i=0;
struct Competior p0[10];
FILE*fp;
fp=fopen("competior.txt","rb");
printf("%5s %10s %10s %10s %10s/n","cID","name","sex","birthdate","team");
for(i=0;i<10;i++)
{
fread(&p0[i],sizeof(struct Competior),1,fp);
printf("%5d %10s %10s %10s %10s/n",p0[i].cID,p0[i].name,p0[i].sex,p0[i].birthdate,p0[i].team);
}
fclose(fp);
printf("所有数据输出完毕!/n");

}

void saveCompetiorData()//写入.txt文件
{

}
//===============================================================================
//////////////////////////////////////////////////////////////////////////////////////
//比赛资料处理函数群
void welcomeToEventData()
{
int aaa;
do
{
printf("==========(赛事资料)==========/n");
printf("======= ======/n");
printf("======= * 1/"创建赛事资料/" ====== /n======= * 2/"查询赛事资料/" ====== /n======= * 3/"修改赛事资料/" ====== /n");
printf("======= * 4/"删除赛事资料/" ====== /n======= * 0/"返回上级/" ====== /n");
printf("======= ======/n");
printf("================================/n");
printf("Please choose the item:");
scanf("%d",&aaa);
switch(aaa)
{
case 1:
{printf("未做下级");break;}
case 2: {printf("sha b");break;}
case 3: {printf("sha b");break;}
case 4:printf("未做下级");break;
case 0:welcome();break;
default:{printf("输入错误! 请从新输入!/n");break;}
}
}while(aaa<0||aaa>4);
}
void creatEventData()//创建赛事资料
{

}
void changeEventData()//修改赛事资料
{

}
void removeEventData()//删除赛事资料
{

}
void showEventData()//显示所有赛事资料
{

}
//===============================================================================
//处理分数函数群
void thankyouTOhere()
{
int aaaa;
do
{
printf("======= ======/n");
printf("======= * 1/"评分细则/" ====== /n======= * 2/"裁判评分/" ====== /n======= * 3/"查看评分/" ====== /n");
printf("======= * 4/"返回顶级/" ====== /n======= * 0/"返回上级/" ====== /n");
printf("======= ======/n");
printf("================================/n");
printf("Please choose the item:");
scanf("%d",&aaaa);
switch(aaaa)
{
case 1:{printf("*评分规则:/n*去掉一个最高分和一个最低分后,分数之和的平均即为全手的成绩!/n");break;}
case 2: {getScores();break;}
case 3: {printf("sha b");break;}
case 4:printf("未做下级");break;
case 5:welcome();break;
case 0:chooseEvent();break;
default:{printf("输入错误! 请从新输入!/n");break;}
}
}while(aaaa<0||aaaa>4);
}
void getScores()//取得裁判分数
{
struct Competior *p;
struct Competior *p0;
printf("全手cID和name一览表:/n%-5s%-10s/n","cID","Name");//全手cID和name一览表,提示使用者对运动员的基本情况的了解,以便根据cID相应给分
p0=Head;
do
{
printf("%-5d%-10s/n",p0->cID,p0->name);
p0=p0->next;
}while(p0!=NULL);
printf(" score1 score2 score3 score4 score5/n");
p=Head;
while(p!=NULL)
{
printf("cID: %d name: %s five scores:",p->cID,p->name);
scanf("%f%f%f%f%f/n",&p->score[0],&p->score[1],&p->score[2],&p->score[3],&p->score[4]);
operatorScores(p);
p=p->next;
}
doSquence();
}
void showRusult() //显示排序结果
{
printf("冠军是:%10s总分是:%-3.2f/n",Head->name,Head->netScore);
printf("亚军是:%10s总分是:%-3.2f/n",Head->next->name,Head->next->netScore);
printf("季军是:%10s总分是:%-3.2f/n",Head->next->next->name,Head->next->next->netScore);
}
void doSquence() //进行排序
{
int i=0;
struct Competior *p,*p0,*p1,*p2;
p0=p=Head;
do
{
if(p->netScore < p->next->netScore)
{//链表中结点的交换
p1=p;
p2=p->next;
p1->next=p2->next;
p2->next=p0->next;
p0->next=p2;
}
p=p->next;
}while(p!=NULL);
showRusult();
}
//-----------------------------------------------------------------------------------
void operatorScores(struct Competior *p0) //处理每个运动员的成绩,计算平均分
{
int k=0;
float Sum=0;
float Max;//用于比较用
float Min;
Max=Min=p0->score[0];
for(k=0;k<5;k++)
{
Sum+=p0->score[k];
if(Max<p0->score[k])
Max=p0->score[k];
if(Min>p0->score[k])
Min=p0->score[k];
}
p0->netScore=(Sum-Max-Min)/3;
}

//-----------------------------------------------------------------------------------
void showRule()
{

}
void chooseEvent()
{
int b;
do{
printf("==========(选择关注项目)==========/n");
printf("======= * 1 体操(gymnastics)/n");
printf("======= * 2 跳水(diving)/n");
printf("======= * 3 花样滑冰(skating)/n");
printf("======= * 0 返回上级(skating)/n");
printf("Please choose the item:");
scanf("%d",&b);
switch(b)
{
case 1:{printf("==============(体操)============/n");thankyouTOhere();break;}
case 2: {printf("==============(跳水)============/n");thankyouTOhere();break;}
case 3: {printf("===========(花样滑冰)===========/n");thankyouTOhere();break;}
case 0: welcome();break;
default:{printf("输入错误! 请从新输入!/n");break;}
}
}while(b<0||b>3);
}
//===============================================================================
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐