1、C语言程序设计课程设计报告成都航空职业技术学院C语言程序设计 课 程 设 计 报 告设计题目: C程序综合设计 系 别: 航空电子工程系 专 业: 应用电子技术 班 级: 学 号: 学生姓名: 赵儇宇 指导教师: 完成时间: 年 月 日一、程序设计内容及要求.1二、程序总体设计思路.2 1.课题一的总体设计思路.2 2.课题二的总体设计思路.3三、程序各模块作用及详细设计.3 1.课题一的各模块作用及详细设计.3 2.课题二的各模块作用及详细设计.13四、程序运行过程截图及分析.16 1.课题一程序运行过程截图及分析.162.课题二程序运行过程截图及分析.20五、总结. .22六、附录(完整程
2、序). .22 1.课题一完整程序.22 2.课题二完整程序.27一、课程设计内容及要求题目1用户登录程序。提示用户输入用户名和密码,判断是否是合法用户(假设合法的用户名是“abc”,密码是123456),如果合法,显示“welcom to use the software”,进入以下系统。否则要求重新输入,允许输入3次,若3次都错,显示“password error!you can not use the sorftware”.一班有10名学生,一学期有5门课程,编写程序实现如下功能:(1)录入每名学生的各科成绩(2)求出每名学生的平均成绩和总分(3)求每门课程的平均分、及格率、最高成绩和最
3、低成绩(4)输出总成绩前5名的学生学号、各科成绩和总分(5)输出各科补考学生的学号和成绩菜单格式如下:=菜单=1. 成绩录入2. 学生信息3. 课程信息4. 获奖与补考信息0. 退出 =题目2小学生数学学习系统面向小学12年级学生,随机选择两个整数和加减法形成算式要求学生解答。 功能要求:(1)电脑随机出10道题,每题10分,程序结束时显示学生得分;(2)确保算式没有超出12年级的水平,只允许进行50以内的加减法,不允许两数之和或之差超出050的范围,负数更是不允许的;(3)每道题学生有三次机会输入答案,当学生输入错误答案时,提醒学生重新输入,如果三次机会结束则输出正确答案;1(4)对于每道题
4、,学生第一次输入正确答案得10分,第二次输入正确答案得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
5、(int score106)(录入学生成绩模块)、int Displayscore(int score106)(统计每位同学的平均成绩与总分模块)、int Everykemu(int score106)(统计每门课程的平均分、及格率、最高成绩和最低成绩模块)、int Maxmin(int score106)(统计获奖与补考信息模块)。在整个程序中,我用一个10行6列的二维数组(score106)统计十位同学的学号与五科成绩,第一列储存十位同学的学号后五列储存他们的五科成绩。子程序int MainMenu()用于显示主界面(可用printf实现)。子程序int Inputscore(int sc
6、ore106)用于录入每名学生的各科成绩(可用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名的学生学号、各科成绩的功能和总分和统计并输出各科补考学生的学号和
7、成绩的功能(可用for、if实现)。系统功能模块结构图:学生成绩统计系统每科的平均分、及格率、最高成绩和最低成绩录入学生学号和成绩学生获奖与补考信息学生平均成绩和总分退出系统 222.课题二的总体设计思路:整个程序使用while进行循环出题并解答,程序开始是用srand(time(NULL)随机产生两个50以内的正整数以及0或1,随后用if判断随机产生的两个数的和或差是否在0到50以及随机产生的数是0或1。用if函数将其转换为运算符,若产生的是0则为+,若产生的是1则为-。定义两个变量,一个储存正确答案,另一个则储存输入的答案。然后使用for、scanf控制循环、输入,在用if判断答案的正误与
8、计算得分。答题完成后,用switch显示得分所对应的称号。最后用while、scanf、if实现机会重现功能。三、程序各模块作用及详细设计1.课题一的程序各模块作用及详细设计(1)开始部分:#include#include#include#includeint MainMenu(); /主菜单 int Inputscore(int score106); /录入学生成绩 int Displayscore(int score106); / 求每位同学的平均成绩与总分 并显示 int Everykemu(int score106) ; /求每门课程的平均分、及格率、最高成绩和最低成绩int Maxm
9、in(int score106); /获奖与补考信息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 Everykem
10、u(int score106)、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+
11、; if(i=3) printf(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+输入用户名与密码 NO i=3退出程序显示主菜单 YES4(3)子程序调用模块printf(ntt请选择主菜单序号(04):) ; scanf(%d,&choose); switch(choose) case 1:Inputscore(score); break; /调用录入成绩函数 case 2:
13、Displayscore(score); break; /调用每位同学的平均成绩与总分函数 case 3:Everykemu(score); break; / 调用每门课程的平均分、及格率、最高成绩和最低成绩函数 case 4:Maxmin(score); break; / 调用获奖与补考信息函数 case 0:return 0; default:printf(ntt 输入无效,请重新选择!n); printf(nntt 按任意键返回主菜单); getch(); 该部分是在用户名与密码输入正确进入主菜单后,调用子程序完成相应功能的模块。将输入的选项存入定义的choose,用switch实现子程
14、序调用。3:课程信息主菜单0:退出1:成绩录入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);5 printf(ntt n); printf(ntt = n); printf(ntt 请输入你的选择:);该部分使用printf实现
15、显示出菜单界面与提示。(5)子程序: 录入学生成绩、学号int Inputscore(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)子程序: 求每位同学的平均成绩与总
16、分 并显示int Displayscore(int score106) int i=0,j=1,sum=0; int num110;6 float 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(nt
17、t %d %.2f %d,scorei0,num2i,num1i); 该部分新定义了两数组 int num110(储存总分)、float num210(储存平均成绩)与变量sum,num210定义为float型是考虑到平均成绩不一定为整数。程序使用两级for实现求和与平均成绩并分别将其存入两数组,而i控制行(十行),(j=1;j6)表示五科成绩那五列,最后用printf实现输出显示。i=0,j=1,sum=0scoreijNO输出每位学生的平均成绩与总分YESi+i10?NONum1i=sum;Num2i=sum/5YES Yj+j6?Sum=sum+scoreij图示:7(7)子程序: 求每
18、门课程的平均分、及格率、最高成绩和最低成绩int Everykemu(int score106) int 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; n
19、umj=(float)sum/10; jigelvj=(float)n/10; printf(ntt - n); 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(存储每科及格率),因为平均分与及格率不一定为整数所以为floa
20、t行。程序使用for循环统计每科数据,采用了两段统计,第一段:统计每科最高最低成绩存入相应数组,第二段:统计每科平均分与及格率。其中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+1jmi
21、n=scorei+1ji+sum=sum+scoreijj+max=score0j;min=score0j;i=0,j=1scoreijsum=0,n=0 9i=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(
22、num1i=num1j) temp=num1i; a=scorei0; b=scorei1; num1i=num1j; 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名的学
23、生学号、各科成绩和总分 :n); printf(= n); printf( 学生学号 课程一 课程二 课程三 课程四 课程五 总分 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( %d,scorei0); printf(t%d,scoreij); printf(n); if(n=0) printf(无人补考n); 该部分程序拥有两个功能:一:输出总成绩前5名的学生学号、各科成绩和总分,二:输出各科补考学生的学号和成绩。第一个功能程序先使用for对每位学生成绩求和
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1