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

这是一个使用C语言编写的简单Java校运动会管理系统。系统包括输入运动员成绩、查询、保存和读取数据等功能。用户可以选择不同操作,如添加新的比赛记录、按姓名查询成绩,以及保存和读取比赛信息到文件。
摘要由CSDN通过智能技术生成

#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;

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值