c语言程序设计报告.docx

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

c语言程序设计报告.docx

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

c语言程序设计报告.docx

c语言程序设计报告

《C语言课程设计》报告

题目:

成绩管理系统

专业年级:

自动化一班

学号:

姓名:

指导教师:

叶念渝

2015年12月17日

 

一.设计内容

(1)输入功能:

由键盘输入20个学生(姓名)的某门课程的学习成绩10~99分(也可超过)。

(2)运算功能:

将分数由低到高排序(用直接排序法和冒泡法),并显示学生姓名和对应的分数。

(3)检索功能:

用线性搜索法检索某个学生的成绩(输入姓名,显示成绩)。

(4)查询功能:

对分搜索法检索某个学生的成绩(输入姓名,显示成绩)。

二.设计要求

(1)可以输入若干名学生信息(包括姓名/成绩等);

(2)在源代码中将若干名同学的信息输出;

(3)在源代码中能够将若干名同学的成绩排序(升序/降序均可);

(4)可以根据不同的查询条件(线性/对分搜索)来查询到相关学生的信息;

三.设计思路

首先进入软件界面,以菜单为提示的成绩管理系统.分别建立输入学生信息函数输入学生信息,建立排序函数实现排序功能,建立查找函数实现查找功能.通过建立数组在函数运行中进行同步调换实现各信息间分联系,达到信息相对应的目的,在主函数中分别调用各功能函数完成程序目的.

四.程序设计流程图

1.学生信息输入函数

 

 

 

 

 

2.直接排序法流程图

 

 

max=j

同步交换姓名和成绩

 

输出姓名和成绩

输入完毕退出子程序

 

3.冒泡排序法流程图

 

 

ii=0;i

//1.输入函数//学生信息输入函数

voidinput1(charname[N][8],intscore[])

{

inti;

for(i=0;i

{

printf("\n请输入第%d个学生姓名:

",i+1);

scanf("%s",&name[i]);

printf("\n请输入第%d个学生成绩:

",i+1);

scanf("%d",&score[i]);

do

{

while(score[i]<1||score[i]>100)

{

printf("输入有误!

\n");

printf("请重新输入成绩:

");

scanf("%d",&score[i]);

}

}while(score[i]<1||score[i]>100);

getchar();

}

}

//2.成绩排序输出(直接排序法)

voidsort1(charname[N][8],intscore[])

{

inti,j,max,temp1;

chartemp2[100];

for(i=0;i

{

max=i;

for(j=i+1;j

if(score[max]

temp1=score[i];

score[i]=score[max];

score[max]=temp1;

strcpy(temp2,name[i]);//字符串复制函数strcpy()

strcpy(name[i],name[max]);

strcpy(name[max],temp2);

}

printf("Thesortedresult:

\n");

for(i=0;i

printf("姓名:

%10s成绩:

%3d\n",name[i],score[i]);

}

//3.成绩排序输出(冒泡法)

voidsort2(charname[N][8],intscore[])

{

inti,j,t;

charh[100];

for(j=0;j

for(i=0;i

if(score[i]>score[i+1])

{

t=score[i];

score[i]=score[i+1];

score[i+1]=t;

strcpy(h,name[i]);

strcpy(name[i],name[i+1]);

strcpy(name[i+1],h);

}

printf("Thesortedresult:

\n");

for(i=0;i

printf("姓名:

%10s成绩:

%3d\n",name[i],score[i]);

}

//4.线性搜索法检索学生的成绩

voidsearch1(charname[N][8],intscore[])//定义线性搜索法函数

{

getchar();

inta,i;

charb;

charstr[8];

while

(1)

{

printf("请输入学生的姓名:

");

gets(str);

for(i=0;i

{

a=strcmp(str,name[i]);

if(a==0)

break;

}

if(a!

=0)

printf("查无此人!

");

elseif(a==0)

printf("姓名:

%10s成绩:

%3d\n",name[i],score[i]);

getchar();

printf("继续查询吗[Y/N]:

");

b=getchar();

getchar();

if((b=='y')||(b=='Y'))

continue;

else

break;

}

}

//5.对分搜索法检索学生的成绩

voidsearch2(intscore[],charname[N][8])

{

inta,b,c,i;

chard;

while

(1)

{

a=0;

b=N-1;

printf("请输入学生成绩:

");

scanf("%d",&c);

getchar();

while(a<=b)

{

i=(a+b)/2;

if(score[i]==c)break;

if(score[i]

if(score[i]>c)b=i-1;

}

if(score[i]!

=c)

printf("无此成绩\n");

else

printf("姓名:

%10s成绩:

%3d\n",name[i],score[i]);

printf("继续查询吗[Y/N]:

");

d=getchar();

if((d=='y')||(d=='Y'))

continue;

else

break;

}

}

voidmain()

{

intscore[N];

charname[N][8];

inta,b;

printf("*************************学生成绩管理系统********************\n");

printf("************************1.输入学生信息******************\n");

printf("**********************2.直接排序法******************\n");

printf("**********************3.冒泡排序法******************\n");

printf("***********************4.线性搜索法********************\n");

printf("*************************5.对分搜索法**********************\n");

b=1;

while(b==1)

{

printf("请输入序号:

");

scanf("%d",&a);

printf("\n");

switch(a)

{

case1:

printf("输入学生信息\n");

input1(name,score);

break;

case2:

printf("直接排序法\n");

sort1(name,score);

break;

case3:

printf("冒泡排序法\n");

sort2(name,score);

break;

case4:

printf("线性搜索法\n");

search1(name,score);

break;

case5:

printf("对分搜索法\n");

search2(score,name);

break;

case6:

while(0);break;

default:

printf("error\n");

}

printf("1继续程序,2结束程序\n");

scanf("%d",&b);

}

}

j

score[i]>score[i+1

 

 

 

输出姓名和成绩

 

交换完毕退出子程序

 

4.线性搜索法流程图

 

 

 

 

Y

 

输入完毕退出子程序

 

5.对分搜索法流程图

 

调用排序函数对

成绩进行排序

 

a=0;b=n-1

a<=b

i=(a+b)/2

Y

 

 

 

 

6.

主程序

 

N

 

进入相应的分函数界面

 

 

5.设计及调剂的过程中遇到的问题和解决方法

(1).输入人的姓名时为什么要用二维数组?

因为输入了多个人的名字所以我们要建立一个名字的二维数组。

(2).在输入函数中我开始用的是if语句定义输入范围结果只提示一次错误。

后来我加了一个do-while循环,就可以一直执行下去了。

(3).在冒泡排序法中没有理解strcpy函数的用法把字符串复制到字符串中去了,真正用法是将字符串复制的字符数组中去。

(4).将直接排序法和冒泡排序法弄混了,平时直接习惯有冒泡法,后来只有从书上一步一步的分析其数值的变化。

终于本质上的理解了两种排序的作用是如何实现的。

冒泡法是每比较一轮产生一个最小(大)的数放在第一个位置,而直接排序法是找出数值最小(大)的小标与第一个调换。

(5).在设计主函数时我用的是switch函数调用分函数,在进行搜索时我没加循环结果只能查找一个人的不能进行查多个人和判断是否能查到此人。

后来我在搜索法中加了个while循环问题就解决了。

(6).在调试过程中我遇到的主要问题是输出姓名时第一个人的名字输出不出来,后来我一句句的看源程序,也不知道为什么。

我问班上同学才知道我用的是gets(name[i]);输入字符串占用了一个字符所以输出第一姓名时名字数输不出来,我把它改成scanf("%s",&name[i]);就可以输出了。

从这件事中我明白了要学会多思考即使你是参考书上的也要每一步弄懂,不然一个小的细节就会导致程序出问题,我还是对这两种输入字符串函数没有本质的了解。

(7).程序有许多小问题都是在自己一遍遍调试下更正了,比如程序差东西、有问题等,做好一个程序编程还是要自己慢慢探索,理解每一个函数语句。

 

六.心得体会与感受

C语言课程设计总有两周时间,在第一次上课老师交给我们任务不知从何下手到最后将整套学生管理系统的程序准确无误的编出来,对我来说无疑又是一大进步,在这段时间里我遇到了不少的问题。

产生了许多的疑问,但是随着自己的追随问题的根源,不断的温习书本上的知识,反复进行上机的操作,思路一步一步的清晰起来了,所遇到的一些问题也逐渐得到就解决,本不是那么情愿做的程序到因为解决了一些问题所产生的成就感反到激起了我兴趣。

于是借着心中的那一股劲,反复的程序进行摸索,把以前很多没学好的地方都捡了起来,还学会了很多新的知识。

这一切都源于老师对我们的严格要求,还有自己的刻苦专研才有了这样的成果。

如果老师要求没有那么严格,或者是自己不去努力是做不出来学生管理系统的。

在设计的过程中,在我印象中最深刻的挺多的。

冒泡和直接排序法的比较,在二维数组的比较时也遇到了一些问题,主要是对二维数组的概念不清楚,性质不了解,所以在运用时就有一些错误。

当然在设计过程中因为输入法的错误、函数层次不清晰变量名重复定义,也花了很多时间去解决。

所以在这次编程过程中,不仅仅只是完成作业而已,更多的是要用一种肯专研的学习态度,养成一个良好学习习惯。

作为一个合格的编程人员不仅仅要有专业知识,还要有一个良好的编程习惯和一颗仔细的心,更需要一种负责认真编程态度。

 

七.源程序

#include

#include

#defineN5

//1.输入函数//学生信息输入函数

voidinput1(charname[N][8],intscore[])

{

inti;

for(i=0;i

{

printf("\n请输入第%d个学生姓名:

",i+1);

scanf("%s",&name[i]);

printf("\n请输入第%d个学生成绩:

",i+1);

scanf("%d",&score[i]);

do//do-while循环

{

while(score[i]<1||score[i]>100)

{

printf("输入有误!

\n");

printf("请重新输入成绩:

");

scanf("%d",&score[i]);

}

}while(score[i]<1||score[i]>100);

getchar();//字符输入函数

}

}

//2.成绩排序输出(直接排序法)

voidsort1(charname[N][8],intscore[])

{

inti,j,max,temp1;

chartemp2[100];

for(i=0;i

{

max=i;

for(j=i+1;j

if(score[max]

temp1=score[i];

score[i]=score[max];

score[max]=temp1;

strcpy(temp2,name[i]);//字符串复制函数strcpy()

strcpy(name[i],name[max]);

strcpy(name[max],temp2);

}

printf("Thesortedresult:

\n");

for(i=0;i

printf("姓名:

%10s成绩:

%3d\n",name[i],score[i]);

}

//3.成绩排序输出(冒泡法)

voidsort2(charname[N][8],intscore[])

{

inti,j,t;

charh[100];

for(j=0;j

for(i=0;i

if(score[i]>score[i+1])

{

t=score[i];

score[i]=score[i+1];

score[i+1]=t;

strcpy(h,name[i]);

strcpy(name[i],name[i+1]);

strcpy(name[i+1],h);

}

printf("Thesortedresult:

\n");

for(i=0;i

printf("姓名:

%10s成绩:

%3d\n",name[i],score[i]);

}

//4.线性搜索法检索学生的成绩

voidsearch1(charname[N][8],intscore[])//定义线性搜索法函数

{

getchar();

inta,i;

charb;

charstr[8];

while

(1)

{

printf("请输入学生的姓名:

");

gets(str);//输入一段字符串

for(i=0;i

{

a=strcmp(str,name[i]);//strcmp函数(字符串比较函数)

if(a==0)

break;

}

if(a!

=0)

printf("查无此人!

");

elseif(a==0)

printf("姓名:

%10s成绩:

%3d\n",name[i],score[i]);

getchar();

printf("继续查询吗[Y/N]:

");

b=getchar();

getchar();

if((b=='y')||(b=='Y'))

continue;

else

break;

}

}

//5.对分搜索法检索学生的成绩

voidsearch2(intscore[],charname[N][8])

{

inta,b,c,i;

chard;

while

(1)

{

a=0;

b=N-1;

printf("请输入学生成绩:

");

scanf("%d",&c);

getchar();

while(a<=b)

{

i=(a+b)/2;

if(score[i]==c)break;

if(score[i]

if(score[i]>c)b=i-1;

}

if(score[i]!

=c)

printf("无此成绩\n");

else

printf("姓名:

%10s成绩:

%3d\n",name[i],score[i]);

printf("继续查询吗[Y/N]:

");

d=getchar();

if((d=='y')||(d=='Y'))

continue;

else

break;

}

}

voidmain()

{

intscore[N];

charname[N][8];

inta,b;

printf("*************************学生成绩管理系统********************\n");

printf("************************1.输入学生信息******************\n");

printf("**********************2.直接排序法******************\n");

printf("**********************3.冒泡排序法******************\n");

printf("***********************4.线性搜索法********************\n");

printf("*************************5.对分搜索法**********************\n");

b=1;

while(b==1)//while循环

{

printf("请输入序号:

");

scanf("%d",&a);

printf("\n");

switch(a)//switch语句实现多分支选择结构

{

case1:

printf("输入学生信息\n");

input1(name,score);

break;

case2:

printf("直接排序法\n");

sort1(name,score);

break;

case3:

printf("冒泡排序法\n");

sort2(name,score);

break;

case4:

printf("线性搜索法\n");

search1(name,score);

break;

case5:

printf("对分搜索法\n");

search2(score,name);

break;

case6:

while(0);break;

default:

printf("error\n");

}

printf("1继续程序,2结束程序\n");

scanf("%d",&b);

}

}运行情况:

1.主菜单界面

2.信息输入界面

3.直接排序法排序界面

4.冒泡排序法排序界面

5.线性搜索法(输入姓名查找成绩)

6.对分搜索法(输入成绩查找姓名)

7.退出程序界面

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

当前位置:首页 > 农林牧渔 > 林学

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

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