我现在要用c语言编一个课堂点名系统,怎么进行文件的读写呢各位路过的大侠帮忙啊~~~~

我现在要用c语言编一个课堂点名系统,怎么进行文件的读写呢各位路过的大侠帮忙啊~~~~,第1张

可以, 你先用链表或数组(最好是用链表)存取学生数据,然后就进行文件写入(最好是存入二进制文件中dat 因为。txt文件我们可以人为的通过文件打开去修改数据 不安全)然后文件读取, *** 作点名函数,就这样。 至于你说的文件 *** 作不会,可以看书嘛,谭浩强C语言书讲的很清楚。也可以找课件。 汗还是等下面的说吧。

存在1个dat或txt文件就可以了

#include <stdioh>

#define N 50 // 排队人数(可任意更改)

#define CAL 3 //凡报3的人出列(可任意更改)

//下面是排队编号函数:从h 开始的n个人依次编号1到n

void stdline(int h,int n)

{

int i;

for(i=1;i<n+1;i++) (h+i-1)=i;

}

/下面函数表示从指针h处开始的人数为boy个人排队,从1报数,每报到call的人出列/

void outline(int h,int boy,int call)

{

int p, chu, callnum;

/说明:

p 工作指针,表示从头依次指向每个元素,点名

chu 计数器,记录出列的人数

callnum 计数器,记录点名次序

/

chu=0;

callnum=0;//各计数器清零

p=h; //开始时,工作指针指向数组首

printf("出列顺序是:\n");

while(chu<boy)

{

if(p!=0) callnum++; //每次加报数

if(callnum==call) //如果某一个人报到出列数call

{

printf("%5d",p); //打印编号,表示出列

chu++; //出列人数加1

if(chu==boy)//如果全部出列

{

h=p; //把最后一个出列人的编号记入地址开始处

return; //结束

}

if(chu%10==0)printf("\n");//每输出10个换行

callnum=0; //出列后,重新报数

p=0; //出列后,将其编号赋零,以示区别

}

p++; //工作指针移向下一个人,即下一个数组元素

if(p>h+boy-1)p=h;/如果移到最后一个元素的后面,则让指向地址开头继续报数/

}

}

void main()

{

int a[N]; //用数组模拟队列,每个元素代表一个人

stdline(a,N);//编号

outline(a,N,CAL);//计算并打印出列顺序

printf("\n最后留下来的是 %d 号\n",a);/在函数中,已经把最后一个人的编号写入了数组首地址处,

这里输出就可以了/

}

#include <stdioh>

#include <stdlibh>

#include <stringh>

#include <timeh>

#define MAXSTUDENT 100

char Name[MAXSTUDENT][16];

// 读文件内保存的学生姓名

int readName(const char  fileName)

{

int pos, slen;

FILE fp = fopen(fileName, "r");

if(fp == NULL) return 0;

memset(Name, 0, sizeof(Name));

pos = 0;

while(!feof(fp) && pos < MAXSTUDENT)

{

fgets(Name[pos], 16, fp);

slen = strlen(Name[pos]);

if(slen > 0)

{

slen--;

while(Name[pos][slen] == 10 || Name[pos][slen] == 13) Name[pos][slen--] = 0; //去掉字符串后的换行符

pos++;

}

}

printf("读入%d人姓名\n", pos);

fclose(fp);

return pos;

}

void main()

{

char fileName[32];

int  n, pos, loop;

char flag[100];

srand(time(NULL));

printf("请输入学生姓名文件名:");

scanf("%s", fileName);

n = readName(fileName);

if(n==0)

{

printf("读取错误,请确认文件%s是否名是否正确,文件的格式是否正确!\n", fileName);

return;

}

getchar();

memset(flag, 0, sizeof(flag));

while(1)

{

pos = rand() % n;

loop = 0;

while(flag[pos]) // 可以保证每个人都点到一次

{

if(++loop > n) memset(flag, 0, sizeof(flag));

pos = rand() % n;

}

flag[pos] = 1;

printf("点 %s", Name[pos]);

if(getchar() != 10) break;

}

}

查找:我认为,首先把txt文件存在硬盘上,最好在学生前面编上序号,完了用rand(srand)抽取号码。抽取完毕后,用号码对应用c语言函数fscanf查找号码所对应的学生姓名。

删除和添加可以直接在txt里进行。如果非要在程序中的话,用fprintf就可以实现了。

随机点名:从网上下载个汉语的发音包,用c调用即可。

rand(srand)用法:

计算机的随机数都是由伪随机数,即是由小M多项式序列生成的,其中产生每个小序列都有一个初始值,即随机种子。(注意: 小M多项式序列的周期是65535,即每次利用一个随机种子生成的随机数的周期是65535,当你取得65535个随机数后它们又重复出现了。)

我们知道rand()函数可以用来产生随机数,但是这不是真正意义上的随机数,是一个伪随机数,是根据一个数(我们可以称它为种子)为基准以某个递推公式推算出来的一系列数,当这系列数很大的时候,就符合正态公布,从而相当于产生了随机数,但这不是真正的随机数,当计算机正常开机后,这个种子的值是定了的,除非你破坏了系统。

1rand()

功能:随机数发生器

用法:int rand(void)

所在头文件: stdlibh

rand()的内部实现是用线性同余法做的,它不是真的随机数,因其周期特别长,故在一定的范围里可看成是随机的。

rand()返回一随机数值的范围在0至RAND_MAX 间。RAND_MAX的范围最少是在32767之间(int)。用unsigned int 双字节是65535,四字节是4294967295的整数范围。0~RAND_MAX每个数字被选中的机率是相同的。

用户未设定随机数种子时,系统默认的随机数种子为1。

rand()产生的是伪随机数字,每次执行时是相同的;若要不同,用函数srand()初始化它。

2srand()

功能:初始化随机数发生器

用法: void srand(unsigned int seed)

所在头文件: stdlibh

srand()用来设置rand()产生随机数时的随机数种子。参数seed必须是个整数,如果每次seed都设相同值,rand()所产生的随机数值每次就会一样。

3使用当前时钟作为随机数种子

rand()产生的随机数在每次运行的时候都是与上一次相同的。若要不同,用函数srand()初始化它。可以利用srand((unsigned int)(time(NULL))的方法,产生不同的随机数种子,因为每一次运行程序的时间是不同的。

4产生随机数的用法

1) 给srand()提供一个种子,它是一个unsigned int类型;

2) 调用rand(),它会根据提供给srand()的种子值返回一个随机数(在0到RAND_MAX之间);

3) 根据需要多次调用rand(),从而不间断地得到新的随机数;

4) 无论什么时候,都可以给srand()提供一个新的种子,从而进一步“随机化”rand()的输出结果。

0~RAND_MAX之间的随机数程序

#include <iostream>

#include <stdlibh>

#include <timeh>

using namespace std;

int main()

{

srand((unsigned)time(NULL));

for(int i = 0; i < 10;i++ )

cout << rand() << '\t';

cout << endl;

return 0;

}

5产生一定范围随机数的通用表示公式

要取得[a,b)的随机整数,使用(rand() % (b-a))+ a;

要取得[a,b]的随机整数,使用(rand() % (b-a+1))+ a;

要取得(a,b]的随机整数,使用(rand() % (b-a))+ a + 1;

通用公式:a + rand() % n;其中的a是起始值,n是整数的范围。

要取得a到b之间的随机整数,另一种表示:a + (int)b rand() / (RAND_MAX + 1)。

要取得0~1之间的浮点数,可以使用rand() / double(RAND_MAX)。

界面可用switch函数选择

以上就是关于我现在要用c语言编一个课堂点名系统,怎么进行文件的读写呢各位路过的大侠帮忙啊~~~~全部的内容,包括:我现在要用c语言编一个课堂点名系统,怎么进行文件的读写呢各位路过的大侠帮忙啊~~~~、C语言例程、c语言课堂随机点名等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/zz/9608115.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-30
下一篇2023-04-30

发表评论

登录后才能评论

评论列表(0条)

    保存