C语言实验报告学生信息资源管理系统.docx
《C语言实验报告学生信息资源管理系统.docx》由会员分享,可在线阅读,更多相关《C语言实验报告学生信息资源管理系统.docx(13页珍藏版)》请在冰豆网上搜索。
C语言实验报告学生信息资源管理系统
C语言实验报告
院系:
数学与计算科学学院
班级:
信息与计算科学2班
姓名:
学号:
2011年12月21日
一、问题描述
编写一个信息管理系统,包括姓名、性别、年龄、班级、学号、地址、各科成绩等,要求能进行查找、排序和计算,按加权平均排序、按某一课程排序和按学号排序。
二、分析问题,解决问题的步骤
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)来实现。
找到就输出此学生全部信息。
5、统计功能能:
用函数voidstat(STUDENT*data,intlen)来实现。
6、退出系统:
可用一个函数exit()来实现,首先将信息保存到文件中,释放动态创建的内存空间,再退出此程序。
三、程序编写
#include
#include
#include
#defineMAXN35
#defineMaxsize325
typedefstructstudent//学生信息
{
intno;
charname[Maxsize];
charsex[Maxsize];
charage[Maxsize];
charadress[Maxsize];
charglassnum[Maxsize];
doubleChinese;
doublemath;
doubleEnglish;
doublemark_ave;
doublemark_tot;
}STUDENT;
/*-----------输入信息子程序---------*/
voidinput(STUDENT*data,int*len)
{
intno;
putchar('\n');
printf("%s\n","请输入新的记录,如果需要退出当前菜单请输入-1.");
printf("%s\n","格式:
\n学号\n");
printf("%s\n","姓名性别年龄地址班级学号语文数学英语");
putchar('\n');
printf("如:
\n");
printf("1\n");
printf("张三939589\n");
scanf("%d",&no);
while(no!
=-1){
data[*len].no=no;
scanf("%s%s%s%s%s%lf%lf%lf",data[*len].name,&data[*len].sex,&data[*len].age,&data[*len].adress,&data[*len].glassnum,&data[*len].Chinese,&data[*len].math,&data[*len].English);data[*len].mark_ave=(data[*len].Chinese+data[*len].math+data[*len].English)/3.0;data[*len].mark_tot=data[*len].Chinese+data[*len].math+data[*len].English;
(*len)++;
scanf("%d",&no);
}
/*---------------输出信息子程序---------------*/
voidoutput(STUDENT*data,intlen)
{
inti;
system("cls");
printf("%8s","姓名");
printf("%8s","性别");
printf("%8s","年龄");
printf("%8s","地址");
printf("%8s","班级");
printf("%8s","语文");
printf("%8s","数学");
printf("%10s","英语");
printf("%12s","平均分");
printf("%10s","总分");
putchar('\n');
for(i=0;i<80;i++)
putchar('=');
putchar('\n');
for(i=0;i{
printf("%8d",data[i].no);
printf("%8s",data[i].name);
printf("%8s",data[i].sex);
printf("%8s",data[i].age);
printf("%8s",data[i].adress);
printf("%8s",data[i].glassnum);
printf("%8.1lf",data[i].Chinese);
printf("%8.1lf",data[i].math);
printf("%10.1lf",data[i].English);
printf("%12.1lf",data[i].mark_ave);
printf("%10.1lf",data[i].mark_tot);
putchar('\n');
}
for(i=0;i<80;i++)
putchar('=');
putchar('\n');
printf("按回车键继续.");
getchar();
getchar();
}
/*--------------排序子程序------------*/
voidsort(STUDENT*data,intlen)
{
inti,j,k;
STUDENTtemp;
for(i=0;ifor(k=i,j=i+1;jif(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;
inti;
lab:
result=0;
printf("%s\n","请输入需要查找的学生的学号,退出当前菜单请输入-1.");
scanf("%d",&find_no);
if(find_no==-1)return;/*exitthefinesubprogram*/
while(data[result].no!
=find_no&&resultif(result>=len){
printf("%s\n","未查询到相关信息");
gotolab;
}
else{
system("cls");
printf("%s\n","查询信息如下:
");
for(i=0;i<80;i++)
putchar('=');
putchar('\n');
printf("%8s","学号");
printf("%8s","姓名");
printf("%8s","性别");
printf("%8s","年龄");
printf("%8s","地址");
printf("%8s","班级");
printf("%8s","语文");
printf("%8s","数学");
printf("%10s","英语");
printf("%12s","平均分");
printf("%10s","总分");
putchar('\n');
printf("%8d",data[result].no);
printf("%8s",data[result].name);
printf("%8s",data[result].sex);
printf("%8s",data[result].age);
printf("%8s",data[result].adress);
printf("%8s",data[result].glassnum);
printf("%8.1lf",data[result].Chinese);
printf("%8.1lf",data[result].math);
printf("%10.1lf",data[result].English);
printf("%12.1lf",data[result].mark_ave);
printf("%10.1lf",data[result].mark_tot);
putchar('\n');
for(i=0;i<80;i++)
putchar('=');
putchar('\n');
gotolab;
}
}
/*---------------统计子程序------------*/
voidstat(STUDENT*data,intlen)
{
intno_59=0,no_69=0,no_79=0,no_89=0,no_100=0;
inti;
for(i=0;iif(data[i].mark_ave<=59)no_59++;
elseif(data[i].mark_ave<=69)no_69++;
elseif(data[i].mark_ave<=79)no_79++;
elseif(data[i].mark_ave<=89)no_89++;
elseno_100++;
}
system("cls");
for(i=0;i<80;i++)
putchar('=');
putchar('\n');
printf("%10s","分数");
printf("%10s","0--59");
printf("%10s","60--69");
printf("%10s","70--79");
printf("%10s","80--89");
printf("%10s","90--100");
putchar('\n');
putchar('\n');
printf("%10s","学生");
printf("%10d",no_59);
printf("%10d",no_69);
printf("%10d",no_79);
printf("%10d",no_89);
printf("%10d",no_100);
putchar('\n');
for(i=0;i<80;i++)
putchar('=');
putchar('\n');
printf("按回车键返回");
getchar();
getchar();
}
/*---------------显示信息子程序------------*/
voidpaint()
{
inti;
system("cls");
printf("%55s\n",“信计二班学生成绩管理系统\n");
printf("制作者:
XX\n");
for(i=0;i<80;i++)
putchar('=');
putchar('\n');
printf("1输入信息2输出信息\n");
printf("3按平均分排序4按学号查找\n");
printf("5按平均分输出统计信息6保存到文件\n");
printf("0退出\n");
for(i=0;i<=79;i++)
putchar('=');
putchar('\n');
printf("%s\n","请输入各操作对应的序号:
");
}
voidsave(STUDENT*data,intlen)//将数据保存到文件
{
inti;
FILE*fp;
fp=fopen("成绩统计表.txt","w");
fprintf(fp,"%8s","学号");
fprintf(fp,"%8s","姓名");
fprintf(fp,"%8s","性别");
fprintf(fp,"%8s","年龄");
fprintf(fp,"%8s","地址");
fprintf(fp,"%8s","班级");
fprintf(fp,"%8s","语文");
fprintf(fp,"%8s","数学");
fprintf(fp,"%10s","英语");
fprintf(fp,"%12s","平均分");
fprintf(fp,"%10s\n","总分");
fprintf(fp,"========================================================================\n");
putchar('\n');
for(i=0;i{
fprintf(fp,"%8d",data[i].no);
fprintf(fp,"%8s",data[i].name);
fprintf(fp,"%8s",data[i].sex);
fprintf(fp,"%8s",data[i].age);
fprintf(fp,"%8s",data[i].adress);
fprintf(fp,"%8s",data[i].glassnum);
fprintf(fp,"%8.1lf",data[i].Chinese);
fprintf(fp,"%8.1lf",data[i].math);
fprintf(fp,"%10.1lf",data[i].English);
fprintf(fp,"%12.1lf",data[i].mark_ave);
fprintf(fp,"%10.1lf\n",data[i].mark_tot);
}
fprintf(fp,"========================================================================\n");
fclose(fp);
printf("文件已保存到\"成绩统计表.txt\"");
getchar();getchar();
}
/*-----------主程序--------------*/
voidmain()
{
STUDENTdata[MAXN];
intlen=0;
charctrl_ch;
paint();
scanf("%c",&ctrl_ch);
while(ctrl_ch!
='0'){
;case'1':
input(data,&len);
break;
case'2':
output(data,len);
break;
case'3':
sort(data,len);
break;
case'4':
find(data,len);
break;
case'5':
insert(data,&len);
break;
case'6':
delete_item(data,&len);
break;
case'7':
stat(data,len);
break;
case'8':
save(data,len);
break;
default:
if(ctrl_ch!
='\n')printf("%s\n","输入错误!
");
break;
}
if(ctrl_ch!
='\n')paint();
scanf("%c",&ctrl_ch);
}
}
四、误差分析
此程序没有按加权平均排序功能是本程序的一大弊端,还有就是所列科目少了点,由于本课题中的许多知识点都没有学过,需要查找课外资料,所以如有错误,希望老师多多指正,谢谢!