上课随机点名系统.docx

上传人:b****9 文档编号:25343528 上传时间:2023-06-07 格式:DOCX 页数:15 大小:616.54KB
下载 相关 举报
上课随机点名系统.docx_第1页
第1页 / 共15页
上课随机点名系统.docx_第2页
第2页 / 共15页
上课随机点名系统.docx_第3页
第3页 / 共15页
上课随机点名系统.docx_第4页
第4页 / 共15页
上课随机点名系统.docx_第5页
第5页 / 共15页
点击查看更多>>
下载资源
资源描述

上课随机点名系统.docx

《上课随机点名系统.docx》由会员分享,可在线阅读,更多相关《上课随机点名系统.docx(15页珍藏版)》请在冰豆网上搜索。

上课随机点名系统.docx

上课随机点名系统

C语言课程设计实习报告

 

专业:

地球物理与空间信息学院

学号:

班级序号:

姓名:

***

指导教师:

张*

C语言程序设计报告

(实习日期:

2013-12至2014-1)

 

一、C语言课程设计的目的:

 

高级语言课程设计是学习完《高级语言程序设计》课程后进行的一次全面的综合性上机实验。

其目的在于为同学提供了一个既动手又动脑,独立实践的机会,将课本上的理论知识和实际有机的结合起来,锻炼同学的分析解决实际问题的能力。

提高学生适应实际,实践编程的能力。

二、题目:

教师上课点名系统

制作一个自动点名系统使之有以下功能:

1、每次选取相应的功能,系统随即抽取一个学生,显示给老师,用做点名。

2、学生名单存在一个文本文件students.txt中。

3、可以使用另一个文本文件,记录学生被点名的次数,或在students.txt文件中加入一个记录学生被点名次数的字段。

4、一般用文本界面显示菜单,自行设计和完成菜单功能,供老师点选,可以考虑动态显示系统选择的过程,最好能设计成图形界面。

5、每个学生被点中的概率和次数尽量一样,不能出现一个学生被点两次了,还有学生没被点中的情况。

三、总体设计

根据分析,整个系统可以设计为以下四个部分:

四、详细设计

1、结构体

structstudent

{

intnum;

charname[20];

inttime;

}std[SIZE];

2、主函数

主函数的设计用来打开文本文件,并提供数据输入和数据处理以及三个函数的调用,其中各功能模块用菜单方式选择。

voidmain()

{

voidfunction1();

voidfunction2();

voidfunction3();

}

主函数具体的程序如下:

voidmain()

{

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

{

fscanf(fp,"%d%s",&std[i].num,std[i].name);

std[i].time=0;

}/*读取文本文件保存在内存中*/

printf("-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*\n");

printf("-*-*-*-*-*-点名了请小心!

-*-*-*-*-*-\n");

printf("-*-*-*输入1:

开始点名*-*-*-\n");

printf("-*-*-*输入2:

点名情况*-*-*-\n");

printf("-*-*-*输入3:

次数归零*-*-*-\n");

printf("-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*\n\n");

for(;;)

{

s=getchar();

switch(s)

{

case'1':

kaishidianming();

break;

case'2':

dianmingcishu();

break;

case'3':

cishuguiling();

break;

}/*使用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

{

std[n].time++;

printf("学号\t\t姓名\t\t被点次数\n");

printf("%d%-15d%-10s%10d\n",t,std[n].num,std[n].name,std[n].time);

}

elsegotoloop;

}

}点名模块流程图如下:

不公平

(2)次数统计模块

voiddianmingcishu()

{

printf("学号\t\t姓名\t\t被点次数\n");

for(i=0;i

printf("%d%-15d%-10s%10d\n",t,std[i].num,std[i].name,std[i].time);

}

(3)次数清零模块

voidcishuguiling()

{

for(i=0;i

std[i].time=0;

k=1;

l=0;

printf("点名次数已归零\n");

}

五、上机操作

1、进入界面

2、进行点名

3、点名次数查询

4、次数归零

 

学习心得

在以前C程序设计的学习中,我们只需要写几个简单的程序,完成一些简单的功能,输入手段也都是单一的从键盘输入,从未涉及到对文件的操作,所以书本上九、十章的内容基本上没怎么掌握。

但是通过这次C语言课程设计的学习,我感受到了独自完成一个程序去实现一个目的快乐,也增强了对于C语言相关知识的了解。

当然,过程不是一帆风顺的。

为了完成程序,由于对文件操作内容的不熟悉,我首先把课本看了几遍,弄清楚了一些基本的知识。

还有在程序编写的过程中,错误频出,虽然经常是一些简单的问题,但寻找错误的过程总是那么的痛苦。

所以,经过这次C语言课程设计,我深深的感受到了耐心和细心在程序编写中的重要性。

最后祝贺自己完成了程序!

六、算法和系统的优缺点

此系统最大的有点是简明易懂,操作方便,在一次点名过程中,实现了点名的公平性。

但每次退出点名系统后,不能对点名次数进行保存,不便于调用。

改进思路:

可以用一个文件,将点名的次数进行保存。

七、源程序(附录)

#include

#include

#include

#include

#defineSIZE57

inti,n,m;

intk=1,l=0,t=0;/*全局变量的定义*/

structstudent

{

intnum;

charname[20];

inttime;

}std[SIZE];/*结构体数组的定义*/

voidmain()

{

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

{

fscanf(fp,"%d%s",&std[i].num,std[i].name);

std[i].time=0;

}/*读取文本文件保存在内存中*/

printf("-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*\n");

printf("-*-*-*-*-*-点名了请小心!

-*-*-*-*-*-\n");

printf("-*-*-*输入1:

开始点名*-*-*-\n");

printf("-*-*-*输入2:

点名情况*-*-*-\n");

printf("-*-*-*输入3:

次数归零*-*-*-\n");

printf("-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*\n\n");

for(;;)

{

s=getchar();

switch(s)

{

case'1':

kaishidianming();

break;

case'2':

dianmingcishu();

break;

case'3':

cishuguiling();

break;

}/*使用switch语句进行选择实现不同函数功能*/

}

fclose(fp);

}

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

{

std[n].time++;

printf("学号\t\t姓名\t\t被点次数\n");

printf("%d%-15d%-10s%10d\n",t,std[n].num,std[n].name,std[n].time);

}

elsegotoloop;

}

}

voiddianmingcishu()

{

printf("学号\t\t姓名\t\t被点次数\n");

for(i=0;i

printf("%d%-15d%-10s%10d\n",t,std[i].num,std[i].name,std[i].time);

}

voidcishuguiling()

{

for(i=0;i

std[i].time=0;

k=1;

l=0;

printf("点名次数已归零\n");

}

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 人文社科 > 法律资料

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1