学生成绩管理系统 C语言课程设计报告材料.docx
- 文档编号:27100858
- 上传时间:2023-06-27
- 格式:DOCX
- 页数:45
- 大小:186.29KB
学生成绩管理系统 C语言课程设计报告材料.docx
《学生成绩管理系统 C语言课程设计报告材料.docx》由会员分享,可在线阅读,更多相关《学生成绩管理系统 C语言课程设计报告材料.docx(45页珍藏版)》请在冰豆网上搜索。
学生成绩管理系统C语言课程设计报告材料
《学生成绩管理系统》
课程设计报告
专业:
信息科学与工程学院
班级:
电气信息类0916班
姓名:
坤
指导教师:
汤哲
学号:
0909091612
课程设计报告
一、课程设计题目
学生成绩管理系统
1、需要处理的基础数据
✧学生基本信息:
如班级、学号、、性别、年龄等。
✧学生选修课程的基本信息:
课程编号、课程名称、学分、考试成绩、平时成绩、综合成绩(考试成绩*0.7+平时成绩*0.3)等。
主菜单
2、系统的基本功能
✧数据的录入:
如录入学生的基本信息,以及该学生选修课程的基本信息;
✧数据的修改:
如修改指定学号、或者指定的学生信息,或者修改其选修课程信息;
✧数据的插入:
插入某个学生信息;
✧数据的查询:
如按学号查询、按查询等;
✧数据的删除:
如删除指定学号、或者指定的学生及其选修课程信息;
✧平均成绩的计算:
计算每个学生各门功课的平均成绩,并按平均成绩从高到低的次序输出学生信息;
✧列出不及格学生清单(学号、、不及格的课程和成绩)。
✧考虑用文件把数据保存起来(可选)。
3、链表
structstu/*定义学生基本信息结构体*/
{
inti;/*以输入的顺序来确定的学生序号*/
charnum[11];
charclassnum[5];
charname[128];
charsex[32];
intage;
floatave;
structstu*next;
};
intn=0;/*学生人数*/
structstu*head=0;
structstu1/*定义学生选修课信息结构体*/
{
charlessonnum[11];
charlessonname[256];
floatscore;
floattestgrade;
floatcommongrade;
floatgrade;
structstu1*next;
};
intm;
structstu1*a[max_num];/*定义一个指针数组来记住课程链表地址*/
/*----------------------数据的录入程序-----------------------*/
voidcreate(void)/*建立学生基本信息链表*/
{
n=0;
structstu*p1,*p2;
charch,ch1;
structstu1*create1(void);
do
{
n=n+1;
a[n]=0;
system("cls");
p1=(structstu*)malloc(LEN);
printf("\n学号:
");
scanf("%s",p1->num);
printf("\n班级:
");
scanf("%s",p1->classnum);
printf("\n:
");
scanf("%s",p1->name);
printf("\n性别:
");
scanf("%s",p1->sex);
printf("\n年龄:
");
scanf("%d",&p1->age);
if(n==1)head=p1;
elsep2->next=p1;
p2=p1;
printf("\n是否输入选修课信息(y/n)\n");
fflush(stdin);/*清空输入缓冲区*/
ch1=getchar();
if(ch1=='y'||ch1=='Y')
a[n]=create1();/*根据序号来记忆课程链表地址*/
p1->i=n;
system("cls");
printf("\n是否继续输入另一学生信息(y/n)\n");
fflush(stdin);/*清空输入缓冲区*/
ch=getchar();
}while(ch=='y'||ch=='Y');
p2->next=0;
}
structstu1*create1(void)/*建立课程链表*/
{
m=0;
structstu1*p1,*p2;
charch;
structstu1*head=0;
do
{
m=m+1;
system("cls");
p1=(structstu1*)malloc(LEM);
printf("\n课程编号:
");
scanf("%s",p1->lessonnum);
printf("\n课程名称:
");
scanf("%s",p1->lessonname);
printf("\n学分:
");
scanf("%f",&p1->score);
printf("\n考试成绩:
");
scanf("%f",&p1->testgrade);
printf("\n平时成绩:
");
scanf("%f",&p1->commongrade);
p1->grade=p1->testgrade*0.7+p1->commongrade*0.3;
printf("\n综合成绩:
%-6.1f",p1->grade);
if(m==1)head=p1;
elsep2->next=p1;
p2=p1;
printf("\n是否继续输入另一课程信息(y/n)\n");
fflush(stdin);/*清空输入缓冲区*/
ch=getchar();
}while(ch=='y'||ch=='Y');
p2->next=0;
return(head);
}
二、设计思路
界面:
界面的显示由循环语句和switch语句来控制完成。
数据的录入:
运用链表进行数据的存储,由于要录入的数据有两种即学生的基本信息和学生的选修课程信息,本系统采用两个链表分别存储数据,采用数组将两个链表联系起来,运用循环语句和判断语句来进行数据的录入。
作者感到本功能设计中的难点在于将两个链表联系起来,解决方案是采用一个指针数组来将第二个链表中每个节点地址存储起来,进而将两个链表联系起来。
信息的修改:
本系统采用的是按学号查找信息,系统采用一个由判断语句和循环语句构成的查询函数structstu*findnum(void)来提供信息存储地址;再按照地址来进行修改,其中采用switch语句和循环语句来控制使系统能够提供选择修改的功能。
在这一功能的设计中,作者感到课程信息的修改中的添加课程信息功能是一个难点,解决方案是按插入方案来进行设计。
插入信息:
本系统采用的是按学号顺序来进行插入的,在这一功能的设计中,首先在开辟一个结构体空间将插入学生的信息存储于其中,在采用判断语句和循环语句来查找该条信息应该插入位置的地址,将上一结点的下行指针指向本结点,再将该节点的下行指针指向下一个结点从而达到插入信息的目的。
在这一功能的设计中作者感到插入的具体算法是个难点,本系统采用的教材书本上的方法。
查询信息:
本功能实现是调用structstu*findnum(void)函数查找该条信息的地址,然后再采用for循环进行信息的输出,本功能的实现比较简单,难点在于对函数的调用的灵活运用。
删除信息:
系统采用按学号删除的方案,在这一功能的设计中我没有采用直接调用structstu*findnum(void)函数,而是又重写查找地址程序,这是出于考虑系统功能的更好实现而采用的举措。
具体删除算法采用该节点上一个结点的下行指针直接指向该结点下一个结点从而达到删除该结点的目的。
在此功能的设计中,本作者感到难点不在于算法而在于思维设计的是否缜密。
计算平均成绩:
本功能的实现需要首先计算各个学生的平均成绩,再按照平均成绩进行排序。
这两个过程的设计排序是个难点,因为本系统存储结构为链表,在排序方面较数组有很大区别,在作者看来比较困难,解决方案是运用一个指针型数组将每个结点的地址存在其中,再按照该指针指向的平均成绩来排序数组中的地址,再按照数组中的地址顺序来输出信息,间接达到排序的目的。
不及格学生清单:
判断语句和循环语句的结合运用以达到列出清单的目的,本功能的实现不难,难在于准确控制。
三、系统流程
四、程序代码
#include
#include
#include
#defineLENsizeof(structstu)
#defineLEMsizeof(structstu1)
#definemax_num256
structstu/*定义学生基本信息结构体*/
{
inti;/*以输入的顺序来确定的学生序号*/
charnum[11];
charclassnum[5];
charname[128];
charsex[32];
intage;
floatave;
structstu*next;
};
intn=0;/*学生人数*/
structstu*head=0;
structstu1/*定义学生选修课信息结构体*/
{
charlessonnum[11];
charlessonname[256];
floatscore;
floattestgrade;
floatcommongrade;
floatgrade;
structstu1*next;
};
intm;
structstu1*a[max_num];/*定义一个指针数组来记住课程链表地址*/
/*----------------------数据的录入程序-----------------------*/
voidcreate(void)/*建立学生基本信息链表*/
{
n=0;
structstu*p1,*p2;
charch,ch1;
structstu1*create1(void);
do
{
n=n+1;
a[n]=0;
system("cls");
p1=(structstu*)malloc(LEN);
printf("\n学号:
");
scanf("%s",p1->num);
printf("\n班级:
");
scanf("%s",p1->classnum);
printf("\n:
");
scanf("%s",p1->name);
printf("\n性别:
");
scanf("%s",p1->sex);
printf("\n年龄:
");
scanf("%d",&p1->age);
if(n==1)head=p1;
elsep2->next=p1;
p2=p1;
printf("\n是否输入选修课信息(y/n)\n");
fflush(stdin);/*清空输入缓冲区*/
ch1=getchar();
if(ch1=='y'||ch1=='Y')
a[n]=create1();/*根据序号来记忆课程链表地址*/
p1->i=n;
system("cls");
printf("\n是否继续输入另一学生信息(y/n)\n");
fflush(stdin);/*清空输入缓冲区*/
ch=getchar();
}while(ch=='y'||ch=='Y');
p2->next=0;
}
structstu1*create1(void)/*建立课程链表*/
{
m=0;
structstu1*p1,*p2;
charch;
structstu1*head=0;
do
{
m=m+1;
system("cls");
p1=(structstu1*)malloc(LEM);
printf("\n课程编号:
");
scanf("%s",p1->lessonnum);
printf("\n课程名称:
");
scanf("%s",p1->lessonname);
printf("\n学分:
");
scanf("%f",&p1->score);
printf("\n考试成绩:
");
scanf("%f",&p1->testgrade);
printf("\n平时成绩:
");
scanf("%f",&p1->commongrade);
p1->grade=p1->testgrade*0.7+p1->commongrade*0.3;
printf("\n综合成绩:
%-6.1f",p1->grade);
if(m==1)head=p1;
elsep2->next=p1;
p2=p1;
printf("\n是否继续输入另一课程信息(y/n)\n");
fflush(stdin);/*清空输入缓冲区*/
ch=getchar();
}while(ch=='y'||ch=='Y');
p2->next=0;
return(head);
}
/*-----------------------------------------------------------*/
structstu*findnum(void)
{
charnum[11];
structstu*p1;
structstu1*p2;
charc;
printf("\n输入学生学号:
");
fflush(stdin);
gets(num);
structstu*fa;
fa=head;
if(head==0)
{
printf("\nlistnull\n");gotoend;
}
while(strcmp(fa->num,num)!
=0)
{
if(fa->next==0)break;
fa=fa->next;
}
if(strcmp(fa->num,num)==0)returnfa;
elseprintf("%scan'tbefound!
\n",num);
end:
return0;
}
/*------------------------查询信息模块----------------------------------*/
voidsearch(void)
{
system("cls");
charch2;
structstu*findnum(void);
structstu*p;
structstu1*p1;
p=findnum();
if(p==0)
gotoend;
p1=a[p->i];
printf("\n%17s","学号");
printf("%15s","班级");
printf("%16s","");
printf("%15s","性别");
printf("%15s","年龄");
printf("\n%17s",p->num);
printf("%15s",p->classnum);
printf("%16s",p->name);
printf("%15s",p->sex);
printf("%15d",p->age);
printf("\n********************************************************************************");
printf("\n%11s","课程编号");
printf("%19s","课程名称");
printf("%9s","学分");
printf("%13s","考试成绩");
printf("%13s","平时成绩");
printf("%13s","综合成绩");
for(;p1!
=0;)
{
printf("\n%11s",p1->lessonnum);
printf("%19s",p1->lessonname);
printf("%9.1f",p1->score);
printf("%13f",p1->testgrade);
printf("%13f",p1->commongrade);
printf("%13f",p1->grade);
p1=p1->next;
}
end:
printf("\n按任意键退出");
ch2=getchar();
}
/*--------------------------修改模块-------------------------*/
voidmodify(void)
{
structstu*findnum(void);
charselmenu,selmenu1;
system("cls");
charch2;
charch3;
charch4;
charch6;
charch7;
charch8;
structstu*findnum(void);
structstu*p;
structstu1*p1;
structstu1*p2;
charlessonno[11];
p=findnum();
if(p==0)
{
printf("\n按任意键退出");
fflush(stdin);
scanf("%c",&ch2);
}
else
{
p1=a[p->i];
printf("\n%17s","学号");
printf("%15s","班级");
printf("%16s","");
printf("%15s","性别");
printf("%15s","年龄");
printf("\n%17s",p->num);
printf("%15s",p->classnum);
printf("%16s",p->name);
printf("%15s",p->sex);
printf("%15d",p->age);
printf("\n********************************************************************************");
printf("\n%11s","课程编号");
printf("%19s","课程名称");
printf("%9s","学分");
printf("%13s","考试成绩");
printf("%13s","平时成绩");
printf("%13s","综合成绩");
for(;p1!
=0;)
{
printf("\n%11s",p1->lessonnum);
printf("%19s",p1->lessonname);
printf("%9.1f",p1->score);
printf("%13f",p1->testgrade);
printf("%13f",p1->commongrade);
printf("%13f",p1->grade);
p1=p1->next;
}
p1=a[p->i];
printf("\n按任意键开始修改");
scanf("%c",&ch2);
do
{
system("cls");
printf("\n\n");
printf("\t\t\t1.修改学号");
printf("\t\t2.修改班级\n");
printf("\t\t\t3.修改");
printf("\t\t4.修改性别\n");
printf("\t\t\t5.修改年龄");
printf("\t\t6.修改选修课程信息\n");
printf("\t\t\t0.退出");
printf("\n\t\t\t请输入功能选择编号(0-6):
");
scanf("%c",&selmenu);
switch(selmenu)
{
case'1':
{
system("cls");
printf("学号:
%s",p->num);
printf("\n输入新的数据:
");
scanf("%s",p->num);
printf("\n修改成功!
\n按任意键退出");
fflush(stdin);
scanf("%c",&ch8);
}
break;
case'2':
{
system("cls");
printf("班级:
%s",p->classnum);
printf("\n输入新的数据:
");
scanf("%s",p->classnum);
printf("\n修改成功!
\n按任意键退出");
fflush(stdin);
scanf("%c",&ch8);
}
break;
case'3':
{
system("cls");
printf(":
%s",p->name);
printf("\n输入新的数据:
");
scanf("%s",p->name);
printf("\n修改成功!
\n按任意键退出");
fflush(stdin);
scanf("%c",&ch8);
}
break;
case'4':
{
system("cls");
printf("性别:
%s",p->sex);
printf("\n输入新的数据:
");
scanf("%s",p->sex);
printf("\n修改成功!
\n按任意键退出");
fflush(stdin);
scanf("%c",&ch8);
}
break;
case'5':
{
system("cls");
printf("年龄:
%d",p->age);
printf("\n输入新的数据:
");
scanf("%d",&p->age);
printf("\n修改成功!
\n按任意键退出");
fflush(stdin);
scanf("%c",&ch8);
}
break;
case'6':
{
do{
system("cls");
printf("\n\n\t\t\t1.添加选修课程信息");
printf("\t\t2.修改已有课程信息");
printf("\n\t\t\t0.退出");
printf("\n\t\t\t请输入功能选择编号(0-2):
");
fflush(stdin);
scanf("%c",&ch6);
if(ch6=='0')
break;
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 学生成绩管理系统 C语言课程设计报告材料 学生 成绩管理系统 语言 课程设计 报告 材料