加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

学校运动会管理系统(难度系数:中)

(2013-08-30 10:59:27)
标签:

学校运动会管理系统(

it


5、学校运动会管理系统(难度系数:中) 

  功能要求: 

     (1)  初始化输入:N-参赛院系总数,M-男子竞赛项目数,W-女子竞赛项目数; 

即要求输入一些基础数据,如院系名称,每个院系参赛选手及选手编号。竞赛项 

 目名称与代号。这些数据存储在文本文件中,不需要每次都单条录入。 

     (2)  各项目名次取法有如下几种: 

     取前4 名:第1 名得分6,第2 名得分4,第3 名得分2,第4 名得分1; 

----------------------- Page 9-----------------------

    (3) 由程序提醒用户填写比赛结果,输入各项目获奖运动员的信息。 

    (4)  所有信息记录完毕后,用户可以查询各个院系或个人的比赛成绩,生成 

团体总分报表,查看参赛院系信息、获奖运动员、比赛项目信息等。



注:这段程序是有人需要,然后让我只剩下几个小时就要上交,然后给了我一个不知道哪里来的版本(原本代码不可运行)我就在有限的时间内帮忙写了下注释,然后实现了4个功能,还有两个功能没有实现,即题目的(1)和从文件读取信息,有需要的朋友自己copy下,改一改剩下的两个功能


<-------------------------------------------------------我是华丽丽的分割线-------------------------------------------->

#include
#include
#include
#define LEN sizeof(STUDENT) //定义STUDENT所占内存空间大小的全局变量

//声明一个 STUDENT 学生的结构体,这个结构体包含学生的各个属性,如得分、姓名、成绩总和等
typedef struct stu
{
int score;
int sum;
char name[5];
char colname[6];
char proname[6];
char stunum[3];
char pronum[3];
struct stu *NEXT;
}STUDENT;

STUDENT *head,New;//定义指针变量STUDENT
STUDENT *current;//定义当前指针变量Student

//初始化,程序开始时调用
STUDENT *Init()
{
return NULL;
}

//进入菜单,让用户进行输入,根据输入的值执行不同的功能
int MENU()
{
int v;
printf("1. 输入运动员成绩\n");
printf("2. 查询\n");
printf("3. 保存\n");
printf("4. 读取\n");
printf("5. 退出\n");
do
{
printf("输入你的选择:");
fflush(stdin);
scanf("%d",&v); //将输入的值保持到变量v中,
}while(v<1||v>5);//do while:如果输入的值v小于1大于5,则让用户重新输入
return(v); //输入符合要求 返回v的值
}


STUDENT *ADD()//添加新的记录
{
int i; //
STUDENT *next=NULL,*p;
p=(STUDENT *)malloc(LEN); //申请分配STUDENT长度的内存空间,并强制转换成STUDENT类型,让指针p指向刚刚申请的内存空间
if(!p) //如果内存不够,则输出error
{
printf("错误!\n");
return(head); //将指向空的STUDENT指针head返回
}
printf("输入学院名称:"); //输入信息
scanf("%s",p->colname);
printf("输入选手姓名:");
scanf("%s",p->name);
printf("输入选手编号:");
scanf("%s",p->stunum);
printf("输入项目名称:");
scanf("%s",p->proname);
printf("输入项目代号:");
scanf("%s",p->pronum);
printf("输入选手得分:");
do
{
scanf("%d",&i); //将输入的值保持到变量v中,
if(i<0||i>=6){
printf("输入错误!\n");
}
}while(i<0||i>=6);//输入该选手的得分,如果值大于0、小于6,则符合条件,跳出循环
p->score=i; //将成绩赋给p
p->sum=p->score; //设置总分,即score
if(head!=NULL){ //如果head为null,则说明添加的是第一条数据
current->NEXT=p; //head不为null的情况,让当前的指针current的下一个指向新产生的p
current=p; //当前的指针current向下移一位,指向最新的p
if(head->NEXT==NULL){ //如果head的Next,即下一个指针为null,
head->NEXT=current; //则让heade的Next指向当前的指针,形成链
}
current->NEXT=NULL;
}else{ //head为null的情况下
head=p; //将最新生成的p赋给head,head即为链头
current=head; //当前指针指向head
current->NEXT=NULL;
}
return(head);
}

void SEARCH(STUDENT *head) //用户可以查询各个院系或个人的比赛成绩
{
STUDENT *p; //定义STUDENT的指针P
char s[5];
printf("请输入姓名查找:\n");
scanf("%s",s); //输入要查询的用户名
p=head; //让指针p指向头指针head
while(p!=NULL&&strcmp(p->name,s)) //比较当前指针p指向的学生和输入查询的学生名称是否一样,如果一样,则返回值为0,即false,则跳出循环
{
p=p->NEXT; //当前指针p指向p所指向的下一个Student
}
if(p!=NULL) //如果p不为空,即存在该学生,则输出该学生的信息
{
printf("| colname | name | stunum | proname | pronum | score | sum |\n");
printf("| %4s | %4s | %4s | %4s | %4s | M | M |\n",
p->colname,p->name,p->stunum,p->proname,p->pronum,p->score,p->sum);
}else{//否则输出该学生不存在
printf("该学生不存在\n\n");
}
}
void SAVE(STUDENT *head)
{
FILE *fp1; //定义文件指针
STUDENT *p; //定义学生Student指针变量p
printf("保存...\n");
fp1=fopen("C:\\studentInfo.ch","w"); //将文件保存到c盘目录下 新建一个文件,拥有往这个文件写的权限
p=head; //让指针p指向head指针,即链表的第一条数据
while(p!= NULL) //如果指针不为空,则循环
{
//往fp1文件内将p写入到文件fp1中
fprintf(fp1,"| %4s | %4s | %4s | %4s | %4s | M | M |\n",p->colname,p->name,p->stunum,p->proname,p->pronum,p->score,p->sum);
p=p->NEXT; //让当前指针指向下一个指针
}
printf("保存成功!\n");
 fprintf(fp1,"abc");
fclose(fp1); //关闭这个文件
}

STUDENT *READ()
{
STUDENT *p1,*p2,*head=NULL;
FILE *fp;
char infile[10];
printf("导入文件:");
scanf("%s",infile);
printf("Reading...\n");
p1=(STUDENT *)malloc(LEN);
if(!p1)
{
printf("Error!\n");
return(head);
}
head=p1;
while(!feof(fp))
{
if(fread(p1,LEN,1,fp)!=1)
break;
p1->NEXT=(STUDENT *)malloc(LEN);
if(!p1->NEXT)
{
printf("Error!\n");
return(head);
}
p2=p1;
p1=p1->NEXT;
}
p2->NEXT=NULL;
fclose(fp);
printf("Successfully!");
return (head);
}

int main()//主函数
{
head=Init(); //初始化,为STUDENT类型的指针变量初始化值
for(;;) //通过循环让用户选择操作
{
switch(MENU()) //调用MENU()函数,让用户选择要执行什么操作,通过返回的值,switch执行不同的方法
{
case 1:head=ADD();//当MENU()函数返回值为1的时候,则调用 输入运动员成绩的方法
break;
case 2:SEARCH(head);//当MENU()函数返回值为2的时候,则调用 查询的方法
break;
case 3:SAVE(head);//当MENU()函数返回值为3的时候,则调用 保存的方法
break;
case 4:head=READ();//当MENU()函数返回值为4的时候,则调用 读取数据的方法
break;
case 5:exit(0);//当MENU()函数返回值为0的时候,则退出,退出后不再循环
}
}
return 0;
}

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有