最新版学生信息管理系统实验报告.docx
- 文档编号:7232288
- 上传时间:2023-05-11
- 格式:DOCX
- 页数:14
- 大小:221.51KB
最新版学生信息管理系统实验报告.docx
《最新版学生信息管理系统实验报告.docx》由会员分享,可在线阅读,更多相关《最新版学生信息管理系统实验报告.docx(14页珍藏版)》请在冰点文库上搜索。
最新版学生信息管理系统实验报告
面向对象程序设计大作业
------学生信息管理系统
学院名称信息科学与工程学院
专业班级数学大类2011级2班
学生姓名魏仿
学号
指导教师孙红梅
完成时间:
2013年5月29日
学生信息管理系统
1、编程目的
为方便学生信息的管理,特编写这个程序方便操作学生信息管理系统。
实现对学生姓名、学号、性别、成绩等信息的管理,可以实现学生的增加、删、查等多种功能的操作。
2、系统简介
本系统实现学生信息的管理,以动态链表、结构体数据类型来实现数据的存储与加工,利用链表来实现学生信息的插入、删除、查找功能。
主要分7个模块:
模块一:
结构体的定义,定义structstudent{};structdate{};结构体structstudent{};数据成员包括:
intstudentId;charname[20];charsex[5];structdatebirthday;intscore;structstudent*next;其中structdatebirthday;又借用structdate{};结构体的成员:
intyear;intmonth;intday;以此来实现学生学号、姓名、性别、出生日期、成绩等信息的存储于处理。
模块二:
ListCreate函数,函数类型为:
structstudent形参:
structstudent*headstructstudent*p返回值:
head指针。
实现链表的建立功能。
模块三:
ListInsert函数,函数类型为:
structstudent形参:
structstudent*headstructstudent*p返回值:
head指针。
实现链表节点的插入功能。
模块四:
ListDelete函数,函数类型为:
structstudent形参:
structstudent*headstructstudent*p返回值:
head指针。
实现链表节点的删除功能。
模块五:
ListPrint函数,函数类型为:
void形参:
structstudent*head返回值:
无
实现链表各节点信息的输出功能。
模块六:
ListFind函数,函数类型为:
void形参:
structstudent*headintid返回值:
无。
遍历链表,查找出符合条件的链表节点,并打印输出。
模块七:
voidmain();主函数,测试数据,测试链表各节点(学生基本信息)的输出、插入、删除、查找功能。
3、编程思路
一:
数据类型:
1.考虑到学生个人信息包含学号、姓名、性别、出生日期、成绩等信息。
因此采用结构体类型,定义学生个人信息结构体,并定义学生学号、姓名、性别、出生日期、成绩等数据成员。
2.考虑到要实现多个学生个人信息的管理,可采用结构体数组与链表。
但是由于要对多个学生信息进行信息的插入、删除、查找等操作。
显然结构体数组很难实现以上操作,因此选用链表。
二:
存储结构:
选用链表之后,考虑其存储结构,由于要实现信息的插入、删除、查找等功能,显然动态链表更适合。
相应的以链式存储结构来存储数据。
三:
功能的实现
学生信息的插入功能的实现:
在动态链表中要实现节点数据的插入,只要灵活的改变头一个节点的next指针使它指向要插入节点的当前指针,并使要插入接点的next指针指向要插入位置的下一个节点的当前指针即可,当然要对插入的位置进行分情况讨论,如是插在表头,表中还是表未。
另外还应当注意的是在插入前,要考虑下呆插入链表是否为空。
学生信息的删除功能的实现:
动态链表中节点数据的删除操作与插入操作思路大体相同,
主要思路还是改变指针的指向来实现这一功能。
删除位置同样要分情况讨论,当然也要提前考虑链表是否为空,若为空应当给出“当前链表为空”的相应应答。
另外还要考虑要删除的节点不在链表中的情况,这种情况下,要报错。
学生信息的查找功能的实现:
要查找某个符合一定要求的学生信息,如学号为:
1001。
只要遍历链表,打印输出符合条件的学生信息即可。
当然也要考虑要查找的信息不在链表中的情况,这是系统要报错。
4、总体设计(附类图)
系统的总体设计要考虑到界面友好性,程序的时间复杂度、空间复杂度,以及程序的健壮性等性能指标。
本系统在设计过程中,充分分析考虑了多种可能发生的情况。
并对一些可能会导致系统崩溃的细节问题做了进一步处理。
如在删除学生信息时考虑了表为空的情况等。
总体设计步骤:
1.数据结构与存储结构的选择。
2.数据的输入处理。
3.程序功能的实现,功能函数的声明与定义。
4.主函数的定义,在编写主函数时,要求主函数要尽可能的考虑到功能函数的各种极端情况,以便能得出合理的测试结果。
5.程序运行测试。
这一过程中,测试案例的选择尤为重要,选择的案例要有带表性,同时要考虑一些极端案例。
6.程序的调试与进步完善。
5、关键技术说明(动态链表、指针、思想)
本系统运用的关键技术是动态链表。
动态链表在初始时必须分配足够的空间,也就是空间大小是静态的,在进行插入和删除时则不需要移动元素,修改指针域即可,所以仍然具有链表的主要优点,链表结构可以是动态地分配存储的,即在需要时才开辟结点的存储空间,实现动态链接。
要点包括:
1.动态链表的建立。
2.链表节点的插入与删除。
3.动态链表的遍历。
6、源代码
#include
#include
#include
structdate
{
intyear;
intmonth;
intday;
};
structstudent
{
intstudentId;
charname[20];
charsex[5];
structdatebirthday;
intscore;
structstudent*next;
};
structstudent*ListCreate(intn)
{
structstudent*head=NULL,*curpt,*prept;
inti;
for(i=1;i<=n;i++)
{
curpt=(structstudent*)malloc(sizeof(structstudent));
printf("请输入第%d个学生的信息:
\n",i);
printf("请输入学生学号:
\n");
scanf("%d",&curpt->studentId);
printf("请输入学生姓名:
\n");
scanf("%s",curpt->name);getchar();
printf("请输入学生性别:
\n");
scanf("%s",curpt->sex);getchar();
printf("请输入学生成绩:
\n");
scanf("%d",&curpt->score);
curpt->next=NULL;
if(i==1)
head=curpt;
else
prept->next=curpt;
prept=curpt;
}
returnhead;
}
structstudent*ListInsert(structstudent*head,structstudent*p)
{
structstudent*curpt,*prept;
if(head==NULL)
{
head=p;
p->next=NULL;
}
else
{
curpt=head;
while(curpt!
=NULL&&curpt->studentId<=p->studentId)
{
prept=curpt;
curpt=curpt->next;
}
if(curpt!
=NULL)
{
if(curpt==head)
{
p->next=head;
head=p;
}
else
{
prept->next=p;
p->next=curpt;
}
}
else
{
prept->next=p;
p->next=NULL;
}
}
returnhead;
}
structstudent*ListDelete(structstudent*head,intid)
{
structstudent*curpt,*prept;
if(head==NULL)
{
printf("原表为空!
\n");
returnNULL;
}
else
{
curpt=head;
while(curpt!
=NULL&&curpt->studentId!
=id)
{
prept=curpt;
curpt=curpt->next;
}
if(curpt!
=NULL)
{
if(curpt==head)
{
head=curpt->next;
free(curpt);
}
else
{
prept->next=curpt->next;
free(curpt);
}
printf("学号为%d的学生已被成功删除\n",id);
}
else
printf("学号为%d的学生不存在\n",id);
returnhead;
}
}
voidListPrint(structstudent*head)
{
structstudent*p=head;
while(p!
=NULL)
{
/*printf("输出学生学号:
\n");
printf("%d\n",p->studentId);
printf("输出学生姓名:
\n");
printf("%s\n",p->name);
printf("输出学生性别:
\n");
printf("%s\n",p->sex);
printf("输出学生成绩:
\n");
printf("%d\n",p->score);*/
printf("学号:
%d姓名:
%s性别:
%s分数%d\n",p->studentId,p->name,p->sex,p->score);
p=p->next;
}
}
voidListFind(structstudent*head,intid)
{
structstudent*p=head;
while(p!
=NULL)
{
if((p->studentId)==id)
{
printf("学号:
%d姓名:
%s性别:
%s分数%d\n",p->studentId,p->name,p->sex,p->score);break;
}
p=p->next;
}
}
voidmain()
{
structstudent*head,*p;
intn,v,k,m;
printf("+----+\n");
printf("||\n");
printf("|学生信息管理系统|\n");
printf("||\n");
printf("+----+\n");
printf("请输入学生人数:
\n");
scanf("%d",&n);
head=ListCreate(n);
printf("原链表为:
\n");
ListPrint(head);
printf("请输入要查找的学号:
\n");
scanf("%d",&v);
ListFind(head,v);
p=(structstudent*)malloc(sizeof(structstudent));
printf("请输入要插入学生的信息:
\n");
scanf("%d%s%s%d",&p->studentId,p->name,p->sex,&p->score);
head=ListInsert(head,p);
printf("输出插入节点之后的链表:
\n");
ListPrint(head);
p=(structstudent*)malloc(sizeof(structstudent));
printf("请输入要插入学生的信息:
\n");
scanf("%d%s%s%d",&p->studentId,p->name,p->sex,&p->score);
head=ListInsert(head,p);
printf("输出插入节点之后的链表:
\n");
ListPrint(head);
printf("请输入要删除的学生的学号:
\n");
scanf("%d",&k);
head=ListDelete(head,k);
printf("输出删除节点后的链表:
\n");
ListPrint(head);
printf("请输入要删除的学生的学号:
\n");
scanf("%d",&k);
head=ListDelete(head,k);
printf("输出删除节点后的链表:
\n");
ListPrint(head);
printf("请输入要删除的学生的学号:
\n");
scanf("%d",&k);
head=ListDelete(head,k);
printf("输出删除节点后的链表:
\n");
ListPrint(head);
printf("请输入要删除的学生的学号:
\n");
scanf("%d",&k);
head=ListDelete(head,k);
printf("输出删除节点后的链表:
\n");
ListPrint(head);
printf("请输入要删除的学生的学号:
\n");
scanf("%d",&k);
head=ListDelete(head,k);
printf("输出删除节点后的链表:
\n");
ListPrint(head);
printf("请输入要删除的学生的学号:
\n");
scanf("%d",&k);
head=ListDelete(head,k);
printf("输出删除节点后的链表:
\n");
ListPrint(head);
p=(structstudent*)malloc(sizeof(structstudent));
printf("请输入要插入学生的信息:
\n");
scanf("%d%s%s%d",&p->studentId,p->name,p->sex,&p->score);
head=ListInsert(head,p);
printf("输出插入节点之后的链表:
\n");
ListPrint(head);
printf("请输入要查找的学号:
\n");
scanf("%d",&m);
ListFind(head,m);
}
7、测试(主界面及各功能模块的运行图及说明)
(1)输入的主界面:
(2)输出学生的信息:
(3)查找功能的实现:
(4)增加功能的实现:
(5)排序功能的实现:
(6)删除功能的实现:
8、系统评价及展望
因学生信息管理系统需要构造出增加功能,所以本系统给出以链表的形式进行解决问题,避免了数组对数据的局限性,采用结构体、链表等知识解决了关于学生信息如:
姓名、学号、性别、成绩等信息的管理,实现了增、删、减、查等基本操作。
若能更好的利用库的输入输出等知识该程序将会进展地更好。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 最新版 学生 信息管理 系统 实验 报告