最新C语言课程设计学生成绩管理系统1资料.docx

上传人:b****1 文档编号:13665002 上传时间:2023-06-16 格式:DOCX 页数:23 大小:75.24KB
下载 相关 举报
最新C语言课程设计学生成绩管理系统1资料.docx_第1页
第1页 / 共23页
最新C语言课程设计学生成绩管理系统1资料.docx_第2页
第2页 / 共23页
最新C语言课程设计学生成绩管理系统1资料.docx_第3页
第3页 / 共23页
最新C语言课程设计学生成绩管理系统1资料.docx_第4页
第4页 / 共23页
最新C语言课程设计学生成绩管理系统1资料.docx_第5页
第5页 / 共23页
最新C语言课程设计学生成绩管理系统1资料.docx_第6页
第6页 / 共23页
最新C语言课程设计学生成绩管理系统1资料.docx_第7页
第7页 / 共23页
最新C语言课程设计学生成绩管理系统1资料.docx_第8页
第8页 / 共23页
最新C语言课程设计学生成绩管理系统1资料.docx_第9页
第9页 / 共23页
最新C语言课程设计学生成绩管理系统1资料.docx_第10页
第10页 / 共23页
最新C语言课程设计学生成绩管理系统1资料.docx_第11页
第11页 / 共23页
最新C语言课程设计学生成绩管理系统1资料.docx_第12页
第12页 / 共23页
最新C语言课程设计学生成绩管理系统1资料.docx_第13页
第13页 / 共23页
最新C语言课程设计学生成绩管理系统1资料.docx_第14页
第14页 / 共23页
最新C语言课程设计学生成绩管理系统1资料.docx_第15页
第15页 / 共23页
最新C语言课程设计学生成绩管理系统1资料.docx_第16页
第16页 / 共23页
最新C语言课程设计学生成绩管理系统1资料.docx_第17页
第17页 / 共23页
最新C语言课程设计学生成绩管理系统1资料.docx_第18页
第18页 / 共23页
最新C语言课程设计学生成绩管理系统1资料.docx_第19页
第19页 / 共23页
最新C语言课程设计学生成绩管理系统1资料.docx_第20页
第20页 / 共23页
亲,该文档总共23页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

最新C语言课程设计学生成绩管理系统1资料.docx

《最新C语言课程设计学生成绩管理系统1资料.docx》由会员分享,可在线阅读,更多相关《最新C语言课程设计学生成绩管理系统1资料.docx(23页珍藏版)》请在冰点文库上搜索。

最新C语言课程设计学生成绩管理系统1资料.docx

最新C语言课程设计学生成绩管理系统1资料

青岛农业大学

课程设计报告

题目:

学生成绩管理系统

姓名:

张洋

学院:

理学与信息科学学院

专业:

通信工程

班级:

1班

学号:

20123267

指导教师:

李吉忠

 

2013年9月4日

 

一设计目的…………………………………………………………….3

二课程设计的内容........................................3

三课程设计的要求与数据..................................3

四课程设计应完成的工作..................................4

五总体设计(包含几大功能模块)...........................4

六详细设计(各功能模块的具体实现算法——流程图)………….5

七调试分析(包含各模块的测试用例,及测试结果)…………….6

八总结………………………………………………………………...16

九参考资料…………………………………………………………….17

一设计目的

进一步加深、巩固所学专业课程(《C语言程序设计》)的基本理论知识,理论联系实际,进一步培养自己综合分析问题和解决问题的能力。

掌握运用C语言独立地编写、调试应用程序和进行其它相关设计的技能。

二课程设计的内容

对学生信息(包括学号、语文、数学、英语、平均分)进行管理,包括学生成绩的信息输入、输出、查询、删除、排序、统计、退出.将学生的成绩信息进行记录,信息内容包含:

(1)学生的学号

(2)学生的姓名(3)学生的成绩。

假设,现收集到了一个班学生的所有成绩信息,要求用C语言编写一个简单的成绩管理系统,可进行录入、查询、修改和浏览等功能。

学习相关开发工具和应用软件,熟悉系统建设过程。

三课程设计的要求与数据

1、用C语言实现系统;

2、对学生信息(包括学号、姓名、语文、数学、英语、平均分)进行管理,包括学生成绩的信息输入、输出、查询、删除、排序、统计、退出.

3、学生信息包括:

其内容较多,为了简化讨论,要求设计的管理系统能够完成以下功能:

1)输入记录模块。

输入记录模块主要完成将数据存入单链表中的工作。

在此成绩管理系统中,记录可以从以二进制形式存储的数据文件中读入,也可从键盘逐个输入学生记录。

学生记录由学生的基本信息和成绩信息字段构成。

当从数据文件中读入记录时,它就是在以记录为单位存储的数据文件中,将记录逐条复制到单链表中。

2)查询记录模块。

查询记录模块主要完成在单链表中查找满足相关条件的学生记录。

在此成绩管理系统中,用户可以按照学生的学号或姓名在单链表中进行查找。

若找打该学生的记录,则返回指向该学生的指针。

否则,返回一个值为NULL的空指针,并打印出未找到该学生记录的提示信息。

3)更新记录模块。

更新记录模块主要完成对学生记录的维护。

在此成绩管理系统中,它实现了对学生记录的修改、删除、插入和排序操作。

一般而言,系统进行论文这些操作之后,需要将修改的数据存入源数据文件。

4)统计记录模块。

统计记录模块主要完成对各门功课最高分和不及格人数的统计。

5)输出记录模块。

输出记录模块主要完成两个任务。

第一,它实现对学生记录的存盘操作,即将单链表中的各节点中存储的学生记录信息写入数据文件中。

第二,它实现将单链表中存储的学生记录信息以表格的形式在屏幕上打印出来。

四课程设计应完成的工作

(1)编写算法;

(2)算法测试,并有具体的测试结果和结果分析;

(3)撰写课程设计报告。

内容包括:

1)封面扉页

2)设计任务书

3)目录

4)总体设计方案(包括流程图)

5)使用说明及运行实例(包括界面)

6)成员设计内容简介

7)项目源程序代码(注意注释的使用)

8)指导教师评语

五总体设计(包含几大功能模块)

1、成绩录入功能

2、成绩查询功能

3、成绩更新功能

4、统计功能

5、输出功能

6、退出系统

六详细设计(各功能模块的具体实现算法——流程图)

6.1各函数的功能和实现

1、输入初始的学生信息:

输入信息包括学生的姓名、学号以及学生的成绩等相关信息;可用函数voidinput(STUDENT*data,int*len)来实现此操作。

2、成绩输出模块:

输出学生的信息以及成绩voidoutput(STUDENT*data,intlen):

通过学生的姓名来查看学生的相关成绩,同时也可以分别通过caverage() 、maverage() 、eaverage() 和comaverage() 来输出成绩的平均分数、最高和最低分数。

3、成绩查询模块:

可用voidfind(STUDENT*data,intlen) 来实现。

找到就输出此学生全部信息。

4、删除模块:

用函数voiddelete_item(STUDENT*data,int*len)来实现

5、排序模块:

用函数voidsort(STUDENT*data,intlen)来实现

6、统计功能能:

用函数voidstat(STUDENT*data,intlen)来实现

7、退出系统:

可用一个函数exit()来实现,首先将信息保存到文件中,释放动态创建的内存空间,再退出此程序。

如图

七调试分析(包含各模块的测试用例,及测试结果)

7.1源程序

#include

#include

#include

#include

#defineLENsizeof(Student)

typedefstructstudent

{

intnum;

charname[20];

intscore[4];

intsum;

structstudent*next;

}Student;

intn;

Student*cin(void);

Student*sort_1(Student*head,int);

voidsort_2(Student*head);

voidprint(Student*head);

Student*sort_all(Student*head);

voidfind(Student*head);

Student*add_new(Student*head);

Student*cin()

{

intflag;

Student*head,*p1,*p2;

n=0;

head=(Student*)malloc(LEN);

p2=head;

printf("\n请输入第%d名学生的学号,学号为0表示结束输入:

",n+1);

scanf("%d",&flag);

while(getchar()!

='\n');

for(;flag;)

{

n++;

p1=(Student*)malloc(LEN);

p1->num=flag;

printf("请输入第%d名学生的姓名:

",n);

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

printf("请输入第%d名学生的高数成绩:

",n);

scanf("%d",&p1->score[0]);

printf("请输入第%d名学生的英语成绩:

",n);

scanf("%d",&p1->score[1]);

printf("请输入第%d名学生的计算机成绩:

",n);

scanf("%d",&p1->score[2]);

printf("请输入第%d名学生的物理成绩:

",n);

scanf("%d",&p1->score[3]);

p1->sum=p1->score[0]+p1->score[1]+p1->score[2]+p1->score[3];

p2->next=p1;

p2=p1;

printf("\n请输入第%d名学生的学号,没有此学生则输入0表示结束:

",n+1);

scanf("%d",&flag);

}

p2->next=NULL;

printf("\n\n");

returnhead;

}

Student*sort_all(Student*head)

{

intchoose;

for(;;)

{

printf("\n\t\t#####学生成绩统计排序####\n");

printf("\t\t#\t1.按学生学号排序\t#\n");

printf("\t\t#\t2.按学生总分排序\t#\n");

printf("\t\t#\t3.按学生高数成绩排序\t#\n");

printf("\t\t#\t4.按学生英语成绩排序\t#\n");

printf("\t\t#\t5.按学生计算机成绩排序\t#\n");

printf("\t\t#\t6.按学生物理成绩排序\t#\n");

printf("\t\t#\t7.单科高分及均分\t#\n");

printf("\t\t#\t8.显示当前学生成绩\t#\n");

printf("\t\t#\t0.返回上一级菜单\t#\n");

printf("\t\t######^-^####\n\n");

printf("请输入你要执行的操作:

");

scanf("%d",&choose);

while(getchar()!

='\n');

switch(choose)

{

case1:

case2:

case3:

case4:

case5:

case6:

head=sort_1(head,choose);break;

case7:

print(head);sort_2(head);break;

case8:

print(head);break;

case0:

returnhead;

default:

printf("\n\n您的输入有误!

请重新输入:

\n\n");break;

}

}

}

Student*sort_1(Student*head,intchoose)

{

Student*p1,*p2=head->next,*pm,*px;

Studentmid;

if(!

p2)returnhead;

for(p1=p2;p1->next!

=NULL;p1=p1->next)

{

pm=p1;

for(p2=p1->next;p2!

=NULL;p2=p2->next)

switch(choose)

{

case1:

if(pm->num>p2->num)pm=p2;break;

case2:

if(pm->sumsum)pm=p2;break;

case3:

if(pm->score[0]score[0])pm=p2;break;

case4:

if(pm->score[1]score[1])pm=p2;break;

case5:

if(pm->score[2]score[2])pm=p2;break;

case6:

if(pm->score[3]score[3])pm=p2;break;

}

if(pm!

=p1)

{

mid=*pm;

*pm=*p1;

*p1=mid;

px=pm->next;

pm->next=p1->next;

p1->next=px;

}

}

printf("\n排序后的成绩表为:

\n");

print(head);

returnhead;

}

voidsort_2(Student*head)

{

Student*p=head->next;

intmax_1,max_2,max_3,max_4,min_1,min_2,min_3,min_4;

intmax_sum,min_sum;

intsum_1=0,sum_2=0,sum_3=0,sum_4=0;

floataver_1,aver_2,aver_3,aver_4,aver_sum;

if(!

p)return;

max_1=min_1=p->score[0];max_2=min_2=p->score[1];

max_3=min_3=p->score[2];max_2=min_2=p->score[3];

max_sum=min_sum=p->sum;

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

{

if(max_1score[0])max_1=p->score[0];

elseif(min_1>p->score[0])min_1=p->score[0];

if(max_2score[1])max_2=p->score[1];

elseif(min_2>p->score[1])min_2=p->score[1];

if(max_3score[2])max_3=p->score[2];

elseif(min_3>p->score[2])min_3=p->score[2];

if(max_4score[3])max_4=p->score[3];

elseif(min_4>p->score[3])min_4=p->score[3];

if(max_sumsum)max_sum=p->sum;

elseif(min_sum>p->sum)min_sum=p->sum;

sum_1+=p->score[0];sum_2+=p->score[1];sum_3+=p->score[2];sum_4+=p->score[3];

}

aver_1=1.0*sum_1/n;aver_2=1.0*sum_2/n;aver_3=1.0*sum_3/n;aver_4=1.0*sum_4/n;

aver_sum=aver_1+aver_2+aver_3+aver_4;

printf("总共%d名学生,具体数据为:

\n",n);

printf("高数最高分为%d,最低分为%d,平均分为%.2f\n",max_1,min_1,aver_1);

printf("英语最高分为%d,最低分为%d,平均分为%.2f\n",max_2,min_2,aver_2);

printf("计算机最高分为%d,最低分为%d,平均分为%.2f\n",max_3,min_3,aver_3);

printf("物理最高分为%d,最低分为%d,平均分为%.2f\n",max_4,min_4,aver_4);

printf("总分最高分为%d,最低分位%d,平均分为%.2f\n",

max_sum,min_sum,aver_sum);

}

voidfind(Student*head)

{

Student*p;

intchoose,fnum;

chartem[20];

if(n==0){printf("\n当前系统没有任何学生数据,您就别费劲了!

\n");return;}

for(;;)

{

printf("\n请输入您要查询学生的方式:

\n\n");

printf("1、按学号查询;2、按姓名查询;0、我不查询了。

\n\n");

printf("请选择:

");

scanf("%d",&choose);

while(getchar()!

='\n');

if(choose==1)

{

printf("\n请输入您要查询的学生的学号,输入0退出学号查询:

");

scanf("%d",&fnum);

for(;fnum;)

{

for(p=head->next;p!

=NULL&&p->num!

=fnum;p=p->next);

if(!

p)

{

printf("\n\n没有找到您要查询的学号,请重新输入,输入0表示结束:

");

scanf("%d",&fnum);

}

elseif(p->num==fnum)

{

printf("\n学号为%d学生的数据为:

\n",p->num);

printf("学号\t姓名\t高数成绩英语成绩计算机成绩\

物理成绩总分\n");

printf("%d\t%s\t%d%d%d%d\

%d\n",p->num,

p->name,p->score[0],p->score[1],p->score[2],p->score[3],

p->sum);

printf("\n\n请输入您还要查询的学生的学号,输入0表示不按学\

号查询了:

");

scanf("%d",&fnum);

}

}

}

elseif(choose==2)

{

printf("\n请输入您要查询的学生的姓名,输入0退出姓名查询:

");

scanf("%s",tem);

for(;strcmp(tem,"0");)

{

for(p=head->next;p!

=NULL&&strcmp(p->name,tem);p=p->next);

if(!

p)

{

printf("\n\n没有找到您要查询的姓名,请重新输入,输入0表\

示结束:

");

scanf("%s",tem);

}

elseif(!

strcmp(p->name,tem))

{

printf("\n姓名为%s学生的数据为:

\n",p->name);

printf("学号\t姓名\t高数成绩英语成绩计算机成绩\

物理成绩总分\n");

printf("%d\t%s\t%d%d%d\

%d%d\n",

p->num,p->name,p->score[0],p->score[1],p->score[2],

p->score[3],p->sum);

printf("\n\n请输入您还要查询的学生的姓名,输入0表\

示不按姓名查询了:

");

scanf("%s",tem);

}

}

}

elseif(choose==0){printf("\n您选择了不查询!

\n");break;}

else{printf("\n您以其他方式选择了不查询!

\n");break;}

}

}

Student*add_new(Student*head)

{

Student*p;

intflag;

printf("\n\n请输入您要新加入学生的学号,学号为0表示结束输入:

");

scanf("%d",&flag);

while(getchar()!

='\n');

for(;flag;)

{

p=(Student*)malloc(LEN);

p->num=flag;

printf("请输入新加入学生的姓名:

",n);

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

printf("请输入新加入学生的高数成绩:

",n);

scanf("%d",&p->score[0]);

printf("请输入新加入学生的英语成绩:

",n);

scanf("%d",&p->score[1]);

printf("请输入新加入学生的计算机成绩:

",n);

scanf("%d",&p->score[2]);

printf("请输入第%d名学生的物理成绩:

",n);

scanf("%d",&p->score[3]);

p->sum=p->score[0]+p->score[1]+p->score[2]+p->score[3];

p->next=head->next;

head->next=p;

n++;

printf("\n请输入还要加入学生的学号,没有此学生则输入0表示结束:

");

scanf("%d",&flag);

}

head=sort_1(head,1);

printf("加入后的成绩表为:

\n");

print(head);

returnhead;

}

voidprint(Student*head)

{

Student*p=head->next;

if(!

p){printf("\n\n此系统目前没有任何学生数据!

\n\n\n");return;}

printf("此系统目前共计学生%d名:

\n",n);

printf("**************************学生成绩总汇************************\

*****\n");

printf("学号\t姓名\t高数成绩英语成绩计算机成绩物理成绩总分\n");

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

printf("%d\t%s\t%d%d%d%d%d\n",

p->num,p->name,

p->score[0],p->score[1],p->score[2],p->score[3],

p->sum=p->score[0]+p->score[1]+p->score[2]+p->score[3]);

printf("************************^-^*************************\

*\n\n");

}

intmain()

{

Student*head;

intchoose,i;

head=(Student*)malloc(LEN);

head->next=NULL;

for(;;)

{

printf("\n\t\t*****学生成绩管理系统****\n");

printf("\t\t*\t1.学生数据键盘录入\t*\n");

printf("\t\t*\t2.学生数据统计排序\t*\n");

printf("\t\t*\t3.查询学生数据\t\t*\n");

printf("\t\t*\t4.插入学生数据\t\t*\n");

printf("\t\t*\t5.显示当前成绩表\t*\n");

printf("\t\t*\t0.退出成绩管理系统\t*\n");

printf("\t\t********^-^*******\n\n");

printf("\n请输入你要执行的操作:

");

scanf("%d",&choose);

while(getchar()!

='\n');

switch(choose)

{

case1:

printf("\n\t\t\t\t****注意****");

printf("\n\n此选项将会建立新的学生数据系统,原来的数据将\

不再存在,你确信要删除原来的数据并建立新的数据系统么?

\n\n");

printf("1、建立新的数据系统;0、放弃建立新的数据系统。

\n\n");

printf("请选择:

");

scanf("%d",&i);

if(i==1){head=cin();print(head);break;}

elseif(i==0)

{

printf("\n您选择了放弃建立新的数据系统!

\n");

break;

}

else{

printf("\您做出了别的选择,当作放弃建立!

\n");

break;

}

case2:

head=sort_all(head);break;

case3:

find(

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

当前位置:首页 > 自然科学 > 物理

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2