C语言实现简单的抽奖系统

 更新时间:2022年04月01日 09:11:26   作者:fastjson_  
这篇文章主要为大家详细介绍了C语言实现简单的抽奖系统,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

本文实例为大家分享了C语言实现简单的抽奖系统的具体代码,供大家参考,具体内容如下

效果图

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<conio.h>
#include<time.h>
#include <windows.h>
 
struct data{
    char id[20];
    char name[20];
};
 
int t1,t2,t3;
struct data information[110];              //普通人员信息
struct data prize1[110];                    //总获奖人员信息
struct data prize2[110];                    //总获奖人员信息
struct data prize3[110];                    //总获奖人员信息
 
int people=0;                              //参与抽奖总人数
int people1=0,people2=0,people3=0;         //普通一等奖、二等奖、三等奖的人数
char strid[20];
 
//从文件中读取信息,放到普通人员信息中
void Read_information();   
 
//打印菜单
void Print_menu();      
 
//设置奖项人数
void Set_awards(); 
 
//开始抽奖    
void Begin_luck();  
 
//删除该学号人员在普通人员中的信息
void Delet_information();
 
void main()
{
    Read_information();
    Print_menu();
}
 
void Read_information()//从文件中读取信息
{
    FILE *fp=fopen("抽奖人员名单.txt","r");
    while(!feof(fp))
    {
        //存储该信息到普通人员信息中,便于设置内幕人员
        fscanf(fp,"%s%s",information[people].id,information[people].name);
        people++;
    }
    fclose(fp);
}
 
 
void Print_menu()
{
    int choose;
    while(1)
    {
        system("cls");
        printf("\n\n");
        printf("\t\t\t*********************************************************\n");
 
        printf("\t\t\t*\t    <-欢迎来到抽奖系统->\t\t\t*\n");
        printf("\t\t\t*\t    <-目前参与抽奖的总人数为%d人->\t\t*\n", people);
        printf("\t\t\t*\t    <  一等奖设置为%d人  >\t\t\t*\n",people1);
        printf("\t\t\t*\t    <  二等奖设置为%d人  >\t\t\t*\n",people2);
        printf("\t\t\t*\t    <  三等奖设置为%d人  >\t\t\t*\n",people3);
        printf("\t\t\t*\t\t\t\t\t\t\t*\n");
 
        printf("\t\t\t*\t\t开始抽奖请按1\t\t\t\t*\n");
        printf("\t\t\t*\t\t设置奖项人数2\t\t\t\t*\n");
        printf("\t\t\t*\t\t结束程序请按0\t\t\t\t*\n");
        printf("\t\t\t*\t\t\t\t\t\t\t*\n");
        printf("\t\t\t*********************************************************\n");
 
        printf("\n\n\t\t\t\t\t请输入选项:");
        scanf("%d",&choose);
        
        switch(choose)
        {
            case 0:
                return;
 
            case 1:
                Begin_luck(); 
                break;
 
            case 2:
                Set_awards();
                break;
        }    
    }
}
 
 
//设置奖项人数
void Set_awards()
{
    int choose;
    while(1)
    {
        system("cls");
        printf("请输入三等奖人数(正整数):\n");
        scanf("%d",&t3);
        if( t3<0 || t3>people)
        {
            printf("输入不合法,请输入1到%d之内的数字",people);
            getch();
        }
        else
        {
            people3=t3;
            break;
        }
 
    }
    while(1)
    {
        system("cls");
            printf("请输入二等奖人数:\n");
            scanf("%d",&t2);
            if( t2<0 || t2>people)
            {
                printf("输入不合法,请输入1到%d之内的数字",people);
                getch();
 
            }
            else
            {
                people2=t2;
                break;
            }
 
 
    }
    while(1)
    {
        system("cls");
        printf("请输入一等奖人数:\n");
        scanf("%d",&t1);
        if( t1<0 || t1>people)
        {
            printf("输入不合法,请输入1到%d之内的数字",people);
            getch();
        }
        else
        {
            people1=t1;
            break;
        }
    }
    printf("设置完毕按任意键返回\n");
    getch();
    return;
}
 
 
void Begin_luck()   //开始抽奖
{
    if(people1==0 || people2==0 || people3==0)
    {
        printf("请设置奖项人数!!!!\n");
        printf("按任意键返回\n");
        getch();
        return;
    }
 
    if( (people1+people2+people3) > people )
    {
        printf("中奖人数超过总人数,请重新设置!!!!\n");
        printf("按任意键返回\n");
        getch();
        return;
    }
 
    int i,j=0,choose,t;
    system("cls");      
 
/*******************三等奖人员****************************/
    printf("下面开始抽取三等奖人员,按任意键继续\n");
    getch();
    while(people3--)
    {
        if(people3<0)
            break;
        srand((unsigned)time(0));
        t=rand()%people;
        prize3[j++]=information[t];
        strcpy(strid,information[t].id);
        Delet_information();
    }
    printf("以下是三等奖名单,按任意键继续\n");
    for(i=0;i<j;i++)
        printf("%s\n",prize3[i].name);
    getch();
 
/*******************二等奖人员****************************/
    printf("下面开始抽取二等奖人员,按任意键继续\n");
    getch();
    while(people2--)
    {
        if(people2<0)
            break;
        srand((unsigned)time(0));
        t=rand()%people;
        prize2[j++]=information[t];
        strcpy(strid,information[t].id);
        Delet_information();
    }
    printf("以下是二等奖名单,按任意键继续\n");
    for(;i<j;i++)
        printf("%s\n",prize2[i].name);
    getch();
 
/*******************一等奖人员****************************/
    printf("下面开始抽取一等奖人员,按任意键继续\n");
    getch();
    while(people1--)
    {
        if(people1<0)
            break;
        srand((unsigned)time(0));
        t=rand()%people;
        prize1[j++]=information[t];
        strcpy(strid,information[t].id);
        Delet_information();
    }
    printf("以下是一等奖名单,按任意键继续\n");
    for(;i<j;i++)
        printf("%s\n",prize1[i].name);
    getch();
 
    people=0;
    Read_information();
    people1=t1,people2=t2,people3=t3;
}
 
void Delet_information()   //删除该学号人员在普通人员中的信息
{
    int i,j;
    for(i=0;i<people;i++)
        if(strcmp(information[i].id,strid)==0)
        {
            people--;
            for(j=i;j<people;j++)
                information[j]=information[j+1];
            return;
        }
}

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

相关文章

  • C++中的移动构造函数及move语句示例详解

    C++中的移动构造函数及move语句示例详解

    这篇文章主要给大家介绍了关于C++中移动构造函数及move语句的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用C++具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧。
    2017-10-10
  • C++超细致讲解队列queue的使用

    C++超细致讲解队列queue的使用

    队列先进先出,即只能在容器的末尾添加新元素,只能从头部移除元素,下面这篇文章主要给大家介绍了关于C++中队列queue用法的相关资料,文中通过示例代码介绍的非常详细,需要的朋友可以参考下
    2022-05-05
  • C语言中操作进程信号的相关函数使用详解

    C语言中操作进程信号的相关函数使用详解

    这篇文章主要介绍了C语言中操作进程信号的相关函数使用详解,分别是signal()函数和kill()函数的用法,需要的朋友可以参考下
    2015-09-09
  • C语言实现职工工资管理系统

    C语言实现职工工资管理系统

    这篇文章主要介绍了C语言实现职工工资管理系统,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-02-02
  • C++小利器之std::bind参数绑定包装器的使用详解

    C++小利器之std::bind参数绑定包装器的使用详解

    从 C++11 开始,标准库提供了 std::bind 用于绑定函数 f 和调用参数,返回一个新可调用函数对象 fn,下面就跟随小编一起深入了解一下std::bind的具体使用吧
    2023-12-12
  • C++中策略模式和工厂模式的区别

    C++中策略模式和工厂模式的区别

    这篇文章介绍了C++中策略模式和工厂模式的区别,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-07-07
  • C语言清楚了解指针的使用

    C语言清楚了解指针的使用

    C语言这门课程在计算机的基础教学中一直占有比较重要的地位,然而要想突破C语言的学习,对指针的掌握是非常重要的,本文将具体针对指针的基础做详尽的介绍
    2022-06-06
  • COLORREF,COLOR,RGB,CString的转化总结分析

    COLORREF,COLOR,RGB,CString的转化总结分析

    实际的软件开发过程中,常需要用到非.net平台的代码。这时候就可能碰到ColorRef(也就是以int类型代表的颜色值或是以DWORD值表示的颜色)。这跟.net平台下的颜色的相互转换MS并没有直接实现
    2013-09-09
  • C语言动态内存管理介绍

    C语言动态内存管理介绍

    大家好,本篇文章主要讲的是C语言动态内存管理介绍,感兴趣的同学赶快来看一看吧,对你有帮助的话记得收藏一下,方便下次浏览
    2021-12-12
  • C++对象模型和this指针详解

    C++对象模型和this指针详解

    这篇文章主要介绍了详解C++对象模型和this指针,是C++入门学习中的基础知识,需要的朋友可以参考下,希望能够给你带来帮助
    2021-10-10

最新评论