成绩管理系统Word文件下载.docx

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

成绩管理系统Word文件下载.docx

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

成绩管理系统Word文件下载.docx

voidcount(STUDENT*stud,intn);

//统计

#endif

#include"

sms_struct.h"

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

stdio.h"

intmenu_select()

{

chars[3];

intc;

printf("

\n***************主菜单**************\n"

);

1.输入记录\n"

2.显示所有记录\n"

3.对所有记录进行排序\n"

4.按姓名查找记录并显示\n"

5.插入记录\n"

6.删除记录\n"

7.将所有记录保存到文件\n"

8.从文件中读入所有记录\n"

9.统计区间内成绩\n"

10.退出\n"

***********************************\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);

/*显示全部记录*/

case3:

sort(student,n);

/*排序*/

case4:

search(student,n);

/*查找记录*/

case5:

n=insert(student,n);

/*插入记录*/

case6:

n=delete1(student,n);

/*删除记录*/

case7:

save(student,n);

/*保存文件*/

case8:

n=load(student);

/*读文件*/

case9:

count(student,n);

/*统计*/

case10:

exit(0);

/*程序结束*/

}

}

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

intInput(STUDENT*stud,intn)

inti,j;

floats;

charsign;

i=0;

while(sign!

='

n'

&

sign!

N'

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

输入学号:

stud[n+i].no);

/*输入学号*/

输入姓名:

stud[n+i].name);

/*输入姓名*/

输入%d个成绩:

\n"

N);

/*提示开始输入成绩*/

s=0;

/*计算每个学生的总分,初值为*/

for(j=0;

j<

N;

j++)/*N门课程循环N次*/

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;

/*未排序前此值为*/

该学生的总分为:

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

%4.2f\n"

stud[n+i].sum,stud[n+i].average);

=====>

提示:

继续添加记录?

(Y/N)"

getchar();

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

%c"

sign);

i++;

}

return(n+i);

/*显示模块*/

voidprint(STUDENT*stud,intn)

inti=0;

/*统计记录条数*/

if(n==0)

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

else

**********************************STUDENT****************************************\n"

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

-----------------------------------------------------------------------------------\n"

while(i<

n)

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++;

***********************************************************************************\n\n"

voidswap(STUDENT*stud1,STUDENT*stud2)

inti;

chartemp1[15];

floattemp2;

floattemp3;

strcpy(temp1,stud1->

no);

strcpy(stud1->

no,stud2->

strcpy(stud2->

no,temp1);

name);

name,stud2->

name,temp1);

for(i=0;

i<

3;

i++)

temp2=stud1->

score[i];

stud1->

score[i]=stud2->

stud2->

score[i]=temp2;

temp3=stud1->

sum;

stud1->

sum=stud2->

stud2->

sum=temp3;

average;

average=stud2->

average=temp3;

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

voidsort(STUDENT*stud,intn)

intmaxPosition;

n-1;

i++)

maxPosition=i;

for(j=i+1;

n;

j++)

if(stud[j].sum>

stud[maxPosition].sum)

{

maxPosition=j;

}

if(maxPosition!

=i)

swap(&

stud[i],&

stud[maxPosition]);

while(i<

stud[i].order=i+1;

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

!

/*排序成功*/

/*查找记录模块*/

voidsearch(STUDENT*stud,intn)

chars[15];

/*存放姓名的字符数组*/

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

scanf("

n&

strcmp(stud[i].name,s))

if(i==n)/**/

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

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

***********************************Found*****************************************\n"

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

%-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);

***********************************************************************************\n"

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

intinsert(STUDENT*stud,intn)

inti=0,j;

intposition;

请输入插入记录的位置:

/*显示提示信息*/

%d"

position);

/*输入插入记录的位置*/

while(position<

0||position>

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

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

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;

stud[i].no);

stud[i].name);

s=0;

for(j=0;

do{

scanf("

stud[i].score[j]);

if(stud[i].score[j]>

100||stud[i].score[j]<

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

非法数据,请重新输入!

/*出错提示信息*/

}while(stud[i].score[j]>

s=s+stud[i].score[j];

stud[i].sum=s;

stud[i].average=(float)s/N;

stud[i].order=0;

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

position);

returnn+1;

/*删除记录模块*/

intdelete1(STUDENT*stud,intn)

chark[5];

/*定义字符串数组,用来确认删除信息*/

/*存放学号*/

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

/*输入要删除记录的姓名*/

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

您确实要删除此记录吗?

(y/n):

k);

}while(k[0]!

y'

k[0]!

if(k[0]!

)/*删除确认判断*/

for(;

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;

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

returnn-1;

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

voidsave(STUDENT*stud,intn)

FILE*fp;

/*定义指向文件的指针*/

charoutfile[20];

/*保存输出文件名*/

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

G:

\\f1\\score.txt:

outfile);

if((fp=fopen(outfile,"

wb"

))==NULL)/*为输出打开一个二进制文件,如没有则建立*/

Cannotopenfile\n"

exit

(1);

n)

fwrite(&

stud[i],sizeof(STUDENT),1,fp);

/*写入一条记录*/

i++;

fclose(fp);

/*关闭文件*/

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

-----\n"

/*显示保存成功*/

/*导入信息模块*/

intload(STUDENT*stud)

/*定义指向文件的指针*/

charinfile[20];

/*保存文件名*/

请输入导入文件名,例如:

infile);

/*输入文件名*/

if((fp=fopen(infile,"

rb"

))==NULL)/*打开一个二进制文件,为读方式*/

文件打开失败!

return0;

while(!

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

if(1!

=fread(&

stud[i],sizeof(STUDENT),1,fp))

break;

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

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

returni;

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

inta,b,c,d=0;

intleap[50];

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

1\n"

c);

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

6070\n"

%d%d"

a,&

b);

leap[i]=0;

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

=a&

stud[i].score[c-1]<

b)

{leap[i]=1;

d++;

***********************************Found**************

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

当前位置:首页 > 小学教育 > 数学

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

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