文档库 最新最全的文档下载
当前位置:文档库 › 学生宿舍管理系统(单链表)

学生宿舍管理系统(单链表)

实验二:学生信息管理(单链表)

【实验目的】

1. 设计一个学生信息管理系统

2. 掌握用C语言定义单链表结构,并实现其创建、插入、删除等基本操作。

【实验内容】

本次实验通过单链表的基本操作,实现一个简单的学生信息管理系统,包括:学生信息链表的建立、添加学生信息、查询学生信息、删除学生信息、输出所有学生信息。

【实验要求】

本实验是对学生的信息管理作一个简单的模拟,用菜单选择操作方式完成下列功能:

1.学生信息链表的建立

2.插入学生信息

3.查询学生信息

4.删除学生信息

5.输出所有学生信息

0.退出管理系统

【知识要点】

本实验涉及单链表的各种操作,包括单链表的建立、结点的查找、插入、删除等基本运算。链表中插入结点的指针变化,删除p所指结点的指针变化。

【实现提示】

本题实质是建立学生信息线性表,每条信息由学号、姓名、性别与成绩组成,即链表中每个结点由5个域组成,分别为:学号、姓名、成绩、存放下一个结点地址的next域。要求完成的五项功能可写成五个函数(0项功能由菜单程序实现),登记学生成绩对应建立学生单链表的功能,2、3、4这三个功能分别对应单链表的插入、查询与删除三大基本操作。【代码】

#include

#include

#include

typedef struct{

char num[8];/*学号*/

char name[9];/*姓名*/

char gender[3];/*性别*/

int score;/*成绩*/

}DataType;

typedef struct node{

DataType data;

struct node *next;

}ListNode;

typedef ListNode *LinkList;

LinkList head;

/*函数说明*/

int menu_select();

LinkList createList(void);

void printList(LinkList head);

int insertNode(LinkList head,ListNode *p,int i);

ListNode *findList(LinkList head);

void delNode(LinkList head);

void main()

{

ListNode *p;

int i;

while(1){

switch(menu_select())

{

case 1:

printf("**************************************\n");

printf(" 学生信息链表的建立\n");

printf("***************************************\n");

head = createList();

break;

case 2:

printf("**************************************\n");

printf("添加学生信息\n");

printf("**************************************\n");

printf("\n学号(8)姓名(8)性别成绩\n");

printf("**************************************\n");

p=(ListNode *)malloc(sizeof(ListNode));

scanf("%s%s%s%d",p->data.num,p->https://www.wendangku.net/doc/10291036.html,,p->data.gender,&p->data.score);

printf("请输入要插入的位置:\n");

fflush(stdin);

scanf("%d",&i);

if(insertNode(head,p,i)==-1)

{

printf("没有合适的插入点!\n");

}

else

{

printf("结点已经插入\n");

}

break;

case 3:

printf("**************************************\n");

printf("查询学生信息\n");

printf("**************************************\n");

p=findList(head);

if(p!=NULL)

{

printf("\n学号(8)姓名(8)性别成绩\n");

printf("-------------------------------------------\n");

printf("%s,%s,%s,%d\n",p->data.num,p->https://www.wendangku.net/doc/10291036.html,,p->data.gender,p->data.score);

printf("------------------------------------------------------------------\n");

}

else

printf("没查到要查询的学生信息!");

break;

case 4:

printf("**************************************\n");

printf("删除学生信息\n");

printf("**************************************\n");

delNode(head);

break;

case 5:

printf("**************************************\n");

printf("输出所有学生信息\n");

printf("**************************************\n");

printList(head);

break;

case 0:

printf("再见!\n");

getchar();

return;

}

}

}

int menu_select()

{

int sn;

printf("\n 学生信息管理系统\n");

printf("=========================================\n");

printf(" 1.学生信息链表的建立\n");

printf(" 2.插入学生信息\n");

printf(" 3.查询学生信息\n");

printf(" 4.删除学生信息\n");

printf(" 5.输出所有学生信息\n");

printf(" 0.退出管理系统\n");

printf("==========================================\n");

printf("请选择0-5:\n");

for(;;)

{

scanf("%d",&sn);

if (sn<0 || sn>5)

printf("\n\t输入错误,重选0-5\n");

else

break;

}

return sn;

}

LinkList createList(void)

{

ListNode *p,*rear;

char flag = 'y';

head = (ListNode *)malloc(sizeof(ListNode));

rear = head;

while(flag=='y' || flag=='Y')

{

p=(ListNode *)malloc(sizeof(ListNode));

printf("\n学号(8)姓名(8)性别成绩\n");

scanf("%s%s%s%d",p->data.num,p->https://www.wendangku.net/doc/10291036.html,,p->data.gender,&p->data.score);

rear->next = p;

rear = p;

printf("继续输入吗?(y/n):");

flag = getchar();

}

rear->next = NULL;

return head;

}

void printList(LinkList head)

{

ListNode *p;

p=head->next;

printf("\n学号(8)姓名(8)性别成绩\n");

printf("-------------------------------------------\n");

while(p!=NULL)

{

printf("%s,%s,%s,%d\n",p->data.num,p->https://www.wendangku.net/doc/10291036.html,,p->data.gender,p->data.score);

printf("------------------------------------------------------------------\n");

p=p->next;

}

}

int insertNode(LinkList head,ListNode *p,int i)

{

ListNode *p1;

int j=1;

p1=head;

if(p1->next==NULL)/*空表:插入作为第一个结点*/

{

if(i==0)

{

p1->next=p;

p->next=NULL;

}

else

return -1;

}

while((j<=i-1)&&(p1!=NULL))/*找到第i-1个结点,p1指向该结点*/ {

p1=p1->next;

j++;

}

if(p1==NULL)/*没有合适的插入点*/

return -1;

p->next=p1->next;

p1->next=p;

return 0;

}

ListNode *findList(LinkList head)

{

ListNode *p;

char num[8];

char name[9];

int xz;

printf("===========================\n");

printf("1、按学号查询\n");

printf("2、按姓名查询\n");

printf("===========================\n");

printf(" 请选择:");

p=head->next;

scanf("%d",&xz);

if (xz==1)

{

printf("请输入要查找学生的学号:");

scanf("%s",num);

while(p && strcmp(p->data.num,num)!=0)

p=p->next;

}

else

if (xz==2)

{

printf("请输入要查找学生的姓名:");

scanf("%s",name);

while (p && strcmp(p->https://www.wendangku.net/doc/10291036.html,,name)!=0)

p=p->next;

}

return p;

}

void delNode(LinkList head)

{

ListNode *p,*q;

printf("请先查找您要删除的学生信息:\n");

p=findList(head);

if(p==NULL)

{

printf("没有查到要删除的学生信息");

return;

}

q=head;

while(q!=NULL && q->next!=p) q=q->next;

q->next=p->next;

free(p);

printf("该学生信息已被删除!\n");

}

相关文档
相关文档 最新文档