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

来源:互联网 发布:上海大学乐乎登陆 编辑:程序博客网 时间:2024/04/26 06:36

#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);
}
//=============================================================================== 

原创粉丝点击