3.3.2结果输入函数voidprint()3.3.3添加信息函数voidins()
3.3.4删除数据函数voiddeletestu3.3.5信息查询函数voidsearchstu()
4.调试分析和测试结果
链表中的结点变量是通过指针变量来访问的。
因为在C语言中是用P—>来表示P所指的变量,又由于结点类型是一个结构类型,因此可用P—>data和P—>next分别表示结点的数据域变量和指针域变量。
指针变量的值要么为空(NULL),不指向任何结点;要么其值为非空,即它的值是一个结点的存储地址。
注意,当P为空值时,则它不指向任何结点,此时不能通过P来访问结点,否则会引起程序错误。
以下是运行后的一些重要截图。
4.1添加学生信息截图
实现思想:
录入完一条信息后,会提示输入完毕,是否继续输入,Y继续输入,N便是回主菜单。
实现思想:
先申请一个学生的链表空间,然后输出提示输入相关信息。
在输入性别时也作了限定,只能输入1或2,。
信息输入完毕后,将指向list单链表的指针向后移动一个单位。
时间复杂度为O
(1)。
4.2删除学生信息截图
在删除这一块,遇到问题了,在执行删除命令时总出现错误,无论删除第几条数据,系统只删除第二条记录。
经过了研究和查阅资料,终于把问题解决了。
实现思想:
在删除数据时,若无记录则提示系统中无学生信息,请先输入,此时程序将不向下执行。
否则提示输入要删除的学生的学号,输入学号后,先判断学号是否合法,再判断系统中有无此学号,若无则提示系统中无此记录。
否则将删除该学号的学生信息。
时间复杂度为O(S)。
4.3查询学生信息截图
实现方法稍微简单,如用户选择这项功能,指针回到表头ptr=delptr;然后利用循环语句将系统中所有学生信息以列表的形式表现出来。
使用户清晰的了解全班的学生信息。
实现思想:
在查询数据时,需要先判断此系统中有无记录,若无记录则提示系统中无学生信息,请先输入,此时程序将不向下执行。
否则根据学号查询,需要先判断学号是否合法,然后判断系统中有无此学号,最后输出相应的信息。
时间复杂度为O(s)。
4.4查看全部学生信息截图
实现思想:
在查看全部学生数据时,需要先判断此系统中有无记录,若无记录则提示系统中无学生信息,请先输入,此时程序将不向下执行。
否则根据把系统中的全部信息以列表的形式输出。
时间复杂度为O(S)。
4.5退出截图
退出时会有相应该的提示,感谢使用本系统,并且Pressanykeytocontinue。
5.总结
这次程序设计的是在VC环境下写出一个能为用户提供一个班级学生的通讯录信息进行日常管理的平台,我们主要负责通过这个程序能实现学生信息的添加、删除、查询、统计等基本操作。
开始之前我们必须了解系统开发的需求分析、类层次设计、模块分解、编码测试、模块组装与整体调试的全过程,程序可能不是最重要的,之前的准备工作才是最重要的,了解这个程序的全部运行过程才是最重要的,逐步熟悉程序设计的方法,同时增强实践动手能力,养成良好的编程习惯。
通过对数据结构这门课的学习,我了解到:
“数据结构”在计算机科学中是一门综合性的专业基础课。
数据结构的特点是要多实践,不能只了解书上的理论知识,书上的知识可能有时候会很空洞,只有自己多实践才能真正掌握其中的一些方法与诀窍,在平时的学习中,我们更要举一反三,认识到数据结构的本质与学习方法,这样才有助于快速提高我们的编程能力与实践动手能力。
在课程设计中我体会到:
要想一步达到目的的确很难,尤其是刚开始接触这个课题的时候,我们首先在编写之前必须理清这个思路,对总体有个大体的影像,每个人分工也非常重要,这有助于提高整个团队的工作效率。
在所有的准备工作做好后,就可以开始程序的编写,首先完整了解整个系统的功能与结构,开始编写时犯错在所难免,但是总体的思路不能改变,写程序是个漫长的过程,我们每个成员必须有耐心,每编写完成一个部分就要停下来检查一下,一面影响后面的总体效果,对我们初学的来说程序简洁但又不失目的确实很难。
一个星期的数据结构课程设计,从头到尾的实践和体验下来,对于我们来说学到的不仅是那些知识,更多的是团队和合作。
写到最后的收获及体会时感触颇深,也许班级安排的课程设计有着更深层的意义。
它不仅让我们综合那些理论知识来运用到设计和创新,还让我们知道了一个团队凝聚在一起所能发挥出的巨大潜能!
在设计的同时,我们还发现了自己的不足之处,比如编写程序时不知道哪些可以用更加简洁的语句描述,一些语句在编写的时候不知道错了,只有在调试的时候才能更清楚地了解其中的奥妙,在整个程序完成后,才能从整体了解这个程序,所以通过这次课程设计我还是从中学到很到学习这门专业的方法,在以后的学习中,我一定会沿着这种方法继续努力下去的!
6.参考文献
[1]谭浩强;《C语言程序设计》(第2版);清华大学出版社;2008年;P16-P208;
[2]严蔚敏、吴伟民;《数据结构》(C语言版);清华大学出版社;2010年;P1-P40;P263-P283;
[3];梁旭、谷晓琳、黄明;《C语言课程设计》(第2版);电子工业出版社;2009年;P32-48;
[4]XX知道
[5]XX百科
[6]XX文库
7.致谢
首先感谢学校给我们这次数据结构课程设计的机会,让我们拥有了展现运用自己知识的平台。
然后要感谢老师的谆谆教诲,是他们的悉心指导和严格要求,才使我们的课程设计有了较为完善的一面,才有了我们能力的提高,并在老师的帮助下得到了充分的锻炼。
这里包括以前给我们上过C语言课程课的徐晓蓉老师,还有上了数据结构的孙叶枫老师,当然还有席金菊老师,还有就是我的同学们,组员们。
这里有肖燕同学对我们这部分课程设计的构思和加工,还有查看、显示学生信息的部分工作,袁亚同学删除学生信息部分工作。
我们三个人既分工又合作,经过一星期的努力,终于把程序编好,又通过一周把实验报告写完了。
当然这里也少不了我自己的努力,大家一起的努力。
在此对所有对我给过帮助的致以由衷的谢意。
8.附录
#include
usingnamespacestd;
typedefstructlist
{intyear,month,day,qq,num,sex;chartel[20];charname[10];charaddress[100];
structlist*next;}node,*link;
linknewnode,ptr,delptr,q,temp;//声明表结构指针
ints=0;
staticintputt=0;//putt记录是否为第一个输入的元素,因为要记录头结点位置
voiddisplay()//显示函数
{cout<cout<<"**********<班级通讯录管理系统>**********"<cout<<"\t1:
添加学生信息"<cout<<"\t2;删除学生信息"<cout<<"\t3;查询学生信息"<cout<<"\t4;查看全部学生信息"<cout<<"\t0;退出系统"<cout<<"****************************************"<voidins()//单链表的创建
{intcsex;if(putt==0){cout<<"请输入学生数据:
"<delptr=newnode;//建立新结点
if(!
delptr){cout<<"[Error!
!
内存申请失败!
]"<(1);}cout<<"请输入学号:
";
cin>>delptr->num;while(delptr->num<100||delptr->num>=999)
{cout<<"学号输入错误,请重新输入学号(100-999):
"<cin>>delptr->num;}cout<<"请输入姓名:
";cin>>delptr->name;
cout<<"请输入性别(1男/2女):
";cin>>delptr->sex;while(delptr->sex!
=1&&delptr->sex!
=2)
{cout<<"性别输入错误,请重新输入性别(1男/2女):
"<>delptr->sex;}
cout<<"下面输入出生日期:
"<";
cin>>delptr->year;while(delptr->year<1900||delptr->year>2010)
{cout<<"出生年份输入错误,请重新输入年份(1900-2010):
"<>delptr->year;}
cout<<"请输入月:
";cin>>delptr->month;while(delptr->month<1||delptr->month>12)
{cout<<"出生月份输入错误,请重新输入月份(1-12):
"<>delptr->month;}
cout<<"请输入日:
";cin>>delptr->day;while(delptr->day<1||delptr->day>31)
{cout<<"出生日期输入错误,请重新输入日期:
"<>delptr->day;}
cout<<"请输入联系地址:
";cin>>delptr->address;cout<<"请输入电话:
";cin>>delptr->tel;
cout<<"请输入QQ:
";cin>>delptr->qq;delptr->next=NULL;ptr=delptr;putt=1;s++;}
else{cout<<"请输入学生数据:
"<if(!
newnode){cout<<"[Error!
!
内存申请失败!
]"<(1);}
cout<<"请输入学号:
";cin>>newnode->num;
while(newnode->num<100||newnode->num>=999)
{cout<<"学号输入错误,请重新输入学号(100-999):
"<cin>>newnode->num;}cout<<"请输入姓名:
";cin>>newnode->name;
cout<<"请输入性别(1男/2女):
";cin>>newnode->sex;
while(newnode->sex!
=1&&newnode->sex!
=2)
{cout<<"性别输入错误,请重新输入性别(1男/2女):
"<cin>>newnode->sex;}
cout<<"下面输入出生日期:
"<";
cin>>newnode->year;while(newnode->year<1900||newnode->year>2010)
{cout<<"出生年份输入错误,请重新输入年份(1900-2010):
"<cin>>newnode->year;}
cout<<"请输入月:
";cin>>newnode->month;
while(newnode->month<1||newnode->month>12)
{cout<<"出生月份输入错误,请重新输入月份(1-12):
"<cin>>newnode->month;}
cout<<"请输入日:
";cin>>newnode->day;
while(newnode->day<1||newnode->day>31)
{cout<<"出生日期输入错误,请重新输入日期:
"<cin>>newnode->day;}cout<<"请输入联系地址:
";
cin>>newnode->address;cout<<"请输入电话:
";
cin>>newnode->tel;cout<<"请输入QQ:
";
cin>>newnode->qq;newnode->next=NULL;
ptr->next=newnode;//把新结点加在表后面
ptr=ptr->next;//让ptr保持在表的最后面
s++;}}
voiddeletestu()//删除
{intno,i=0;
cout<<"请输入您要删除的学号:
";cin>>no;
q=delptr;if(no==q->num)
{delptr=q->next;deleteq;i=1;cout<<"删除成功!
";}
if(!
i)
{while(q)
{if(q->next){if(no==q->next->num)
{temp=q->next;q->next=q->next->next;deletetemp;i=1;cout<<"删除成功!
";break;}}
else{break;}q=q->next;}}if(!
i){cout<<"无此学号!
";}}
voidsearchstu()//查找
{ptr=delptr;//回到表头
intno,p=0;cout<<"请输入您要查找的学号:
";
cin>>no;while(no<1||no>1000)
{cout<<"您输入的学号不正确,请再次输入!
"<>no;}
while(ptr!
=NULL)
{if(ptr->num==no)
{cout<<"学号:
"<num<cout<<"姓名:
"<name<<"\t性别:
"<sex<<"\t出生日期:
"<year<<"年"<month<<"月"<day<<"日"<cout<<"联系地址:
"<address<<"\t电话:
"<tel<<"\tQQ:
"<qq
<p=1;break;}ptr=ptr->next;//ptr依序往后走访表
}if(p==0)cout<<"您输入的学号不存在!
"<voidprint()//打印函数
{cout<<"**********<班级全部学生信息表>**********"<ptr=delptr;//让ptr回到表头
while(ptr!
=NULL)
{cout<<"学号:
"<num<"<name;
if(ptr->sex==1)cout<<"\t性别:
"<<"男";
elsecout<<"\t性别:
"<<"女";
cout<<"\t出生日期:
"<year<<"年"<month<<"月"<day<<"日"<cout<<"联系地址:
"<address<<"\t电话:
"<tel<<"\tQQ:
"<qq<ptr=ptr->next;//ptr依序往后走访表}}
voidmain()//主函数
{charkey,confirmkey;
while
(1)
{display();cout<<"请选择操作(1-4),退出(0)"<>key;switch(key)
{case'0':
{cout<<"感谢您使用本系统!
"<(1);}
case'1':
{ins();cout<<"该生已输入完毕,是否继续输入?
(y/n)";
cin>>confirmkey;while(confirmkey=='y'||confirmkey=='Y')
{ins();cout<<"该生已输入完毕,是否继续输入(y/n)";cin>>confirmkey;
}};break;
case'2':
{deletestu();};break;
case'3':