顺序表(数组)实现学生管理系统

此为数据结构算法设计实验题目

  • 头文件

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
void CreateNode();
int  FindNode(struct Student student[], char* name);
void  SearchTheNode();
void DeleteAppoinNode();
void UpdateNode();
void SortNodeByScore();
/*采用顺序存储结构则无需分配为表示表中的数据分配额外的内存空间,系统自动分配即可。*/
  struct  Student {
    char  no[8];      //8位学号
    char  name[20];  //姓名
    int score;       //成绩
}student[50] ;//采用结构体数组方式 
int count = 0;//记录当前数组中有数据的结点个数
/*录入信息*/
void CreateNode()  
{
         char str;
        printf("请输入学号、姓名、成绩\n");
        fflush(stdin);//清除缓冲区
        scanf("%s%s%d", student[count].no, student[count].name, &student[count].score);
        getchar();
        printf("%s同学的信息添加成功!\n", student[count].name);     
        count++;
}

/*删除信息*/
void DeleteAppoinNode()
{
    char name[20];
    int target = 0;
    printf_s("请输入要删除的学生姓名\n");
    scanf_s("%s", name, 20);
    getchar();
    target = FindNode(student, name);

    if (target >=0)
    {
        for (int i = target; i < count; i++)
        {
            student[i] = student[i + 1];
            count--;
        }
        printf_s("删除成功!\n");
    }
    else
    {
        printf_s("查无此人,无法删除!\n");
        return;
    }
}
int  FindNode(struct Student student[], char *name){//由于传进来的是数组的首地址,所以*name则是具体的值
    int i = 0;
    int temp = -1;
    for (i = 0; i < count; i++)
    {
        if (*student[i].name == *name)//如果他们的值相等则返回temp
        {
            temp = i;
            break;
        }
       
    }
    return temp;
};
//查询信息
void  SearchTheNode() {
    char name[20];
    int target = 0;
    printf_s("请输入要查找的学生姓名\n");
    scanf_s("%s", name,20);
    getchar();
    target = FindNode(student, name);
    if (target >=0)
    {
        printf("学号\t姓名\t成绩\n");
        printf("%s\t%s\t%d\n", student[target].no, student[target].name, student[target].score);
    }
    else
    {
        printf_s("未找到相关信息!\n");
        system("pause");
    }
}
/*修改信息*/
void UpdateNode()
{
    char name[20];
    int target = 0;
    printf_s("请输入要修改的学生姓名\n");
    scanf_s("%s", name, 20);
    getchar();
    target = FindNode(student, name);
    if (target >= 0)
    {
        printf("请输入学号、姓名、成绩\n");
        fflush(stdin);//清除缓冲区
        scanf("%s%s%d", student[target].no, student[target].name, &student[target].score);
        getchar();
        printf_s("修改成功!\n");
    }
    else
    {
        printf_s("查无此人,无法修改!\n");
        return;
    }
}
//链表存储
void ReadInfoFromFile()
{
    //1.Open files
    FILE* fp = NULL;
    Student data;
    fp = fopen("student[].txt", "r");
    if (!fp) {
        printf_s("文件打开失败\n");
        exit(0);
    }
    
    //2.Read files
    while (fscanf(fp, "%s\t%s\t%d", student[count].no, student[count].name, &student[count].score) != EOF)
    {
        count++;
    }
    //3.Close files 
    printf("文件写入成功!\n");
    fclose(fp);
}   
//链表的读取
void WriteInfoFromFile()
{
    FILE* fp=NULL;
    fp = fopen("student[].txt", "w");
    
     for(int i=0;i<count;i++)
    { 
        fprintf_s(fp, "%s\t%s\t%d", student[i].no, student[i].name, student[i].score);
      }
     printf_s("数据已保存\n");
     
    fclose(fp);
}
void SortNodeByScore()
{
    struct Student temp;
    for (int i = 0; i < count - 1; i++)
    {
        for (int j = 0; j < count - 1-i; j++)
        {
            if (student[j].score < student[j + 1].score)
            {
                temp = student[j + 1];
                student[j + 1] = student[j];
                student[j] = temp;
            }
        }
    }
    printf_s("排序完成!\n");
 
    
}
//打印链表
void PrintList()
{
    int i=0;
    printf("学号\t姓名\t成绩\n");
    while (i < count)
    {
        printf("%s\t%s\t%d\n", student[i].no, student[i].name, student[i].score);
        i++;
    }
    printf("共有%d名学生\n", count);
    printf("\n");

}



  • 源码
#include"OderList.h"
void Menu()  /*菜单界面*/
{
    printf_s("**********************【学生信息管理系统】**********************\n");
    printf_s("*                     【   0.退出系统   】                     *\n");
    printf_s("*                     【   1.录入信息   】                     *\n");
    printf_s("*                     【   2.删除信息   】                     *\n");
    printf_s("*                     【   3.查找信息   】                     *\n");
    printf_s("*                     【   4.修改信息   】                     *\n");
    printf_s("*                     【   5.显示信息   】                     *\n");
    printf_s("*                     【   6.排序信息   】                     *\n");
    printf_s("****************************************************************\n");

}
void InputChoice()/*用户交互*/
{
    char str;
    int choice;
    printf_s("请输入选项:\n");
    scanf("%d", &choice);
    getchar();       //用于接收缓冲区中的回车
    switch (choice)
    {
    case 0:
        printf_s("已退出\n");
        system("pause");
        exit(0);
        break;
    case 1:
        printf_s("*                     【   1.录入信息   】                     *\n");
        CreateNode();
        printf_s("是否继续添加?(Y/N)\n");
        scanf_s("%c", &str);
        while (str == 'Y')
        {
            CreateNode();
            printf_s("是否继续添加?(Y/N)\n");
            scanf_s("%c", &str);
        }
       
        break;
    case 2:
        printf_s("*                     【   2.删除信息   】                     *\n");
       
        DeleteAppoinNode();
        break;
    case 3:
        printf_s("*                     【   3.查找信息   】                     *\n");
        SearchTheNode();
        break;
    case 4:
        printf_s("*                     【   4.修改信息   】                     *\n"); 
        UpdateNode();
        break;

    case 5:
        printf_s("*                     【   5.显示信息   】                     *\n");
        PrintList();
        break;
    case 6:
        printf_s("*                     【   6.按成绩排序信息   】                     *\n");
        SortNodeByScore();
        break;
    default:
        printf("选择错误,重新输入\n");
        system("pause");
        break;
    }
}
int main(void)
{
    while (1)
    {
        Menu();
        InputChoice();
        system("pause");
        system("cls");//清屏
    }
    system("pause");
    return 0;
}
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 数字20 设计师: CSDN官方博客
应支付0元
点击重新获取
扫码支付

支付成功即可阅读