学生管理系统C语言

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
 
/*
    1、界面
    2、数据结构设计
    3、交互    
*/
typedef struct {
    char name[200];
    int age;
    char sex[5];
    int grade;
    char phoneNum[200];
}student;
//链表
typedef struct Node{
//    int data;
    student data;
    struct Node* next;
}Node,*LinkList;

//创建链表
LinkList createList(){
    LinkList headNode=(LinkList)malloc(sizeof(Node));
    headNode->next=NULL;
    return headNode;
}
//创建结点    
Node* createNode(student data){
    Node* p=(Node*)malloc(sizeof(Node));
    p->data=data;
    p->next=NULL;
    return p;
}
//插入结点
void insertNodeByHead(LinkList headNode,student data){
    Node* p=createNode(data);
    p->next=headNode->next;
    headNode->next=p;
}
//删除指定数据,按姓名
Node* deleteNode(LinkList headNode,char* name){
    Node* p=headNode->next;
    Node* pre=headNode;
    if(name==NULL){
        printf("数据为空,删除失败!\n");
        return NULL;
    }
    while(p){
        if(strcmp(p->data.name,name)==0){
            pre->next=p->next;
            free(p);
            return;
        }
        pre=p;
        p=pre->next;
    }
    return p;
}
//查找基于值,按姓名
Node* searchByData(LinkList headNode,char* name){
    Node* p=headNode->next;
    Node* pre=headNode;
    if(name==NULL){
        printf("数据为空,查找失败!\n");
        return NULL;
    }
    while(p){
        if(strcmp(p->data.name,name)==0){
            return p;
        }
        pre=p;
        p=pre->next;
    }
    return p;
}
 
//打印链表
void printList(LinkList headNode){
//    printf("11111111111111111");
    Node* p=headNode->next;
    printf("姓名\t年龄\t性别\t成绩\t电话\n");
    while(p!=NULL){
        printf("打印");
        printf("%s\t%d\t%s\t%d\t%s\n",p->data.name,p->data.age,p->data.sex,p->data.grade,p->data.phoneNum);
        p=p->next;
    }
    printf("\n");
}

//菜单
void menu(){
    printf("------------【学生信息管理系统】------------\n");
    printf("\t\t0.退出系统\n");
    printf("\t\tl.录入信息\n");
    printf("\t\t2.浏览信息\n");
    printf("\t\t3.修改信息\n");
    printf("\t\t4.删除信息\n");
    printf("\t\t5.查找信息\n");
    printf("--------------------------------------------\n");
}

LinkList list;

//交互
void keyDown(){
    list=createList();
    int choose=0;
    student data;
//    data.name='lili';
//    data.age=21;
//    data.sex='男';
//    data.grade=90;
//    data.phoneNum='17674749585';

//    insertNodeByHead(list,data);
//    printList(list);
    
    
a:    printf("请输入要执行的操作代码:");
    scanf("%d",&choose);
    switch(choose){
        case 0:
            printf("正常退出!\n");
            system("pause");
            exit(0);
            break;
        case 1:
            printf("------------【录入信息】------------\n");
            printf("请分别输入学生的姓名,年龄,性别,成绩,电话:");
            fflush(stdin);
            scanf("%s%d%s%d%s",&data.name,&data.age,&data.sex,&data.grade,&data.phoneNum);
//            printf("%d",data.age);
            insertNodeByHead(list,data);
            goto a;
            break;
        case 2:
            printf("------------【浏览信息】------------\n");
            printList(list);
            goto a;
            break;
        case 3:
            printf("------------【修改信息】------------\n");
            goto a;
            break;
        case 4:
            printf("------------【删除信息】------------\n");
            goto a;
            break;
        case 5:
            printf("------------【查找信息】------------\n");
            goto a;
            break;
        default:
            printf("操作代码错误,请重新输入!\n");
            system("pause");
            goto a;
            break;
    }
}


int main() {
    
    menu();
    while(1){
        keyDown();
    }
    system("pause");
    system("cls");
//链表的测试
//    LinkList L=createList();
//    insertNodeByHead(L,1);
//    insertNodeByHead(L,4);
//    insertNodeByHead(L,5);
//    insertNodeByHead(L,8);
//    insertNodeByHead(L,10);
//    printList(L);
//    printf("删除指定数据:4\n");
//    deleteNode(L,4);
//    printList(L);
//    printf("链表查找:8\n");
//    printf("%d\n",searchByData(L,8)->data);
//    system("pause");     
    return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值