学生成绩管理系统 C语言 课程设计Word文件下载.docx
《学生成绩管理系统 C语言 课程设计Word文件下载.docx》由会员分享,可在线阅读,更多相关《学生成绩管理系统 C语言 课程设计Word文件下载.docx(18页珍藏版)》请在冰豆网上搜索。
做这么一个课程设计,一方面是为了检查我们一个学期以来的学习成果,另一方面也是为了让我们进一步的掌握和运用它,同时也让我们认清自己的不足之处和薄弱环节,加以弥补和加强。
2需求分析
随着学校规模的发展扩大,学校要向着大型化,规模化发展,而对于学生信息管理系统有关的信息随之增加。
在这种情况下单靠人工来处理学生的信息不但显得大不从心,而且极容易出错。
因此,需要开发学生管理系统,该系统可以实现由计算机代替人工执行一系列复杂而繁琐的操作,使得学校管理人员可以轻松快捷的完成学生信息管理的任务。
2.1数据需求分析
本系统的主要数据是学生信息。
学生信息包括:
学生学号,姓名,性别,语文成绩,数学成绩,英语成绩,平均成绩,总成绩等。
2.2功能需求分析
本系统主要实现对学生成绩信息进行管理,需要实现以下几个方面的管理功能:
(1)创建学生信息:
录入学生的信息。
(2)查找学生信息:
按学号、姓名查找。
(3)删除学生信息;
按学号、姓名删除。
(4)更新学生信息:
找到要修改的学号,修改相应信息。
(5)排序学生信息:
按某科目或者总分排序。
(6)统计学生信息:
统计及格和优秀人数。
(7)插入学生信息:
插入一个新的学生。
源代码
#include<
stdio.h>
/*引用库函数*/
stdlib.h>
ctype.h>
string.h>
typedefstruct/*定义结构体数组*/
{
charnum[10];
/*学号*/
charname[20];
/*姓名*/
intscore;
/*成绩*/
}Student;
Studentstu[80];
/*结构体数组变量*/
intmenu_select()/*菜单函数*/
charc;
do
{
system("
cls"
);
/*运行前清屏*/
printf("
\t\t欢迎使用学生信息管理系统\n"
\t\t*****************************************\n"
\t\t****学生管理信息系统****\n"
/*菜单选择*/
\t\t|1.请输入记录|\n"
\t\t|2.显示所有记录|\n"
\t\t|3.排序|\n"
\t\t|4.添加记录|\n"
\t\t|5.删除记录|\n"
\t\t|6.查询|\n"
\t\t|7.统计系统信息|\n"
\t\t|8.从正文中添加记录|\n"
\t\t|9.将所有记录存储到文件中|\n"
\t\t|0.退出程序|\n"
\t\t请选择使用选项:
(0-9):
"
c=getchar();
/*读入选择*/
}while(c<
'
0'
||c>
9'
return(c-'
/*返回选择*/
}
intInput(Studentstud[],intn)/*输入若干条记录*/
{
inti=0;
charsign,x[10];
/*x[10]为清除多余的数据所用*/
while(sign!
='
n'
&
sign!
N'
)/*判断*/
\t\t\t请输入学生证号:
/*交互输入*/
scanf("
\t\t\t%s"
stud[n+i].num);
\t\t\t请输入学生姓名:
stud[n+i].name);
\t\t\t请输入学生成绩:
\t\t\t%d"
&
stud[n+i].score);
gets(x);
/*清除多余的输入*/
\t\t\t是否继续输入记录?
(Y/N)"
\t\t\t%c"
sign);
/*输入判断*/
i++;
}
return(n+i);
voidDisplay(Studentstud[],intn)/*显示所有记录*/
inti;
printf("
\t\t\t-----------------------------------\n"
/*格式头*/
\t\t\t学生证号姓名成绩\n"
for(i=1;
i<
n+1;
i++)/*循环输入*/
\t\t\t%-16s%-15s%d\n"
stud[i-1].num,stud[i-1].name,stud[i-1].score);
if(i>
1&
i%10==0)/*每十个暂停*/
{
printf("
/*格式*/
\t\t\t"
system("
pause"
}
system("
voidSort_by_score(Studentstud[],intn)/*按成绩排序*/
inti,j,*p,*q,s;
chart[10];
for(i=0;
n-1;
i++)/*冒泡法排序*/
for(j=0;
j<
n-1-i;
j++)
if(stud[j].score<
stud[j+1].score)
{
strcpy(t,stud[j+1].num);
strcpy(stud[j+1].num,stud[j].num);
strcpy(stud[j].num,t);
strcpy(t,stud[j+1].name);
strcpy(stud[j+1].name,stud[j].name);
strcpy(stud[j].name,t);
p=&
stud[j+1].score;
q=&
stud[j].score;
s=*p;
*p=*q;
*q=s;
}
intInsert_a_record(Studentstud[],intn)/*插入一条记录*/
charx[10];
/*清除多余输入所用*/
\t\t\t学生证号:
/*交互式输入*/
scanf("
stud[n].num);
\t\t\t学生姓名:
stud[n].name);
\t\t\t学生成绩:
stud[n].score);
gets(x);
n++;
Sort_by_score(stud,n);
\t\t\t添加成功!
\n"
/*返回成功信息*/
return(n);
intDelete_a_record(Studentstud[],intn)/*按姓名查找,删除一条记录*/
chars[20];
inti=0,j;
\t\t\t请输入该学生姓名:
/*交互式问寻*/
%s"
s);
while(strcmp(stud[i].name,s)!
=0&
n)i++;
/*查找判断*/
if(i==n)
\t\t\t无法找到该信息!
/*返回失败信息*/
return(n);
for(j=i;
j++)/*删除操作*/
strcpy(stud[j].num,stud[j+1].num);
strcpy(stud[j].name,stud[j+1].name);
stud[j].score=stud[j+1].score;
\t\t\t删除成功!
return(n-1);
voidQuery_a_record(Studentstud[],intn)/*查找并显示一个记录*/
\t\t\t请输入要查询的学生姓名:
{
/*输入失败信息*/
return;
\t\t\t该学生学生证号:
%s\n"
stud[i].num);
/*输出该学生信息*/
\t\t\t该学生的成绩:
%d\n"
stud[i].score);
voidStatistic(Studentstud[],intn)/*新增功能,输出统计信息*/
inti,j=0,k=0,sum=0,flag,m=0;
floataver;
/*成绩平均值*/
n;
i++)/*循环输入判断*/
sum+=stud[i].score;
if(stud[j].score>
stud[i].score)j=i;
if(stud[k].score<
stud[i].score)k=i;
aver=1.0*sum/n;
\t\t\t总计%d记录.\n"
n);
/*总共记录数*/
\t\t\t最低学生成绩:
/*最低分*/
%s姓名:
%s成绩:
stud[j].num,stud[j].name,stud[j].score);
\t\t\t最高学生成绩:
/*最高分*/
stud[k].num,stud[k].name,stud[k].score);
\t\t\t平均成绩:
%5.2f\n"
aver);
/*平均分*/
\n\t\t\t挂科学生信息:
i++)
flag=0;
if(stud[i].score<
60)
flag=1;
++m;
}
if(flag==1)
stud[i].num,stud
[i].name,stud[i].score);
}
if(m)printf("
\t\t\t挂科人数为:
m);
elseprintf("
\t\t\t无学生挂科!
intAddfromText(Studentstud[],intn)/*从文件中读入数据*/
inti=0,num;
FILE*fp;
/*定义文件指针*/
charfilename[20];
/*定义文件名*/
\t\t\t请输入文件名:
filename);
/*输入文件名*/
if((fp=fopen(filename,"
rb"
))==NULL)/*打开文件*/
\t\t\t无法打开文件!
/*打开失败信息*/
fscanf(fp,"
%d"
num);
/*读入总记录量*/
while(i<
num)/*循环读入数据*/
fscanf(fp,"
%s%s%d"
stud[n+i].num,stud[n+i].name,&
n+=num;
fclose(fp);
/*关闭文件*/
\t\t\t成功!
voidWritetoText(Studentstud[],intn)/*将所有记录写入文件*/
\t\t\t从正文中添加记录:
w"
fprintf(fp,"
/*循环写入数据*/
n)
fprintf(fp,"
%-16s%-15s%d\n"
stud[i].num,stud[i].name,stud[i].score);
成功!
voidmain()/*主函数*/
intn=0;
for(;
;
)
switch(menu_select())/*选择判断*/
{
case1:
\t\t\t输入记录:
/*输入若干条记录*/
n=Input(stu,n);
break;
case2:
\t\t\t显示所有记录:
/*显示所有记录*/
Display(stu,n);
break;
case3:
\t\t\t排序\n"
Sort_by_score(stu,n);
/*按学号排序*/
\t\t\t排序成功!
case4:
\t\t\t添加记录\n"
n=Insert_a_record(stu,n);
/*插入一条记录*/
case5:
\t\t\t删除记录\n"
n=Delete_a_record(stu,n);
/*按姓名查找,删除一条记录*/
case6:
\t\t\t查询\n"
Query_a_record(stu,n);
/*查找并显示一个记录*/
case7:
\n\t\t\t统计结果:
Statistic(stu,n);
/*新增功能,输出统计信息*/
case8:
n=AddfromText(stu,n);
case9:
\t\t\t将所有记录存储到文件中\n"
WritetoText(stu,n);
case0:
\t\t\t谢谢使用,再见!
/*结束程序*/
exit(0);
}
3系统总体设计
3.1系统模块划分
设计该项目可以简化学生信息管理的流程,使管理更加简便、清晰。
本程序包含输入记录、显示记录、按成绩排序、插入记录、删除记录(按姓名查找并删除)、查找并显示记录(按姓名查找)、输出系统信息等各种学生管理系统所需功能,基本能够满足管理需求。
本系统主要是对学生信息的管理,包括了有关学生信息的创建、查询、删除、更新、排序、统计、插入等功能。
整个系统分为以下几个模块。
设计该程序是为了实现更简洁的学生信息管理,满足管理学生学号、姓名和成绩等信息的要求。
系统具体功能如下:
(1)输入记录——输入的记录包括:
学生学生证号、姓名、成绩;
(2)显示记录——显示所有以上输入记录或根据成绩排序后的记录;
(3)按成绩排序——根据学生成绩由大到小排序;
(4)插入一条记录——插入一条包含学生信息的记录;
(5)删除一条记录——查找姓名,并删除该学生记录;
(6)查找——按照学生姓名查找并显示该学生信息;
(7)输出统计信息——输出包含:
记录总数、最高分、最低分、平均分和挂科学生信息等;
(8)读取信息——将保存与VC同一个盘的文件中的学生记录读取出来;
(9)存储信息——将学生信息保存指定文件中;
(10)退出程序。
3.2系统模块结构图
根据系统功能设计,对应的系统模块结构图如图1所示:
3.3程序结构
该系统首先定义了包含:
学生学号、姓名、成绩的结构体。
然后定义了菜单函数供用户选择,紧接着定义了实现以上各功能的子函数。
最后是主函数,主函数通过switch语句实现对各子函数的调用。
4系统详细设计
4.1数据描述——结构体类型定义说明
说明:
该程序定义了一个结构体,结构体变量名为student,结构体数组包含:
(char型)学号、(char型)学生姓名以及(int型)学生成绩。
该结构体如下:
charnum[10];
charname[20];
intscore;
/*结构体数组变量*/
4.2函数