基于链表的学生信息管理系统实验报告Word文件下载.docx

上传人:b****6 文档编号:19296427 上传时间:2023-01-05 格式:DOCX 页数:14 大小:18.21KB
下载 相关 举报
基于链表的学生信息管理系统实验报告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

在函数中输入一个学生的信息,将该学生信息插入到链表中的相应位置,并保持此链表按学号的有序性。

(8)定义函数Delete_num:

从链表中删除指定学号的学生。

(9)定义函数Search_major_subject_score:

查找某个专业的、某门课程的成绩小于某个分数的学生,返回指向该学生结点的指针。

(10)定义函数Delete_major_subject:

从链表中删除某个专业的、某门课程的成绩小于某个分数的学生。

三、算法流程图

四、程序清单(关键语句和变量加注释)

#include<

stdio.h>

//预编译命令

stdlib.h>

string.h>

structstudent

{

intnum;

//学号

charname[15];

//姓名

charmajor[10];

//专业(computer,software,network)

intclassNo;

//班级(1-2)

intscore[3];

//3门课的成绩(0-2)

structstudent*next;

};

typedefstructstudentSTU;

//--------------------------------输入--------------------------------

STU*Input()

STU*p;

if((p=(STU*)malloc(sizeof(STU)))==NULL)

{printf("

头结点建立错误!

\n"

);

returnp;

}

printf("

请输入学生的学号:

"

scanf("

%d"

&

p->

num);

printf("

请输入学生的姓名:

%s"

p->

name);

请输入学生的专业:

scanf("

major);

请输入学生的班级:

classNo);

请输入学生的成绩0:

score[0]);

请输入学生的成绩1:

score[1]);

请输入学生的成绩2:

score[2]);

}

//--------------------------------建立链表------------------------------

STU*CreateList(intn)

structstudent*head,*p,*w;

inti=0;

\n请输入第%d个学生信息\n"

n);

p=Input();

while(i<

n)

{

i++;

if(i==1)

{

head=p;

//头结点有值

p->

next=NULL;

}

else

n-i+1);

w=Input();

head=w;

w->

next=p;

p=w;

returnhead;

//-------------------------------输出------------------------------

voidOutput(STU*p)

printf("

%d\t%s\t%s\t%d\t%d\t%d\t%d\n"

num,p->

name,p->

major,p->

classNo,p->

score[0],p->

score[1],p->

}

//-------------------------------输出所有---------------------------

voidprint(STU*head)

p=head;

if(head!

=NULL)

学号\t姓名\t专业\t班级\t成绩0\t成绩1\t成绩2\t\n"

while(p!

=NULL)

{

Output(p);

p=p->

next;

//--------------------------------储存--------------------------------

voidSave(STU*p)

FILE*fp;

charfilename[20];

\n请输入保存文件名:

gets(filename);

if((fp=fopen(filename,"

wb"

))==NULL)

cannotopenfile\n"

return;

if(p==NULL)

链表为空"

if((fwrite(p,sizeof(STU),1,fp))!

=1)

\nwritefileerror\n"

p=p->

fclose(fp);

//----------------------------------文件查找---------------------------------

STUFetch(intn)

structstudenttem;

\n请输入打开文件名:

fp=fopen(filename,"

rb"

fseek(fp,(long)(n*sizeof(STU)),0);

fread(&

tem,sizeof(STU),1,fp);

//读取

returntem;

//-----------------------------------查找学号-------------------------------

STU*Search_num(STU*head,intnumber)

if(head==NULL)

returnNULL;

while(head->

num!

=number)//跳过不符合条件的学号

if(head->

next==NULL)

returnNULL;

head=head->

//返回的指针名为head

//---------------------------------插入链表---------------------------------------

STU*InsertList(STU*head)

STU*p1,*p2,*stu;

p1=p2=head;

stu=(STU*)malloc(sizeof(STU));

//待插入的结点

\n请输入要插入的学生信息\n"

stu=Input();

if(head==NULL)//头结点为空

head=stu;

stu->

else

while(p1->

num<

stu->

num&

&

p1->

next!

=NULL)//跳过不符合的结点

{

p2=p1;

p1=p2->

if(p1->

num>

num)

if(p1==head)//插最前面

{

stu->

next=head;

head=stu;

}

else

next=p1;

p2->

next=stu;

p1->

//插最后面

//---------------------------------------学号删除-----------------------------

STU*Delete_num(STU*head,intnumber)

STU*p1,*p2;

if(head==NULL)//头结点为空

returnNULL;

p1=head;

while(p1->

=number)//跳过不符合的点

if(p1->

next==NULL)

p2=p1;

p1=p1->

if(p1==head)//删除学号是第一个的情况

head=p1->

else

p2->

next=p1->

free(p1);

//-------------------------------------查找专业课程成绩------------------------------------

STU*Search_major_subject_score(STU*head,char*major,intnumber,intscore)

if(head==NULL)

while(head!

if((strcmp(major,head->

major)==0)&

head->

score[number]<

score)

break;

else

head=head->

//--------------------------------------删除专业课程成绩--------------------------------------

STU*Delete_major_subject(STU*head,char*major,intnumber,intscore)

STU*p=NULL;

p=Search_major_subject_score(head,major,number,score);

//先查找

if(p==NULL)

returnp;

p=Delete_num(head,p->

//再删除

//---------------------------------------------主函数------------------------------------------

voidmain()

{

STU*Head=NULL;

intid,num,sco;

charfilename[10];

STU*p=NULL;

STUstu;

while

(1)

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

*欢迎使用学生成绩管理系统*\n"

1-建立有序的链表2-信息存盘\n"

3-从文件中随机读取某个学生的信息4-查找学号学生,返回该学生结点指针\n"

5-输入一个学生信息插入相应位置6-从链表中删除指定学号的学生\n"

7-查找某专业某课程成绩小于某分数的学生,返回指向该学生结点的指针\n"

8-删除某个专业的、某门课程的成绩小于某个分数的学生\n"

9-将学生信息表格化输出\n\n"

**********************输入相应编号运行系统*****************************\n"

%d"

id);

if((id<

1)||(id>

9))

break;

switch(id)

case1:

请输入学生数:

Head=CreateList(num);

case2:

if(Head==NULL)

printf("

链表未建立!

getchar();

Save(Head);

case3:

\n请问要读取第几位学生信息\n"

scanf("

getchar();

stu=Fetch(id);

Output(&

stu);

case4:

请输入要查找的学生的学号:

p=Search_num(Head,num);

if(p==NULL)

查找失败!

{printf("

Output(p);

case5:

Head=InsertList(Head);

case6:

if(Head==NULL)

请输入要删除的学生的学号:

p=Delete_num(Head,num);

if(p==NULL)

删除成员失败!

elseHead=p;

case7:

请输入学生的专业:

filename);

请输入成绩序号(0<

=n<

=2):

if(num<

0||num>

2)

成绩序号输入错误"

请输入分数:

sco);

p=Search_major_subject_score(Head,filename,num,sco);

if(p==NULL)

查找失败\n"

{printf("

Output(p);

case8:

if(num<

0||num>

2)

p=Delete_major_subject(Head,filename,num,sco);

删除失败\n"

Head=p;

case9:

print(Head);

default:

五、程序测试(输入、输出的截图及文件的内容)

六、实验总结(实验过程中遇到的具体问题,如何解决,不要说空话、套话,雷同扣分)

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

当前位置:首页 > 小学教育 > 其它课程

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

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