高校学生成绩管理系统1.0

高校学生成绩管理系统1.0,第1张

头部文件

#include
#include
#include
#include

//定义一个学生
typedef struct _Student
{
    char name[20];    //姓名
    int    age;        //年龄
    int stuNum;        //学号
    int score;        //成绩
}Student;

//节点()车厢
typedef struct _Node
{
    Student stu;//学生
    struct _Node* pNext;//指向下一个节点的指针
}Node;


Node *g_pHead = NULL;//头节点

//声明欢迎
void Welcome();
//声明录入学生信息
void InputStudent();
//打印学生信息
void PrintfStudent();
//保存学生信息
void SaveStudent();
//读取学神信息
void ReadStudent();
//统计所有学生人数
int CountStudent();
//查找学生
Node* FindStudent();
//修改学生信息
void ModifyStudent();
//删除学生
void DeleteStudent();

源文件

#include "StudentManagerSystem.h"

int main()
{
    while (1)
    {
        
        Welcome();//欢迎
        
        char ch = getch();//从键盘接受一个字符

        switch (ch)
        {
        case '1'://录入学生信息
            InputStudent();
            break;
        case '2'://打印学生信息
            PrintfStudent();
            break;
        case '3'://保存学生信息
             SaveStudent();
            break;
        case '4'://读取学生信息
            ReadStudent();
            break;
        case '5'://统计所有学生信息
            printf("学生总人数为:%d\n", CountStudent());
            system("pause");    //暂停
            system("cls");        //清屏
            break;
        case '6'://查找学生信息
        {    
            Node* p = FindStudent();
        if (p != NULL)
            printf("学号:%d\t姓名:%s\t年龄:%d\t成绩:%d\n", p->stu.stuNum, p->stu.name, p->stu.age, p->stu.score);
        else
            printf("没有找到该学员\n");
        system("pause");    //暂停
        system("cls");        //清屏
        break;
        }
            break;
        case '7'://修改学生信息
            ModifyStudent();
            break;
        case '8'://删除学生信息
            DeleteStudent();
            break;
        case '0'://退出系统
            printf("Bye Bye!!!\n");
            return 0;
        default:
            printf("你的输入有误,请重新输入\n");
            system("pause");    //暂停
            system("cls");        //清屏
        }
    }
    return 0;
}

void Welcome()//欢迎函数
{
        printf("*************************************************\n");
        printf("*\t欢迎使用高校学生成绩管理系统1.0\t*\n");
        printf("*************************************************\n");
        printf("*\t\t\t请选择功能列表\t\t*\n");
        printf("*************************************************\n");
        printf("*\t\t1.录入学生信息\t\t\t*\n");
printf("*\t\t2.打印学生信息\t\t\t*\n");
printf("*\t\t3.保存学生信息\t\t\t*\n");
printf("*\t\t4.读取学生信息\t\t\t*\n");
printf("*\t\t5.统计所有学生信息\t\t\*\n");
printf("*\t\t6.查找学生信息\t\t\t*\n");
printf("*\t\t7.修改学生信息\t\t\t*\n");
printf("*\t\t8.删除学生信息\t\t\t*\n");
printf("*\t\t0。退出系统\t\t\t*\n");
printf("*************************************************\n");
}

//录入学生信息
void InputStudent()
{
    //创建一个新节点
    Node* pNewNode = (Node*)malloc(sizeof(Node));
    pNewNode->pNext = NULL;

    //头插法、尾插法
    //头插法
    if (g_pHead == NULL)
    {
        g_pHead = pNewNode;
    }
    else
    {
        pNewNode->pNext = g_pHead;
        g_pHead = pNewNode;
    }

    printf("请输入学生姓名:\n");
    scanf("%s", &pNewNode->stu.name);//从键盘接收一个字符串,整数等等
    printf("请输入学生的年龄:\n");
    scanf("%d", &pNewNode->stu.age);//&:取地址运算符
    printf("请输入学生的学号:\n");
    scanf("%d", &pNewNode->stu.stuNum);
    printf("请输入学生的成绩:\n");
    scanf("%d", &pNewNode->stu.score);

    printf("学生信息录入成功\n");
    system("pause");    //暂停
    system("cls");        //清屏
}

//打印学生信息
void PrintfStudent()
{
    system("cls");    //清屏
    printf("*************************************************************\n");
    printf("*\t欢迎使用高校学生成绩管理系统v1.0\t\t    *\n");
    printf("*************************************************************\n");
    printf("*\t学号\t*\t姓名\t*\t年龄\t*\t成绩*\n");
    printf("*************************************************************\n");

    //遍历列表
    Node* p = g_pHead;
    while (p != NULL)
    {
        printf("*\t%d\t*\t%s\t*\t%d\t*\t%d*\n",
            p->stu.stuNum,
            p->stu.name,
            p->stu.age,
            p->stu.score);

        p = p->pNext;
    }
    printf("*************************************************************\n");
    system("pause");    //暂停
    system("cls");        //清屏
}
//保存学生信息
void SaveStudent()
{
    //打开文件
    FILE *fp = fopen("F:\C语言\stuinfo.data", "w");

    if (fp == NULL)
    {
        printf("打开文件失败\n");
        return;
    }
    //遍历列表
    Node* p = g_pHead;
    while (p != NULL)
    {
        fwrite(&p->stu, 1, sizeof(Student), fp);
        p = p->pNext;
    }
    //关闭文件
    fclose(fp);
    printf("保存文件成功\n");
    system("pause");    //暂停
    system("cls");        //清屏
}
//读取学生信息
void ReadStudent()
{
    //打开文件
    FILE *fp=fopen("F:\C语言\stuinfo.data", "r");
    if (fp == NULL)
    {
        printf("打开文件失败\n");
        return;
    }
    //读取文件
    Student stu;
    while (fread(&stu, 1, sizeof(Student), fp))
    {
        //创建一个新节点
        Node* pNewNode = (Node*)malloc(sizeof(Node));
        
        pNewNode->pNext = NULL;

        memcpy(pNewNode,&stu, sizeof(Student));
        //头插法
        if (g_pHead == NULL)
        {
            g_pHead = pNewNode;
        }
        else
        {
            pNewNode->pNext = g_pHead;
            g_pHead = pNewNode;
        }
    }

    //关闭文件
    fclose(fp);
    printf("加载数据成功\n");
    system("pause");    //暂停
    system("cls");        //清屏
}
int CountStudent()
{
    int nCount = 0;//学生总数

    //遍历列表
    Node* p = g_pHead;
    while (p != NULL)
    {
        nCount++;
        p = p->pNext;
    }
    return nCount;
}
//查找学生
Node* FindStudent()
{
    int nStuNum;
    char szName[20];
    printf("请输入要查找的学生的学号:\n");
    scanf("%d",&nStuNum);

    printf("请输入要查找的学生的姓名:\n");
    scanf("%s",szName);

    Node* p = g_pHead;
    while (p != NULL)
    {
        //strcmp字符串比较函数
        if (p->stu.stuNum == nStuNum || 0 == strcmp(p->stu.name, szName))
        {
            return p;
        }
        p = p->pNext;
    }
    return NULL;
}
//修改学生信息
void ModifyStudent()
{
    int nStuNum;
    printf("请输入需要修改的学生信息的学号:\n");
    scanf("%d", &nStuNum);
    Node* p = g_pHead;
    while (p != NULL)
    {
        //strcmp字符串比较函数
        if (p->stu.stuNum == nStuNum )
        {
            printf("请输入要修改的学生姓名 年龄 成绩:\n");
            scanf("%s %d %d", p->stu.name,&p->stu.age,&p->stu.score);
            printf("修改成功\n");
            break;
        }
        p = p->pNext;
    }
    if (p == NULL)
    {
        printf("没有找到该学生信息\n");
    }
    system("pause");    //暂停
    system("cls");        //清屏
}
void DeleteStudent()
{
    int nStuNum;
    printf("请输入要删除的学生的学号:\n");
    scanf("%d", &nStuNum);

    Node* p1, *p2;
    //判断是不是头节点
    if (g_pHead->stu.stuNum == nStuNum)
    {
        p1 = g_pHead;
        g_pHead = g_pHead->pNext;
        free(p1);
        return;
    }
    //不是头节点
    Node* p = g_pHead;
    while (p->pNext != NULL)
    {
        if (p->pNext->stu.stuNum == nStuNum)
        {
            p2 = p->pNext;
            p->pNext = p->pNext->pNext;
            free(p2);
            system("pause");    //暂停
            system("cls");        //清屏
            return;
        }

        p = p->pNext;
        if (p->pNext == NULL)
        {
            break;
        }
    }

    if (p->pNext == NULL)
    {
        printf("没有找到该学员");
    }
    system("pause");    //暂停
    system("cls");        //清屏
}

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1324362.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-12
下一篇 2022-06-12

发表评论

登录后才能评论

评论列表(0条)

保存