iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >基于C语言实现随机点名器(附源码)
  • 151
分享到

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

2024-04-02 19:04:59 151人浏览 独家记忆
摘要

突发奇想写了个随机点名器…以供使用 随机点名器 main函数 #include "myList.h" #define FILENAME "stu.txt" voi

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

随机点名器

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语言随机点名器内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: 基于C语言实现随机点名器(附源码)

本文链接: https://www.lsjlt.com/news/165383.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 基于C语言实现随机点名器(附源码)
    突发奇想写了个随机点名器…以供使用 随机点名器 main函数 #include "myList.h" #define FILENAME "stu.txt" voi...
    99+
    2024-04-02
  • C语言实现数独辅助器(附源码)
    目录数独游戏介绍数独辅助器编写思路效果图源码数独游戏介绍 数独是源自瑞士的一种数学游戏。是一种运用纸、笔进行演算的逻辑游戏。玩家需要根据 9×9 盘面上的已知数字,推理出...
    99+
    2023-01-11
    C语言实现数独辅助器 C语言数独辅助器 C语言数独
  • 基于Python实现随机点名系统的示例代码
    目录效果展示代码展示导入模块子线程调用应用初始化信息姓名信息布局开始信息布局数据信息布局整体布局运行 大家好,我是了不起! 在某些难以抉择得时候,我们经常要用外力来帮助我们...
    99+
    2023-05-14
    Python实现随机点名系统 Python随机点名系统 Python随机点名
  • 基于Python怎么实现随机点名系统
    效果展示创建一个这样的文件夹,然后把要随机点名的名字写在里面导入后,这里就显示你导入了多少人员信息点击开始点名后,会随机从导入名字里挑选一位幸运儿~效果大概就是这样,下面我们来看看代码吧代码展示导入模块里面有第三方模块,需要大家自己安装一下...
    99+
    2023-05-24
    Python
  • C语言实现扫雷游戏详解(附源码)
    目录1.游戏的功能 2.游戏实现的基本思路2.1实现菜单给玩家选择2.2初始化棋盘2.3数组大小的问题2.4对棋盘赋值2.5打印棋盘2.6布置雷2.7排查雷3.代码基本实现...
    99+
    2024-04-02
  • 基于C语言实现http下载器
    目录功能思路缺陷代码C语言实现http的下载器。 例:做OTA升级功能时,我们能直接拿到的往往只是升级包的链接,需要我们自己去下载,这时候就需要用到http下载器。 这里分享一个: ...
    99+
    2022-12-28
    C语言http下载器 C语言http下载 C语言 下载器
  • 基于C语言实现关机小游戏的示例代码
    目录关机会写吧猜数字会写吧那么合起来实际效果关机会写吧 #include <stdlib.h> #include <string.h> #include &l...
    99+
    2024-04-02
  • C语言实现随机抽奖程序
    本文实例为大家分享了C语言实现抽奖小程序的具体代码,供大家参考,具体内容如下 #include<stdio.h> #include<stdlib.h> #...
    99+
    2024-04-02
  • 基于C语言实现2048游戏
    本文实例为大家分享了C语言实现2048游戏的具体代码,供大家参考,具体内容如下 #include <stdio.h> #include <stdlib.h>...
    99+
    2024-04-02
  • C语言实现扫雷附完整代码
    目录一、理清逻辑二、创建文件三、具体步骤1.打印菜单2.创建二维数组3.初始化二维数组并打印棋盘4.布置雷5.排查雷(内含判断胜负)四、完整代码五、待改进一、理清逻辑 我们先来看一下...
    99+
    2024-04-02
  • 基于Java实现互联网实时聊天系统(附源码)
    目录0. 前言1、技术准备2. 整体说明2.1 设计思想2.2 系统结构2.3 项目结构2.4 系统功能模块2.5 系统界面3. 核心编码3.1 Netty服务器启动与关闭4. 效果...
    99+
    2024-04-02
  • C语言基于graphics.h实现圣诞树
    头文件 icon.h: #pragma once #ifndef _ICON_H_ #define _ICON_H_ #include<graphics.h> #...
    99+
    2024-04-02
  • C语言基于EasyX实现贪吃蛇
    本文实例为大家分享了C语言基于EasyX实现贪吃蛇的具体代码,供大家参考,具体内容如下 成品展示: 实现思路: 贪吃蛇的实现思路并不复杂,由于我们需要将数据展示在图形窗口上,因此就...
    99+
    2024-04-02
  • C语言实现随机抽取纸牌程序
    本文实例为大家分享了C语言实现随机抽取纸牌的具体代码,供大家参考,具体内容如下 程序设计要求 本程序负责发一副标准纸牌,每张标准纸牌都有一种花色(梅花、方块、黑桃、红桃)和一个等级(...
    99+
    2024-04-02
  • C语言怎么实现随机抽奖程序
    要实现随机抽奖程序,可以按照以下步骤进行:1. 导入头文件:```c#include #include #include ```2....
    99+
    2023-08-18
    C语言
  • C语言实现简单扫雷源码
    扫雷是一款大家都熟知的小游戏,今天我们将使用c语言实现一个简易版本的扫雷 需要的功能 1.保证第一次下子时,不被炸死 2.输入的坐标周围没雷,可以直接展开周围的坐标 3.输入的坐标周...
    99+
    2024-04-02
  • C语言如何实现随机读写文件
    这篇文章主要讲解了“C语言如何实现随机读写文件”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“C语言如何实现随机读写文件”吧!1.fseek前面已经剧透过了,fseek可以改变记录读写位置的指...
    99+
    2023-07-05
  • 基于C语言实现迷宫游戏的示例代码
    目录C语言迷宫游戏定义地图打印地图方法一打印地图方法二定义起点和终点位置实现读取按键实现小球下向下移动一步总结小球移动规律实现重新打印地图实现连续移动实现小球下向上下左右移动实现小球...
    99+
    2024-04-02
  • C++基于OpenCV实现手势识别的源码
    先给大家上效果图: 源码在下面 使用 RGB 值分割手部区域,即手部的 GB 值将与背景不同 或者使用边缘检测 或者 背景减法。  我这里使用了背景减法模型。OpenC...
    99+
    2024-04-02
  • 基于C语言实现猜数字游戏
    前言 系统生成一个【1,100】之间数字,用户随便输入一个整数,如果用户输入的数字比系统生成的数字小,提示“猜低了”,如果用户输入的数字比系统生成的数字大提示猜高了,如果相同,提示猜...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作