C语言实现魔方比赛管理系统

本文实例为大家分享了C语言实现魔方比赛管理系统的具体代码,供大家参考,具体内容如下

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define AVAILABLE 0
#define UNAVAILABLE 1
#define MAXNAME 30
#define CLEAR "cls"
 
typedef struct match{
    char *name;
    int id;
    int count;
    int status;
    struct match *next;
}Match;
 
void welcome();
void error(char *);        
char land();               
int player();           
int usrmanager();            
int viewmatch();           
int addmatch();               
int modmatch();              
int delmatch();                
void printmatch(Match *);      
Match *lookup(char *, int);    
int joinmatch();             
int finishmatch();            
 
Match *head = NULL;
int nmatch = 0;
 
//主函数
 
int main(){
    
    welcome();
    return 0;
}
 
void welcome(){
    printf("*************************欢迎使用魔方比赛管理系统*************************\n");
    while(1){
        printf("-------------------------------------\n");
        printf("请输入项目前编号执行相关操作:\n");
        printf("\n[1] 管理员入口\n\n[2] 选手入口\n\n[0] 退出\n\n");
        switch(land()){
            case '1':
                while(1){
                    if(usrmanager()){
                        continue;
                    }else{
                        break;
                    }
                 }
                break;
            case '2':
                while(1){
                    if(player()){
                        continue;
                    }else{
                        break;
                    }
                }
                break;
            case '0':
                exit(0);
            default:
                error("采集项目参数失败");
        }
    }
}
char land(){
    char c, flag;
    int i;
    while(1){
        for(i = 0; (c = getchar()) != '\n'; flag = c, ++i)
            ;
        if(i == 1){
            if(flag == '1' || flag == '2' || flag == '0'){
                return flag;
            }
        }else if(i == 0){
            continue;
        }
        error("[请输入命令: 1 / 2 / 0 选择项目]");
    }
    return '\0';
}
void error(char *s){
    fprintf(stderr, "%s\n", s);
}
char dostudent(){
    char c, flag;
    int i;
    while(1){
        for(i = 0; (c = getchar()) != '\n'; flag = c, ++i )
            ;
        if(i == 1){
            if(flag == '1' || flag == '2' || flag == '3' || flag == '0'){
                return flag;
            }
        }else if(i == 0){
            continue;
        }
        error("[请输入命令: 1 / 2 / 3/ 0 选择项目]");
    }
}
int player(){
    printf("-------------------------------------\n");
    printf("请输入项目前编号执行相关操作:\n\n");
    printf("[1] 报名比赛\n[2] 完成比赛\n[3] 查看比赛\n");
    printf("[0] 返回主页\n");
    switch(dostudent()){
        case '1':
            joinmatch();
            break;
        case '2':
            finishmatch();
            break;
        case '3':
            viewmatch();
            break;
        case '0':
            return 0;
        default:
            error("采集项目参数失败");
            break;
    }
    return 1;
}
int joinmatch(){
    system(CLEAR);
    char sname[MAXNAME];
    printf("搜索比赛:\n");
        scanf("%s", sname);
        getchar();
        Match *bp;
        char *namep = NULL;
        if((bp = lookup(namep = strdup(sname), 0)) == NULL){
            printf("比赛 %s 不存在\n", namep);
            fflush(stdin);
            return -1;
        }else{
            printmatch(bp);
            if(! bp->status){
                printf("参加比赛: Y N\n");
            }else{
                printf("比赛进行中\n");
                return 0;
            }
            while(1){
                char c = '\0';
                scanf("%c", &c);
                getchar();
                if(!(c == 'Y' || c == 'y' || c == 'N' || c == 'n')){
                    fflush(stdin);
                    error("指令无效");
                    continue;
                }
                if(c == 'Y' || c == 'y'){
                    --bp->count > -1 ? printf("成功\n") : printf("失败\n");
                    if(! bp->count){
                        bp->status = UNAVAILABLE;
                    }
                    return bp->id;
                }else{
                    return 0;
                }
            }
        }  
    return -1;
}
int finishmatch(){
    system(CLEAR);
    char sname[MAXNAME];
    printf("完成比赛:\n");
    scanf("%s", sname);
    getchar();
    Match *bp;
    char *namep;
    if((bp = lookup(namep = strdup(sname), 0)) == NULL){
        fflush(stdin);
        printf("此赛事没有注册\n");
        return -1;
    }else{
        printmatch(bp);
        printf("完成比赛: Y N\n");
        while(1){
            char c = '\0';
            scanf("%c", &c);
            getchar();
            if(!(c == 'Y' || c == 'y' || c == 'N' || c == 'n')){
                fflush(stdin);
                error("指令无效");
            }else if(c == 'Y' || c == 'y'){
                bp->count++ ? 0: (bp->status = AVAILABLE);
                printf("成功\n");
                return bp->id;
            }else{
                return 0;
            }
        }
    }
 
    return -1;
}
char domanager(){
 
    char c, flag;
    int i;
    
    while(1){
        for(i = 0; (c = getchar()) != '\n'; flag = c, ++i)
            ;
        if(i == 1){
            if(flag == '1' || flag == '2' || flag == '3' || flag == '4' || flag == '0'){
                return flag;
            }
        }else if(i == 0){
            continue;
        }
        error("[请输入命令: 1 / 2 / 3/ 4 / 0 选择项目]");
            
    }
    
    return '\0';
}
int usrmanager(){
    printf("-------------------------------------\n");
    printf("请输入项目前编号执行相关操作:\n\n");
    printf("[1] 查看比赛项目\n[2] 添加新项目\n[3] 修改已有项目\n[4] 删除比赛项目\n");
    printf("[0] 返回主页\n");
    switch(domanager()){
        case '1':
            viewmatch();
            break;
        case '2':
            addmatch();
            break;
        case '3':
            modmatch();
            break;
        case '4':
            delmatch();
            break;
        case '0':
            return 0;
        default:
            error("采集项目参数失败");
            break;
    }
    return 1;
 
}
int viewmatch(){
    system(CLEAR);      
    Match *bp;
    for(bp =head; bp != NULL; bp = bp->next){
        printmatch(bp);
    }
    if(nmatch){
        return nmatch;
    }else{
        printf("比赛没有这个项目\n");
        return 0;
    }
    return -1;
}
void printmatch(Match *bp){
    printf("项目编号:%d\n", bp->id);
    printf("项目名:%s\n", bp->name);
    printf("项目状态:%s\n", bp->status ? "未开始" : "开始");
}
int addmatch(){
    system(CLEAR);     
    char sname[MAXNAME];
    int id, count;
    char *namep;
 
    while(1){
        id = 0;
        count = 0;
        namep = NULL;
        printf("请输入比赛名:\n");
        scanf("%s", sname);
        getchar();
        printf("请输入小于1000的比赛编号:\n");
        scanf("%d", &id);
        getchar();
        if(!(id > 0 && id < 1000)){
            error("输入编号不符合要求");
            fflush(stdin);
            continue;
        }
        printf("请输入小于50的比赛选手数量:\n");
        scanf("%d", &count);
        getchar();
        if(!(count > 0 && count < 50)){
            error("输入数目不符合要求");
            fflush(stdin);
            continue;
        }
        Match *bp;        
        if((bp = lookup(namep = strdup(sname), id)) == NULL){
            bp = (Match *)malloc(sizeof (Match));
            if(bp == NULL || (bp->name = namep) == NULL){
                error("添加比赛失败");
                fflush(stdin);
                continue;
            }
            bp->id = id;
            bp->count = count;
            bp->status = AVAILABLE;
            ++nmatch;
            
            bp->next = head;
            head = bp;
            printf("比赛 %s 注册成功\n", sname);
            return id;
        }else{
            fflush(stdin);
            error("项目名或编号已经被占用");
        }
    }
 
    return -1;
}
Match *lookup(char *s, int id){
    Match *bp;
    for(bp = head; bp != NULL; bp = bp->next){
        if(id == bp->id || strcmp(s, bp->name) == 0){
            return bp;
        }
    }
    return NULL;
}
int modmatch(){  
    system(CLEAR);    
    Match *bp = NULL;
    while(1){
        int id = 0;
        printf("请输入要修改信息的项目编号:\n");
        scanf("%d", &id);
        getchar();
        if(!(id > 0 && id < 1000)){
            fflush(stdin);
            error("项目编号不符合要求");
            continue;
        }
        if((bp = lookup("", id)) != NULL){
            printf("以下为要修改的项目的现有信息:\n");
            printmatch(bp);
            printf("[1] 修改项目名\n[2] 修改比赛选手数量\n[3] 修改项目状态\n[0] 放弃修改\n");
            while(1){
                int i;
                scanf("%d", &i);
                getchar();
                if(!(i == 1 || i == 2 || i == 3 || i == 0)){
                    fflush(stdin);
                    error("输入项目前编号选择相关项目");
                    continue;
                }
                switch(i){
                    case 1:
                        while(1){
                            char newname[MAXNAME], *namep;
                            printf("项目名:\n");
                            scanf("%s", newname);
                            getchar();
                            if((lookup(namep = strdup(newname), 0)) != NULL){
                                fflush(stdin);
                                error("项目名已存在");
                                continue;
                            }
                            if((bp->name = namep) != NULL){
                                printf("修改成功\n");
                                return id;
                            }
                        }
                        break;
                    case 2:
                        while(1){
                            int bnum;
                            printf("输入比赛数量:\n");
                            scanf("%d", &bnum);
                            getchar();
                            if(!(bnum > 0 || bnum < 1000)){
                                fflush(stdin);
                                error("数目不符合要求");
                                continue;
                            }
                            bp->count = bnum;
                            printf("修改成功\n");
                            return id;
                        }
                        break;
                    case 3:
                        while(1){
                            char c;
                            int status;
                            status = bp->status;
                            status == AVAILABLE ? printf("修改状态为[未开始]: Y N\n") : printf("修改状态为[开始]: Y N\n");
                            scanf("%c", &c);
                            getchar();
                            if(!( c == 'Y' || c == 'y' || c == 'N' || c == 'n')){
                                fflush(stdin);
                                error("指令无效");
                                continue;
                            }
                            if(c == 'Y' || c == 'y'){
                                 status == AVAILABLE ? bp->status = UNAVAILABLE : (bp->status = AVAILABLE);
                                 printf("修改成功\n");
                                 return id;
                            }else{
                                printf("放弃修改\n");
                                return 0;
                            }
                        }
                        break;
                    case 0:
                        return 0;
                    default:
                        error("获取参数失败");
                        break;   
                }
            }
        }else{
            printf("没有此比赛\n");
            return 0;
        }
    }
    return -1;
}
int delmatch(){
    system(CLEAR);    
    Match *bp, *fbp;
    
    int id = 0;
    printf("请输入要注销的项目编号:\n");
    scanf("%d", &id);
    getchar();
    if(!(id > 0 && id < 1000)){
        fflush(stdin);
        error("项目编号不符合要求");
        return -1;
    }
    for(fbp = bp = head; bp != NULL; fbp = bp, bp = bp->next){
        if(bp->id == id){
            printmatch(bp);
            break;
        }
    }
    if(bp != NULL){
        while(1){
            printf("确定要注销此项目:Y  N\n");
            char YN;
            scanf("%c", &YN);
            getchar();
            if(!((YN == 'Y' || YN == 'y') || (YN == 'N' || YN == 'n'))){
                fflush(stdin);
                error("指令无效\n");
                continue;
            }
            if(YN == 'Y' || YN == 'y'){
                bp == head ? head = bp->next : (fbp->next = bp->next);
                free(bp->name);                                        
                free(bp);
                bp = NULL;
                printf("项目注销成功\n");
                break;
            }else{
                printf("放弃注销\n");
                return 0;
            }
        }  
        return id;
    }else{
        printf("要注销的项目编号不存在\n");
        return -1;
    }
    return -1;
}

主界面包含管理员入口、选手入口、和退出功能。

管理员入口进入有如下功能

选手入口进入有如下功能

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • C语言实现歌手比赛系统

    本文实例为大家分享了C语言实现歌手比赛系统的具体代码,供大家参考,具体内容如下 一.项目简介 对一次歌手比赛的成绩进行管理输入每个选手的数据包括编号.姓名.十个评委的成绩,根据输入计算出总成绩和平均成绩(去掉最高分,去掉最低分). 二.任务概述 要求歌手比赛系统实现对学生基本信息(如编号.姓名.性别等)及十个评委的成绩的管理(增加.删除.修改或更新.查询.统计.保存到文件.从文件装载等操作). 三.功能展示 四.思维导图 五.程序源码 #include<stdio.h> #include<

  • c语言实现足球比赛积分统计系统

    本文实例为大家分享了c语言实现足球比赛积分统计系统的具体代码,供大家参考,具体内容如下 /* 足球比赛积分统计系统    作者:施瑞文    时间:2018.2 */   //为简单化,这里没有加上文件的操作  #include <stdio.h> #include <stdlib.h> #include <string.h> #include<windows.h> #include<conio.h> #define LEN sizeof(mat

  • C语言实现魔方比赛管理系统

    本文实例为大家分享了C语言实现魔方比赛管理系统的具体代码,供大家参考,具体内容如下 #include <stdio.h> #include <stdlib.h> #include <string.h> #define AVAILABLE 0 #define UNAVAILABLE 1 #define MAXNAME 30 #define CLEAR "cls"   typedef struct match{     char *name;     i

  • C语言实现学生成绩管理系统

    设计一个学生成绩管理系统,实现对学生成绩的动态管理,实现对学生成绩的输入,显示,删除,查找,插入,最佳,保存,计算,排序等主要功能. 功能要求 1.每一条记录包括一个学生的学号.姓名.3门课成绩.平均成绩. 2.输入功能:可以一次完成若干条记录的输入. 3.显示功能:完成全部学生记录的显示. 4.查找功能:完成按姓名查找学生记录,并显示. 5.排序功能:按学生平均成绩进行排序. 6.插入功能:按平均成绩高低插入一条学生记录 7.删除功能:如果输入错误,可以删除学生记录: 8.退出. 代码: #i

  • C语言实现学生信息管理系统(单链表)

    本文实例为大家分享了C语言实现学生信息管理系统的具体代码,供大家参考,具体内容如下 /*copyright(c)2016.烟台大学计算机学院 * All rights reserved, * 文件名称:text.Cpp * 作者:吴敬超 * 完成日期:2016年7月1日 * 版本号:codeblock * * 问题描述: 学生信息管理系统 * 输入描述: * 程序输出: 输出结果 */ #include <stdio.h> #include <stdlib.h> #include

  • C语言版学生成绩管理系统

    本文实例为大家分享了C语言版学生成绩管理系统的具体代码,供大家参考,具体内容如下 #include<stdio.h> #include<stdlib.h> #include<time.h> #include<conio.h> #include<string.h> #include<algorithm> char buf[255]; char c=14; char path[]="D:\\data"; char tm

  • 基于C语言实现学生成绩管理系统

    本文实例为大家分享了C语言实现学生成绩管理系统的具体代码,供大家参考,具体内容如下 这里只贴代码,具体介绍省略. #include <stdio.h> #include <io.h> #include <conio.h> #include <stdlib.h> #include <string.h> #define MAX 200 struct student { char no[10]; // 学号 char name[50]; // 姓名 f

  • C语言实现学生学籍管理系统

    本文实例为大家分享了C语言实现学生学籍管理系统的具体代码,供大家参考,具体内容如下 #include<stdio.h> #include<conio.h> #include<stdlib.h> #include<string.h> #include<windows.h> //**********************************结构体************************************* struct score

  • C语言实现歌曲信息管理系统

    本文实例为大家分享了C语言实现歌曲信息管理系统的具体代码,供大家参考,具体内容如下 系统功能:该系统以菜单方式工作,歌曲信息包括:歌名.演唱者.作词.作曲.所属专辑.出版时间.出版公司.试设计一歌厅歌曲管理系统,使之能提供以下功能:歌曲信息录入.修改.插入.删除功能:歌曲排序浏览功能:按歌名查询.按演唱者查询等功能. 完整的实现代码如下: #include "stdio.h" #include "stdlib.h" #include "string.h&q

  • C语言链表实现图书管理系统

    之前参照网上的资料用链表实现了图书管理系统,包括简单的增删改查功能以及借书还书功能,我是VC6.0下写的一个控制台程序,格式参照的网上的.在动手编码之前,你需要理清自己的思路.首先,需要确定图书馆里系统中主要有那几个对象,这里我写了学生对象和图书对象.不妨在纸上写出或画出它们主要包括哪些属性以及其可能的对应关系,这里根据不同人的要求会有所不同.清楚这些之后,就可以设计学生和图书的数据结构,比如这里我用的结构体存储其信息.然后就需要考虑,我想要哪些功能,除了基本的增删改查之外,我还想要哪些功能?比

  • C语言链表实现学生管理系统

    本文实例为大家分享了C语言链表实现学生管理系统的具体代码,供大家参考,具体内容如下 #include<stdio.h> #include<ctype.h> #include<fstream> #include<stdlib.h> #include<string.h> #include<iostream> using namespace std; typedef struct ndoe{ char id[10]; char name[1

  • C语言编写学生成绩管理系统

    用C语言编写学生成绩管理系统代码,供大家参考,具体内容如下 C语言实现学生成绩管理系统实战教学 https://www.jb51.net/article/154767.htm (1)给出所选课程设计题目以及本题目具体所要完成的功能要求说明. 1.课程设计题目:学生成绩管理系统 2.完成的功能要求: (1).主要实现的功能: 1---学生输入 2---学生插入 3---学生查询(按学号) 4---学生删除 5---学生输出 6---计算每名学生的平均分并输出 7---计算每科的平均分并输出 8--

随机推荐