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

上传人:b****7 文档编号:10428248 上传时间:2023-02-11 格式:DOCX 页数:45 大小:333.04KB
下载 相关 举报
C语言程序设计课程设计报告.docx_第1页
第1页 / 共45页
C语言程序设计课程设计报告.docx_第2页
第2页 / 共45页
C语言程序设计课程设计报告.docx_第3页
第3页 / 共45页
C语言程序设计课程设计报告.docx_第4页
第4页 / 共45页
C语言程序设计课程设计报告.docx_第5页
第5页 / 共45页
点击查看更多>>
下载资源
资源描述

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

《C语言程序设计课程设计报告.docx》由会员分享,可在线阅读,更多相关《C语言程序设计课程设计报告.docx(45页珍藏版)》请在冰豆网上搜索。

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

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

成都航空职业技术学院

 

《C语言程序设计》

课程设计报告

 

 

设计题目:

C程序综合设计

系别:

航空电子工程系专业:

应用电子技术

班级:

学号:

学生姓名:

赵儇宇指导教师:

完成时间:

年月日

 

一、程序设计内容及要求.............................1

二、程序总体设计思路...............................2

1.课题一的总体设计思路......................2

2.课题二的总体设计思路......................3

三、程序各模块作用及详细设计.......................3

1.课题一的各模块作用及详细设计..............3

2.课题二的各模块作用及详细设计..............13

四、程序运行过程截图及分析.........................16

1.课题一程序运行过程截图及分析..............16

2.课题二程序运行过程截图及分析..............20

五、总结..........................................22

六、附录(完整程序)..............................22

1.课题一完整程序............................22

2.课题二完整程序............................27

 

一、课程设计内容及要求

题目1用户登录程序。

提示用户输入用户名和密码,判断是否是合法用户(假设合法的用户名是“abc”,密码是123456),如果合法,显示“welcomtousethesoftware”,进入以下系统。

否则要求重新输入,允许输入3次,若3次都错,显示“passworderror!

youcannotusethesorftware”.

一班有10名学生,一学期有5门课程,编写程序实现如下功能:

(1)录入每名学生的各科成绩

(2)求出每名学生的平均成绩和总分

(3)求每门课程的平均分、及格率、最高成绩和最低成绩

(4)输出总成绩前5名的学生学号、各科成绩和总分

(5)输出各科补考学生的学号和成绩

菜单格式如下:

==================菜单===============

1.成绩录入

2.学生信息

3.课程信息

4.获奖与补考信息

0.退出

=======================================

 

题目2小学生数学学习系统

面向小学1~2年级学生,随机选择两个整数和加减法形成算式要求学生解答。

功能要求:

(1)电脑随机出10道题,每题10分,程序结束时显示学生得分;

(2)确保算式没有超出1~2年级的水平,只允许进行50以内的加减法,不允许两数之和或之差超出0~50的范围,负数更是不允许的;

(3)每道题学生有三次机会输入答案,当学生输入错误答案时,提醒学生重新输入,如果三次机会结束则输出正确答案;

1

(4)对于每道题,学生第一次输入正确答案得10分,第二次输入正确答案得7

分,第三次输入正确答案得5分,否则不得分;

(5)总成绩90以上显示“SMART”,80-90显示“GOOD”,70-80显示“OK”,60-70显“PASS”,60以下“TRYAGAIN”。

编程要求:

人机界面良好,有正误判断、机会重现等实用性功能。

二、程序总体设计思路

1.课题一的总体设计思路:

整个程序由一个主程序和五个子程序构成。

主程序功能为录入用户名和密码,并判断其正误和调用子程序(可用scanf、while、for、if、switch实现)。

五个子程序分别是intMainMenu()(显示主菜单模块)、intInputscore(intscore[10][6])(录入学生成绩模块)、intDisplayscore(intscore[10][6])(统计每位同学的平均成绩与总分模块)、intEverykemu(intscore[10][6])(统计每门课程的平均分、及格率、最高成绩和最低成绩模块)、intMaxmin(intscore[10][6])(统计获奖与补考信息模块)。

在整个程序中,我用一个10行6列的二维数组(score[10][6])统计十位同学的学号与五科成绩,第一列储存十位同学的学号后五列储存他们的五科成绩。

子程序intMainMenu()用于显示主界面(可用printf实现)。

子程序intInputscore(intscore[10][6])用于录入每名学生的各科成绩(可用scanf、for实现)。

子程序intDisplayscore(intscore[10][6])中,我定义的intnum1[10]、floatnum2[10]分别统计十位学生的总成绩与平均成绩(可用for实现)。

子程序intEverykemu(intscore[10][6])中,我定义num[10]、jigelv[10]、ma[10]、mi[10]分别储存五科课程的平均分、及格率、最高成绩、最低成绩(可用for、if实现)。

子程序intMaxmin(intscore[10][6])拥有两个功能:

统计并输出总成绩前5名的学生学号、各科成绩的功能和总分和统计并输出各科补考学生的学号和成绩的功能(可用for、if实现)。

系统功能模块结构图:

学生成绩统计系统

每科的平均分、及格率、最高成绩和最低成绩

录入学生学号和成绩

学生获奖与补考信息

学生平均成绩和总分

退出系统

2

2

2.课题二的总体设计思路:

整个程序使用while进行循环出题并解答,程序开始是用srand(time(NULL)随机产生两个50以内的正整数以及0或1,随后用if判断随机产生的两个数的和或差是否在0到50以及随机产生的数是0或1。

用if函数将其转换为运算符,若产生的是0则为‘+’,若产生的是1则为‘-’。

定义两个变量,一个储存正确答案,另一个则储存输入的答案。

然后使用for、scanf控制循环、输入,在用if判断答案的正误与计算得分。

答题完成后,用switch显示得分所对应的称号。

最后用while、scanf、if实现机会重现功能。

三、程序各模块作用及详细设计

1.课题一的程序各模块作用及详细设计

(1)开始部分:

#include

#include

#include

#include

intMainMenu();//主菜单

intInputscore(intscore[10][6]);//录入学生成绩

intDisplayscore(intscore[10][6]);//求每位同学的平均成绩与总分并显示

intEverykemu(intscore[10][6]);//求每门课程的平均分、及格率、最高成绩和最低成绩

intMaxmin(intscore[10][6]);//获奖与补考信息

intmain()

{

intscore[10][6];//定义二维数组,存放学生某课程的成绩

inti=0;

intchoose;//定义整型变量,存放主菜单选择序号

charstr1[10],str2[10];//储存账号与密码

该部分是程序的开头,说明需调用的系统文件,stdio.h、stdlib.h、string.h、conio.h均是程序课顺利运算与比较必须的内容。

而intMainMenu()、intInputscore(intscore[10][6])、intDisplayscore(intscore[10][6])、intEverykemu(intscore[10][6])、intMaxmin(intscore[10][6])均为定义的子程序,score[10][6]为定义的整数型的二维数组用于储存学号与五科成绩以及str1[10]与str2[10]两字符型数组储存用户名与密码。

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("passworderror!

youcannotusethesorftware\n");

exit(0);

}

printf("请输入账户名和密码:

\n");

}

else

break;

}

printf("welcomtousethesoftware\n");

getchar();

MainMenu();//调用显示主菜单

该部分为判断是否是合法用户,gets()为输入函数,将输入的用户名与密码分别存入定义的str1[10]、str2[10]。

再用if将其与正确的用户名与密码比较,并用开头定义的i统计连续数错的次数,exit(0)为退出程序时的函数,MainMenu()为显示主菜单的子程序。

如果在三次机会内输入正确的用户名与密码则输出“welcomtousethesoftware”进入主菜单,若连续输错3次则输出“passworderror!

youcannotusethesorftware”并退出程序。

开始

i=0

图示:

i<3

判断用户名与密码是否正确?

i++

输入用户名与密码

 

NO

i=3

退出程序

显示主菜单

YES

4

(3)子程序调用模块

printf("\n\t\t请选择主菜单序号(0~4):

");

scanf("%d",&choose);

switch(choose)

{

case1:

Inputscore(score);break;//调用录入成绩函数

case2:

Displayscore(score);break;//调用每位同学的平均成绩与总分函数

case3:

Everykemu(score);break;//调用每门课程的平均分、及格率、最高成绩和最低成绩函数

case4:

Maxmin(score);break;//调用获奖与补考信息函数

case0:

return0;

default:

printf("\n\t\t输入无效,请重新选择!

\n");

}

printf("\n\n\t\t按任意键返回主菜单");

getch();

该部分是在用户名与密码输入正确进入主菜单后,调用子程序完成相应功能的模块。

将输入的选项存入定义的choose,用switch实现子程序调用。

3:

课程信息

主菜单

0:

退出

1:

成绩录入

2:

学生信息

4:

获奖与补考信息

图示:

(4)子程序:

显示主菜单

intMainMenu()

{

system("cls");

printf("\n\t\t==================菜单===============\n");

printf("\n\t\t\n");

printf("\n\t\t1.成绩录入\n");

printf("\n\t\t2.学生信息\n");

printf("\n\t\t3.课程信息\n");

printf("\n\t\t4.获奖与补考信息\n");

printf("\n\t\t0.退出\n");

5

printf("\n\t\t\n");

printf("\n\t\t=====================================\n");

printf("\n\t\t请输入你的选择:

");

}

该部分使用printf实现显示出菜单界面与提示。

(5)子程序:

录入学生成绩、学号

intInputscore(intscore[10][6])

{

inti;

system("cls");

for(i=0;i<10;i++)

{

printf("请输入第%d个学生的学号成绩一成绩二成绩三成绩四成绩五\n",i+1);

scanf("%d%d%d%d%d%d",&score[i][0],&score[i][1],&score[i][2],&score[i][3],&score[i][4],&score[i][5]);

}

}

该部分是使用for与scanf实现循环录入,并用i控制输入学生数为十人。

主菜单

i<10?

输入成绩与学号

i=0

图示:

 

i++

 

YES

 

NO

 

(6)子程序:

求每位同学的平均成绩与总分并显示

intDisplayscore(intscore[10][6])

{

inti=0,j=1,sum=0;

intnum1[10];

6

floatnum2[10];

system("cls");

for(i=0;i<10;i++)

{

sum=0;

for(j=1;j<6;j++)

{

sum=sum+score[i][j];

}

num1[i]=sum;

num2[i]=sum/5;

}

system("cls");

printf("\n\t\t每位学生平均成绩与总分如下:

");

printf("\n\t\t=====================================\n");

printf("\n\t\t学生学号平均成绩总分");

printf("\n\t\t-------------------------------------\n");

for(i=0;i<10;i++)

{

printf("\n\t\t%d%.2f%d",score[i][0],num2[i],num1[i]);

}

}

该部分新定义了两数组intnum1[10](储存总分)、floatnum2[10](储存平均成绩)与变量sum,num2[10]定义为float型是考虑到平均成绩不一定为整数。

程序使用两级for实现求和与平均成绩并分别将其存入两数组,而i控制行(十行),(j=1;j<6)表示五科成绩那五列,最后用printf实现输出显示。

i=0,j=1,sum=0

score[i][j]

NO

输出每位学生的平均成绩与总分

YES

i++

i<10?

NO

Num1[i]=sum;

Num2[i]=sum/5

YESY

j++

j<6?

Sum=sum+score[i][j]

图示:

7

(7)子程序:

求每门课程的平均分、及格率、最高成绩和最低成绩

intEverykemu(intscore[10][6])

{

inti=0,j=1,sum=0,n=0;

intma[5],mi[5],min=0,max=0;

floatnum[5],jigelv[5];

system("cls");

for(j=1;j<6;j++)

{

max=score[0][j];min=score[0][j];

for(i=0;i<9;i++)

{

if(max<=score[i+1][j]){max=score[i+1][j];}

if(min>=score[i+1][j]){min=score[i+1][j];}

}

ma[j]=max;mi[j]=min;

}

for(j=1;j<6;j++)

{

sum=0;n=0;

for(i=0;i<10;i++)

{

if(score[i][j]>=60)

n++;

sum=sum+score[i][j];

}

num[j]=(float)sum/10;

jigelv[j]=(float)n/10;

}

printf("\n\t\t-------------------------------------------------\n");

printf("\n\t\t课程平均分及格率最高成绩最低成绩\n");

printf("\n\t\t-------------------------------------------------\n");

for(j=1;j<6;j++)

{

printf("\n\t\t%d%.4f%.4f%d%d\n",j,num[j],jigelv[j],ma[j],mi[j]);

}

}

该部分程序新定义了ma[5](储存每科最高成绩)、mi[5](储存每科最低成绩)、min(用于统计最高成绩)、max(用于统计最低成绩)、num[5](储存每科平均分)、jigelv[5](存储每科及格率),因为平均分与及格率不一定为整数所以为float行。

程序使用for循环统计每科数据,采用了两段统计,第一段:

统计每科最高最低成绩存入相应数组,第二段:

统计每科平均分与及格率。

其中i为行j为列,(j=1;j<6)表示五科成绩列数。

8

第一段内容图示:

求每科平均成绩图示:

i=0,j=1score[i][j]

min=0,max=0

NO

YES

i++

YES

NO

分别输出每科及格率

j++

j<6?

jigelv[j]=(float)n/10

n++

score[i][j]>=60?

求每科及格率图示:

NO

YES

j++

分别输出每科平均分

j<6?

YES

NO

num[j]=(float)sum/10

i<10

YES

分别输出每科最高最低成绩

NO

i<6?

ma[j]=max;

mi[j]=min;

NO

NO

YES

YES

i<10?

i++

max<=score[i+1][j]?

min>=score[i+1][j]?

?

max=score[i+1][j]

min=score[i+1][j]

i++

sum=sum+score[i][j]

j++

max=score[0][j];

min=score[0][j];

i=0,j=1score[i][j]

sum=0,n=0

9

i=0,j=,sum=0,n=0

score[i][j]

(8)子程序:

获奖与补考信息

intMaxmin(intscore[10][6])

{

inti,j,sum=0,num1[10],temp,a,b,c,d,e,f,max;

system("cls");

for(i=0;i<10;i++)

{

sum=0;

for(j=1;j<6;j++)

{

sum=sum+score[i][j];

}

num1[i]=sum;

}

for(i=0;i<9;i++)

for(j=i+1;j<10;j++)

{

if(num1[i]<=num1[j])

{

temp=num1[i];a=score[i][0];b=score[i][1];

num1[i]=num1[j];score[i][0]=score[j][0];score[i][1]=score[j][1];

num1[j]=temp;score[j][0]=a;score[j][1]=b;

c=score[i][2];d=score[i][3];e=score[i][4];

score[i][2]=score[j][2];score[i][3]=score[j][3];score[i][4]=score[j][4];

score[j][2]=c;score[j][3]=d;score[j][4]=e;

f=score[i][5];

score[i][5]=score[j][5];

score[j][5]=f;

}

}

printf("总成绩前5名的学生学号、各科成绩和总分:

\n");

printf("=======================================================\n");

printf("学生学号课程一课程二课程三课程四课程五总分\n");

printf("-------------------------------------------------------\n");

for(j=0;j<5;j++)

{

printf("%d%d%d%d%d%d%d\n",score[j][0],score[j][1],score[j][2],score[j][3],score[j][4],score[j][5],num1[j]);

}

10

printf("-------------------------------------------------------\n");

printf("-------------------------------------------------------\n");

intn;

printf("各科补考学生的学号和成绩如下:

\n");

for(j=1;j<6;j++)

{

n=0;

printf("课程%d补考名单:

\n",j);

for(i=0;i<10;i++)

{

if(score[i][j]<60)

{

n=n+1;

if(n!

=0)

{

printf("学号\t成绩\n");

printf("%d",score[i][0]);

printf("\t%d",score[i][j]);

printf("\n");

}

}

}

if(n==0)

printf("无人补考\n");

}

}

 

该部分程序拥有两个功能:

一:

输出总成绩前5名的学生学号、各科成绩和总分,二:

输出各科补考学生的学号和成绩。

第一个功能程序先使用for对每位学生成绩求和

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

当前位置:首页 > 幼儿教育 > 育儿理论经验

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1