学生成绩管理系统15287Word下载.docx
- 文档编号:18594152
- 上传时间:2022-12-28
- 格式:DOCX
- 页数:40
- 大小:406.20KB
学生成绩管理系统15287Word下载.docx
《学生成绩管理系统15287Word下载.docx》由会员分享,可在线阅读,更多相关《学生成绩管理系统15287Word下载.docx(40页珍藏版)》请在冰豆网上搜索。
05
38
47
….
..
..
…
学生成绩信息文件2(2.txt),内容如下:
学号
语文
数学
英语
陈果
31
57
李华明
32
88
90
68
张明东
33
48
42
56
李明国
34
50
87
陈道亮
35
47
58
….
试编写一管理系统,要求如下:
1)实现对两个文件数据进行合并,生成新文件3.txt。
2)抽取出三科成绩中有补考的学生并保存在一个新文件4.txt。
3)合并后的文件3.txt中的数据按总分降序排序(至少采用两种排序方法实现)。
4)输入一个学生姓名后,能查找到此学生的信息并输出结果(至少采用两种查找方法实现)。
5)要求使用结构体,链或数组等实现上述要求。
6)采用多种方法且算法正确者,可适当加分。
二、需求分析
本系统要求实现具体的五项功能,根据提供的这五项功能,运行时系统提供了相应的功能菜单,选择不同的选项来实现相应的功能。
1.采用了读文件和写文件的方式,边读边写,合并两个文件成为一个文件。
2.采用结构体数组存入从文件中读入的数据,再通过对于数据中的相关成绩判断该学生是否需要补考,如果需要补考则将其信息写入另外一个文件。
3.采用快速排序、选择排序、冒泡排序的方法按总分对学生数据进行排序。
4.采用了二种查找的方法找到学生信息并输出。
5.通过调用函数exit(0)退出程序。
三、概要设计
1、实现对文件1.txt和文件2.txt数据进行合并,生成新文件3.txt。
调用函数Unitedfile()来实现,函数以读的方式打开1.txt文件,以写的方式打开3.txt文件,从1.txt读入一个数据并写入3.txt文件,直到遇到1.txt文件结束。
关闭1.txt文件,再以读的方式打开2.txt文件,用上述方式直到遇到2.txt文件结束。
关闭2.txt,3.txt文件。
实现对于文件的合并。
2、抽取出三科成绩中有补考的学生并保存在一个新文件4.txt。
调用函数findout()来实现。
函数以读的方式打开3.txt文件,以写的方式打开4.txt文件。
读入3.txt文件的一个数据到结构体stud中,判断学生信息中语文、数学和英语成绩中是否有不及格的,如果有,则将数据写入4.txt中,直至遇到3.txt文件结束。
3、对合并后的文件3.txt中的数据按总分降序排序。
调用函数sortfile()来实现。
函数提供了三种排序方法,通过调用函数kuaisu()来实现快速排序,通过调用函数xuanze()来实现选择排序,通过调用函数maopao()来实现冒泡排序。
4、输入一个学生姓名后,能查找到此学生的信息并输出结果。
调用函数findoutstudent()来实现。
函数也提供了两种查找方法:
(1)通过调用函数derectfindoutstudent()实现从文件从3.txt中逐个读入数据,再进行查找判断,如果找到所需要的数据,则查找结束,否则继续查找直至文件结束。
(2)autofindoutstudent()在进行第三步的过程中,已经把3.txt中的学生数据读入了结构体数组当中,调用函autofindoutstudent()直接从结构体中进行查找。
5、通过调用函数exit()退出。
main
findout()
sortfile()
findoutstudent()
exit()
Unitedfile()
Kuaisu()
Maopao()
Xuanzhe()
derectfindoutstudent()
autofindoutstudent()
四、详细设计
1.把1.txt和2.txt文件中的内容放到3.txt文件中。
调用Unitedfile()文件,打开文件1和文件3,从1.txt中读入学生数据进结构体,把结构体中学生数据放到文件3中。
关闭文件1,从2.txt中读入学生数据进结构体,把结构体中学生数据放到文件3中。
关闭文件2和文件3。
voidUnitedfile(){
FILE*fp,*p;
Studentstud;
fp=fopen("
d:
\\1.txt"
"
r"
);
p=fopen("
\\3.txt"
w"
while(fscanf(fp,"
%s%s%d%d%d"
stud.name,stud.id,&
stud.chinese,&
stud.math,&
stud.english)!
=EOF)
{fprintf(p,"
%-6s%-6s%-6d%-6d%-6d\n"
stud.name,stud.id,stud.chinese,stud.math,stud.english);
}
fclose(fp);
\\2.txt"
fclose(p);
}
2.抽取出三科成绩中有分数低于60分的学生并保存在一个新文件4.txt
从3.txt中读入学生数据进结构体,判断是否有不及格的课程,如果有,则写入文件4.txt中
voidfindout(){
\\4.txt"
{if(stud.chinese<
60||stud.english<
60||stud.math<
60)
{fprintf(p,"
}
3.对文件3.txt中的数据按总分以降序进行排序(三种方法:
选择排序、快速排序、冒泡排序)
voidsortfile()
{charc;
cout<
<
"
请选择排序方法:
endl;
1.选择排序"
2.快速排序"
3.冒泡排序"
cin>
>
c;
switch(c)
{case'
1'
:
xuanze();
//选择排序
break;
case'
2'
kuaisu();
//快速排序
case'
3'
maopao();
//直接插入排序
}}
3.1选择排序
voidxuanze()
{intj,k,max1,sum1,sum2,q;
i=0;
Studenttemp;
FILE*fp;
stud[i].name,stud[i].id,&
stud[i].chinese,&
stud[i].math,&
stud[i].english)!
{i++;
}fclose(fp);
for(j=0;
j<
i;
j++)
stud[j].sum=stud[j].chinese+stud[j].math+stud[j].english;
i-1;
j++)//对结构体数组中的数据进行选择排序
{max1=j;
sum1=stud[j].sum;
for(k=j+1;
k<
k++)
{
sum2=stud[k].sum;
if(sum1<
sum2)
{max1=k;
sum1=sum2;
}
}
if(max1!
=j)
temp=stud[max1];
stud[max1]=stud[j];
stud[j]=temp;
stud[j].sum=sum1;
//将排序后的数据写入3.txt中
for(q=0;
q<
q++)
{fprintf(fp,"
%-8s%-8s%-8d%-8d%-8d%-8d\n"
stud[q].name,stud[q].id,stud[q].chinese,stud[q].math,stud[q].english,stud[q].sum);
3.2快速排序
voidkuaisu()
{inti,low,high;
{stud[i].sum=stud[i].chinese+stud[i].math+stud[i].english;
i++;
low=0;
high=i-1;
QSort(low,high);
for(intj=0;
stud[j].name,stud[j].id,stud[j].chinese,stud[j].math,stud[j].english,stud[j].sum);
3.3冒泡排序
voidmaopao()
{intj,k,q;
}intn=i;
for(i=0;
i<
n-1;
i++)
{k=i;
for(j=i+1;
n;
{if(stud[j].sum>
stud[k].sum)
k=j;
temp=stud[i];
stud[i]=stud[k];
stud[k]=temp;
fp=fopen("
{
fprintf(fp,"
4.输入一个学生姓名后,能查找到此学生的信息并输出结果。
(1、从文件3中直接查找;
2、在运行第三步的基本上查找)
voidfindoutstudent()//提供两种查找方法
请选择查找方法"
1.从文件3中直接查找"
2.在运行第三步的基础上查找"
请输入学生姓名:
;
if(sign1==0&
&
c=='
)
{cout<
请执行操作3后再执行此项操作!
return;
derectfindoutstudent();
//从文件3中直接查找
autofindoutstudent();
//从结构体数据中直接查找
4.1从文件3中直接查找
voidderectfindoutstudent(){
charNAME[30];
intflag=0;
NAME;
%s%s%d%d%d%d"
stud[1].name,stud[1].id,&
stud[1].chinese,&
stud[1].math,&
stud[1].english,&
stud[1].sum)!
{if(strcmp(stud[1].name,NAME)==0)
{flag=1;
cout<
*******姓名*******学号*******语文*******数学*******英语*******总分*******"
"
stud[1].name<
stud[1].id<
stud[1].chinese<
stud[1].math<
stud[1].english<
stud[1].sum<
break;
if(flag==0)
cout<
无此学生相关信息"
4.2在运行第三步的基础上查找
voidautofindoutstudent()//从结构体数组中查找
{intn,flag=0,k;
charName[30];
{i++;
}n=i-1;
Name;
for(k=1;
=n;
{if(strcmp(stud[k].name,Name)==0)
flag=1;
cout<
stud[k].name<
stud[k].id<
stud[k].chinese<
stud[k].math<
stud[k].english<
stud[k].sum<
五、程序代码
#include<
iostream>
usingnamespacestd;
#defineSIZE100
typedefstruct
{
charname[8];
charid[2];
intchinese;
intmath;
intenglish;
intsum;
}Student;
Studentstud[SIZE];
inti;
intsign=0,sign1=0,sign2=0,sign3=0;
voidUnitedfile()
{FILE*fp,*p;
//以读的方式打开1.txt
//以写的方式打开3.txt
}//读取1.txt的数据进入结构体中,写入3.txt,继续读取直结束
//关闭文件1.txt
//以写的方式打开2.txt
fprintf(p,"
voidxuanze()//对合并后的文件3.txt中的数据按总分降序排序
intj,k,max1,sum1,sum2,q;
}//从3.txt中读入数据进结构体数组stud中
{sum2=stud[k].sum;
{temp=stud[max1];
intn=i;
k=i;
if(stud[j].sum>
for(
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 学生 成绩管理系统 15287