基于链表的上课随机抽取回答问题系统
#include<stdio.h>
#include<string.h>
#include <stdlib.h>
#include <time.h>
#include<unistd.h>
//每个学生的结构体函数
struct student{
int num;
char name[10];
struct student *next;
};
struct student *list_head()
{
//给头节点申请空间
struct student *head =malloc(sizeof(struct student));
if(head == NULL)
printf("malloc head error!\n");
//给头节点的指针域赋值
head->next = NULL;
//返回一个head
return head;
}
//插入新节点函数
void student_new(struct student *head)
{
//给新节点申请空间
struct student *new = malloc(sizeof(struct student));
if(new == NULL)
printf("malloc new error!\n");
//给新节点的指针域和数据域赋值
//数据域赋值
printf("pls input your num :\n");
scanf("%d",&new->num);//输入学号
printf("pls input your name :\n");
scanf("%s",new->name);//输入名字
printf("--------------------------------------------\n");
//指针域赋值
new->next = NULL;
//找到最后一个节点
struct student *p = NULL;
for (p = head ; p->next != NULL; p = p->next );
//把最后一个节点的指针指向新节点
p->next = new;
return ;
}
//游戏规则函数
int game_fun(struct student *head)
{
//定义一个字符数组,用来存放go或end
char gui_ze[10];
//用来存放随机数
int a;
//用来存放学生个数
int b = 0;
//定义一个结构体指针来循环寻找相应的节点
struct student *p = NULL;
//判断出一共有多少个学生
for (p = head; p->next != NULL; p = p->next)
{
b++;
}
printf("--------------------------------------------\n");
printf(" 学生个数为:%d \n",b);//打印一下一共有多少个学生
printf("--------------------------------------------\n");
while(1)//死循环
{
//打印一下游戏规则
printf("开始游戏则输入(go),结束游戏则输入(end)!\n");
//在这里输入
printf("请输入:");
scanf("%s",gui_ze);//从键盘中获取go来开始游戏,输入end来结束游戏
if(strcmp(gui_ze,"go") == 0 )//判断是go,正确
{
head:
//取随机数
srand((unsigned)time(NULL));
a = rand()%b;
//判断如果a等于0,就直接跳回取随机数
if ( a == 0 )
goto head;
//否则继续运行程序
else
goto end;
end:
//循环对比学号,找到是哪个同学
for (p = head->next ; p->num != a ; p = p->next);
//打印出那个同学起来回答问题
printf("请%s同学起来回答问题!\n",p->name);
printf("--------------------------------------------\n");
}
else if(strcmp(gui_ze,"end")==0)//判断是end,正确
{
return 1;
}
else//输入的东西既不是go,也不是end
{
printf("输入错误,请从新输入!\n");
}
}
}
//开机页面
void kai_ji_catoon()
{
printf("------------------------------------------------\n");
printf(" \n");
printf(" \n");
printf(" 欢迎使用随机抽同学回答问题系统 \n");
printf(" \n");
printf(" \n");
printf("------------------------------------------------\n");
sleep(2);//延迟3秒
return ;
}
//系统主页面
void zhu_ye_mian()
{
printf("------------------------------------------------\n");
printf(" \n");
printf(" 1、加入新的同学进行游戏 \n");
printf(" 2、进入游戏 \n");
printf(" 3、退出程序 \n");
printf(" \n");
printf("------------------------------------------------\n");
return ;
}
//主函数
int main(int argc, char const *argv[])
{
//调用开机动画函数
kai_ji_catoon();
//初始化头节点
struct student *head = NULL;
head = list_head();
int choice;//用来输入选择的选项
//是循环加分支,连完成功能的选择
while (1)
{
//调用系统主页面函数
zhu_ye_mian();
//输入你的选项
printf("请输入你的选择:\n");
scanf("%d",&choice);
//分支选项
switch (choice)
{
case 1:
//插入新节点,也就是注册新的同学进行游戏
student_new(head);
break;
case 2:
//调用游戏函数
game_fun(head);
break;
case 3:
printf("结束游戏中。。。。。。\n");
sleep(3);
return 0;
default:
printf("输入错误,请重新输入:\n");
break;
}
}
}

浙公网安备 33010602011771号