学生信息管理实验

上传人:飞****9 文档编号:132274338 上传时间:2020-05-14 格式:DOCX 页数:19 大小:346.80KB
返回 下载 相关 举报
学生信息管理实验_第1页
第1页 / 共19页
学生信息管理实验_第2页
第2页 / 共19页
学生信息管理实验_第3页
第3页 / 共19页
学生信息管理实验_第4页
第4页 / 共19页
学生信息管理实验_第5页
第5页 / 共19页
点击查看更多>>
资源描述

《学生信息管理实验》由会员分享,可在线阅读,更多相关《学生信息管理实验(19页珍藏版)》请在金锄头文库上搜索。

1、实验一一、 课题任务设计一个“学生基本信息管理系统”。主要实现学生基本信息的录入、插入、修改、删除、查询等基本功能。学生信息包括学生的学号、姓名、性别、年龄、家庭地址、电话等信息,具体功能如下:l 获取学生基本信息。可以从文件中读取基本信息,也可直接录入。l 查询学生基本信息。输入学生学号或姓名等信息后,显示学生的所有信息。l 添加学生基本信息。在学生基本信息表的指定位置添加学生基本信息。(由于本实验按照“学生学号非降序顺序”的储存顺序,故不需要在指定位置添加学生信息即可实现对学生信息的储存)l 修改学生基本信息。在学生基本信息表中,修改指定学生的基本信息。l 删除学生基本信息。在学生基本信息

2、表中,删除指定学生的基本信息。l 保存文件。当学生基本信息表发生添加、修改、删除等变化后,都要对最终结果进行保存。本实验采用链表对学生基本信息进行存储,使用链表的基本算法实现学生基本信息的各项管理功能。二、 概要1. 函数说明本程序包含12个函数:主函数main();链表初始化函数:InitList();遍历函数:ListTraverse();输入函数:ReadIn();插入函数:InsertAscend();写入文件函数:WriteToFile();读入文件函数:ReadFromFile();打印函数:Print();学号查找函数:FindFromNum();姓名查找函数:FindFromN

3、ame();删除元素函数:DeleteElem();修改函数:Modify().2. 抽象数据类型的定义本实验对链表的操作涉及到如下抽象数据类型:ADT List 数据对象:D = ai | ai ElemSet, i=1,n,n0 数据关系:R1 = | ai-1,ai D, i=2, ,n 基本操作: InitList (&L) 操作结果:构造一个空的线性表L。ListTraverse(L,visit()初始条件:线性表L已存在。操作结果:依次对L的每个数据元素调用函数visit()。一旦visit()失败,则操作失败。DeleteElem(L,e)初始条件:线性表L存在且非空。操作结果:

4、通过查找,删除L中值为e的元素。FindFromList(L,e,&p,&q)初始条件:线性表L存在且非空。操作结果:查找L中值为e的元素,查找成功,则返回TRUE,否则返回FALSE。WriteToFile(e)初始条件:e包含所需信息。操作结果:将信息写入指定文件。ReadFromFile(e)初始条件:文件已存在。操作结果:从指定的文件读取信息到e。InsertAscend(L, e)初始条件:线性表L已存在。操作结果:将e按照非降序插入L。ADT List3. 主程序流程本实验的主程序流程如下:输入初始学生信息从文件读入学生信息添加新的学生信息查询学生信息修改学生信息删除学生信息显示所

5、有学生信息将所有学生信息存入文件操作结束主程序数据类型定义链表初始化主菜单4. 调用说明本实验将头文件、函数文件、主程序写入一个cpp文件,不存在多文件之间的相互调用。各程序模块之间的调用关系如下:三、 详细设计1. 学生信息结构类型定义:struct studchar nameNAMELEN;long long num;char sex;int age;char tel20;char addressADDRESSLEN;typedef struct stud ElemType;2. 链表结点定义:struct LNodeElemType data;LNode *next;typedef st

6、ruct LNode *LinkList;3. 实现命令选择的算法:通过分支结构实现不同命令(菜单)的设置,用户可选择不同的命令而进行相应的操作。4. 实现录入学生初始信息算法:先将录入的学生信息保存在结构数组中,再将其按照非降序插入到链表中,具体算法如下:(k=0)scanf(%s,studentk.name);/读入姓名scanf(%ld,&studentk.num);/读入学号scanf(%*c%c,&studentk.sex);/读入性别scanf(%d,&studentk.age);/读入年龄scanf(%s,studentk.tel);/读入电话scanf(%s,studentk.

7、address);/读入家庭住址InsertAscend(T,studentk+);/将所录入信息插入到链表5. 实现插入学生信息算法:通过调用ReadIn()函数和InsertAscend()函数分别实现信息的输入以及信息的插入,具体算法如下:ReadIn(e);InsertAscend(T,e);6. 实现查找学生信息的算法:本算法是通过学生姓名或者学号索引从而查找学生所有信息,具体是先通过调用FindFromName()或FindFromNum()函数对学生姓名和学号进行查找,若查找成功则调用Print()函数输出对应的学生信息。7. 实现学生信息修改算法:本算法和查找算法类似,也是先通

8、过调用FindFromName()或FindFromNum()两个函数查询到学生信息,然后再调用修改函数Modify()实现对学生信息的修改,如果学生学号发生改动,则再次调用插入函数InsertAscend()将学生信息插入到链表中。8. 实现学生信息删除算法:本算法主要通过调用删除元素函数DeleteElem()实现对学生信息的删除操作。9. 实现显示所有学生信息算法:本算法主要通过调用遍历函数ListTraverse()函数实现对所有学生信息的遍历,然后再嵌套调用Print()函数实现对学生信息的输出,具体算法如下:ListTraverse(T,Print);10. 实现文件的读取算法:本

9、算法是通过文件的基本操作来实现,具体如下;/文件读取操作printf(请输入文件名: );scanf(%s,filename);if(fp=fopen(filename,rb)=NULL)printf(打开文件失败!n);elsewhile(ReadFromFile(e)InsertAscend(T,e);fclose(fp);/文件保存操作printf(请输入文件名: );scanf(%s,filename);if(fp=fopen(filename,wb)=NULL)printf(打开文件失败!n);elseListTraverse(T,WriteToFile);fclose(fp);四、

10、 调试分析本实验在调试中遇到的主要问题如下:1. 刚开始,采用vs2012编译器来写程序,写完之后在程序运行过程中发现从来没有见过的错误,调不出黑框,而且在请教他人以及在网上搜索教程之后仍无法debug,从而导致初期调试失败。之后换了另一个编译器,才发现是原来编译器的出现了链接错误。在纠正了一些小错误之后,终于可以调试。2. 首先遇到的问题便是实现命令“1”。先是尝试将读入的学生信息直接插入链表,发现与命令“3”可能会有重复,在查阅资料后,采用了结构数组的储存形式,尝试先将学生信息储存到结构数组中,然后将其插入链表,此算法容易实现。问题的关键在于用什么样的方式控制输入的结束以及输入的格式,在进

11、行了采用循环、eof结束符等等尝试之后,才探索出其实连用scanf即可实现。解决了这个问题,剩下的问题就基本好解决了,因为所有的命令都死建立在命令“1”上的。3. 关于链表的操作有基本的格式,因此在实现命令“3”“4”“5”“6”“7”“8”“9”没有出现太大的困难。4. 另一个棘手的问题便是关于文件的操作和处理。之前对文件的接触较少,因此在文件操作这方面一直是短板,好在查阅资料之后,能够实现了基本的文件操作,也符合了实验要求,达到了实验目的。五、 测试结果初始界面:命令“1”可以每次录入1个学生信息并将其保存:命令“3”添加新的学生信息并将其保存:命令“4”实现通过姓名对学生信息的查询:命令

12、“5”实现通过学号对学生信息的查询:命令“6”实现通过姓名对学生信息的修改:(可用命令“10”实时查看当前学生信息)命令“7”实现通过学号对学生信息的修改:命令“8”实现通过姓名对学生信息的删除:命令“9”实现通过学号对学生信息的删除:命令“10”实现显示所有学生信息功能:命令“11”实现对学生信息的保存,文件将会被保存在当前工程目录下:命令“2”实现对已保存学生信息文件的读取:至此,本实验所有功能都实现。六、 附录本实验源代码如下:#include#include#include#include#include#include#include#define TRUE 1#define FAL

13、SE 0#define OK 1#define ERROR 0#define INFEASIBLE -1#define NAMELEN 20#define STUDNUM 1000#define ADDRESSLEN 30using namespace std;typedef int Status;/定义节点信息struct studchar nameNAMELEN;long long num;char sex;int age;char tel20;char addressADDRESSLEN;typedef struct stud ElemType;/线性表的单链表存储结构struct LN

14、odeElemType data;LNode *next;typedef struct LNode *LinkList; /另一种定义LinkList的方法FILE *fp;/文件操作Status InitList(LinkList &L) /* 操作结果:构造一个空的线性表L */L=(LinkList)malloc(sizeof(LNode); /* 产生头结点,并使L指向此头结点 */if(!L) /* 存储分配失败 */exit(OVERFLOW);L-next=NULL; /* 指针域为空 */return OK;Status ListTraverse(LinkList L,void(*vi)(ElemType)/* vi的形参类型为ElemType*/ /* 初始条件:线性表L已存在。操作结果

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 商业/管理/HR > 经营企划

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号