最新C语言课程设计报告学生成绩管理系统.docx
- 文档编号:3988214
- 上传时间:2022-11-26
- 格式:DOCX
- 页数:18
- 大小:539.43KB
最新C语言课程设计报告学生成绩管理系统.docx
《最新C语言课程设计报告学生成绩管理系统.docx》由会员分享,可在线阅读,更多相关《最新C语言课程设计报告学生成绩管理系统.docx(18页珍藏版)》请在冰豆网上搜索。
最新C语言课程设计报告学生成绩管理系统
C语言课程设计报告
需求分析
a.设计目的
将理论教学中涉及到的知识点贯穿起来,对不同的数据类型、程序控制结构、数据结构作一比较和总结,结合设计题目进行综合性应用,对所学知识达到融合贯穿的程度。
通过课程设计,学生在下述各方面的能力应该得锻炼:
1)对于给定的设计题目,如何进行分析,理清思路。
2)掌握自顶而下的设计方法,将大问题进行模块化,领会结构化程序设计的方法。
3)熟练掌握C语言的基本语法,灵活运用各种数据类型。
4)进一步掌握在集成环境下如何调试程序和修改程序。
b.设计题目:
大学生成绩管理系统
主要功能:
1)信息录入
录入学生成绩信息(包括学生学号、姓名、各门课程的成绩等)。
2)信息查询
输入学号或姓名,查询学生各门课程的成绩及所有课程的平均成绩;查询所有学生各门课程的成绩,并按可选的自定义规则进行排序。
3)信息删除与修改
输入学号,删除该学生的成绩信息;输入学号,查询并显示该学生的成绩信息,并在此基础上进行修改。
4)信息保存
将学生的学号、姓名及各门课程的成绩等信息保存于外部存储器的文件中。
一.系统设计
1.数据录入:
数据录入的功能是将需要的数据进行录入,用于后面的各项操作。
实现:
用输入函数对数据进行录入,先确定学生的个数,再用一个循环进行输入,选修课程数量亦然。
2.数据插入:
数据插入的主要功能是在数据录入之后,为防止数据输入的遗漏,实现:
分为两个部分,第一个是插入第一个位置,第二是插入第一个位置之后,把当前的位置赋给后面的加以实现。
3.数据查询:
数据查询的主要功能是在数据输入之后进行分类再现,实现:
分为输出所有数据,按学号查询,按姓名查询,当输入的数据满足条件时即输出所要求的。
4.数据删除:
数据删除的主要功能是在数据录入、数据插入和数据修改完成之后对无用数据进行删除,实现:
输入学号,满足条件时即把后一个数值赋给前一个数值,达到删除的目的。
5.平均值计算:
平均值计算的主要功能是求平均值,再对其进行排序,实现:
用公式进行计算求平均值,之后便是排序问题,求最大值,然后依次输出各最大值,即实现了排序功能。
附流程图如下:
二.调试分析过程描述
1.系统界面
2.录入数据
3.显示成绩
4.成绩排序
5.查询学生成绩
6.插入学生成绩
7.插入后的成绩表
编程中易出现的错误:
1、书写标识符时,忽略了大小写字母的区别。
如p易写为P
2、忽略了变量的类型,进行了不合法的运算。
3、忘记加分号和大括号。
4、忘记定义。
如下图
三.总结及体会
通过这次的作业,自己真的学会了很多东西。
首先,很多知识,单看课本是学不会的,只有真正动手去试一下才会明白。
其次,编程的确是一门很复杂的课程,必须花大量的时间去琢磨。
而且编程是一门十分考验人的耐心的课程,犯了一点错误,你就必须认认真真地检查,不能有一点马虎,也不能有一点火燥。
最重要的一点是,要想完成作业,必须查阅大量资料和询问师兄,这就考验了人的探讨能力和与他人的合作能力。
老实说,由于个人的c语言知识浅薄,我的这次作业还存在很多问题,可能也满足不了全部的设计要求。
但是,自己已经尽力而为了,也亲自动手试过了,自己就不觉得遗憾了。
以后,我还要必须努力学习,不断完善自己,虚心接受老师的教导,做出更好的系统。
四.附录:
源程序代码
#include
#include
#include
#include
#defineLENsizeof(student)
#defineNULL0
typedefstructstudent
{
intnum;/*学号*/
charname[20];/*姓名*/
charsex[2];/*性别*/
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("%s",p1->sex);
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名学生的c语言成绩:
",n);/*输入c语言成绩*/
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#\t7.单科高分及均分\t#\n");
printf("\t\t#\t8.显示当前学生成绩\t#\n");
printf("\t\t#\t0.返回上一级菜单\t#\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->sum
case3:
if(pm->score[0]
case4:
if(pm->score[1]
case5:
if(pm->score[2]
case6:
if(pm->score[3]
}
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_4=min_4=p->score[3];
max_sum=min_sum=p->sum;
for(;p;p=p->next)
{
if(max_1
elseif(min_1>p->score[0])min_1=p->score[0];
if(max_2
elseif(min_2>p->score[1])min_2=p->score[1];
if(max_3
elseif(min_3>p->score[2])min_3=p->score[2];
if(max_4
elseif(min_4>p->score[3])min_4=p->score[3];
if(max_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_sum,min_sum,aver_sum);
}
voidfind(Student*head)/*定义查询函数*/
{
Student*p;
intchoose,fnum;
chartem[20];
if(n==0){printf("\你好,当前系统没有任何学生数据!
\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性别\t语文成绩数学成绩英语成绩c语言成绩总分\n");/*输出所有的学生信息*/
printf("%d\t%s\t%s\t%d%d%d%d%d\n",p->num,
p->name,p->sex,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性别\t语文成绩数学成绩英语成绩c语言成绩总分\n");
printf("%d\t%s\t%s\t%d%d%d%d%d\n",
p->num,p->name,p->sex,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("请输入新加入学生的性别:
");/*输入性别*/
scanf("%s",p->sex);
printf("请输入新加入学生的语文成绩:
",n);/*输入语文成绩*/
scanf("%d",&p->score[0]);
printf("请输入新加入学生的数学成绩:
",n);/*输入数学成绩*/
scanf("%d",&p->score[1]);
printf("请输入新加入学生的英语成绩:
",n);/*输入英语成绩*/
scanf("%d",&p->score[2]);
printf("请输入新加入学生的c语言成绩:
",n);/*输入c语言成绩*/
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性别\t语文成绩数学成绩英语成绩c语言成绩总分\n");
for(;p;p=p->next)
printf("%d\t%s\t%s\t%d%d%d%d%d\n",
p->num,p->name,p->sex,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]);
}
structstudent*del(structstudent*head,longnum)/*定义删除学生信息函数*/
{structstudent*p1,*p2;
if(head==NULL){printf("\nlistnull!
\n");returnhead;}
p1=head;
while(num!
=p1->num&&p1->next!
=NULL)
{p2=p1;p1=p1->next;}
if(num==p1->num)
{if(p1==head)head=p1->next;
elsep2->next=p1->next;
printf("delete:
%ld\n",num);
n=n-1;
}
elseprintf("%ldnotdeenfound!
\n",num);
return(head);
}
intmain()/*主函数即用户的操作界面*/
{
Student*head;
intchoose,i,num;/*声明局部变量*/
head=(Student*)malloc(LEN);
head->next=NULL;
for(;;)
{
printf("\n\t\t<<<<<<<自动化1班张福林制作>>>>>>>\n");
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*\t6.删除学生数据\t\t*\n");/*删除学生数据*/
printf("\t\t*\t0.退出成绩管理系统\t*\n");/*退出成绩管理系统*/
printf("\n请输入你要执行的操作:
");/*请输入你要执行的操作*/
scanf("%d",&choose);
标题:
大学生“负债消费“成潮流2004年3月18日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");
(4)信息技术优势break;
}
else{
printf("\n你做出别的选择,当作放
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 最新 语言 课程设计 报告 学生 成绩管理系统