实 验 报 告年级 班号 学号 姓名实验名称: 第一次实验:简单学生管理系统实验日期 2016年11月25日计算机科学与技术系2016年制一、实验环境Windows32位系统Microsoft Visual C++二、实验目的掌握链表的使用三、实验内容用单向链表实现的简单学生管理系统四、数据结构与算法思想描述对单链表的增删查改五、程序清单/* 函数信息:菜单选项void Menu();初始化链表void InitLink(node *head);输出单个学生信息void SingleShow(node *p);尾插法node* AddLink(node *p,char *num);建立链表,并输入学生信息。
node *CreateLink(node *head);查找学生信息,查找则返回查找位置前一个点node *SearchLink(node *head, char *num);增加学生信息,先进行查找,若已有则提示用户是否修改,否则增加void InsertLink(node *head, char *num);修改学生信息,先进行查找,若已有则提示用户修改,否则退出void ModifyLink(node *head, char *num);删除学生信息void DeleteLink(node *head, char *num);显示所有学生信息void Display(node *head)*/#include<iostream>#include<stdio.h>#include<malloc.h>#include<math.h>#include<string.h>#define MAXM 50 //学生管理系统名字学号成绩的最大字节数#define Tip "\t\tName\t\tNumber\t\tScore\n"int lenthLink = 0; //链表的长度typedef struct node{char name[MAXM];char number[MAXM];char score[MAXM];struct node *next;}node;int len = sizeof(node);//菜单选项void Menu(){printf("\n*******************************************************\n");printf(" 请输入选项:\n");printf(" 1、建立学生管理系统\n");printf(" 2、查找学生信息\n");printf(" 3、删除学生信息\n");printf(" 4、增加学生信息\n");printf(" 5、修改学生信息\n");printf(" 6、显示所有学生信息\n");printf(" 0、退出学生管理系统\n");printf("*******************************************************\n"); }//初始化链表void InitLink(node *head){lenthLink = 0;head->next = NULL;}//输出单个学生信息void SingleShow(node *p){printf("\t\t%s\t\t",p->name);printf("%s\t\t",p->number);printf("%s\n",p->score);}//尾插法node* AddLink(node *p,char *num)p->next = (node *)malloc(len);p = p->next;p->next = NULL;strcpy(p->number,num);printf("请输入学生姓名:\n");getchar();scanf("%s",p->name);printf("请输入学生成绩:\n");getchar();scanf("%s",p->score);lenthLink++;return p;}//建立链表,并输入学生信息。
node *CreateLink(node *head){InitLink(head);char num[MAXM];node *p = head;printf("请输入学生学号,以0结束:\n");getchar();while(scanf("%s",num) && strcmp(num,"0")!=0 && num[0] != '-') //当输入学号为0或负数时结束输入{//尾插法建立p = AddLink(p,num);printf("请输入学生学号,以0结束:\n");}return head;}//查找学生信息,查找则返回查找位置前一个点node *SearchLink(node *head, char *num){node *p = head;if(!head->next){printf("尚未有学生信息!\n");}else{while(p->next){break;p = p->next;}}return p;}//增加学生信息,先进行查找,若已有则提示用户是否修改,否则增加void InsertLink(node *head, char *num){char ch;node *p = SearchLink(head,num);if(p->next){p = p->next;printf("已查找到此学生信息,是否要修改学生信息?(Y/N)\n");printf(Tip);SingleShow(p);getchar();scanf("%c",&ch);if(ch == 'Y'){strcpy(p->number,num);printf("请输入学生姓名:\n");getchar();scanf("%s",p->name);printf("请输入学生成绩:\n");getchar();scanf("%s",p->score);printf("-----修改成功-----\n");}}else{//尾端插入学生信息p = AddLink(p,num);printf("-----添加成功-----\n");}}//修改学生信息,先进行查找,若已有则提示用户修改,否则退出void ModifyLink(node *head, char *num){if(!p->next){printf("系统里面没有此学生信息\n");}else{p = p->next;printf("此学生信息如下:\n");printf(Tip);SingleShow(p);printf("请输入学生姓名:\n");getchar();scanf("%s",p->name);printf("请输入学生成绩:\n");getchar();scanf("%s",p->score);printf("-----修改成功-----\n");}}//删除学生信息void DeleteLink(node *head, char *num){node *p = SearchLink(head,num); //查找到要删除节点的前节点if(p->next){node *q = p->next; //要删除的节点p->next = q->next; //删除节点delete(q);printf("-----删除成功-----\n");}else{printf("系统里面没有此学生信息");}}//显示所有学生信息void Display(node *head){node *p = head->next;system("cls");if(!head->next){Menu();return;}else{printf("\n\n*************************************************************** ***********\n");printf("\t\tThe informations of the student system:\n\t\t(The number of all the students is %d)\n",lenthLink);printf(Tip);while(p){SingleShow(p);p = p->next;}printf("****************************************************************** ********\n");}}int main(){int a;node *head, *p;char num[MAXM];//初始化Menu();head = (node *)malloc(len);p = NULL;//循环菜单while(scanf("%d",&a)&& a>=0){if(!a) //输入0退出程序exit(0);else if(a == 1) //建立学生管理系统{head = CreateLink(head);Display(head);}{printf("请输入要查找的学生学号:\n");getchar();scanf("%s",num);p = SearchLink(head,num);if(p->next){printf(Tip);SingleShow(p->next);printf("-----查找成功-----\n");}elseprintf("系统里面没有此学生信息\n");}else if(a == 3) //删除学生信息{printf("请输入要删除的学生学号:\n");getchar();scanf("%s",num);DeleteLink(head,num);}else if(a ==4) //增加学生信息{printf("请输入学生学号:\n");getchar();scanf("%s",num);InsertLink(head,num);}else if(a == 5) //修改学生信息{printf("请输入要修改的学生学号:\n");getchar();scanf("%s",num);ModifyLink(head,num);}else if(a == 6) //显示学生信息Display(head);printf("\n");system("pause");system("cls");Menu();}return 0;}六、程序执行结果及其分析1、建立学生管理系统建立之后显示信息2、查找已有学生信息查找不存在的学生信息4、增加学生信息5、修改学生信息。