最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

基于C語(yǔ)言實(shí)現(xiàn)隨機(jī)點(diǎn)名器(附源碼)

 更新時(shí)間:2022年07月27日 11:48:36   作者:草木之花  
這篇文章主要為大家詳細(xì)介紹如何基于C語(yǔ)言實(shí)現(xiàn)一個(gè)簡(jiǎn)單的隨機(jī)點(diǎn)名器,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起動(dòng)手嘗試一下

突發(fā)奇想寫了個(gè)隨機(jī)點(diǎn)名器…以供使用

隨機(jī)點(diǎn)名器

main函數(shù)

#include "myList.h"

#define FILENAME "stu.txt"

void menu();//畫面界面;
void userOptions(Node* headNode);//用戶選項(xiàng)

int main(void) {
	SetConsoleTitle(L"隨機(jī)抽查系統(tǒng)");
	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學(xué)生點(diǎn)名系統(tǒng)\n");
	printf("\t\t1)開始隨機(jī)抽查"
		"\t\t2)添加學(xué)生\n"
		"\t\t3)刪除學(xué)生"
		"\t\t4)修改學(xué)生信息\n"
		"\t\tq)退出\n");
	printf("請(qǐng)輸入你的選項(xiàng):");

}

void userOptions(Node* List) {
	Student info;

	char choose = '0';

	choose = enter();

	switch (choose) {

	case '1':
		printf("\t\t\t*開始隨機(jī)抽查*\n");
		
		seekNode(List, rollCall(LengthNode(List)));
		break;
	case '2':

		printf("\t\t\t\t\t\t已有學(xué)生如下\n");
		printfNode(List);
		printf("\t\t\t*添加學(xué)生*\n");
		printf("注意請(qǐng)從%d之后開始也就是%d\n", LengthNode(List),LengthNode(List)+1);
		printf("\t\t請(qǐng)輸入學(xué)生序號(hào):");

		scanf_s("%d",&info.num);
		
		printf("\t\t請(qǐng)輸入學(xué)生學(xué)號(hào):");
		scanf_s("%ld", &info.number);
		printf("\t\t請(qǐng)輸入學(xué)生姓名:");
		scanf_s("%s", info.name, sizeof(info.name));
		insetNodeByHead(List, info);

		break;
	case '3':
		printf("\t\t\t\t\t\t已有學(xué)生如下\n");
		printfNode(List);
		printf("\t\t\t*刪除學(xué)生*\n");
		printf("\t\t請(qǐng)輸入學(xué)生學(xué)號(hào)(后兩位即可):");
		scanf_s("%ld", &info.number);
		deleteNodeAppoinNumber(List, info.number);
		break;
	case'4':
		printf("已有學(xué)生如下\n");
		printfNode(List);
		printf("\t\t\t*修改學(xué)生信息*\n");
		printf("\t\t請(qǐng)輸入學(xué)生學(xué)號(hào):");
		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

(這個(gè)就是我自己寫來(lái)玩的,讀取輸入的字符,你們也可以自己弄一個(gè),就可以不用我這個(gè)了。但是要記得修改一下引用這個(gè)的代碼喔)

#pragma once  //防止重復(fù)引用
#include "myList.h" 



//處理寫入
char enter(void); //函數(shù)聲明


char enter(void) {
	short count = 1;//次數(shù)

	char input = getchar(); // 讀取單個(gè)字符
	fflush(stdin);//清空輸入緩存區(qū),防止讀取后,又讀取

	for (int i = 1; i <= 12; i++) {//如果超過(guò)誤輸入超過(guò)13次,強(qiáng)制退出程序

		if (input == '\n') {//如果讀取的一直是回車,就會(huì)執(zhí)行,否則返回該值
			count++;

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

			fflush(stdin);

			if (count == 5) {
				printf("\n\t\t\t\t\t\t別再調(diào)皮了!\n");
				continue;
			}
			else if (count == 11) {
				printf("\n\t\t\t\t\t\t別在摁回車鍵了!最后一次機(jī)會(huì)了\n");
				continue;

			}
			else if (count == 13) {

				printf("\n\t\t\t\t\t\t程序已強(qiáng)制退出!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;//給定一個(gè)序號(hào)然后添加一個(gè)學(xué)生后就自加1;

}Student;

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

}Node;





//創(chuàng)建鏈表
Node* createrList(void) {

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

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

	return headNode;
}


//創(chuàng)建結(jié)點(diǎn)
Node* createrNode(Student data) {

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

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

	return newNode;
}

//插入結(jié)點(diǎn)
void insetNodeByHead(Node* headNode, Student data) {

	Node* newNode = createrNode(data);

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

}

//刪除結(jié)點(diǎn)
void deleteNodeAppoinNumber(Node* headNode, long int number) {
	Node* posNode = headNode->next;
	Node* posFrontNode = headNode;

	if (posNode == NULL) {
		printf("\t\t表中沒(méi)有學(xué)生\n");
	}
	else {

		while (posNode->data.number != number) {//沒(méi)有找到就繼續(xù)找
			posFrontNode = posNode;
			posNode = posNode->next;

			if (posNode == NULL) {//找完最后一個(gè)了還沒(méi)有
				printf("\t\t表中沒(méi)有該學(xué)生\n");
				return;
			}
		}

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


}

//修改結(jié)點(diǎn)
void upDataNode(Node* headNode, long int number) {
	Node* posNode = headNode->next;
	Node* posFrontNode = headNode;

	char choose = '0';

	if (posNode == NULL) {
		printf("\t\t該表中沒(méi)有學(xué)生\t");
	}
	else {
		while (posNode->data.number != number) {
			posFrontNode = posNode;
			posNode = posNode->next;

			if (posNode == NULL) {
				printf("\t\t表中沒(méi)有該學(xué)生\n");
				return;

			}
		}

		while (true) {
			printf("\t\t請(qǐng)選擇要修改的選項(xiàng):1)姓名  2)學(xué)號(hào)  q)退出!\n");
			printf("\t\t請(qǐng)輸入:");
			choose = enter();


			switch (choose) {
			case '1':
				printf("\t\t請(qǐng)輸入你要更改的名字(原姓名是%s):", posNode->data.name);
				scanf_s("%s", posNode->data.name, sizeof(posNode->data.name));
				system("pause");
				break;
			case '2':
				printf("\t\t請(qǐng)輸入你要更改的學(xué)號(hào)(原學(xué)號(hào)是%ld):", posNode->data.number);
				scanf_s("%ld", &posNode->data.number);
				system("pause");
				break;
			case 'q':
				printf("\t\tquit!");
				return;
			default:
				printf("請(qǐng)輸入正確選項(xiàng):");
				break;
			}
		}

	}




}
//打印結(jié)點(diǎn)
void printfNode(Node* headNode) {
	Node* pMove = headNode->next;


	printf("\t\t\t\t\t\t\t\t學(xué)號(hào)\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;
}



//求出鏈表長(zhǎng)度然后返回
int LengthNode(struct Node* headNode) {
	int length = 0;

	struct Node* pMove = headNode->next;

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

	}

	return length;
}



//讀取隨機(jī)數(shù)然后選出該學(xué)生
void seekNode(Node* headNode, long int rand_1) {
	Node* posNode = headNode->next;
	Node* posFrontNode = headNode;

	if (posNode == NULL) {
		printf("\t\t該表中沒(méi)有學(xué)生\t");
	}
	else
	{	//這里的number改為num
		while (posNode->data.num != rand_1) {
			posFrontNode = posNode;
			posNode = posNode->next;
			if (posNode == NULL) {
				printf("\t\t該表中沒(méi)有這這個(gè)學(xué)號(hào)(%ld)的學(xué)生\n", rand_1);
				return;
			}
		}


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


}


//產(chǎn)生隨機(jī)數(shù)
long int rollCall(long int length) {
	long int number;
	srand((unsigned)time(NULL));
	number = rand() % length + 1;//33+40;//length+1
	return number;
}

到此這篇關(guān)于基于C語(yǔ)言實(shí)現(xiàn)隨機(jī)點(diǎn)名器(附源碼)的文章就介紹到這了,更多相關(guān)C語(yǔ)言隨機(jī)點(diǎn)名器內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 距離詳解Linux下的UDP方式通訊

    距離詳解Linux下的UDP方式通訊

    這篇文章主要介紹了距離詳解Linux下的UDP方式通訊,是深入Linux系統(tǒng)編程中的基礎(chǔ),需要的朋友可以參考下
    2015-10-10
  • 使用C++程序獲取新浪行情數(shù)據(jù)的方法

    使用C++程序獲取新浪行情數(shù)據(jù)的方法

    這篇文章介紹了在一定的周期范圍內(nèi)去抓取新浪中行情數(shù)據(jù),通過(guò)更新數(shù)據(jù)來(lái)緩解構(gòu)造模擬數(shù)據(jù)與真實(shí)數(shù)據(jù)差異性,感興趣的朋友可以了解一下
    2015-07-07
  • sigsetjmp的用法總結(jié)

    sigsetjmp的用法總結(jié)

    sigsetjmp()會(huì)保存目前堆棧環(huán)境,然后將目前的地址作一個(gè)記號(hào),而在程序其他地方調(diào)用siglongjmp()時(shí)便會(huì)直接跳到這個(gè)記號(hào)位置,然后還原堆棧,繼續(xù)程序的執(zhí)行
    2013-09-09
  • 獲取本地網(wǎng)卡適配器信息具體代碼

    獲取本地網(wǎng)卡適配器信息具體代碼

    這篇文章主要介紹了獲取本地網(wǎng)卡適配器信息具體代碼,有需要的朋友可以參考一下
    2013-12-12
  • 舉例剖析C++中引用的本質(zhì)及引用作函數(shù)參數(shù)的使用

    舉例剖析C++中引用的本質(zhì)及引用作函數(shù)參數(shù)的使用

    這篇文章主要介紹了C++中引用的本質(zhì)及引用作函數(shù)參數(shù)的使用,講解了函數(shù)返回值是引用的情況等一些難點(diǎn),需要的朋友可以參考下
    2016-03-03
  • c++ 預(yù)處理的圖靈完備之引言

    c++ 預(yù)處理的圖靈完備之引言

    這篇文章主要介紹了c++ 預(yù)處理的圖靈完備之引言,需要的朋友可以參考下
    2017-07-07
  • C++11?constexpr使用詳解

    C++11?constexpr使用詳解

    constexpr是一種比const?更嚴(yán)格的束縛,?它修飾的表達(dá)式本身在編譯期間可知,?并且編譯器會(huì)盡可能的?evaluate?at?compile?time,本文重點(diǎn)給大家介紹C++11?constexpr使用,需要的朋友可以參考下
    2021-12-12
  • C++實(shí)現(xiàn)宿舍管理查詢系統(tǒng)

    C++實(shí)現(xiàn)宿舍管理查詢系統(tǒng)

    這篇文章主要為大家詳細(xì)介紹了C++實(shí)現(xiàn)宿舍管理查詢系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-03-03
  • C++ 中的new 和 delete 運(yùn)算符及new和malloc的區(qū)別解析

    C++ 中的new 和 delete 運(yùn)算符及new和malloc的區(qū)別解析

    在C++中,又引出了一個(gè)新玩法:new 和 delete,在C++中,new是用來(lái)動(dòng)態(tài)開辟內(nèi)存的,delete是用來(lái)釋放我們所動(dòng)態(tài)開辟的內(nèi)存C++中的new和delete運(yùn)算符及new和malloc的區(qū)別解析,感興趣的朋友跟隨小編一起看看吧
    2024-11-11
  • 關(guān)于虛函數(shù)實(shí)現(xiàn)多態(tài)的原理及分析

    關(guān)于虛函數(shù)實(shí)現(xiàn)多態(tài)的原理及分析

    這篇文章主要介紹了C++中如何實(shí)現(xiàn)多態(tài)問(wèn)題,具有很好的參考價(jià)值,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-02-02

最新評(píng)論

昆山市| 舒城县| 苍梧县| 井研县| 密云县| 扎兰屯市| 常熟市| 江孜县| 祁门县| 合阳县| 桐乡市| 富源县| 台北市| 石城县| 邻水| 嘉峪关市| 中江县| 澎湖县| 威远县| 获嘉县| 达州市| 光山县| 白银市| 锡林浩特市| 汝阳县| 肇庆市| 道孚县| 苍山县| 柘荣县| 南阳市| 永安市| 江华| 太保市| 松桃| 清远市| 洪湖市| 邵东县| 于都县| 鸡泽县| 呼图壁县| 兰州市|