千家信息网

基于C语言如何实现学生管理系统

发表于:2024-11-17 作者:千家信息网编辑
千家信息网最后更新 2024年11月17日,本篇内容主要讲解"基于C语言如何实现学生管理系统",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"基于C语言如何实现学生管理系统"吧!1.目标要求:1.学生成
千家信息网最后更新 2024年11月17日基于C语言如何实现学生管理系统

本篇内容主要讲解"基于C语言如何实现学生管理系统",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"基于C语言如何实现学生管理系统"吧!

1.目标要求:

1.学生成绩管理系统
2.可增、删、改、查、浏览
3.数据保存在文件中

2.C语言代码:

文件1:源文件

#include"mylist.h"//菜单设计 void menu(){    //所有文件都同步到文件     printf("-------------【学生管理信息】-------------------\n");    printf("\t\t0.退出系统\n");    printf("\t\t1.录入信息\n");    printf("\t\t2.浏览信息\n");    printf("\t\t3.修改信息\n");    printf("\t\t4.删除信息\n");    printf("\t\t5.查找信息\n");    printf("------------------------------------------------\n");    }struct Node* list;//用户的交互//根据所选的菜单项,作相应的事情 void keyDown(){        int choice = 0;    struct student data;    struct Node* pMove = NULL;    scanf("%d",&choice);    switch(choice){        case 0:            printf("正常退出!\n");            system("pause");            exit(0);            break;        case 1:            printf("-------------录入信息-------------------\n");            //插入链表             fflush(stdin);    //清空缓冲区!!!!!!!!!             printf("请输入学生的\n姓名、年龄、性别、电话:\n");            scanf("%s%d%s%s",data.name,&data.age,data.sex,data.tel);            insertNodeByHead(list,data);             break;        case 2:            printf("-------------浏览信息-------------------\n");            printList(list);    //打印链表            break;        case 3:            printf("-------------修改信息-------------------\n");            printf("请输入要修改信息的学生姓名:");            scanf("%s",data.name);            reviseInfoByData(list,data.name);             break;        case 4:            printf("-------------删除信息-------------------\n");            printf("请输入删除学生的姓名:");            scanf("%s",data.name);            deleteNode(list,data.name);            break;        case 5:            printf("-------------查找信息-------------------\n");            printf("请输入要查找学生的姓名:");            scanf("%s",data.name);            if( pMove = searchInfoByData(list,data.name)){                printf("姓名\t年龄\t性别\t电话\n");                 printf("%s\t%d\t%s\t%s\n",pMove->data.name,pMove->data.age,pMove->data.sex,pMove->data.tel);            }            break;        default:            printf("选择错误,重新输入\n");            system("pause");            break;     }    writeInfoToFile(list,"1.txt");} int main(){    list = createList();    readInfoFromFile(list,"1.txt");    while(1){                menu();        keyDown();        system("pause");        system("cls");    }     system("pause");    return 0;}

文件2:mylist.h

#include#include #include //数据的设计-----》学生信息抽象出struct student{    char name[20];    int age;    char sex[5];    char tel[20];    //    int math;//    int english;};//结构//测试的结构 struct Node{    struct student data;    struct Node* next;}; //创建表头 struct Node* createList(){    struct Node* headNode = (struct Node*)malloc(sizeof(struct Node));    headNode->next = NULL;    return headNode;}//创建节点 struct Node* createNode(struct student data){    struct Node* newNode = (struct Node*)malloc(sizeof(struct Node));    newNode->data = data;    newNode->next = NULL;    return newNode;} //插入结点(表头法)void insertNodeByHead(struct Node* headNode, struct student data){    struct Node* newNode = createNode(data);    newNode->next = headNode->next;     headNode->next = newNode;}//指定位置删除void deleteNode(struct Node* headNode,char* name){    struct Node* posFrontNode;    struct Node* posNode;    if(headNode->next == NULL){        printf("链表为空!\n");        return;     }    posFrontNode = headNode;    posNode = headNode->next;    while(posNode && strcmp(posNode->data.name,name)){        posFrontNode = posNode;        posNode = posFrontNode->next;    }    if(!posNode){        printf("您要删除的数据不存在!\n");         return;    }    if(!strcmp(posNode->data.name,name)){        posFrontNode->next = posNode->next;        free(posNode);    }} //查找功能struct Node* searchInfoByData(struct Node* headNode,char* name) {    struct Node* posNode;    if(headNode->next == NULL){        printf("链表为空!\n");        return NULL;     }    posNode = headNode->next;    while(posNode && strcmp(posNode->data.name,name)){;        posNode = posNode->next;    }    if(!posNode){        printf("您要查找的数据不存在!\n");         return NULL;    }    return posNode; }//修改功能void reviseInfoByData(struct Node* headNode,char* name) {    struct Node* posNode;    if(headNode->next == NULL){        printf("链表为空!\n");        return;     }    posNode = headNode->next;    while(posNode && strcmp(posNode->data.name,name)){;        posNode = posNode->next;    }    if(!posNode){        printf("您要修改的数据不存在!\n");         return;    }    printf("请输入学生[%s]的年龄、性别、电话:\n",posNode->data.name);    scanf("%d%s%s",&posNode->data.age,posNode->data.sex,posNode->data.tel);}//文件读操作void readInfoFromFile(struct Node* headNode,char* fileName){    //1.打开文件    FILE *fp;    struct student data;    fp = fopen(fileName,"r");    if(fp == NULL){        fopen(fileName,"w+");//打开文件具有创建功能     }    //2.读文件     while(fscanf(fp,"%s\t%d\t%s\t%s\n",data.name,&data.age,data.sex,data.tel)!=EOF){        insertNodeByHead(headNode,data);     }    //3.关闭文件    fclose(fp);}//文件写操作void writeInfoToFile(struct Node* headNode,char* fileName){    //1.打开文件    FILE *fp;    fp = fopen(fileName,"w");    struct Node* pMove = headNode->next;        //2.写文件     while(pMove){        fprintf(fp,"%s\t%d\t%s\t%s\n",pMove->data.name,pMove->data.age,pMove->data.sex,pMove->data.tel);        pMove = pMove->next;    }    //3.关闭文件    fclose(fp);}//打印链表void printList(struct Node* headNode){    struct Node* pMove = headNode->next;    //设计列数据的处理    printf("姓名\t年龄\t性别\t电话\n");     while(pMove){        printf("%s\t%d\t%s\t%s\n",pMove->data.name,pMove->data.age,pMove->data.sex,pMove->data.tel);        pMove = pMove->next;    }    printf("\n");}

3.运行结果:

到此,相信大家对"基于C语言如何实现学生管理系统"有了更深的了解,不妨来实际操作一番吧!这里是网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

0