武汉科技大学C语言毕业课程设计实验报告.docx

上传人:b****5 文档编号:12599578 上传时间:2023-04-20 格式:DOCX 页数:18 大小:368.31KB
下载 相关 举报
武汉科技大学C语言毕业课程设计实验报告.docx_第1页
第1页 / 共18页
武汉科技大学C语言毕业课程设计实验报告.docx_第2页
第2页 / 共18页
武汉科技大学C语言毕业课程设计实验报告.docx_第3页
第3页 / 共18页
武汉科技大学C语言毕业课程设计实验报告.docx_第4页
第4页 / 共18页
武汉科技大学C语言毕业课程设计实验报告.docx_第5页
第5页 / 共18页
点击查看更多>>
下载资源
资源描述

武汉科技大学C语言毕业课程设计实验报告.docx

《武汉科技大学C语言毕业课程设计实验报告.docx》由会员分享,可在线阅读,更多相关《武汉科技大学C语言毕业课程设计实验报告.docx(18页珍藏版)》请在冰豆网上搜索。

武汉科技大学C语言毕业课程设计实验报告.docx

武汉科技大学C语言毕业课程设计实验报告

(此文档为word格式,下载后您可任意编辑修改!

二○一二~二○一三学年第一学期

电子技术学院

课程设计报告书

 

课程名称:

C程序课程设计

班级:

电信DB2011级1102班

学号:

XXXXXXXXX

姓名:

XXXX

指导教师:

陈彬

二○一二年九月

一、需求分析

1、题目二学生成绩管理程序

任务:

自学C语言中相关知识,设计出学生成绩管理程序。

要求如下所述:

◆录入学生信息,每位学生录入的信息有:

姓名、学号、性别、班级、和三门功课(数学,英语,计算机)的成绩。

以文件(myfile.txt)的形式保存每个学生的所有信息。

(实验中:

假设3个班,每个班学生人数不得少于5人)

学号姓名性别班级数学英语计算机

1101王鹏男1班705898

1102李燕女2班688895

1103赵亚芳女3班584896

◆增加学生记录,并将增加的信息以文件的(myfile.txt)的形式保存。

◆删除学生记录,以“学号”、“姓名”为关键字删除记录,若要删除的记录不存在,给出必要的提示信息;

◆统计各班级学生每门课程的班级平均分,并由高到低排序。

◆按学号或者姓名查询记录并显示其三门功课成绩;

◆能浏览显示全部学生成绩,若无记录可以显示,给出必要的提示信息;

2、系统功能需求分析

该程序中需要有存储、读取外部文件的命令实现将信息储存于指定文件中。

程序中需要有建立、修改链表的命令实现数据的动态链表存储方式。

程序还需要一系列的提示命令使程序的易用性提高。

因为需要对数据进行统计或查询显示,所以需要有对链表数据统计和对链表指定数据进行查找的功能。

二、概要设计

三、详细设计

1、建立结构体

structstudent

{

intnum;

charname[10],sex[10];

intClass,math,english,computer;

structstudent*next;

};

intn;

2、成绩单建立模块

Y

N

Y

N

structstudent*creat(void)

{

structstudent*=0;

p1=p2=(structstudent*)malloc(LEN);

printf("请输入学生信息(按学号顺序输入)\n");

printf("学号:

");scanf("%d",&p1->num);

printf("姓名:

");scanf("%s",p1->name);

printf("性别:

");scanf("%s",p1->sex);

printf("班级:

");scanf("%d",&p1->Class);

printf("数学:

");scanf("%d",&p1->math);

printf("英语:

");scanf("%d",&p1->english);

printf("计算机:

");scanf("%d",&p1->computer);

=n+1;

if(n==1)");

printf("学号:

");scanf("%d",&p1->num);

if(p1->num==0)break;

else

printf("姓名:

");scanf("%s",p1->name);

printf("性别:

");scanf("%s",p1->sex);

printf("班级:

");scanf("%d",&p1->Class);

printf("数学:

");scanf("%d",&p1->math);

printf("英语:

");scanf("%d",&p1->english);

printf("计算机:

");scanf("%d",&p1->computer);

}

p2->next=NULL;

return(++;

printf("\n增加成功!

\n");

return(");return(");

n--;

}

elseprintf("\n找不到该数据!

\n");

return(");return(");

n--;

}

elseprintf("\n找不到该数据!

\n");

return(");

printf("\n");

printf("%d%-6s%s%d%-3d%-3d%-3d\n",p->num,p->name,p->sex,p->Class,p->math,p->english,p->computer);

break;

}

elsep=p->next;

}while(p!

=NULL);

if(p==NULL)printf("\n未找到相应信息!

\n");

}

elseprintf("\n成绩单为空!

\n");

}

voidfind2(structstudent*");

printf("\n");

printf("%d%-6s%s%d%-3d%-3d%-3d\n",p->num,p->name,p->sex,p->Class,p->math,p->english,p->computer);

break;

}

elsep=p->next;

}while(p!

=NULL);

if(p==NULL)printf("\n未找到相应信息!

\n");

}

elseprintf("\n成绩单为空!

\n");

}

voidprint(structstudent*");

printf("\n");

do

{

printf("%d%-6s%s%d%-3d%-3d%-3d\n",p->num,p->name,p->sex,p->Class,p->math,p->english,p->computer);

p=p->next;

}while(p!

=NULL);

}

elseprintf("无信息!

\n");

}

6、数据显示模块

Y

N

Y

N

voidprint(structstudent*");

printf("\n");

do

{

printf("%d%-6s%s%d%-3d%-3d%-3d\n",p->num,p->name,p->sex,p->Class,p->math,p->english,p->computer);

p=p->next;

}while(p!

=NULL);

}

elseprintf("无信息!

\n");

}

7、成绩对比模块

N

Y

Y

N

Y

N

Y

voidcompare(structstudent*");

printf("--\n");

while(p!

=NULL)

{

if(p->Class==1){sum1=sum1+p->math;n1++;}

if(p->Class==2){sum2=sum2+p->math;n2++;}

if(p->Class==3){sum3=sum3+p->math;n3++;}

p=p->next;

}

average1=sum1n1;average2=sum2n2;average3=sum3n3;

if((average1>=average2)&&(average1>=average3))

{

if(average2>=average3)

printf("1班:

%.2f2班:

%.2f3班:

%.2f\n",average1,average2,average3);

else

printf("1班:

%.2f3班:

%.2f2班:

%.2f\n",average1,average3,average2);

}

else

{

if((average2>=average1)&&(average2>=average3))

{

if(average1>=average3)

printf("2班:

%.2f1班:

%.2f3班:

%.2f\n",average2,average1,average3);

else

printf("2班:

%.2f3班:

%.2f1班:

%.2f\n",average2,average3,average1);

}

else

{

if(average1>=average2)

printf("3班:

%.2f1班:

%.2f2班:

%.2f\n",average3,average1,average2);

else

printf("3班:

%.2f2班:

%.2f1班:

%.2f\n",average3,average2,average1);

}

}

p=◎英语班级平均分◎\n");

printf("--\n");

while(p!

=NULL)

{

if(p->Class==1){sum1=sum1+p->english;n1++;}

if(p->Class==2){sum2=sum2+p->english;n2++;}

if(p->Class==3){sum3=sum3+p->english;n3++;}

p=p->next;

}

average1=sum1n1;average2=sum2n2;average3=sum3n3;

if((average1>=average2)&&(average1>=average3))

{

if(average2>=average3)

printf("1班:

%.2f2班:

%.2f3班:

%.2f\n",average1,average2,average3);

else

printf("1班:

%.2f3班:

%.2f2班:

%.2f\n",average1,average3,average2);

}

else

{

if((average2>=average1)&&(average2>=average3))

{

if(average1>=average3)

printf("2班:

%.2f1班:

%.2f3班:

%.2f\n",average2,average1,average3);

else

printf("2班:

%.2f3班:

%.2f1班:

%.2f\n",average2,average3,average1);

}

else

{

if(average1>=average2)

printf("3班:

%.2f1班:

%.2f2班:

%.2f\n",average3,average1,average2);

else

printf("3班:

%.2f2班:

%.2f1班:

%.2f\n",average3,average2,average1);

}

}

p=◎计算机班级平均分◎\n");

printf("--\n");

while(p!

=NULL)

{

if(p->Class==1){sum1=sum1+p->computer;n1++;}

if(p->Class==2){sum2=sum2+p->computer;n2++;}

if(p->Class==3){sum3=sum3+p->computer;n3++;}

p=p->next;

}

average1=sum1n1;average2=sum2n2;average3=sum3n3;

if((average1>=average2)&&(average1>=average3))

{

if(average2>=average3)

printf("1班:

%.2f2班:

%.2f3班:

%.2f\n",average1,average2,average3);

else

printf("1班:

%.2f3班:

%.2f2班:

%.2f\n",average1,average3,average2);

}

else

{

if((average2>=average1)&&(average2>=average3))

{

if(average1>=average3)

printf("2班:

%.2f1班:

%.2f3班:

%.2f\n",average2,average1,average3);

else

printf("2班:

%.2f3班:

%.2f1班:

%.2f\n",average2,average3,average1);

}

else

{

if(average1>=average2)

printf("3班:

%.2f1班:

%.2f2班:

%.2f\n",average3,average1,average2);

else

printf("3班:

%.2f2班:

%.2f1班:

%.2f\n",average3,average2,average1);

}

}

}

8、数据保存模块

voidsave(structstudent*("myfile.txt","wb");

p=");

}

9、数据读取模块

structstudent*load()

{

structstudent*=0;("myfile.txt","rb");

++;

}

p2->next=NULL;

fclose(fp);

printf("读取成功!

\n");

return(()

{

system("color0B");

structstudent*");

printf("##\n");

printf("#☆★☆学生成绩管理系统菜单☆★☆#\n");

printf("##\n");

printf("#1.创建学生成绩单#\n");

printf("##\n");

printf("#2.增加学生信息#\n");

printf("##\n");

printf("#3.删除学生信息#\n");

printf("##\n");

printf("#4.查看学生信息#\n");

printf("##\n");

printf("#5.显示所有学生信息#\n");

printf("##\n");

printf("#6.班级成绩对比#\n");

printf("##\n");

printf("#7.保存至文件#\n");

printf("##\n");

printf("#8.从文件中读取信息#\n");

printf("##\n");

printf("#9.退出系统#\n");

printf("##\n");

printf("########################\n");

printf("\n请选择所需功能:

");

scanf("%d",&choice);

printf("\n");

switch(choice)

{

case1:

");

printf("学号:

");scanf("%d",&stu->num);

printf("姓名:

");scanf("%s",stu->name);

printf("性别:

");scanf("%s",stu->sex);

printf("班级:

");scanf("%d",&stu->Class);

printf("数学:

");scanf("%d",&stu->math);

printf("英语:

");scanf("%d",&stu->english);

printf("计算机:

");scanf("%d",&stu->computer);

while

(1)

{

");

stu=(structstudent*)malloc(LEN);

printf("学号:

");scanf("%d",&stu->num);

if(stu->num==0)break;

printf("姓名:

");scanf("%s",stu->name);

printf("性别:

");scanf("%s",stu->sex);

printf("班级:

");scanf("%d",&stu->Class);

printf("数学:

");scanf("%d",&stu->math);

printf("英语:

");scanf("%d",&stu->english);

printf("计算机:

");scanf("%d",&stu->computer);

}

break;

case3:

printf("1.按学号删除2.按姓名删除\n请选择:

");

scanf("%d",&choice);

switch(choice)

{

case1:

printf("输入要删除的学生学号(按\"0\"退出):

");

scanf("%d",&num);

while(num!

=0)

{

");break;}

}

}

四、调试分析过程描述

1、主菜单

2、创建成绩单

3、增加学生记录

4、删除学生记录

5、显示所有学生记录

6、班级成绩对比

7、查找学生记录

8、保存学生记录

9、读取文件信息

调试过程中的问题与反思:

此次编写的程序盖内容量很大,在编写过程中采用的是写好一个模块测试一个模块的方法,但是将各个模块组合到一起后仍旧出现了许多小问题,经过多次调试才达到各个模块协调工作。

最初程序编写的时候并没有太过提示性输出语句,虽然程序运行不会受到影响,但是非编写人员就难以使用,在调试中明显感受到有些地方如果不加提示使用者将很难操作。

最后对一些需要提示的地方慢慢修改,加入一系列提示以后才使程序比较人性化。

对于界面的设计,最初虽然有一个雏形,但是在实际调试过程中暴露出不少错位等显示效果不佳的状况。

针对此类问题,必须多次全面调试,才能将程序界面编写得最美观。

经过整个调试之后,深深感受到程序调试有相当的必要性,很多问题不经过反复调试是难以暴露的。

如界面设计、菜单人性化等需要直观感受的东西,也只有通过程序调试才能将它们尽可能完善。

五、课程设计小结

通过本次课程设计,我熟悉了对链表的创建、增加、删除等一些操作,先前只在课堂上听老师讲述,自己对开辟内存空间、结构体指针等与链表相关的操作并不熟悉,在制作了这个程序之后,我对链表的相关操作已经比较熟练了。

本次课程设计需要用到一系列外部文件命令,通过自学外部命令和课程设计的演练,我已经能够掌握外部文件的相关命令。

值得一提的是,课程设计要求链表命令与外部文件命令相结合,通过此次程序编写,这两部分知识结合使用,将我所学的只是串联起来。

课程设计所要求的程序,是我从学习C语言以来编写得最长的程序,以往老师在可能上常说命令要精简我总是不以为然,经过本次编写,我体会到了精简命令的重要性。

对于一个小程序,可能长点短点无所谓,出了问题很容易检查,而对于这种需要编写四五百行的大程序,如果不注意使用命令的简单明了,可能导致程序编写量大很多,冗长的程序代码也会给程序出错时的检查带来极大的麻烦。

过去编写程序,都是书上的题目,完成题目就算目标达成。

而此次程序设计我需要完成的是一个完完整整有很强使用行的程序。

因而首次让我注意到界面的问题,不仅仅需要编写出能够正常运行的程序,还需要给使用者一个清爽的、易操作的界面。

为了达到清爽的界面,得不断观察程序运行界面,不断调试,达到最佳显示效果;为了达到一操作性,必需添加一系列判断语句同时伴随相应的输出语句给使用者提示。

这些,都是过去C语言练习中涉及不多的。

这次设计的程序包含了大量的独立模块,在编写过程中运用了逐个模块单独编写,单独测试,最终聚合到一起调试的思路。

这种思路以前大学计算机基础课和C语言课都讲到过,但由于所编写的程序往往比较简单,过去并未应用。

而此次课程设计运用到了这种思想,我也感受到了这种思想的先进性,大大提高了工作效率。

总之,在这次课程设计中我受益匪浅,我不仅掌握了过去并未掌握的知识,同时将很多以前随听说却不曾使用过的思想付诸实践。

也体会到调试程序的重要性,从调试中我们可以发现很多很多编写时所未曾注意的问题。

C语言这门课,是教我们如何编写程序,绝非仅仅会解答C语言题目,从编写程序过程中,我感受到还要注重程序界面的外观与可操作性。

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

当前位置:首页 > 总结汇报 > 学习总结

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

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