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

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
printf("**********************输入相应编号运行系统*****************************\n");
scanf("%d",&id);
if((id<1)||(id>9))
break;
break;
else
head=head->next;
returnhead;
}
//--------------------------------------删除专业课程成绩--------------------------------------
STU*Delete_major_subject(STU*head,char*major,intnumber,intscore)
printf("请输入学生的专业:");
scanf("%s",p->major);
printf("请输入学生的班级:");
scanf("%d",&p->classNo);
printf("请输入学生的成绩0:");
scanf("%d",&p->score[0]);
printf("请输入学生的成绩1:");
{
structstudent*head,*p,*w;
inti=0;
printf("\n请输入第%d个学生信息\n",n);
p=Input();
while(i<n)
{
i++;
if(i==1)
{
head=p;//头结点有值
p->next=NULL;
}
else
{
printf("\n请输入第%d个学生信息\n",n-i+1);
(1)main函数:以菜单形式将各项功能提供给用户,根据用户的选择,调用相应的函数。
(2)定义函数CreateList:按学号由小到大,建立有序的链表。逆序输入n个学生信息(调用n次input),学号大的先输入,建立带头结点的单链表。
(3)定义函数Output:以指向某个学生结点的指针为参数,将学生信息表格化输出。
scanf("%d",&p->score[1]);
printf("请输入学生的成绩2:");
scanf("%d",&p->score[2]);
returnp;
}
//--------------------------------建立链表------------------------------
STU*CreateList(intn)
while(p!=NULL)
{
Output(p);
p=p->next;
}
}
//--------------------------------储存--------------------------------
voidSave(STU*p)
{
FILE*fp;
charfilename[20];
printf("\n请输入保存文件名:\n");
intclassNo;//班级(1-2)
intscore[3];//3门课的成绩(0-2)
structstudent*next;
};
typedefstructstudentSTU;
//--------------------------------输入--------------------------------
voidmain()
{
STU*Head=NULL;
intid,num,sco;
charfilename[10];
STU*p=NULL;
STUstu;
while(1)
{
printf("***********************************************************************\n");
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("5-输入一个学生信息插入相应位置6-从链表中删除指定学号的学生\n");
printf("7-查找某专业某课程成绩小于某分数的学生,返回指向该学生结点的指针\n");
printf("8-删除某个专业的、某门课程的成绩小于某个分数的学生\n");
printf("9-将学生信息表格化输出\n\n");
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;
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)
head=stu;
stu->next=NULL;
}
else
{
while(p1->num<stu->num&&p1->next!=NULL)//跳过不符合的结点
{
p2=p1;
p1=p2->next;
}
if(p1->num>stu->num)
if(p1==head)//插最前面
{
stu->next=head;
w=Input();
head=w;
w->next=p;
p=w;
}Hale Waihona Puke }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]);
三、算法流程图
四、程序清单(关键语句和变量加注释)
#include<stdio.h>//预编译命令
#include<stdlib.h>
#include<string.h>
structstudent
{
intnum;//学号
charname[15];//姓名
charmajor[10];//专业(computer,software,network)
}
//-------------------------------输出所有---------------------------
voidprint(STU*head)
{
STU*p;
p=head;
if(head!=NULL)
printf("学号\t姓名\t专业\t班级\t成绩0\t成绩1\t成绩2\t\n");
printf("*欢迎使用学生成绩管理系统*\n");
printf("***********************************************************************\n");
printf("1-建立有序的链表2-信息存盘\n");
printf("3-从文件中随机读取某个学生的信息4-查找学号学生,返回该学生结点指针\n");
p1=p1->next;
}
if(p1==head)//删除学号是第一个的情况
head=p1->next;
else
p2->next=p1->next;
free(p1);
returnhead;
}
//-------------------------------------查找专业课程成绩------------------------------------
returntem;
}
//-----------------------------------查找学号-------------------------------
STU*Search_num(STU*head,intnumber)
{
if(head==NULL)
returnNULL;
while(head->num!=number)//跳过不符合条件的学号
STU*InsertList(STU*head)
{
STU*p1,*p2,*stu;
p1=p2=head;
stu=(STU*)malloc(sizeof(STU));//待插入的结点
printf("\n请输入要插入的学生信息\n");
stu=Input();
if(head==NULL)//头结点为空
{
{
if(head->next==NULL)
returnNULL;
head=head->next;
}
returnhead;//返回的指针名为head
}
//---------------------------------插入链表---------------------------------------
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);
printf("\nwritefileerror\n");
p=p->next;
}
fclose(fp);
}
//----------------------------------文件查找---------------------------------
STUFetch(intn)
{
FILE*fp;
structstudenttem;
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]<score)
《C语言程序设计实训2》报告
设计题目:基于链表的学生信息管理系统
学院名称:信息科学技术学院
专业:软件工程
班级:x班
姓名:xxx学号xxx
提交日期:2014年6月
一、实验内容
编写并调试程序,实现学校各专业班级学生信息的管理。定义学生信息的链表结点类型,包括:学号、姓名、班级、专业、3门成绩。
二、实验要求
(4)定义函数Save:将某个学生信息存入文件。
(5)定义函数Fetch:从文件中随机读取某个学生的信息。
(6)定义函数Search_num:查找指定学号的学生,返回指向该学生结点的指针。
(7)定义函数InsertList:在函数中输入一个学生的信息,将该学生信息插入到链表中的相应位置,并保持此链表按学号的有序性。
head=stu;
}
else
{
stu->next=p1;
p2->next=stu;
}
else
{
p1->next=stu;//插最后面
stu->next=NULL;
}
}
returnhead;
}
//---------------------------------------学号删除-----------------------------
{
STU*p=NULL;
p=Search_major_subject_score(head,major,number,score);//先查找
if(p==NULL)
returnp;
else
p=Delete_num(head,p->num);//再删除
returnp;
}
//---------------------------------------------主函数------------------------------------------
(8)定义函数Delete_num:从链表中删除指定学号的学生。
(9)定义函数Search_major_subject_score:查找某个专业的、某门课程的成绩小于某个分数的学生,返回指向该学生结点的指针。
(10)定义函数Delete_major_subject:从链表中删除某个专业的、某门课程的成绩小于某个分数的学生。
相关文档
最新文档