/*
* Copyright (c) 2015, 烟台大学计算机与控制工程学院
* All rights reserved.
* 文件名称:main.cpp
* 作者:朱国荣
* 完成日期:2015年12月25日
* 版本号:vc++6.0
*
* 问题描述:学生信息管理系统,实现信息的输入,显示,查找,删除与插入
* 输入描述:
*/
代码:
#include "stdio.h" #include "stdlib.h" #include <stdlib.h> typedef struct student { int id; //学号 char name[20]; //姓名 char sex; //性别(g或b;g为女,b为男) int age; //年龄 int score; //成绩 struct student *next; }student; student *head=NULL; int length; //链表的长度 void create() { student *p1,*p2; length=0; p1=(student *)malloc(sizeof(student)); p1->id=-1; if(head==NULL) head=p1; printf("请输入学生的学号、姓名、性别、年龄、成绩信息:\n"); while(1) //学号为0的时候退出 { p2=(student *)malloc(sizeof(student)); scanf("%d %s %c %d %d",&p2->id,p2->name,&p2->sex,&p2->age,&p2->score); //输入学生信息 if(p2->id==0) { printf("链表创建完成!\n"); break; } length++; //链表的长度 p1->next=p2; p2->next=NULL; p1=p1->next; } return ; } void display() { student *p=head->next; printf("链表中所有的学生信息如下:\n"); while(p!=NULL) { printf("%d %s %c %d %d\n",p->id,p->name,p->sex,p->age,p->score); p=p->next; } return ; } void search() { int num; student *p=head->next; printf("需要查找的学生学号为:"); scanf("%d",&num); while(p!=NULL) { if(p->id==num) { printf("学号为%d的学生的信息如下:\n",num); printf("%d %s %c %d %d\n",p->id,p->name,p->sex,p->age,p->score); return; } p=p->next; } if(p==NULL) printf("无此记录!\n"); return ; } void insert() { int num,i; student *p,*q; p=head; printf("请输入你要插入位置: "); scanf("%d",&num); if(num>length) { printf("找不到要插入的位置\n"); return ; } else { printf("请输入你要插入的学生的学号、姓名、性别、年龄、成绩信息:\n"); q=(student *)malloc(sizeof(student)); scanf("%d %s %c %d %d",&q->id,q->name,&q->sex,&q->age,&q->score); while(p!=NULL) { if(p->id==q->id) { printf("该学号已经存在,无法插入!\n"); return ; } p=p->next; } p=head; for(i=0;i<num;i++) p=p->next; q->next=p->next; p->next=q; length++; printf("插入成功!\n"); return ; } } void Delete() { int num; student *p,*q; q=head,p=head->next; printf("请输入要删除的学生的学号:\n"); scanf("%d",&num); while(p!=NULL) { if(p->id==num) { q->next=p->next; free(p); length--; printf("删除成功!\n"); return ; } p=p->next; q=q->next; } if(p==NULL) { printf("找不到要删除的编号!\n"); return ; } } void menu() { printf("|______________________________________________________________|\n"); printf("| 学生信息管理系统 |\n"); printf("| |\n"); printf("| 0、 退出系统 |\n");//运行结束 printf("| |\n"); printf("| 1、 输入学生信息 |\n");//输入学生成绩(建立链表) printf("| |\n"); printf("| 2、 显示所有学生信息 |\n");//显示学生成绩(显示链表) printf("| |\n"); printf("| 3、 查找某个学生的信息 |\n");//查找学生信息(查找链表中的某个元素) printf("| |\n"); printf("| 4、 删除某个学生的信息 |\n");//删除链表中指定学号的结点 printf("| |\n"); printf("| 5、 在整体中插入某个学生的信息 |\n");//指定的位置上插入一个新结点 printf("|______________________________________________________________|\n"); return ; } void mwnu1() { printf("|______________________________________________________________|\n"); printf("| |\n"); printf("| 请输入学生信息 |\n"); printf("| |\n"); printf("|______________________________________________________________|\n"); } void mwnu2() { printf("|______________________________________________________________|\n"); printf("| |\n"); printf("| 显示全部学生信息 |\n"); printf("| |\n"); printf("|______________________________________________________________|\n"); } void mwnu3() { printf("|______________________________________________________________|\n"); printf("| |\n"); printf("| 显示选中学生信息 |\n"); printf("| |\n"); printf("|______________________________________________________________|\n"); } void mwnu4() { printf("|______________________________________________________________|\n"); printf("| |\n"); printf("| 删除选中学生信息 |\n"); printf("| |\n"); printf("|______________________________________________________________|\n"); } void mwnu5() { printf("|______________________________________________________________|\n"); printf("| |\n"); printf("| 插入学生信息 |\n"); printf("| |\n"); printf("|______________________________________________________________|\n"); } int main(void) { int a; menu(); while(1) { printf("请选择相应的功能:"); scanf("%d",&a); switch(a) { case 0: //运行结束 return 0; case 1: //输入学生成绩(建立链表) system("cls"); mwnu1(); create(); menu(); break; case 2: //显示学生成绩(显示链表) system("cls"); mwnu2(); if(head) { display(); menu(); } else { printf("链表为空,请先建立链表!\n"); menu(); } break; case 3: //查找学生信息(查找链表中的某个元素) system("cls"); mwnu3(); if(head) { search(); menu(); } else { printf("链表为空,请先建立链表!\n"); menu(); } break; case 4: //删除链表中指定学号的结点 system("cls"); mwnu4(); if(head) { Delete(); menu(); } else { printf("链表为空,请先建立链表!\n"); menu(); } break; case 5: //指定的位置上插入一个新结点 system("cls"); mwnu5(); if(head) { insert(); menu(); } else { printf("链表为空,请先建立链表!\n"); menu(); } break; default: break; } } system("pause"); return 0; }
运行结果: