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

上传人:b****2 文档编号:1034624 上传时间:2023-04-30 格式:DOCX 页数:50 大小:1.15MB
下载 相关 举报
学生成绩管理系统链表版Word文件下载.docx_第1页
第1页 / 共50页
学生成绩管理系统链表版Word文件下载.docx_第2页
第2页 / 共50页
学生成绩管理系统链表版Word文件下载.docx_第3页
第3页 / 共50页
学生成绩管理系统链表版Word文件下载.docx_第4页
第4页 / 共50页
学生成绩管理系统链表版Word文件下载.docx_第5页
第5页 / 共50页
学生成绩管理系统链表版Word文件下载.docx_第6页
第6页 / 共50页
学生成绩管理系统链表版Word文件下载.docx_第7页
第7页 / 共50页
学生成绩管理系统链表版Word文件下载.docx_第8页
第8页 / 共50页
学生成绩管理系统链表版Word文件下载.docx_第9页
第9页 / 共50页
学生成绩管理系统链表版Word文件下载.docx_第10页
第10页 / 共50页
学生成绩管理系统链表版Word文件下载.docx_第11页
第11页 / 共50页
学生成绩管理系统链表版Word文件下载.docx_第12页
第12页 / 共50页
学生成绩管理系统链表版Word文件下载.docx_第13页
第13页 / 共50页
学生成绩管理系统链表版Word文件下载.docx_第14页
第14页 / 共50页
学生成绩管理系统链表版Word文件下载.docx_第15页
第15页 / 共50页
学生成绩管理系统链表版Word文件下载.docx_第16页
第16页 / 共50页
学生成绩管理系统链表版Word文件下载.docx_第17页
第17页 / 共50页
学生成绩管理系统链表版Word文件下载.docx_第18页
第18页 / 共50页
学生成绩管理系统链表版Word文件下载.docx_第19页
第19页 / 共50页
学生成绩管理系统链表版Word文件下载.docx_第20页
第20页 / 共50页
亲,该文档总共50页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

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

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

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

头文件:

#include"

stdio.h"

time.h"

string.h"

stdlib.h"

conio.h"

2.3系统的函数介绍

把系统中的每个函数的原型列出来,解释一下函数的返回值及形式参数的含义;

最后,再介绍一下每个函数的功能。

voidCreate(intn)//创建链表

voidList()//输出链表内容

voidlist()//输出链表所有内容

voidsave()//文件保存

voidsave1()//文件保存

voidread()//文件读取

voidread1()//文件读取

voidSAVE(){//保存到可浏览文件

voidSAVE1()//保存到可浏览文件

voidsort_data_copy(Lstu*p,Lstu*s)//交换排序时的值

voidsort()//对初始成绩进行排序

voidsort1()//对所有数据进行排序

voidsearch_print(Lstu*p)//输出查找信息

voidsearch_choose()//选择按分数段查找方式

voidsearch()//查找

voidmodify_choose(Lstu*p,intn)//选择修改方式

voidmodify()//按姓名修改

voidInsert()//按序号插入

voiddel()//按姓名删除

voidstatistics()//成绩统计

intmenu()//菜单(主界面)

第3章第3章详细设计

按函数,写出函数的原型声明,并画出每个函数的程序流程图。

3.1主函数设计

函数

3.2录入函数设计

添加的信息包括学号(不允许重复)、姓名(不允许重复)、语文成绩、数学成绩和英语成绩,如流程图所示:

本程序采用的是尾插法,就是每次将新申请的结点插在终端结点的后面,其执行过程如图所示。

尾插法建立单链表操作示意图

3.3排序函数设计

可按照学号、语文成绩、数学成绩、英语成绩和平均分分别排序。

如图所示:

3.4查找函数设计

按姓名、学号和分数段查找学生成绩的流程图分别如下图4.3所示。

图4.3按姓名查找学生成绩信息流程图

在单链表中,即使知道被访问结点的位置i,也不能像顺序表那样直接按序号访问,而只能从头指针出发,设置一个工作指针p,顺next域逐个结点往下搜索。

当p指向某个结点时判断是否为第i个结点,若是则查找成功;

否则,将工作指针p后移,即将p指向原来所指结点的后继结点。

直到p为NULL时查找失败。

单链表查找过程如图4.4所示。

图4.4单链表查找过程的示意图

按学号查询学生成绩信息同按姓名查找学生成绩信息,此处不再详细列出。

(3)学生成绩修改模块

3.5修改函数设计

首先要查找与要修改数据相匹配的信息,若没有则返回失败。

否则把相应的信息输出,然后再重新输入新的数据并保存到单链表。

3.6插入函数设计

首先要确定插入数据的位置,执行插入操作,然后再输入数据并保存到单链表。

3.7删除函数设计

当选择删除功能时,首先输入要删除的同学的姓名,然后输入要删除的同学的学号,如果该同学存在并且姓名与学号匹配的上,则进行删除操作,否则返回失败。

其流程图如下:

删除操作定义为将单链表的第i个结点删去。

因为在单链表中结点ai存储地址在其前驱结点ai-1的指针域,所以必须首先找到ai-1的存储地址p,然后令p的next域指向ai的后继结点,即把结点ai从链上摘下来,最后释放结点ai的存储空间,如图4.6所示。

在单链表中删除结点指针的变化情况

3.8保存函数设计

输入学生信息应保存到学生基本信息文件中,修改后的信息将可保存到可浏览的文件,如图所示:

3.9显示函数设计

从单链表表头遍历整个单链表,将所有数据输出。

其部分代码如下:

voidread(){//文件读取

FILE*fp;

Lstu*p,*p1;

if((fp=fopen("

初始值二进制.txt"

"

rb"

))==NULL)

{

printf("

Cannotopenthefile\n"

);

exit(0);

}head=(Lstu*)malloc(sizeof(Lstu));

p1=head;

while(!

feof(fp)){

p=(Lstu*)malloc(sizeof(Lstu));

if(fread(p,sizeof(Lstu),1,fp)==1)

p1->

next=p;

p1=p1->

next;

}

}head=head->

fclose(fp);

}

3.10退出函数设计

第4章第4章测试

主要进行功能性测试,即验证各个功能模块是否正确运行。

可以采用运行系统进行截图的方法来验证系统结果的正确性。

在完成了系统各方面的设计后,并不是可以运行就完成的,为了保证系统性能的稳定性跟安全性等,就要对系统做测试。

测试环境如下:

●硬件:

P4C2.4GHz,500GB硬盘,2内存;

●软件:

Windows7PersonalSP1,分辨率1366*768,MicrosoftVisualC++6.0。

运行的主界面如图所示:

1点击1输入学生相关信息,如图所示:

2浏览初始学生信息,如图所示:

3查看初始学生总分及平均分,如图所示:

4查找,如图所示:

按姓名查找:

5初始学生成绩排序,如图所示:

按平均成绩进行排序:

6插入新成绩,如图所示:

7按姓名修改某位学生的成绩,如图所示:

选择修改数学成绩:

8按姓名删除某位学生的成绩,如图所示:

9浏览所有学生的信息及排名,如图所示:

10保存最终结果到可浏览的文件中,如图所示:

⑾统计,如图所示:

总结

写这次实验课的收获和感想。

参考文献

附录程序源代码

//程序名称:

xsglxt.CPP

//程序功能:

采用链表与文件实现一个简单的学生成绩管理系统。

#defineNULL0

typedefstructLstu{

intcla,ID;

longnum;

charname[20];

charsex[20];

floatchinese,math,english;

floatsum,ave;

Lstu*next;

}Lstu;

Lstu*head;

voidCreate(intn){//创建链表

Lstu*p,*s;

inti;

for(i=0;

i<

n;

i++){

if(i==0){

p=(Lstu*)malloc(sizeof(Lstu));

printf("

请输入第%d个人的信息\n"

i+1);

请输入班级:

"

scanf("

%d"

&

p->

cla);

请输入学号:

%ld"

num);

请输入姓名:

%s"

p->

name);

请输入性别:

sex);

请输入语文成绩:

%f"

chinese);

请输入数学成绩:

math);

请输入英语成绩:

english);

p->

sum=p->

chinese+p->

math+p->

english;

ave=p->

sum/3;

head=p;

if(n==1){

p->

next=NULL;

}}

else{

s=(Lstu*)malloc(sizeof(Lstu));

s->

s->

s->

sum=s->

chinese+s->

math+s->

ave=s->

next=s;

p=s;

voidList(){//输出链表内容

Lstu*p;

inti=0;

p=head;

if(p==NULL){

Sorry,It'

saEmptyList\n"

printf("

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

\t%-5s%-5s%-10s%-8s%-7s%-10s%-10s%-10s\n"

序号"

班级"

学号"

姓名"

性别"

语文成绩"

数学成绩"

英语成绩"

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

while(p){i++;

ID=i;

\t%-4d%-5d%-7d%-8s%-7s%-10.2f%-10.2f%-10.2f\n"

ID,p->

cla,p->

num,p->

name,p->

sex,p->

chinese,p->

math,p->

p=p->

voidlist(){//输出链表所有内容

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

%-5s%-5s%-7s%-8s%-7s%-10s%-10s%-10s%-8s%-8s\n"

"

总分"

平均分"

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

%-4d%-6d%-12d%-8s%-7s%-10.2f%-10.2f%-10.2f%-8.2f%-8.2f\n"

sex,

english,p->

sum,p->

ave);

voidsave(){//文件保存

wb"

Cannotopenthefile"

while(p){

fwrite(p,sizeof(Lstu),1,fp);

fclose(fp);

voidsave1(){//文件保存

初始值二进制备用.txt"

voidread1(){//文件读取

voidSAVE(){//保存到可浏览文件

inti=0;

初始值可浏览文件.txt"

w+"

fprintf(fp,"

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

i++;

fprintf(fp,"

name,

voidSAVE1(){//保存到可浏览文件

charfilename[20];

请输入保存到可浏览文件的文件名:

scanf("

filename);

if((fp=fopen(filename,"

%-4d%-5d%-7d%-8s%-7s%-10.2f%-10.2f%-10.2f%-8.2f%-8.2f\n"

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

voidsort_data_copy(Lstu*p,Lstu*s){//交换排序时的值

intcla1;

cla1=p->

cla;

cla=s->

cla=cla1;

longnum1;

num1=p->

num;

num=s->

num=num1;

charname1[20];

strcpy(name1,p->

strcpy(p->

name,s->

strcpy(s->

name,name1);

charsex1[20];

strcpy(sex1,p->

sex,s->

sex,sex1);

floatchinese1;

chinese1=p->

chinese;

chinese=s->

chinese=chinese1;

floatmath1;

math1=p->

math;

math=s->

math=math1;

floatenglish1;

english1=p->

english=s->

english=english1;

floatsum1;

sum1=p->

sum;

sum=sum1;

floatave1;

ave1=p->

ave;

ave=ave1;

voidsort(){//对初始成绩进行排序

intn;

read();

p=head;

\n按Enter键继续\n"

a=getch();

else{while

(1){system("

cls"

printf("

\n排序前结果为:

\n"

read();

list();

\t*=*=*=*=*=*=*=*=*=*=*=按学号排序

(1)\n"

\t*=*=*=*=*=*=*=*=*=*=*=按语文成绩排序

(2)\n"

\t*=*=*=*=*=*=*=*=*=*=*=按数学成绩排序(3)\n"

\t*=*=*=*=*=*=*=*=*=*=*=按英语成绩排序(4)\n"

\t*=*=*=*=*=*=*=*=*=*=*=按平均分排序(5)\n"

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

当前位置:首页 > 考试认证 > 司法考试

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2