成绩管理系统.docx

上传人:b****4 文档编号:5004694 上传时间:2022-12-12 格式:DOCX 页数:14 大小:18.85KB
下载 相关 举报
成绩管理系统.docx_第1页
第1页 / 共14页
成绩管理系统.docx_第2页
第2页 / 共14页
成绩管理系统.docx_第3页
第3页 / 共14页
成绩管理系统.docx_第4页
第4页 / 共14页
成绩管理系统.docx_第5页
第5页 / 共14页
点击查看更多>>
下载资源
资源描述

成绩管理系统.docx

《成绩管理系统.docx》由会员分享,可在线阅读,更多相关《成绩管理系统.docx(14页珍藏版)》请在冰豆网上搜索。

成绩管理系统.docx

成绩管理系统

源程序代码

成绩管理系统

 

#ifndefsms_stuct_INCLUDED//防止下面的内容被重复包含

#definesms_stuct_INCLUDED

#include//printf()、scanf()等函数

#include//strlen()、strcpy()等函数

#include//atoi()函数

//定义常数

#defineN3

//定义结构体

typedefstructstudent

{

charno[11];

charname[15];

floatscore[N];

floatsum;

floataverage;

intorder;

}STUDENT;

//函数声明

intInput(STUDENT*stud,intn);//输入记录

voidprint(STUDENT*stud,intn);//显示记录

voidsort(STUDENT*stud,intn);//排序记录

voidsearch(STUDENT*stud,intn);//查找记录

intinsert(STUDENT*stud,intn);//插入记录

intdelete1(STUDENT*stud,intn);//删除记录

voidsave(STUDENT*stud,intn);//存储记录

intload(STUDENT*stud);//导入记录

voidcount(STUDENT*stud,intn);//统计

#endif

#include"sms_struct.h"

/*菜单函数,返回值为整数*/

#include"stdio.h"

intmenu_select()

{

chars[3];

intc;

printf("\n***************主菜单**************\n");

printf("1.输入记录\n");

printf("2.显示所有记录\n");

printf("3.对所有记录进行排序\n");

printf("4.按姓名查找记录并显示\n");

printf("5.插入记录\n");

printf("6.删除记录\n");

printf("7.将所有记录保存到文件\n");

printf("8.从文件中读入所有记录\n");

printf("9.统计区间内成绩\n");

printf("10.退出\n");

printf("***********************************\n\n");

do

{

printf("请选择操作(1-10):

");

scanf("%s",s);

c=atoi(s);

}while(c<0||c>10);/*选择项不在~9之间重输*/

return(c);/*返回选择项,主程序根据该数调用相应的函数*/

}

/******主函数开始*******/

main()

{

intn=0;

STUDENTstudent[20];/*定义结构数组*/

//system("color5e");/*清屏*/

for(;;)/*无限循环*/

{

switch(menu_select())/*调用主菜单函数,返回值整数作开关语句的条件*/

{

case1:

n=Input(student,n);break;/*新建记录*/

case2:

print(student,n);break;/*显示全部记录*/

case3:

sort(student,n);break;/*排序*/

case4:

search(student,n);break;/*查找记录*/

case5:

n=insert(student,n);break;/*插入记录*/

case6:

n=delete1(student,n);break;/*删除记录*/

case7:

save(student,n);break;/*保存文件*/

case8:

n=load(student);break;/*读文件*/

case9:

count(student,n);break;/*统计*/

case10:

exit(0);/*程序结束*/

}

}

}

#include"sms_struct.h"

/*创建结构体数组,完成数据录入功能*/

intInput(STUDENT*stud,intn)

{

inti,j;

floats;

charsign;

i=0;

while(sign!

='n'&&sign!

='N')

{

printf("\n请按如下提示输入相关信息.\n\n");

printf("输入学号:

");

scanf("%s",stud[n+i].no);/*输入学号*/

printf("输入姓名:

");

scanf("%s",stud[n+i].name);/*输入姓名*/

printf("输入%d个成绩:

\n",N);/*提示开始输入成绩*/

s=0;/*计算每个学生的总分,初值为*/

for(j=0;j

{

do{

printf("score[%d]:

",j);/*提示输入第几门课程*/

scanf("%f",&stud[n+i].score[j]);/*输入成绩*/

/*确保成绩在~100之间*/

/*出错提示信息*/

}while(stud[n+i].score[j]>100||stud[n+i].score[j]<0);

s=s+stud[n+i].score[j];/*累加各门课程成绩*/

}

stud[n+i].sum=s;/*将总分保存*/

stud[n+i].average=(float)s/N;/*求出平均值*/

stud[n+i].order=0;/*未排序前此值为*/

printf("该学生的总分为:

%4.2f\n\t平均分为:

%4.2f\n",stud[n+i].sum,stud[n+i].average);

printf("=====>提示:

继续添加记录?

(Y/N)");

getchar();/*把键盘缓冲区中的前面输入的回车键给读掉,不然下面sign读到的是回车符*/

scanf("%c",&sign);

i++;

}

return(n+i);

}

#include"sms_struct.h"

/*显示模块*/

#include"stdio.h"

voidprint(STUDENT*stud,intn)

{

inti=0;/*统计记录条数*/

if(n==0)

{

printf("\n很遗憾,空表中没有任何记录可供显示!

\n");

}

else

{

printf("**********************************STUDENT****************************************\n");

printf("记录号 学号姓名科目1 科目2 科目3总分平均分名次\n");

printf("-----------------------------------------------------------------------------------\n");

while(i

{

printf("%-4d%-11s%-15s%5.2f%7.2f%7.2f%9.2f%6.2f%3d\n",i+1,stud[i].no,stud[i].name,stud[i].score[0],stud[i].score[1],

stud[i].score[2],stud[i].sum,stud[i].average,stud[i].order);

i++;

}

printf("***********************************************************************************\n\n");

}

}

#include"sms_struct.h"

#include"stdio.h"

voidswap(STUDENT*stud1,STUDENT*stud2)

{

inti;

chartemp1[15];

floattemp2;

floattemp3;

strcpy(temp1,stud1->no);strcpy(stud1->no,stud2->no);strcpy(stud2->no,temp1);

strcpy(temp1,stud1->name);strcpy(stud1->name,stud2->name);strcpy(stud2->name,temp1);

for(i=0;i<3;i++)

{

temp2=stud1->score[i];

stud1->score[i]=stud2->score[i];

stud2->score[i]=temp2;

}

temp3=stud1->sum;stud1->sum=stud2->sum;stud2->sum=temp3;

temp3=stud1->average;stud1->average=stud2->average;stud2->average=temp3;

}

/*排序模块,实现根据总分sum的值按降序排列*/

voidsort(STUDENT*stud,intn)

{

inti,j;

intmaxPosition;

for(i=0;i

{

maxPosition=i;

for(j=i+1;j

{

if(stud[j].sum>stud[maxPosition].sum)

{

maxPosition=j;

}

}

if(maxPosition!

=i)

{

swap(&stud[i],&stud[maxPosition]);

}

}

i=0;

while(i

{

stud[i].order=i+1;

i++;

}

printf("按总分从高到低排名成功!

!

!

\n");/*排序成功*/

}

#include"sms_struct.h"

/*查找记录模块*/

#include"stdio.h"

voidsearch(STUDENT*stud,intn)

{

inti=0;

chars[15];/*存放姓名的字符数组*/

printf("请输入您要查找的学生姓名:

\n");

scanf("%s",s);/*输入姓名*/

while(i

{

i++;

}

if(i==n)/**/

printf("\n您要查找的是%s,很遗憾,查无此人!

\n",s);

else/*显示找到的记录信息*/

{

printf("***********************************Found*****************************************\n");

printf("学号姓名科目1 科目2 科目3总分平均分名次\n");

printf("-----------------------------------------------------------------------------------\n");

printf("%-11s%-15s%5.2f%7.2f%7.2f%9.2f%6.2f%3d\n",stud[i].no,stud[i].name,stud[i].score[0],stud[i].score[1],

stud[i].score[2],stud[i].sum,stud[i].average,stud[i].order);

printf("***********************************************************************************\n");

}

}

#include"sms_struct.h"

/*在指定位置插入记录*/

#include"stdio.h"

intinsert(STUDENT*stud,intn)

{

inti=0,j;

floats;

intposition;

printf("请输入插入记录的位置:

\n");/*显示提示信息*/

scanf("%d",&position);/*输入插入记录的位置*/

while(position<0||position>n)

{

printf("输入位置有误,请重新输入插入记录的位置:

\n");/*显示提示信息*/

}

//将插入位置开始的所有记录向后移动

for(i=n-1;i>=position;i--)

{

strcpy(stud[i+1].no,stud[i].no);

strcpy(stud[i+1].name,stud[i].name);

stud[i+1].score[0]=stud[i].score[0];

stud[i+1].score[1]=stud[i].score[1];

stud[i+1].score[2]=stud[i].score[2];

stud[i+1].sum=stud[i].sum;

stud[i+1].average=stud[i].average;

stud[i+1].order=stud[i].order;

}

//录入记录并插入

i=position;

printf("\n请按如下提示输入相关信息.\n\n");

printf("输入学号:

");

scanf("%s",stud[i].no);/*输入学号*/

printf("输入姓名:

");

scanf("%s",stud[i].name);/*输入姓名*/

printf("输入%d个成绩:

\n",N);/*提示开始输入成绩*/

s=0;/*计算每个学生的总分,初值为*/

for(j=0;j

{

do{

printf("score[%d]:

",j);/*提示输入第几门课程*/

scanf("%f",&stud[i].score[j]);/*输入成绩*/

if(stud[i].score[j]>100||stud[i].score[j]<0)/*确保成绩在~100之间*/

printf("非法数据,请重新输入!

\n");/*出错提示信息*/

}while(stud[i].score[j]>100||stud[i].score[j]<0);

s=s+stud[i].score[j];/*累加各门课程成绩*/

}

stud[i].sum=s;/*将总分保存*/

stud[i].average=(float)s/N;/*求出平均值*/

stud[i].order=0;/*未排序前此值为*/

printf("\n已经在位置成功插入新记录!

\n",position);

returnn+1;

}

#include"sms_struct.h"

/*删除记录模块*/

#include"stdio.h"

intdelete1(STUDENT*stud,intn)

{

inti=0;

chark[5];/*定义字符串数组,用来确认删除信息*/

chars[15];/*存放学号*/

printf("请输入要删除学生的姓名:

\n");/*显示提示信息*/

scanf("%s",s);/*输入要删除记录的姓名*/

while(i

{

i++;

}

if(i==n)/**/

printf("\n您要删除的是%s,很遗憾,查无此人!

\n",s);

else/*显示找到的记录信息*/

{

printf("***********************************Found*****************************************\n");

printf("学号姓名科目1 科目2 科目3总分平均分名次\n");

printf("-----------------------------------------------------------------------------------\n");

printf("%-11s%-15s%5.2f%7.2f%7.2f%9.2f%6.2f%3d\n",stud[i].no,stud[i].name,stud[i].score[0],stud[i].score[1],

stud[i].score[2],stud[i].sum,stud[i].average,stud[i].order);

printf("***********************************************************************************\n");

do{

printf("您确实要删除此记录吗?

(y/n):

");

scanf("%s",k);

}while(k[0]!

='y'&&k[0]!

='n');

if(k[0]!

='n')/*删除确认判断*/

{

for(;i

{

strcpy(stud[i].no,stud[i+1].no);

strcpy(stud[i].name,stud[i+1].name);

stud[i].score[0]=stud[i+1].score[0];

stud[i].score[1]=stud[i+1].score[1];

stud[i].score[2]=stud[i+1].score[2];

stud[i].sum=stud[i+1].sum;

stud[i].average=stud[i+1].average;

stud[i].order=stud[i+1].order-1;

}

printf("\n已经成功删除姓名为%s的学生的记录!

\n",s);

}

}

returnn-1;

}

#include"sms_struct.h"

/*保存数据到文件模块*/

#include"stdio.h"

voidsave(STUDENT*stud,intn)

{

FILE*fp;/*定义指向文件的指针*/

inti=0;

charoutfile[20];/*保存输出文件名*/

printf("请输入导出文件名,例如:

G:

\\f1\\score.txt:

\n");

scanf("%s",outfile);

if((fp=fopen(outfile,"wb"))==NULL)/*为输出打开一个二进制文件,如没有则建立*/

{

printf("Cannotopenfile\n");

exit

(1);

}

while(i

{

fwrite(&stud[i],sizeof(STUDENT),1,fp);/*写入一条记录*/

i++;

}

fclose(fp);/*关闭文件*/

printf("-----所有记录已经成功保存至文件%s中!

-----\n",outfile);/*显示保存成功*/

}

#include"sms_struct.h"

/*导入信息模块*/

#include"stdio.h"

intload(STUDENT*stud)

{

inti;

FILE*fp;/*定义指向文件的指针*/

charinfile[20];/*保存文件名*/

printf("请输入导入文件名,例如:

G:

\\f1\\score.txt:

\n");

scanf("%s",infile);/*输入文件名*/

if((fp=fopen(infile,"rb"))==NULL)/*打开一个二进制文件,为读方式*/

{

printf("文件打开失败!

\n");

return0;

}

i=0;

while(!

feof(fp))/*循环读数据直到文件尾结束*/

{

if(1!

=fread(&stud[i],sizeof(STUDENT),1,fp))

break;/*如果没读到数据,跳出循环*/

i++;

}

fclose(fp);/*关闭文件*/

printf("已经成功从文件%s导入数据!

!

!

\n",infile);

returni;

}

#include"sms_struct.h"

#include"stdio.h"

voidcount(STUDENT*stud,intn)//统计区间内数据

{

inta,b,c,d=0;

inti=0;

intleap[50];

printf("请输入要查找的科目,例如:

1\n");

scanf("%d",&c);

printf("请输入要查找的区间,例如:

6070\n");

scanf("%d%d",&a,&b);

for(i=0;i

{

leap[i]=0;

if(stud[i].score[c-1]>=a&&stud[i].score[c-1]

{leap[i]=1;d++;}

}

printf("***********************************Found**************

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 求职职场 > 简历

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1