数据结构课程设计—学生信息管理系统

问题描述:

/*   
* Copyright (c)2015,烟台大学计算机与控制工程学院   
* All rights reserved.   
* 文件名称:aaaa.cbp   
* 作    者:张芸嘉  
* 完成日期:2015年12月24日   
* 版 本 号:v1.0   
   
* 问题描述:   本项目为学生信息管理系统,设计一个可以管理学生信息的软件系统。
   
* 输入描述:学生信息
* 程序输出:   
*/    
架构:

数据结构课程设计—学生信息管理系统_第1张图片

代码:

头文件 list.h

/***********************************************************
* 版权所有 (C)2015, 张芸嘉
*
* 文件名称:xxxxgl.cbp
* 文件标识:无
* 内容摘要:学生信息管理系统
* 其它说明:无
* 当前版本: V2.0
* 作 者:张芸嘉
* 完成日期: 20151224
*
* 修改记录1:
* 修改日期: 20151222
* 版本号: V1.0
* 修改人: 张芸嘉
* 修改内容:创建
*
* 修改记录2:
* 修改日期: 20151223
* 版本号: V1.1
* 修改人: 张芸嘉
* 修改内容:各模块建立1
*
* 修改记录3:
* 修改日期: 20151224
* 版本号: V1.2
* 修改人:张芸嘉
* 修改内容:各模块建立2
*
* 修改记录4:
* 修改日期: 20151224
* 版本号: V2.0
* 修改人: 张芸嘉
* 修改内容:完善
**********************************************************/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define STUDENT 2

typedef struct student
{
    int num;                      //学号
    char name[20];               //姓名
    int  chinese    ;           //语文成绩
    int English;               //英语成绩
    int math;                 //高数成绩
    struct student *next;    //指向下一个学生的指针
} student;

extern student *head;
extern int length;                    //链表的长度

//函数原型

student *init();               //初始化函数
void create();                 //创建信息
void display();                //显示函数
void searchXH();               //按学号查找信息
void searchXM();               //按姓名查找信息
void insert();                 //插入信息
void Delete();                 //删除信息
void menu();                   //主菜单函数


主函数 main.cpp
/***********************************************************
* 功能描述: 主函数
* 输入参数:
* 输出参数:
* 返回值  : (1)
* 其它说明: 学生信息包括学号、姓名、性别、高数成绩、英语成绩
************************************************************/
#include"list.h"
int main(void)
{
    system("color 1");
    int a;
    menu();
    int choice;
    while(1)
    {

        printf("请选择您需要的功能:");
        scanf("%d",&a);
        switch(a)
        {
        case 0:
            return 0;
        case 1:
            create();
            menu();
            break;
        case 2:
            if(head)
            {
                display();
                menu();
            }
            else
            {
                printf("学生信息为空,请先建立学生信息!\n");
                menu();
            }
            break;
        case 3:
            if(head)
            {
                printf("请选择按学号查找或按姓名查找,若是按学号查找请输入0,按姓名查找请按1\n");
                scanf("%d",&choice);
                if(choice==0)
                {
                    searchXH();
                }
                else
                {
                    searchXM();
                }
                menu();
            }
            else
            {
                printf("学生信息为空,请先建立学生信息!\n");
                menu();
            }
            break;
        case 4:
            if(head)
            {
                Delete();
                menu();
            }
            else
            {
                printf("学生信息为空,请先建立学生信息!\n");
                menu();
            }
            break;
        case 5:
            if(head)
            {
                insert();
                menu();
            }
            else
            {
                printf("学生信息为空,请先建立学生信息!\n");
                menu();
            }
            break;

        default:
            break;
        }
    }
    system("pause");
    return 0;
}
源文件函数 list.cpp

#include"list.h"
int length;
student *head;
student *init()
{
    return NULL;               //返回空指针
}


/***********************************************************
* 功能描述: 添加学生信息
* 输入参数: 学生信息
* 输出参数: 显示学生的信息
* 返回值  : (1)
* 其它说明: 学生信息包括学号、姓名、语文成绩、高数成绩、英语成绩
************************************************************/
void create()
{
    student *p1,*p2;
    length=0;
    int number=0;
    p1=(student *)malloc(sizeof(student));
    p1->num=-1;

    if(head==NULL)
        head=p1;
    printf("请输入学生的学号、姓名、语文成绩、高数成绩、英语成绩:\n");
    while(number<=7)
    {
        p2=(student *)malloc(sizeof(student));
        scanf("%d %s %d %d %d",&p2->num,p2->name,&p2->chinese,&p2->English,&p2->math); //输入学生信息
        if(p2->num==0)
        {
            printf("学生信息建立完成!\n");
            break;
        }
        length++;                            //链表的长度
        p1->next=p2;
        p2->next=NULL;
        p1=p1->next;                       //移动指针,指向下一结点
        number++;
    }
    return ;


}

/***********************************************************
* 功能描述: 显示学生信息
* 输入参数:
* 输出参数: 显示学生的信息
* 返回值  : (1)
* 其它说明: 学生信息包括学号、姓名、语文成绩、高数成绩、英语成绩
************************************************************/
void display()
{
    student *p=head->next;
    printf("链表中所有的学生信息如下:\n");

    while(p!=NULL)
    {
        printf("%d %s %d %d %d\n",p->num,p->name,p->chinese,p->English,p->math);
        p=p->next;
    }
    return ;
}

/***********************************************************
* 功能描述: 按学号查找学生信息
* 输入参数: 学生学号
* 输出参数: 显示学生的信息
* 返回值  : (1)
* 其它说明: 学生信息包括学号、姓名、语文成绩、高数成绩、英语成绩
************************************************************/

void searchXH()
{

    int num_;
    student *p=head->next;
    printf("需要查找的学生学号为:");
    scanf("%d",&num_);

    while(p!=NULL)
    {

        if(p->num==num_)
        {
            printf("学号为%d的学生的信息如下:\n",num_);
            printf("%d %s %d %d %d\n",p->num,p->name,p->chinese,p->English,p->math);
            return;
        }
        p=p->next;
    }
    if(p==NULL)
        printf("无此记录!\n");
    return ;
}

/***********************************************************
* 功能描述: 按姓名查找学生信息
* 输入参数: 学生姓名
* 输出参数: 显示学生的信息
* 返回值  : (1)
* 其它说明: 学生信息包括学号、姓名、语文成绩、高数成绩、英语成绩
************************************************************/
void searchXM()
{
    char na_me[20];
    student *p=head->next;
    printf("需要查找的学生姓名为:");
    scanf("%s",na_me);

    while(p!=NULL)
    {

        if(!(strcmp(p->name,na_me)))
        {
            printf("姓名为%s的学生的信息如下:\n",na_me);
            printf("%d %s %d %d %d\n",p->num,p->name,p->chinese,p->English,p->math);
            return;
        }
        p=p->next;
    }
    if(p==NULL)
        printf("无此记录!\n");
    return ;
}

/***********************************************************
* 功能描述: 指定位置插入学生信息
* 输入参数: 插入位置及学生信息
* 输出参数: 显示插入完成后的学生信息
* 返回值  : (1)
* 其它说明: 学生信息包括学号、姓名、语文成绩、高数成绩、英语成绩
************************************************************/

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 %d %d %d",&q->num,q->name,&q->chinese,&q->English,&q->math);

        while(p!=NULL)
        {
            if(p->num==q->num)
            {
                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 ;
    }
}

/***********************************************************
* 功能描述: 删除学生信息
* 输入参数: 删除学生学号
* 输出参数:
* 返回值  : (1)
* 其它说明: 学生信息包括学号、姓名、语文成绩、高数成绩、英语成绩
************************************************************/

void Delete()
{
    int num_;
    student *p,*q;
    q=head,p=head->next;
    printf("请输入要删除的学生的学号:\n");
    scanf("%d",&num_);

    while(p!=NULL)
    {
        if(p->num==num_)
        {
            q->next=p->next;
            free(p);
            length--;
            printf("删除成功!\n");
            return ;
        }
        p=p->next;
        q=q->next;
    }
    if(p==NULL)
    {
        printf("找不到要删除的学号!\n");
        return ;
    }
}

/***********************************************************
* 功能描述: 主菜单
* 输入参数: 所需功能代号
* 输出参数:
* 返回值  : (1)
* 其它说明: 学生信息包括学号、姓名、语文成绩、高数成绩、英语成绩
************************************************************/

void menu()
{

    system("color 08");
    printf("***************************************************************\n");
    printf("** ︵__╭╭╭╭╭___︵                                 **\n");
    printf("**│                      │                                **\n");
    printf("**│                      │        ╭─────────╮  **\n");
    printf("**│    ●           ●   │       │     欢迎使用       │ **\n");
    printf("**│       ╭──╮       │       │学生信息管理系统^o^ │ **\n");
    printf("**│       │●●│       │   ╭╮╰─────────╯   **\n");
    printf("**│       ╰──╯       │○ ╰╯                         **\n");
    printf("**╰──┬◎───┬◎──╯                                **\n");
    printf("***************************************************************\n");
    printf("|              1、 添加学生信息                                 |\n");
    printf("|              2、 显示学生信息                                 |\n");
    printf("|              3、 查找某个学生信息                             |\n");
    printf("|              4、 删除指定学号的学生                           |\n");
    printf("|              5、 指定的位置上插入学生信息                     |\n");
    printf("****************************************************************\n");

    return ;
}


运行结果:
添加学生信息

数据结构课程设计—学生信息管理系统_第2张图片

显示学生信息

数据结构课程设计—学生信息管理系统_第3张图片

按学号查找学生信息

数据结构课程设计—学生信息管理系统_第4张图片

按姓名查找学生信息

数据结构课程设计—学生信息管理系统_第5张图片

删除指定学号学生信息

数据结构课程设计—学生信息管理系统_第6张图片

指定位置上插入学生信息

数据结构课程设计—学生信息管理系统_第7张图片

知识点总结:

       此程序逻辑结构属于线性结构,存储结构为链式存储结构,程序中包含单链表以及结构体数组等知识点。

学习心得:

       通过这次课程设计让我对链表的结构有了更深的了解,在以后的应用中也会更加熟悉。也让我认识到,想要真正做出一个项目会有很多困难和挫折,需要下很大的功夫。这几天,我深刻体验到了团队的力量,如果没有老师、同学的帮助,我的项目也不会这么顺利的完成。总之,这次课程设计真的让我收获了很多,学到了很多,我相信以后会更好!!!!!




你可能感兴趣的:(数据结构课程设计—学生信息管理系统)