您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 人事档案/员工关系 > 学生信息管理系统实验报告
面向对象程序设计大作业------学生信息管理系统学院名称信息科学与工程学院专业班级数学大类2011级2班学生姓名魏仿学号201101051324指导教师孙红梅完成时间: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、源代码#includestdio.h#includestring.h#includemalloc.hstructdate{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;elseprept-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);}elseprintf(学号为%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(请输入要删除的学生的学
本文标题:学生信息管理系统实验报告
链接地址:https://www.777doc.com/doc-5669841 .html