您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 人事档案/员工关系 > 利用单项链表实现简单的学生信息管理
编号:07第1页/共8页河北工业大学计算机软件技术基础(VC)课程设计报告一、题目:利用单项链表实现简单的学生信息管理(07)二、设计思路1、总体设计1)分析程序的功能创建单项链表保存学生的各项信息,学号、姓名、成绩。并能够完成学生信息的插入、删除及信息的显示功能。2)系统总体结构:按照程序要求的功能采用结构化的设计思想,划分为五个功能模块,即创建链表、插入函数、删除函数、显示函数和主函数。2、各功能模块的设计:说明各功能模块的实现方法①头文件:对自己定义的函数进行函数声明。②主函数:进行函数的调用,实现各函数的功能,达到预期的目的。③函数定义部分:定义各个功能函数,创建链表函数、插入新信息函数、删除信息函数、显示信息函数。3、设计中的主要困难及解决方案1)在插入新信息时,有插入点在表头、中间、表尾三种情况,为此采用讨论的方法,把三种情况进行讨论使其分开进行。2)在删除信息时,有删除的为头结点和中间结点的情况,采用讨论的方法,把两种情况分开来进行。4、你所设计的程序最终完成的功能1)创建链表、插入新信息、删除信息、显示信息。2)测试数据①输入的数据学号姓名成绩98023LiLi8598044WangTao6999764ZhangXiaobao72编号:07第2页/共8页99812LiuLifang91②插入的数据学号姓名成绩96085WangLiPing7798120ZhangLi7599912LiuHai80③删除的数据学号姓名成绩99812liulifang91运行结果编号:07第3页/共8页三、程序清单本程序包含creatlist.cpp、insert.cpp、del.cpp、output.cpp、main.cpp、头文件.h六个文件1、creatlist.cpp文件清单编号:07第4页/共8页#includeiostream.h#include头文件.hintn;student*creatlist(){student*head;student*p1;student*p2;n=0;head=NULL;p1=new(student);//创建一个新结点p2=p1;cinp1-nump1-namep1-score;while(p1-num!=0)//链表建立过程结束的判断条件{n++;if(n==1)//将链表中第一个新建结点作为表头head=p1;elsep2-next=p1;//原链表结点指向新建结点p2=p1;p1=new(student);cinp1-nump1-namep1-score;}delete(p1);p2-next=NULL;returnhead;//返回表头}2、insert.cpp文件清单#includeiostream.h#include头文件.hstudent*insert(student*head,student*t){student*p0;//待插入点student*p1;student*p2;//p0插入p1之前,p2之后p1=head;p0=t;if(p1==NULL)//原链表是空表{head=p0;p0-next=NULL;}else编号:07第5页/共8页{while((p0-nump1-num)&&(p1-next!=NULL))//查找待插入点{p2=p1;p1=p1-next;}if(p0-num=p1-num){if(p1==head)//要插入的位置在表头{head=p0;p0-next=p1;}else//要插入的位置不是表头{p2-next=p0;p0-next=p1;}}else//插入表尾结点之后{p1-next=p0;p0-next=NULL;}}returnhead;//返回表头}3、del.cpp文件清单#includeiostream.h#include头文件.hstudent*del(student*head,intnum){student*p1;student*p2;if(head==NULL)//原链表是空表{coutListisNULL\n;returnhead;}p1=head;while((num!=p1-num)&&(p1-next!=NULL))//查找带要删除的结点{p2=p1;p1=p1-next;编号:07第6页/共8页}if(num==p1-num){if(p1==head)//要删除的是头结点head=p1-next;else//要删除的不是头结点p2-next=p1-next;delete(p1);//释放被删除结点所占的内存空间coutdelete:numendl;}elsecoutnotfoundendl;returnhead;//返回表头}4、output.cpp文件清单#includeiostream.h#include头文件.hvoidoutput(student*head){if(head==NULL)//原链表是空表coutlistisNULL\n;else{student*p1;p1=head;cout学生的成绩信息endl;cout学号\t姓名\t成绩\n;do//输出链表中各个同学的信息{coutp1-num\tp1-name\tp1-scoreendl;p1=p1-next;}while(p1!=NULL);}}5、main.cpp文件清单#includeiostream.h#include头文件.hvoidmain(){student*headl;cout输入学生的成绩信息endl;cout学号\t姓名\t成绩endl;headl=creatlist();intk;编号:07第7页/共8页while(1)//菜单选项{coutendl;cout--------菜单选项---------endl;cout1.插入新信息,请选择:1endl;cout2.删除信息,请选择:2endl;cout3.显示信息,请选择:3endl;cout4.结束程序,请选择:4endl;cout选择;cink;if(k==1)//插入新信息{intm;cout输入插入学生人数endl;cinm;cout学号\t姓名\t成绩endl;for(inti=0;im;i++){student*stu;stu=new(student);cinstu-numstu-namestu-score;headl=insert(headl,stu);}}elseif(k==2)//删除信息{intnum;cout输入要删除学生的学号\n;cinnum;headl=del(headl,num);}elseif(k==3)//显示信息{output(headl);}else//结束程序break;};}6、头文件.h文件清单structstudent//定义结构体类型{intnum;charname[20];编号:07第8页/共8页doublescore;student*next;};student*creatlist();//创建链表函数原型说明student*insert(student*,student*);//插入函数原型说明student*del(student*,int);//删除函数原型说明voidoutput(student*);//显示函数原型说明四、对该设计题目有何更完善的方案1、对自己完成程序进行自我评价。完成了课程设计的基本要求,同时在此基础上进行了一些创新,使用了多文件,使程序看起来更清晰更有条理。但由于能力有限,以及对C++的认识不深,其中还有不够完善合理的地方。2、对课题提出更完善的方案增加按照成绩对链表进行排序的功能,使学生信息能够按照成绩的高低进行显示,能够更清晰地显示学生的学习情况五、收获及心得体会1、通过本次课程设计,自己在哪些方面的能力有所提高。加深了对利用C++语言进行程序设计的理解,提高了对函数的运用能力,提高了软件系统分析能力和使用多文件、归纳总结的能力。2、收获和心得体会。通过自己对单项链表的学习,熟悉了链表的建立、插入、删除等操作方法。通过这次课程设计使我明白了自学的重要性,有了一些自学的学习方法和技巧,并且要积极的与其他同学共同讨论,在讨论中才能找到自己认识的不足,改正自己的错误。日期:2009年6月20日
本文标题:利用单项链表实现简单的学生信息管理
链接地址:https://www.777doc.com/doc-1062366 .html