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

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

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

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

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

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"

*********************************

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

当前位置:首页 > 工程科技 > 能源化工

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

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