《数据结构课程设计》实验报告.docx
《《数据结构课程设计》实验报告.docx》由会员分享,可在线阅读,更多相关《《数据结构课程设计》实验报告.docx(16页珍藏版)》请在冰豆网上搜索。
![《数据结构课程设计》实验报告.docx](https://file1.bdocx.com/fileroot1/2022-12/31/6123fd99-5128-42e1-b97f-16b91765e536/6123fd99-5128-42e1-b97f-16b91765e5361.gif)
《数据结构课程设计》实验报告
九江学院
信息科学与技术学院
《数据结构课程设计》报告书
题目:
学生成绩管理系统
专业:
信息管理与信息系统
班级:
姓名:
学号:
同组人员:
指导老师:
设计时间:
2014年3月23日~2014年3月28日
1.课程设计(实训)计划
3月24日:
完成必做项目班级通讯录管理
3月25日:
上午完成选做项目的需求分析、总体设计
下午完成选做项目的模块设计
3月26号:
完成系统的编码和调试
3月27号:
设计有效的测试方法与测试数据、书写实验报告
3月28号:
准备答辩
2.系统需求分析与功能设计(根据课题的要求进行简单的需求分析,设计相应的数据流图,得出相应的系统功能需要,系统数据流图)
(1)具备对成绩的管理功能(添加、删除、排序)
(2)具备按学号、姓名查询成绩的功能。
备注:
成绩记录的信息有学号、姓名。
可以用能表示学生成绩的结构体数组存储数据。
1:
删除学生姓名、学号、成绩及学生列。
2:
对学生信息进行相应的修改(对象为:
姓名、学号、成绩)。
3:
输入学生姓名、学号、成绩来添加学生列。
用C语言编程比较同类数据(成绩)大小进行排序。
4:
通过输入学生的姓名、学号来查询对应的成绩。
3.总体设计
(根据功能需求,设计系统的总体结构。
系统总体功能模块图,菜单的设计)
Creat()创建表,输入姓名班级学号各科成绩
voidmenu();主登陆界面
voidmain();主函数
voidalter(linklistL);修改学生信息
voiddelnode(linklistL);删除学生信息
voidinsert(linklistL,listnode*p);插入学生信息
voidoutputlist(linklistL);输出学生信息
listnode*listfind(linklistL);查找学生信息
voidsort(linklistL);实现学生成绩的排序
4.程序模块设计
(设计并编写输入\输出、查询\统计、数据维护等功能模块的应用程序,每个人设计2个以上的模块,一个组完成一个完整的系统,数据库访问,存储过程调用等作重点阐述)
1.建立单链表
(1)模块设计分析:
用头插法建表虽然算法简单,但生成的链表中结点的次序和输入的顺序相反。
为求得二者一致这里采用了尾插法建表。
(2)算法思想:
首先将新结点插到当前单链表的表尾上,然后需要增加一个尾指针,使之指向当前单链表的表尾。
代码:
linklistcreatelist()/*建立一个单链表*/
{
listnode*p,*r;
intflag=1;
r=L;
while(flag==1)
{
p=(listnode*)malloc(sizeof(listnode));
printf("学号班级姓名性别电话地址\n");
printf("--------------------------------------------\n");
scanf("%s%s%s%s%s%s",p->data.num,p->data.clas,p->data.name,p->data.sex,p->data.phone,p->data.addr);
r->next=p;
r=p;
printf("继续建表吗?
(1.是/0.不):
");
scanf("%d",&flag);
}
if(flag==1)
printf("创建成功!
\n");
r->next=NULL;
returnL;
}
2.删除操作
(1)模块设计分析:
通过“按姓名删除”和“按电话号码删除”两种方式,系统根据用户输入的信息在单链表中查找,如果找到,直接删除。
如果没找到,系统会给出提示。
(2)算法思想:
采用指针数据类型,设定指针,通过赋值来判断是否符合所要求条件,如果满足,则删除数据成功,否则失败。
代码:
voiddelnode(linklistL)
{
inti;
intj;
charname[9];
charphone[11];
listnode*p,*q;
p=L;
printf("--------------------\n");
printf("1.按姓名删除\n");
printf("2.按电话号码删除\n");
printf("--------------------\n");
printf("请选择:
");
scanf("%d",&i);
if(i==1)
{
printf("请输入你要删除联系人的姓名:
");
scanf("%s",name);
while(p&&strcmp(p->data.name,name)!
=0)
p=p->next;
}
else
{
printf("请输入你要删除联系人的电话号码:
");
scanf("%s",phone);
while(p&&strcmp(p->data.phone,phone)!
=0)
p=p->next;
}
if(p==NULL)
printf("没有要删除的联系人!
:
\n");
else
{
printf("%s,%s,%s,%s,%s\n",p->data.num,p->data.clas,p->data.name,p->data.sex,p->data.phone,p->data.addr);
printf("真的要删除该联系人吗?
(1.是/0.不):
");
scanf("%d",&j);
if(j==1){
q=L;
while(q!
=NULL&&q->next!
=p)
q=q->next;
q->next=p->next;
free(p);
printf("联系人已被删除!
\n");
}
}
}
5.技术难点与分析
(主要内容:
本课题在设计过程中所遇到的技术难点及解决方法。
)
1.程序编写格式混乱,经老师指导,按要求把程序的格式弄好。
2.程序中的功能不够完善,经老师指导,对程序进一步改进。
3.运行程序存在些问题,经老师指导,分模块运行成功。
6.系统测试
(主要内容:
测试环境描述,测试系统结构,系统功能测试,测试数据,测试结果等)
登陆界面
数据输入
成绩排序
按学号查找
修改信息
添加学生信息
退出
7.心得体会
(主要对本课题开发过程进行归纳和总结,还应包括所得结果与已有结果的比较和本课题尚存在的问题,以及进一步开发的见解与建议。
感谢对本课题研究与论文撰写过程中曾直接给予帮助的人员)
通过这次实训设计,让我学到了很多,也让我对c有了更深的了解和掌握。
不仅复习课本上所学知识,还通过查资料、问同学,学到了课本上没有的知识。
从而启发我,要想写好程序,在学好课本知识的同时,还需要多读和专业有关的一些书籍,同时还需要多动脑子,尽量把所学的知识综合起来应用,力争写出完美的程序。
除此之外,我还得到了一些有用的教训:
写程序时必须要细心,编译出错后必须逐个错误去改正,决不能心急浮躁,否则修改之后还会有新的错误。
总的来说,这次课程设计还是很好的锻炼了我的自我编程能力以及发现解决问题的能力。
8.参考文献
1.《数据结构——用c语言设计》主编耿国华高等教育出版社
2.《C语言程序设计教程》主编杨路明北京邮电大学出版社
3.网上相关内容
源程序代码:
1.建立单链表:
linklistcreatelist()/*建立一个单链表*/
{
listnode*p,*r;
intflag=1;
r=L;
while(flag==1)
{
p=(listnode*)malloc(sizeof(listnode));
printf("学号班级姓名性别电话地址\n");
printf("--------------------------------------------\n");
scanf("%s%s%s%s%s%s",p->data.num,p->data.clas,p->data.name,p->data.sex,p->data.phone,p->data.addr);
r->next=p;
r=p;
printf("继续建表吗?
(1.是/0.不):
");
scanf("%d",&flag);
}
if(flag==1)
printf("创建成功!
\n");
r->next=NULL;
returnL;
}
2.删除操作:
voiddelnode(linklistL)
{
inti;
intj;
charname[9];
charphone[11];
listnode*p,*q;
p=L;
printf("--------------------\n");
printf("1.按姓名删除\n");
printf("2.按电话号码删除\n");
printf("--------------------\n");
printf("请选择:
");
scanf("%d",&i);
if(i==1)
{
printf("请输入你要删除联系人的姓名:
");
scanf("%s",name);
while(p&&strcmp(p->data.name,name)!
=0)
p=p->next;
}
else
{
printf("请输入你要删除联系人的电话号码:
");
scanf("%s",phone);
while(p&&strcmp(p->data.phone,phone)!
=0)
p=p->next;
}
if(p==NULL)
printf("没有要删除的联系人!
:
\n");
else
{
printf("%s,%s,%s,%s,%s\n",p->data.num,p->data.clas,p->data.name,p->data.sex,p->data.phone,p->data.addr);
printf("真的要删除该联系人吗?
(1.是/0.不):
");
scanf("%d",&j);
if(j==1){
q=L;
while(q!
=NULL&&q->next!
=p)
q=q->next;
q->next=p->next;
free(p);
printf("联系人已被删除!
\n");
}
}
}