武汉科技大学C语言毕业课程设计实验报告.docx
- 文档编号:17090171
- 上传时间:2023-07-21
- 格式:DOCX
- 页数:18
- 大小:368.31KB
武汉科技大学C语言毕业课程设计实验报告.docx
《武汉科技大学C语言毕业课程设计实验报告.docx》由会员分享,可在线阅读,更多相关《武汉科技大学C语言毕业课程设计实验报告.docx(18页珍藏版)》请在冰点文库上搜索。
武汉科技大学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语言题目,从编写程序过程中,我感受到还要注重程序界面的外观与可操作性。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 武汉 科技大学 语言 毕业 课程设计 实验 报告