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

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