小学数学学习系统(C语言课程设计报告,有源代码)
c学生系统课程设计源代码

c 学生系统课程设计源代码一、教学目标本课程的教学目标是使学生掌握C语言的基本语法、数据结构、算法和编程思想,培养学生独立思考、解决问题的能力,并培养学生的团队合作意识和创新精神。
具体分解为以下三个目标:1.知识目标:学生能够理解并掌握C语言的基本语法、数据类型、运算符、控制结构、函数、数组、指针、结构体等基本概念;理解并掌握基本的算法和数据结构;了解并初步掌握面向对象编程的基本思想。
2.技能目标:学生能够使用C语言编写简单的程序,解决实际问题;能够运用所学的算法和数据结构解决复杂问题;能够进行程序的调试和优化。
3.情感态度价值观目标:学生能够积极参与课堂讨论,主动探索新知识,培养自主学习的能力;能够尊重他人的意见,与他人合作完成任务,培养团队合作意识;能够接受失败,勇于面对挑战,培养创新精神。
二、教学内容本课程的教学内容主要包括C语言的基本语法、数据结构、算法和编程思想。
具体安排如下:1.C语言的基本语法:介绍C语言的基本数据类型、运算符、控制结构、函数等基本概念和用法。
2.数据结构和算法:介绍常用的数据结构如数组、链表、栈、队列、树、图等,以及基本的算法设计思想和常用算法。
3.面向对象编程:介绍类和对象的基本概念,以及C++语言中的继承、封装、多态等面向对象编程技术。
4.编程实践:通过实际项目的开发,让学生综合运用所学的知识和技能解决实际问题。
三、教学方法本课程采用多种教学方法相结合的方式,以激发学生的学习兴趣和主动性。
具体方法如下:1.讲授法:教师讲解C语言的基本语法、数据结构、算法和编程思想,帮助学生建立知识体系。
2.案例分析法:通过分析典型的案例,让学生理解和掌握C语言编程的技巧和方法。
3.实验法:让学生动手编写程序,进行实验验证,培养学生的实际编程能力和解决问题的能力。
4.小组讨论法:学生进行小组讨论,促进学生之间的交流与合作,培养学生的团队合作意识。
四、教学资源本课程的教学资源包括教材、参考书、多媒体资料和实验设备。
C语言小学数学学习系统课设报告

目录一.设计要求 (2)二.设计目的 (2)三.设计的具体实现1.系统概述: (2)2.总体设计: (3)3.详细设计: (7)4.软件程序设计和调试 (14)四.结论与展望 (15)五.心得体会及建议 (15)六.附录 (16)七.参考文献 (16)小学数学学习系统设计报告一.设计要求小学生数学学习系统具有随机出题、自动评分、查看正确答案、错题重做等功能的测试系统具体要求:1、可选择:加、减、乘、除四种测试,2、可设置测试题数,5,10,20,50,100;3、可设置随机出题难度:即数据大小范围,比如:1位,2位,3位4、可以记录测试者的姓名,时间,难度及测试类型,成绩,题数,运算时间用菜单选择1、开始测试:->选测试类型->选题数->选难度->开始测试2、查看结果:3、查看排名:4、查看错题:5、退出二.设计目的目的: 1. 复习巩固C语言的基础知识,进一步加深对C语言编程的理解和掌握2.根据课内外所学的知识,开发具有实用型的系统,提高学生实践能力,动手能力,和初步的设计编程能力,和理解和掌握模块化编程的方法;3.通过合作完成编程题,逐渐培养学生的编程能力,提高培养学生解决实际问题能力,培养团队合作精神。
三.设计的具体实现Ⅰ.系统概述:小学数学学习系统是基于小学开发,能实现加减乘除四则运算的测试与练习,具有随机出题、自动评分、错题重做、并具有查看个人信息、试题、答案等功能学习应用软件;该软件首界面提供了注册登录界面,不同的学生自己的姓名和学号进行登录;学生首次做完后系统将自动判断,并给出分数;之后学生可以查看自己的成绩,排名并进行错题重做;另外系统还提供计时功能;最后结束后学生个人答题情况及个人信息将保存在,以学生学号命名的文件中,学生可以查看或打印。
2.总体设计:(一)总体思想本系统主要应用结构化的设计思想实现小学学习系统的出题,评分、错题重做,查看排名和查看结果的功能;各主要功能模块的数据均保存在文件中,并多次利用文件和结构体之间的转换实现了数据的保存和传递,其中包含了对文件的读写等操作;运用随机函数实现了随机出题功能,运用冒泡排序法及文件和结构体之间的转换实现了排序功能;在软件开发过程中应用了高级语言程序设计的基本控制结构,如选择、循环、顺序结构。
c语言课程设计小学数学

c语言课程设计 小学数学一、课程目标知识目标:1. 让学生掌握C语言的基本语法和结构,如变量声明、数据类型、运算符、控制语句等;2. 帮助学生理解并运用C语言编写简单的数学运算程序,解决小学数学问题;3. 引导学生了解程序设计的思路和方法,培养其逻辑思维能力。
技能目标:1. 培养学生运用C语言编写数学运算程序的能力;2. 培养学生通过编程解决实际问题的能力;3. 培养学生动手实践、调试程序的能力。
情感态度价值观目标:1. 激发学生对编程的兴趣,培养其探究精神;2. 培养学生团队合作意识,学会与他人共同解决问题;3. 培养学生严谨、细心的学习态度,养成良好的编程习惯。
课程性质:本课程为小学数学与C语言编程相结合的跨学科课程,旨在通过编程解决数学问题,提高学生的逻辑思维能力和动手实践能力。
学生特点:小学高年级学生,具备一定的数学基础和逻辑思维能力,对编程有一定的好奇心。
教学要求:教师应注重理论与实践相结合,关注学生的学习过程,鼓励学生积极参与讨论和实践,培养学生的自主学习能力。
在教学过程中,将课程目标分解为具体的学习成果,便于教学设计和评估。
二、教学内容1. C语言基础知识:- 变量声明与数据类型- 运算符与表达式- 控制语句(if、for、while等)- 函数定义与调用2. 编程解决数学问题:- 小学四则运算(加、减、乘、除)- 循环与迭代(如:求解最大公约数、最小公倍数)- 数列与数学公式(如:求解等差数列、等比数列)- 逻辑推理与条件判断(如:质数判断、奇偶性判断)3. 实践项目与案例分析:- 编写计算器程序,实现基本数学运算功能- 设计数学题目生成器,随机生成小学数学题目- 分析经典数学问题,如“鸡兔同笼”,并用编程解决教学大纲安排:第一周:C语言基础知识学习,包括变量、数据类型、运算符等第二周:控制语句学习,学会使用if、for、while等语句第三周:函数定义与调用,培养学生模块化编程思想第四周:编程解决数学问题,学习四则运算、循环与迭代等第五周:实践项目与案例分析,提高学生编程解决实际问题的能力教学内容与课本关联性:本课程教学内容与小学数学课本紧密结合,通过编程实现数学问题的求解,帮助学生巩固数学知识,提高编程技能。
c系统课程设计报告

c 系统课程设计报告一、教学目标本课程的教学目标是使学生掌握C语言的基本语法、数据结构、算法和编程思想,培养学生具备基本的编程能力和良好的编程习惯。
具体分为以下三个部分:1.知识目标:学生需要掌握C语言的基本语法、数据类型、运算符、控制结构、函数、数组、指针、结构体等基本知识。
2.技能目标:学生需要能够运用C语言编写简单的程序,解决实际问题,培养学生的编程能力和问题解决能力。
3.情感态度价值观目标:通过本课程的学习,使学生认识到编程的重要性,培养学生的学习兴趣和自信心,培养学生具有良好的编程习惯和团队协作精神。
二、教学内容根据课程目标,本课程的教学内容主要包括以下几个部分:1.C语言的基本语法和数据类型:变量、常量、数据类型、运算符等。
2.控制结构:条件语句、循环语句等。
3.函数:函数的定义、调用、参数传递等。
4.数组和指针:一维、二维数组、指针的概念和应用等。
5.结构体和文件操作:结构体的定义和使用、文件的读写操作等。
6.算法和编程思想:排序算法、查找算法、编程原则等。
三、教学方法为了达到课程目标,我们将采用以下教学方法:1.讲授法:通过讲解C语言的基本语法、数据类型、运算符、控制结构、函数等知识,使学生掌握基本概念。
2.案例分析法:通过分析实际案例,使学生了解C语言在实际编程中的应用。
3.实验法:安排实验课,让学生动手编写程序,培养学生的编程能力和问题解决能力。
4.讨论法:学生进行小组讨论,分享学习心得和编程经验,提高学生的团队协作能力。
四、教学资源为了支持教学内容和教学方法的实施,我们将准备以下教学资源:1.教材:《C程序设计语言》(K&R)等。
2.参考书:《C Primer Plus》、《C和指针》等。
3.多媒体资料:教学PPT、视频教程等。
4.实验设备:计算机、网络环境等。
五、教学评估本课程的评估方式包括平时表现、作业、考试等,以全面反映学生的学习成果。
具体评估方式如下:1.平时表现:包括课堂参与度、提问回答、小组讨论等,占总评的20%。
小学算术运算C语言课程设计报告

C语言课程设计报告题目:小学算术运算测试设计者:XXXX专业班级:13级通信2班学号:XXXX指导教师: XXXX2014年6 月14 日河南理工大学计算机学院目录1 题目与要求………………………………………………1.1 问题提出………………………………………………………1.2 本系统涉及的知识点…………………………………………1.3 功能要求………………………………………………………2 功能设计…………………………………………………2.1 算法设计………………………………………………………2.2 部分模块流程图………………………………………………3 程序代码设计……………………………………………………4 C程序设计总结……………………………………………………5 结束语………………………………………………………………参考文献………………………………………………………………附录……………………………………………………………………1 题目与要求1.1 问题提出本人计划制作一个可供小学数学运算程序:10以内加减法,能根据输入题数出题,判断做题是否正确。
正确的给鼓励,错误的发出警报,并给出正确答案,最后计算分数。
1.2 本系统涉及的知识点循环、函数、结构1.3 功能要求1、能根据输入要测试的题目数,输出相应数目的试题。
2、能判断正误,错误的报警,并给出正确答案。
3、能计算出得分。
2 功能设计2.1 算法设计1、本程序实现的功能要求:利用for循环和switch完成的主菜单。
2、进入第一步出现如下信息:用户输入要练习的题数。
第二步:输出算术式子用户输入结果进行测试。
第三步:输出测试结果屏幕显示出本次测试的基本情况。
2.2 部分模块流程图3 程序代码设计输入模块1)函数原形:switch(op)2)功能:利用结构体完成10以内的加减法的出题。
3)变量及类型:int a:整形变量,存放产生10以内的随机数。
int number:整形变量,用来统计错误的题数。
C语言课程设计报告+源码

C 语言课程设计报告一.程序主要功能用单向链表结构实现简单的学生成绩管理功能,具有链表建立、链表输出、结点有序插入、结点删除、数据查询等功能。
用户在主菜单界面输入选项,即按照功能列表0-9输入任意数字,回车后执行该功能。
(1)Create List(建立有序单向链表)从键盘上一次输入一个学生的姓名及成绩,以姓名为序建立有序链表。
插入一条记录后,显示提示信息:确认是否输入下一条记录,如确认,继续输入,否则退出输入功能。
(2)Display All Record(显示所有结点记录)按顺序显示链表中所有记录,每屏显示10条记录。
每显示10条,按<Enter>键继续显示下一屏。
(3)Insert a Record (插入一条结点记录)在以姓名为序排列的链表中插入一条记录,插入后,链表仍有序。
输出插入成功的信息。
(4)Delete a Record (按姓名查找,删除一条结点记录)输入待删除记录的姓名,显示提示信息,用户再次确认是否要删除。
确认后,将该姓名的记录删除。
(5)Query (查找并显示一个结点记录)输入姓名,查找该记录,并显示该同学的成绩。
(6)Add Records from a Text File (从正文文件中添加数据到链表中) 从纯文本文件添加数据到链表。
(7)Write to a Text File将链表中数据写入文件(纯文本文档),键入文件名后建立该文件。
(0)Quit (退出学生成绩管理系统) 释放链表存储空间。
#include<stdlib.h> #include<ctype.h> #include<string.h>#include<alloc.h>struct stud /*定义结构体*/ {char Name[80]; int Score;struct stud *next;};typedefstruct stud Student; /*声明新的类型名Student*/ intmenu_select(); /*声明全体函数*/ Student *Create();void Display(Student *head);Student *Insert(Student *head,Student *s); Student *Insert_a_record(Student *head); Student *Delete(Student *head,char *name);Student *Delete_a_record(Student *head);Student *Query(Student *head,char *name); voidQuery_a_record(Student *head);Student *AddfromText(Student *head,char *filename); voidWritetoText(Student *head,char *filename); void Quit(Student *head);main()/*主函数*/ {Student *head=NULL;/*定义头指针为全局变量*/ for(;;) {switch(menu_select())/*调用menu_select()函数*/ {case 1:/*在主函数中进行各个功能函数的调用*/ head=Create(head);printf("Execution of Create List\n"); system("pause"); break; case 2: Display(head);printf("Execution of Display All Record\n"); system("pause"); break; case 3:head=Insert_a_record(head);printf("Execution of Insert a Record\n"); system("pause"); break; case 4:head=Delete_a_record(head);printf("Execution of Delete a Record\n"); system("pause"); break; case 5:Query_a_record(head); printf("Execution of Qurey\n"); system("pause");break; case 6:head=Add_Records_from_a_Text_File(head); printf("Execution of Add Records from a Text File\n"); system("pause"); break; case 7:Write_to_text(head);printf("Execution of Write to a text file\n"); system("pause"); break; case 0:printf("Goodbye!\n"); system("pause"); exit(0); }}}intmenu_select() /*菜单选择函数*/ { char c; do{system("cls");printf("1.Creat List\n"); printf("2.Display All records\n"); printf("3.Insert a Record\n"); printf("4.Delete a Record\n"); printf("5.Query\n");printf("6.Add Records From a Text File\n"); printf("7.Write to a Text File\n); printf("0.Quit\n");printf("Give your choice(0-7):"); c=getchar(); getchar(); }while(c<'0'||c>'7');return(c-'0'); /*返回选择值*/ }Student *Create(Student *head) /*创建链表*/ {Student *p; char x='y'; /*p 为新开辟的空间的首地址*/ printf("create an increasing list.............."); printf("please input name and score:");while(x=='y') {p=(Student *)malloc(sizeof(Student)); /*给p 分配动态存储空间*/scanf("%s%d",p->Name,&p->Score);head=insert(head,p); /*调用Insert 函数创建有序链表*/ printf("continue?? (y or n?)");getchar();x=getchar();if(x=='n') {printf("game over...\n");break;} elseprintf("please input the name and score:"); }return head; /*返回头指针变量*/ }void Display(Student *head) /*显示链表数据*/{Student *p=head; /*通过变量P 的改变对应链表中所有的数据*/ int i=1;printf("Student Name Score\n"); for(;p!=NULL;i++){printf("%-15s%d\n",p->Name,p->Score); p=p->next; if(i%10==0){system("pause"); /*输出10个暂停一次*/ system("cls");printf("FUNCTION LIST\n"); printf("1.Creat List\n"); printf("2.Display All Record\n"); printf("3.Insert a Record\n");printf("4.Delete a Record\n"); printf("5.Query\n");printf("6.Add Records From a Text File\n"); printf("7.Write to a Text File\n"); printf("0.Quit\n");printf("Student Name Score\n"); } } }Student *Insert(Student *head,Student *p) /*有序插入指针p 所对应的结点到链表*/ {Student *p1,*p2;if(head==NULL) /*如果链表为空*/ {head=p;p->next=NULL;return head; /*返回头指针变量*/}p2=p1=head;while(strcmp(s->Name,p1->Name)>0 && (p1->next!=NULL)) /*查找功能,head 指针非空的情况,当p 指向的Name 的首字母大于head 指针指向的Name*/ {p2=p1;p1=p1->next; /*p1后移,再进行循环,直到s 指向的Name 的首字母小于等于p1指针指向的Name 或p1指向了空指针*/ }if(strcmp(p->Name,p1->Name)<=0 ) {p->next=p1; /*把p 大的p1放在链表后面*/if(head==p1) head=p; /*判断p1是否为head*/ else p2->next=s; }else {p1->next=p;p->next=NULL;} /*p 指向的Name 的首字母大于head 指针指向的Name*/ return head; /*返回头指针变量*/}Student *Insert_a_record(Student *head) /*插入结点记录*/ {Student *p /*p 为新开辟的空间的首地址*/;p=(Student *)malloc(sizeof(Student)); /*给p 分配动态存储空间*/ scanf("%s%d",s->Name,&s->Score);head=Insert(head,p); /*调用Insert 函数插入*/ printf("Insert successfully\n");return head; /*返回头指针变量*/}Student *Delete(Student *head,char *name) /*删除链表中的一条数据,数组name 存放删除数据姓名*/ {Student *p1,*p2; p1=head;while(strcmp(p1->Name,name)!=0&&p1->next!=NULL) {p2=p1;p1=p1->next; }if(strcmp(p1->Name,name)==0) /*找到了姓名相同的记录*/{if(p1==head)head=p1->next; /*当p1==head ,p1->next 为NULL ,赋值给head ,起到了删除的作用*/ else p2->next=p1->next; /*p1->next 为NULL ,赋值给 p2->next 即p1,起到了删除的作用*/}return head; /*返回头指针变量*/ }Student *Delete_a_record(Student *head) /*删除结点记录*/ {charch, name[20]; Student *p; scanf("%s",name); getchar();p=Query(head,name);if(p==NULL) printf("Cannot Find %s\n",name); else {printf("Delete %s, Y/N?\n",name); ch=getchar();if(ch=='y'||ch=='Y') while(p!=NULL) { head=Delete(head,name);/*调用Delete 函数*/p=Query(head,name);/*调用Query 函数进行查找*/}printf("Delete %s is successfully.\n",name); }return head; /*返回头指针变量*/}Student *Query(Student *head,char *name) /*查找一条记录,name 存放待查数据姓名*/ {Student *p; /*通过p 访问所有结点*/p=head;while(strcmp(name,p->Name)!=0&&p->next!=NULL) /*查找功能,寻找需要与查找相同的记录*/p=p->next;if(strcmp(name,p->Name)==0)return p; /*p 此时为文件的头指针*/ elsereturn NULL; /*返回空指针*/ }void Query_a_record(Student *head) /*查询一条记录*/ {char name[20]; /*定义数组存放要查找的名字*/Student *p; /*如果有要查找的结点,P 为该结点的地址*/ scanf("%s",name);p=Query(head,name); /*调用Query 函数进行查找*/ if(p!=NULL) {printf("Find %s successfully\n%s %d\n",p->Name,p->Name,p->Score); } elseprintf("can't find the records of %s\n",name); }Student *AddfromText(Student *head,char *filename) /*从文件添加数据*/ {FILE *fp; /*定义指向FILE 的文件指针*/ Student *p;intn,i;if((fp=fopen(filename,"r"))==NULL) /*用只读方式打开文件*/ {printf("Cannot find file:%s\n",filename); return head; }fscanf(fp,"%d",&n); for(i=0;i<n;i++){p=(Student *)malloc(sizeof(Student)); /*给p 分配动态存储空间*/ fgetc(fp);fscanf(fp,"%s%d",p->Name,&p->Score);head=Insert(head,p); /*调用Insert 函数插入*/ }printf("Add from %s successfully\n",filename); fclose(fp); /*关闭fp1指向的文件*/ return head; /*返回头指针*/ }void WritetoText(Student *head,char *filename) /*将数据写入文件*/ {FILE *fp;Student *p; /*通过指针变量p 访问所有链表结点*/ intnum=0;if(head==NULL)printf("No Record!\n");return head; }fp=fopen(filename,"w"); /*打开输入了文件名的文件*/ p=head;for(;p!=NULL;num++) p=p->next; fprintf(fp,"%d\n",num); p=head;while(p!=NULL){fprintf(fp,"%s %d\n",p->Name,p->Score); /*循环输出,在文件中循环输出数据*/ p=p->next;}printf("Write to %s successfully\n",filename); fclose(fp); /*关闭文件*/ }void Quit(Student *head)/*释放内存空间*/{Student *p; /*通过指针变量p 访问所有链表结点*/ while(head!=NULL) {p=head;head=head->next;free(p); /*退出函数*/ } }四.函数调用关图五.测试流程及典型测试数据1. 执行功能1,输入上表中数据,输入‘n ’返回主菜单。
c语言小学课程设计

c语言小学课程设计一、教学目标本课程旨在通过C语言的学习,让学生掌握基本的编程概念和技能,培养他们的逻辑思维能力和问题解决能力。
具体的教学目标如下:1.理解C语言的基本语法和结构;2.掌握变量、数据类型、运算符和表达式的使用;3.学习控制结构,如条件语句和循环语句;4.了解函数的定义和调用;5.熟悉基本的输入输出操作。
6.能够编写简单的C语言程序;7.具备阅读和理解简单程序的能力;8.学会使用调试工具进行程序的调试和运行;9.能够运用C语言解决实际问题。
情感态度价值观目标:1.培养学生的自主学习和合作学习的精神;2.培养学生对编程的兴趣和热情;3.培养学生解决问题的能力和创新思维;4.培养学生具有良好的编程习惯和职业道德。
二、教学内容本课程的教学内容主要包括C语言的基本语法、数据类型、运算符、控制结构、函数和输入输出操作。
具体的教学大纲如下:1.C语言的基本语法和结构;2.变量、数据类型、运算符和表达式的使用;3.控制结构,如条件语句和循环语句;4.函数的定义和调用;5.基本的输入输出操作。
三、教学方法为了激发学生的学习兴趣和主动性,本课程将采用多种教学方法,如讲授法、讨论法、案例分析法和实验法等。
具体的教学方法如下:1.讲授法:通过讲解和示例,让学生掌握C语言的基本语法和概念;2.讨论法:通过小组讨论和交流,培养学生的合作学习和问题解决能力;3.案例分析法:通过分析实际案例,让学生学会运用C语言解决实际问题;4.实验法:通过编写和调试程序,让学生熟悉C语言的输入输出操作。
四、教学资源为了支持教学内容和教学方法的实施,丰富学生的学习体验,我们将选择和准备以下教学资源:1.教材:《C语言程序设计入门》;2.参考书:《C语言编程思想》;3.多媒体资料:教学PPT、视频教程和在线编程练习;4.实验设备:计算机和编程调试工具。
通过以上教学资源的使用,学生将能够更好地学习和掌握C语言的知识和技能。
五、教学评估为了全面、客观地评估学生的学习成果,本课程将采用多种评估方式,包括平时表现、作业和考试等。
小学生数学学习系统设计报告

目录一、设计要求 (1)二、设计目的 (1)三、设计的具体实现 (3)1.系统概述 (3)2.总体设计 (3)3.详细设计 (4)4.程序实现 (8)四、结论与展望 (22)五、心得体会及建议 (15)六、附录 (25)七、参考文献 (33)小学生数学学习系统设计报告一、设计要求系统为具有随机出题、自动评分、查看正确答案、错题重做等功能的测试。
其具体要求为:1、可选择:加、减、乘、除四种测试,2、可设置测试题数,10,20,50,100;3、可设置随机出题难度:即数据大小范围,比如:1位,2位,3位4、可以记录测试者的姓名,难度及测试类型,成绩,题数当用菜单选择时:1、开始测试:->选测试类型->选题数->选难度->开始测试2、查看排名3、查看错题4、退出二、设计目的1.熟练掌握全局变量的定义及引用方法;熟练掌握C语言、结构体数组的操作及输入、输出;熟练掌握函数定义、函数调用、函数声明的方法。
2.熟练掌握指针变量的定义和引用方法及文件操作函数的使用;熟练掌握常用排序方法——冒泡排序的思想及算法实现。
3.初步掌握开发一个小型实用系统的基本方法:结合实际应用的要求,使课程设计既覆盖知识点,又接近工程实际需要。
4.通过激发学习兴趣,调动学生主动学习的积极性,并引导他们根据实际编程要求,训练自己实际分析问题的能力及编程能力,并养成良好的编程习惯,能正确使用C语言编写程序,进一步理解和运用结构化程设计的思想和方法,学会利用流程图来表示算法。
5.通过查阅手册和文献资料,培养学生独立分析问题和解决问题的能力,通过各组同学合作完成编程题,逐渐培养学生的编程能力,用计算机解决实际问题的能力,团队合作精神。
三、设计的具体实现1.系统概述随着社会的发展,知识在现代社会中发挥的作用越来越重要,家长对孩子的教育也越来越重视。
我运用C语言编写的小学数学测试系统,旨在帮助小学生更好地掌握数学知识,让小学生轻松快乐的学习数学。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
课程设计报告课程设计名称:C语言课程设计课程设计题目:小学数学学习系统目录第1章概要设计 (3)1.1题目的内容与要求 (3)1.2总体结构 (3)第2章详细设计 (4)2.1数据结构设计 (4)2.2功能设计 (4)2.2.1 学生信息存储模块 (4)2.2.2 菜单选择模块 (5)第3章调试分析 (10)第4章使用说明 (11)参考文献 (19)附录(源代码) (21)第1章概要设计1.1题目的内容与要求内容:1.具有随机出题功能,且可以选择难度等级,不要混合运算功能;2.自动评分功能,当用户电答题后能给出用户的分值;3.查看正确答案;4.错题重做功能。
要求:1、用户登录;2、程序采用文本菜单界面。
1.2总体结构本程序主要分为5个模块(功能模块图见图1.1):1.学生信息存储模块,2.菜单选择模块,3.试题测试模块,4.得分与排名模块图1.1第2章详细设计2.1数据结构设计首先定义结构体数组存储学生信息,注册,录入学生个人信息,将学生信息储存在TXT 文档中,用指针写入文件,用while循环语句开始写入测试等级难度,保存正确结果,计算正确率,最后查看排名。
2.2 功能设计2.2.1 学生信息存储模块main函数实现程序的菜单操作。
根据用户选择的不同选项调用不同的函数,实现“注册”、“输入学号”、“选择难度答题”、“返回主菜单”等功能。
具体情况流程图如图2.1所示:算法1在屏幕上输出“请注册”选项;2接受用户输入2.2.2图 2.2图2.32.2.3图 2.4图 2.5 2.2.4 得分与排名模块图 2.6第3章调试分析在上机调试过程中遇到许多问题:1.引用库函数的头文件写成“#include “stdio””;2.变量int类型未先定义后使用;仔细思考总结,查阅教材解决;3.将学生信息输入后答题,但发现无法进行下一步功能;解决办法:按F10键进行单步调试,首先发现指向文件数据的指针没有数据,然后对文件直接进行数据加入,发现其他功能能够实现,然后对指向文件数据的指针进行修改,发现无论怎样修改数据都无法进入到文件,于是对数据输入函数进行修改,发现犯了一个比较低级的错误,scanf (“”)输入数据时忘记“&”符号,造成数据无法输入;4.使用随机数函数,但是调试过程中出现“rand()未定义”,无法产生随机数;解决办法:查找书籍,发现是未使用“rand()”函数的头文件,调用“#include<stdio.h>”后,随机函数问题得以解决;第4章使用说明(1).注册。
先用Judge()函数创建studentmessage.txt文件,直接运行cicaidan();菜单项。
调用Savemessage();进行注册和保存信息。
如图:(2).开始测试。
注册后,显示主菜单ChooseFunc1(),如图:选择1进入开始测试模块,此时引入时间,定义全局变量hour1和min1,scanf("%d,%d",&hour1,&min1);手动输入这两个数。
如图:之后出现ChooseFunc2()菜单功能选择函数,如图:这里的五个选项用while循环使超出功能范围的不能实现,重新选择选项。
再用switch语句选择执行功能,case1程序如下:switch(choose){case 1:system("cls");printf("加法测试:输入要测试的题目数(5/10/20/50/100):");scanf("%d",&thnum);while(thnum<5||thnum>5&&thnum<10||thnum>10&&thnum<20||thnum>20&&thnum<50||thnum>50&&thnum<100||thnum>100){printf("超出功能范围,请重新选择(5/10/20/50/100):");scanf("%d",&thnum);}Addition(thnum);ChooseFunc2();break;}system("cls");为系统清屏。
其他的选项也是如此。
下面以加法为例说明一下运算程序。
加法源程序如下:void Addition(int number){FILE *fp,*fp2,*fp3;if((fp=fopen("TestResult.txt","a"))==NULL){printf("打开文件失败\n");exit(0);}if((fp2=fopen("failedResult.txt","a"))==NULL){printf("打开文件失败\n");exit(0);}if((fp3=fopen("rightResult.txt","a"))==NULL){printf("打开文件失败\n");exit(0);}int num1,num2,num3,num4,m,n,count1=0,count2=0;float average;srand(time(0)); fprintf(fp,"加法测试:\n"); fprintf(fp,"被加数 + 加数 = 你的结果是否正确\n");printf("------------------------------------------\n");printf("--------------- 选择难度------------------\n");printf("------------- 1.简单----------------------\n");printf("------------- 2.一般----------------------\n");printf("------------- 3.困难----------------------\n");printf("------------------------------------------\n");printf("请选择难度(1/2/3): "); scanf("%d",&m);while(m<1||m>3) {printf("超出功能范围,请重新选择(1/2/3):");scanf("%d",&m);}system("cls");{if(m==1) n=10 ; if(m==2) n=100 ;else if(m==3) n=1000 ;}for(int i=0;i<number;i++){if(m==1){num1=rand()%n;num2=rand()%n;}if(m==2){num1=10+rand()%(n-10);num2=10+rand()%(n-10);}if(m==3){num1=100+rand()%(n-100);num2=100+rand()%(n-100);} num3=num1+num2; printf("%d + %d = ",num1,num2); scanf("%d",&num4); if(num3==num4) {fprintf(fp,"%d + %d =%d √\n",num1,num2,num4);count1++;}else {fprintf(fp,"%d + %d = %d ×\n",num1,num2,num4);count2++; fprintf(fp3," %d + %d = %d\n",num1,num2,num3);fprintf(fp2,"%d + %d =\n",num1,num2);}}fclose(fp2);fclose(fp3);average=float(count1)/float(number);fprintf(fp,"正确%d 道,错误%d 道,正确率为:%f\n\n",count1,count2,average);A=A+average*100;c=c+1;fclose(fp);}定义三个文件指针分别指向三个文件,打开文件开始记录数据。
number为题目数形参。
srand(time(0)); 初始化随机数,如果没有此语句,则每次运行程序时的随机数是一样的。
fprintf是向指定的文件中输入,然后开始选择难易程度,同上,先确定可选范围。
用随机函数num1=rand()%n; num2=rand()%n; num3=num1+num2;产生两个随机数分别给加数和被加数,num3储存的是正确答案。
为了使1、2、3与难易联系起来,使用if(m==1) n=10 ; if(m==2) n=100 ; else if(m==3) n=1000 ;来实现转换,当m为1时,将n=10带入num1=rand()%n中,将产生一位数的随机数,即简单题。
同理,当m为2时,num1=10+rand()%(n-10); num2=10+rand()%(n-10);rand()%(n-10)的随机数的取值范围是0―89,加上10后取值范围为10―99,所以将产生两位数的随机数,即一般题。
当m为3时,num1=100+rand()%(n-100); num2=100+rand()%(n-100);同样rand()%(n-100)的取值范围为0―899,加上100后为100―999,所以将产生三位数的随机数,即困难题。
此时出题完毕。
将输入的数与正确答案相比较,如果正确的话,则将该题存入文件rightResult.txt中;错误的话,则将该题存入文件failedResult.txt中。
用以用户查看和错题重做模块。
变量count1记录正确题目的个数,变量count2记录错误题目的个数。
然后将这两个文件关闭。
再算出平均值,并将上面的值放入文件TestResult.txt中,关闭文件。