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

随机点名器


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改为numwhile (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+1return number;
}

Done!

有问题就评论,提出喔,感谢改正!!!

要坚持哦!

c语言随机点名器(源码)相关推荐

  1. 易语言随机生成MAC源码

    这里推荐一个生成随机模拟MAC的源码,非常简洁实用,比如我们在hook物理网卡地址时,需要生成这样的效果. 易语言api hook GetAdaptersAddresses 劫持网卡物理地址 测试输入 ...

  2. c语言案例分析105,C语言实战105例源码

    C语言实战105例源码 以下程序大家如有兴趣可在文件夹下载即可 第1部分 基础篇 实例1 一个价值"三天"的BUG 2 实例2 灵活使用递增(递减)操作符 5 实例3 算术运算符计 ...

  3. php+api抖音随机播放视频源码

    简介: php+api抖音随机播放视频源码,前端纯静态html+css,数据采用php+API接口调用第三方数据,不需要配置环境,上传即用. 源码体积小,视频采集自网络,无视频资源,内置多条播放线路. ...

  4. 易语言窗口c_句柄取进程名,易语言窗口句柄取进程文件名源码

    窗口句柄取进程文件名系统结构:句柄取进程文件名,CreateToolhelp32Snapshot,GetWindowThreadProcessId,CloseHandle,Module32First, ...

  5. 计算机毕业设计Java-ssmC语言教学辅导网站源码+系统+数据库+lw文档

    计算机毕业设计Java-ssmC语言教学辅导网站源码+系统+数据库+lw文档 计算机毕业设计Java-ssmC语言教学辅导网站源码+系统+数据库+lw文档 本源码技术栈: 项目架构:B/S架构 开发语 ...

  6. 舔狗日记随机展示网站源码

    最近各种日记挺火的 什么 舔狗.保安.小偷...主要是在首页使用了js,首页添加了一个"再来一段"按钮,无需刷新即可实现显示新的内容.至于舔狗日记内容,存放在index.js文件里 ...

  7. mysql数据库+易语言的应用_易语言mysql数据应用源码

    易语言mysql数据应用源码 易语言mysql数据应用源码 系统结构:注册账号,连接Mysql,用户注册验证码,修改密码验证码,忘记密码验证码,修改密码,忘记密码, ======窗口程序集1 | | ...

  8. 易语言json置入_易语言json操作模块源码

    易语言json操作模块源码 系统结构:初始化,解析,到文本,置属性,置属性对象,置属性数值,取属性数值,取属性对象,取通用属性,取属性,成员数,加成员,取成员,取成员文本,置成员,删成员,置类型,赋值 ...

  9. 易语言QQpost加好友源码

    易语言QQpost加好友源码 以下是部分代码 .版本 2 .支持库 specGetQq (主动添加QQ) QQ空间页面 = 编码_Utf8到Ansi (网页_访问_对象 ("https:// ...

最新文章

  1. Apache ab测试工具使用方法(无参、get传参、post传参)
  2. esp32 怎么分配freertos 堆栈大小_嵌入式开发入门-从STM32CudeMX、FreeRtos、Proteu仿真开始...
  3. 计算机系统-电路设计06-振荡器的内部电路实现
  4. Waymo真·无人车上路了!没司机的出租车推出在即 | 多图实拍
  5. 编写高效优雅Java程序
  6. DPDK初始化分析(三)
  7. c语言循环重新输入Y,大佬们帮帮忙 帮我改改 怎样能在输入Y后 再次进行for循环...
  8. 剖析基于TUN/TAP虚拟网卡游戏加速器原理
  9. C语言 递归求20的阶乘
  10. 电子书格式问题的本质
  11. 软件学院本科毕业设计论文格式详解
  12. 软件测试——开发模型、测试模型介绍
  13. twitter跳过手机验证_安卓怎么注册推特账号(twitter跳过手机验证)
  14. 农村信用社答题小程序
  15. 了解传统教育培训机构的痛点
  16. stm8下载程序(使用ST-LINK下载器和STVP下载软件)
  17. 数据湖与数据仓库:主要差异
  18. 面试问接口如何测试?
  19. 写代码时尽量少用复制粘贴(ctrl+c, ctrl+v)
  20. Invalid data found when processing input

热门文章

  1. unity验证手机号和邮箱是否合法
  2. 图片编辑用什么软件?快把这些软件收好
  3. Java输出时间为12小时制,带上PM/AM 或 上午/下午
  4. Linux无法阅读caj文件解决办法之一(下载pdf文件)
  5. WRF模式运行的流程以及简单错误的避免
  6. 七月在线机器学习单选刷(二)
  7. 面试被问项目经验不用慌,按这个步骤回答绝对惊艳
  8. 推荐系统评价:NDCG方法概述
  9. 在线域名批量查询工具-未注册域名批量查询软件
  10. 包涵万数,无需时操作稳定,有需时,结论瞬息万变。