基于链表的学生信息管理系统实验报告.docx

上传人:b****3 文档编号:5703775 上传时间:2023-05-09 格式:DOCX 页数:17 大小:18.12KB
下载 相关 举报
基于链表的学生信息管理系统实验报告.docx_第1页
第1页 / 共17页
基于链表的学生信息管理系统实验报告.docx_第2页
第2页 / 共17页
基于链表的学生信息管理系统实验报告.docx_第3页
第3页 / 共17页
基于链表的学生信息管理系统实验报告.docx_第4页
第4页 / 共17页
基于链表的学生信息管理系统实验报告.docx_第5页
第5页 / 共17页
基于链表的学生信息管理系统实验报告.docx_第6页
第6页 / 共17页
基于链表的学生信息管理系统实验报告.docx_第7页
第7页 / 共17页
基于链表的学生信息管理系统实验报告.docx_第8页
第8页 / 共17页
基于链表的学生信息管理系统实验报告.docx_第9页
第9页 / 共17页
基于链表的学生信息管理系统实验报告.docx_第10页
第10页 / 共17页
基于链表的学生信息管理系统实验报告.docx_第11页
第11页 / 共17页
基于链表的学生信息管理系统实验报告.docx_第12页
第12页 / 共17页
基于链表的学生信息管理系统实验报告.docx_第13页
第13页 / 共17页
基于链表的学生信息管理系统实验报告.docx_第14页
第14页 / 共17页
基于链表的学生信息管理系统实验报告.docx_第15页
第15页 / 共17页
基于链表的学生信息管理系统实验报告.docx_第16页
第16页 / 共17页
基于链表的学生信息管理系统实验报告.docx_第17页
第17页 / 共17页
亲,该文档总共17页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

基于链表的学生信息管理系统实验报告.docx

《基于链表的学生信息管理系统实验报告.docx》由会员分享,可在线阅读,更多相关《基于链表的学生信息管理系统实验报告.docx(17页珍藏版)》请在冰点文库上搜索。

基于链表的学生信息管理系统实验报告.docx

基于链表的学生信息管理系统实验报告

《C语言程序设计实训2》报告

设计题目:

基于链表的学生信息管理系统

学院名称:

信息科学技术学院

专业:

软件工程

班级:

x班

姓名:

xxx学号xxx

提交日期:

2014年6月

一、实验内容

编写并调试程序,实现学校各专业班级学生信息的管理。

定义学生信息的链表结点类型,包括:

学号、姓名、班级、专业、3门成绩。

二、实验要求

(1)main函数:

以菜单形式将各项功能提供给用户,根据用户的选择,调用相应的函数。

(2)定义函数CreateList:

按学号由小到大,建立有序的链表。

逆序输入n个学生信息(调用n次input),学号大的先输入,建立带头结点的单链表。

(3)定义函数Output:

以指向某个学生结点的指针为参数,将学生信息表格化输出。

(4)定义函数Save:

将某个学生信息存入文件。

(5)定义函数Fetch:

从文件中随机读取某个学生的信息。

(6)定义函数Search_num:

查找指定学号的学生,返回指向该学生结点的指针。

(7)定义函数InsertList:

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

(8)定义函数Delete_num:

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

(9)定义函数Search_major_subject_score:

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

(10)定义函数Delete_major_subject:

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

三、算法流程图

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

#include<>//预编译命令

#include<>

#include<>

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("请输入学生的姓名:

");

scanf("%s",p->name);

printf("请输入学生的专业:

");

scanf("%s",p->major);

printf("请输入学生的班级:

");

scanf("%d",&p->classNo);

printf("请输入学生的成绩0:

");

scanf("%d",&p->score[0]);

printf("请输入学生的成绩1:

");

scanf("%d",&p->score[1]);

printf("请输入学生的成绩2:

");

scanf("%d",&p->score[2]);

returnp;

}

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

STU*CreateList(intn)

{

structstudent*head,*p,*w;

inti=0;

printf("\n请输入第%d个学生信息\n",n);

p=Input();

while(i

{

i++;

if(i==1)

{

head=p;//头结点有值

p->next=NULL;

}

else

{

printf("\n请输入第%d个学生信息\n",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",p->num,p->name,p->major,p->classNo,p->score[0],p->score[1],p->score[2]);

}

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

voidprint(STU*head)

{

STU*p;

p=head;

if(head!

=NULL)

printf("学号\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];

printf("\n请输入保存文件名:

\n");

gets(filename);

if((fp=fopen(filename,"wb"))==NULL)

{

printf("cannotopenfile\n");

return;

}

if(p==NULL)

printf("链表为空");

while(p!

=NULL)

{

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

=1)

printf("\nwritefileerror\n");

p=p->next;

}

fclose(fp);

}

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

STUFetch(intn)

{

FILE*fp;

structstudenttem;

charfilename[20];

printf("\n请输入打开文件名:

\n");

gets(filename);

fp=fopen(filename,"rb");

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

fread(&tem,sizeof(STU),1,fp);//读取

fclose(fp);

returntem;

}

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

STU*Search_num(STU*head,intnumber)

{

if(head==NULL)

returnNULL;

while(head->num!

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

{

if(head->next==NULL)

returnNULL;

head=head->next;

}

returnhead;//返回的指针名为head

}

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

STU*InsertList(STU*head)

{

STU*p1,*p2,*stu;

p1=p2=head;

stu=(STU*)malloc(sizeof(STU));//待插入的结点

printf("\n请输入要插入的学生信息\n");

stu=Input();

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

{

head=stu;

stu->next=NULL;

}

else

{

while(p1->numnum&&p1->next!

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

{

p2=p1;

p1=p2->next;

}

if(p1->num>stu->num)

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

{

stu->next=head;

head=stu;

}

else

{

stu->next=p1;

p2->next=stu;

}

else

{

p1->next=stu;//插最后面

stu->next=NULL;

}

}

returnhead;

}

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

STU*Delete_num(STU*head,intnumber)

{

STU*p1,*p2;

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

returnNULL;

p1=head;

while(p1->num!

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

{

if(p1->next==NULL)

returnNULL;

p2=p1;

p1=p1->next;

}

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

head=p1->next;

else

p2->next=p1->next;

free(p1);

returnhead;

}

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

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

{

if(head==NULL)

returnNULL;

while(head!

=NULL)

if((strcmp(major,head->major)==0)&&head->score[number]

break;

else

head=head->next;

returnhead;

}

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

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;

else

p=Delete_num(head,p->num);//再删除

returnp;

}

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

voidmain()

{

STU*Head=NULL;

intid,num,sco;

charfilename[10];

STU*p=NULL;

STUstu;

while

(1)

{

printf("***********************************************************************\n");

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

printf("***********************************************************************\n");

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

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

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

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

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

printf("9-将学生信息表格化输出\n\n");

printf("**********************输入相应编号运行系统*****************************\n");

scanf("%d",&id);

if((id<1)||(id>9))

break;

switch(id)

{

case1:

{

printf("请输入学生数:

");

scanf("%d",&num);

Head=CreateList(num);

break;

}

case2:

{

if(Head==NULL)

{

printf("链表未建立!

\n");

break;

}

getchar();

Save(Head);

break;

}

case3:

{

printf("\n请问要读取第几位学生信息\n");

scanf("%d",&id);

getchar();

stu=Fetch(id);

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

Output(&stu);

break;

}

case4:

{

if(Head==NULL)

{

printf("链表未建立!

\n");

break;

}

printf("请输入要查找的学生的学号:

");

scanf("%d",&num);

p=Search_num(Head,num);

if(p==NULL)

printf("查找失败!

\n");

else

{printf("学号\t姓名\t专业\t班级\t成绩0\t成绩1\t成绩2\t\n");

Output(p);}

break;

}

case5:

{

Head=InsertList(Head);

break;

}

case6:

{

if(Head==NULL)

{

printf("链表未建立!

\n");

break;

}

printf("请输入要删除的学生的学号:

");

scanf("%d",&num);

p=Delete_num(Head,num);

if(p==NULL)

printf("删除成员失败!

\n");

elseHead=p;

break;

}

case7:

{

if(Head==NULL)

{

printf("链表未建立!

\n");

break;

}

printf("请输入学生的专业:

");

scanf("%s",filename);

printf("请输入成绩序号(0<=n<=2):

");

scanf("%d",&num);

if(num<0||num>2)

{

printf("成绩序号输入错误");

break;

}

printf("请输入分数:

");

scanf("%d",&sco);

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

if(p==NULL)

printf("查找失败\n");

else

{printf("学号\t姓名\t专业\t班级\t成绩0\t成绩1\t成绩2\t\n");

Output(p);

}

break;

}

case8:

{

if(Head==NULL)

{

printf("链表未建立!

\n");

break;

}

printf("请输入学生的专业:

");

scanf("%s",filename);

printf("请输入成绩序号(0<=n<=2):

");

scanf("%d",&num);

if(num<0||num>2)

{

printf("成绩序号输入错误");

break;

}

printf("请输入分数:

");

scanf("%d",&sco);

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

if(p==NULL)

printf("删除失败\n");

else

Head=p;

break;

}

case9:

{

if(Head==NULL)

{

printf("链表未建立!

\n");

break;

}

print(Head);

break;

}

default:

{

break;

}

}

}

}

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

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

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

当前位置:首页 > IT计算机 > 电脑基础知识

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

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