C语言链表学生管理系统.docx

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

C语言链表学生管理系统.docx

《C语言链表学生管理系统.docx》由会员分享,可在线阅读,更多相关《C语言链表学生管理系统.docx(19页珍藏版)》请在冰点文库上搜索。

C语言链表学生管理系统.docx

C语言链表学生管理系统

信息科学与技术学院

本科二年级

专业:

班级:

姓名:

2011年11月26日

数据结构作业

一、作业题目:

学生数据管理系统

二、实验目的:

学习使用C语言链表,编写学生数据管理系统,使我们更好的掌握链表的应用方法,如:

利用链表的建立,删除,查询,插入来实现对学生数据的建立,删除,查询,和插入。

通过该作业,我们可以更好的了解和掌握C语言的基础知识,同时对链表结构有了进一步的应用。

三、开发环境:

本系统基于MicrosoftVisualStudio2010开发平台,使用了C语言的相关知识来实现了对学生数据的建立,删除,查询,和插入等功能。

四、需求分析及相关函数的实现:

本次实验要求是利用C语言链表开发一个学生数据管理系统,在该系统中实现对学生数据的建立,删除,查询,和插入等功能。

首先根据实验要求,需要以下几个函数来实现:

structschool*creat(int);/*创建链表*/

voidoutput(structschool*);/*显示数据*/

structschool*insert(structschool*,structschool*);/*插入数据*/

structschool*del(structschool*,long);/*删除数据*/

structschool*sort(structschool*);/*排序*/

voidsearch(structschool*,int);/*查找*/

1.创建链表函数的实现:

基于该系统为学生数据管理系统,学生相关信息一般包括:

姓名,性别,学号,成绩,专业,因此,建立学生链表结构如下:

name为姓名,sex为性别,num为学号,goal为成绩,project为专业。

structschool/*建立链表结构*/

{

charname[15];

charsex[15];

intnum;

intgoal;

charproject[30];

LIB*next;

};

基于上述结构,可通过下列函数实现对不同学号的学生进行存储数据从而实现学生数据链表的建立。

通常情况下,不允许学生的学号相同,因此fun()函数实现的功能是防止建立的学生数据中存在学号相同的学生,而create()实现的是对输入的学生数据进行存储。

LIB*fun(LIB*q,LIB*head,inti)

{LIB*l;intj;

l=head;

for(j=0;j

{if((l->num)==(q->num))

{printf("该学号已存在,请重新输入:

\n");

q=(LIB*)malloc(LEN);

printf("输入姓名,性别,学号,成绩,专业:

\n");

scanf("%s%s%d%d%s",q->name,q->sex,&q->num,&q->goal,q->project);

q=fun(q,head,i);

}

l=l->next;

}

returnq;

}

LIB*creat(intn)/*建立学生链表*/

{

LIB*head,*q,*p2,*l;

inti;

head=p2=q=(LIB*)malloc(LEN);

printf("输入姓名,性别,学号,成绩,专业:

\n");

scanf("%s%s%d%d%s",q->name,q->sex,&q->num,&q->goal,q->project);

for(i=1;i

{q=(LIB*)malloc(LEN);

printf("输入姓名,性别,学号,成绩,专业:

\n");

scanf("%s%s%d%d%s",q->name,q->sex,&q->num,&q->goal,q->project);

q=fun(q,head,i);

p2->next=q;

p2=q;

}

p2->next=0;

returnhead;

}

2.显示学生数据函数的实现:

从头指针开始逐个实现学生数据的显示。

voidoutput(LIB*p)/*显示数据*/

{

LIB*head=p;

if(p==0)printf("\nlistnull\n");

else

while(p!

=0)

{

printf("姓名:

%s;\t性别:

%s;\t学号:

%d;\t成绩:

%d;\t专业:

%s;\n",p->name,p->sex,p->num,p->goal,p->project);

p=p->next;

}

p=head;

}

3.学生数据插入函数的实现

把每次新加入的学生数据都添加到原始链表的尾部。

并对链表进行存储。

其中p为原始链表,o为新增的学生数据。

LIB*insert(LIB*p,LIB*o)/*插入成员*/

{LIB*head=p,*q;

if(p==0)

{

head=o;

o->next=0;

}

else{while(p!

=0)

{if((p->num)==(o->num)){printf("该学号的学生已经存在。

\n");returnhead;}

q=p;p=p->next;

}

q->next=o;o->next=0;

}

returnhead;

}

4.删除数据的函数实现:

该函数中*p为原始数据链表,o为需要删除的学生的学号。

通过对该学生学号的查找来实现链表中学生数据的对应,并对查找到得数据进行删除处理。

如果链表中没有找到需要查找的数据,就输出"*********没有与该学号对应的学生:

"。

LIB*del(LIB*p,into)/*删除数据*/

{

LIB*head=p,*q;

if(p==0)printf("\n该链表为空链表\n");

elseif(o==(p->num))

{head=p->next;free(p);

}elsewhile(p!

=0)

{q=p;p=p->next;if(p==0){printf("*********没有与该学号对应的学生:

******\n");break;}if(o==(p->num))

{q->next=p->next;free(p);break;

}

5.学生数据按学号从小到大的排序函数的实现:

该函数是通过冒泡排序的方法实现了对学生数据按照学号从小到大的顺序进行排序。

LIB*insert1(LIB*p,LIB*o)/*排序*/

{LIB*head=p,*q;if(p==0){head=o;o->next=0;}

elseif((o->num)<(p->num))

{head=o;o->next=p;}else{while((o->num)>(p->num))

{q=p;p=p->next;}if(p->next==0)

{p->next=o;o->next=0;}

else{q->next=o;o->next=p;}

}returnhead;}

LIB*sort(LIB*head)

{LIB*p,*q;if(head==0)returnhead;p=head;head=0;

while(p!

=0)

{q=p;p=p->next;head=insert1(head,q);}

returnhead;}

}returnhead;

}

6.查找函数的实现:

该函数中p为原始数据链表,o为要查找的学生的学号。

按照学号对链表进行对应查找,最后将查找到得数据显示出。

如果链表中没有找到需要查找的数据,就输出"*********没有与该学号对应的学生:

"。

voidsearch(LIB*p,into)

{LIB*head=p;if(p==0)printf("\n******该链表为空链表******\n");

elseif(o==(p->num))

{printf("*******你所查找的学生信息如下:

\n姓名:

%s;\t性别:

%s;\t学号:

%d;\t成绩:

%d;\t专业:

%s;\n",p->name,p->sex,p->num,p->goal,p->project);}

elsewhile(p!

=0){p=p->next;if(p==0){printf("*********没有与该学号对应的学生:

******\n");break;}if(o==(p->num))

{printf("*******你所查找的学生信息如下:

\n姓名:

%s;\t性别:

%s;\t学号:

%d;\t成绩:

%d;\t专业:

%s;\n",p->name,p->sex,p->num,p->goal,p->project);break;}}p=head;}

7.主函数的实现:

intmain()

{

LIB*p=0,*h=0,*q;

intm,a,num,d;

charn[15];

do

{

printf("建立人员管理链表--->1;\n打印人员信息链表--->2;\n插入人员信息--->3;\n按学号删除记录--->4;\n按学号排序--->5;\n查找--->6;\n退出--->0;\n");

printf("请输入你的选择:

");

scanf("%d",&m);

switch(m)

{

case1:

printf("请输入人员总数:

");

scanf("%d",&a);

h=p=creat(a);

break;

case2:

p=h;

output(p);

break;

case3:

p=h;

printf("输入姓名,性别,学号,成绩,专业:

\n");

q=(LIB*)malloc(LEN);

scanf("%s%s%d%d%s",q->name,q->sex,&q->num,&q->goal,q->project);

h=p=insert(p,q);

break;

case4:

p=h;

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

");

scanf("%d",&num);

h=p=del(p,num);

break;

case5:

p=h;

h=p=sort(p);

break;

case6:

p=h;

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

");

scanf("%d",&d);

search(p,d);

break;

default:

break;

}

}while(m);

}

五、详细设计:

/*文件list.h*/

#ifndefLIST_H

#defineLIST_H

structschool*creat(int);

voidoutput(structschool*);

structschool*insert(structschool*,structschool*);

structschool*del(structschool*,long);

structschool*sort(structschool*);

voidsearch(structschool*,int);

#endif

/*文件list.cpp*/

#include

#include

#include"string.h"

#defineLENsizeof(LIB)

typedefstructschoolLIB;

structschool/*建立链表结构*/

{

charname[15];

charsex[15];

intnum;

intgoal;

charproject[30];

LIB*next;

};

LIB*fun(LIB*q,LIB*head,inti)

{LIB*l;intj;

l=head;

for(j=0;j

{if((l->num)==(q->num))

{printf("*****该学号已存在,请重新输入:

********\n");

q=(LIB*)malloc(LEN);

printf("输入姓名,性别,学号,成绩,专业:

\n");

scanf("%s%s%d%d%s",q->name,q->sex,&q->num,&q->goal,q->project);

q=fun(q,head,i);

}

l=l->next;

}

returnq;

}

LIB*creat(intn)/*建立学生链表*/

{

LIB*head,*q,*p2,*l;

inti;

head=p2=q=(LIB*)malloc(LEN);

printf("输入姓名,性别,学号,成绩,专业:

\n");

scanf("%s%s%d%d%s",q->name,q->sex,&q->num,&q->goal,q->project);

for(i=1;i

{q=(LIB*)malloc(LEN);

printf("输入姓名,性别,学号,成绩,专业:

\n");

scanf("%s%s%d%d%s",q->name,q->sex,&q->num,&q->goal,q->project);

q=fun(q,head,i);

p2->next=q;

p2=q;

}

p2->next=0;

returnhead;

}

voidoutput(LIB*p)/*显示数据*/

{

LIB*head=p;

if(p==0)printf("\nlistnull\n");

else

while(p!

=0)

{

printf("姓名:

%s;\t性别:

%s;\t学号:

%d;\t成绩:

%d;\t专业:

%s;\n",p->name,p->sex,p->num,p->goal,p->project);

p=p->next;

}

p=head;

}

LIB*insert(LIB*p,LIB*o)/*插入成员*/

{LIB*head=p,*q;

if(p==0)

{

head=o;

o->next=0;

}

else{while(p!

=0)

{if((p->num)==(o->num)){printf("*******该学号的学生已经存在。

*******\n");returnhead;}

q=p;p=p->next;

}

q->next=o;o->next=0;

}

returnhead;

}

LIB*del(LIB*p,into)/*删除数据*/

{

LIB*head=p,*q;

if(p==0)

printf("\n*******该链表为空链表******\n");

elseif(o==(p->num))

{

head=p->next;

free(p);

}

else

while(p!

=0)

{

q=p;

p=p->next;

if(p==0){printf("*********没有与该学号对应的学生:

******\n");break;}

if(o==(p->num))

{

q->next=p->next;

free(p);

break;

}

}

returnhead;

}

LIB*insert1(LIB*p,LIB*o)/*排序*/

{

LIB*head=p,*q;

if(p==0)

{

head=o;

o->next=0;

}

elseif((o->num)<(p->num))

{

head=o;

o->next=p;

}

else

{

while((o->num)>(p->num))

{

q=p;

p=p->next;

}

if(p->next==0)

{

p->next=o;

o->next=0;

}

else

{

q->next=o;

o->next=p;

}

}

returnhead;

}

LIB*sort(LIB*head)

{

LIB*p,*q;

if(head==0)returnhead;

p=head;

head=0;

while(p!

=0)

{

q=p;

p=p->next;

head=insert1(head,q);

}

returnhead;

}

voidsearch(LIB*p,into)

{LIB*head=p;

if(p==0)

printf("\n******该链表为空链表******\n");

elseif(o==(p->num))

{

printf("*******你所查找的学生信息如下:

\n姓名:

%s;\t性别:

%s;\t学号:

%d;\t成绩:

%d;\t专业:

%s;\n",p->name,p->sex,p->num,p->goal,p->project);

}

else

while(p!

=0)

{

p=p->next;

if(p==0){printf("*********没有与该学号对应的学生:

******\n");break;}

if(o==(p->num))

{

printf("*******你所查找的学生信息如下:

\n姓名:

%s;\t性别:

%s;\t学号:

%d;\t成绩:

%d;\t专业:

%s;\n",p->name,p->sex,p->num,p->goal,p->project);

break;

}

}

p=head;

}

intmain()

{

LIB*p=0,*h=0,*q;

intm,a,num,d;

charn[15];

do

{

printf("建立人员管理链表--->1;\n打印人员信息链表--->2;\n插入人员信息--->3;\n按学号删除记录--->4;\n按学号排序--->5;\n查找--->6;\n退出--->0;\n");

printf("请输入你的选择:

");

scanf("%d",&m);

switch(m)

{

case1:

printf("请输入人员总数:

");

scanf("%d",&a);

h=p=creat(a);

break;

case2:

p=h;

output(p);

break;

case3:

p=h;

printf("输入姓名,性别,学号,成绩,专业:

\n");

q=(LIB*)malloc(LEN);

scanf("%s%s%d%d%s",q->name,q->sex,&q->num,&q->goal,q->project);

h=p=insert(p,q);

break;

case4:

p=h;

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

");

scanf("%d",&num);

h=p=del(p,num);

break;

case5:

p=h;

h=p=sort(p);

break;

case6:

p=h;

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

");

scanf("%d",&d);

search(p,d);

break;

default:

break;

}

}while(m);}

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

当前位置:首页 > 考试认证 > 公务员考试

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

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