资源描述
沈 阳 航 空 航 天 大 学 课课 程程 设设 计计学学 号号 153402010417 班班 级级 电信电信 1504 姓姓 名名 指导教师指导教师 刘刘 鹤鹤 丹丹 2016 年年 9 月月 18 日日沈沈阳阳航航空空航航天天大大学学课课程程设设计计任任务务书书学院:电子信息工程学院学院:电子信息工程学院 专业:电子信息工程专业:电子信息工程 班级:电子班级:电子 学号:学号:题目:题目:随机点名系统随机点名系统1 1、课程设计时间课程设计时间二、课程设计内容二、课程设计内容用 C 语言编写软件完成以下任务:教师在每次上课时,需要对学生随机点名提问;学生信息应事先保存到文件 myfile.dat 中。学生共有 8 人,名单如下:20013011001 杜永宁 20013011002 王传华20013011003 殷泳 20013011004 杨柳青20013011005 王丽 20013011006 张华20013011007 白雪 20013011008 薛峰所谓点名,是指将某位同学的姓名和学号打印到屏幕上,则表示该同学被点名 1 次;注意点名的随机性,即公正性。三、课程设计要求三、课程设计要求程序质量:贯彻结构化的程序设计思想。用户界面友好,功能明确,操作方便。用户界面中的菜单至少应包括“开始点名”、“显示所有同学点名情况”、“保存点名”、“退出”4 项。代码应适当缩进,并给出必要的注释,以增强程序的可读性。课程设计说明书:课程结束后,上交课程设计说明书和源程序。课程设计说明书的内容参见提供的模板。四、指导教师和学生签字四、指导教师和学生签字指导教师:指导教师:_ 学生签名:学生签名:_5 5、成绩成绩六、教师评语六、教师评语沈阳航空航天大学设计用纸沈阳航空航天大学设计用纸目录目录一、需求分析.1二、设计分析.3三、主要界面截图.5四、技术要点.6五、个人总结.7六、参考文献.7七、源程序.7沈阳航空航天大学设计用纸沈阳航空航天大学设计用纸0一一、需求分析、需求分析此程序是为点名而设计,经分析可知,整个程序的设计实现大致分为四个模块,其中每一个模块对应一个功能,他们的功能分别是:程序界面设计模块,文件读写模块,显示点名情况模块,随机算法模块。1、程序界面设计模块 主要实现程序最初运行时程序界面友好、美观的的构型以及简明的操作提示;2、文件读写模块 实现的功能是对 file20.txt 文件数据的读取和存储,将文件中的数据保存到结构体 student 中,并将点名次数通过 save 函数保存到文件中;3、显示点名情况模块 按照题目的要求将数据文件中所有学生的学号、姓名、是否缺席打印到屏幕上;4、点名算法模块 通过调用自定义函数 open()和 rew()实现点名,并将被点到的学号、姓名、是否缺席打印到屏幕上;除上面介绍的功能之外,程序还具有退出功能,可以在程序的一次运行当中循环执行所有的功能,并根据需要终止程序的执行。沈阳航空航天大学设计用纸沈阳航空航天大学设计用纸1二二、设计分析设计分析1 1、整体框架图、整体框架图图 1:整体框架图随机点名系统随机点名系统菜单模块菜单模块创创建建名名单单模模块块 点点名名模模块块显显示示信信息息模模块块保保存存模模块块沈阳航空航天大学设计用纸沈阳航空航天大学设计用纸22 2、流程图、流程图 2.1.保存函数流程图如图所示,通过 rb+的方式打开文件,通过 for 循环,将结构体中的保存的学生信息保存到文件当中。yesyesif(fp=fopen(file20.txt,rb+)=NULL)if(fp=fopen(file20.txt,rb+)=NULL)NoNoprintf(printf(文件文件打开失败打开失败nnfor(i=0;i8;i+)for(i=0;i8;i+)if(fwrite(&stdi,sizeof(structif(fwrite(&stdi,sizeof(struct student),1,fp)!=1)student),1,fp)!=1)yesyes NoNo printf(printf(文件文件保存失败保存失败n);n);文件保存成功文件保存成功 关闭文件关闭文件图 2 Sa ve 函数进行保存的流程图沈阳航空航天大学设计用纸沈阳航空航天大学设计用纸32.22.2、菜单函数流程图如图、菜单函数流程图如图 3 3 所示,通过所示,通过 switchswitch 语句进行选择,语句进行选择,调用不同的功能函数,从而达到实现各部分功能的作用。调用不同的功能函数,从而达到实现各部分功能的作用。if(fp=fopen(file20.txt,ab+)=NULL)yes No 文件打开失败 Exit(0)for(i=0;i8;i+)scanf(%d,&c);switch(c);While(1)真Case 1 否真 Case 2 否 真Case 3;否 Case 4 退出 开始点名信息统计学生信息添加图 3:菜单模块的流程图沈阳航空航天大学设计用纸沈阳航空航天大学设计用纸42.32.3、点名函数流程图、点名函数流程图 4 4 所示,通过采用随机数语句随机出数所示,通过采用随机数语句随机出数字字 0-70-7,然后运用,然后运用 switchswitch 语句,通过语句,通过 strcmpstrcmp 函数,将结构体中保函数,将结构体中保存的学生编号同固定编号比较,如果相同则输出该编号对应的学存的学生编号同固定编号比较,如果相同则输出该编号对应的学生的信息生的信息numb=rand()%8+1switch(numb)switch(numb)真真casecaseCase1Case1否否真真Case2Case2真真Case3Case3.真真Case8Case8否否strcpy(temp,20013011001)strcpy(temp,20013011002)trcpy(temp,20013011003).ForFor(i=0,in,i+i=0,in,i+)yesyesnono输出输出 peoi.num,peoi.name 图 4:点名函数流程图沈阳航空航天大学设计用纸沈阳航空航天大学设计用纸5三、主要界面截图三、主要界面截图 图图 5.主界面主界面沈阳航空航天大学设计用纸沈阳航空航天大学设计用纸6 图图 6 开始点名开始点名 图图 7 显示所有同学的点名情况显示所有同学的点名情况沈阳航空航天大学设计用纸沈阳航空航天大学设计用纸7 图图 8 保存点名保存点名 图图 9 保存点名保存点名沈阳航空航天大学设计用纸沈阳航空航天大学设计用纸8四、四、技术要点技术要点1、结构体的定义并把原始信息一同定义在结构体成员中,是程序的核心内容之一void main()int i,n;int c;FILE*fp;if(fp=fopen(f:myfile.txt,r)=NULL)/文件不存在的时候/write();else n=reads(st);menu();while(1)scanf(%d,&c);switch(c)case 1:rank_name(st);break;case 2:show(st);break;case 3:save(st);break;case 4:exit(0);从上面的定义中可以看出,结构体类型定义中成员项都有确定的类型和名字,而要使用结构体类型的数据,必须经过两个步骤:先由关键字 struct 和用户定义的结构体名来说明类型,然后在由它们说明变量。2 2、voidvoid write()write()是自定义函数它的主要用途是打开预存的学生的是自定义函数它的主要用途是打开预存的学生的信息,并把它显示在屏幕上给老师点名。程序如下:信息,并把它显示在屏幕上给老师点名。程序如下:voidvoid write()write()FILEFILE *fp;/*fp;/定义文件指针定义文件指针/intint n,i;n,i;沈阳航空航天大学设计用纸沈阳航空航天大学设计用纸9if(fp=fopen(f:myfile.txt,a)=NULL)if(fp=fopen(f:myfile.txt,a)=NULL)/如果文件已如果文件已经存在,可以追加学生信息经存在,可以追加学生信息 if(fp=fopen(f:myfile.txt,w)=NULL)if(fp=fopen(f:myfile.txt,w)=NULL)/文件文件不存在时,创建新文件,输入学生信息不存在时,创建新文件,输入学生信息 printf(printf(文件打开失败!文件打开失败!n);n);return;return;for(i=0;iN;i+)for(i=0;iN;i+)fprintf(fp,%st%st%dtn,sti.num,sti.name,sti.dafprintf(fp,%st%st%dtn,sti.num,sti.name,sti.data);ta);/把学生信息存放到文件中把学生信息存放到文件中/fclose(fp);fclose(fp);3 3、voidvoid save(studentsave(student peo)peo)FILEFILE *fp;*fp;fp=fopen(f:myfile.txt,r+);fp=fopen(f:myfile.txt,r+);intint i,n;i,n;for(i=0;iN;i+)for(i=0;iN;i+)fprintf(fp,%st%st%dtn,peoi.num,peoi.name,peofprintf(fp,%st%st%dtn,peoi.num,peoi.name,peoi.data);i.data);fclose(fp);fclose(fp);voidvoid save(studentsave(student peo)peo)FILEFILE *fp;*fp;fp=fopen(f:myfile.txt,r+);fp=fopen(f:myfile.txt,r+);intint i,n;i,n;沈阳航空航天大学设计用纸沈阳航空航天大学设计用纸10for(i=0;iN;i+)for(i=0;iN;i+)fprintf(fp,%st%st%dtn,peoi.num,peoi.name,peofprintf(fp,%st%st%dtn,peoi.num,peoi.name,peoi.data);i.data);fclose(fp);fclose(fp);。如下:voidvoid rew()rew()intint i;i;intint h=1;h=1;intint k;k;charchar j;j;FILEFILE *fp;*fp;if(fp=fopen(file20.txt,r)=NULL)if(fp=fopen(file20.txt,r)=NULL)printf(printf(文件打开失败文件打开失败n);n);exit(0);exit(0);printf(*printf(*学生缺席请按学生缺席请按aa进行修改进行修改*n);*n);printf(*printf(*输入输入bb跳出修改跳出修改*n);*n);while(h)while(h)scanf(%c,&j);scanf(%c,&j);switch(j)switch(j)casecase a:printf(a:printf(缺席学生学号缺席学生学号n);n);scanf(%d,&k);scanf(%d,&k);k=k-101;k=k-101;stk.data=Y;stk.data=Y;break;break;casecase b:h=0;b:h=0;for(i=0;i7;i+)for(i=0;i7;i+)fread(&sti,sizeof(structfread(&sti,sizeof(struct student),1,fp);student),1,fp);printf(%dt%st%cn,sti.num,sti.name,sti.data);printf(%dt%st%cn,sti.num,sti.name,sti.data);沈阳航空航天大学设计用纸沈阳航空航天大学设计用纸11 4、void save()是保存学生信息的自定义函数,主要将修改后的学生信息保存到 file20.txt 文档中去,实现保存功能。程序如下:void save(student peo)FILE*fp;fp=fopen(f:myfile.txt,r+);int i,n;for(i=0;iN;i+)fprintf(fp,%st%st%dtn,peoi.num,peoi.name,peoi.data);fclose(fp);在上面的程序段中,用到了三个调用函数语句进行操作,尽管在程序化设计中有些重复,但其很方便,应用及操作比较简单。比如 void open()语句是为了打开 file20.txt 文件并输出学生情况进行点名,void rew()语句点名是进行信息统计,void save()是保存功能的函数,通过它实现了学生信息的添加及保存。五、个人总结五、个人总结在此次课设之前我 C 语言学的一般,只能勉强应付考试,很多概念都非常模糊记不清楚。虽然,我的编程题目并不算难,但是,在这一周的时间里,经过不断的学习与努力及与同学进行探讨,还有老师的指导,我的 C 语言编程终于能圆满完成。虽然程序还有一定的瑕渍,但我以尽力完成了。我感到 C 语言程序设计确实是一门很有用的学科,所以这次课设并不是一个结束,而是一个开始,一个对 C 语言更深入学习的开始。沈阳航空航天大学设计用纸沈阳航空航天大学设计用纸12六、参考文献六、参考文献1 谭浩强 C 程序设计 北京:清华大学出版社,20052 Prata,s.C Primer Plus.北京:人民邮电出版社,2005七、源程序七、源程序#include#include#include#include#define N 8 struct studentchar num20;char name10;int data;st8=20013011001,杜永宁,0,20013011002,王传华,0,20013011003,殷泳,0,20013011004,杨柳青,0,20013011005,王丽,0,20013011006,张华,0,20013011007,白雪,0,20013011008,薛峰,0;void menu()printf(*n);printf(*MENU*n);printf(*欢迎使用教师上课点名系统*n);printf(*输入 1:开始点名 *n);printf(*输入 2:显示所有同学点名情况 *n);printf(*输入 3:保存点名 沈阳航空航天大学设计用纸沈阳航空航天大学设计用纸13*n);printf(*输入 4:退出 *n);printf(*n);void write()FILE*fp;/定义文件指针/int n,i;if(fp=fopen(f:myfile.txt,a)=NULL)/如果文件已经存在,可以追加学生信息 if(fp=fopen(f:myfile.txt,w)=NULL)/文件不存在时,创建新文件,输入学生信息 printf(文件打开失败!n);return;for(i=0;iN;i+)fprintf(fp,%st%st%dtn,sti.num,sti.name,sti.data);/把学生信息存放到文件中/fclose(fp);int reads(struct student peoN)/读取学生文件中数据存到结构体中并返回结构体数组元素个数/FILE*fp;int i=0;if(fp=fopen(f:myfile.txt,r)=NULL)/文件不存在的时候/沈阳航空航天大学设计用纸沈阳航空航天大学设计用纸14 printf(文件打开失败!n);return 0;else/文件存在时/for(i=0;!feof(fp);i+)/用循环将文件中的数据读入到结构体中/fscanf(fp,%s%s%d n,peoi.num,peoi.name,&peoi.data);fclose(fp);return i;/返回结构体数组元素个数/void rank_name(student peo)int numb,n,i;char temp20;numb=rand()%8+1;switch(numb)case 1:strcpy(temp,20013011001);break;case 2:strcpy(temp,20013011002);break;case 3:strcpy(temp,20013011003);break;case 4:strcpy(temp,20013011004);break;case 5:strcpy(temp,20013011005);break;case 6:strcpy(temp,20013011006);break;case 7:strcpy(temp,20013011007);break;case 8:strcpy(temp,20013011008);break;for(i=0;iN;i+)沈阳航空航天大学设计用纸沈阳航空航天大学设计用纸15if(strcmp(temp,peoi.num)=0)break;/先找到要修改的职工号/printf(%st%sn,peoi.num,peoi.name);peoi.data+;void show(student peo)int i,n;for(i=0;iN;i+)printf(%st%st%dn,peoi.num,peoi.name,peoi.data);void save(student peo)FILE*fp;fp=fopen(f:myfile.txt,r+);int i,n;for(i=0;iN;i+)fprintf(fp,%st%st%dtn,peoi.num,peoi.name,peoi.data);fclose(fp);void main()int i,n;int c;FILE*fp;if(fp=fopen(f:myfile.txt,r)=NULL)/文件不存在的时候/write();else n=reads(st);menu();while(1)scanf(%d,&c);沈阳航空航天大学设计用纸沈阳航空航天大学设计用纸16switch(c)case 1:rank_name(st);break;case 2:show(st);break;case 3:save(st);break;case 4:exit(0);
展开阅读全文