链表实现学生信息菜单管理系统
- 格式:doc
- 大小:323.00 KB
- 文档页数:8
3、4、7、#include <iostream>using namespace std;//实现线性表的链式存储结构的类型定义typedef int Elemtype;#define OK 1;#define ERROR -1;struct NODE //结点类型{Elemtype elem;NODE *next;};struct LINK_LIST //链表类型{NODE *head;};//典型操作的算法实现//初始化链表Lint InitList(LINK_LIST *L){L->head = (NODE*)malloc(sizeof(NODE)); //为头结点分配存储单元if (L->head) {L->head->next=NULL; return OK;}else return ERROR ;}//销毁链表Lvoid DestoryList(LINK_LIST *L){NODE *p;while (L->head) //依次删除链表中的所有结点{p=L->head; L->head=L->head->next;free(p);}}//清空链表Lvoid ClearList(LINK_LIST *L){NODE *p;while (L->head->next){ //p指向链表中头结点后面的第一个结点p=L->head->next;L->head->next=p->next; //删除p结点free(p); //释放p结点占据的存储空间}}//求链表L的长度int ListLength(LINK_LIST L){NODE *p;int len;len=0;for(p=L.head;p->next!=NULL; p=p->next)len++ ;return(len);}// 判链表L空否。
C语言程序设计实验实验报告7实验名称:链表实现学生信息管理系统实验目的:通过设计链表实现学生信息管理系统,掌握链表的操作方法及其应用。
实验内容:设计一个学生信息结构体,包括学号、姓名、性别、年龄和成绩五个成员变量,并选择链式结构存储这些数据。
实现以下功能:1. 添加学生信息:从键盘输入学号、姓名、性别、年龄和成绩等信息,添加到链表中。
2. 删除学生信息:从链表中删除指定学号的学生信息。
5. 按成绩排序:按学生的成绩从高到低排序,并输出所有学生的信息。
7. 退出程序:退出学生信息管理系统。
实验方法:1. 设计学生信息结构体,定义链表节点结构体,并编写初始化链表和销毁链表的函数。
2. 编写添加学生信息函数,新建链表节点并插入链表末尾。
3. 编写删除学生信息函数,根据学号查找需要删除的节点,先将该节点从链表中删除,再释放节点空间。
4. 编写修改学生信息函数,根据学号查找需要修改的节点,并修改其成员变量。
6. 编写按成绩排序函数,使用冒泡排序法对链表进行排序,并输出所有学生的信息。
7. 编写输出所有学生信息函数,遍历链表并输出每个节点的信息。
8. 完成学生信息管理系统的主函数,实现菜单及相应功能的选择。
实验结果:依次选择菜单中的各个功能,添加、修改、删除、查找、排序和输出学生信息都能实现。
经测试,程序稳定运行,功能正常,符合需求。
本次实验主要让我们掌握了链式结构的概念、链表节点的定义、链表的初始化、插入、查找、删除和销毁链表的操作方法,以及在实际应用中如何使用链表来实现数据管理。
虽然链表操作相对于数组稍微有些繁琐,但其可以灵活处理数据结构的长度变化,具有更高的可扩展性和更好的操作效率,可以更好的适应各种实际需求。
在实验中,还需要注意节点指针的正确使用、各个函数之间的调用关系和输入输出数据格式的合理选择等问题,以保证程序能够正常运行。
同时,还需要保持认真细致的态度,严格按照实验需求和要求来完成每个步骤,以达到更好的实验效果和运行效率。
实验报告姓名:院系专业:学号:完成日期:2010年11月1日实验题目:基于链表实现的学生信息管理系统◆需求分析:该程序是基于链表实现的学生信息管理系统,可以完成学生数据的录入、添加、删除、修改、排序、查找等多项功能。
输入均要按照提示给出,否则都会有错误提示,用户必须重新输入数据。
◆概要设计本程序通过建立链表的方法,实现系统的基本功能。
◆调试分析通过多次输入正确数据得到结果,来检验程序的正确性。
经过多次该调试方法的运用,本程序编写无误。
◆用户使用说明1.输入的说明:首先弹出提示,即使用学生信息管理系统菜单2.输入一个阿拉伯数字,大小为从0到6的整数,从而得到不同的系统功能。
输入1是录入或者添加学生数据,输入2是删除学生数据,输入3是修改学生数据,输入4是让学生数据按照学号大小排列,输入5是通过不同的关键词查找学生数据,输入6是显示目前所有储存好的学生数据,输入0是退出该系统。
3.当输入5时,弹出查找菜单:输入一个阿拉伯数字,大小为从0、7到9的整数,从而得到不同的系统功能。
输入7是通过学生学号查找学生信息,输入8是通过学生姓名查找,输入9是通过学生性别查找学生信息,输入0是退出系统。
4.输入一个字母,y或者n。
输入y是继续录入学生数据;输入n是退出添加功能,返回管理系统主菜单。
输入一个字母,y或者n。
输入y是继续删除学生数据;输入n是退出删除功能,返回管理系统主菜单。
输入一个字母,y或者n。
输入y是继续修改学生数据;输入n是退出修改功能,返回管理系统主菜单。
输入一个字母,y或者n。
输入y是继续查找学生数据;输入n是退出查找功能,返回管理系统主菜单。
测试结果1.输入1时:可以录入或者添加学生数据分别输入学生信息,学号:09388187,姓名:邓宇婷,性别:女。
数据录入成功!2.数据录入成功时,学生数据将存储入文件d:\\document中:①输入y时,继续数据的录入:②输入n时,重新返回信息管理系统菜单:3.输入2时,根据学生学号删除学生信息:数据删除成功!如果该学号学生不存在:系统提示该输入错误!4.输入3时,根据学生学号修改学生信息:数据修改成功!如果该学号学生不存在:系统提示该输入错误!5.输入4时,学生数据根据学生学号由小到大排列:6.输入5时,弹出查找菜单:①输入7时,根据学生学号查找学生信息:数据查找成功!如果该学号学生不存在:系统提示该输入错误!②输入8时,根据学生姓名查找学生信息:数据查找成功!如果该输入姓名的学生不存在:系统提示该输入错误!③输入9时,根据学生性别查找学生信息:数据查找成功!7.输入6时,输出目前所有储存的学生信息:8.当输入错误指令时,有错误提示:输入错误时,弹出提示,重新输入指令!◆实验心得(具体内容不作硬性要求)该实验是通过链表实现学生信息管理系统的各个功能,在编译过程中,发现了很多关于程序健壮性的问题,在解决这些问题上,不仅提高了自己编程的能力,更加完善了对程序的各种要求。
软件学院项目报告书课程:专业实训项目名称: 学生信息管理系统专业年级: 软件工程Java2级姓名: ××学号: ×××××指导教师: ××2011年06月14日目录第1章问题描述 (2)1.1 课题背景 (2)1.2需求分析 (3)1.2.1 功能需求 (3)1.2.2 性能需求 (4)1.3本章小结 (4)第2章总体设计 (5)2.1系统介绍 (5)2.2主程序执行流程图 (6)第3章代码设计 (7)3.1程序运行结果截图 (7)3.2程序源代码 (11)3.3本章小结 (17)第4章总结 (18)参考文献 (19)第1章问题描述1.1 课题背景管理系统是使用电子计算机执行管理和决策功能的服务系统,是六十年代以后,随着系统科学,信息技术以及计算机科学的进展,适应现代化管理的需要而形成的一门边缘学科。
它是将计算机硬件,软件,人工规程,管理制度,决策模拟以及管理人员等组合在一起的一个人--机系统。
学生信息管理系统,是针对目前学生信息处理工作的实际情况,结合数据技术,设计开发的学生信息管理系统;能够实现创建、添加、插入、排序、查找、修改学生信息等。
学生信息管理系统是典型的信息管理系统,其开发主要包括前端应用程序的开发和后台数据库的建立和维护两个方面。
对前者要求应用功能完备,容易使用,界面友好等;而对后者则要求建立起数据库一致性和完整性强,数据安全性好的数据库。
学生信息管理系统是教育单位不可缺少的部分,它的内容对于学校的决策者和管理者来说至关重要,能够为学校的管理者提供充足的学生信息和快捷的查询手段。
1.2 需求分析1.2.1 功能需求(1)本系统具有很强的可靠行,可以对录入的学生信息进行效验,对数据进行修改、删除,可以方便管理员的修改与维护。
(2)本系统操作方便、灵活、简单。
操作人员只需录入学生的基本信息和考试成绩的数据。
#include<stdio.h>#include<stdlib.h>#include<conio.h>#include<windows.h>#include<string.h>#define LEN sizeof(struct student)#define DAT_FILENAME "Information.txt"/**********************定义数据结构********************/struct date{i nt year;i nt month;i nt day;};struct student{i nt ID;c har Name[8];i nt age;c har xb;c har telephone[15];c har address[40];s truct date birthday;c har email[40];s truct student *next;};/*************************函数原型*********************/void DispMainMenu();void DisplayInformation(struct student *head);struct student *FindstudentID(struct student *head,int findID);struct student *FindstudentName(struct student *head,char findname[]);struct student *InformationInput(struct student *head);void QueryInformation(struct student *head);struct student *EditInformation(struct student *head);struct student *Insert(struct student *head,struct student *p);void Save(struct student *head);struct student *Read(struct student *head);struct student *Delete(struct student *head,int findID);struct student *Add(struct student *head);void Help();/************************显示主菜单***************************/void DispMainMenu(){p rintf("*********************************学生信息管理系统******************************\n");p rintf("\n");p rintf("\t\t\t\t1--信息录入\n");p rintf("\n");p rintf("\t\t\t\t2--信息修改\n");p rintf("\n");p rintf("\t\t\t\t3--信息查询\n");p rintf("\n");p rintf("\t\t\t\t4--保存数据到文件\n");p rintf("\n");p rintf("\t\t\t\t5--打开数据文件\n");p rintf("\n");p rintf("\t\t\t\t6--文件追加\n");p rintf("\n");p rintf("\t\t\t\t7--帮助\n");p rintf("\n");p rintf("\t\t\t\t0--退出\n");p rintf("\n");p rintf("友情提示:初次使用请先阅读帮助\n");p rintf("********************************************************************* **********\n");p rintf("请选择(0-7):");/*显示主菜单*/}/*************************************帮助**************************************************/void Help(){p rintf("\n\t\t\t欢迎进入帮助系统!\n\n");printf("\t1.请按照主菜单提示选择所需执行功能的数字代号!\n");p rintf("\t2.所有文件请按照规范输入\n");p rintf("\t3.刚开始执行程序时若需要文本文件里的数据,请先进行读取文件信息!\n");p rintf("\t4.修改信息以后,请切记需要保存!\n");p rintf("\n");}/***********************显示所有学生信息**********************/void DisplayInformation(struct student *head){s truct student *p;p rintf("*******************************************************************************");p rintf("\n学号\t姓名\t年龄\t性别\t 电话\t\t地址\t 出生年月\t email\n");p=(struct student *)malloc(LEN);p=head;i f(head!=NULL)while(p!=NULL){printf("%-d\t%-s\t%-d\t",p->ID,p->Name,p->age);printf("%-c\t%-s\t%-s\t",p->xb,p->telephone,p->address);printf("%-d %d %d",p->birthday.year,p->birthday.month,p->birthday.day);printf("\t%-s\n",p->email);p=p->next;}e lseprintf("无数据\n");}/**************************查找指定学号的学生信息******************************/struct student *FindstudentID(struct student *head,int findID){s truct student *p;p=(struct student *)malloc(LEN);p=head;i f(head!=NULL)while(p!=NULL){if(p->ID==findID)break;p=p->next;}e lseprintf("无数据\n");r eturn p;}/***************************查找指定姓名的学生信息**********************/struct student *FindstudentName(struct student *head,char findname[]){s truct student *p;p=(struct student *)malloc(LEN);p=head;i f(head!=NULL)while(p!=NULL){if(strcmp(p->Name,findname)==0)break;p=p->next;}elseprintf("无数据\n");r eturn p;}/********************学生信息录入**********************************/ struct student *InformationInput(struct student *head){i nt number,i;s truct student *p;p=(struct student *)malloc(LEN);p rintf("\n请输入本次录入的学生人数:");s canf("%d",&number);f or(i=0;i<number;i++)/*输入number 个学生的信息*/{printf("请输入第%d个学生的学号(八个字符以内):",i+1);scanf("%d",&p->ID);printf("\t\t\t 姓名:\t");scanf("%s",p->Name);printf("\t\t\t 年龄:\t");scanf("%d",&p->age);printf("\t\t\t 性别(男M、女W):");scanf("%s",&p->xb);printf("\t\t\t 电话(八位):\t");scanf("%s",p->telephone);printf("\t\t\t 地址:\t");scanf("%s",p->address);printf("\t\t\t 出生年月:\t");scanf("%d%d%d",&p->birthday.year,&p->birthday.month,&p->birthday.day);printf("\t\t\temail:\t");scanf("%s",p->email);head=Insert(head,p);p=(struct student *)malloc(LEN);}p rintf("\n 您的输入信息是:\n");DisplayInformation(head);r eturn(head);}/**************************学生信息查询*************************/void QueryInformation(struct student *head){c har select;i nt findID;c har findname[8];s truct student *p;p rintf("*********************请选择查询方式*************************\n");p rintf("\t1--按学号查询;\t2--按姓名查询\n");p rintf("************************************************************\n");p rintf("请选择(1-2):");/*显示菜单信息*/s elect=getche();g etch();s witch (select){case'1':printf("\n 按学号查询\n 请输入学生的学号:");scanf("%d",&findID);if((p=FindstudentID(head,findID))!=NULL) /*找到指定学号的学生*/{printf("\n 查找结果如下:\n");printf("\n学号\t姓名\t年龄\t性别\t 电话\t\t地址\t 出生年月\t email\n");printf("%d\t%s\t%d\t",p->ID,p->Name,p->age);printf("%c\t%s\t%s\t",p->xb,p->telephone,p->address);printf("%d %d %d",p->birthday.year,p->birthday.month,p->birthday.day);printf("\t%s\n",p->email);}else /*没有找到*/printf("您输入的学号不存在!\n");break;case'2':printf("\n 按姓名查询\n 请输入学生的姓名:");scanf("%s",&findname);if((p=FindstudentName(head,findname))!=NULL) /*找到指定姓名的学生*/{printf("\n 查找结果如下:\n");printf("\n 学号\t 姓名\t 年龄\t 性别\t 电话\t 地址\t 出生年月\t email\n");printf("%d\t%s\t%d\t",p->ID,p->Name,p->age);printf("%c\t%s\t%s\t",p->xb,p->telephone,p->address);printf("%d %d %d",p->birthday.year,p->birthday.month,p->birthday.day);printf("\t%s\n",p->email);}else /*没有找到*/printf("您输入的姓名不存在!\n");break;default:printf("选择错误!\n");}}/*********************************修改学生信息***********************/struct student *EditInformation(struct student *head){i nt findID;c har select;s truct student *p;p rintf("\n 请输入学生的学号:");s canf("%d",&findID);i f((p=FindstudentID(head,findID))!=NULL) /*找到指定学号的学生*/{printf("*********************请修改方式*************************\n");printf("\t1--修改信息;\t2--删除信息\n");printf("************************************************************\n");printf("请选择(1-2):");select=getche();getch();switch (select){case'1': /*修改信息*/printf("您选择的是修改信息!\n");printf("姓名:%s\n",p->Name);printf("原信息:学号:%d\t 年龄:%d\t 性别:%c\n",p->ID,p->age,p->xb);printf("\t 电话:%s\t 地址:%s\temail:%s\n",p->telephone,p->address,p->email);printf("请输入新信息\n");printf("学号\t");scanf("%d",&p->ID);printf("姓名:\t");scanf("%s",p->Name);printf("年龄:\t");scanf("%d",&p->age);printf("性别(男M、女W):");scanf("%s",&p->xb);printf("电话:\t");scanf("%s",p->telephone);printf("地址:\t");scanf("%s",p->address);printf("出生年月:\t");scanf("%d%d%d",&p->birthday.year,&p->birthday.month,&p->birthday.day);printf("email:\t");scanf("%s",p->email);break;case'2': /*删除信息*/printf("您选择的是删除信息!\n");head=Delete(head,findID);break;}}e lse /*没有找到学号匹配的记录*/printf("您输入的学号不存在!\n");r eturn (head);}/**************************有序插入***************************************/struct student *Insert(struct student *head,struct student *p){s truct student *p0,*p1;i f(head==NULL){head=p;p->next=NULL;return(head);}i f(p->ID<head->ID){p->next=head;head=p;return(head);}p1=head;w hile((p->ID>p1->ID)&&(p1->next!=NULL)){p0=p1;p1=p1->next;}i f(p->ID<p1->ID){p->next=p1;p0->next=p;}e lse{if(p->ID==p1->ID);else{p1->next=p;p->next=NULL;}}r eturn(head);}/*******************************保存数据到文件**************************/void Save(struct student *head){F ILE *fp;s truct student *p;p=head;i f((fp=fopen(DAT_FILENAME,"w+"))!=NULL) /*以W+的方式打开文件*/{while(p!=NULL){fprintf(fp,"%d\t",p->ID);fprintf(fp,"%s\t",p->Name);fprintf(fp,"%d\t",p->age);fprintf(fp,"%c\t",p->xb);fprintf(fp,"%s\t",p->telephone);fprintf(fp,"%s\t",p->address);fprintf(fp,"%d %d %d\t",p->birthday.year,p->birthday.month,p->birthday.day);fprintf(fp,"%s\n",p->email);p=p->next;}/*将链表的内容写入文件*/fclose(fp);}e lseprintf("cannot open file\n");}/***************************打开数据文件************************/struct student *Read(struct student *head){s truct student *p;p=(struct student *)malloc(LEN);F ILE *fp;i f((fp=fopen(DAT_FILENAME,"r"))!=NULL){/*读取文件中的内容到链表中*/while(fscanf(fp,"%d\t",&p->ID)!=EOF){fscanf(fp,"%s\t",p->Name);fscanf(fp,"%d\t",&p->age);fscanf(fp,"%c\t",&p->xb);fscanf(fp,"%s\t",p->telephone);fscanf(fp,"%s\t",p->address);fscanf(fp,"%d %d %d\t",&p->birthday.year,&p->birthday.month,&p->birthday.day);fscanf(fp,"%s\n",p->email);head=Insert(head,p);p=(struct student *)malloc(LEN);}fclose(fp);}e lseprintf("cannot open file\n");r eturn head;}/**************************文件内容追加************************/ struct student *Add(struct student *head){h ead=Read(head);h ead=InformationInput(head);r eturn (head);}/**************************删除信息****************************/struct student *Delete(struct student *head,int findID){s truct student *pre,*p;i f(head->ID==findID){p=head;head=head->next;}e lse{pre=head;p=pre->next;while(p!=NULL&&p->ID!=findID){pre=p;p=p->next;}if(p->ID==findID)pre->next=p->next;}f ree(p);r eturn (head);}/*********************************主函数***************************/void main(){c har select,c;s truct student *head;h ead=NULL;s elect=0;w hile(select!='0'){DispMainMenu();select=getche();getch();switch(select){case'0':printf("\n您选择的是退出!\n");_beep(300,400);continue;case'1':system("cls");printf("\n您选择的是信息录入!\n");head=InformationInput(head);break;case'2':system("cls");printf("\n您选择的是信息修改!\n");head=EditInformation(head);break;case'3':system("cls");printf("\n您选择的是信息查询!\n");QueryInformation(head);break;case'4':system("cls");printf("\n您选择的是保存数据到文件!\n");Save(head);break;case'5':system("cls");printf("\n您选择的是打开数据文件!\n");if((head=Read(head))!=NULL)DisplayInformation(head);break;case'6':system("cls");printf("\n您选择的是文件追加!\n");head=Add(head);break;case'7':system("cls");printf("\n您选择的是帮助!\n");Help();break;default:printf("\n选择错误!请重新选择!\n");}printf("请选择返回主界面或退出!\n"); //选择是否继续printf("主界面:1\t退出:2\t");scanf("%d",&c);while(!(c==1||c==2)){printf("选择错误,请重新选择!");printf("\n主界面:1\t退出:2\t");scanf("%d",&c);}if(c==1)system("cls");else{system("cls");_beep(300,400);printf("\n\t您已安全退出!\n");break;}}}。
《C语言程序设计实训2》报告设计题目:基于链表的学生信息管理系统学院名称:信息科学技术学院专业:网络工程班级:二班姓名:学号:指导教师:提交日期:一、 实验内容:编写并调试程序,实现学校各专业班级学生信息的管理。
要求一个工程下多个文件。
main 函数以单独的文件main.cpp 存放。
在头文件student.h 中定义学生信息的结构体类型,包括:学号、姓名、专业、班级、3门成绩;和符号常量N (学生数)。
(同一班级的学生可以属于不同的专业,同一专业的学生可以属于不同的班级)。
全局类型的定义如下:二、实验要求:(1) main 函数:以菜单形式将各项功能提供给用户,根据用户的选择,调用相应的函数。
(2) 定义函数STU *CreateList (char * filename ):从二进制文件“studentInfo.dat ”中依次读取12个学生的数据(在文件中学生信息按学号由低到高依次存放),建立带头结点(特殊结点,不放学生信息)的、有序的单链表(链表中各学生信息按学号由低到高依次存放), 返回表头指针。
每次从文件中读一个学生的信息,并将该学生信息插入到链表的表尾。
设置头结点的目的:在链表中第一个学生结点之前插入或者是删除第一个学生结点的时候不必做特殊处理)更灵活的方法:从文件中循环读数据时,根据当前学生信息的next成员的值,决定是否进行下次循环,如果next==NULL,则表明读到最后一个学生信息,循环结束。
(3)定义函数void Output (STU *head):以指向链表头结点的指针为参数,将链表中所有学生的信息表格化输出。
定义函数void OutOneNode(STU *p): 输出参数所指的链表中一个结点的信息。
(4)STU *Max(STU *head):查找总成绩最高的学生,返回指向该学生结点的指针。
考虑特殊情况,找到两个及以上相同最高分同学的情况,如何处理?(5)定义函数STU *Search_num(STU * head ,char *num ):查找指定的学生,返回指向该学生结点的指针。
数据结构单链表应用(简易学生信息管理系统)1这是主文件建立文件“student-main.cpp”粘贴保存#include#include#include#include#include"student-fun.cpp"#define PRINT "%6d %12s %5.2f\n",p->num,p->name,p->score //定义输出格式#define PRINTF " 学号姓名成绩\n"char cmd;int num;lklist L;void jiemian(){ system("cls");printf("\n***************************************************** ****************** *");printf("\n****** 欢迎使用简易班级学生信息系统********");printf("\n**************");printf("\n******i--增加学生d--删除学生q--退出系统********");printf("\n****** f--查询c--修改l--列出所有学生信息********");printf("\n***************************************************** ****************** *\n");}void ReadCommand(){do {printf("\n 请根据提示输入命令: ");fflush(stdin); //清除文件缓冲区,文件以写方式打开时将缓冲区内容写入文件scanf("%c",&cmd);} while (cmd!='i'&&cmd!='d'&&cmd!='l'&&cmd!='q'&&cmd!='f'&&c md!='c');}void Interpret()switch(cmd){case 'i': insert_lklist(L); break;case 'd': del_lklist(L);break;case 'l': list_lklist(L); break;case 'f': find_lklist(L);break;case 'c': cor_lklist(L);break;case 'q': exit(0);}}void main(){L=initial_lklist();do { jiemian();ReadCommand();Interpret();system("pause"); //暂停,按任意键继续。
C语⾔链表实现学⽣管理系统本⽂实例为⼤家分享了C语⾔链表实现学⽣管理系统的具体代码,供⼤家参考,具体内容如下#include<stdio.h>#include<ctype.h>#include<fstream>#include<stdlib.h>#include<string.h>#include<iostream>using namespace std;typedef struct ndoe{char id[10];char name[10];char sex[3];char num[10];struct node *next;}student;struct Student{student data;struct Student *next;};/********创建学⽣信息**********/Student * insert(Student * head){Student * s,*r;head=(Student *)malloc(sizeof(Student));printf("请输⼊学⽣的个数:");int n;scanf("%d",&n);r=head;printf("按照“学号姓名性别(M or G) ⼿机号”的形式输⼊每个学⽣的信息\n");for(int i=0;i<n;i++){s=(Student *)malloc(sizeof(Student));/*scanf("%s",s->data.id);scanf("%s",s->);scanf("%s",s->data.sex);scanf("%s",s->data.num);*/scanf("%s%s%s%s",s->data.id,s->,s->data.sex,s->data.num);r->next=s;r=s;}r->next=NULL;printf("录⼊成功\n");return head;}/********增加学⽣************/void add(Student *head){Student *s;s=head->next;while(s->next!=NULL)s=s->next;Student *ad=(Student *)malloc(sizeof(Student));ad->next=NULL;s->next=ad;//printf("输⼊新学⽣的信息:\n");scanf("%s%s%s%s",ad->data.id,ad->,ad->data.sex,ad->data.num);printf("添加成功\n");return ;}/*************修改学⽣信息********************/void change(Student * head){printf("输⼊1,按学号搜索学⽣,并修改改学⽣的信息\n");printf("输⼊2,按姓名搜索学⽣,并修改改学⽣的信息\n");Student * s;int n;scanf("%d",&n);switch(n){case 1:{printf("请输⼊学号:");char number[10];scanf("%s",number);s=head->next;while(s!=NULL){if(strcmp(s->data.id,number)==0){printf("请输⼊要修改的信息:");char phone[10];scanf("%s",phone);strcpy(s->data.num,phone);printf("修改成功\n");break;}s=s->next;}break;}case 2:{printf("请输⼊姓名:");char nam[10];scanf("%s",&nam);s=head->next;while(s!=NULL){if(strcmp(s->,nam)==0){printf("请输⼊要修改的信息:");char phone[10];scanf("%s",phone);strcpy(s->data.num,phone);printf("修改成功\n");break;}s=s->next;}break;}}return ;}/**********删除学⽣信息******************/void del(Student * head){printf("输⼊1,按学号搜索学⽣,并删除该学⽣的信息\n"); printf("输⼊2,按姓名搜索学⽣,并删除该学⽣的信息\n"); Student * s,*r;int n;scanf("%d",&n);switch(n){case 1:{printf("请输⼊学号:");char number[10];scanf("%s",number);s=head->next;r=head;while(s!=NULL){if(strcmp(s->data.id,number)==0){r->next=s->next;free(s);printf("删除成功\n");break;}r=s;s=s->next;}break;}case 2:{printf("请输⼊姓名:");char nam[10];scanf("%s",&nam);s=head->next;r=head;while(s!=NULL){if(strcmp(s->,nam)==0){r->next=s->next;free(s);printf("删除成功\n");break;}r=s;s=s->next;}break;}}return ;}/**********查询学⽣的信息**********************/void check(Student * head){printf("输⼊1,按学号搜索学⽣,并展⽰该学⽣的信息\n");printf("输⼊2,按姓名搜索学⽣,并展⽰该学⽣的信息\n");Student * s,r;int n;scanf("%d",&n);switch(n){case 1:{printf("请输⼊学号:");char number[10];scanf("%s",number);s=head->next;while(s!=NULL){if(strcmp(s->data.id,number)==0){printf("%s %s %s %s\n",s->data.id,s->,s->data.sex,s->data.num); break;}s=s->next;}break;}case 2:{printf("请输⼊姓名:");char nam[10];scanf("%s",&nam);s=head->next;while(s!=NULL){if(strcmp(s->,nam)==0){printf("%s %s %s %s\n",s->data.id,s->,s->data.sex,s->data.num); break;}s=s->next;}break;}}if(s==NULL)printf("该学⽣不存在\n");return ;}int main(){Student *head=NULL;Student *a;printf("***欢迎进⼊学⽣管理系统***\n");printf("***1:请录⼊学⽣信息***\n");printf("***2:请修改学⽣信息***\n");printf("***3:请删除学⽣信息***\n");printf("***4:请查询学⽣信息***\n");printf("***5:请添加新学⽣信息**\n");printf("***6: 退出管理系统 ***\n");printf("*************************\n");printf("请输⼊命令:");int n;while(scanf("%d",&n)&&n!=6){switch(n){case 1:{printf("请录⼊学⽣信息:\n");head=insert(a);break;}case 2:{printf("请改学⽣信息:\n");change(head);break;}case 3:{cout<<"请删除学⽣信息:"<<endl;del(head);break;}case 4:{cout<<"请查询学⽣信息:"<<endl;check(head);break;}case 5:{cout<<"请添加新学⽣信息:"<<endl;add(head);break;}default :break;}printf("请继续输⼊命令:");}Student *s,*r;s=head->next;while(s!=NULL){r=s->next;free(s);s=r;}free(head);return 0;}以上就是本⽂的全部内容,希望对⼤家的学习有所帮助,也希望⼤家多多⽀持。
链表实现学生信息菜单管理
系统
-标准化文件发布号:(9456-EUATWK-MWUB-WUNN-INNUL-DDQTY-KII
实验名称:链表实现学生信息菜单管理系统
一、实验目的:
1、掌握顺序表结构的实现方式;
2、掌握顺序表常用算法的实现;
3、熟悉利用顺序表解决问题的一般思路;
4、参照给定的顺序表的程序样例,验证给出的顺序表的常见算法,领会顺序表结构的优点和不足。
二、实验内容:
1、编程完成顺序表的基本操作:建立、删除、查找及显示。
2、按要求完成学生名册管理程序的编写和调试。
三、实验结果:
1、创建:
2、删除:
3、添加:
4、退出:
四、实验中遇到的问题及解决方法:
问题一:
地址传递出错
解决方案:
参考网上资料代码。
问题二:
创建时,停止暂停
解决方案:
输入学号为零时停止输入
问题三:
创建时需要学号姓名成绩都为零才能停止创建
解决方案:占无解决方案
五、实验心得体会:
链表中指针的使用要注意指针的性质,确保地址正确传递,要改变的值正确改变。
在编程过程中很容易出现地址传递出错的问题,需要有耐心慢慢排查故障,解决故障。
通过本次实验让我明白了链表的操作使用,加深了我对链表的理解,同时也通过不断地练习提高了编程能力,链表的掌握对于这门课程而言十分重要,在今后的学习中,我需要更加努力,才能更好的掌握和使用链表。
源代码:
#include <stdlib.h>
#include <stdio.h>
#define NULL 0
#define LEN sizeof(struct student)
struct student
{
int num;
char name[20];
float score;
struct student *next;
};
int n;
struct student *Create()
{
struct student *head;
struct student *p1 = NULL;
struct student *p2 = NULL;
n = 0;
p1 = (struct student *) malloc (LEN);
p2 = p1;
if(p1==NULL)
{
printf ("\nCann't create it, try it again in a moment!\n");
return NULL;
}
else
{
head = NULL;
printf("请输入第%d个学生学号姓名成绩:\n",n+1);
scanf("%d %s %f",&(p1->num),p1->name,&(p1->score));
}
while(p1->num != 0)
{
n += 1;
if(n == 1)
{
head = p1;
p2->next = NULL;
}
else
{
p2->next = p1;
}
p2 = p1;
p1 = (struct student *) malloc (LEN);
printf("请输入第%d个学生学号姓名成绩:\n",n+1);
scanf("%d %s %f",&(p1->num),p1->name,&(p1->score));
}
p2->next = NULL;
free(p1);
p1 = NULL;
return head;
}
void Print(struct student *head)
{
struct student *p;
printf ("\nNow , These %d records are:\n", n);
p = head;
if(head != NULL)
{
printf("head is %o\n", head);
do
{
printf ("%d\t%s\t%5.1f\n", p->num, p->name, p->score);
p = p->next;
}
while (p != NULL);
}
}
struct student *Del (struct student *head, int num)
{
struct student *p1;
struct student *p2;
if (head == NULL)
{
printf ("\nList is null!\n");
return head;
}
p1 = head;
while (p1->num != num && p1->next != NULL)
{
p2 = p1;
p1 = p1->next;
}
if(p1->num==num)
{
if (p1 == head)
{
head = p1->next;
}
else
{
p2->next = p1->next;
}
free (p1);
p1 = NULL;
printf ("\ndelete %ld success!\n", num);
n -= 1;
}
else
{
printf ("\n%ld not been found!\n", num);
}
return head;
}
struct student *Insert (struct student *head, int num, struct student *node) {
struct student *p1;
if (head == NULL)
{
head = node;
node->next = NULL;
n += 1;
return head;
}
p1 = head;
while(p1->num != num && p1->next != NULL)
{
p1 = p1->next;
}
if (p1->num==num)
{
node->next = p1->next;
p1->next = node;
n += 1;
}
else
{
printf ("\n%ld not been found!\n", num);
}
return head;
}
int main(void)
{
struct student *head;
struct student *stu;
int thenumber;
int command,flag=1;
while(flag)
{
printf("1、创建管理系统\n2、删除学生信息\n3、添加学生信息\n4、退出\n");
printf("当学号姓名成绩都为0时,停止创建\n");
printf("输入指令:");
scanf("%d",&command);
switch(command)
{
case 1:
{
head = Create();
Print(head);
break;
}
case 2:
{
printf("\nWhich one delete: ");
scanf("%d",&thenumber);
head = Del(head,thenumber);
Print(head);
break;
}
case 3:
{
stu = (struct student *)malloc(LEN);
printf("请输入第%d个学生学号,姓名,成绩:\n",n+1);
scanf("%d %s %f",&(stu->num),stu->name,&(stu->score));
printf("\n插到哪个学号后面: ");
scanf("%d",&thenumber);
head = Insert(head,thenumber,stu);
Print(head);
break;
}
case 4:flag=0;}}}。