完整word版c语言程序设计成绩管理系统Word格式.docx
《完整word版c语言程序设计成绩管理系统Word格式.docx》由会员分享,可在线阅读,更多相关《完整word版c语言程序设计成绩管理系统Word格式.docx(19页珍藏版)》请在冰豆网上搜索。
通过本系统软件,能帮助教研人员利用计算机,快速方便地对学生成绩管理进行管理、输入、输出、查找的所需操作,使散乱的人事档案能够具体化,直观化、合理化。
本软件适用于教育界,对学生的信息可以随时输入、输出、查找、修改、汇总。
2.题目描述:
对学生信息(包括英语、数学、计算机、平均分、总分)进行管理,包括学生成绩的信息输入、输出、排序、查询、插入、删除、统计、退出.
(注:
本程序中将学生记录存在文件score中。
)
功能模块分工:
黄志慧负责:
输入功能、输出功能、排序功能及主函数;
刘纯和负责:
查询功能、插入功能、删除功能、统计功能。
3.课程设计报告内容
3.1.算法与流程
学生信息的结构体表示;
structstudent
{
intno;
charname[MAX_NAME];
intenglish;
intmath;
intcomputer;
intmark_ave;
intmark_tot;
}STUDENT;
系统化分为如下模块(即如下函数)
1、输入信息:
输入信息包括学生的姓名、学号以及学生的成绩等相关信息;
可用函数voidinput(STUDENT*data,int*len)来实现此操作。
2、输出信息:
输出学生的信息以及成绩voidoutput(STUDENT*data,intlen):
通过学生的姓名来查看学生的相关成绩,同时也可以分别通过caverage()
、maverage()
、eaverage()
和comaverage()
来输出成绩的平均分数、最高和最低分数。
3.排序功能:
用函数voidsort(STUDENT*data,intlen)来实现
4、查询模块:
可用voidfind(STUDENT*data,intlen)
来实现。
找到就输出此学生全部信息。
3、插入模块:
可用voidinsert(STUDENT*data,int*len)函数来实现。
其中通过学号的大小来比较的,并且以此来排序。
6.删除功能:
用函数voiddelete_item(STUDENT*data,int*len)来实现
7.统计功能:
用函数voidstat(STUDENT*data,intlen)来实现
8、退出系统:
可用一个函数exit()来实现,首先将信息保存到文件中,释放动态创建的内存空间,再退出此程序。
3.2、流程
否
是
12345678
3.3.源程序代码
#include<
stdlib.h>
stdio.h>
string.h>
#defineMAXN35
#defineMAX_NAME256
typedefstructstudent//学生信息
doubleenglish;
doublemath;
doublecomputer;
doublemark_ave;
doublemark_tot;
/*-----------输入信息子程序---------*/
voidinput(STUDENT*data,int*len)
putchar('
\n'
);
printf("
%s\n"
"
请输入新的记录,如果需要退出当前菜单请输入-1."
格式:
\n学号\n"
姓名英语数学计算机"
如:
\n"
5\n"
黄志慧100100100\n"
scanf("
%d"
&
no);
while(no!
=-1){
data[*len].no=no;
scanf("
%s%lf%lf%lf"
data[*len].name,&
data[*len].english,&
data[*len].math,&
data[*len].computer);
data[*len].mark_ave=(data[*len].english+data[*len].math+data[*len].computer)/3.0;
data[*len].mark_tot=data[*len].english+data[*len].math+data[*len].computer;
(*len)++;
}
}
/*---------------输出信息子程序---------------*/
voidoutput(STUDENT*data,intlen)
inti;
system("
cls"
%8s"
学号"
姓名"
英语"
数学"
%10s"
计算机"
%12s"
平均分"
总分"
for(i=0;
i<
80;
i++)
='
for(i=0;
i<
len;
{
%8d"
data[i].no);
data[i].name);
%8.1lf"
data[i].english);
data[i].math);
%10.1lf"
data[i].computer);
%12.1lf"
data[i].mark_ave);
data[i].mark_tot);
}
按回车键继续."
getchar();
/*--------------排序子程序------------*/
voidsort(STUDENT*data,intlen)
inti,j,k;
STUDENTtemp;
for(i=0;
len-1;
i++){
for(k=i,j=i+1;
j<
len;
j++)
if(data[k].mark_ave>
data[j].mark_ave)k=j;
if(k!
=i){
temp=data[i];
data[i]=data[k];
data[k]=temp;
}
/*--------------------搜索子程序-----------------------*/
voidfind(STUDENT*data,intlen)
intfind_no,result;
lab:
result=0;
printf("
请输入需要查找的学生的学号,退出当前菜单请输入-1."
find_no);
if(find_no==-1)return;
/*exitthefinesubprogram*/
while(data[result].no!
=find_no&
&
result<
len)result++;
if(result>
=len){
printf("
未查询到相关信息"
gotolab;
}
else{
system("
查询信息如下:
"
for(i=0;
putchar('
putchar('
data[result].no);
data[result].name);
data[result].english);
data[result].math);
data[result].computer);
data[result].mark_ave);
data[result].mark_tot);
/*-----------------插入子程序-------------*/
voidinsert(STUDENT*data,int*len)
intno,pos;
doubleenglish,math,computer,mark_ave,mark_tot;
输入新的记录,退出当前菜单请输入-1."
姓名英语数学计算机"
if(no==-1)return;
name,&
english,&
math,&
computer);
mark_ave=(english+math+computer)/3.0;
mark_tot=english+math+computer;
pos=0;
while((data[pos].mark_ave<
mark_ave)&
(pos<
*len))
pos++;
for(i=*len-1;
i>
=pos;
i--)
data[i+1]=data[i];
data[pos].no=no;
strcpy(data[pos].name,name);
data[pos].english=english;
data[pos].math=math;
data[pos].computer=computer;
data[pos].mark_ave=mark_ave;
data[pos].mark_tot=mark_tot;
gotolab;
/*-------------删除子程序--------------*/
voiddelete_item(STUDENT*data,int*len)
intno,i,pos;
pos=0;
输入需要删除的学生的学号,退出当前菜单请输入-1."
while((data[pos].no!
=no)&
*len))pos=pos+1;
if(pos>
=*len){
未找到需要删除的学生"
for(i=pos+1;
i<
*len;
data[i-1]=data[i];
*len=*len-1;
if(*len==0){
printf("
没有任何记录,请按回车键返回."
getchar();
return;
/*---------------统计子程序------------*/
voidstat(STUDENT*data,intlen)
intno_59=0,no_69=0,no_79=0,no_89=0,no_100=0;
if(data[i].mark_ave<
=59)no_59++;
elseif(data[i].mark_ave<
=69)no_69++;
elseif(data[i].mark_ave<
=79)no_79++;
=89)no_89++;
elseno_100++;
分数"
0--59"
60--69"
70--79"
80--89"
90--100"
学生"
%10d"
no_59);
no_69);
no_79);
no_89);
no_100);
按回车键返回"
/*---------------显示信息子程序------------*/
voidpaint()
%43s\n"
菜单"
1输入2输出\n"
3按平均分排序4按学号查找\n"
5插入6按学号删除\n"
7按平均分输出统计信息8保存到文件\n"
0退出\n"
=79;
请输入各操作对应的序号:
voidsave(STUDENT*data,intlen)//将数据保存到文件
FILE*fp;
fp=fopen("
成绩统计表.txt"
"
w"
fprintf(fp,"
%10s\n"
========================================================================\n"
%10.1lf\n"
fclose(fp);
文件已保存到\"
成绩统计表.txt\"
getchar();
/*-----------主程序--------------*/
voidmain()
STUDENTdata[MAXN];
intlen=0;
charctrl_ch;
paint();
%c"
ctrl_ch);
while(ctrl_ch!
='
0'
){
switch(ctrl_ch){
case'
1'
:
input(data,&
len);
break;
2'
output(data,len);
3'
sort(data,len);
4'
find(data,len);
5'
insert(data,&
6'
delete_item(data,&
7'
stat(data,len);
8'
save(data,len);
default:
if(ctrl_ch!
)printf("
输入错误!
if(ctrl_ch!
)paint();
}
3.4.算法调试过程中出现的问题及解决方法
问题一、
C:
\DocumentsandSettings\Administrator\桌面\C课程设计.cpp(20):
errorC2065:
'
data'
:
undeclaredidentifier
C课程设计.obj-1error(s),0warning(s)
解决方法:
在源程序第六行前加上typedef
问题二、
\DocumentsandSettings\Administrator\桌面\C课程设计.cpp(289):
fatalerrorC1004:
unexpectedendoffilefound
执行cl.exe时出错.
在源程序最后加上“}”
问题三
\DocumentsandSettings\Administrator\桌面\C课程设计.cpp(257):
errorC2059:
syntaxerror:
constant'
C课程设计.obj-1error(s),0warning(s)
将主程序中的“if”换成“cas