c++课程设计 学生成绩管理系统设计.docx
《c++课程设计 学生成绩管理系统设计.docx》由会员分享,可在线阅读,更多相关《c++课程设计 学生成绩管理系统设计.docx(30页珍藏版)》请在冰豆网上搜索。
![c++课程设计 学生成绩管理系统设计.docx](https://file1.bdocx.com/fileroot1/2023-6/28/a2eca52e-5d5e-4a5d-b908-ca3a9c5fdac5/a2eca52e-5d5e-4a5d-b908-ca3a9c5fdac51.gif)
c++课程设计学生成绩管理系统设计
课程设计
课程设计名称:
C语言程序设计
专业班级:
xxxxxxxxxxxxxxxxx
学生姓名:
xxxxxx__
学号:
xxxxxxx_
指导教师:
_
课程设计时间:
2011年12月_
计算机科学与技术专业课程设计任务书
学生姓名
专业班级
学号
题目
学生成绩管理系统设计
指导教师
同组姓名
主要内容
学习掌握并熟练运用C语言进行程序设计;
学习使用数组、指针、结构体和文件等数据结构;
根据具体题目进行简单的需求分析,给出设计方案。
任务要求
综合运用和融化所学理论知识,提高分析和解决实际问题的能力,使用C语言设计一个简单的学生成绩管理系统;
完成需求分析报告,报告中对关键部分给出图表说明。
要求格式规范,工作量饱满。
参考文献
C语言程序设计基础与项目实训中国人民大学出版社。
C语言程序设计案例教程中国铁道出版社。
C语言程序设计案例实践清华大学出版社
C语言程序设计实验报告
一、需求分析
随着计算机的飞速发展,它的应用已经十分广泛,它在人们的生产、生活、工作和学习中发挥着重要的作用。
例如一个高等教育的学校,拥有数千名乃至数万名的学生,那么如何管理这么庞大的学生成绩档案呢?
这时,开发一个功能完善的学生成绩管理系统就必不可少了。
从学生的成绩的查询到管理实现了自动化的模式,从而提高了老师的工作效率和减少工作中的出错率,对学校的学生管理更加方便。
本系统根据学生成绩管理的需要,而建立一个“学生成绩管理系统”,一方便对成绩各项管理操作。
本系统能对成绩进行输入和输出:
能按姓名对学生进行排序,并显示学生的资料、成绩等,不过得以系统输入学生资料、成绩为前提;能添加学生成绩资料;能根据学生的姓名来查询该学生的成绩资料,并修改或是删除该学生信息;能够从文件中读取学生信息,并且添加到系统中;能把对系统锁进行的操作进行保存,及时更新系统中的数据。
二、人员分工
姓名
主要负责内容
总体设计;数据程序查询主菜单程序
主菜单程序、录入数据程序的编码与调试、
输出、统计、
删除、追加数据程序的编码与调试
修改数据程序的编码与调试
三、运行环境
硬件环境:
CPU(pentium42.4Hz)、内存(256MB)、硬盘(80G)
软件环境:
Windows7、VC6.0
四、系统模版功能
1、系统总体框图
2、模块设计
在我们设计的程序中:
包括了个人成绩录入,修改学生成绩,查询个人成绩,删除个人成绩,四大模块组成。
本系统定义了结构体allstudentinfo,用于存放学生的基本信息和成绩管理信息。
进入该程序后会看到总的页面菜单,包括
1、录入学生个人成绩;
2、修改学生个人成绩;
3、查询学生个人成绩;
4、删除学生个人成绩;
5、退出成绩管理系统;
再按个人需求分别进入需要的界面。
我们用到了switch函数语句和if语句和for循环语句等本学期学到的相关知识。
个人成绩录入:
首先,打开文件“个人成绩录入.dat”如果成功,将输入学生姓名,学号及语、数、外,三科成绩录入到文件当中(在录入学生信息时,系统调用函数”inputsorc()”,将新的学生信息录入到文件中。
),然后判断输入是否结束,如果没有错误,请继续输入,否则推出录入模块。
如有错误,要按照当前操作进行修正。
再依次录入要输入的学生信息,按照之前的操作进行。
修改学生成绩:
当用户在“学生个人信息管理”界面中按“2”进入“修改学生个人成绩”。
可以对当前已录入的学生成绩进行修改,在此界面中课选择“1~3”之间的数值,调用相应功能进行操作,并将修改后的信息保存在“学生个人成绩.dat”中。
如果成功,选择要修改的内容和要修改的姓名。
(在修改学生信息时,调用‘mofsorc()’函数实现对学生3科成绩的修改)如果学生存在,则输入新的信息,并保存在文件中;如果不存在,输入错误信息,并选择要重新修改的内容。
如果打开文件有错误,输出错误信息并推出学生管理系统。
主要功能是用来修改学生资料。
在系统保存了某学生资料的前提下,想要查找学生资料,可以输入学生姓名,系统就会显示学生资料和各科成绩等信息,这样就可以修改学生的资料,成绩等信息。
查询个人成绩:
用户在“学生个人信息界面”中,按“3”,回车,便可进入“查询个人成绩”中。
在查询学生个人成绩时,可调用“seasorc()”函数实现,并按照
1、学生姓名;
2、学号;
进行查询。
如果成功,则选择学生的姓名或学号,则显示该学生信息;如果不存在,重新输入要查询的内容。
然后判断是否继续查询,否则退出模块。
如果打开文件有错误,输出模块信息有错误并退出信息管理器。
主要功能是用来查询学生资料。
在系统保存了某学生资料的前提下,想要查找学生资料,可以输入学生姓名,系统就会显示学生资料和各科成绩等信息。
删除学生个人成绩:
当用户在“学生个人信息管理”界面中按“4”,回车,即可进入“删除个人信息“。
即出现:
printf("请选择你的操作选项:
1.按姓名查找删除2.按学号查找删除");
在删除学生个人信息时,可调用“delsorc()”函数,按学生的姓名字段或学号查找要删除的学生个人信息,并将删除后的信息保存在文件“学生个人成绩.dat”中。
主要功能是用来删除学生资料。
在系统保存学生资料的前提下,想删除某学生的资料,可以输入学生的姓名,系统查找学生资料后,就可以删除了。
由于学生辍学,毕业等原因,即使对系统进行更新,删除一些没有用的信息,可以使系统更加优化。
退出学生个人成绩:
按照当前程序输入的步骤退出该程序。
主要功能是在对系统进行一系列操作,比如添加、删除、修改学生资料后,对系统的最新操作进行保存,即使更新系统,方便下一次的操作。
五、源程序代码
/*源程序:
学生成绩管理系统*/
/**********************************************************************/
//学生学籍管理系统.
/**********************************************************************/
#include
#include
#include
#include
#include
#defineNAME20
#defineSEX10
#defineSORC3
#defineSTUDENTMAX10000000
Structstudentsorc//学生成绩结构
{
charname[NAME];//学生姓名
intID;//学生学号
floatsorc[6];//记录学生成绩
floataver;//平均分
floatsum;//总分
};
/**************************学生个人成绩管理*******************/
voidsorcmeun(structallstudentinfo*p_student)
{
intin;
charch;
do
{
printf("\n\n");
printf("\t---------------------------------------------------------------------\n");
printf("\t|学生个人成绩管理|\n");
printf("\t|---------------------------------------------------------------------|\n");
printf("\t|1、录入学生个人成绩|\n");
printf("\t|2、修改学生个人成绩|\n");
printf("\t|3、查询学生个人成绩|\n");
printf("\t|4、删除学生个人成绩|\n");
printf("\t|5、浏览所有学生成绩|\n");
printf("\t|6、退出成绩管理系统|\n");
printf("\t|---------------------------------------------------------------------|\n");
printf("\t请您正确的选择:
");
if(!
scanf("%d",&in)==1))
{
while((ch=getchar())!
='\n')
putchar(ch);
printf("没有此选项,请正确选择!
");
getch();
continue;
}
fflush(stdin);
switch(in)
{
case1:
inputsorc(p_student);
break;
case2:
mofsorc(p_student);
break;
case3:
seasorc(p_student);
break;
case4:
delsorc(p_student);
break;
case5:
return;
default:
printf("没有此选项,请正确选择!
");
break;
}
}
while(l);
}
/*************************个人成绩录入************************/
voidinputsorc(structallstudentinfo*p_student)
{
inti.count,countinfo;
char*tempname,ch;
system("cls");
if((sorcfile=fopen(filenamel,"a+b"))==NULL)
{
printf("不能打开文件,请确认磁盘已满或文件是否存在");
getch();
exit(l);
}
rewind(sorcfile);
for(count=0;ferad(&p_student[count].student1,sizeof(structstudentsorc),1,sorcfile)==1;count++)
{
countine;
}
tempname=(char*)malloc(20*sizeof(char));
printf("请输入第%d学生的姓名:
",count+1);
while(count=NULL&&tempname[0]!
='\0')
{
strcpy(p_student[count].student1.name,tempname);
printf("请输入该学生的学号:
");
scanf("%d",&p_student[count].student1.ID);
fflush(stdin);
printf("请输入该个学生的3科成绩\n");
printf("----------------------------------\n");
printf("\n语文:
");
scanf("%f",&p_student[count].student1.sorc[0]);
fflush(stdin);
printf("\n数学:
");
scanf("%f",&p_student[count].student1.sorc[0]);
fflush(stdin);
printf("\n英语:
");
scanf("%f",&p_student[count].student1.sorc[0]);
fflush(stdin);
printf("-----------------------------------------\n");
fwrite(&p_student[count++].student,sizeof(structstudentsorc),1,sorcfile);
printf("确定要继续输入下一个学生的成绩吗?
(y/n)");
ch=getchar();
if(ch=='y'||ch=='Y')
{
system("cls");
free(tempname);
tempname=(char*)malloc(20*sizeof(char));
printf("请输入第%d个学生的姓名:
",count+1);
countinue;
}
else
{
system("cls");
free(tempname);
fclose(sorcfile);
return;
}
}
printf("输入有误请返回重新选择操作.....!
");
free(tempname);
fclose(sorcfile);
getch();
system("cls");
return;
}
/*************************修改学生成绩*********************/
voidmofsorc(structallstudengtinfo*p_student)
{
inti,j,k,count;
floatsorc;
charch;
char*tempname;
count=sorcdatfile(p_student);
if(!
count)
{
printf(“读取数据失败,请确认已成功录入或文件是否损坏”);
getch();
system(“cls”);
return;
}
tempname=(char*)malloc(20*sizeof(char));
printf(“请输入要修改成绩的学生姓名:
”);
while(gets(tempname)!
=NULL&&tempname[0]!
=’\o’)
{
if(strcmp(tempname,p_student[i].student1.name))
{
continue;
}
else
{
printf(“请选择要修改的科目成绩:
1.语文2.英语3.数学\n”);
scanf(“%d”&j);
fflush(stdin);
if(j==1)
{
printf(“请重新输入%s的语文成绩:
”,tempname);
scanf(“%f”&sorc);
p_student[i].student1.sorc[0]=sorc;
fflush(stdin);
sorcfile=fopen(filenamel,”w+b”);//把修改后的重新写入文件夹
for(k=0;k{
if(fwrite(&p_student[k].student1,sizeof(structstudentsorc),1,sorcfile)!
=1)
{
free(tempname);
fclose(sorcfile);//写入失败关闭文件
printf(“修改失败,…….!
”);
getch();
system(“cls”);
return;
}
}
free(tempname);
fclose(sorcfile);
printf(“修改成功,返回…….!
”);
getch();
system(“cls”);
return;
}
elseif(j==2)
{
printf(“请重新输入%s的英语成绩:
”,tempname);
scanf(“%f”&sorc);
p_student[i].student1.sorc[2]=sorc;
fflush(stdin);
sorcfile=fopen(filenamel,”w+b”);//把修改后的重新写入文件夹
for(k=0;k{
if(fwrite(&p_student[k].student1,sizeof(structstudentsorc),1,sorcfile)!
=1)
{
free(tempname);
fclose(sorcfile);//写入失败关闭文件
printf(“修改失败,…….!
”);
getch();
system(“cls”);
return;
}
}
free(tempname);
fclose(sorcfile);
printf(“修改成功,返回…….!
”);
getch();
system(“cls”);
return;
}
elseif(j==3)
{
printf(“请重新输入%s的数学成绩:
”,tempname);
scanf(“%f”&sorc);
p_student[i].student1.sorc[2]=sorc;
fflush(stdin);
sorcfile=fopen(filenamel,”w+b”);//把修改后的重新写入文件夹
for(k=0;k{
if(fwrite(&p_student[k].student1,sizeof(structstudentsorc),1,sorcfile)!
=1)
{
free(tempname);
fclose(sorcfile);//写入失败关闭文件
printf(“修改失败,…….!
”);
getch();
system(“cls”);
return;
}
}
free(tempname);
fclose(sorcfile);
printf(“修改成功,返回…….!
”);
getch();
system(“cls”);
return;
}
else
{
printf(“没有此科目,返回…….!
”);
free(tempname);
getch()
system(“cls”);
return;
}
}
}
printf(“没有找到%s的学习成绩,返回…….!
”,tempname);
free(tempname);
getch()
system(“cls”);
return;
}
printf(“输入有误,返回…….!
”,tempname);
free(tempname);
getch()
system(“cls”);
return;
}
/*******************查询个人成绩*********************/
voidseasorc(structallstudentinfo*p_student)
{
char*tempname;
inttempID,stuID;
inti,j,cont;
floatsum=0.0,aver;
count=sorcdatfile(p_student);
if(!
count)
{
printf("读取数据失败,请确认数据是否存在或文件是否损坏");
getch();
system("cls");
return;
}
printf("请选择要操作的类型:
\n");
printf("1.按姓名查找2.按学号查找\n");
scanf("%d",&tempID);
fflush(stdin);
if(tempID==1)
{
tempname=(char*)malloc(20*sizeof(char));
printf("请输入该学生的姓名:
");
while(gets(tempname)!
=NULL&&tempname[0]!
='\0')
{
for(i=0;i{
if(strcmp(tempname,p_student[i].student1.name))
{
continue;
}
else
{
for(j=0;j<3;j++)
{
sum+=p_student[i].student1.sorc[j];//计算总分
}
aver=sum/3.0;//计算平均分
printf("%s的学生成绩表\n",tempname);
printf("----------------------------\n");
printf("\n学号:
%d\n",p_student[i].student1.ID);
printf("\n姓名:
%d\n",p_student[i].student1.name);
printf("\n语文:
%.2f\n",p_student[i].student1.sorc[0]);
printf("\n数学:
%.2f\n",p_student[i].student1.sorc[1]);
printf("\n英语:
%.2f\n",p_student[i].student1.sorc[2]);
printf("\n总分:
%.2f\n",sum);
printf("\n平均分:
%.2f\n",aver);
printf("--------------------------\n");
printf("查询完毕,按任意键返回!
");
free(tempname);
getch();
system("cls");
return;
}
}
printf("找不到该学生的成绩,返回.......!
");
free(tempname);
getch();
system("cls");
return;
}
elseif(tempID==2)
{
printf("请输入该学生的ID学号:
");
scanf("%d",&stuID);
fflush(stdin);
for(i=0;i{
if(stuID!
=p_student[i].student1.ID)
{
continue;
}
else
{
for(j=0;j<3;j++)
{
sum+=p_student[i].student1.sorc[j];//计算总分