C语言课程设计.docx

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

C语言课程设计.docx

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

C语言课程设计.docx

C语言课程设计

课程设计(论文)任务书

学院

理学院

专业

光信息科学与技术

学生姓名

宋林芳

班级学号

0909020204

课程名称

C语言程序设计课程设计

课程设计(论文)题目

学生信息管理

设计要求(技术参数):

通过该课程设计,进一步巩固和复习C程序设计的基础知识,了解软件的编制过程及各环节的具体内容。

掌握结构化程序、模块化程序设计的方法。

提高学生分析问题、解决问题以及实际运用能力。

设计任务:

根据学生信息管理的各个方面,完成输入并显示所有记录,依照菜单选择功能:

按成绩排序,插入,删除,并显示一条记录,输出成绩统计信息,输出各分数段人数

计划与进度安排:

第一天查找资料第二天程序设计

第三、四天上机调试程序、测试第五天答辩

成绩:

指导教师(签字):

年月日

专业负责人(签字):

 

年月日

主管院长(签字):

年月日

摘要

随着教育水平的显著提高,人们对学校中学生的信息管理功能的要求也越来越高。

因此,完善且功能强大的学生信息管理系统的设计势在必行。

这样的系统,不仅可以整合信息,适用于学校高级管理者读取和认识,还可以完成日常考试中对学生分数的处理,方便广大师生更直观的查看成绩。

做这个程序,在巩固C语言的同时,又可以从中体会到前辈们在做这些程序时复杂的心情。

然而,由于学习内容和时间有限,至今我只能实现排序,插入,删除,查找,统计,分析等简单的功能,还有很大提高的空间。

在今后的学习生活中,我会继续努力,争取进一步来完善它的功能。

本系统采用TurboC语言开发,生成可执行文件在任何系统下都可以执行,具有很好的数据处理能力和稳定性。

本论文主要介绍了该课题所要完成的功能。

并且重点的说明了系统设计及分模块的思想,设计的步骤、难点技术和解决方案。

关键词:

C语言;课程设计;学生信息管理

 

目录

一、设计要求4

二、软件设计4

三、主要函数流程图5

四、源代码8

五、运行结果14

六、设计创新与关键技术15

七、学习心得16

参考文献18

 

一、设计要求

编写“输入”和“显示所有记录”“按成绩排序”“插入一条记录”“删除一条记录”“显示一条记录”“输出成绩统计信息”“成绩分析”函数,实现对数据的显示、排序、插入、删除,显示,统计,分析。

其中,“显示所有记录”通过循环输出,输出格式应注意;按成绩排序由起泡法完成;删除则需要先查找,比较,然后所有数据前移;“成绩统计”则可以得到所有记录的最高、最低、平均分,并能够输出相关学生信息,分析函数则使用循环和switch语句完成各分数段学生数的统计。

二、软件设计

程序功能

(1)输入并显示所有记录

(2)按成绩排序

(3)插入一条记录

(4)删除一条记录

(5)显示一条记录

(6)输出成绩统计信息

(7)输出各分数段人数

用到的函数

main()函数

主函数

menu()函数

选择菜单

input()函数

输入若干条记录

print()函数

显示所有记录

sort ()函数

按成绩排序

insert()函数

插入一条记录

delete()函数

查找并删除一条记录

reveal()函数

查找并显示一条记录

score()函数

输出统计成绩信息

analysis()函数

输出各分数段人数

 

主界面

请选择相应数字执行相应功能:

输入学生信息

输出学生信息

选择功能

1按成绩排序

2插入一条记录

3删除一条记录

4查找并显示一条记录

5输出成绩统计信息

6输出各分数段人数

7退出程序

三、主要函数流程图

main()

调用input()函数

调用print()函数

通过menu()函数输入选择

1

是否

 

调用

sort()函数

 

break

2

是否

调用

insert()

函数

break

3

是否

调用

delete()函数

break

4

是否

调用

Reveal()

函数

break

5

是否

调用

score()

break

停止

sort()

for(i=0;i

for(j=0;j

stu[j].score

否是

stu[j].numstu[j+1].num

stu[j].namestu[j+1].name

stu[j].scorestu[j+1].score

 

delete()

输入需删除的学生的姓名s

i=0

当stu[i].name!

=s且i

i++

i==n

是否

输出

Notfind!

for(j=i;j

stu[j+1]stu[j]

for(i=0;i

输出数据

 

reveal()

输入需查找的学生的姓名s

i=0

当stu[i].name!

=s且i

i++

i==n

是否

输出

Notfind!

输出该学生信息

 

score()

max=0;min=0;sum=0;

for(i=0;i

sum=sum+stu[i].score

stu[max].score

是否

max=i

stu[min].score>stu[i].score

是否

min=i

aver=1.0*sum/n

输出最高分、最低分、平均分

analysis()

a=0;b=0;c=0;d=0;e=0;

for(i=0;i

m=stu[i].score/10.0

m=1,2,3,4,5

是否

 

e++

6

是否

 

d++

7

是否

c++

8

是否

b++

a++

输出各分数段学生数

四、源代码

#include

#include

structstudent/*定义结构体数组*/

{

charnum[5];

charname[20];

intscore;

}stu[80];

voidmain()

{

intmenu();

voidinput(structstudentstu[],intn);

voidprint(structstudentstu[],intn);

voidsort(structstudentstu[],intn);

voidinsert(structstudentstu[],intn);

intdelete(structstudentstu[],intn);

voidreveal(structstudentstu[],intn);

voidscore(structstudentstu[],intn);

voidanalysis(structstudentstu[],intn);

intn;

printf("Howmanystudents?

\n");

scanf("%d",&n);

printf("*************************************************\n");

input(stu,n);

printf("*************************************************\n");

print(stu,n);

printf("*************************************************\n");

switch(menu())

{

case1:

printf("SortByScore\n");

sort(stu,n);/*调用排序函数*/

printf("Sortsucceed!

\n");

break;

case2:

printf("InsertaRecord\n");

insert_a_record(stu,n);/*调用插入函数*/

break;

case3:

printf("DeleteaRecord\n");

n=delete_a_record(stu,n);/*调用删除函数*/

break;

case4:

printf("RevealaRecord\n");

reveal_a_record(stu,n);/*调用显示函数*/

break;

case5:

printf("Score\n");

score(stu,n);/*调用成绩统计函数*/

break;

case6:

printf("AnalysisGrade\n");

case7:

printf("Haveagoodluck!

Bye-bye!

\n");

}

}

intmenu()/*菜单*/

{

intc;

printf("1.Sort\n");

printf("2.InsertSomeRecord\n");

printf("3.DeleteaRecord\n");

printf("4.RevealaRecord\n");

printf("5.Score\n");

printf("6.Quit\n");

printf("*************************************************\n");

printf("GiveyourChoice(1-6):

");

scanf("%d",&c);

return(c);

}

voidinput(structstudentstu[],intn)/*输入记录*/

{

inti;

for(i=0;i

{

printf("No.");

scanf("%s",stu[i].num);

printf("name:

");

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

printf("score:

");

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

}

}

voidprint(structstudentstu[],intn)/*输出记录*/

{

inti;

printf("No.\tname\tscore\n");

for(i=0;i

printf("%s\t%s\t%d\n",stu[i].num,stu[i].name,stu[i].score);

}

voidsort(structstudentstu[],intn)/*按分数排序*/

{

inti,j,*p,*q,s;

chart[10];

for(i=0;i

for(j=0;j

if(stu[j+1].score>stu[j].score)

{

strcpy(t,stu[j+1].num);

strcpy(stu[j+1].num,stu[j].num);

strcpy(stu[j].num,t);

strcpy(t,stu[j+1].name);

strcpy(stu[j+1].name,stu[j].name);

strcpy(stu[j].name,t);

p=&stu[j+1].score;

q=&stu[j].score;

s=*p;

*p=*q;

*q=s;

}

printf("No.\tname\tscore\n");

for(i=0;i

printf("%s\t%s\t%d\n",stu[i].num,stu[i].name,stu[i].score);

}

voidinsert(structstudentstu[],intn)/*插入一条记录*/

{

inti;

printf("No.:

");

scanf("%s",stu[n].num);

printf("name:

");

scanf("%s",stu[n].name);

printf("score:

");

scanf("%d",&stu[n].score);

printf("No.\tname\tscore\t\n");

for(i=0;i

printf("%s\t%s\t%d\n",stu[i].num,stu[i].name,stu[i].score);

printf("InsertSucceed!

\n");

}

intdelete(structstudentstu[],intn)/*删除一条记录*/

{

chars[20];

inti,j;

i=0;

printf("Tellmeher(his)name:

");

scanf("%s",s);

while(strcmp(stu[i].name,s)!

=0&&i

i++;

if(i==n)

printf("notfind!

\n");

else

{

for(j=i;j

{

strcpy(stu[j].num,stu[j+1].num);

strcpy(stu[j].name,stu[j+1].name);

stu[j].score=stu[j+1].score;

}

printf("No.\tname\tscore\n");

for(i=0;i

printf("%s\t%s\t%d\n",stu[i].num,stu[i].name,stu[i].score);

printf("DeleteSucceed!

\n");

}

}

voidreveal(structstudentstu[],intn)/*显示一条记录*/

{

chars[20];

inti;

i=0;

printf("Inputhis(her)name:

");

scanf("%s",s);

while(strcmp(stu[i].name,s)!

=0&&i

i++;

if(i==n)

printf("notfind!

\n");

printf("No.:

%s\n",stu[i].num);

printf("name:

%s\n",stu[i].name);

printf("score:

%d\n",stu[i].score);

}

voidscore(structstudentstu[],intn)/*成绩统计求最高分最低分平均分*/

{

inti,max,min,sum;

floataver;

sum=0;

max=0;

min=0;

for(i=0;i

{

sum=sum+stu[i].score;

if(stu[max].score

max=i;

if(stu[min].score>stu[i].score)

min=i;

}

aver=1.0*sum/n;

printf("Thereare%drecords\n",n);

printf("Thehighestscore:

\n");

printf("No.%s\nname%s\nscore

%d\n",stu[max].num,stu[max].name,stu[max].score);

printf("Thelowestscore:

\n");

printf("No.%s\nname%s\nscore%d\n",stu[min].num,stu[min].name,stu[min].score);

printf("Theaveragescoreis%5.2f\n",aver);

}

voidanalysis(structstudentstu[],intn)/*输出各分数段人数*/

{

inti,a,b,c,d,e,m;

a=0;

b=0;

c=0;

d=0;

e=0;

for(i=0;i

{

m=stu[i].score/10;

switch(m)

{

case1:

case2:

case3:

case4:

case5:

e++;

break;

case6:

d++;

break;

case7:

c++;

break;

case8:

b++;

break;

case9:

a++;

}

}

printf("numderof90-100is:

%d\n",a);

printf("numderof80-90is:

%d\n",b);

printf("numderof70-80is:

%d\n",c);

printf("numderof60-70is:

%d\n",d);

printf("numderof0-60is:

%d\n",e);

}

 

五、运行结果

以下例子是利用排序功能得到的结果

 

六、设计创新与关键技术

程序编写中遇到的问题及解决办法

在主函数中,调用menu()函数后无法将C的值返回,在老师的帮助下,经几次改正,先将C的类型改为整型,然后又修改了switch语句中case与数字之间的空格才最终完成menu()函数的返回与switch语句的调用。

在编写sort()函数时,主函数调用函数后排序后的结构体数组无法显示在屏幕上,经过很长时间的思考,才发现问题的所在,所以最终在sort()函数中加入了打印结构体数组的功能,才算赋予了sort()函数实际的意义。

在sort()函数中,利用起泡法排序将学生分数按从大到小的顺序排序,其间用到了结构体内部的交换,而课堂中这部分知识涉及较少,因此多方查找资料才完成这一功能的设计。

在编写insert()函数时,曾设想调用print()函数将插入完全的结构体数组输出,但最终无法实现,只能在函数中从新编写输出功能。

设计创新

在主函数中巧妙地运用switch语句,将menu()函数联系在一起,成功实现了选择的功能。

这样的设计使程序清晰易懂,一目了然,并为使用者提供了很多方便。

在delete_a_record()函数和reaveal_a_record()函数中都用到了查找的功能,其中

while(strcmp(stu[i].name,s)!

=0&&i

i++;

if(i==n)

printf("notfind!

\n");

else

……

语句考虑充分,将可能发生的情况都包含在内,是一个很好的语句。

在sort()函数中,利用起泡法排序将学生分数按从大到小的顺序排序,涉及到了结构体内部的交换,

strcpy(t,stu[j+1].num);

strcpy(stu[j+1].num,stu[j].num);

strcpy(stu[j].num,t);

strcpy(t,stu[j+1].name);

strcpy(stu[j+1].name,stu[j].name);

strcpy(stu[j].name,t);

p=&stu[j+1].score;

q=&stu[j].score;

s=*p;

*p=*q;

*q=s;

则用的恰到好处,将整个结构体的内容全部交换,正是最终目的所在。

七、学习心得

由于时间的限制与知识经验的不足,我编写的这个小程序并不完美,还存在很多瑕疵。

功能方面也不够强大,难以完成复杂繁多的学习生活中的所有任务。

例如insert()函数中只限于一个人的插入,而现实生活中会有很多种情况,不只一个人,也不只是学号简单的变成n+1。

同样delete_a_record()函数中也存在相同的问题。

因此这个程序还有很多需要完善的地方。

其实学习编程就是要学习一种思想,一种思维方法,首先要确定一种算法,如从1加到100,判断润年等,我认为这些算法都是一种思维方法。

画流程图就是在构建编写程序思路的过程,当画好一个流程图时编程思想也就出来了,程序也差不多了,再结合掌握的语言的方法规则,在计算机里实现就可以了。

任何程序只要有思维,有想法,那么实现程序时就不会觉得无从下手。

在这次编程练习中,我还深深体会到,良好的编程习惯是学好C语言的重要因素。

例如编写程序时用缩进的方式、写注释、程序写到一定的阶段时要做一下测试等。

这些工作可以帮我们在调试程序时有很大的帮助。

程序代码实现后,错误是难免的,还要锻炼自己的调试查错能力,良好的编程习惯可以使我们在调试时减小工作量和提高调试效率,有助于形成自己的编程风格。

在这次课程设计中,不仅巩固了这一学期来所学的C语言的知识,熟练掌握了查找,排序的方法,指针,结构体,数组,函数的运用,而且从互联网上和图书馆中学到了很多编程较深的知识,并且熟练掌握了在图书馆中检索图书的有效快捷的方法,真可谓是获益匪浅。

除此之外,通过这次的学习,更加增进了我和老师之间的亲密关系,加深了我很同学之间的友谊。

我本来是一个很沉默的人,但通过这次的锻炼我变得开朗了很多。

真希望以后还能有更多这样锻炼的机会。

 

参考文献

《C语程序设计》谭浩强清华大学出版社

《C程序设计题解上机指导》谭浩强清华大学出版社

《C语言程序设计》孙亚飞四川大学出版社

《妙趣横生的算法》杨峰清华大学出版社

《C语言宝典》迟致电子工业出版社

《C语言算法速查手册》程晓旭人民邮电出版社

XX知道

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

当前位置:首页 > 医药卫生 > 临床医学

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

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