教师上课点名系统_c语言(DOC)
- 格式:doc
- 大小:122.70 KB
- 文档页数:13
随机点名系统毕业设计一、引言随机点名系统作为一种教学辅助工具,可以帮助教师在课堂上随机点名学生,增加课堂纪律,激发学生的积极性。
设计并实现一个基于Python的随机点名系统是一种很有意义的毕业设计。
本文将介绍随机点名系统的设计思路以及系统的实现过程。
二、系统设计1. 系统功能随机点名系统的功能主要包括学生信息的录入、随机点名、点名记录的保存与管理等。
在系统设计时,需要充分考虑这些功能,确保系统的实用性和可靠性。
2. 技术选型在设计随机点名系统时,选择合适的技术是非常重要的。
Python作为一种功能强大且易于学习的编程语言,非常适合用于开发此类系统。
还可以结合使用GUI库来实现系统的用户界面。
3. 数据结构学生信息的管理是随机点名系统的核心功能之一。
在设计系统时,需要考虑如何合理地组织和管理学生信息。
可以使用字典、列表等数据结构来存储学生的尊称、学号等信息。
三、系统实现1. 学生信息录入模块在系统中,需要提供学生信息录入的功能。
通过输入学生的尊称、学号等信息,将学生信息保存到系统中。
2. 随机点名模块随机点名是随机点名系统的核心功能之一。
可以通过随机数生成算法来实现随机点名功能,并确保每位学生都有机会被点到。
3. 点名记录管理模块点名记录的保存与管理也是系统的重要功能之一。
可以将点名记录保存到文件中,以便后续的查阅和管理。
四、系统测试在系统设计和实现完成之后,需要对系统进行充分的测试,以确保系统的稳定性和可靠性。
可以进行单元测试、集成测试等多种测试手段,发现并解决系统中存在的问题。
五、总结设计并实现一个基于Python的随机点名系统,是对所学知识的全面运用和巩固。
通过本文的介绍,希望读者能够对随机点名系统的设计和实现有一定的了解,同时也能够对Python编程语言有更加深入的认识。
希望本文对相关领域的同学们能够有所帮助。
六、系统优化随机点名系统的设计和实现是一个不断优化的过程。
在系统测试中,可能会发现一些问题或者可以改进的地方。
Python实现上课点名器系统⽬录前⾔⼀、核⼼功能设计⼆、实现步骤1. UI排版布局设计2. 学⽣姓名加载3. 随机点名实现4. 连抽模式实现5. 抽取历史查看三. 打包配置总结前⾔前段时间,⽤PyQt5写了⼏篇⽂章,关于Python⾃制⼀款炫酷⾳乐播放器、⾃定义动态壁纸、车牌⾃动识别系统。
今天就继续给⼤家分享⼀个读者粉丝投稿的,关于上课点名的实战案例,⼀起来看看是如何实现的吧!⾸先我们还是⼀起先来看看点名器实现的效果:下⾯,我们开始介绍这款点名器的制作过程。
直接跳到⽂末获取源码及exe打包程序。
⼀、核⼼功能设计总体来说,我们这款点名器实现的思路⼤致是,可以⾃定义设置班级学⽣姓名或者默认通过学号进⾏学⽣随机点名抽取,可以每次单⼈抽取也可以⾃⼰选择连抽⼈数进⾏多⼈连抽,并将这些随机抽取的学⽣姓名历史数据显⽰。
拆解需求,接下来我们可以通过以下⼏步进⾏实现:1.UI排版布局设计,确认点名器的各个功能设计2.读取班级学⽣的姓名⽂件,将各个学⽣的姓名加载到列表中,如果没有学⽣姓名⽂件默认创建学号⽂件3.实现对学⽣姓名的随机点名抽取功能4.实现多⼈连抽模式5.查看随机抽取的学⽣姓名历史数据⼆、实现步骤之前有读者反馈说,不知道程序中具体需要哪些模块、包⽂件,下⾯我就把程序中⽤到模块先放出来。
主要包括了⽂件读写,随机数,PyQt5,win32con等。
import sys,osfrom random import randintfrom PyQt5 import QtCore, QtGui, QtWidgetsfrom PyQt5.QtGui import *from PyQt5.QtCore import Qt, QTimerfrom PyQt5.QtWidgets import *from win32api import MessageBoxfrom win32con import MB_OK, MB_ICONWARNING1. UI排版布局设计根据点名器所需要的功能,⾸先我们可以进⾏UI布局设计,我们这次还是使⽤的pyqt5。
姓名__________ 指导教师___尹航___年月日沈阳航空工业学院课程设计任务书电子工程系电子信息工程专业84020103班学号2008040201106一、课程设计题目:教师上课随机点名二、课程设计工作自2009年9月7日起至2009年9月11日止三、课程设计内容:用C语言编写软件完成以下任务:教师在每次上课时,需要对学生点名提问。
学生信息应事先保存到文件file20.txt 中。
学生共有7人,名单如下:101 杜永宁N 102 段楠N 103 冯红N 104 郝苇N 105 胡龙N106 李南N 107 刘盈N所谓点名,是指将某位同学的姓名和学号打印到屏幕上,则表示该同学是否缺席。
四、课程设计要求:1.程序质量:●贯彻结构化的程序设计思想。
●用户界面友好,功能明确,操作方便;可以加以其它功能或修饰。
●用户界面中的菜单至少应包括“开始点名”、“信息统计”、“学生信息添加”、“退出”4项。
●代码应适当缩进,并给出必要的注释,以增强程序的可读性。
2.课程设计说明书:课程结束后,上交课程设计说明书和源程序。
课程设计说明书的内容如下:●课程设计任务书●程序设计题目●需求分析(分析题目的要求)●程序框图●核心技术的实现方法及程序源代码及注释●个人总结●[参考资料]五、指导教师:学生签名:六、成绩:七、教师评语:_目录一、需求分析 (2)二、程序流程图 (3)三、核心技术的实法现方 (8)四、个人总结 (13)五、参考文献 (14)六、源程序 (14)一、需求分析此程序是为点名而设计,经分析可知,整个程序的设计实现大致分为四个模块,其中每一个模块对应一个功能,他们的功能分别是:程序界面设计模块,文件读写模块,显示点名情况模块,随机算法模块。
1、程序界面设计模块主要实现程序最初运行时程序界面友好、美观的的构型以及简明的操作提示;2、文件读写模块实现的功能是对file20.txt文件数据的读取和存储,将文件中的数据保存到结构体student 中,并将点名次数通过save函数保存到文件中;3、显示点名情况模块按照题目的要求将数据文件中所有学生的学号、姓名、是否缺席打印到屏幕上;4、点名算法模块通过调用自定义函数open()和rew()实现点名,并将被点到的学号、姓名、是否缺席打印到屏幕上;除上面介绍的功能之外,程序还具有退出功能,可以在程序的一次运行当中循环执行所有的功能,并根据需要终止程序的执行。
#include<stdio.h>#include<stdlib.h>#include<time.h>#define STU_NUM_MAX64//假设最多有64个学生struct Student{char name[10];int stuID;}stu[STU_NUM_MAX];int exist[STU_NUM_MAX];//用以保存被点过名static int index=0;//记住点名的次数void Iitialize(){for(int i=0;i<STU_NUM_MAX;i++)exist[i]=0;}bool IsExist(int id){for(int i=0;i<STU_NUM_MAX;i++)if(exist[i]==id)return true;//已存在return false;//不存在}void Add()//添加数据{FILE*fp;int stu_num;printf("\t\t You want to input the number of student?:");scanf("%d",&stu_num);for(int i=0;i<stu_num;i++){printf("\n");printf("\t\tPlease input student ID:");scanf("%d",&stu[i].stuID);printf("\t\tPlease input student name:");scanf("%s",stu[i].name);fflush(stdin);}if((fp=fopen("stu.dat","ab"))==NULL){printf("Can't open file\n");exit(1);}for(int j=0;j<stu_num;j++){if(fwrite(&stu[j],sizeof(struct Student),1,fp)!=1)printf("Error writing file.\n");}fclose(fp);}void rollcall()//随机点名{FILE*fp;if((fp=fopen("stu.dat","rb"))==NULL){printf("Can't open file.\n");exit(1);}srand((unsigned)time(NULL));int i=0;int randID=rand()%(64-1+1)+1;//1~64printf("\t\t随机点到的学号为:%d\n\t\t%s\t%s\n",randID,"StuID","StuName");do{fseek(fp,i*sizeof(struct Student),SEEK_SET);if(fread(&stu[i],sizeof(struct Student),1,fp)){if(stu[i].stuID==randID&&!IsExist(randID)){printf("\t\t%4d\t%5s\n",stu[i].stuID,stu[i].name);exist[index++]=randID;break;}}i++;}while(!feof(fp));fclose(fp);}int main(){int select=0;char answer='y';Iitialize();do{printf("1.添加数据2.随机点名3.退出\n请选择:");fflush(stdin);scanf("%d",&select);switch(select){case1:Add();break;case2:rollcall();break;case3:return0;}fflush(stdin);printf("You want to continue?:");scanf("%c",&answer);}while(answer=='y'||answer=='Y');return0;}#include<stdio.h>#include <stdlib.h>#include<string.h>#include <conio.h>#include <time.h>struct studentinfo{char sNo[5];char sxueNo[14];char sname[20];}st[100];int main(){int i=0,j=0,k,flag,RN,*a;FILE *fp;char ch,filename[20]={0},line[100]={0};printf("Please input file name:");fflush(stdin);gets(filename);fp=fopen(filename,"r");printf("名单如下:\n");while (fgets(line,sizeof(line)-1,fp)){if (line[0]!='\n' && line[0]!=' '){sscanf(line,"%s %s %s\n",st[i].sNo,st[i].sxueNo,st [i].sname);printf("%s\n%s\n%s\n",st[i].sNo,st[i].sxueNo,st[i].sna me);i++;}}srand((unsigned)time(NULL));a=(int*)malloc(sizeof(int)*i);memset(a,-1,sizeof(a));printf("按任意键点名:");fflush(stdin);while (!(ch=getch())==NULL){RN=rand()%i;flag=1;for (k=0;k<i;k++){if (RN==a[k]){flag=0;break;}}if (flag){a[j]=RN;j++;printf("\n~~~~~\n%s\n%s\n%s\n------------\n",st[RN]. sNo,st[RN].sxueNo,st[RN].sname);}}}#include<stdio.h>#include<stdlib.h>#include<time.h>#define STU_NUM_MAX4struct StudentInfo//学生信息结构{char name[15];int stu_id;}stu[STU_NUM_MAX];void WriteData()//写入学生信息{FILE*fp;int stu_num=4;for(int i=0;i<stu_num;i++){printf("请输入第%d个学生的姓名:",i+1);scanf("%s",stu[i].name);printf("请输入第%d个学生的学号:",i+1);scanf("%d",&stu[i].stu_id);}if((fp=fopen("myfile.dat","ab"))==NULL){printf("Can't open file\n");exit(1);}for(int j=0;j<stu_num;j++){if(fwrite(&stu[j],sizeof(struct StudentInfo),1,fp)!=1)printf("Error writing file.\n");}fclose(fp);}void TeacherDM(int stuID)//教师点名{FILE*fp;bool find_mark=false;printf("\n\t%s\t\t%s\n","学号","姓名");if((fp=fopen("myfile.dat","rb"))==NULL){printf("Can't open file\n");exit(1);}int i=0;do{fseek(fp,i*sizeof(struct StudentInfo),SEEK_SET);fread(&stu[i],sizeof(struct StudentInfo),1,fp);if(stu[i].stu_id==stuID){printf("\t%4d\t%s\n",stu[i].stu_id,stu[i].name);printf("\n\n\t请【%s】同学回答某某问题.\n",stu[i].name);find_mark=true;break;}i++;}while(!feof(fp));if(!find_mark)printf("\n\t\t未能找到学生号为:%d的记录!\n",stuID);fclose(fp);}void main(void){int stuID[4]={2013011001,2013011002,2013011003,2013011004};//WriteData();srand((unsigned)time(NULL));//随机种子TeacherDM(stuID[rand()%(3-0+1)+0]);}#include <stdlib.h> #include <stdio.h> #include <math.h> #define SIZE 4 struct student {char num[20]; char name[10]; int time; }std[SIZE]; void save() {int i; FILE *fp;if((fp=fopen("myfile.dat","rb+"))==NULL) {printf("文件打开失败\n"); exit(0);}for(i=0;i<SIZE;i++)沈阳航院设计用纸9if(fwrite(&std[i],sizeof(struct student),1,fp)!=1) /*将内存中的数据输出到磁盘文件中*/ printf("文件保存失败\n"); }void main() {int j,i; char c; FILE *fp;if((fp=fopen("myfile.dat","ab+"))==NULL) {printf("文件打开失败\n"); exit(0); }for(i=0;i<SIZE;i++)fread(&std[i],sizeof(struct student),1,fp); /*将fp所指向的文件中的数据存储到数组std中*/printf("*************欢迎使用上课随机点名程序**************\n"); printf("******输入a:显示所有同学名情况*********\n"); printf("******输入d: 开始点名*********\n"); printf("******输入s:保存点名*********\n"); printf("******输入b: 点名次数归零*********\n"); printf("******输入q: 退出*********\n"); printf("******************************************\n"); while(1) {c=getchar(); switch(c) {case 'a': for(i=0;i<SIZE;i++) printf("\t\t%s\t\t%s\t\t被点名%d次\n",std[i].num,std[i].name,std[i].time); break;case 's': save();printf("****文件保存成功!退出请输入q****\n");break;case 'b': for(i=0;i<SIZE;i++)沈阳航院设计用纸10std[i].time=0;printf("点名次数归%d\n",std[i].time);break; case 'q': exit(0); case 'd': loop: j=rand()/1000; /*调用rand的函数进行点名*/ if(j==0) { std[0].time++;printf("\t\t%s\t\t%s\n",std[j].num,std[j].name); }else if(j==1) {std[1].time++;printf("\t\t%s\t\t%s\n",std[j].num,std[j].name); }else if(j==2) {std[2].time++;printf("\t\t%s\t\t%s\n",std[j].num,std[j].name); }else if(j==3) {std[3].time++;printf("\t\t%s\t\t%s\n",std[j].num,std[j].name); }else goto loop; break;} }fclose(fp); }。
一、实验目的1. 了解点名系统的基本原理和功能。
2. 掌握点名系统的设计方法和技术。
3. 通过实际操作,提高对点名系统应用能力的掌握。
二、实验环境1. 操作系统:Windows 102. 开发环境:Visual Studio 20193. 数据库:MySQL 5.74. 编程语言:C#三、实验内容1. 点名系统概述2. 系统需求分析3. 系统设计4. 系统实现5. 系统测试与优化四、实验步骤1. 系统需求分析(1)功能需求① 用户登录:管理员登录和普通用户登录。
② 学生信息管理:增加、删除、修改学生信息。
③ 班级管理:增加、删除、修改班级信息。
④ 点名记录:实时记录学生出勤情况。
⑤ 数据统计:按班级、按时间统计出勤情况。
(2)性能需求① 系统响应时间:用户操作后,系统响应时间不超过2秒。
② 系统并发用户数:支持10个用户同时在线操作。
2. 系统设计(1)系统架构采用B/S(Browser/Server)架构,分为前端和后端两部分。
前端:采用HTML、CSS、JavaScript等技术实现,主要负责用户界面展示和交互。
后端:采用C#语言开发,负责业务逻辑处理和数据库操作。
(2)数据库设计① 学生信息表(student)- 学号(id):主键,自动增长- 姓名(name):字符串- 性别(gender):字符串- 班级(class_id):外键,关联班级信息表② 班级信息表(class)- 班级ID(id):主键,自动增长- 班级名称(name):字符串③ 点名记录表(attendance)- 记录ID(id):主键,自动增长- 学号(student_id):外键,关联学生信息表- 班级ID(class_id):外键,关联班级信息表- 状态(status):字符串,表示出勤情况(如:正常、迟到、缺勤等)3. 系统实现(1)前端实现使用HTML、CSS、JavaScript等技术实现用户界面,包括登录界面、学生信息管理界面、班级管理界面、点名记录界面和数据统计界面。
《软件工程》课程设计随机点名系统的设计与实现专业:计算机科学与技术班级:软件051、052班学生姓名:杨银玲、温鹏、王东东、韩冀指导教师:***2008 年12 月31 日目录一、随机点名系统需求分析 (6)1、引言 (6)1.1、项目名称 (6)1.2、项目背景和内容概要 (7)1.3、相关资料、缩略语、定义 (7)2、项目概述 (7)2.1、被开发软件一般描述 (7)2.2、被开发软件的功能 (8)2.3、实现语言 (8)3、系统进程 (8)3.1、系统模块图: (8)3.2、系统主要流程: (9)4、数据描述 (12)4.1、原始数据描述 (12)4.2、数据流向图 (12)4.3、数据概念模型和描述 (13)5、功能需求 (14)5.1、功能描述 (14)5.3、处理要求 (14)5.4、输出要求 (15)6、界面要求 (15)6.1、报表格式 (15)6.2、图形要求 (15)6.3、输入输出要求 (15)7、接口要求 (15)7.1、硬件接口 (15)7.2、软件接口 (15)7.3、通讯接口 (15)8、性能要求 (16)8.1、数据精确度 (16)8.2、数据量 (16)8.3、时间特性要求 (16)8.4、灵活性 (16)9、运行环境要求 (16)9.1、网络和硬件设备平台 (16)9.2、操作系统平台 (16)9.4、编程工具 (16)9.5、其他支持软件 (16)二、随机点名系统详细设计 (16)1、引言 (17)1.1、项目名称 (17)1.2、编写目的 (17)1.3、项目背景及内容摘要 (17)1.4、相关资料、缩略词、术语 (17)1.5、参考资料 (17)2、程序结构 (17)2.1、程序结构图 (17)2.2、程序文件清单 (18)3、程序设计说明 (19)3.1、程序功能描述 (19)3.2、输入项与输出项 (19)3.3、主要数据结构 (19)3.4、存取的数据库表和字段 (20)3.5、调用的函数及控件 (20)3.7、测试要点 (21)4、用户界面设计说明 (22)4.1、登录界面 (22)4.2、教师界面 (22)4.3、管理员界面 (24)4.4、学生界面图 (27)三、随机点名系统实现与测试: (28)1、管理员模块中数据的添加、删除、修改的功能测试 (28)2、用户登陆测试 (29)3、随机点名、记录给分功能测试 (30)4、打印功能测试 (30)5、导入导出数据功能测试 (31)四、随机点名系统调试与运行: (32)五、随机点名系统总结: (33)六、附录(相关代码) (33)一、随机点名系统需求分析1、引言在高等院校、职中专、大专学校里,学生考勤是一项日常必要性的工作,学校的各院系需要了解和掌握各班级的学生出勤情况,以加强对学生的教育和管理。
教务管理系统c语言课程设计一、教学目标本课程的教学目标是使学生掌握教务管理系统的基本原理和设计方法,能够运用C语言进行简单的教务管理系统开发。
具体分为以下三个部分:1.知识目标:使学生掌握C语言的基本语法、数据结构、算法和面向对象编程思想,了解教务管理系统的功能和结构。
2.技能目标:培养学生具备运用C语言进行程序设计的能力,能够独立完成简单的教务管理系统模块设计与实现。
3.情感态度价值观目标:培养学生对编程事业的热爱,提高学生解决实际问题的积极性,培养学生的团队协作精神和自主学习能力。
二、教学内容本课程的教学内容主要包括以下几个部分:1.C语言基础知识:数据类型、运算符、表达式、语句、函数等。
2.数据结构:数组、链表、栈、队列、树、图等。
3.算法:排序算法、查找算法、常用算法分析等。
4.面向对象编程:类、对象、封装、继承、多态等。
5.教务管理系统设计:系统需求分析、系统架构设计、模块划分、功能实现等。
三、教学方法为了达到本课程的教学目标,我们将采用以下几种教学方法:1.讲授法:通过讲解知识点,使学生掌握基本概念和原理。
2.案例分析法:分析实际案例,使学生了解教务管理系统的应用场景和设计方法。
3.实验法:让学生动手编写代码,培养实际编程能力。
4.讨论法:分组讨论问题,培养学生的团队协作精神和解决问题的能力。
四、教学资源为了支持本课程的教学内容和教学方法,我们将准备以下教学资源:1.教材:《C程序设计语言》(K&R)、《C Primer Plus》等。
2.参考书:《数据结构与算法分析》(C语言版)、《深度探索C++对象模型》等。
3.多媒体资料:教学PPT、视频教程、在线编程练习等。
4.实验设备:计算机、网络环境、编程调试工具等。
五、教学评估本课程的评估方式包括以下几个部分:1.平时表现:通过课堂参与、提问、讨论等环节,评估学生的学习态度和积极性。
2.作业:布置课后作业,评估学生的编程能力和对知识的理解程度。
课程信息管理系统c语言课程信息管理系统(C语言)一、引言课程信息管理系统是一种用来管理和组织课程信息的软件系统。
它能够对教学计划、课程表、学生选课等进行管理,帮助学校、教育机构或教师高效地管理课程信息。
本文将通过介绍课程信息管理系统的功能、特点和实施过程,详细阐述C语言在该系统中的应用。
二、功能介绍1. 学生管理:该系统能够记录学生的个人信息,如学号、姓名、班级等,并能进行学生选课管理,包括选课、退课等操作。
2. 课程管理:系统可以管理各门课程的信息,如课程编号、课程名称、学分等,并能进行课程安排,制定教学计划。
3. 教师管理:系统可以记录教师的基本信息,提供教师选课、授课安排等功能。
4. 成绩管理:系统能够记录学生的各科成绩,并提供成绩查询、统计等功能,方便学生和教师进行学业评估。
5. 课程评价:系统可以记录学生对课程的评价和反馈,帮助学校和教师改进教学质量。
三、特点和优势1. 数据集中管理:课程信息管理系统将学生、教师、课程等信息集中管理,方便快捷,减少重复工作。
2. 数据安全性高:系统采用数据库来存储和管理数据,确保数据的安全性和完整性。
3. 操作简便:系统界面友好,操作简单明了,即使对计算机操作不熟悉的教师和学生也能够轻松上手。
4. 信息共享:系统支持信息共享,学生、教师和管理者可以通过系统查询相关信息,提高工作效率。
5. 数据分析功能:系统能够对学生选课情况、成绩分布等进行统计和分析,为教学改革提供数据支持。
四、实施过程1. 需求分析:通过与学校、教师和学生的沟通,明确系统的需求和功能。
2. 系统设计:根据需求分析的结果,设计系统的数据库结构、界面和功能模块。
3. 编码实现:使用C语言编写相应的代码,实现系统的各个功能模块。
4. 测试调试:对系统进行功能测试和性能测试,确保系统的稳定性和可靠性。
5. 上线部署:将系统部署到服务器上,并进行相关的数据迁移和备份工作。
6. 培训和维护:对教师和学生进行系统培训,并进行后期的系统维护和更新。
1引言21.1编写目的21.2背景21.3定义21.4参考资料32程序系统的构造33程序1〔教师记录考勤情况〕设计说明33.1程序描述33.2功能43.3性能43.4输人项43.5输出项53.6算法53.7流程逻辑53.8接口63.9存储分配63.10注释设计63.11限制条件63.12测试方案73.13尚未解决的问题74程序2〔登陆程序〕设计说明74.1程序描述74.2功能74.3性能74.4输入项74.5输出项84.6算法84.7流程逻辑94.8接口104.9存储分配104.10注释设计104.11限制条件114.12测试方案114.13尚未解决的问题11详细设计说明书1引言1.1编写目的在本随机点名系统工程的前一阶段,也就是概要设计阶段中,已经将系统用户对本系统的子模块功能做了详细的阐述,这些模块功能具体设计将在本报告中详尽得以表达及说明。
本阶段已在系统的概要设计的根底上,对随机点名系统做详细设计。
主要解决了实现该系统程序模块具体设计问题。
包括确定算法,数据构造,模块接口的使用,数据库的动态操作以及界面设计等。
在以下的概要设计报告中将对在本阶段中对系统所做的所有详细设计进展详细的说明。
在下一阶段的编码过程中,可参考此详细设计报告,在详细设计对随机点名系统所做的算法设计,数据构造以及数据库动态操作的根底上,对系统进展编码。
1.2背景开发软件名称:随机点名系统。
开发者:昊霖用户:高校教师,学生,教务人员运行环境:个人电脑开发平台:VB平台,Mysql数据库。
1.3定义流程图:反映现行系统各机构的业务处理过程和它们之间的业务分工与联系,以及连接学生,教师和管理员信息流的传递和流通关系,表达现行系统的界限、环境、输入、输出、处理和数据存储等容。
功能需求:用以说明系统"做什么〞用户接口:在数据库系统中,数据库管理系统作为用户与数据库的接口,提供了数据库定义、数据库运行、数据库维护和数据平安性、完整性等控制功能。
课程设计任务书院系:电子信息工程学院专业:电子信息工程班级:学号:题目:教师上课点名系统一、课程设计时间2010~11第1学期第2周,共计1周,20学时。
二、课程设计内容用C语言编写程序完成以下任务:教师在每次上课时,需要对学生点名。
学生信息保存在文件file20.txt(由教师提供)中,包括学号、姓名、是否缺席三项。
编写程序,完成如下功能:1 教师点名:对所有学生进行点名,并更新file20.txt文件;2 分别统计已到和未到的学生,并显示;3 能够向文件中添加后报到的学生信息。
三、课程设计要求1. 程序质量:✧贯彻结构化的程序设计思想。
✧用户界面友好,功能明确,操作方便。
✧用户界面中的菜单至少应包括“开始点名”、“信息统计”、“学生信息添加”、“退出”4项。
✧代码应适当缩进,并给出必要的注释,以增强程序的可读性。
2. 课程设计说明书:课程结束后,上交课程设计说明书和源程序。
课程设计说明书的格式和内容参见提供的模板。
四、指导教师和学生签字指导教师:________ 学生签名:________五、说明书成绩六、教师评语目录一、程序设计题目 (1)二、需求分析 (1).三、程序流程图 (2)四、核心技术的实现方法及程序段 (6)五、个人总结 (8)六、参考文献 (8)七、源程序 (8)一、程序设计题目1 教师点名:对所有学生进行点名,并更新file20.txt文件;2 分别统计已到和未到的学生,并显示;3 能够向文件中添加后报到的学生信息。
二、需求分析经过对程序设计题目的分析可知,整个程序的设计实现大致分为七个模块,其中每一个模块对应一个功能,他们的功能分别是:程序界面设计模块,文件读写模块,文件更新模块,教师点名模块,学生信息添加模块,学生缺席情况统计模块,学生信息显示模块,。
1、程序界面设计模块主要实现程序最初运行时程序界面友好、美观的的构型以及简明的操作提示;2、文件读写模块实现的功能是对myfile.dat文件数据的读取和存储,将文件中的数据保存到结构体student中,并将点名次数通过save函数保存到文件中;3、显示点名情况模块按照题目的要求将数据文件中所有学生的学号、姓名、被点名次数打印到屏幕上;4、随机点名算法模块通过调用数学函数库中的随机数生成函数rand实现点名的随机性,并将被点到的学号、姓名打印到屏幕上;除上面介绍的功能之外,程序还具有退出功能,可以在程序的一次运行当中循环执行所有的功能,并根据需要终止程序的执行。
三、程序流程图总体框架图:模块设计:读取数据模块(图一)点名模块(图二)保存模块(图三)程序运行结果如图:(图一)(图二)(图三)四、核心技术的实现方法及程序段1.结构体定义:struct student{char num[20];char name[10];int time;}std[SIZE];2.将fp所指向的文件中的数据存储到数组std中FILE *fp;if((fp=fopen("myfile.dat","ab+"))==NULL){printf("文件打开失败\n");exit(0);}for(i=0;i<SIZE;i++)fread(&std[i],sizeof(struct student),1,fp); 3.调用rand的函数进行点名loop: j=rand()/1000; if(j==0){std[0].time++;printf("\t\t%s\t\t%s\n",std[j].num,std[j].name);}else if(j==1){std[1].time++;printf("\t\t%s\t\t%s\n",std[j].num,std[j].name);}else if(j==2){std[2].time++;printf("\t\t%s\t\t%s\n",std[j].num,std[j].name);}else if(j==3){std[3].time++;printf("\t\t%s\t\t%s\n",std[j].num,std[j].name);}else goto loop;break;}}fclose(fp);}4.保存点名void save(){int i;FILE *fp;if((fp=fopen("myfile.dat","rb+"))==NULL){printf("文件打开失败\n");exit(0);}for(i=0;i<SIZE;i++)if(fwrite(&std[i],sizeof(struct student),1,fp)!=1) printf("文件保存失败\n");}/*将内存中的数据输出到磁盘文件中*/五、个人总结之前的C语言学的不是很好,基本处于一知半解的阶段,甚至对有些概念都还很模糊,但是,在这一周的时间里,通过自己查找资料与同学之间进行探讨,还有老师和学长的指导,使我的C语言编程能力有了质的飞跃。
虽然我们学的是电子专业,但C语言程序设计确实是一门很有用的学科,像我的题目—教师点名系统,就与我们的生活紧密联系在一起,所以这次课设并不是一个结束,而是一个开始,一个对C语言更深入学习的开始。
六、参考文献1 谭浩强.C程序设计.北京:清华大学出版社,20052 刘成等.C语言程序设计实验指导与习题集.北京:中国铁道出版社,2006七、源程序#include <stdlib.h>#include <stdio.h>#include <math.h>#define SIZE 4struct student{char num[20];char name[10];int time;}std[SIZE];void save(){int i;FILE *fp;if((fp=fopen("myfile.dat","rb+"))==NULL){printf("文件打开失败\n");exit(0);}for(i=0;i<SIZE;i++)if(fwrite(&std[i],sizeof(struct student),1,fp)!=1)/*将内存中的数据输出到磁盘文件中*/printf("文件保存失败\n");}void main(){int j,i;char c;FILE *fp;if((fp=fopen("myfile.dat","ab+"))==NULL){printf("文件打开失败\n");exit(0);}for(i=0;i<SIZE;i++)fread(&std[i],sizeof(struct student),1,fp);/*将fp所指向的文件中的数据存储到数组std中*/printf("*************欢迎使用上课随机点名程序**************\n");printf("******输入a:显示所有同学名情况 *********\n");printf("******输入d: 开始点名 *********\n");printf("******输入s:保存点名 *********\n");printf("******输入b: 点名次数归零 *********\n");printf("******输入q: 退出 *********\n");printf("******************************************\n");while(1){c=getchar();switch(c){case 'a': for(i=0;i<SIZE;i++)printf("\t\t%s\t\t%s\t\t被点名%d次\n",std[i].num,std[i].name,std[i].time);break;case 's': save();printf("****文件保存成功!退出请输入q****\n");break;case 'b': for(i=0;i<SIZE;i++)std[i].time=0;printf("点名次数归%d\n",std[i].time);break;case 'q': exit(0);case 'd':loop: j=rand()/1000; /*调用rand的函数进行点名*/ if(j==0){std[0].time++;printf("\t\t%s\t\t%s\n",std[j].num,std[j].name);}else if(j==1){std[1].time++;printf("\t\t%s\t\t%s\n",std[j].num,std[j].name);}else if(j==2){std[2].time++;printf("\t\t%s\t\t%s\n",std[j].num,std[j].name);}else if(j==3){std[3].time++;printf("\t\t%s\t\t%s\n",std[j].num,std[j].name);}else goto loop;break;}}fclose(fp);}。