这篇文章主要为大家详细介绍如何基于C语言实现一个简单的随机点名器,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起动手尝试一下
突发奇想写了个随机点名器…以供使用
随机点名器
主要的函数
#包含" myList.h "
#定义文件名' stu.txt '
void menu();//画面界面;
void用户选项(节点*头节点);//用户选项
int main(void) {
SetConsoleTitle(L '随机抽查系统');
node * List=createrList();
readInfoFromFile(列表,文件名);
while (true) {
menu();
用户选项(列表);
系统("暂停");
系统(“cls”);
}
系统("暂停");
返回0;
}
空的菜单(){
printf('\t\t\t学生点名系统\ n’);
printf('\t\t1)开始随机抽查'
\t\t2)添加学生\n '
\t\t3)删除学生'
\t\t4)修改学生信息\n '
\t\tq)退出\ n’);
printf('请输入你的选项:');
}
void userOptions(Node* List) {
学生信息;
char choose=" 0
choose=enter();
切换(选择){
案例"1":
printf('\t\t\t*开始随机抽查* \ n ');
seekNode(List,roll call(length node(List)));
打破;
案例"2":
printf('\t\t\t\t\t\t已有学生如下\ n’);
printfNode(列表);
printf('\t\t\t*添加学生* \ n ');
printf('注意请从%d之后开始也就是%d\n ',LengthNode(List),length node(List)1);
printf('\t\t请输入学生序号:');
scanf_s('%d ',信息。num);
printf('\t\t请输入学生学号:');
scanf_s('%ld ',信息。号);
printf('\t\t请输入学生姓名:');
scanf_s('%s ',info.name,sizeof(info。姓名));
insetNodeByHead(List,info);
打破;
案例"3":
printf('\t\t\t\t\t\t已有学生如下\ n’);
printfNode(列表);
printf('\t\t\t*删除学生* \ n ');
printf('\t\t请输入学生学号(后两位即可):');
scanf_s('%ld ',信息。号);
deletenodeapoinnumber(列表,信息。号);
打破;
案例"4":
printf('已有学生如下\ n’);
printfNode(列表);
printf('\t\t\t*修改学生信息* \ n ');
printf('\t\t请输入学生学号:');
scanf_s('%ld ',信息。号);
更新节点(列表,信息。号);
打破;
案例“问”:
printf(' \ t \ t退出!\ n’);
退出(0);
打破;
默认值:
打破;
}
weiteInfoToFile(列表,文件名);
}
enter.h
(这个就是我自己写来玩的,读取输入的字符,你们也可以自己弄一个,就可以不用我这个了。但是要记得修改一下引用这个的代码喔)
#pragma once //防止重复引用
#包含" myList.h "
//处理写入
char enter(void);//函数声明
char enter(void) {
短计数=1;//次数
char input=getchar();//读取单个字符
fflush(stdin);//清空输入缓存区,防止读取后,又读取
for(int I=1;i=12i ) {//如果超过误输入超过13次,强制退出程序
if (input=='\n') {//如果读取的一直是回车,就会执行,否则返回该值
数数;
scanf_s('%c ',输入,3);
fflush(stdin);
if (count==5) {
printf('\n\t\t\t\t\t\t别再调皮了!\ n’);
继续;
}
else if (count==11) {
printf('\n\t\t\t\t\t\t别在摁回车键了!最后一次机会了\ n’);
继续;
}
else if (count==13) {
printf('\n\t\t\t\t\t\t程序已强制退出!拜拜’);
退出(0);
}
}
否则{返回输入;}
}
返回0;
}
myList.h
#杂注一次
#包含标准视频
#包含标准库
#包含标准布尔
#包含时间。h
#包含windows.h
#include 'enter.h '
typedef结构学生{//类型
长整型数;
char name[10];
int num//给定一个序号然后添加一个学生后就自加1;
}学生;
typedef结构节点{
学生数据;
结构节点*下一个
}节点;
//创建链表
Node* createrList(void) {
Node *头节点=(Node *)malloc(sizeof(Node));
if (headNode) {
头节点-next=NULL;
}
返回头节点
}
//创建结点
Node* createrNode(学生数据){
Node * new节点=(Node *)malloc(sizeof(Node));
if (newNode) {
新节点-数据=数据;
new node-next=NULL;
}
返回新节点
}
//插入结点
void insetNodeByHead(Node * head Node,学生数据){
Node* newNode=createrNode(数据);
新节点-下一个=头节点-下一个;
头节点-next=新节点;
}
//删除结点
void deletenodeapoinnumber(Node * head Node,long int number) {
节点* pos节点=头节点-下一个;
Node * posFrontNode=headNode
if (posNode==NULL) {
printf('\t\t表中没有学生\ n’);
}
否则{
while (posNode-data.number!=number) {//没有找到就继续找
posFrontNode=posNode
pos node=pos node-next;
if (posNode==NULL) {//找完最后一个了还没有
printf('\t\t表中没有该学生\ n’);
返回;
}
}
//找到了,执行删除操作
pos前节点-下一个=pos节点-下一个;
免费(pos节点);
printf('\t\t删除完成!');
}
}
//修改结点
void upDataNode(Node* headNode,long int number) {
节点* pos节点=头节点-下一个;
Node * posFrontNode=headNode
char choose=" 0
if (posNode==NULL) {
printf('\t\t该表中没有学生\ t ');
}
否则{
while (posNode-data.number!=数字){
posFrontNode=posNode
pos node=pos node-next;
if (posNode==NULL) {
printf('\t\t表中没有该学生\ n’);
返回;
}
}
while (true) {
printf('\t\t请选择要修改的选项:1)姓名2)学号问)退出!\ n’);
printf('\t\t请输入:');
choose=enter();
切换(选择){
案例"1":
printf('\t\t请输入你要更改的名字(原姓名是%s):',位置节点数据。姓名);
scanf_s('%s ',posNode-data.name,sizeof(pos node-data。姓名));
系统("暂停");
打破;
案例"2":
printf('\t\t请输入你要更改的学号(原学号是%ld):',位置节点数据。号);
scanf_s('%ld ',位置节点数据。号);
系统("暂停");
打破;
案例“问”:
printf(' \ t \ t退出!');
返回;
默认值:
printf('请输入正确选项:');
打破;
}
}
}
}
//打印结点
void printfNode(Node* headNode) {
node * p move=头节点-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 \ t \ t % LD \ t % s \ n ',pMove-data.number,pMove-data。姓名);
p move=p move-next;
}
printf(' \ n ');
}
//文件读
bool readInfoFromFile(Node * head Node,char* fileName) {
学生数据;
布尔一=假;
文件* 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);
返回0;
}
//文件写
bool weitein fotofile(节点*头节点,字符*文件名){
文件* fp
fopen_s(fp,fileName,' w ');
node * p move=头节点-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。姓名);
p move=p move-next;
}
if(FP==NULL){ return EOF;}
fclose(FP);
返回0;
}
//求出链表长度然后返回
int length节点(结构节点*头节点){
int length=0;
struct Node * p move=head Node-next;
while (pMove) {
长度;
p move=p move-next;
}
返回长度;
}
//读取随机数然后选出该学生
void seekNode(Node* headNode,long int rand_1) {
节点* pos节点=头节点-下一个;
Node * posFrontNode=headNode
if (posNode==NULL) {
printf('\t\t该表中没有学生\ t ');
}
其他
{//这里的数字改为数字
while (posNode-data.num!=rand_1) {
posFrontNode=posNode
pos node=pos node-next;
if (posNode==NULL) {
printf('\t\t该表中没有这这个学号(%ld)的学生\n ',rand _ 1);
返回;
}
}
printf('就决定是你了-');
printf('\t\t%ld\t%s\n\n\n ',posNode-data.number,posNode-data。姓名);
}
}
//产生随机数
长整型点名(长整型长度){
长整型数;
srand((无符号)时间(空));
number=rand()% length 1;//33 40;//长度一
退货数量;
}
到此这篇关于基于C语言实现随机点名器(附源码)的文章就介绍到这了,更多相关C语言随机点名器内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。