上课随机点名系统Word格式文档下载.docx
《上课随机点名系统Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《上课随机点名系统Word格式文档下载.docx(16页珍藏版)》请在冰点文库上搜索。
高级语言程序设计?
课程后进展的一次全面的综合性上机实验。
其目的在于为同学提供了一个既动手又动脑,独立实践的时机,将课本上的理论知识和实际有机的结合起来,锻炼同学的分析解决实际问题的能力。
提高学生适应实际,实践编程的能力。
二、题目:
教师上课点名系统
制作一个自动点名系统使之有以下功能:
1、每次选取相应的功能,系统随即抽取一个学生,显示给教师,用做点名。
2、学生存在一个文本文件students.txt中。
3、可以使用另一个文本文件,记录学生被点名的次数,或在students.txt文件中参加一个记录学生被点名次数的字段。
4、一般用文本界面显示菜单,自行设计和完成菜单功能,供教师点选,可以考虑动态显示系统选择的过程,最好能设计成图形界面。
5、每个学生被点中的概率和次数尽量一样,不能出现一个学生被点两次了,还有学生没被点中的情况。
三、总体设计
根据分析,整个系统可以设计为以下四个局部:
四、详细设计
1、构造体
structstudent
{
intnum;
charname[20];
inttime;
}std[SIZE];
2、主函数
主函数的设计用来翻开文本文件,并提供数据输入和数据处理以及三个函数的调用,其中各功能模块用菜单方式选择。
voidmain()
voidfunction1();
voidfunction2();
voidfunction3();
}
主函数具体的程序如下:
voidkaishidianming();
voiddianmingcishu();
voidcishuguiling();
/*对被调用函数的声明*/
chars;
FILE*fp;
if((fp=fopen("
D:
\\c\\kechengsheji\\students.txt"
"
r+"
))==NULL)
{
printf("
cannotopenthisfile\n"
);
exit(0);
}/*翻开文本文件*/
for(i=0;
i<
SIZE;
i++)
fscanf(fp,"
%d%s"
&
std[i].num,std[i].name);
std[i].time=0;
}/*读取文本文件保存在内存中*/
printf("
-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*\n"
-*-*-*-*-*-点名了请小心!
-*-*-*-*-*-\n"
-*-*-*输入1:
开场点名*-*-*-\n"
-*-*-*输入2:
点名情况*-*-*-\n"
-*-*-*输入3:
次数归零*-*-*-\n"
-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*\n\n"
for(;
;
)
{
s=getchar();
switch(s)
{
case'
1'
:
kaishidianming();
break;
case'
2'
dianmingcishu();
3'
cishuguiling();
}/*使用switch语句进展选择实现不同函数功能*/
}
fclose(fp);
主函数的流程图如下:
3、各功能模块设计
〔1〕点名模块
voidkaishidianming()
l++;
k=k+l/(SIZE+1);
loop:
srand((unsigned)time(NULL));
/*产生随机数进展点名*/
for(m=0;
m<
1;
m++)
n=rand()%57;
if(std[n].time<
k)/*实现公平点名防止有人没点到有人被点屡次的情况产生*/
std[n].time++;
printf("
学号\t\tXX\t\t被点次数\n"
%d%-15d%-10s%10d\n"
t,std[n].num,std[n].name,std[n].time);
elsegotoloop;
}
}点名模块流程图如下:
不公平
〔2〕次数统计模块
voiddianmingcishu()
t,std[i].num,std[i].name,std[i].time);
〔3〕次数清零模块
voidcishuguiling()
k=1;
l=0;
点名次数已归零\n"
五、上机操作
1、进入界面
2、进展点名
3、点名次数查询
4、次数归零
学习心得
在以前C程序设计的学习中,我们只需要写几个简单的程序,完成一些简单的功能,输入手段也都是单一的从键盘输入,从未涉及到对文件的操作,所以书本上九、十章的内容根本上没怎么掌握。
但是通过这次C语言课程设计的学习,我感受到了单独完成一个程序去实现一个目的快乐,也增强了对于C语言相关知识的了解。
当然,过程不是一帆风顺的。
为了完成程序,由于对文件操作内容的不熟悉,我首先把课本看了几遍,弄清楚了一些根本的知识。
还有在程序编写的过程中,错误频出,虽然经常是一些简单的问题,但寻找错误的过程总是那么的痛苦。
所以,经过这次C语言课程设计,我深深的感受到了耐心和细心在程序编写中的重要性。
最后祝贺自己完成了程序!
六、算法和系统的优缺点
此系统最大的有点是简明易懂,操作方便,在一次点名过程中,实现了点名的公平性。
但每次退出点名系统后,不能对点名次数进展保存,不便于调用。
改良思路:
可以用一个文件,将点名的次数进展保存。
七、源程序〔附录〕
#include<
stdio.h>
stdlib.h>
math.h>
time.h>
#defineSIZE57
inti,n,m;
intk=1,l=0,t=0;
/*全局变量的定义*/
/*构造体数组的定义*/
exit(0);