数据结构课程设计学生信息管理系统.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-〉next=p—〉next-〉next,将其删除。
④.插入学生信息,insert()函数;
输入要插入得信息,建立指针,寻找要插入得节点。
⑤。
显示学生信息,print()函数;
将以存在得学生信息输出
⑥.按某科成绩对学生进行排序,sort()函数;
五、详细设计及运行结果
1、 菜单:
2、creat()函数、
3、find()函数、
find1():
find2():
3、del()函数、
4、insert()函数、
5、print()函数、
6、sort()函数、
六、调试情况,设计技巧及体会
通过这次课程设计,我对这门课又有了一个新得理解,最大得喜悦不就是写出程序,而就是从中学会了怎么去写,该如何去写,在老师得严格监督下,自己也养成了独立思考得习惯,真得从中得到了很多好处,从思想到着手,所有都就是程序化得,必须踏踏实实得来。
通过学生信息管理系统得设计,使我对链表有了更深得了解,也懂得了如何用链表进行输入,插入,排序等操作,两个礼拜得实习很快就过去了,这一次真得学到了很多东西,我也将会将自己所学到得东西用到自己以后得学习中去。
七、参考文献
C语言程序设计—---——-—--—---科学出版社
数据结构(C语言描述)—————清华大学出版社
数据结构(使用C语言)---—-电子科技大学出版社
八、附录:
源代码
#include<stdio、h〉
#include
#include<stdlib、h>
#defineNsizeof(structstu)
void clearscreen()/*清屏函数*/
{ getchar();
system("cls”);
}
structdate /*定义出生年月日得结构体*/
{int year;
intmouth;
intday;
};
structstu /*定义学生信息得结构体*/
{intnumber;
charname[30];
charsex[5];
struct datebirthday;
charmail[30];
charphone[30];
intcscore,mscore;
ﻩ struct stu*next;
};
/*输出函数*/
intprint(structstu*p)
{
while(p!
=NULL)/*如果P所指得结点不为空 执行循环*/
{printf("学号姓名 性别出生日期 E—mail 电话 C成绩 数学成绩\n");
printf("%2d%6s%6s%8d-%2d—%2d%11s%11s%6d%8d\n”,p—>number,p—>name,p-〉sex,p-〉birthday、year,p->birthday、mouth,p—〉birthday、day,p-〉mail,p->phone,p—〉cscore,p-〉mscore
ﻩ);
ﻩ p=p->next;
}
printf(”\n\n按回车键返回\n\n");
getchar();
return 0;
}
/*创建链表*/
structstu *creat()
{structstu*p,*head;
inti,k;
printf(”请输入学生得数:
\n”);
scanf("%d”,&k);
p=head=(struct stu *)malloc(N);
printf(”请输入学号\n”);
scanf("%d”,&p—>number);
printf("姓名\n");
scanf("%s”,&p—>name);
printf("性别\n");
scanf(”%s",&p—>sex);
printf(”出生日期\n");
scanf("%d-%d-%d”,&p-〉birthday、year,&p—>birthday、mouth,&p—>birthday、day);
printf(”E—mail\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-〉next=(structstu*)malloc(N);
p=p—〉next;
printf("请输入学号\n");
ﻩ scanf("%d",&p—>number);
printf("姓名\n");
scanf("%s",&p-〉name);
printf("性别\n”);
scanf("%s”,&p-〉sex);
printf("出生日期\n”);
scanf(”%d—%d-%d”,&p—>birthday、year,&p->birthday、mouth,&p-〉birthday、day);
ﻩ printf(”E—mail\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->next=NULL;
returnhead;
}
/*查找链表*/
structstu*find1(structstu*p)
{ int number;
if(p==NULL)
{
printf("\n提示:
没有资料可以查询!
\n");
return0;
ﻩ}
ﻩprintf(”请输入要查找得学生学号:
");
ﻩscanf("%d",&number);
while(p!
=NULL)
ﻩ{ﻩ
ﻩif(p—〉number==number)
{
ﻩreturn(p);
ﻩbreak;
ﻩ}
else
p=p->next;
}
return NULL;
}
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—〉next;
ﻩ}
return NULL;
}
/*删除链表*/
intdel(structstu**h)
{
intnumber;
structstu*p,*p0;
ﻩif(*h==NULL)
ﻩreturn 0;
printf(”请输入要删除得学号\n”);
ﻩ scanf(”%d”,&number);
p0=*h;
if(p0—>number==number)
ﻩ {
ﻩ *h=p0->next;
ﻩﻩfree(p0);
ﻩreturn1;
ﻩ}
ﻩp=p0->next;
while(p!
=NULL)
{
ﻩif(p-〉number==number)
ﻩﻩ {
ﻩp0->next=p->next;
ﻩﻩfree(p);
ﻩreturn1;
ﻩﻩ}
ﻩﻩp0=p;
p=p—〉next;
ﻩ}
ﻩ printf(”\n按回车键返回\n");
ﻩgetchar();
ﻩreturn0;
}
/*插入链表*/
intinsert(structstu**h)
{
ﻩstruct stu*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-〉sex);
printf("出生日期\n”);
ﻩscanf("%d%d%d",&p->birthday、year,&p->birthday、mouth,&p->birthday、day);
ﻩprintf("E—mail\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-〉next=NULL;
if(*h==NULL)
ﻩ{
*h=p;
ﻩﻩreturn 1;
}
ﻩp0=*h;
if(p0->number>p-〉number)
{
ﻩp—>next=*h;
*h=p;
ﻩreturn 1;
ﻩ}
while(p0->next!
=NULL&&p0->next—>number<p-〉number)
ﻩﻩ p0=p0—>next;
if(p0-〉next==NULL)
ﻩ {
ﻩp0-〉next=p;
ﻩﻩreturn1;
}
p->next=p0—>next;
p0—〉next=p;
printf(”\n\n按回车键返回\n\n");
getchar();
return1;
}
/*排序*/
structstu*sort(structstu*p0)
{
ﻩstruct stu*t,*p,*q,*z;
ﻩif(p0==NULL)
{
ﻩﻩprintf(”没有学生信息可排序!
\n”);
ﻩreturn0;
}
ﻩif((p0==NULL)||(p0—>next==NULL))/*当节点不存在或者只有一个节点时*/
{
ﻩreturnp0;
ﻩ}
ﻩt=p0;
p=t-〉next;
t—>next=NULL;/*将头节点孤立出来*/
ﻩwhile(p)ﻩﻩ/*t始终指向头节点*/
{
ﻩq=p—>next;
if(p—>cscore>t—〉cscore)/*用头节点得后一个节点与头节点进行比较*/
ﻩ{
ﻩﻩﻩp->next=t;ﻩﻩ/*将分数大得放在前面*/
ﻩt=p;ﻩﻩ/*t始终指向当前第一个节点*/
ﻩﻩ}
ﻩelse
ﻩ{
ﻩﻩz=t;
ﻩﻩwhile(z-〉next&&z-〉next->cscore>=p->cscore)
ﻩz=z—〉next;
ﻩp->next=z->next;
ﻩz-〉next=p;
ﻩ}
ﻩp=q;
ﻩ}
p0=t;
return p0;
}
voidmain()
{
struct stu*head,*p;
int a;
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;
ﻩﻩﻩcase 2:
p=find2(head);break;
ﻩﻩ }ﻩﻩ
if(p)
ﻩﻩ{printf(”找到情况如下:
\n”);
ﻩﻩﻩgetchar();
ﻩﻩprintf("学号:
%d姓名:
%s性别:
%s 出生日期:
%d-%d-%d E—mail:
%s电话:
%sC成绩:
%d数学成绩:
%d\n",p—>number,p->name,p-〉sex,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);
}