c语言课程设计报告书--学生成绩管理

夕阳红 范文 报告范文
精选回答

c语言课程设计报告书--学生成绩管理本文简介:C语言程序设计报告课题:学生成绩管理时间:2010/7/15一、需求分析任务要求:自学C语言中有关链表及外部文件的内容,设计出学生成绩管理。具体要求如下:1.主要功能:(1)能按学期、按班级完成对学生成绩的录入、修改(2)能按班级统计学生的成绩,求学生的总分及平均分,并能根据学生的平均成绩进行排序(

c语言课程设计报告书--学生成绩管理本文内容:

C

语言程序设计报告

课题:学生成绩管理

时间:2010/7/15

一、需求分析

任务要求:

自学C语言中有关链表及外部文件的内容,设计出学生成绩管理。具体要求如下:

1.主要功能:

(1)能按学期、按班级完成对学生成绩的录入、修改

(2)能按班级统计学生的成绩,求学生的总分及平均分,并能根据学生的平均成绩进行排序

(3)能查询学生成绩,不及格科目及学生名单

(4)能按班级输出学生的成绩单

系统功能需求分析:

1、定义一个结构体类型,成员包括学期、班级、各科成绩、建立链表,定义该结构体类型的指针,用于指向各结点;

2、分别建立具有添输入、修改、查询、总分及平均分、排序等功能的子函数,完成相应功能,对程序实现模块化。

二、概要设计

系统总体设计框架:

对程序进行模块化,建立输入、修改、查询、查找和显示功能的子函数,各子函数中运用链表存储数据。

系统功能模块图:

输入学生信息

成绩管理

成绩查询

添加信息

修改记录

求总分平均分排序

输出结果

成绩查询

不及格科目

学生名单

三、详细设计

主要功能模块的算法设计思路如下:

1、输入信息函数

(1)定义指向结构体变量的指针;

(2)移动指针,找到插入结点;

(3)在要插入的结点输入信息;

(4)返回头指针。

2、修改信息

(1)定义指向结构体变量的指针;

(2)用指针检验链表中是否有记录,若没记录,出现报错,然后要求重新输入;

(3)根据要修改的编号查找对应结点;

(4)修改信息;

(5)修改成功。

3、排序函数

(1)定义所要排序的班级和链表的头指针为形参;

(2)调用排序函数,把班级和链表的头指针赋给形参;

(3)在子函数中进行排序;

(4)输出排序结果。

4、显示学生成绩信息(void

Disp(Link

l))

(1)选择想要查询的项目(学生各科成绩、不及格科目、班级成员);

(2)用指针检验是否有记录;

(3)若无记录,输出提示信息,返回主函数;

若有记录,移动指针,依次输出记录;

5、查询班级成绩信息(void

Find(Link

l))

(1)选择所要查询的班级;

(2)输入班级:

(3)在链表中寻找相应结点;

(4)输出结点信息。

以上各个函数的流程图如下:

主函数

定义程序所需变量

调用CREAT函数创建一个信息链表并返回指针

继续进行操作

1、修改信息

2、统计成绩并排序

3、查找信息

4、输出成绩

输入所需修改学生的姓名

输入班级

查询

分数

查询科目

查询班级

输入班级序号

调用add并赋值给P->sum

查找班内成员

调用average函数

输入姓名并查找学生

输出不及格学生的姓名及成绩

输入班级序号并输出班级成员的名字

逐个输出他们的各科成绩

并赋值给P->ave

输出排序前的学生成绩

调用sort

进行排序

输出排序后的学生成绩

是否继续操作

子函数

排序:

f!=p->class

p=p->next

f==r->class

f==s->next->class

\*学期*\

int

class;

\*班级*\

char

name[20];

\*姓名*\

int

score_1;

\*科目一*\

int

score_2;

\*科目二*\

int

score_3;

\*科目三*\

float

ave;

\*平均分*\

int

sum;

\*总分*\

struct

studentnext;

};

int

n;

struct

studentcreat(void)

\*创建信息链表*\

{

struct

studenthead;

struct

studentp1,*p2;

n=0;

p1=p2=(struct

student)malloc(LEN);

printf(“Please

input

the

student

information:\n“);

printf(“Term

Class

Name

Score_1

Score_2

Score_3\n“);

scanf(“%d%d%s%d%d%d“,head=NULL;

while(p1->term!=0)

{

n=n+1;

if(n==1)

head=p1;

else

p2->next=p1;

p2=p1;

p1=(struct

student)

malloc(LEN);

scanf(“%d%d%s%d%d%d“,}

p2->next=NULL;

return(head);

}

void

sort(struct

studentp,int

f)

\*排序(形参为链表的头指针和想要排序的班级)*\

{

int

a,b,c,e;

float

d;

char

z[20];

struct

studentr,*s;

while(f!=p->class)

\*判断是否是想要排序的班级*\

p=p->next;

for(r=p;f==p->classr=r->next)

for(s=p;s->nexts=s->next)

if(s->avenext)->ave)

{

\*交换结构体各个成员*\

d=s->ave;

s->ave=s->next->ave;

s->next->ave=d;

a=s->score_1;

s->score_1=s->next->score_1;

s->next->score_1=a;

b=s->score_2;

s->score_2=s->next->score_2;

s->next->score_2=b;

c=s->score_3;

s->score_3=s->next->score_3;

s->next->score_3=c;

e=s->sum;

s->sum=s->next->sum;

s->next->sum=e;

strcpy(z,s->name);

strcpy(s->name,s->next->name);

strcpy(s->next->name,z);

}

}

int

add(int

i,struct

studentp)

\*求和(形参为想要求和的班级和链表的头指针)*\

{

int

sum;

if(i==p->class)

sum=p->score_1+p->score_2+p->score_3;

return(sum);

}

float

average(int

i,struct

studentp)

\*求平均分(形参为想要求和的班级和链表的头指针)*\

{

float

ave;

int

sum;

sum=add(i,p);

\*调用add函数求和*\

ave=sum/3.0;

return(ave);

}

void

main()

\*主函数*\

{

int

i,m;

struct

studentp,*q;

printf(“================Now

begin

to

set

up===================\n“);

p=creat();

\*调用creat函数,并创建一个信息链表*\

q=p;

do

{

PRINT;

printf(“1:correct

the

student

information\n“);

\*修改学生信息*\

printf(“2:calculate

the

students

score

and

then

sort\n“);

\*统计学生成绩并排序*\

printf(“3:search

the

students

information\n“);

\*查找学生信息*\

printf(“4:output

the

score

of

student\n“);

\*输出学生成绩*\

PRIN;

do

{

scanf(“%d“,if(i!=1

\*报错功能*\

}

while(i!=1

if(i==1)

{

char

x[20];

printf(“Please

input

the

name

of

student

you

want

to

correct:“);

do

{

scanf(“%s“,x);

\*输入你要修改学生成绩的姓名*\

for(p=q;p!=NULL;p=p->next)

{

if(strcmp(x,p->name)==0)

\*查找学生*\

{

printf(“Now,please

input

the

new

score

of

the

student:\n“);

\*输入新的成绩*\

printf(“Score_1

Score_2

Score_3\n“);

scanf(“%d%d%d“,printf(“Information

correct

succeed\n“);

printf(“Now,%s

s

score

is

%-6d%-6d%-6d\n“,x,p->score_1,p->score_2,p->score_3);

break;

}

}

if(p==NULL)

printf(“Can

t

find

the

student,please

input

again:“);

\*

报错功能*\

}

while(p==NULL);

p=q;

}

if(i==2)

{

int

j;

printf(“Please

input

which

class

you

want

to

count:“);

scanf(“%d“,\*输入你想要统计的班级*\

printf(“The

score

information

of

%d

class

is:\n“,j);

printf(“Name

Score_1

Score_2

Score_3

Average

Sum\n“);

for(p=q;p!=NULL;p=p->next)

{

p->sum=add(j,p);

\*

调用函数add并赋值给结构体*\

p->ave=average(j,p);

\*调用函数average并赋值给结构体*\

}

p=q;

printf(“Before

sorted,the

student

score

is:\n“);

for(p=q;p!=NULL;p=p->next)

if(j==p->class)

printf(“%-9s%-9d%-9d%-9d%-9.2f%-9d\n“,p->name,p->score_1,p->score_2,p->score_3,p->ave,p->sum);

\*输出排序前的学生成绩*\

p=q;

sort(p,j);

\*调用函数sort*\

printf(“After

sorted,the

student

score

is:\n“);

for(p=q;p!=NULL;p=p->next)

if(j==p->class)

printf(“%-9s%-9d%-9d%-9d%-9.2f%-9d\n“,p->name,p->score_1,p->score_2,p->score_3,p->ave,p->sum);

\*输出排序后的成绩*\

p=q;

}

if(i==3)

{

int

a;

char

y[20];

PRINT;

printf(“1:search

the

score

of

student\n“);

\*查询学生的各科分数*\

printf(“2:search

the

score

of

fail

lesson\n“);

\*查询不及格科目*\

printf(“3:search

the

name

of

student\n“);

\*查询每个班级的成员*\

printf(“What

s

do

you

want

to

do?“);

PRIN;

scanf(“%d“,\*输入你想要执行的操作的序号*\

if(a==1)

{

printf(“Please

input

the

student

name:“);

do

{

scanf(“%s“,y);

\*输入你想要查询的学生的姓名*\

for(p=q;p!=NULL;p=p->next)

{

if(strcmp(y,p->name)==0)

\*查找学生*\

{

printf(“%s

s

score

is

%d

%d

%d\n“,p->name,p->score_1,p->score_2,p->score_3);

break;

\*输出学生的成绩*\

}

}

if(p==NULL)

printf(“Can

t

find

the

student,please

input

again:“);

\*报错功能*\

}

while(p==NULL);

p=q;

}

else

if(a==2)

{

for(p=q;p!=NULL;p=p->next)

{

if(p->score_1name,p->score_1);

if(p->score_2name,p->score_2);

if(p->score_3name,p->score_3);

}

p=q;

}

else

if(a==3)

{

int

c;

printf(“Please

input

the

number

of

class:\n“);

scanf(“%d“,\*输入你想要输出成绩的班级*\

printf(“The

%d

class

have

these

student:\n“,c);

for(p=q;p!=NULL;p=p->next)

if(c==p->class)

printf(“%-10s“,p->name);

printf(“\n“);

p=q;

}

}

if(i==4)

{

int

b;

printf(“Please

input

which

class:\n“);

\*输入你想要输出成绩的班级*\

scanf(“%d“,printf(“Now,the

score

of

the

student

of

%d

class

is:\n“,b);

printf(“Name

Score_1

Score_2

Score_3\n“);

for(p=q;p!=NULL;p=p->next)

if(b==p->class)

printf(“%-12s%-12d%-12d%-12d\n“,p->name,p->score_1,p->score_2,p->score_3);

}

输出成绩

PRINT;

printf(“Do

you

want

to

going

on?\n“);

\*是否想要继续操作*\

printf(“1:YES

2:NO

\n“);

scanf(“%d“,}

while(m!=2);

}

五、调试分析过程描述

运行情况如下:

输入学生的基本信息:

修改指定学生的成绩:

统计并排序一班成绩:

统计并排序二班的成绩:

查询指定学生的成绩:

查询学生不及格的成绩:

查询班级成员:

输出一班的成绩:

输出二班的成绩:

调试过程中的主要问题及解决方法:

1、执行排序函数时出错,指针指向不确定。

2、编译时无出错警告,连接时出现错误。

3、表格输出时,格式不能对齐。未运用格式控制字符。

六、课程设计小结

通过这次课程设计,我对C语言有了更深刻的了解,增强了程序的编写能力,巩固了专业知识,对程序的模块化观念也又模糊逐渐变的清晰了。在程序的运行与调试过程中出现了很多错误,通过反复地复习课本上的相关知识,不停地修改与调试,我终于完成了这段程序。在调试过程中,我认识到了C语言的灵活性与严谨性,同一个功能可以由不同的语句来实现,但编写程序时要特别注意细节方面的问题,因为一个小小的疏忽就能导致整个程序不能运行。当然我也认识到了自己的薄弱之处,如对链表相关知识的欠缺,文件运用的不熟练,在以后的学习中我要集中精力、端正态度,争取把知识学得更扎实、更全面。

-

14

-

童话皆是假 2022-06-25 21:46:51

相关推荐

古人读书的方法

读书有很多种方法,适合自己的才是最好的,让我们来看看古代名人都是怎么读书的,并从中借鉴一些好的读书方法。1、董遇:“三余”读书法汉代的著名学者董遇提倡利用“三余”时间读书。他说:“冬者岁之余,夜者日之余,雨者晴...
展开详情

一年之计在于春,一日之计在于晨是什么意思

这句话的意思是:只有在春天辛勤劳动才能获得丰收,一天最宝贵的时间是早晨。这句话一般用于激励人刻苦学习,充分利用学习时间,达到提升自我的目的!出处有:1、南朝·梁·萧绎《纂要》:“一年之计在于春,一日之计在于晨。...
展开详情

集中注意力的基础是

集中注意力的基础是对大脑进行科学的锻炼,促使脑神经变得发达和强壮。注意力是指人的心理活动指向和集中于某种事物的能力。“注意”,是一个古老而又永恒的话题。俄罗斯教育家乌申斯基曾精辟地指出:“注意是我们心灵的唯一门...
展开详情

无人与我是什么

无人与我,意思是:没有人和我一起。“无人”,是一个汉语词汇,是没有人才、没有人、没人在的意思,出自《史记·范雎蔡泽列传》:“秦王屏左右,宫中虚无人。”...
展开详情

人不如旧 衣不如新的意思

人不如旧,衣不如新的意思是:衣服是新的好,朋友是旧的好。(因此旧的东西或朋友不可轻易舍弃)形容事物的前后比较。“衣不如新,人不如故”可以用作宾语、定语,一般常用作书面语。这句话最早出自于《晏子春秋·第五卷内篇杂...
展开详情

精选推荐更多>

亦颇驯是什么意思

“亦颇驯”意思是还是很和顺,出自《阅微草堂笔记》,原文:《狼子野心》:“有富室,偶得二小狼,与家犬杂畜,亦与犬相安。稍长,亦颇驯,主人乃忘其为狼。”
翻译:有个有钱人家偶然得到两只小狼,(将它们和)家狗混在一起圈养,也和狗相安无事。两只狼渐渐地长大了,还是很驯服。主人竟然忘了它们是狼。
《阅微草堂笔记》的题材以妖怪鬼狐为主,但于人事异闻,边地景物,诗词文章,名物典故等也有记述,内容相当广泛。纪昀仕途顺利,他写此书的指导思想是“大旨不乖于风教”,采用六朝志怪的笔法,叙述简淡,不作细节描写,不求文辞华美,与《聊斋志异》的描摹细腻、委曲动人大异其趣。

天上的街市主旨

《天上的街市》主旨:诗人运用了想象的表现手法,把繁星满天的夜空,想象成是点着无数街灯的天上街市,把空中的流星想象为牛郎织女提着灯笼在街上闲游,表达了诗人对自由的向往和对理想社会的企盼之情。
《天上的街市》作者郭沫若,原文是:
远远的街灯明了,
好像闪着无数的明星。
天上的明星现了,
好像点着无数的街灯。
我想那缥缈的空中,
定然有美丽的街市。
街市上陈列的一些物品,
定然是世上没有的珍奇。
你看,那浅浅的天河,
定然是不甚宽广。
那隔着河的牛郎织女,
定能够骑着牛儿来往。
我想他们此刻,
定然在天街闲游。
不信,请看那朵流星,
是他们提着灯笼在走。
《天上的街市》是现代文学家郭沫若于1921年10月创作的一首现代诗。
诗人运用了想象的表现手法,把繁星满天的夜空,想象成是点着无数街灯的天上街市,把空中的流星想象为牛郎织女提着灯笼在街上闲游,表达了诗人对自由的向往和对理想社会的企盼之情。全诗风格恬淡,用自然清新的语言、整齐的短句、和谐优美的韵律,表达了诗人纯真的理想。
郭沫若(1892年11月16日—1978年6月12日),本名郭开贞,字鼎堂,号尚武,乳名文豹,笔名除郭沫若外,还有麦克昂、郭鼎堂、石沱、高汝鸿、羊易之等,中国现代作家、历史学家、考古学家。

广陵散作者

《广陵散》的作者是魏晋琴家嵇康。嵇康(公元224年-263年,一作公元223年-262年),字叔夜,谯国铚县(今安徽省濉溪县)人,三国时期曹魏思想家、音乐家、文学家。
嵇康自幼聪颖,身长七尺八寸,容止出众。他博览群书,广习诸艺,尤为喜爱老庄学说。早年迎娶魏武帝曹操曾孙女长乐亭主为妻,拜官郎中,授中散大夫,世称“嵇中散”。司马氏掌权后,隐居不仕,拒绝出仕。景元四年(公元263年),因受司隶校尉钟会构陷,而遭掌权的大将军司马昭处死,时年四十岁。
《广陵散》乐谱全曲共有四十五个乐段,分开指、小序、大序、正声、乱声、后序六个部分。正声以前主要是表现对聂政不幸命运的同情;正声之后则表现对聂政壮烈事迹的歌颂与赞扬。正声是乐曲的主体部分,着重表现了聂政从怨恨到愤慨的感情发展过程,深刻地刻划了他不畏强权、宁死不屈的复仇意志。

孤雁南飞孤掌难鸣相似的名言

孤雁南飞孤掌难鸣相似的名言有:
1、单丝不成线,独木不成林。——钱彩、金丰《说岳全传》
2、一个好汉三个帮,一个篱笆三个桩。——谚语
3、三个臭皮匠赛过诸葛亮。——罗贯中《三国演义》
4、天时不如地利,地利不如人和。——孟子《得道多助,失道寡助》
5、一花独放不是春,百花齐放春满园。——佚名《古今贤文》
6、人主之患在莫之应,故曰,一手独拍,虽疾无声。——韩非《韩非子·功名》
7、莫学蜘蛛各结网,要学蜜蜂共酿蜜。——谚语
常见热点问答
热点搜索
1-20
21-40
41-60
61-80
81-100
101-120
121-140
141-160
161-180
181-200
作文大全
1-20
21-40
41-60
61-80
81-100
101-120
121-140
141-160
161-180
181-200