还剩23页未读,继续阅读
本资源只提供10页预览,全部文档请下载后查看!喜欢就下载吧,查找使用更方便
文本内容:
课程设计报告课程设计名称C程序设计系学生姓名班级学号成绩指导教师目录TOC\o1-3\h\z\u第一章菜单设计
11.1设计题目及要求112设计思路
21.3流程图
21.4具体实现
21.5程序运行截图5第二章使用数组和指针统计成绩
62.1设计题目及要求
62.2设计要求
62.3设计思路
72.4流程图
72.5具体实现
72.6程序运行截图8第三章学生成绩管理系统
93.1设计题目及要求
93.2设计思路
113.3流程图
123.4具体实现
123.5程序运行截图20小结23____24第一章菜单设计
1.1设计题目及要求一.菜单内容程序运行后,给出5个菜单项的内容和输入提示1.FindNum2.FindRoot3.Bear4.Diamond5.Goodbye
二、设计要求使用数字1-5来选择菜单项,其它输入则不起作用
三、设计实例首先编写一个菜单程序,输入1-6以进入相应选择项,从程序测试结构可知,当选择相应选择项时候,其输出信息为FindNum、FindRoot、Bear、Diamond、Goodbye!使用switch语句实现功能选择应该设计一个函数用来输出提示信息和处理输入,这个函数应该返回一个数值,以便提供给switch语句使用
四、增加菜单项的处理功能FindNum功能____咬坏了账本,公式中符号()代表是被老鼠咬掉的地方要想恢复下面的等式,应在()中填上哪个相同的数字FindRoot这里要求编制一个求方程ax^2+bx+c=0的根程序Bear本题是一个笑话,话说有一只狗熊到玉米地里掰玉米,一边掰一边吃,第一天吃了一半,又拿走了一个回去喂狗熊第二天又去吃了剩下的一半,走时仍然带一个回去喂狗熊以后每天都吃前一天的一半,拿走一个到第十天时,地里只剩下一个玉米求地里一共有多少玉米DiamondGoodbye!12设计思路由题目可以知道可以设置一下几个模块:首先选择菜单程序模块FindNum题目模块FindRoot题目模块Bear题目模块Diamond题目模块.使用调用函数来完成第二个模块设计,例如voidFindNumvoidFindRoot等函数调用来对题目编写完成该次设计的程序使用switch语句,printf语句输出菜单,主要是通过调用函数来完成相应菜单程序的编写查看
1.3流程图
1.4具体实现#includestdio.h#include__th.hvoidFindNum;voidFindRoot;voidBear;voidDiamond;voidGoodbye;voidShowMenu{intn;printfInputanumberfrom1-3:\n1FindN__;\n2FindRoot;\n3Bear;\n4Diamond;\n5Goodbye\n;scanf%dn;switchn{case1:FindNum;break;case2:FindRoot;break;case3:Bear;break;case4:Diamond;break;case5:Goodbye;break;default:printfError!Inputagain!;ShowMenu;}}//老鼠啃账本voidFindNum{inti;printf3£×6237=£3×3564\n;fori=1;i10;i++{if30+i*6237==10*i+3*3564printf3%d×6237=%d3×3564\nii;ShowMenu;}}//求根voidFindRoot{floatabc;floatdelta;printf求一个二元方程ax2+bx+c=0的根的问题;printfinputabc:;scanf%f%f%fabc;delta=b*b-4*a*c;/*b^2-4ac*/ifdelta0{printfnofactroot.\n;}elseifdelta0{/*delta==0h__e1root*/printfroot1=root2=%
0.2f\n-1*b/2*a;}else{/*delta0h__e2root.*/printfroot1=%
0.2froot2=%
0.2f\n-1*b+sqrtdelta/2*a-1*b-sqrtdelta/2*a;ShowMenu;}}//狗熊吃玉米voidBear{intdayx1x2;printf狗熊到玉米地吃了包谷;printf第一天吃了一半又拿走一个回去喂小狗熊\n;printf第二天又去吃了剩下的一半,走是任然带一个回去/n;printf以后每天都吃前一天剩下的一半,拿走一个/n;printf到了第十天时,地里只剩下一个包谷求地里一共有多少包谷/n;day=10;x2=1;whileday0{x1=x2+1*2;x2=x1;day--;}printf包谷总数=%d\nx1;ShowMenu;}}//钻石voidDiamond{intijk;fori=0;i7;i++{ifi4{forj=0;j15-i;j++printf;fork=0;k2*i+1;k++printf*;}else{forj=0;ji+9;j++printf;fork=0;k13-2*i;k++printf*;}printf\n;}ShowMenu;}voidGoodbye{printfGoodbye!\n;}void__in{ShowMenu;}
1.5程序运行截图第二章使用数组和指针统计成绩
2.1设计题目及要求设计题目假设给定班级各科考试平均成绩的原始资料如下数学75物理80外语83__85体育:86人数30要求统计出全班学期总平均成绩以及得分最低的科目和该科目的成绩要求的输出结果如下原始信息如下数学75物理80外语83__85体育:86人数30平均成绩0最低分数科目的成绩0最低分数的科目全班各科平均成绩如下数学75物理80外语83__85体育:86人数30统计结果如下人数30平均成绩81最低分数科目的成绩75最低分数的科目数学
2.2设计要求实现本设计功能的方法很多,这里给出4种难易成度不同的要求,以便加深对数组和指针知识的理解对存放原始数据的要求如下使用整形数组a存放数学、物理、外语、__、体育、人数、平均成绩、最低分科目的成绩使用字符串数组name存放数学、物理、外语、__、体育、最低分数的科目使用字符串数组MeanLow存放人数、平均成绩、最低分数科目的成绩、最低分数的科目使用字符指针指向字符数组(这个题目的要求超出一般的教材,但对理解指针很有用途)
2.3设计思路将数组a的内容存入到分配的内存中,使用指针实现对内存内容的存取和计算为字符分配内存,并将字符数组的内容也存入所分配的内存中,使用这些指针实现设计要求
2.4流程图
2.5具体实现#includestdio.hint__in{int__erageisummin;inta
[6]={758083858630};charp
[6]={数学物理外语__体育人数};charm
[3]={总平均成绩”最低分数科目的成绩”最低分数科目”};printf原始数据\n;fori=0;i8;i++printf%c%f\np[i]a[i];printfm
[0]\n;printfm
[1]\n;printfm
[2]:\n\n;printf全班各科平均成绩如下\n;fori=0;i8;i++printf%c%f\np[i]a[i];printf统计结果如下\n;printfp
[5]%d\na
[5];fori=0;i5;i++sum+=a[i];__erage=sum/5;printfm
[0]%d\n__erage;fori=1;i5;i++ifa
[0]a[i]min=a
[0];elsemin=a[i];printfm
[1]%d\nmin;printfm
[2]:%s\n数学;return0;}
2.6程序运行截图第三章学生成绩管理系统
3.1设计题目及要求设计要求
1.功能设计要求设计要求实现的功能较多,所以将它们分为几个部分叙述建立文件可以使用默认文件名或指定文件名将记录存储到文件;文件保存成功返回0,失败返回-1;设置保存标志s__edTag作为是否对记录进行存储操作的信息;写同名文件将覆盖原来文件的内容;增加学生记录可在已有记录后面追加新的记录可以随时用它增加新的记录,它们仅保存在结构数组中;可以将一个文件读入,追加在已有记录之后;如果已经采取文件追加的方式,在没有保存到文件之前,将继续保持文件追加状态,以便实现连续文件追加操作方式;如果没有记录存在,给出提示信息显示记录如果没有记录可供显示,给出提示信息;可以随时显示内存中的记录文件存储可以按默认名字或指定名字存储记录文件;存储成功返回
0.,否则返回-1;更新存储标志;读取文件可以按照默认名字或指定名字将记录文件读入内存;读取成功返回0,否则返回-1;可以将指定或默认文件追加到现有记录并更新记录的尾部;可以将文件连续追加到现有记录并更新记录的名词;更新存储标志;删除记录可以按“学好”、“姓名”、“名词”方式删除记录;给出将删除记录的信息,经确认后在删除;如果已经是空表,删除时给出提示信息并返回菜单;如果没有要删除的信息,输出没有找到的信息;应该更新其他记录的名词;删除操作权限于内存,只有执行存记录时,才能覆盖原记录;修改记录可以按“学号”、“姓名”、“名次”方式修改记录内容;给出将修改记录的信息,经确认后进行修改;如果已经是空表,应给出提示信息并返回主菜单;如果没有找到需要要改的信息,输出提示信息;应该同时更新其他记录的名词;修改操作权限于内存,只有进行存储操作时,才能覆盖原记录;更新存储标志;查询记录可以按“学号”、“姓名”、“名次”方式修改记录内容;能给出查询记录的信息;如果查询的信息不存在,输出提示信息;对记录进行排序可以按学好进行升序或降序排序;可以按名称进行升序和降序排序;可以按名词进行升序或降序排序;如果属于选择错误,可以立即退出排序;更新存储标志;头文件使用条件编译定义头文件;函数原型声明;数据结构及包含文件;测试程序应列出测试大纲对程序进行测试;应保证测试用例测试到程序的各种边缘情况;以上是基本要求,希望通过对本章设计的理解,重新考虑如何进行设计
2.总体设计最初的整体规划只是说明它们的可行性,不要求制定函数的具体实现,甚至不需要考虑函数原型完成整体规划后,可以按照流程描述各个模块之间的接口功能本课程设计对模块设计的要求如下要求使用对文件方式实现设计;要求在各个文件内实现结构化设计;每个模块作为一个单独的C文件,每个文件内的函数如表12—1所示,表中给出了各个函数的功能说明;宏和数据结构等放在头文件中,并使用条件编译
3.2设计思路
(1)主函数主函数__in功能通过调用creatsearchdeladdprintststisticss__etaxis等函数,实现学生成绩查询
(2)菜单界面函数intmenuintk/*函数menu功能菜单选择
(3)输入学生信息因为学号不可能为0,所以设计当输入学生信息时输入学号为零则自动返回菜单函数,这样就可以无限次输入直到输入学号为零了
(4)删除学生信息该学号提供给用户按学号删除;首先判断文件中是否有学生信息,如果文件内容是空,就输出“没有该学生记录!
(5)查找学生信息函数该程序用switcha函数设计了两种查询方式----
1.按学号查找;
2.按姓名查找
(6)显示所有学生信息函数该函数主要使用输出函数printf来实现,首先看有没有学生信息,再用指针指向存在的文本,用dowhile语句来实现所有信息的输出
(7)统计学生信息
(8)保存学生信息
(9)退出程序
3.3流程图
3.4具体实现#includestdio.h#includestring.h#includepro__ss.h#includeconio.h#defineN30#defineM3typedefstructstudent{charnumber
[10];charname
[20];floatscore[M];float__er;}STU;STUstu[N];intn;voidinputscorevoid;voids__escorevoid;void__ergescorevoid;voidmodifyscorevoid;voidlookscorevoid;voidsearchscorevoid;voidstatisticvoid;voidaddvoid;voidmodifyvoid;voiddelscorevoid;voidmenuvoid;void__in{shortintflag=0;menu;do{flag=1;switchgetch{case1:inputscore;break;/*输入成绩*/case2:lookscore;break;/*查看成绩*/case3:searchscore;break;/*查找成绩*/case4:statistic;break;/*成绩统计*/case5:modify;break;/*____*/case6:add;break;/*添加成绩*/case7:delscore;break;/*删除成绩*/case8:s__escore;break;/*保存成绩*/case9:exit0;/*退出程序*/default:printf输入有误\n;}printf按任意键继续\n;getch;menu;}whileflag==1;}voidmenuvoid{systemcls;printf\n;printf*********欢迎进入学生成绩管理系统**************\n;printf菜单\n;printf输入成绩-------------------------------------1\n;printf查看成绩及成绩排序---------------------------2\n;printf查询学生成绩---------------------------------3\n;printf成绩统计-------------------------------------4\n;printf____-------------------------------------5\n;printf添加成绩-------------------------------------6\n;printf删除成绩-------------------------------------7\n;printf保存成绩-------------------------------------8\n;printf退出系统-------------------------------------9\n;printf**********************************************\n;printf请输入您的选择\n;}/***************输入各个同学的学生信息******************************/voidinputscorevoid{intij;systemcls;printf请输入学生总数\n;scanf%dn;printf提示*输入学号时请输入位数为8位的数字*\n;/*因二维表上下需对正故有此要求*/fori=0;in;i++{printf请输入学生%d的学号姓名:\ni+1;scanf%s%sstu[i].numberstu[i].name;printf请输入学生成绩:\n;printf数学\t英语\t计算机\n;forj=0;jM;j++scanf%fstu[i].score[j];}printf成功输入\n;}/*****************计算各个同学的平均分*****************************/void__ergescorevoid{intij;fori=0;in;i++{stu[i].__er=0;forj=0;jM;j++{stu[i].__er+=stu[i].score[j];}stu[i].__er=stu[i].__er/M;}}/************查看学生成绩及根据平均分对学生进行排序*********************/voidlookscorevoid{intijk;STUt;__ergescore;systemcls;fori=0;in-1;i++{fork=ij=i+1;jn;j++ifstu[j].__erstu[k].__erk=j;ifk!=j{t=stu[k];stu[k]=stu[i];stu[i]=t;}}printf名次\t学号\t\t姓名\t数学\t英语\t计算机\t平均分\n;fori=0;in;i++{printf%d\t%s\t%s\ti+1stu[i].numberstu[i].name;forj=0;jM;j++printf%
4.2f\tstu[i].score[j];printf%
4.2fstu[i].__er;printf\n;}}/*****************通过输入学号查找学生成绩***************************/voidsearchscorevoid{chara
[10];intij;systemcls;printf请输入需查询的学生学号\n;scanf%sa;fori=0;in;i++{ifstrcmpastu[i].number==0{printf名次\t学号\t\t姓名\t数学\t英语\t计算机\t平均分\n;printf%d\t%s\t%s\ti+1stu[i].numberstu[i].name;forj=0;jM;j++printf%
4.2f\tstu[i].score[j];printf%
4.2fstu[i].__er;printf\n;break;}elseprintf未找到该学生信息\n;}}voidstatisticvoid{STU*p=stu;intij;floatcount=
0.0sum=
0.0;systemcls;fori=0;in;i++{sum+=p+i-__er;}printf该班级平均分为%
4.2f\nsum/n;/*平均分计算*/fori=0;in;i++{ifp+i-__er=60count++;}printf该班级及格率为%
4.2f%%\ncount/n*100;/*及格率计算*/count=
0.0;fori=0;in;i++{ifp+i-__er=90count++;}printf该班级优秀率为%
4.2f%%\ncount/n*100;/*优秀率计算*/fori=0;in;i++{forj=0;jM;j++{sum=p+i-score[j]-p+i-__er*p+i-score[j]-p+i-__er;}sum=sum/n;printf学生%s的成绩方差为%
4.2f\np+i-namesum;}printf平均分低于60的学生__\n;fori=0;in;i++{ifstu[i].__er60printf%s\nstu[i].name;}}/***************修改学生成绩*****************/voidmodifyvoid{chara
[10];intij;systemcls;printf请输入需要____的学生学号\n;scanf%sa;fori=0;in;i++{ifstrcmpastu[i].number==0{printf名次\t学号\t\t姓名\t数学\t英语\t计算机\t平均分\n;printf%d\t%s\t%s\ti+1stu[i].numberstu[i].name;forj=0;jM;j++printf%
4.2f\tstu[i].score[j];printf%
4.2fstu[i].__er;printf\n;printf请重新输入该学生的学号姓名:\n;scanf%s%sstu[i].numberstu[i].name;printf请重新输入学生成绩:\n;printf数学\t英语\t计算机\n;forj=0;jM;j++scanf%fstu[i].score[j];printf修改成功\n;break;}elseprintf未找到该学生信息\n;}}/*****************添加学生成绩********************/voidaddvoid{intaij;systemcls;printf请输入新增加的学生人数\n;scanf%da;n=n+a;fori=n-a;in;i++{printf请输入学生%d的学号姓名:\ni+1;scanf%s%sstu[i].numberstu[i].name;printf请输入学生成绩:\n;printf数学\t英语\t计算机\n;forj=0;jM;j++scanf%fstu[i].score[j];printf添加成功\n;}}/*******************删除学生成绩*************************/voiddelscorevoid{intijc;charma
[10];systemcls;printf请输入学生学号\n;scanf%sa;fori=0;in;i++{ifstrcmpastu[i].number==0{printf名次\t学号\t\t姓名\t数学\t英语\t计算机\t平均分\n;printf%d\t%s\t%s\ti+1stu[i].numberstu[i].name;forj=0;jM;j++printf%
4.2f\tstu[i].score[j];printf%
4.2fstu[i].__er;printf\n;c=i;break;}elseprintf未找到该学生信息\n;}printf是否删除该学生成绩y/n\n;scanf%sm;ifm==y{fori=c;in-1;i++stu[i]=stu[i+1];n=n-1;printf删除成绩成功\n;}elseprintf删除成绩失败\n;}/******************保存学生成绩************************/voids__escorevoid{FILE*fp;intiflag=1;charm;systemcls;puts是否保存学生成绩y/n;scanf%sm;ifm==y{iffp=fopenscore.datwb==NULL{printf文件打开失败\n;return;}fori=0;in;i++iffwritestu[i]sizeofstructstudent1fp!=1{printf保存失败\n;flag=0;}ifflag==1printf保存成功!\n;fclosefp;}elsereturn;}
3.5程序运行截图主菜单输入成绩查看成绩查询成绩统计成绩____添加成绩删除成绩保存成绩小结这次为期两周的C语言课程设计,让我在巩固已学理论知识的同时又学习到了编程能力,学会了利用网上资源和图书馆资源查找资料,在他人的经验和成功中汲取营养,吸收成为自己的知识在这两周时间里,我首先利用查找的资料编写源程序,接着就对其进行编译由于所学知识还不够丰富,自身的编程能力也比较匮乏,我在编译过程中出现了许多错误,比如在结构体、数组和指针的应用上有很多问题在查阅资料和老师、同学们的帮助下,我一次次的编译、一次次的修改,终于完成了本次课程设计!就是在这一次次的尝试过程中,让我明白了在实践中学习、在实践中进步,理论和实践才是提高学习能力的最佳途径同时,也学会了做课程设计所需的步骤及如何对其进行规划整理,为以后的毕业设计打下了基础,____
[1]谭浩强,《C程序设计》,清华大学出版社
2001.2
[2]刘振安,《C语言课程设计》,机械工业出版社2004年9月1日.。