当前位置:文档之家› 上课随机点名系统

上课随机点名系统

C语言课程设计实习报告专业:地球物理与空间信息学院学号:班级序号:姓名:* * *指导教师:张*C语言程序设计报告(实习日期: 2013-12至2014-1)一、C语言课程设计的目的: (3)二、题目:教师上课点名系统 (3)三、总体设计 (4)四、详细设计 (4)1、结构体 (4)2、主函数 (5)3、各功能模块设计 (8)(1)点名模块 (8)(2)次数统计模块 (9)(3)次数清零模块 (10)五、上机操作 (11)1、进入界面 (11)2、进行点名 (12)3、点名次数查询 (13)六、算法和系统的优缺点 (16)七、源程序(附录) (16)一、C语言课程设计的目的:高级语言课程设计是学习完《高级语言程序设计》课程后进行的一次全面的综合性上机实验。

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

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

二、题目:教师上课点名系统制作一个自动点名系统使之有以下功能:1、每次选取相应的功能,系统随即抽取一个学生,显示给老师,用做点名。

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

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

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

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

三、总体设计根据分析,整个系统可以设计为以下四个部分:四、详细设计1、结构体struct student {int num;char name[20];int time;}std[SIZE]; 上课点名系统读取数据进行点名次数统计次数归零2、主函数主函数的设计用来打开文本文件,并提供数据输入和数据处理以及三个函数的调用,其中各功能模块用菜单方式选择。

void main(){void function1();void function2();void function3();}主函数具体的程序如下:void main(){void kaishidianming();void dianmingcishu();void cishuguiling(); /*对被调用函数的声明*/char s;FILE * fp;if((fp=fopen("D:\\c\\kechengsheji\\students.txt","r+"))==NULL) {printf("cannot open this file\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"); 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)点名模块void kaishidianming(){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\t姓名\t\t被点次数\n");printf("%d%-15d%-10s%10d\n",t,std[n].num,std[n].name,std[n].time );}else goto loop;}}点名模块流程图如下:(2)次数统计模块void dianmingcishu(){printf("学号\t\t姓名\t\t被点次数\n");for(i=0;i<SIZE;i++)printf("%d%-15d%-10s%10d\n",t,std[i].num,std[i].name,std[i].time); }(3)次数清零模块void cishuguiling(){for(i=0;i<SIZE;i++)std[i].time=0;k=1;l=0;printf("点名次数已归零\n"); }五、上机操作1、进入界面2、进行点名3、点名次数查询4、次数归零学习心得在以前C程序设计的学习中,我们只需要写几个简单的程序,完成一些简单的功能,输入手段也都是单一的从键盘输入,从未涉及到对文件的操作,所以书本上九、十章的内容基本上没怎么掌握。

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

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

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

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

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

最后祝贺自己完成了程序!六、算法和系统的优缺点此系统最大的有点是简明易懂,操作方便,在一次点名过程中,实现了点名的公平性。

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

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

七、源程序(附录)#include <stdio.h>#include <stdlib.h>#include <math.h>#include <time.h>#define SIZE 57int i,n,m;int k=1,l=0,t=0; /*全局变量的定义*/struct student{int num;char name[20];int time;}std[SIZE]; /*结构体数组的定义*/void main(){void kaishidianming();void dianmingcishu();void cishuguiling(); /*对被调用函数的声明*/ char s;FILE * fp;if((fp=fopen("D:\\c\\kechengsheji\\students.txt","r+"))==NULL) {printf("cannot open this file\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");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);}void kaishidianming(){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\t姓名\t\t被点次数\n");printf("%d%-15d%-10s%10d\n",t,std[n].num,std[n].name,std[n].time );}else goto loop;}}void dianmingcishu(){printf("学号\t\t姓名\t\t被点次数\n");for(i=0;i<SIZE;i++)printf("%d%-15d%-10s%10d\n",t,std[i].num,std[i].name,std[i].time); }void cishuguiling(){.for(i=0;i<SIZE;i++)std[i].time=0;k=1;l=0;printf("点名次数已归零\n");}Word 资料。

相关主题