数据结构课程设计报告_第1页
数据结构课程设计报告_第2页
数据结构课程设计报告_第3页
数据结构课程设计报告_第4页
数据结构课程设计报告_第5页
已阅读5页,还剩12页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

本文格式为Word版,下载可任意编辑——数据结构课程设计报告

武汉理工大学华夏学院课程设计报告书

课程名称:数据结构课程设计

题目:用C语言实现成绩统计程序的设计系名:信息工程系

专业班级:计算机1121

姓名:吴涛学号:10210412104指导教师:司晓梅

2023年3月20日

第1页共37页

武汉理工大学华夏学院信息工程系

课程设计任务书

课程名称:数据结构课程设计指导教师:司晓梅

班级名称:计算机1121开课系、教研室:信息系计算机

一、课程设计目的与任务

《数据结构》课程设计是为训练学生的数据组织能力和提高程序设计能力而设置的加强实践能力的课程。目的:学习数据结构课程,旨在使学生学会分析研究数据对象的特性,学会数据的组织方法,以便选择适合的数据的规律结构和存储结构以及相应操作,把现实世界中的问题转换为计算机内部的表示和处理,这就是一个良好的程序设计技能训练的过程。提高学生的程序设计能力、把握基本知识、基本技能,提高算法设计质量与程序设计素质的培养就是本门课程的课程设计的目的。

任务:根据题目要求,完成算法设计与程序实现,并按规定写出课程设计报告。

二、课程设计的内容与基本要求

设计题目:用C语言实现成绩统计程序的设计

〔问题描述〕给出n个学生的m门课程的考试成绩信息,每条信息由姓名、课程与分数组成,要求设计算法:

(1)输入每个人的各门课程的成绩,计算每人的平均成绩;

(2)按平均成绩的高低次序,打印出个人的名次,平均成绩一致的为同一名次;(3)按名次列出每个学生的姓名和各科成绩;

〔基本要求〕学生的考试成绩必需通过键盘输入,且需对输出进行格式控制;〔算法提醒〕可以用选择排序、冒泡排序等多种排序算法求解;具体要完成的任务是:

A.编制完成上述问题的C语言程序、进行程序调试并能得出正确的运行结果。B.写出规范的课程设计报告书;

三、课程设计步骤及时间进度和场地安排

时间:1周地点:现代教育中心具体时间安排如下:

第一天:布置题目,确定任务、查找相关资料

其次天~第四天:功能分析,编写程序,调试程序、运行系统;第五天上午:撰写设计报告;第五天下午:程序验收、辩论。

四、课程设计考核及评分标准

第2页共37页

课程设计考核将综合考虑学生的系统设计方案、运行结果、课程设计报告书的质量、态度、考勤、辩论状况等各因素。具体评分标准如下:

(1)设计方案正确,具有可行性、创新性;30分(2)系统开发效果较好;20分(3)设计报告规范、课程设计报告质量高;20分(4)课程设计辩论时,问题回复正确;20分(5)态度认真、刻苦钻研、遵守纪律;10分按上述五项分别记分后求和,总分按五级制记载最终成绩。

优秀(100~90分),良好(80~89分),中等(70~79分),及格(60~69分),

不及格(0~59分)

第3页共37页

目录

一、问题描述5二、基本要求5三、数据结构设计6四、软件模块结构图7五、程序设计思想9六、程序流程图13七、源程序18八、调试分析32九、测试数据33十、用户使用手册35

一、问题描述

第4页共37页

〔问题描述〕给出n个学生的m门课程的考试成绩信息,每条信息由姓名、课程与分数组成,要求设计算法:

(1)输入每个人的各门课程的成绩,计算每人的平均成绩;

(2)按平均成绩的高低次序,打印出个人的名次,平均成绩一致的为同一名次;

(3)按名次列出每个学生的姓名和各科成绩;

〔基本要求〕学生的考试成绩必需通过键盘输入,且需对输出进行格式控制;〔算法提醒〕可以用选择排序、冒泡排序等多种排序算法求解;

二、基本要求

〔基本要求〕学生的考试成绩必需通过键盘输入,且需对输出进行格式控制;〔算法提醒〕可以用选择排序、冒泡排序等多种排序算法求解;

三、数据结构的设计

第5页共37页

为了对学生信息进行统一操作,使用了结构体这一数据结构,学生的各项数据信息都能用结构体来表示,具体如下:structstu

{intnum;/*学号,整型变量*/

charname[50];/*姓名,长度为50的字符串数组*/charclasses[50]/*班级名称,长度为50的字符串数组*/;doublegsps_score;/*高等数学平日成绩,双精度实型变量*/doublegsks_score;/*高等数学考试成绩,双精度实型变量*/doublegszh_score;/*高等数学综合成绩,双精度实型变量*/doubledlps_score;/*电路理论平日成绩,双精度实型变量*/doubledlks_score;/*电路理论考试成绩,双精度实型变量*/doubledlzh_score;/*电路理论综合成绩,双精度实型变量*/doubleyyps_score;/*英语平日成绩,双精度实型变量*/doubleyyks_score;/*英语考试成绩,双精度实型变量*/doubleyyzh_score;/*英语综合成绩,双精度实型变量*/doublewlps_score;/*物理平日成绩,双精度实型变量*/doublewlks_score;/*物理考试成绩,双精度实型变量*/doublewlzh_score;/*物理综合成绩,双精度实型变量*/doublepj_score;/*平均成绩,双精度实型变量*/}student[1000];/*最多存储1000个学生数据*/该结构体数据定义为全局变量。

四、软件模块结构图

第6页共37页

学生信息录入模块按学号查询学生信息学生信息查询模块按姓名查询学生信息学生信息修改模块主菜单控制模块学生信息删除模块学生信息插入模块输出优秀学生相关信息学生信息输出模块输出不及格学生信息

模块功能描述:

a.主菜单控制模块:主菜单直接控制七个模块(学生信息输出模块的两个子模块直接归主菜单控制),在各模块间起到纽带的作用。在主菜单,可以通过选择进入其他模块,其他模块运行终止后也可回到主菜单继续选择。

b.学生信息录入模块:循环输入学生信息,建立临时的学生信息数据库。

c.学生信息查询模块:可选择按学号或者按姓名查询学生信息,如学生信息不存在则给出提醒。

d.学生信息修改模块:查找到要修改的学生信息后,可对该学生的信

第7页共37页

每门课程的平均成绩课程成绩统计模块按单科成绩排名次

息进行逐项修改。

e.学生信息删除模块:查找到要删除的学生信息后,可对其进行删除操作。

f.学生信息插入模块:在数据库末尾插入学生信息,逐项输入要插入的学生信息即可。

g.学生信息输出模块:输出优秀学生信息模块能够输出优秀学生(平均成绩大于等90分)的学号和姓名;输出不及格学生信息模块能够输出不及格学生的相关信息。

h.课程成绩统计模块:可以得到每门课程的平均成绩,还可以任意抽取一门课按单科成绩排定学生名次。

五、程序设计思想

第8页共37页

结构化的程序设计主要靠设计和调用各模块的函数来实现。本程序设计了多个函数,每个函数自身能完成一个任务,有的函数和别的函数结合能完成更大的任务。每一个模块功能的实现其实就是对函数的调用,本说明首先介绍本程序所涉及的子函数,再介绍主函数,最终介绍程序整体的实现过程。

1.voidInputfun()此函数较特别,它只进行输入操作,但由于此函数所包含的语句较长且需要被其他三个函数使用,为便利调用单写了一个函数。此函数在源程序中放在最前,所以在此先作说明。此函数可细分为11个小块,用来输入学生的基本数据。每小块的结构基本一致即for(;;){基本语句+一个continue语句+基本语句+一个break语句}之所以用这个结构为了使输入的数据更加正规。譬如在分数的输入中就限定了只能输入0至100之间的数值,这也符合分数录入规则。需要特别注意的是,这个函数完成了本程序中要做的两个计算。其一是在每门课的考试试成绩输入后完成了对这门课的综合成绩的加权计算(考试成绩*0.7+平日成绩*0.3);其二是在最终一门课程的综合成绩算出后,计算了该学生四门课的平均成绩。

2.voidGetinformation()此函数用来录入学生信息。它调用了voidInputfun()函数,其实它的主体部分就是voidInputfun()函数。这函数还用了一个for循环以达到循环输入的目的。

3.intSearchbynum(intno)\\intSearchbyname(charna[50])这是两个“兄弟函数〞,是按学号查找和按姓名查询模块中的两个重要函数。主要功能是根据用户输入的学号\\姓名返回改学生所在的的数

第9页共37页

组下标。利用for循环嵌套一个if语句实现,若找到学生该学生信息就返回数组下标,若找不到就返回-1。

4.voidSeekinformation()\\voidPrintinformation(intx)这两个函数关系紧凑,所以一起介绍。voidSeekinformation()函数利用for循环和if语句使查找中能够使用学号和姓名两种方式。如源程序所示,在用if语句确定了查找方式后先后调用了intSearchbynum(int

no)\\int

Searchbyname

(char

na[50])

void

Printinformation(intx)两个函数,根据intSearchbynum(intno)\\intSearchbyname(charna[50])返回的数组下标,运用voidPrintinformation(intx)输出所查询的内容。所以

intSearchbynum(intno)\\intSearchbyname(charna[50])\\voidSeekinformation()\\voidPrintinformation(intx)这四个函数是查询模块的四个联系紧凑的重要函数,在它们的共同作用下查询模块的功能得以实现。

5.voidModifyinformation()此函数用于修改学生信息。基本原理就是用输入的新数据覆盖原来的老数据,达到修改的目的。本函数还调用了查找模块的函数,使修改前能按学号或姓名找到要修改的学生信息。修改过程中调用了Inputfun()函数

6.voidDeleteinformation()此函数用于删除学生信息。同样调用了查找模块的函数。删除模块的关键语句是for(i=x;i

5、插入学生信息:

输入要插入的信息开始

是否继续?继续按1,终止按010

6、优秀学生信息:

N否大于等于90?Y学生平均成绩是开始终止Y输出该生学号和姓名NY

7、不及格学生信息:

第16页共37页终止检索完毕?

开始判断该生是否有不及格科目NY

输出该该生学信息N检索完毕?Y

8、成绩统计模块:

每门课程平均成绩请按开始终止11,单科成绩排名请按22

输出该科选择要排名的科目输出每门课程平均成绩

成绩排名终止

第17页共37页

七、源程序

#include#include#include#include

structstu/*定义结构体*/{intnum;

charname[50];charclasses[50];doublegsps_score;doublegsks_score;doublegszh_score;doubledlps_score;doubledlks_score;doubledlzh_score;doubleyyps_score;doubleyyks_score;doubleyyzh_score;doublewlps_score;doublewlks_score;doublewlzh_score;doublepj_score;}student[1000];

inta,b,c,d,x,i,j,k,s,y,flag;chars1[50],c1;

doublef,t,gp,dp,yp,wp;

/***********************录入、修改、插入学生信息三个模块调用了输入模块*************************************/

voidInputfun()/*输入学生信息模块*/{

for(;;)/*设计死循环以至于在输入格式错误时可以再次输入*/{

printf(\请输入班级名称:\\t\输入班级名称*/scanf(\if(strlen(s1)>20){

printf(\您输入的班级名称过长!\\n\continue;}

strcpy(student[i].classes,s1);break;/*格式正确后跳出死循环*/}

第18页共37页

for(;;){

printf(\请输入学号:\\t\输入学号*/scanf(\

if(student[i].num20){

printf(\您输入的姓名过长!\\n\continue;}

strcpy(student[i].name,s1);break;}

for(;;){

printf(\请输入该生高等数学平日成绩:\\t\输入各科平日成绩和考试成绩*/

scanf(\if(f>100||f100||f100||f100||f100||f

}

student[i].yyps_score=f;break;}

for(;;){

printf(\请输入该生英语考试成绩:\\t\scanf(\if(f>100||f100||f100||f

printf(\您要删除的学生信息为:\\n\Printinformation(x);

printf(\是否真的要删除该生信息?是请按1,否请按0.\\n\scanf(\if(a==1){

for(i=x;i=90)

{printf(\学号:%d\\n\

第29页共37页

printf(\姓名:%s\\n\\n\printf(\返回主菜单请按0\\n\scanf(\

voidChengjitongji()/*按要求统计成绩*/{intflag=0;

doublegp=0,dp=0,yp=0,wp=0;system(\

printf(\每门课程平均成绩请按1,单科成绩排序请按2\\n\scanf(\if(s==1){

for(i=0;i0)flag++;

}gp=gp/flag;dp=dp/flag;yp=yp/flag;wp=wp/flag;system(\

printf(\高等数学平均成绩:\\t%5.2f\\n\printf(\电路理论平均成绩:\\t%5.2f\\n\printf(\英语平均成绩:\\t%5.2f\\n\printf(\物理平均成绩:\\t%5.2f\\n\printf(\返回主菜单请按0\\n\scanf(\if(s==2){

printf(\请选择\\n\\n\

printf(\高等数学成绩排序请按1\\n\printf(\电路理论成绩排序请按2\\n\printf(\英语成绩排序请按3\\n\printf(\物理成绩排序请按4\\n\scanf(\

if(y==1)paixugs();/*调用相应的排序函数*/if(y==2)paixudl();if(y==3)paixuyy();if(y==4)paixuwl();}}

/**************************************************************************************************/voidmain()/*主函数*/{

printf(\开始界面*/

第30页共37页

printf(\学生成绩管理系统**********\\n\\n\printf(\设计者:乐骏彦**********\\n\\n\printf(\指导老师:彭春华*******\\n\\n\printf(\通信工程0902班********\\n\\n\printf(\年6月30日*******\\n\\n\printf(\printf(\

printf(\请输入系统启动口令\\n\启动口令*/scanf(\if(a!=1){

printf(\口令错误!系统即将关闭!\\n\exit(0);}for(;;){

system(\

printf(\请从主菜单项选择择您所需要的操作\\n\\n\系统主菜单*/printf(\首次输入学生信息请按\\n\printf(\查找学生信息\\n\printf(\修改学生信息\\n\printf(\删除学生信息\\n\printf(\插入学生信息\\n\printf(\优秀学生

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论