数据结构课程设计报告学生信息管理系统.docx
《数据结构课程设计报告学生信息管理系统.docx》由会员分享,可在线阅读,更多相关《数据结构课程设计报告学生信息管理系统.docx(22页珍藏版)》请在冰豆网上搜索。
数据结构课程设计报告学生信息管理系统
题目2.学生信息管理系统
一、课程设计目的
1.数据构造课程设计是综合运用数据构造课程中学到的几种典型数据构造,以及程序设计语言〔C语言〕,自行实现一个较为完整的应用系统的设计与开发
2.通过课程设计,自己通过系统分析、系统设计、编程调试,写实验报告等环节,进一步掌握应用系统设计的方法和步骤,灵活运用并深刻理解典型数据构造在软件开发中的应用。
3.学会将知识应用于实际的方法,提高分析和解决问题的能力,增加综合能力。
学生信息管理系统:
〔1〕熟练掌握链表存储构造及其建立过程和常用操作;
〔3〕学会自己调试程序的方法并掌握一定的技巧
二、课程设计容
建立学生信息管理系统,通过链表实现对学生信息的输入,查找,删除,插入和排序等操作。
三、需求分析
1.每位学生的信息有:
**,**,性别,出生日期,E-mile,,c成绩,数学成绩等,用链表对学生的信息进展存储。
2.全部数据可以只放在存中;
3.系统能实现的操作和功能如下:
a)输入学生信息:
对不同学生分别输出以下信息:
**,**,性别,出生日期,E-mile,,c成绩,数学成绩等。
b)查找学生信息:
根据学生的**或**对学生的信息进展查找。
c)删除学生信息:
删除*个学生的所有信息。
d)插入学生信息:
将*个学生的信息插入到已经输入的信息中。
e)显示学生信息:
将所有学生的信息显示出来。
f)排序:
将所有学生按*个学科的成绩依次排序。
四、概要设计
1.系统构造图〔功能模块图〕
2.功能模块说明
①.输入学生信息,creat()函数:
建立单向链表,组织循环,将学生的信息依次录入。
②:
查找学生信息:
a.按**查找,find1〔〕函数;
b.按**查找,find2〔〕函数;
③.删除学生信息,del〔〕函数:
建立指针,在链表中寻找要删除信息的学生的**,找到后p->ne*t=p->ne*t->ne*t,将其删除。
④.插入学生信息,insert〔〕函数;
输入要插入的信息,建立指针,寻找要插入的节点。
⑤.显示学生信息,print〔〕函数;
将以存在的学生信息输出
⑥.按*科成绩对学生进展排序,sort〔〕函数;
五、详细设计及运行结果
1.菜单:
2.creat〔〕函数.
3.find〔〕函数.
find1():
find2():
3.del〔〕函数.
4.insert〔〕函数.
5.print〔〕函数.
6.sort〔〕函数.
六、调试情况,设计技巧及体会
通过这次课程设计,我对这门课又有了一个新的理解,最大的喜悦不是写出程序,而是从中学会了怎么去写,该如何去写,在教师的严格监视下,自己也养成了独立思考的习惯,真的从中得到了很多好处,从思想到着手,所有都是程序化的,必须踏踏实实的来。
通过学生信息管理系统的设计,使我对链表有了更深的了解,也懂得了如何用链表进展输入,插入,排序等操作,两个礼拜的实习很快就过去了,这一次真的学到了很多东西,我也将会将自己所学到的东西用到自己以后的学习中去。
七、参考文献
C语言程序设计--------------科学
数据构造〔C语言描述〕-----清华大学
数据构造〔使用C语言〕-----电子科技大学
八、附录:
源代码
*include
*include
*include
*defineNsizeof(structstu)
voidclearscreen()/*清屏函数*/
{getchar();
system("cls");
}
structdate/*定义出生年月日的构造体*/
{intyear;
intmouth;
intday;
};
structstu/*定义学生信息的构造体*/
{intnumber;
charname[30];
charse*[5];
structdatebirthday;
charmail[30];
charphone[30];
intcscore,mscore;
structstu*ne*t;
};
/*输出函数*/
intprint(structstu*p)
{
while(p!
=NULL)/*如果P所指的结点不为空执行循环*/
{printf("****性别出生日期C成绩数学成绩\n");
printf("%2d%6s%6s%8d-%2d-%2d%11s%11s%6d%8d\n",p->number,p->name,p->se*,p->birthday.year,p->birthday.mouth,p->birthday.day,p->mail,p->phone,p->cscore,p->mscore
);
p=p->ne*t;
}
printf("\n\n按回车键返回\n\n");
getchar();
return0;
}
/*创立链表*/
structstu*creat()
{structstu*p,*head;
inti,k;
printf("请输入学生的数:
\n");
scanf("%d",&k);
p=head=(structstu*)malloc(N);
printf("请输入**\n");
scanf("%d",&p->number);
printf("**\n");
scanf("%s",&p->name);
printf("性别\n");
scanf("%s",&p->se*);
printf("出生日期\n");
scanf("%d-%d-%d",&p->birthday.year,&p->birthday.mouth,&p->birthday.day);
printf("\n");
scanf("%s",&p->mail);
printf("\n");
scanf("%s",&p->phone);
printf("c成绩\n");
scanf("%d",&p->cscore);
printf("数学成绩\n");
scanf("%d",&p->mscore);
if(k>1)
for(i=1;i{p->ne*t=(structstu*)malloc(N);
p=p->ne*t;
printf("请输入**\n");
scanf("%d",&p->number);
printf("**\n");
scanf("%s",&p->name);
printf("性别\n");
scanf("%s",&p->se*);
printf("出生日期\n");
scanf("%d-%d-%d",&p->birthday.year,&p->birthday.mouth,&p->birthday.day);
printf("\n");
scanf("%s",&p->mail);
printf("\n");
scanf("%s",&p->phone);
printf("c成绩\n");
scanf("%d",&p->cscore);
printf("数学成绩\n");
scanf("%d",&p->mscore);
}
p->ne*t=NULL;
returnhead;
}
/*查找链表*/
structstu*find1(structstu*p)
{intnumber;
if(p==NULL)
{
printf("\n提示:
没有资料可以查询!
\n");
return0;
}
printf("请输入要查找的学生**:
");
scanf("%d",&number);
while(p!
=NULL)
{
if(p->number==number)
{
return(p);
break;
}
else
p=p->ne*t;
}
returnNULL;
}
structstu*find2(structstu*p)
{
charname[30];
if(p==NULL)
{
printf("\n提示:
没有资料可以查询!
\n");
return0;
}
printf("请输入要查找的学生**:
");
scanf("%s",name);
while(p!
=NULL)
{
if(strcmp(p->name,name)==0)
return(p);
else
p=p->ne*t;
}
returnNULL;
}
/*删除链表*/
intdel(structstu**h)
{
intnumber;
structstu*p,*p0;
if(*h==NULL)
return0;
printf("请输入要删除的**\n");
scanf("%d",&number);
p0=*h;
if(p0->number==number)
{
*h=p0->ne*t;
free(p0);
return1;
}
p=p0->ne*t;
while(p!
=NULL)
{
if(p->number==number)
{
p0->ne*t=p->ne*t;
free(p);
return1;
}
p0=p;
p=p->ne*t;
}
printf("\n按回车键返回\n");
getchar();
return0;
}
/*插入链表*/
intinsert(structstu**h)
{
structstu*p,*p0;
p=(structstu*)malloc(N);
printf("请输入要插入的**\n");
scanf("%ld",&p->number);
p0=*h;
if(p0->number==p->number)
return0;
printf("**\n");
scanf("%s",&p->name);
printf("性别\n");
scanf("%s",&p->se*);
printf("出生日期\n");
scanf("%d%d%d",&p->birthday.year,&p->birthday.mouth,&p->birthday.day);
printf("\n");
scanf("%s",&p->mail);
printf("\n");
scanf("%s",&p->phone);
printf("c成绩\n");
scanf("%d",&p->cscore);
printf("数学成绩\n");
scanf("%d",&p->mscore);
p->ne*t=NULL;
if(*h==NULL)
{
*h=p;
return1;
}
p0=*h;
if(p0->number>p->number)
{
p->ne*t=*h;
*h=p;
return1;
}
while(p0->ne*t!
=NULL&&p0->ne*t->numbernumber)
p0=p0->ne*t;
if(p0->ne*t==NULL)
{
p0->ne*t=p;
return1;
}
p->ne*t=p0->ne*t;
p0->ne*t=p;
printf("\n\n按回车键返回\n\n");
getchar();
return1;
}
/*排序*/
structstu*sort(structstu*p0)
{
structstu*t,*p,*q,*z;
if(p0==NULL)
{
printf("没有学生信息可排序!
\n");
return0;
}
if((p0==NULL)||(p0->ne*t==NULL))/*当节点不存在或者只有一个节点时*/
{
returnp0;
}
t=p0;
p=t->ne*t;
t->ne*t=NULL;/*将头节点孤立出来*/
while(p)/*t始终指向头节点*/
{
q=p->ne*t;
if(p->cscore>t->cscore)/*用头节点的后一个节点与头节点进展比拟*/
{
p->ne*t=t;/*将分数大的放在前面*/
t=p;/*t始终指向当前第一个节点*/
}
else
{
z=t;
while(z->ne*t&&z->ne*t->cscore>=p->cscore)
z=z->ne*t;
p->ne*t=z->ne*t;
z->ne*t=p;
}
p=q;
}
p0=t;
returnp0;
}
voidmain()
{
structstu*head,*p;
inta;
intb;
printf("*****************************邮电学院学生管理系统***************************\n");
printf("要进入系统请按任意键\n");
getchar();
printf("*****************************欢送您!
您已进入管理系统***************************\n");
printf("*********************************学生成绩管理系统*******************************\n");
do
{
clearscreen();
printf("学生纪录操作:
\n");
printf("1:
输入学生信息\n");
printf("2:
查找学生信息\n");
printf("3:
删除学生信息\n");
printf("4:
插入学生信息\n");
printf("5:
显示学生信息\n");
printf("6:
按C语言成绩排序\n");
printf("0:
退出系统\n");
printf("请选择(0~6):
");
scanf("%d",&b);
switch(b)
{
case1:
head=creat();
print(head);
break;
case2:
printf("请输入要查找的种类:
如为**请输1,如为**请输2:
\n");
scanf("%d",&a);
switch(a)
{
case1:
p=find1(head);break;
case2:
p=find2(head);break;
}
if(p)
{printf("找到情况如下:
\n");
getchar();
printf("**:
%d**:
%s性别:
%s出生日期:
%d-%d-%d:
%s:
%sC成绩:
%d数学成绩:
%d\n",p->number,p->name,p->se*,p->birthday.year,p->birthday.mouth,p->birthday.day,p->mail,p->phone,p->cscore,p->mscore);
}
else
printf("没有找到!
\n");
getchar();
break;
case3:
if(del(&head))
printf("已正确删除!
\n");
else
printf("要删除的结点不存在!
\n");
getchar();
break;
case4:
if(insert(&head))
printf("已成功插入!
\n");
else
printf("此学生已存在,插入失败!
\n");
getchar();
break;
case5:
print(head);
break;
case6:
p=sort(head);
print(p);
break;
case0:
break;
default:
printf("输入错误!
请重新输入!
\n");
}
}while(b!
=0);
}