基于C语言实现随机点名器(附源码)

突发奇想写了个随机点名器…以供使用

随机点名器

main函数

#include "myList.h"

#define FILENAME "stu.txt"

void menu();//画面界面;
void userOptions(Node* headNode);//用户选项

int main(void) {
	SetConsoleTitle(L"随机抽查系统");
	Node* List = createrList();
	readInfoFromFile(List, FILENAME);

	while (true) {

		menu();

		userOptions(List);

		system("pause");
		system("cls");

	}

	system("pause");

	return 0;
}

void menu() {
	printf("\t\t\t学生点名系统\n");
	printf("\t\t1)开始随机抽查"
		"\t\t2)添加学生\n"
		"\t\t3)删除学生"
		"\t\t4)修改学生信息\n"
		"\t\tq)退出\n");
	printf("请输入你的选项:");

}

void userOptions(Node* List) {
	Student info;

	char choose = '0';

	choose = enter();

	switch (choose) {

	case '1':
		printf("\t\t\t*开始随机抽查*\n");

		seekNode(List, rollCall(LengthNode(List)));
		break;
	case '2':

		printf("\t\t\t\t\t\t已有学生如下\n");
		printfNode(List);
		printf("\t\t\t*添加学生*\n");
		printf("注意请从%d之后开始也就是%d\n", LengthNode(List),LengthNode(List)+1);
		printf("\t\t请输入学生序号:");

		scanf_s("%d",&info.num);

		printf("\t\t请输入学生学号:");
		scanf_s("%ld", &info.number);
		printf("\t\t请输入学生姓名:");
		scanf_s("%s", info.name, sizeof(info.name));
		insetNodeByHead(List, info);

		break;
	case '3':
		printf("\t\t\t\t\t\t已有学生如下\n");
		printfNode(List);
		printf("\t\t\t*删除学生*\n");
		printf("\t\t请输入学生学号(后两位即可):");
		scanf_s("%ld", &info.number);
		deleteNodeAppoinNumber(List, info.number);
		break;
	case'4':
		printf("已有学生如下\n");
		printfNode(List);
		printf("\t\t\t*修改学生信息*\n");
		printf("\t\t请输入学生学号:");
		scanf_s("%ld", &info.number);
		upDataNode(List, info.number);

		break;
	case'q':
		printf("\t\tquit!\n");
		exit(0);
		break;
	default:
		break;

	}
	weiteInfoToFile(List, FILENAME);

}

enter.h

(这个就是我自己写来玩的,读取输入的字符,你们也可以自己弄一个,就可以不用我这个了。但是要记得修改一下引用这个的代码喔)

#pragma once  //防止重复引用
#include "myList.h" 

//处理写入
char enter(void); //函数声明

char enter(void) {
	short count = 1;//次数

	char input = getchar(); // 读取单个字符
	fflush(stdin);//清空输入缓存区,防止读取后,又读取

	for (int i = 1; i <= 12; i++) {//如果超过误输入超过13次,强制退出程序

		if (input == '\n') {//如果读取的一直是回车,就会执行,否则返回该值
			count++;

			scanf_s("%c", &input, 3);

			fflush(stdin);

			if (count == 5) {
				printf("\n\t\t\t\t\t\t别再调皮了!\n");
				continue;
			}
			else if (count == 11) {
				printf("\n\t\t\t\t\t\t别在摁回车键了!最后一次机会了\n");
				continue;

			}
			else if (count == 13) {

				printf("\n\t\t\t\t\t\t程序已强制退出!byebye");
				exit(0);
			}

		}
		else { return  input; }

	}
	return 0;
}

myList.h

#pragma once
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#include <time.h>
#include <windows.h>
#include "enter.h"
typedef struct student {//类型
	long int number;
	char name[10];

	int  num;//给定一个序号然后添加一个学生后就自加1;

}Student;

typedef struct Node {
	Student data;
	struct Node* next;

}Node;

//创建链表
Node* createrList(void) {

	Node* headNode = (Node*)malloc(sizeof(Node));

	if (headNode) {
		headNode->next = NULL;
	}

	return headNode;
}

//创建结点
Node* createrNode(Student data) {

	Node* newNode = (Node*)malloc(sizeof(Node));

	if (newNode) {
		newNode->data = data;
		newNode->next = NULL;
	}

	return newNode;
}

//插入结点
void insetNodeByHead(Node* headNode, Student data) {

	Node* newNode = createrNode(data);

	newNode->next = headNode->next;
	headNode->next = newNode;

}

//删除结点
void deleteNodeAppoinNumber(Node* headNode, long int number) {
	Node* posNode = headNode->next;
	Node* posFrontNode = headNode;

	if (posNode == NULL) {
		printf("\t\t表中没有学生\n");
	}
	else {

		while (posNode->data.number != number) {//没有找到就继续找
			posFrontNode = posNode;
			posNode = posNode->next;

			if (posNode == NULL) {//找完最后一个了还没有
				printf("\t\t表中没有该学生\n");
				return;
			}
		}

		//找到了,执行删除操作
		posFrontNode->next = posNode->next;
		free(posNode);
		printf("\t\t删除完成!");
	}

}

//修改结点
void upDataNode(Node* headNode, long int number) {
	Node* posNode = headNode->next;
	Node* posFrontNode = headNode;

	char choose = '0';

	if (posNode == NULL) {
		printf("\t\t该表中没有学生\t");
	}
	else {
		while (posNode->data.number != number) {
			posFrontNode = posNode;
			posNode = posNode->next;

			if (posNode == NULL) {
				printf("\t\t表中没有该学生\n");
				return;

			}
		}

		while (true) {
			printf("\t\t请选择要修改的选项:1)姓名  2)学号  q)退出!\n");
			printf("\t\t请输入:");
			choose = enter();

			switch (choose) {
			case '1':
				printf("\t\t请输入你要更改的名字(原姓名是%s):", posNode->data.name);
				scanf_s("%s", posNode->data.name, sizeof(posNode->data.name));
				system("pause");
				break;
			case '2':
				printf("\t\t请输入你要更改的学号(原学号是%ld):", posNode->data.number);
				scanf_s("%ld", &posNode->data.number);
				system("pause");
				break;
			case 'q':
				printf("\t\tquit!");
				return;
			default:
				printf("请输入正确选项:");
				break;
			}
		}

	}

}
//打印结点
void printfNode(Node* headNode) {
	Node* pMove = headNode->next;

	printf("\t\t\t\t\t\t\t\t学号\t\t姓名\n");
	while (pMove != NULL) {
		printf("\t\t\t\t\t\t\t\t%ld\t%s\n", pMove->data.number, pMove->data.name);
		pMove = pMove->next;
	}
	printf("\n");
}

//文件读
bool readInfoFromFile(Node* headNode, char* fileName) {

	Student data;
	boolean  one = false;
	FILE* fp;
	fopen_s(&fp, fileName, "r");

	if (fp == NULL) {
		fopen_s(&fp, fileName, "w+");

	}

	if (fp == NULL) { return EOF; }

		while (fscanf_s(fp, "%d\t%ld\t%s"
		, &data.num,&data.number, data.name, sizeof(data.name)) != EOF) {

				insetNodeByHead(headNode, data);

	}

	if (fp == NULL) { return EOF; }
	fclose(fp);

	return 0;
}

//文件写
bool  weiteInfoToFile(Node* headNode, char* fileName) {

	FILE* fp;
	fopen_s(&fp, fileName, "w");
	Node* pMove = headNode->next;
	if (fp == NULL) { return EOF; }
	while (pMove) {

		fprintf_s(fp, "%d\t\t%ld\t\t%s\n", pMove->data.num,pMove->data.number,pMove->data.name);

		pMove = pMove->next;
	}

	if (fp == NULL) { return EOF; }
	fclose(fp);
	return 0;
}

//求出链表长度然后返回
int LengthNode(struct Node* headNode) {
	int length = 0;

	struct Node* pMove = headNode->next;

	while (pMove) {
		length++;
		pMove = pMove->next;

	}

	return length;
}

//读取随机数然后选出该学生
void seekNode(Node* headNode, long int rand_1) {
	Node* posNode = headNode->next;
	Node* posFrontNode = headNode;

	if (posNode == NULL) {
		printf("\t\t该表中没有学生\t");
	}
	else
	{	//这里的number改为num
		while (posNode->data.num != rand_1) {
			posFrontNode = posNode;
			posNode = posNode->next;
			if (posNode == NULL) {
				printf("\t\t该表中没有这这个学号(%ld)的学生\n", rand_1);
				return;
			}
		}

			printf("就决定是你了->");
			printf("\t\t%ld\t%s\n\n\n\n\n", posNode->data.number, posNode->data.name);

	}

}

//产生随机数
long int rollCall(long int length) {
	long int number;
	srand((unsigned)time(NULL));
	number = rand() % length + 1;//33+40;//length+1
	return number;
}

到此这篇关于基于C语言实现随机点名器(附源码)的文章就介绍到这了,更多相关C语言随机点名器内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • python实战练习做一个随机点名的程序

    用python做一个简单的随机点名程序(不重复点名) 这是我来到csdn的第一篇文章,内容如果有瑕疵的地方或者代码可以进一步改善,请大家对我指点一二.谢谢!废话不多说,上代码! import random #导入随机模块 import pyttsx3 #导入第三方语音模块 listen = pyttsx3.init() #初始化一个变量 txt_path = input('请输入txt文件的path:') #使用者输入名单文件的路径(名单文件为txt,一行只能有一个姓名,姓名必须在行首不能有空格

  • JS实现随机点名系统

    用JS实现一个随机点名系统,供大家参考,具体内容如下 每次上课前10分钟,老师都会叫我们回答问题,奈何每次都是点学号,好像每次我都能中奖,我直接跟老师提议,老师,我用来JS来帮你写个随机点名的系统吧!这样就不会每次都抽到我了,哈哈 先看效果: 代码如下: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta http-equiv=

  • C++随机点名生成器实例代码(老师们的福音!)

    用途: 随机点名 原理: 从exe文件同目录下的文档中导入人员信息(可以多重),通过rand+Hash实现,按空格键即可生成. C++中rand()函数可以用来产生随机数,但是是属于伪随机数. rand()函数用法: 在使用rand()函数的时候,首先需要包含头文件#include<stdlib.h> ,用法是int rand(void) ,产生的随机数范围是0~65536,类型为unsigned int,不能超过范围.rand()函数不接受参数,默认以1为种子(即起始值). 随机数生成器总是

  • C#使用随机数编写班级点名器的示例代码

    目录 随机数可以做什么? 班级点名器 其他用途 英文意思 随机数可以做什么? 生成一些随机的数字用途非常的广泛, 例如随机抽取数据库的一条记录,把生成的数字给变量,某一个时间点执行一些代码,随机数赋值给数组等 班级点名器 例如有这样一个表格,要求按座号来进行点名 1.创建Windows项目 然后下一步即可 2.拖取控件 如果没有工具箱在视图里可以调出来 3.编写代码 按钮里的代码 Random a = new Random(); //创建随机数 string[] name = new strin

  • js实现随机点名小功能

    本文实例为大家分享了js实现随机点名功能的具体代码,供大家参考,具体内容如下 <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title></title> </head> <body> <div id="name1"></div> <button id="btn"

  • 基于C语言实现随机点名器(附源码)

    突发奇想写了个随机点名器…以供使用 随机点名器 main函数 #include "myList.h" #define FILENAME "stu.txt" void menu();//画面界面; void userOptions(Node* headNode);//用户选项 int main(void) { SetConsoleTitle(L"随机抽查系统"); Node* List = createrList(); readInfoFromFi

  • 基于Python实现贪吃蛇小游戏(附源码)

    目录 前言 主要设计 应用知识点 1.python知识点 2.pygamezero知识点 功能截图 代码实现 1.蛇的表示 2.蛇的前进移动 3.控制移动方向 4.游戏失败 5.食物的随机出现 6.游戏得分 源码 总结 前言 这几年人工智能技术大发展,Python因此几乎成了第一位的语言.实际上,多年来,它不仅在软件工程师中得到广泛使用,也是各行业通用的专家语言,就是说,不管孩子以后做什么,都可能用得着.准备针对我自己上小学的孩子,每周抽出些时间,通过学习他们感兴趣的小游戏,逐步把python知

  • 基于Bootstrap漂亮简洁的CSS3价格表(附源码下载)

    这是一款漂亮简洁的CSS3价格表样式,该价格表基于Bootstrap网格系统来进行布局,通过简单的CSS3代码来美化价格表,样式非常的时尚漂亮,且能在不同屏幕下展示良好的效果. 查看演示     下载源码 HTML 首先在页面中引入bootstrap.min.css文件,这里我用官方的CDN资源,你也可以下载到本地使用. <link rel="stylesheet" href="//cdn.bootcss.com/bootstrap/3.3.5/css/bootstra

  • 基于JavaScript实现添加到购物车效果附源码下载

    我们有很多种方法实现将商品添加到购物车,通常的做法是点击"添加到购物车"按钮,会跳转到购物车,在购物车里可以点击"结算"按钮进行结算.而今天我给大家介绍一个更友好的解决方案. 查看演示 下载源码 默认情况下,购物车是隐藏不可见的,当用户点击添加到购物车按钮后,商品信息会添加到购物车,购物车会以按钮的形式出现在页面右下角,点击按钮则会展开购物车,显示购物车中的商品信息,同时也可以对购物车中的商品进行删除或者结算等操作.用户也可以暂时关闭购物车继续购物. HTML结构

  • python基于tkinter制作无损音乐下载工具(附源码)

    继续写GUI,本次依然使用Tkinter设计一款图形界面,使用Tkinter做一款音乐下载软件,听起来听平常的,但是我这款软件能够下载 无损音乐下载软件,听起来不错吧,Let`s go! 一.准备工作 python Tkinter 二.预览 1.搜索 2.下载 3.结果 无损音乐就这样下载完了. 三.详细设计 这里仅展示我设计的整体思路. 四.源代码 4.1 Music_Search-v1.0.py from tkinter import * from tkinter import ttk fr

  • 基于JS实现数字动态变化显示效果附源码

    先给大家展示下效果,感觉不错,可以参考实现代码,文末附有源码哦. 1.目标 以液晶电子表样式,动态变化的在指定元素内显示数字. 目标关键词:动态变化(定时器),指定元素(DOM元素ID),数字(number) 效果:多个页面元素中,均以动态效果显示不同的数字,可正可负.并动态改变至少一个元素内的数据. 2.基本原理 (1) 液晶电子表样式,找一种液晶电子表字体即可,无须使用别的绘制技巧.  (2) 动态变化则通过使用定时器任务来完成,动态显示要确保变化足够的时长,因此,步长需要根据变化量来进行计

  • 基于JS绘制2021的烟花效果 附源码下载

    该作品是运用到了前端开发的知识内容(JS内容),但是运用到了前段比较后面的知识了,该作品可以用做网页设计的背景是一个不错的选择,以下式该程序运行的效果图,HTML,CSS中多部分的运用与设置,就是单词的字面意思 以下是该作品呈现的效果图: 调用JS使用时,JS里面的内容不需要做过多的研究与了解,只需给你一个JS文件会调用即可,但是HTML,CSS的内容中的至少的单词要知道意思与会运用,以下是HTML部分中的代码(主要还是调用后缀为JS的文件里的内容) <!DOCTYPE html> <h

  • 基于Jquery和CSS3制作数字时钟附源码下载(CSS3篇)

    先给大家展示效果图,感兴趣的朋友可以下载源码哦. 效果演示         源码下载 数字时钟可以应用在一些WEB倒计时效果.WEB闹钟效果以及基于HTML5的WEB APP中,本文将给大家介绍不借助任何图片,如何使用CSS3和HTML来制作一个非常漂亮的数字时钟效果. HTML 我们先在页面中准备一个时钟区域#clock,并且要展示的数字放在.digits中. <div id="clock" class="light"> <div class=&

  • 基于javaweb+jsp的游泳馆会员管理系统(附源码)

    目录 适用 运行环境 开发工具 技术框架 适用 功能说明 源代码 基于javaweb+jsp的游泳馆会员管理系统 JavaWeb JavaBean JSP MVC MySQL Tomcat JavaScript Bootstrap Ajax 基础JSP+Servlet或JSP+SSM(Spring.SpringMVC.MyBatis)框架或JSP+SSM+Maven(pom.xml)框架或SpringBoot…均可 开发工具:eclipse/idea/myeclipse/sts等均可配置运行 适

  • Python基于pygame实现的弹力球效果(附源码)

    本文实例讲述了Python基于pygame实现的弹力球效果.分享给大家供大家参考,具体如下: 运行效果: 代码部分如下: #A bouncing ball import sys, pygame __author__ = {'name' : 'Hongten', 'mail' : 'hongtenzone@foxmail.com', 'QQ' : '648719819', 'Version' : '1.0'} pygame.init() size = width, height = 600, 50

随机推荐