C语言程序设计课程设计报告.doc

上传人:仙人指路1688 文档编号:2384697 上传时间:2023-02-17 格式:DOC 页数:30 大小:1.14MB
返回 下载 相关 举报
C语言程序设计课程设计报告.doc_第1页
第1页 / 共30页
C语言程序设计课程设计报告.doc_第2页
第2页 / 共30页
C语言程序设计课程设计报告.doc_第3页
第3页 / 共30页
C语言程序设计课程设计报告.doc_第4页
第4页 / 共30页
C语言程序设计课程设计报告.doc_第5页
第5页 / 共30页
点击查看更多>>
资源描述

《C语言程序设计课程设计报告.doc》由会员分享,可在线阅读,更多相关《C语言程序设计课程设计报告.doc(30页珍藏版)》请在三一办公上搜索。

1、成都航空职业技术学院C语言程序设计 课 程 设 计 报 告设计题目: C程序综合设计 系 别: 航空电子工程系 专 业: 应用电子技术 班 级: 学 号: 学生姓名: 赵儇宇 指导教师: 完成时间: 年 月 日目录一、程序设计内容及要求.1二、程序总体设计思路.2 1.课题一的总体设计思路.2 2.课题二的总体设计思路.3三、程序各模块作用及详细设计.31.课题一的各模块作用及详细设计.32.课题二的各模块作用及详细设计.13四、程序运行过程截图及分析.161.课题一程序运行过程截图及分析.162.课题二程序运行过程截图及分析.20五、总结. .22六、附录(完整程序). .221.课题一完整

2、程序.222.课题二完整程序.27一、课程设计内容及要求题目1用户登录程序。提示用户输入用户名和密码,判断是否是合法用户(假设合法的用户名是“abc”,密码是123456),如果合法,显示“welcom to use the software”,进入以下系统。否则要求重新输入,允许输入3次,若3次都错,显示“password error!you can not use the sorftware”.一班有10名学生,一学期有5门课程,编写程序实现如下功能:(1)录入每名学生的各科成绩(2)求出每名学生的平均成绩和总分(3)求每门课程的平均分、及格率、最高成绩和最低成绩(4)输出总成绩前5名的学

3、生学号、各科成绩和总分(5)输出各科补考学生的学号和成绩菜单格式如下:=菜单=1. 成绩录入2. 学生信息3. 课程信息4. 获奖与补考信息0. 退出 =题目2小学生数学学习系统面向小学12年级学生,随机选择两个整数和加减法形成算式要求学生解答。 功能要求:(1)电脑随机出10道题,每题10分,程序结束时显示学生得分;(2)确保算式没有超出12年级的水平,只允许进行50以内的加减法,不允许两数之和或之差超出050的范围,负数更是不允许的;(3)每道题学生有三次机会输入答案,当学生输入错误答案时,提醒学生重新输入,如果三次机会结束则输出正确答案;1(4)对于每道题,学生第一次输入正确答案得10分

4、,第二次输入正确答案得7分,第三次输入正确答案得5分,否则不得分;(5)总成绩90以上显示“SMART”,80-90显示“GOOD”,70-80显示“OK”,60-70显“PASS”,60以下“TRY AGAIN”。编程要求:人机界面良好,有正误判断、机会重现等实用性功能。二、程序总体设计思路1.课题一的总体设计思路:整个程序由一个主程序和五个子程序构成。主程序功能为录入用户名和密码,并判断其正误和调用子程序(可用scanf、while、for、if、switch实现)。五个子程序分别是int MainMenu()(显示主菜单模块)、int Inputscore(int score106)(录

5、入学生成绩模块)、int Displayscore(int score106)(统计每位同学的平均成绩与总分模块)、int Everykemu(int score106)(统计每门课程的平均分、及格率、最高成绩和最低成绩模块)、int Maxmin(int score106)(统计获奖与补考信息模块)。在整个程序中,我用一个10行6列的二维数组(score106)统计十位同学的学号与五科成绩,第一列储存十位同学的学号后五列储存他们的五科成绩。子程序int MainMenu()用于显示主界面(可用printf实现)。子程序int Inputscore(int score106)用于录入每名学生的

6、各科成绩(可用scanf、for实现)。子程序int Displayscore(int score106)中,我定义的int num110、float num210分别统计十位学生的总成绩与平均成绩(可用for实现)。子程序int Everykemu(int score106)中,我定义num10、jigelv10、ma10、mi10分别储存五科课程的平均分、及格率、最高成绩、最低成绩(可用for、if实现)。子程序int Maxmin(int score106)拥有两个功能:统计并输出总成绩前5名的学生学号、各科成绩的功能和总分和统计并输出各科补考学生的学号和成绩的功能(可用for、if实现

7、)。系统功能模块结构图:学生成绩统计系统每科的平均分、及格率、最高成绩和最低成绩录入学生学号和成绩学生获奖与补考信息学生平均成绩和总分退出系统 222.课题二的总体设计思路:整个程序使用while进行循环出题并解答,程序开始是用srand(time(NULL)随机产生两个50以内的正整数以及0或1,随后用if判断随机产生的两个数的和或差是否在0到50以及随机产生的数是0或1。用if函数将其转换为运算符,若产生的是0则为+,若产生的是1则为-。定义两个变量,一个储存正确答案,另一个则储存输入的答案。然后使用for、scanf控制循环、输入,在用if判断答案的正误与计算得分。答题完成后,用swit

8、ch显示得分所对应的称号。最后用while、scanf、if实现机会重现功能。三、程序各模块作用及详细设计1.课题一的程序各模块作用及详细设计(1)开始部分:#include#include#include#includeint MainMenu(); /主菜单 int Inputscore(int score106); /录入学生成绩 int Displayscore(int score106); / 求每位同学的平均成绩与总分 并显示 int Everykemu(int score106) ; /求每门课程的平均分、及格率、最高成绩和最低成绩int Maxmin(int score106)

9、; /获奖与补考信息int main() int score106 ; /定义二维数组,存放学生某课程的成绩 int i=0; int choose; /定义整型变量,存放主菜单选择序号 char str110,str210 ; /储存账号与密码 该部分是程序的开头,说明需调用的系统文件,stdio.h、stdlib.h、string.h、conio.h均是程序课顺利运算与比较必须的内容。而int MainMenu()、int Inputscore(int score106)、int Displayscore(int score106)、int Everykemu(int score106)、

10、int Maxmin(int score106)均为定义的子程序,score106为定义的整数型的二维数组用于储存学号与五科成绩以及str110与str210两字符型数组储存用户名与密码。i、choose为定义的整数型变量,i用于统计输错用户名或密码的次数。choose用于控制选择菜单并参与子程序的调用。(2)用户名与密码判断模块printf(请输入账户名和密码:n);while(1) gets(str1); /输入账户名 gets(str2); /输入密码 3 if(strcmp(str1,abc)!=0|strcmp(str2,123456)!=0) i+; if(i=3) printf(

11、password error!you can not use the sorftwaren); exit(0); printf(请输入账户名和密码:n); else break; printf(welcom to use the softwaren); getchar();MainMenu(); /调用显示主菜单该部分为判断是否是合法用户,gets()为输入函数,将输入的用户名与密码分别存入定义的str110、str210。再用if将其与正确的用户名与密码比较,并用开头定义的i统计连续数错的次数,exit(0)为退出程序时的函数,MainMenu()为显示主菜单的子程序。如果在三次机会内输入正

12、确的用户名与密码则输出“welcom to use the software”进入主菜单,若连续输错3次则输出“password error!you can not use the sorftware”并退出程序。开始i=0图示:i3判断用户名与密码是否正确?i+输入用户名与密码NOi=3退出程序显示主菜单YES4(3)子程序调用模块printf(ntt请选择主菜单序号(04):) ;scanf(%d,&choose);switch(choose) case 1:Inputscore(score); break; /调用录入成绩函数 case 2: Displayscore(score); b

13、reak; /调用每位同学的平均成绩与总分函数 case 3:Everykemu(score); break; / 调用每门课程的平均分、及格率、最高成绩和最低成绩函数 case 4:Maxmin(score); break; / 调用获奖与补考信息函数 case 0:return 0; default:printf(ntt 输入无效,请重新选择!n); printf(nntt 按任意键返回主菜单);getch(); 该部分是在用户名与密码输入正确进入主菜单后,调用子程序完成相应功能的模块。将输入的选项存入定义的choose,用switch实现子程序调用。3:课程信息主菜单0:退出1:成绩录入

14、2:学生信息4:获奖与补考信息图示:(4)子程序: 显示主菜单int MainMenu()system(cls);printf(ntt =菜单= n);printf(ntt n);printf(ntt 1. 成绩录入 n);printf(ntt 2. 学生信息 n);printf(ntt 3. 课程信息 n);printf(ntt 4. 获奖与补考信息 n);printf(ntt 0. 退出 n);5printf(ntt n);printf(ntt = n);printf(ntt 请输入你的选择:);该部分使用printf实现显示出菜单界面与提示。(5)子程序: 录入学生成绩、学号int In

15、putscore(int score106)int i; system(cls);for(i=0;i10;i+) printf(请输入第%d个学生的学号 成绩一 成绩二 成绩三 成绩四 成绩五 n,i+1);scanf(%d%d%d%d%d%d,&scorei0,&scorei1,&scorei2,&scorei3,&scorei4,&scorei5); 该部分是使用for与scanf实现循环录入,并用i控制输入学生数为十人。主菜单i10?输入成绩与学号i=0图示:i+YESNO(6)子程序: 求每位同学的平均成绩与总分 并显示int Displayscore(int score106)int

16、 i=0,j=1,sum=0;int num110;6float num210;system(cls); for(i=0;i10;i+) sum=0; for(j=1;j6;j+) sum=sum+scoreij; num1i=sum; num2i=sum/5; system(cls);printf(ntt 每位学生平均成绩与总分如下:);printf(ntt = n);printf(ntt 学生学号 平均成绩 总分); printf(ntt - n);for(i=0;i10;i+)printf(ntt %d %.2f %d,scorei0,num2i,num1i);该部分新定义了两数组 in

17、t num110(储存总分)、float num210(储存平均成绩)与变量sum,num210定义为float型是考虑到平均成绩不一定为整数。程序使用两级for实现求和与平均成绩并分别将其存入两数组,而i控制行(十行),(j=1;j6)表示五科成绩那五列,最后用printf实现输出显示。i=0,j=1,sum=0scoreijNO输出每位学生的平均成绩与总分YESi+i10?NONum1i=sum;Num2i=sum/5YESYj+j6?Sum=sum+scoreij图示:7(7)子程序: 求每门课程的平均分、及格率、最高成绩和最低成绩int Everykemu(int score106)i

18、nt i=0,j=1,sum=0,n=0;int ma5,mi5,min=0,max=0;float num5,jigelv5;system(cls);for(j=1;j6;j+) max=score0j;min=score0j; for(i=0;i9 ;i+) if(max=scorei+1j) min=scorei+1j; maj=max; mij=min; for(j=1;j6;j+) sum=0; n=0; for(i=0;i=60) n+; sum=sum+scoreij; numj=(float)sum/10; jigelvj=(float)n/10; printf(ntt - n

19、); printf(ntt 课程 平均分 及格率 最高成绩 最低成绩 n); printf(ntt - n); for(j=1;j6;j+) printf(ntt %d %.4f %.4f %d %d n,j,numj,jigelvj,maj,mij); 该部分程序新定义了ma5(储存每科最高成绩)、mi5(储存每科最低成绩)、min(用于统计最高成绩)、max(用于统计最低成绩)、num5(储存每科平均分)、jigelv5(存储每科及格率),因为平均分与及格率不一定为整数所以为float行。程序使用for循环统计每科数据,采用了两段统计,第一段:统计每科最高最低成绩存入相应数组,第二段:统计

20、每科平均分与及格率。其中i为行j为列,(j=1;j6)表示五科成绩列数。8第一段内容图示: 求每科平均成绩图示:i=0,j=1 scoreijmin=0,max=0NOYESi+YESNO分别输出每科及格率j+j=60 ?求每科及格率图示:NOYESj+分别输出每科平均分j6?YESNOnumj=(float)sum/10i10YES分别输出每科最高最低成绩NOi6?maj=max;mij=min;NONOYESYESi10?i+max=scorei+1j?max=scorei+1jmin=scorei+1ji+sum=sum+scoreijj+max=score0j;min=score0j;

21、i=0,j=1scoreijsum=0,n=09i=0,j=,sum=0,n=0scoreij(8)子程序: 获奖与补考信息int Maxmin(int score106)int i,j,sum=0,num110,temp,a,b,c,d,e,f,max;system(cls); for(i=0;i10;i+) sum=0; for(j=1;j6;j+) sum=sum+scoreij; num1i=sum; for(i=0;i9;i+) for(j=i+1;j10;j+) if(num1i=num1j) temp=num1i; a=scorei0; b=scorei1; num1i=num1

22、j; scorei0=scorej0; scorei1=scorej1; num1j=temp; scorej0=a; scorej1=b;c=scorei2; d=scorei3; e=scorei4; scorei2=scorej2; scorei3=scorej3; scorei4=scorej4; scorej2=c; scorej3=d; scorej4=e; f=scorei5; scorei5=scorej5; scorej5=f; printf( 总成绩前5名的学生学号、各科成绩和总分 :n);printf(= n);printf( 学生学号 课程一 课程二 课程三 课程四 课

23、程五 总分 n); printf( -n);for(j=0;j5;j+) printf( %d %d %d %d %d %d %dn,scorej0,scorej1,scorej2,scorej3,scorej4,scorej5,num1j); 10 printf( -n); printf( -n); int n; printf(各科补考学生的学号和成绩如下 : n);for(j=1;j6;j+) n=0; printf(课程%d补考名单:n,j); for(i=0;i10;i+) if(scoreij60) n=n+1; if(n!=0) printf( 学号t成绩n); printf( %

24、d,scorei0); printf(t%d,scoreij); printf(n); if(n=0) printf(无人补考n); 该部分程序拥有两个功能:一:输出总成绩前5名的学生学号、各科成绩和总分,二:输出各科补考学生的学号和成绩。第一个功能程序先使用for对每位学生成绩求和,然后使用if将十位同学按总成绩由高到低排序,输出前五位同学的学号与成绩。新定义的temp,a,b,c,d,e,f作用是实现排序时交换学号与成绩的中间变量,变量sum是储存一位同学的总成绩,再将sum中的值存入一维数组num110。第二个功能程序比较简单,此程序使用for循环,在for中用if与定义的变量n判断每位

25、同学每科成绩是否及格,如果不及格则及时输入其学号与该科成绩。第一个功能程序图示: 第二个功能程序图示:1112退出循环系统,输出所有补考信息YESj+NONOj6?YESi+i10?输出补考学生学号、补考科目成绩YESNOi+scoreij60?scoreij、j=1、i=0i=0,j=1,(j=i+1)sum=0,num110scoreij输出经排序后第前五名学生的学号、每科成绩与总分NOYESi+NOi+i9?将第i行与第i+1行全部进行交换YESNOnuminumi+1?i=0YESi+i10?numi=sumj+j6?Sum=sum+scoreij2.课题二的程序各模块作用及详细设计

26、(1)开始部分:#include #include #include #include int main()int i=1,num3,s,j;int b,c,e;char a;int d3=10,7,5;srand(time(NULL);printf(欢迎使用12年级学生数学学习系统:n);该部分是程序的开头,说明需调用的系统文件,stdio.h、stdlib.h、time.h、conio.h均是程序课顺利运算与比较、产生随机数必须的内容。num3是储存随机产生的的两个小于50的数与运算符(+、-),定义的d3=10,7,5则是为了计算每题分数与c统计总得分。srand(time(NULL)为

27、了下面产生随机数所必须的,字符型变量a是储存运算符(+、-)。(2)随机产生小于50的加减法模块:while(1)num0=rand()%50; num1=rand()%50; if(num0+num1=0) break; num2=rand()%2; if(num2=0) a=+; else a=-; if(a=+) printf(%d+%d=,num0,num1); s=num0+num1; else if(a=-) printf(%d-%d=,num0,num1); s=num0-num1; 13 该部分程序主要使用 num0=rand()%50(产生一个50以内的整数)、num1=ra

28、nd()%50(产生一个50以内的整数)、num2=rand()%2(随机产生0或1)与if、while实现功能,if是将随机产生的0或1转换为+或-并用printf输出题,While是整个程序的循环函数。图示:随机产生0或1、存入num2随机产生一个数存入num1随机产生一个数存入num0num0-num1=?num0+num1=?NOYESnum0=0?(3)录入答题与等级显示: for(b=0;b3;b+) scanf(%d,&c); if(b=2) printf(正确答案是%d。小朋友你粗心了哦,要仔细答题哦。n,s);break; if(c=s) c=c+db;break; else

29、 printf(小朋友你的答案是错的,好好想想在答吧。n); printf(n); i+; if(i=11) e=c/10; switch(e) case 10: case 9: printf(SMART);break; case 8:printf(GOOD);break;14 case 7:printf(OK);break; case 6:printf(PASS);break; case 5: case 4: case 3: case 2: case 1:printf(TRY AGAIN);break; case 0:printf(TRY AGAIN);break; 该部分程序先使用scan

30、f录入答案,再多次使用if判断答错题数(计数变量为b)与总题数(计数变量为i)最后使用switch得出对应等级。录入答案b=0,i=1图示:输出总得分并显示对应等级NOYESNOYESNOb3?i11?YESi+输入的答案是否正确?(4)机会重现功能: while(j!=0&j!=1) printf (想退出请按0,再来挑战次请按1。n);scanf (%d,&j);if (j=0) exit(0);else if (j=1)printf(再来一次n);system(cls);15i=1; c=0; elseprintf(您的输入有误,请重新选择。n); 此部分程序运用while(用于跳转至用

31、户选项界面)、scanf(录入用户的选项0或1)、if用于判断实现机会重现。i=1,c=0是将题号、成绩清零好再次答题。四、 程序运行过程截图及分析1.课题一的程序运行过程截图及分析(1)程序开始阶段: 出现提示“请输入用户名和密码”,此时输入用户名按回车再次输入密码按回车即输入用户名和密码。(正确用户名与密码:abc 123456)16(2)进入主菜单阶段:(3)成绩录入阶段:在阶段(2)时输入1进入成绩录入阶段,依次输入第一个学生学号与五科目成绩用空格隔开并回车,程序会出现输入第二个学生信息的提示,依次类推:17(4)查看学生信息阶段:在录入完成绩的情况下,在主菜单中选择此阶段即可查看。(5)查看课程信息阶段:在录入完成绩的情况下,在主菜单中选择此阶段即可查看。18(6)查看获奖与补考信息阶段:192.课题二的程序运行过程截图及分析(1)程序开始与进行阶段:20(2)答题完成显示等级阶段:(3)重新答题阶段:在阶段(2)完成后,选择1则为此阶段,选择0则推出系统。21五、 总结1程序优点:操作界面明了,提示语言人性化、算法简单、有效防止数据错误。2.程序缺点:程序依然不够精炼,内容不是很丰富。3.程序改进思路:多使用while替代for,以使变得程序更明了简单。六、附录(完整程序)1.课题一完整程序:#include#include#includestrin

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 建筑/施工/环境 > 项目建议


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号