利用顺序存储实现管理学生信息系统课程设计,实验报告利用顺序存储实现管理学生信息系统课程设计,实验报告
数 据 结 构 课 程 设 计
设计题目:利用顺序存储实现管理学生信息系统 学生姓名: 专业班级:
指导教师 完成时间:
信息工程 院 信息科学 系
课程设计成绩评定表(本科)
课题名称 利用顺序存储实现学生信息管理系统
院 系 年级专业
学 号 姓 名 成 绩
1、课题设计目的:
本课题主要的目的是让我们通过这次课程设计更加了解C的应用,学习基本的思考过程,而不能仅仅学习程序的实现技巧。学会课本上学的内容使用在编写的程序中,还要学会写论文为毕业论文打好基...
利用顺序存储实现管理学生信息系统课程
,实验
数 据 结 构 课 程 设 计
设计题目:利用顺序存储实现管理学生信息系统 学生姓名: 专业班级:
指导教师 完成时间:
信息
院 信息科学 系
课程设计成绩评定
(本科)
课题名称 利用顺序存储实现学生信息管理系统
院 系 年级专业
学 号 姓 名 成 绩
1、课题设计目的:
本课题主要的目的是让我们通过这次课程设计更加了解C的应用,学习基本的思考过程,而不能仅仅学习程序的实现技巧。学会课本上学的内容使用在编写的程序中,还要学会写论文为毕业论文打好基础。
设计一个能实际使用的学生信息管理系统。具有添加学生信息,查询学生成绩的,删除学生信息以及显示所有学生信息。它使用循环语句和多分制语句来实现,充分体现C程序设计特点。 2、课题设计意义:
随着人类进入信息科技时代,管理信息系统的开发和设计,则成了必然的发展要求,其重要性也是不可忽视的。管理工作的成败,课题设计
取决于能否做出有效的决策,而决策的正确与否则在很大程度上取
目的与 决于信息的质量。而学生信息管理系统,是以学校在学生信息管理当面的实际需求为背景,将各相关的业务及工作流程计算机化,以设计意义
计算机代替传统的手工操作方式,实现通过操作平台对学生相关信息进行整合、分类及查询等功能。
目前各个学校和公司都开发了自己的管理软件,但在进行全面地信息整合分析、同时增加学生与学校之间交流与联系的全面交互系统并不多。因此,该系统的研究和设计对于改善大学生信息的管理,提高工作效率,提高工作质量方面起到了积极作用,具有一定的经济效益和较大的社会效益。
指导教师:
年 月 日
目 录
一、课程设计的目的与意义 ............................................................................................. 1
1、设计题目的目的: ................................................................................................ 1
2、设计题目的意义: ................................................................................................ 1 二、需求分析 .................................................................................................................... 1
1、问题描述: ........................................................................................................... 1
2、功能要求: ........................................................................................................... 1
(1)信息录入功能 ............................................................................................. 1
(2)浏览功能 ..................................................................................................... 2
(3)查询功能 ..................................................................................................... 2
(4)其它功能 ..................................................................................................... 2
3、说明: ................................................................................................................... 2
4、输入输出的形式: ................................................................................................ 2
5、开发环境: ........................................................................................................... 2 三、 概要设计 .................................................................................................................. 2 四、 模块图 ...................................................................................................................... 4 五、 详细设计 .................................................................................................................. 4 六、运行结果与分析 ....................................................................................................... 10 七、
.......................................................................................................................... 13 八、附录 .......................................................................................................................... 14 九、参考文献 .................................................................................................................. 19
一、课程设计的目的与意义 1、设计题目的目的:
本课题主要的目的是让我们通过这次课程设计更加了解C的应用,学习基本的思考过程,而不能仅仅学习程序的实现技巧。学会课本上学的内容使用在编写的程序中,还要学会写论文为毕业论文打好基础。
设计一个能实际使用的学生信息管理系统。具有添加学生信息,查询学生成绩的,删除学生信息以及显示所有学生信息。它使用循环语句和多分制语句来实现,充分体现C程序设计特点。
2、设计题目的意义:
随着人类进入信息科技时代,管理信息系统的开发和设计,则成了必然的发展要求,其重要性也是不可忽视的。管理工作的成败,取决于能否做出有效的决策,而决策的正确与否则在很大程度上取决于信息的质量。
而学生信息管理系统,是以学校在学生信息管理当面的实际需求为背景,将各相关的业务及工作流程计算机化,以计算机代替传统的手工操作方式,实现通过操作平台对学生相关信息进行整合、分类及查询等功能。
目前各个学校和公司都开发了自己的管理软件,但在进行全面地信息整合分析、同时增加学生与学校之间交流与联系的全面交互系统并不多。因此,该系统的研究和设计对于改善大学生信息的管理,提高工作效率,提高工作质量方面起到了积极作用,具有一定的经济效益和较大的社会效益。
二、需求分析
1、问题描述:
该系统实现对学生的信息进行管理,包括了学生的姓名,学号,性别,年龄,电话号码以及身份证号码。
2、功能要求:
(1)信息录入功能
在这个功能里主要是学生的基本信息,包括了学生的姓名,学号,年龄,电话号码,身份证号码等。
1
(2)浏览功能
浏览功能包括浏览学生的电话号码,身份证号码以及学号等。 (3)查询功能
查询功能主要是通过输入学生的序号,该学生的所有有关信息。 (4)其它功能
除了信息录入功能,浏览功能和查询功能以后,还包括对所有学生按照姓名字母从小到大依次进行排序,并且再排序后给所有的学生都一一的编上学号, 另外还有删除,增加某学生的信息的功能。
3、说明:
(1)功能各方面越完善越好
(2)自定义的数据结构使用数组,链表等,然后根据不同的数据结构,设计不同的排序,查找算法。其中,排序算法至少有两种,可以使用多种数据结构来存放数据,然后在其上使用不同的排序算法。
(3)若用数组,必须动态分配空间(文本文件中最好有一行表示学生人数) 4、输入输出的形式:
本系统是一个学生成绩管理系统,采用VC++6.0 编译器作为开发环境,这个环境是我们在学习C++的平台。输入数据类型主要是char、int等数据类型,输入内容包括:学号、姓名、性别,年龄,身份证号和电话号码。用户在输入学生数据时要保证输入数据格式的正确性,系统不会自动检测输入的数据是否正确,输出形式与输入形式类似。
5、开发环境:
Visual C++不仅仅是是一个C++编译器,而是一个基于Windows操作系统的可视化集成开发环境IDE,这种环境开发出来的软件稳定性好、可移植性强,可以编制各种各样的Windows应用程序。
三、概要设计
1、先编入系统所需的库函数和需要宏定义的变量以及结构体的定义,从而使程序可运行。
2
#include
#define maxsize 100
typedef struct
{
char name[20];
char sex;
int age;
int num[2];
char ID[18];
char tele[11];
}std;
typedef struct
{
std student[maxsize];
int last;
}seqlist;
2、Main()函数的设计
在main()函数中主要运用switch()-case选择判断语句来调用相关功能模块。系统的运行是在一个永远重复循环里进行的,只有在主界面并选择“退出”时,才会跳出永真循环,并退出程序。
3、主界面的设计
主界面:在此界面用户可以选择要操作的选项,回车之后即可进入相关的页面进行操作,所有操作均有提示语,比较人性化的管理,易懂,简单。
在主界面中包括:?初始化链表 ?建立学生的基本信息 ?删除某学生有关的基本信息 ?插入某学生的基本信息 ?将所有的学生按照姓名的字母大小进行排序 ?给所有的学生编上学号 ?输出所有学生的基本信息 ?退出等全部的功能。之所以设计这么一个主界面,一是因为能使用户对程序操作的流程更加清晰简明,二是保证了用户同时只能对一个文件进行操作系统的要求,保证了系统不会打开文件紊乱或者出现致命的错误。
4、以下是函数声明:
void setnull(seqlist *l) 函数功能:将链表初始化
void creat_list(seqlist *l,int n) 函数功能:建立学生的所有有关信息 int insert(seqlist *l,std x,int i) 函数功能:插入某学生以及他的所有有关信息
int deletlist(seqlist *l,int i) 函数功能:删除某学生以及他的所有有关信息
3
void sort(seqlist *l) 函数功能:将所有的学生进行排序 void ident(seqlist *l) 函数功能:给所有的学生编上学号 void print_list(seqlist *l) 函数功能:输入所有学生的所有有关信息 四、模块图
1.初始化链表
2.输入学生的个数
3.录入所有学生的基本信息 学 生
4.删除某个学生及其相关信息 信
息 管5.增加某个同学及其相关信息 理
系
统
8.将排好序的一次编上学号
五、详细设计
1、首先是将定义的链表进行初始化,也就是把l->last置为-1,具体的函数如下: void setnull(seqlist *l)
{
l->last=-1;
}
2、建立main函数大致构建在算法的过程当中所需要调用的一些函数以及利用switch—case和while循环构造一个可以永远重复调用的环境,除非用户终止循环也就退出了系统了。并且为了界面的友好化,可以利用printf函数输出一些来美化界面的字和提示语。具体的函数如下
4
void main()
{
int i=1,n;
seqlist l;
std x;
printf("*****************************************************************
***************\n\n");
printf("\t\t\t\t学生信息管理系统\n\n\n");
printf("*****************************************************************
***************");
printf("请输入学生的个数:\n");
scanf("%d",&n);
while(i)
{
printf("请输入i的值:\n");
printf("\t0-->置空链表\n\t1-->建立学生信息表\n\t\t2-->插入某同学的信息\n\t\t3-->删除某同学的信息\n\t\t4-->将学生信息表进行排序\n\t\t5-->给学生编学号\n\t\t6-->查找某学生的信息\n\t\t7-->输出所有学生的信息\n");
scanf("%d",&i);
switch(i)
{
case 0:setnull(&l);break;
case 1:creat_list(&l,n);break;
case 2:printf("请输入要插入的学生的位置:");
scanf("%d",&i);
printf("请输入该同学的基本信息\n");
printf("姓名:\n");
scanf("%s",x.name);
getchar();
printf("性别:\n");
scanf("%c",&x.sex);
printf("年龄:\n");
scanf("%d",&x.age);
printf("身份证号:\n");
5
scanf("%s",x.ID);
printf("电话号码:\n");
scanf("%s",x.tele);
x.num[0]=x.num[1]='0';
insert(&l,x,i);break;
case 3:printf("请输入要删除的学生的号码:");scanf("%d",&i);deletlist(&l,i);break;
case 4:sort(&l);break;
case 5:ident(&l);break;
case 6:printf("请输入你要查找的学生的号
码:\n");scanf("%d",&i);printf("%s\t%c\t%d%s%s",l.student[i-1].name,&l.stu
dent[i-1].sex,l.student[i-1].age,l.student[i-1].ID,l.student[i-1].tele);b
reak;
case 7:print_list(&l);break;
}
printf("请输入i的值\n\t0-->结束\n\t1-->继续\n");
scanf("%d",&i);
}
}
3、知道main函数需要调用的函数以后首先就是建立学生信息的录入函数,其中在输入的过程中应该注意空格符也是字符,所以在单个字符的输入时前面可以加一个getchar()以免输入的字符不能正确的赋给想要的变量。而且在输入的过程当中也要适当的给一些提示语。具体函数如下:
void creat_list(seqlist *l,int n) {
int i;
void ident(seqlist *l);
for(i=0;istudent[i].num[0]=l->student[i].num[1]=0;
printf("请输入第%d个同学的基本信息\n",i+1);
printf("姓名:\n");
scanf("%s",l->student[i].name);
getchar();
printf("性别:\n");
6
scanf("%c",&l->student[i].sex);
printf("年龄:\n");
scanf("%d",&l->student[i].age);
printf("身份证号:\n");
scanf("%s",l->student[i].ID);
printf("电话号码:\n");
scanf("%s",l->student[i].tele);
l->last++;
}
}
4、建立好学生的信息以后,还有插入或删除某学生以及他的所有有关信息,具体函数如下:
int insert(seqlist *l,std x,int i) {
int j;
if(l->last>=maxsize-1)
{
printf("overflow");
return NULL;
}
Else
if(i<1||i>l->last+2)
{
printf("eroor");
return NULL;
}
Else
{
for(j=l->last;j>=i-1;j--) l->student[j+1]=l->student[j]; l->student[i-1]=x;
l->last=l->last+1;
}
return 1;
}
int deletlist(seqlist *l,int i)
7
{
int j;
if(l->last==-1)
{
printf("表空");
return 0;
}
else
if(i<1||i>l->last+1)
{
printf("eroor");
return 0;
}
else
{
for(j=i;j<=l->last;j++)
l->student[j-1]=l->student[j];
l->last--;
}
return 1;
}
5、写好删除和插入函数以后就是给所有的学生按照姓名字母从小到大依次排序,主要利用的就是冒泡法。具体函数如下:
void sort(seqlist *l)
{
int i,j,k;
std t;
for(i=0;i<=l->last-1;i++)
for(j=0;j<=l->last-i-1;j++)
{ k=0;
while(l->student[j+1].name[k]==l->student[j].name[k])
k++;
if(l->student[j].name[k]>l->student[j+1].name[k])
{
t=l->student[j];
l->student[j]=l->student[j+1];
8
l->student[j+1]=t;
}
}
}
6、给所有的同学排好序以后利用for循环给所有的学生编好学号。具体函数如下: void ident(seqlist *l)
{
int i;
for(i=1;i<=l->last;i++)
{
l->student[i].num[0]=i/10;
l->student[i].num[1]=i%10;
}
}
7、最后一个非常重要的函数就是输出函数,主要也是利用for循环依次输出所有学生的有关信息。具体函数如下:
void print_list(seqlist *l) {
int j;
for(j=0;j<=l->last;j++)
{
printf("number:");
printf("%d%d\n",l->student[j].num[0],l->student[j].num[1]);
printf("name:");
printf("%s\n",l->student[j].name); printf("sex:");
printf("%c\n",l->student[j].sex); printf("age:");
printf("%d\n",l->student[j].age); printf("ID:");
printf("%s\n",l->student[j].ID); printf("telephone:");
printf("%s\n",l->student[j].tele);
}
}
9
六、运行结果与分析
1、主界面
图1 系统的主界面 2、建立学生信息表
图2 录入学生的基本信息
10
3、插入某学生以及他的所有有关信息
图3 插入某同学的信息 4、删除某学生以及他的所有有关信息
图4 删除某同学的所有信息
11
5、给所有的学生进行排序
图5 将所有同学排序 6、将排好序的学生编上学号
图6 给所有同学编学号
12
七、总结
首先,经过这么长时间的编程及报告总结,我对C语言这门学科有了新的认识,感觉自己真的收获了很多~要想编写一个准确、高效并有使用价值的程序,一定先要对课本知识熟悉,还要掌握必要的上机操作能力,写程序其实很容易而关键在于调试
让我重新掌握了C语言,而且还得到了用C语言解决实际问题的宝贵程序。这次设计,
经验。
其次, 通过此次编程我也发现了自己在学习中的错误和不足,复习了以前学过的知识。同时也学到了一些没学过的知识,让我从中收益非浅~更重要的是培养了独立思考问题和解决问题的能力,熟悉了一些基本操作和解决问题的方法~
第三,此次课程设计之初遇到了许多问题,我深刻体会到老师发挥的重要作用,在匆忙的学习中C语言程序对我们来说还不熟练,但在老师的帮助下我学会了如何掌握编写的思想,如何查找系统没有提示的错误,最后终于在一遍又一遍地把程序搞定,体会到原来编程也挺有意思的快感.我想没有老师的帮助我很难在短期内把程序设计做的这样好,在此特地感谢老师的帮助。
编完此程序后,我体会到学C语言不能死记硬背,一定要灵活的使用才行。在编写程序过程中我遇到了不少问题。也学到了不少东西。经过两个星期的上机实践学习,使我对C语言有了更进一步的认识和了解,要想学好它重在实践,要不断的上机操作才能更好地学好C语言。从中又发现我对C语言的一些标准库函数不太了解,还有对函数调用的正确使用不够熟悉,对C语言中经常出现的错误也不了解,通过实践,使我在这几个方面的认识有所提高。
这次的C语言程序设计,在具体操作中,巩固了这学期所学的C语言的理论知识,这也是实习的目的所在。通过实际操作,学会了C语言程序编程的基本步骤、基本方法,开发了自己的逻辑思维能力,培养了分析问题、解决问题的能力。通过这次对学生信息管理系统的编译,我了解到C语言程序设计的思想,我们的程序虽然实用,但它有许多不足之处,我所编译的程序容量有限,而且每次操作都要回到主界面,在这方面该系统还有待于进一步优化。
C语言是一种计算机的高级语言,具有功能丰富,使用灵活方便,应用面广,目标程序效率高等特点,通过这次的C语言程序我真正知道了C语言的作用广泛。在完成大作业中使我进一步了解学C语言,并体会到设计程序并不是那么容易的。在解决这些问题中,同时学到了许多函数的实际用途。这对我学C语言起了很大作用。我领悟到运用c语言可以解决许多实际问题,它在我们的学习和工作中解决很多问题,尤其是在信息管理方面,c语言作为一门高级和计算机编辑语言,有其强大的功能。而我们应严格要求自己,不断培养各方面的能力。
在学习当中,我认识到学好计算机要重视实践操作,不仅仅是学习C语言,还是其它的语言,以及其它的计算机方面的知识都要重在实践,以后在学习过程中,我会
13
更加注视实践操作,使自己更好地学好计算机。通过这次课程设计我认识了自己,学
会怎样利用C语言的函数,数组,关键字来设计自己所需要程序等的收获即有了深刻
的认识,对我今后的学习以及将来走向工作岗位打下了稳固的基础。
最后,再次感谢编程过程中老师的帮助和教诲。 八、附录
#include
#define maxsize 100
typedef struct
{
char name[20];
char sex;
int age;
int num[2];
char ID[18];
char tele[11];
}std;
typedef struct
{
std student[maxsize];
int last;
}seqlist;
seqlist *l;
void setnull(seqlist *l) {
l->last=-1;
}
void creat_list(seqlist *l,int n)
{
int i;
void ident(seqlist *l);
for(i=0;istudent[i].num[0]=l->student[i].num[1]=0
;
printf("请输入第%d个同学的基本信息\n",i+1);
14
printf("姓名:\n");
scanf("%s",l->student[i].name);
getchar();
printf("性别:\n");
scanf("%c",&l->student[i].sex);
printf("年龄:\n");
scanf("%d",&l->student[i].age);
printf("身份证号:\n");
scanf("%s",l->student[i].ID);
printf("电话号码:\n");
scanf("%s",l->student[i].tele);
l->last++;
}
}
int insert(seqlist *l,std x,int i) {
int j;
if(l->last>=maxsize-1)
{
printf("overflow");
return NULL;
}
Else
if(i<1||i>l->last+2)
{
printf("eroor");
return NULL;
}
Else
{
for(j=l->last;j>=i-1;j--) l->student[j+1]=l->student[j]; l->student[i-1]=x;
l->last=l->last+1;
}
return 1;
15
}
int deletlist(seqlist *l,int i)
{
int j;
if(l->last==-1)
{
printf("表空");
return 0;
}
else
if(i<1||i>l->last+1)
{
printf("eroor");
return 0;
}
else
{
for(j=i;j<=l->last;j++)
l->student[j-1]=l->student[j];
l->last--;
}
return 1;
}
void sort(seqlist *l) {
int i,j,k;
std t;
for(i=0;i<=l->last-1;i++)
for(j=0;j<=l->last-i-1;j++)
{ k=0;
while(l->student[j+1].name[k]==l->student[j].name[k])
k++;
if(l->student[j].name[k]>l->student[j+1].name[k])
{
16
t=l->student[j];
l->student[j]=l->student[j+1];
l->student[j+1]=t;
}
}
}
void ident(seqlist *l)
{
int i;
for(i=1;i<=l->last;i++)
{
l->student[i].num[0]=i/10;
l->student[i].num[1]=i%10;
}
}
void print_list(seqlist *l) {
int j;
for(j=0;j<=l->last;j++)
{
printf("number:");
printf("%d%d\n",l->student[j].num[0],l->student[j].num[1]);
printf("name:");
printf("%s\n",l->student[j].name);
printf("sex:");
printf("%c\n",l->student[j].sex);
printf("age:");
printf("%d\n",l->student[j].age);
printf("ID:");
printf("%s\n",l->student[j].ID);
printf("telephone:");
printf("%s\n",l->student[j].tele);
}
}
17
void main()
{
int i=1,n;
seqlist l;
std x;
printf("*****************************************************************
***************\n\n");
printf("\t\t\t\t学生信息管理系统\n\n\n");
printf("*****************************************************************
***************");
printf("请输入学生的个数:\n");
scanf("%d",&n);
while(i)
{
printf("请输入i的值:\n");
printf("\t0-->置空链表\n\t1-->建立学生信息表\n\t\t2-->插入某同学的信息\n\t\t3-->删除某同学的信息\n\t\t4-->将学生信息表进行排序\n\t\t5-->给学生编学号\n\t\t6-->查找某学生的信息\n\t\t7-->输出所有学生的信息\n");
scanf("%d",&i);
switch(i)
{
case 0:setnull(&l);break;
case 1:creat_list(&l,n);break;
case 2:printf("请输入要插入的学生的位置:");
scanf("%d",&i);
printf("请输入该同学的基本信息\n");
printf("姓名:\n");
scanf("%s",x.name);
getchar();
printf("性别:\n");
scanf("%c",&x.sex);
printf("年龄:\n");
scanf("%d",&x.age);
printf("身份证号:\n");
18
scanf("%s",x.ID);
printf("电话号码:\n");
scanf("%s",x.tele);
x.num[0]=x.num[1]='0';
insert(&l,x,i);break;
case 3:printf("请输入要删除的学生的号码:");scanf("%d",&i);deletlist(&l,i);break;
case 4:sort(&l);break;
case 5:ident(&l);break;
case 6:printf("请输入你要查找的学生的号
码:\n");scanf("%d",&i);printf("%s\t%c\t%d%s%s",l.student[i-1].name,&l.stu
dent[i-1].sex,l.student[i-1].age,l.student[i-1].ID,l.student[i-1].tele);b
reak;
case 7:print_list(&l);break;
}
printf("请输入i的值\n\t0-->结束\n\t1-->继续\n");
scanf("%d",&i);
}
}
九、参考文献
【1】张国峰.C++语言及其程序设计教程.电子工业出版书,1992 【2】萨师煊,王珊.数据库系统概论.第二版.高等教育出版社,1991 【3】徐德民.最新C语言程序设计.电子工业出版社,1992
【4】唐策善,黄刘生.数据结构-用C语言描述.高等教育出版社,1995
19
本文档为【利用顺序存储实现管理学生信息系统课程设计,实验报告】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑,
图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。