计算机程序编程课程设计实验报告学生成绩.docx
- 文档编号:3637545
- 上传时间:2022-11-24
- 格式:DOCX
- 页数:43
- 大小:558.13KB
计算机程序编程课程设计实验报告学生成绩.docx
《计算机程序编程课程设计实验报告学生成绩.docx》由会员分享,可在线阅读,更多相关《计算机程序编程课程设计实验报告学生成绩.docx(43页珍藏版)》请在冰豆网上搜索。
计算机程序编程课程设计实验报告学生成绩
计算机程序编程课程设计实验报告2
实验名称
学生成绩管理系统
学院
通信工程学院
专业班级
通信工程系11级25班
姓名
梁仙友
学号
52112507
任课教师
孙大洋
实验时间
2013/8/14
实验目的:
使用标准C或C++实现学生成绩管理系统的录入、查询、删除、统计等基本操作。
进一步巩固C语言的学习,以提高学生对开发环境的进一步认识和综合编程能力。
系统功能模块结构图:
数据结构设计及用法说明:
数据结构定义如下
typedefstructSt1
{
charIDNumber[16];/*学号*/
charFamilyName[16];/*姓*/
charGivenName[16];/*名*/
intsex;/*性别(0代表“女”,1代表“男”)*/
intBirthYear;/*出生年*/
intBirthMonth;/*出生月*/
intBirthDay;/*出生日*/
floatscore[4];/*成绩*/
floatsum;/*总分*/
floataverage;/*平均分*/
structSt1*next;
}StudentNode;
需要处理的基础数据
学生基本信息:
学号(例如2003级12班6号写作20031206)、姓、名、性别、出生年月日、课程名称(外语SCORE[0]、高数SCORE[1]、C语言SCORE[2]、马哲SCORE[3])、考试成绩等。
统计每个学生各门功课的平均成绩,并按平均成绩从高到低的次序排名输出每个学生各门功课的综合成绩和平均成绩(名次、学号、姓名、平均成绩、各门功课的考试成绩)。
列出90分以上(包括90)、80分以上(包括80)、70分以上(包括70)、60分以上(包括60)、不及格学生清单(学号、姓名、不及格的课程和成绩)。
统计并输出各门功课的平均成绩和总平均成绩。
按班级统计并输出总成绩。
(需要对学号进行解析)
以下代码可以获取系统当前时间,用于判断年龄是否合理。
#include"time.h"
voidmain()
{
structtm*ptm;
longts;
inty,m,d,h,n,s;
ts=time(NULL);
ptm=localtime(&ts);
y=ptm->tm_year+1900;//年
m=ptm->tm_mon+1;//月
d=ptm->tm_mday;//日
h=ptm->tm_hour;//时
n=ptm->tm_min;//分
s=ptm->tm_sec;//秒
}
程序结构(画流程图):
主函数:
StudentNode*create()
StudentNode*Delete
(StudentNode*head)
voidPrint(StudentNode*head)
StudentNode*Load()
StudentNode*compute(StudentNode*head)
Search(head)
StudentNode*Insert(StudentNode*head,StudentNode*New)
各模块的功能
1、StudentNode*Create():
根据提示学生录入学生基本信息:
学号(例如2003级12班6号写作20031206)、姓、名、性别、出生年月日、课程(外语SCORE[0]、高数SCORE[1]、C语言SCORE[2]、马哲SCORE[3])成绩。
2、StudentNode*Delete(StudentNode*head):
根据所给学号删除对应学号学生对基本信息。
3、voidPrint(StudentNode*head):
先根据学生干的平均成绩对学生进行排序,再根据平均成绩从高到低依次输出各个学生的基本信息,在统计列出90分以上(包括90)、80分以上(包括80)、70分以上(包括70)、60分以上(包括60)、不及格学生清单(学号、姓名、不及格的课程和成绩)。
4、StudentNode*search(StudentNode*head):
找出对应姓名的学生的基本信息并输出。
5、StudentNode*Save(StudentNode*head):
将链表中的记录依次保存到所指定的文件中。
6、StudentNode*Load():
从指定文件中读取学生的相关信息并依次输出。
7、StudentNode*compute(StudentNode*head):
计算所有学生的总分和平均分并输出。
8、StudentNode*CompositorByAverage(StudentNode*head):
输出对应班级的学生的学号姓名总分平均分。
9、StudentNode*Insert(StudentNode*head,StudentNode*New):
将输入的学生的基本信息插入到对应链表中并按平均成绩排序后输出链表中学生的基本信息。
试验结果(包括输入数据和输出结果)
菜单界面
显示界面
文件查找:
体会
通过一个星期的C语言编程设计实验我学会了很多东西,初步了解了学生成绩管理系统的编程过程,对编程有了更深一次的掌握,学会了如何分块把问题解决。
使用标准C或C++实现学生成绩管理系统的录入、查询、删除、统计等基本操作。
本次实验设计的成绩管理系统功能还有限,都是些基本功能,还有很多的功能有待完善,比如学生成绩是否符合正太分布,虽然完成的功能有限,但是感觉收获还是很大,写代码的时候需要集中精力,很多小细节可能导致大错误,比如大括号的丢失,程序调试也很费时间,最好是分布检查每个部分,确保准确的运行,再逐步释放代码,很容易发现问题所在。
附录:
程序清单及源程序软盘
#include
#include
#include
#include
#include
#defineLENsizeof(StudentNode)
typedefstructSt1
{
charIDNumber[16];/*学号*/
charFamilyName[16];/*姓*/
charGivenName[16];/*名*/
intsex;/*性别(0代表"女",1代表"男")*/
intBirthYear;/*出生年*/
intBirthMonth;/*出生月*/
intBirthDay;/*出生日*/
intscore[4];/*成绩*/
intsum;/*总分*/
intaverage;/*平均分*/
intrank;/*排名*/
structSt1*next;
}StudentNode;
StudentNode*New;
StudentNode*first()
{
returnNULL;
}
intMenu()//菜单选择函数
{
intm;
printf("\n◆◆◆按回车键进入主菜单......pressanybuttontoentermenu◆◆◆\n");
getchar();
printf("\n〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓\n");
printf("◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆\n");
printf("\t\t欢迎使用学生管理系统\n");
printf("\n\t\tWelcometostudentdatabasesystem\n");
printf("MENU\n");
printf("\t\t\t1输入学生成绩记录Enterlist\n");
printf("\t\t\t2删除记录Deletearecordfromlist\n");
printf("\t\t\t3显示链表中所有记录Printlist\n");
printf("\t\t\t4按照姓名查找记录Searchrecordonname\n");
printf("\t\t\t5记录保存到文件Savethefile\n");
printf("\t\t\t6从文件中读入记录Loadthefile\n");
printf("\t\t\t7计算总分和均分Computethescore\n");
printf("\t\t\t8按班级查询学生总分Querybyclass\n");
printf("\t\t\t9插入记录Insertrecordtolist\n");
printf("\t\t\t10退出Quit\n");
printf("\n◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆\n");
printf("\n〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓\n");
do
{printf("\n\t\t\t请输入你要操作的代号Enteryourselectchoice(1~10):
");
fflush(stdin);
scanf("%d",&m);
}while(m<1||m>10);
return(m);
}
StudentNode*Create()//信息的输入
{
inti,s=0;
StudentNode*head=NULL,*p;
system("cls");
for(;;)
{
p=(StudentNode*)malloc(LEN);
if(!
p)
{
printf("\n输出内存溢出.OUTOFMEMORY.");
return(head);
}
printf("请输入学号,pleaseenterthenum:
(输入n结束输入)");
scanf("%s",p->IDNumber);
if(p->IDNumber[0]=='n')break;
printf("请输入姓名:
(姓名之间用空格间隔)");
scanf("%s%s",p->FamilyName,p->GivenName);
do{
printf("请输入性别:
0代表女,1代表男");
scanf("%d",&p->sex);}
while((p->sex!
=0)&&(p->sex!
=1));
do{
printf("请输入生日(年月日用空格分隔):
");
scanf("%d%d%d",&p->BirthYear,&p->BirthMonth,&p->BirthDay);
}while(p->BirthMonth<0&&p->BirthMonth>13);
printf("请输入4门成绩pleaseenterthescore\n");
for(i=0;i<4;i++)
{do
{printf("成绩%d:
",i+1);
scanf("%d",&p->score[i]);
if(p->score[i]<0||p->score[i]>100)
printf("数据输入错误,请重新输入\n");
}while(p->score[i]<0||p->score[i]>100);
s=s+p->score[i];
}
p->sum=s;
p->average=s/4;
p->rank=0;
p->next=head;
head=p;
}return(head);
}
voidPrint(StudentNode*head)//信息的显示
{inti=0;
StudentNode*p;chars[2];
system("cls");
p=head;
printf("\n◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆学生信息◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆\n");
printf("------------------------------------------------------------------------------\n");
printf("|RecNumFnaGnaSexYeaMonDaySc1Sc2Sc3Sc4SumAveRank|\n");
printf("------------------------------------------------------------------------------\n");
while(p!
=NULL)
{i++;
printf("|%3d%4s%2s%2s%d%d%d%d%d%d%d%d%d%d%d|\n",i,
p->IDNumber,p->FamilyName,p->GivenName,p->sex,p->BirthYear,p->BirthMonth,
p->BirthDay,p->score[0],p->score[1],p->score[2],p->score[3],p->sum,p->average,
p->rank);
p=p->next;
}
printf("-----------------------------------------------------------------------------\n");
printf("◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆END◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆\n");
scanf("%s",s);
printf("输入任意键返回菜单.\n");
}
voidSearch(StudentNode*head)//查找记录函数
{
StudentNode*p;
chars[2];charf[2];
system("cls");
printf("请输入姓:
\n");
scanf("%s",s);
printf("请输入名:
\n");
scanf("%s",f);
p=head;
while(p!
=NULL)
{if((strcmp(p->FamilyName,s)!
=0)||(strcmp(p->GivenName,f)!
=0))
p=p->next;
elsebreak;}
if(p)
{
printf("\n◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆已找到◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆\n");
printf("----------------------------------------------------------------------\n");
printf("|NumNamesc1sc2sc3sc4SumAveRank|\n");
printf("----------------------------------------------------------------------\n");
printf("|%4s%s%s%3d%3d%3d%3d%3d%d%-5d|\n",p->IDNumber,p->FamilyName,p->GivenName,p->score[0],p->score[1],p->score[2],p->score[3],p->sum,p->average,p->rank);
printf("----------------------------------------------------------------------\n");
printf("◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆结束◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆\n");
}
else
printf("\n没有需要查找的%s%s学生",s,f);
}
StudentNode*Sort(StudentNode*head)//排序函数
{
inti=0;
StudentNode*p1,*p2,*t,*temp;
temp=head->next;
head->next=NULL;
while(temp!
=NULL)
{
t=temp;
temp=temp->next;
p1=head;
p2=head;
while(t->average
=NULL)
{
p2=p1;
p1=p1->next;
}
if(p1==p2)
{
t->next=p1;
head=t;
}
else
{t->next=p1;
p2->next=t;}
}
p1=head;
while(p1!
=NULL)
{i++;
p1->rank=i;
p1=p1->next;
}
printf("已排序成功.\n");
return(head);}
StudentNode*Insert(StudentNode*head,StudentNode*New)//信息的插入
{
StudentNode*p0,*p1,*p2;
//intn=0;
intsum1,i;
p1=head;
p0=New;
printf("输入学号:
");
scanf("%s",New->IDNumber);
printf("输入姓:
");
scanf("%s",New->FamilyName);
printf("输入名");
scanf("%s",New->GivenName);
printf("性别:
");
scanf("%d",&New->sex);
printf("出生年:
");
scanf("%d",&New->BirthYear);
printf("出生月:
");
scanf("%d",&New->BirthMonth);
printf("出生日:
");
scanf("%d",&New->BirthDay);
printf("Pleaseenterthe4scores.\n");
sum1=0;
for(i=0;i<4;i++)
{do
{printf("成绩score%d:
",i+1);
scanf("%d",&New->score[i]);
if(New->score[i]>100||New->score[i]<0)
printf("数据错误,请重新输入\n");
}while(New->score[i]>100||New->score[i]<0);
sum1=sum1+New->score[i];
}
New->sum=sum1;
New->average=sum1/4;
New->rank=0;
if(head==NULL)
{head=p0;
p0->next=NULL;
}
else
{
while((p0->average
=NULL))
{p2=p1;
p1=p1->next;
}
if(p0->average>=p1->average)
{if(head==p1)head=p0;
elsep2->next=p0;
p0->next=p1;
}
else
{p1->next=p0;
p0->next=NULL;
}
}
//n=n+1;
head=Sort(head);
printf("学生%s%s已被更新.\n",New->FamilyName,New->GivenName);
return(head);
}
StudentNode*Delete(StudentNode*head)//删除记录函数
{
intn=0;
StudentNode*p1,*p2;
charc,s[6];
printf("请输入要删除的学生学号:
");
scanf("%s",s);
p1=p2=head;
while(strcmp(p1->IDNumber,s)&&p1!
=NULL)
{p2=p1;
p1=p1->next;
}
if(strcmp(p1->IDNumber,s)==0)
{
printf("◆◆◆◆◆◆◆◆◆◆◆◆◆◆找到了◆◆◆◆◆◆◆◆◆◆◆◆◆◆\n");
printf("---------------------------------------------------------------\n");
printf("---------------------------------------------------------------\n");
printf("◆◆◆◆◆◆◆◆◆◆◆◆◆◆结束◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆\n");
printf("删除请按Y,退出请按N");
for(;;)
{scanf("%c",&c);
if(c=='n'||c=='N')break;
if(c=='Y'||c=='y')
{
if(p1==head)
head=p1->next;
else
p2->next=p1->next;n=n-1;
printf("\n%s学生的信息已被删除\n",s);
break;
}
}
}
else
printf("\n没有此人信息\n");
return(head);
}
voidSave(StudentNode*head)//保存数据到文件
{
FILE*fp;
StudentNode*p;
charoutfile[10];
printf("输入文件例如:
c:
\\scoreenteroutfilename.\n");
scanf("%s",outfile);
if((fp=fopen
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 计算机 程序 编程 课程设计 实验 报告 学生 成绩
![提示](https://static.bdocx.com/images/bang_tan.gif)