学生成绩管理系统Word文件下载.docx
- 文档编号:19429477
- 上传时间:2023-01-06
- 格式:DOCX
- 页数:21
- 大小:111.94KB
学生成绩管理系统Word文件下载.docx
《学生成绩管理系统Word文件下载.docx》由会员分享,可在线阅读,更多相关《学生成绩管理系统Word文件下载.docx(21页珍藏版)》请在冰豆网上搜索。
88
张辉灿
03
68
82
56
王露
04
56
45
77
陈东明
05
38
47
….
..
…
学生成绩信息文件2(2.txt),内容如下:
陈果
31
57
李华明
32
88
90
68
张明东
33
48
42
李明国
34
50
87
陈道亮
35
47
58
试编写一管理系统,要求如下:
1)
实现对两个文件数据进行合并,生成新文件3.txt
2)
抽取出三科成绩中有补考的学生并保存在一个新文件4.txt
3)
对合并后的文件3.txt中的数据按总分降序排序
4)
输入一个学生姓名后,能查找到此学生的信息并输出结果
5)
要求使用结构体,链或数组等实现上述要求.
…………………………
3.本设计所采用的数据结构
数据结构折半插入排序,直接排序,通过调用函数查找,从结构体数组中查找。
……………………….
4.功能模块详细设计
4.1详细设计思想
为了实现“学生成绩管理系统”,结合其设计要求及内容,有如下的详细设计思想。
为了达到要求所说的界面美观,大方,故决定将文件1.txt和文件2.txt中的内容清晰的显示在界面上,便于使用者跟直观可见的看到程序的执行流程。
首先,利用malloc函数在成绩文件的顶部申请空间,用于存放文件的标题。
之后并将标题保存到hxy中。
再次申请空间,有fscanf将文件的数据输入到文件中去。
运用printf将成绩文件1.txt和2.txt打印到屏幕上。
其次,新建一个文件3.txt。
利用while循环和fprintf将文件1.txt和文件2.txt存入文件3.txt中。
并将文件3.txt打印到屏幕上。
进行两种排序,即“直接插入排序”和“折半插入排序”。
再次,利用while循环和if语句,查找出需要补考的学生,将需要补考的学生(即成绩中有不及格成绩的学生)存入文件4.txt中,并打印到屏幕上。
最后,通过输入学生姓名,查找到所需要查找的学生。
各模块实现:
第一项:
合并文件1.txt和文件2.txt
#include<
stdio.h>
stdlib.h>
string.h>
charhxy[50];
//成绩文件顶部的标题用hxy保存
typedefstructstudent//单个学生成绩的记录
{
charname[10];
//姓名
intnumber;
//学号
intchinese;
//语文
intmath;
//数学
intenglish;
//英语
structstudent*next;
}student,*gradelist;
gradelistfileread(char*adress)//读取成绩文件
FILE*fp;
if((fp=fopen(adress,"
r"
))==NULL)//打开文件
{
printf("
文件打开出错"
);
exit(0);
}
gradelistfile=(student*)malloc(sizeof(student));
//申请空间
file->
next=NULL;
student*p=file;
//操作指针
intn=0;
//循环标记,具体作用是在第一次循环时方便处理标题
while(!
feof(fp))
if(n==0)
fgets(hxy,50,fp);
//处理标题,并且文件指针移到第二行
if(n==1)//申请空间
(p->
next)=(student*)malloc(sizeof(student));
p=p->
next;
p->
fscanf(fp,"
%s%d%d%d%d"
p->
name,&
p->
number,&
chinese,&
math,&
english);
//将文件的数据输入到链表中
n=1;
if(fclose(fp))//关闭文件
文件关闭失败"
returnfile;
}
voidFilePrint(gradelistfile)//将成绩文件打印到屏幕上
student*p=file;
%s\n"
hxy);
//打印标题
while(p->
next!
=NULL)
%6s%2d%d%d%d\n"
name,p->
number,p->
chinese,p->
math,p->
//循环打印
第二项:
生成新文件3.txt
voidmerger()//合并文件
char*address1="
1.txt"
*address2="
2.txt"
*address3="
3.txt"
;
gradelistfile1=fileread(address1),file2=fileread(address2);
FILE*fp;
if((fp=fopen("
"
w+"
))==NULL)//先新建一个3.txt,然后将1.txt和2.txt的内容输入到里面
合并成绩文档失败,原因:
建立文档出错"
student*p1=file1,*p2=file2;
fprintf(fp,"
%s"
//先输入标题
while(p1->
p1->
name,p1->
number,p1->
chinese,p1->
math,p1->
//将文件1.txt内容输入到文件3.txt中
p1=p1->
while(p2->
p2->
name,p2->
number,p2->
chinese,p2->
math,p2->
//输入2.txt内容输入到文件3.txt中
p2=p2->
if(fclose(fp))
第三项:
直接插入排序和折半插入排序
if(i==1)//直接插入排序
for(intk=2;
k<
=n;
++k)
if(L.r[k].totalgrade<
L.r[k-1].totalgrade)
L.r[0]=L.r[k];
L.r[k]=L.r[k-1];
for(intj=k-2;
L.r[0].totalgrade<
L.r[j].totalgrade;
--j)
L.r[j+1]=L.r[j];
L.r[j+1]=L.r[0];
if(i==2)//折半插入排序
intm;
intlow=1,high=k-1;
while(low<
=high)
m=(low+high)/2;
if(L.r[0].totalgrade<
L.r[m].totalgrade)
high=m-1;
else
low=m+1;
for(intj=k-1;
j>
=high+1;
L.r[high+1]=L.r[0];
for(intq=n;
q>
=1;
q--)//将排序好的内容输入到3.txt
L.r[q].name,L.r
[q].number,L.r[q].chinese,L.r[q].math,L.r[q].english);
第四项:
查找学生
voidsearch(char*name)//按姓名查找
gradelistfile=fileread("
if(strcmp(name,p->
name)==0)
chinese,p
->
return;
查无此人,请确定名字输入正确\n"
流程图:
……………………….
4.2核心代码
//(以下为建立结构体structstudent)
//将1.txt输入到文件3.txt中
//将2.txt输入到文件3.txt中
voidextract()//抽取补考的成绩记录
char*address4="
4.txt"
))==NULL)//新建文件4.txt
抽取补考学生成绩记录建立新文件失败"
gradelistfile3=fileread(address3);
student*p=file3;
if((p->
chinese)<
60||(p->
math)<
english)<
60)//补考条件
voidsort(inti)
char*address3="
//先将3.txt读入链表
if(remove("
))//删除3.txt
删除文件出错"
//学生个数
))==NULL)//新建一个空的3.txt
新建文件出错"
//标题输入
n++;
typedefstruct//新建一个结构数组
inttotalgrade;
}gradenote;
//成绩记录
typedefstruct
gradenoter[100];
//初始化了100了空间
}grade_list;
//待排序成绩表
grade_listL;
p=file3;
for(intt=1;
t<
t++,p=p->
next)//将链表的内容复制到结构数组里
strcpy(L.r[t].name,p->
name);
L.r[t].number=p->
number;
L.r[t].chinese=p->
chinese;
L.r[t].math=p->
math;
L.r[t].english=p->
english;
L.r[t].totalgrade=p->
chinese+p->
math+p->
if(i==1)//直接插入排序
voidsearch(char*name)//按姓名查找学生
voidmain(void)
intchioce;
gradelistfile1=fileread("
),file2=fileread("
现有成绩记录文件1\n"
*********************************************************\n"
FilePrint(file1);
现有成绩记录文件2\n"
FilePrint(file2);
第一步,合并成绩记录文件\n"
merger();
合并成功\n"
system("
PAUSE"
现有合并后的成绩记录文件3\n"
gradelistfile3=fileread("
FilePrint(file3);
第二步,抽取补考成绩记录\n"
extract();
现有补考成绩记录文件4\n"
*********************************
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 学生 成绩管理系统
![提示](https://static.bdocx.com/images/bang_tan.gif)